Skip to content

Commit c529187

Browse files
LorenzoBianconikuba-moo
authored andcommitted
net: airoha: npu: Move memory allocation in airoha_npu_send_msg() caller
Move ppe_mbox_data struct memory allocation from airoha_npu_send_msg routine to the caller one. This is a preliminary patch to enable wlan NPU offloading and flow counter stats support. Signed-off-by: Lorenzo Bianconi <[email protected]> Reviewed-by: Simon Horman <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 7f7c6bb commit c529187

File tree

1 file changed

+72
-54
lines changed

1 file changed

+72
-54
lines changed

drivers/net/ethernet/airoha/airoha_npu.c

Lines changed: 72 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,12 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
124124
u16 core = 0; /* FIXME */
125125
u32 val, offset = core << 4;
126126
dma_addr_t dma_addr;
127-
void *addr;
128127
int ret;
129128

130-
addr = kmemdup(p, size, GFP_ATOMIC);
131-
if (!addr)
132-
return -ENOMEM;
133-
134-
dma_addr = dma_map_single(npu->dev, addr, size, DMA_TO_DEVICE);
129+
dma_addr = dma_map_single(npu->dev, p, size, DMA_TO_DEVICE);
135130
ret = dma_mapping_error(npu->dev, dma_addr);
136131
if (ret)
137-
goto out;
132+
return ret;
138133

139134
spin_lock_bh(&npu->cores[core].lock);
140135

@@ -155,8 +150,6 @@ static int airoha_npu_send_msg(struct airoha_npu *npu, int func_id,
155150
spin_unlock_bh(&npu->cores[core].lock);
156151

157152
dma_unmap_single(npu->dev, dma_addr, size, DMA_TO_DEVICE);
158-
out:
159-
kfree(addr);
160153

161154
return ret;
162155
}
@@ -261,76 +254,101 @@ static irqreturn_t airoha_npu_wdt_handler(int irq, void *core_instance)
261254

262255
static int airoha_npu_ppe_init(struct airoha_npu *npu)
263256
{
264-
struct ppe_mbox_data ppe_data = {
265-
.func_type = NPU_OP_SET,
266-
.func_id = PPE_FUNC_SET_WAIT_HWNAT_INIT,
267-
.init_info = {
268-
.ppe_type = PPE_TYPE_L2B_IPV4_IPV6,
269-
.wan_mode = QDMA_WAN_ETHER,
270-
},
271-
};
257+
struct ppe_mbox_data *ppe_data;
258+
int err;
259+
260+
ppe_data = kzalloc(sizeof(*ppe_data), GFP_KERNEL);
261+
if (!ppe_data)
262+
return -ENOMEM;
272263

273-
return airoha_npu_send_msg(npu, NPU_FUNC_PPE, &ppe_data,
274-
sizeof(struct ppe_mbox_data));
264+
ppe_data->func_type = NPU_OP_SET;
265+
ppe_data->func_id = PPE_FUNC_SET_WAIT_HWNAT_INIT;
266+
ppe_data->init_info.ppe_type = PPE_TYPE_L2B_IPV4_IPV6;
267+
ppe_data->init_info.wan_mode = QDMA_WAN_ETHER;
268+
269+
err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
270+
sizeof(*ppe_data));
271+
kfree(ppe_data);
272+
273+
return err;
275274
}
276275

277276
static int airoha_npu_ppe_deinit(struct airoha_npu *npu)
278277
{
279-
struct ppe_mbox_data ppe_data = {
280-
.func_type = NPU_OP_SET,
281-
.func_id = PPE_FUNC_SET_WAIT_HWNAT_DEINIT,
282-
};
278+
struct ppe_mbox_data *ppe_data;
279+
int err;
280+
281+
ppe_data = kzalloc(sizeof(*ppe_data), GFP_KERNEL);
282+
if (!ppe_data)
283+
return -ENOMEM;
284+
285+
ppe_data->func_type = NPU_OP_SET;
286+
ppe_data->func_id = PPE_FUNC_SET_WAIT_HWNAT_DEINIT;
283287

284-
return airoha_npu_send_msg(npu, NPU_FUNC_PPE, &ppe_data,
285-
sizeof(struct ppe_mbox_data));
288+
err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
289+
sizeof(*ppe_data));
290+
kfree(ppe_data);
291+
292+
return err;
286293
}
287294

288295
static int airoha_npu_ppe_flush_sram_entries(struct airoha_npu *npu,
289296
dma_addr_t foe_addr,
290297
int sram_num_entries)
291298
{
292-
struct ppe_mbox_data ppe_data = {
293-
.func_type = NPU_OP_SET,
294-
.func_id = PPE_FUNC_SET_WAIT_API,
295-
.set_info = {
296-
.func_id = PPE_SRAM_RESET_VAL,
297-
.data = foe_addr,
298-
.size = sram_num_entries,
299-
},
300-
};
299+
struct ppe_mbox_data *ppe_data;
300+
int err;
301+
302+
ppe_data = kzalloc(sizeof(*ppe_data), GFP_KERNEL);
303+
if (!ppe_data)
304+
return -ENOMEM;
305+
306+
ppe_data->func_type = NPU_OP_SET;
307+
ppe_data->func_id = PPE_FUNC_SET_WAIT_API;
308+
ppe_data->set_info.func_id = PPE_SRAM_RESET_VAL;
309+
ppe_data->set_info.data = foe_addr;
310+
ppe_data->set_info.size = sram_num_entries;
311+
312+
err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
313+
sizeof(*ppe_data));
314+
kfree(ppe_data);
301315

302-
return airoha_npu_send_msg(npu, NPU_FUNC_PPE, &ppe_data,
303-
sizeof(struct ppe_mbox_data));
316+
return err;
304317
}
305318

306319
static int airoha_npu_foe_commit_entry(struct airoha_npu *npu,
307320
dma_addr_t foe_addr,
308321
u32 entry_size, u32 hash, bool ppe2)
309322
{
310-
struct ppe_mbox_data ppe_data = {
311-
.func_type = NPU_OP_SET,
312-
.func_id = PPE_FUNC_SET_WAIT_API,
313-
.set_info = {
314-
.data = foe_addr,
315-
.size = entry_size,
316-
},
317-
};
323+
struct ppe_mbox_data *ppe_data;
318324
int err;
319325

320-
ppe_data.set_info.func_id = ppe2 ? PPE2_SRAM_SET_ENTRY
321-
: PPE_SRAM_SET_ENTRY;
326+
ppe_data = kzalloc(sizeof(*ppe_data), GFP_ATOMIC);
327+
if (!ppe_data)
328+
return -ENOMEM;
329+
330+
ppe_data->func_type = NPU_OP_SET;
331+
ppe_data->func_id = PPE_FUNC_SET_WAIT_API;
332+
ppe_data->set_info.data = foe_addr;
333+
ppe_data->set_info.size = entry_size;
334+
ppe_data->set_info.func_id = ppe2 ? PPE2_SRAM_SET_ENTRY
335+
: PPE_SRAM_SET_ENTRY;
322336

323-
err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, &ppe_data,
324-
sizeof(struct ppe_mbox_data));
337+
err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
338+
sizeof(*ppe_data));
325339
if (err)
326-
return err;
340+
goto out;
341+
342+
ppe_data->set_info.func_id = PPE_SRAM_SET_VAL;
343+
ppe_data->set_info.data = hash;
344+
ppe_data->set_info.size = sizeof(u32);
327345

328-
ppe_data.set_info.func_id = PPE_SRAM_SET_VAL;
329-
ppe_data.set_info.data = hash;
330-
ppe_data.set_info.size = sizeof(u32);
346+
err = airoha_npu_send_msg(npu, NPU_FUNC_PPE, ppe_data,
347+
sizeof(*ppe_data));
348+
out:
349+
kfree(ppe_data);
331350

332-
return airoha_npu_send_msg(npu, NPU_FUNC_PPE, &ppe_data,
333-
sizeof(struct ppe_mbox_data));
351+
return err;
334352
}
335353

336354
struct airoha_npu *airoha_npu_get(struct device *dev)

0 commit comments

Comments
 (0)