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>pull/1354/merge
parent
41139125f5
commit
306b78f503
|
|
@ -656,6 +656,27 @@ static bool airoha_ppe_foe_compare_entry(struct airoha_flow_table_entry *e,
|
|||
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)
|
||||
|
|
@ -685,13 +706,8 @@ static int airoha_ppe_foe_commit_entry(struct airoha_ppe *ppe,
|
|||
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();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue