* [PATCH net v3 0/2] net: airoha: Improve hwfd buffer/descriptor queues setup
@ 2025-06-18 7:48 Lorenzo Bianconi
2025-06-18 7:48 ` [PATCH net v3 1/2] net: airoha: Compute number of descriptors according to reserved memory size Lorenzo Bianconi
2025-06-18 7:48 ` [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1 Lorenzo Bianconi
0 siblings, 2 replies; 6+ messages in thread
From: Lorenzo Bianconi @ 2025-06-18 7:48 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: linux-arm-kernel, linux-mediatek, netdev, Lorenzo Bianconi
Compute the number of hwfd buffers/descriptors according to the reserved
memory size if provided via DTS.
Reduce the required hwfd buffers queue size for QDMA1.
---
Changes in v3:
- Target net tree instead of net-next one
Changes in v2:
- Rely on div_u64 to compute number of hw descriptors
- Link to v1: https://lore.kernel.org/r/20250615-airoha-hw-num-desc-v1-0-8f88daa4abd7@kernel.org
---
Lorenzo Bianconi (2):
net: airoha: Compute number of descriptors according to reserved memory size
net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1
drivers/net/ethernet/airoha/airoha_eth.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
---
base-commit: 0aff00432cc755ad7713f8a2f305395d443cdd4c
change-id: 20250618-airoha-hw-num-desc-6f5b6f9f85ae
Best regards,
--
Lorenzo Bianconi <lorenzo@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH net v3 1/2] net: airoha: Compute number of descriptors according to reserved memory size
2025-06-18 7:48 [PATCH net v3 0/2] net: airoha: Improve hwfd buffer/descriptor queues setup Lorenzo Bianconi
@ 2025-06-18 7:48 ` Lorenzo Bianconi
2025-06-18 16:34 ` Simon Horman
2025-06-18 7:48 ` [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1 Lorenzo Bianconi
1 sibling, 1 reply; 6+ messages in thread
From: Lorenzo Bianconi @ 2025-06-18 7:48 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: linux-arm-kernel, linux-mediatek, netdev, Lorenzo Bianconi
In order to not exceed the reserved memory size for hwfd buffers,
compute the number of hwfd buffers/descriptors according to the
reserved memory size and the size of each hwfd buffer (2KB).
Fixes: 3a1ce9e3d01b ("net: airoha: Add the capability to allocate hwfd buffers via reserved-memory")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/airoha/airoha_eth.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c
index a7ec609d64dee9c8e901c7eb650bb3fe144ee00a..1b7fd7ee0cbf3e1f7717110c70e9c5183fdd93d4 100644
--- a/drivers/net/ethernet/airoha/airoha_eth.c
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
@@ -1065,19 +1065,13 @@ static void airoha_qdma_cleanup_tx_queue(struct airoha_queue *q)
static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
{
+ int size, index, num_desc = HW_DSCP_NUM;
struct airoha_eth *eth = qdma->eth;
int id = qdma - ð->qdma[0];
dma_addr_t dma_addr;
const char *name;
- int size, index;
u32 status;
- size = HW_DSCP_NUM * sizeof(struct airoha_qdma_fwd_desc);
- if (!dmam_alloc_coherent(eth->dev, size, &dma_addr, GFP_KERNEL))
- return -ENOMEM;
-
- airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr);
-
name = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d-buf", id);
if (!name)
return -ENOMEM;
@@ -1099,8 +1093,12 @@ static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
rmem = of_reserved_mem_lookup(np);
of_node_put(np);
dma_addr = rmem->base;
+ /* Compute the number of hw descriptors according to the
+ * reserved memory size and the payload buffer size
+ */
+ num_desc = rmem->size / AIROHA_MAX_PACKET_SIZE;
} else {
- size = AIROHA_MAX_PACKET_SIZE * HW_DSCP_NUM;
+ size = AIROHA_MAX_PACKET_SIZE * num_desc;
if (!dmam_alloc_coherent(eth->dev, size, &dma_addr,
GFP_KERNEL))
return -ENOMEM;
@@ -1108,6 +1106,11 @@ static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
airoha_qdma_wr(qdma, REG_FWD_BUF_BASE, dma_addr);
+ size = num_desc * sizeof(struct airoha_qdma_fwd_desc);
+ if (!dmam_alloc_coherent(eth->dev, size, &dma_addr, GFP_KERNEL))
+ return -ENOMEM;
+
+ airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr);
airoha_qdma_rmw(qdma, REG_HW_FWD_DSCP_CFG,
HW_FWD_DSCP_PAYLOAD_SIZE_MASK,
FIELD_PREP(HW_FWD_DSCP_PAYLOAD_SIZE_MASK, 0));
@@ -1116,7 +1119,7 @@ static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
airoha_qdma_rmw(qdma, REG_LMGR_INIT_CFG,
LMGR_INIT_START | LMGR_SRAM_MODE_MASK |
HW_FWD_DESC_NUM_MASK,
- FIELD_PREP(HW_FWD_DESC_NUM_MASK, HW_DSCP_NUM) |
+ FIELD_PREP(HW_FWD_DESC_NUM_MASK, num_desc) |
LMGR_INIT_START | LMGR_SRAM_MODE_MASK);
return read_poll_timeout(airoha_qdma_rr, status,
--
2.49.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1
2025-06-18 7:48 [PATCH net v3 0/2] net: airoha: Improve hwfd buffer/descriptor queues setup Lorenzo Bianconi
2025-06-18 7:48 ` [PATCH net v3 1/2] net: airoha: Compute number of descriptors according to reserved memory size Lorenzo Bianconi
@ 2025-06-18 7:48 ` Lorenzo Bianconi
2025-06-18 16:35 ` Simon Horman
1 sibling, 1 reply; 6+ messages in thread
From: Lorenzo Bianconi @ 2025-06-18 7:48 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Simon Horman
Cc: linux-arm-kernel, linux-mediatek, netdev, Lorenzo Bianconi
In oreder to reduce the required hwfd buffers queue size for QDMA1,
differentiate hwfd buffer size for QDMA0 and QDMA1 and use 2KB for QDMA0
and 1KB for QDMA1.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/net/ethernet/airoha/airoha_eth.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/airoha/airoha_eth.c b/drivers/net/ethernet/airoha/airoha_eth.c
index 1b7fd7ee0cbf3e1f7717110c70e9c5183fdd93d4..06dea3a13e77ce11f35dbd36966a34c5ef229c11 100644
--- a/drivers/net/ethernet/airoha/airoha_eth.c
+++ b/drivers/net/ethernet/airoha/airoha_eth.c
@@ -1068,14 +1068,15 @@ static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
int size, index, num_desc = HW_DSCP_NUM;
struct airoha_eth *eth = qdma->eth;
int id = qdma - ð->qdma[0];
+ u32 status, buf_size;
dma_addr_t dma_addr;
const char *name;
- u32 status;
name = devm_kasprintf(eth->dev, GFP_KERNEL, "qdma%d-buf", id);
if (!name)
return -ENOMEM;
+ buf_size = id ? AIROHA_MAX_PACKET_SIZE / 2 : AIROHA_MAX_PACKET_SIZE;
index = of_property_match_string(eth->dev->of_node,
"memory-region-names", name);
if (index >= 0) {
@@ -1096,9 +1097,9 @@ static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
/* Compute the number of hw descriptors according to the
* reserved memory size and the payload buffer size
*/
- num_desc = rmem->size / AIROHA_MAX_PACKET_SIZE;
+ num_desc = div_u64(rmem->size, buf_size);
} else {
- size = AIROHA_MAX_PACKET_SIZE * num_desc;
+ size = buf_size * num_desc;
if (!dmam_alloc_coherent(eth->dev, size, &dma_addr,
GFP_KERNEL))
return -ENOMEM;
@@ -1111,9 +1112,10 @@ static int airoha_qdma_init_hfwd_queues(struct airoha_qdma *qdma)
return -ENOMEM;
airoha_qdma_wr(qdma, REG_FWD_DSCP_BASE, dma_addr);
+ /* QDMA0: 2KB. QDMA1: 1KB */
airoha_qdma_rmw(qdma, REG_HW_FWD_DSCP_CFG,
HW_FWD_DSCP_PAYLOAD_SIZE_MASK,
- FIELD_PREP(HW_FWD_DSCP_PAYLOAD_SIZE_MASK, 0));
+ FIELD_PREP(HW_FWD_DSCP_PAYLOAD_SIZE_MASK, !!id));
airoha_qdma_rmw(qdma, REG_FWD_DSCP_LOW_THR, FWD_DSCP_LOW_THR_MASK,
FIELD_PREP(FWD_DSCP_LOW_THR_MASK, 128));
airoha_qdma_rmw(qdma, REG_LMGR_INIT_CFG,
--
2.49.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net v3 1/2] net: airoha: Compute number of descriptors according to reserved memory size
2025-06-18 7:48 ` [PATCH net v3 1/2] net: airoha: Compute number of descriptors according to reserved memory size Lorenzo Bianconi
@ 2025-06-18 16:34 ` Simon Horman
0 siblings, 0 replies; 6+ messages in thread
From: Simon Horman @ 2025-06-18 16:34 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, linux-arm-kernel, linux-mediatek, netdev
On Wed, Jun 18, 2025 at 09:48:04AM +0200, Lorenzo Bianconi wrote:
> In order to not exceed the reserved memory size for hwfd buffers,
> compute the number of hwfd buffers/descriptors according to the
> reserved memory size and the size of each hwfd buffer (2KB).
>
> Fixes: 3a1ce9e3d01b ("net: airoha: Add the capability to allocate hwfd buffers via reserved-memory")
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1
2025-06-18 7:48 ` [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1 Lorenzo Bianconi
@ 2025-06-18 16:35 ` Simon Horman
2025-06-19 7:15 ` Lorenzo Bianconi
0 siblings, 1 reply; 6+ messages in thread
From: Simon Horman @ 2025-06-18 16:35 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, linux-arm-kernel, linux-mediatek, netdev
On Wed, Jun 18, 2025 at 09:48:05AM +0200, Lorenzo Bianconi wrote:
> In oreder to reduce the required hwfd buffers queue size for QDMA1,
nit: order
> differentiate hwfd buffer size for QDMA0 and QDMA1 and use 2KB for QDMA0
> and 1KB for QDMA1.
I think this patch description could benefit from explaining the why.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Code changes look good to me.
...
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1
2025-06-18 16:35 ` Simon Horman
@ 2025-06-19 7:15 ` Lorenzo Bianconi
0 siblings, 0 replies; 6+ messages in thread
From: Lorenzo Bianconi @ 2025-06-19 7:15 UTC (permalink / raw)
To: Simon Horman
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, linux-arm-kernel, linux-mediatek, netdev
[-- Attachment #1: Type: text/plain, Size: 543 bytes --]
On Jun 18, Simon Horman wrote:
> On Wed, Jun 18, 2025 at 09:48:05AM +0200, Lorenzo Bianconi wrote:
> > In oreder to reduce the required hwfd buffers queue size for QDMA1,
>
> nit: order
>
> > differentiate hwfd buffer size for QDMA0 and QDMA1 and use 2KB for QDMA0
> > and 1KB for QDMA1.
>
> I think this patch description could benefit from explaining the why.
ack, I will fix it in v4.
Regards,
Lorenzo
>
> >
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
>
> Code changes look good to me.
>
> ...
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-06-19 7:52 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-18 7:48 [PATCH net v3 0/2] net: airoha: Improve hwfd buffer/descriptor queues setup Lorenzo Bianconi
2025-06-18 7:48 ` [PATCH net v3 1/2] net: airoha: Compute number of descriptors according to reserved memory size Lorenzo Bianconi
2025-06-18 16:34 ` Simon Horman
2025-06-18 7:48 ` [PATCH net v3 2/2] net: airoha: Differentiate hwfd buffer size for QDMA0 and QDMA1 Lorenzo Bianconi
2025-06-18 16:35 ` Simon Horman
2025-06-19 7:15 ` Lorenzo Bianconi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).