Refreshed automatically with `make target/linux/refresh V=s`. Signed-off-by: Kenneth Kasilag <kenneth@kasilag.me> Link: https://github.com/openwrt/openwrt/pull/21019 Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
66 lines
2.3 KiB
Diff
66 lines
2.3 KiB
Diff
From 306b78f5035af4bd011753c5a6b12812515caa6c Mon Sep 17 00:00:00 2001
|
|
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Date: Fri, 17 Oct 2025 11:06:17 +0200
|
|
Subject: [PATCH 07/12] net: airoha: ppe: Configure SRAM PPE entries via the
|
|
cpu
|
|
|
|
Introduce airoha_ppe_foe_commit_sram_entry routine in order to configure
|
|
the SRAM PPE entries directly via the CPU instead of using the NPU APIs.
|
|
This is a preliminary patch to enable netfilter flowtable hw offload for
|
|
AN7583 SoC.
|
|
|
|
Reviewed-by: Simon Horman <horms@kernel.org>
|
|
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Link: https://patch.msgid.link/20251017-an7583-eth-support-v3-8-f28319666667@kernel.org
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
---
|
|
drivers/net/ethernet/airoha/airoha_ppe.c | 30 ++++++++++++++++++------
|
|
1 file changed, 23 insertions(+), 7 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/airoha/airoha_ppe.c
|
|
+++ b/drivers/net/ethernet/airoha/airoha_ppe.c
|
|
@@ -669,6 +669,27 @@ static bool airoha_ppe_foe_compare_entry
|
|
return !memcmp(&e->data.d, &hwe->d, len - sizeof(hwe->ib1));
|
|
}
|
|
|
|
+static int airoha_ppe_foe_commit_sram_entry(struct airoha_ppe *ppe, u32 hash)
|
|
+{
|
|
+ struct airoha_foe_entry *hwe = ppe->foe + hash * sizeof(*hwe);
|
|
+ bool ppe2 = hash >= PPE_SRAM_NUM_ENTRIES;
|
|
+ u32 *ptr = (u32 *)hwe, val;
|
|
+ int i;
|
|
+
|
|
+ for (i = 0; i < sizeof(*hwe) / sizeof(*ptr); i++)
|
|
+ airoha_fe_wr(ppe->eth, REG_PPE_RAM_ENTRY(ppe2, i), ptr[i]);
|
|
+
|
|
+ wmb();
|
|
+ airoha_fe_wr(ppe->eth, REG_PPE_RAM_CTRL(ppe2),
|
|
+ FIELD_PREP(PPE_SRAM_CTRL_ENTRY_MASK, hash) |
|
|
+ PPE_SRAM_CTRL_WR_MASK | PPE_SRAM_CTRL_REQ_MASK);
|
|
+
|
|
+ return read_poll_timeout_atomic(airoha_fe_rr, val,
|
|
+ val & PPE_SRAM_CTRL_ACK_MASK,
|
|
+ 10, 100, false, ppe->eth,
|
|
+ REG_PPE_RAM_CTRL(ppe2));
|
|
+}
|
|
+
|
|
static int airoha_ppe_foe_commit_entry(struct airoha_ppe *ppe,
|
|
struct airoha_foe_entry *e,
|
|
u32 hash, bool rx_wlan)
|
|
@@ -698,13 +719,8 @@ static int airoha_ppe_foe_commit_entry(s
|
|
if (!rx_wlan)
|
|
airoha_ppe_foe_flow_stats_update(ppe, npu, hwe, hash);
|
|
|
|
- if (hash < sram_num_entries) {
|
|
- dma_addr_t addr = ppe->foe_dma + hash * sizeof(*hwe);
|
|
- bool ppe2 = hash >= PPE_SRAM_NUM_ENTRIES;
|
|
-
|
|
- err = npu->ops.ppe_foe_commit_entry(npu, addr, sizeof(*hwe),
|
|
- hash, ppe2);
|
|
- }
|
|
+ if (hash < sram_num_entries)
|
|
+ err = airoha_ppe_foe_commit_sram_entry(ppe, hash);
|
|
unlock:
|
|
rcu_read_unlock();
|
|
|