* [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC
@ 2026-10-11 13:02 Luo Jie
2026-10-11 13:02 ` [PATCH net-next v2 01/11] dt-bindings: net: qcom,ipq9574-ppe: Split EDMA reset into sys and apb Luo Jie
` (11 more replies)
0 siblings, 12 replies; 20+ messages in thread
From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman,
Jonathan Corbet, Shuah Khan, Randy Dunlap
Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc,
quic_kkumarcs, quic_linchen, Luo Jie
This series adds support in the PPE driver for the IPQ5424 SoC.
IPQ5424 integrates the same PPE switch core as IPQ9574, but with a few
differences:
1.) It has 3 Ethernet ports plus 1 EDMA FIFO, instead of IPQ9574's 6 ports,
1 EDMA FIFO and 1 EIP FIFO.
2.) The PPE clock runs at 375 MHz instead of IPQ9574's 353 MHz.
3.) It requires a different, smaller set of interconnect paths.
4.) It uses different BM (buffer management), QM (queue management) and
scheduler configurations.
The first two patches are independent of the IPQ5424 support and correct
issues in the existing IPQ9574 support:
- Split the EDMA reset in the devicetree binding into the separate system
and APB resets.
- Fix the multicast queue configuration table access, which uses an
out-of-range index for every multicast queue on both IPQ9574 and
IPQ5424, and accesses 5 words per entry instead of 3.
The remaining patches add the IPQ5424 support:
- Add IPQ5424 to the devicetree binding.
- Document IPQ5424 as a supported SoC.
- Add the IPQ5424 platform data for the clock rate, port count, register
space and interconnect paths.
- Add the IPQ5424 BM buffer configuration.
- Add the IPQ5424 QM configuration.
- Add the IPQ5424 scheduler resource configuration.
- Add the IPQ5424 scheduler configuration.
- Add the IPQ5424 service code configuration.
- Add the IPQ5424 counters for debugfs.
Changes in v2:
- Drop the Fixes: tags from the first two patches, as they target
net-next and have no known user impact.
- Fix the multicast queue configuration entry size (5 words -> 3) in
the multicast queue fix patch, and update its subject.
- Match all Ethernet port nodes in the binding, so that out-of-range
ports are rejected by the reg limits.
- Collect the Reviewed-by tags.
- Link to v1: https://patch.msgid.link/20261008-qcom_ipq5424_ppe-v1-0-16caf43e44ee@oss.qualcomm.com
Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com>
---
Luo Jie (11):
dt-bindings: net: qcom,ipq9574-ppe: Split EDMA reset into sys and apb
net: ethernet: qualcomm: ppe: Fix multicast queue config table access
dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support
docs: networking: Document IPQ5424 as a supported SoC
net: ethernet: qualcomm: ppe: Add platform support for IPQ5424
net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration
net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration
net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler resource configuration
net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler configuration
net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration
net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support
.../devicetree/bindings/net/qcom,ipq9574-ppe.yaml | 102 ++++-
.../device_drivers/ethernet/qualcomm/ppe/ppe.rst | 8 +
drivers/net/ethernet/qualcomm/ppe/ppe.c | 137 +++++-
drivers/net/ethernet/qualcomm/ppe/ppe.h | 15 +
drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 469 +++++++++++++++++++--
drivers/net/ethernet/qualcomm/ppe/ppe_config.h | 4 +
drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c | 14 +-
drivers/net/ethernet/qualcomm/ppe/ppe_regs.h | 83 +++-
8 files changed, 742 insertions(+), 90 deletions(-)
---
base-commit: d8674294aefef02266c4d47ad10131f1bffbe534
change-id: 20261008-qcom_ipq5424_ppe-70b0ed41bf1e
Best regards,
--
Luo Jie <jie.luo@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH net-next v2 01/11] dt-bindings: net: qcom,ipq9574-ppe: Split EDMA reset into sys and apb 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 02/11] net: ethernet: qualcomm: ppe: Fix multicast queue config table access Luo Jie ` (10 subsequent siblings) 11 siblings, 0 replies; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie The EDMA reset is described in the binding as a single reset, but the hardware has two separate EDMA resets, the system reset and the APB reset. The reset used in the example is a combined reset that covers both of them. Describe the EDMA resets as two separate entries named "sys" and "apb", in the same way as the EDMA clocks, and update the example accordingly. The EDMA driver has not been merged upstream yet, and no in-tree device tree uses the ethernet-dma node, so there is no existing user of this binding and it is safe to update it without breaking the ABI. Reviewed-by: Rob Herring (Arm) <robh@kernel.org> Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- .../devicetree/bindings/net/qcom,ipq9574-ppe.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml b/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml index 6d0b21a10732..c899f4b56945 100644 --- a/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml +++ b/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml @@ -144,8 +144,14 @@ properties: - const: apb resets: - maxItems: 1 - description: EDMA reset + items: + - description: EDMA system reset + - description: EDMA APB reset + + reset-names: + items: + - const: sys + - const: apb interrupts: minItems: 65 @@ -170,6 +176,7 @@ properties: - clocks - clock-names - resets + - reset-names - interrupts - interrupt-names @@ -273,7 +280,10 @@ examples: <&nsscc NSS_CC_PPE_EDMA_CFG_CLK>; clock-names = "sys", "apb"; - resets = <&nsscc EDMA_HW_RESET>; + resets = <&nsscc PPE_EDMA_ARES>, + <&nsscc PPE_EDMA_CFG_ARES>; + reset-names = "sys", + "apb"; interrupts = <GIC_SPI 363 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 364 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 365 IRQ_TYPE_LEVEL_HIGH>, -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 02/11] net: ethernet: qualcomm: ppe: Fix multicast queue config table access 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 01/11] dt-bindings: net: qcom,ipq9574-ppe: Split EDMA reset into sys and apb Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 03/11] dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support Luo Jie ` (9 subsequent siblings) 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie PPE queues 0-255 are unicast queues and queues from 256 onwards are multicast queues. The multicast queue configuration table has its own index, starting from 0 for the first multicast queue, and each entry has 3 words. The driver uses the absolute queue ID as the index of this table, which is out of range for every multicast queue. As a result, the multicast queue thresholds are never configured, and unrelated QM registers are written instead. The driver also accesses 5 words per entry instead of 3. Fix it by converting the queue ID to the index of the multicast queue configuration table and accessing only the 3 words of the entry. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c index 125b73be92b1..2f4f59280647 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c @@ -1474,7 +1474,7 @@ static int ppe_config_qm(struct ppe_device *ppe_dev) { const struct ppe_qm_queue_config *queue_cfg; int ret, i, queue_id, queue_cfg_count; - u32 reg, multicast_queue_cfg[5]; + u32 reg, multicast_queue_cfg[3]; u32 unicast_queue_cfg[4]; u32 group_cfg[3]; @@ -1530,8 +1530,13 @@ static int ppe_config_qm(struct ppe_device *ppe_dev) if (ret) goto qm_config_fail; } else { + /* The multicast queue table is indexed from 0 for + * the first multicast queue, which follows the + * unicast queues. + */ reg = PPE_AC_MULTICAST_QUEUE_CFG_TBL_ADDR + - PPE_AC_MULTICAST_QUEUE_CFG_TBL_INC * queue_id; + PPE_AC_MULTICAST_QUEUE_CFG_TBL_INC * + (queue_id - PPE_AC_UNICAST_QUEUE_CFG_TBL_ENTRIES); ret = regmap_bulk_read(ppe_dev->regmap, reg, multicast_queue_cfg, -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 02/11] net: ethernet: qualcomm: ppe: Fix multicast queue config table access 2026-10-11 13:02 ` [PATCH net-next v2 02/11] net: ethernet: qualcomm: ppe: Fix multicast queue config table access Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] The commit "net: ethernet: qualcomm: ppe: Fix multicast queue config table access" fixes a real hardware misconfiguration bug in… -- net: ethernet: qualcomm: ppe: Fix multicast queue config table access This commit fixes ppe_config_qm() so that the multicast queue configuration table is indexed relative to the first multicast queue instead of by the absolute queue ID. It also shrinks multicast_queue_cfg[] from 5 to 3 words to match the table entry size. > Fix it by converting the queue ID to the index of the multicast queue > configuration table and accessing only the 3 words of the entry. > > Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> [Severity: Low] Should this have a Fixes: tag? Commit 806268dc7efd added both the multicast_queue_cfg[5] declaration and the absolute queue_id indexing: Fixes: 806268dc7efd ("net: ethernet: qualcomm: Initialize PPE queue management for IPQ9574") ipq9574_ppe_qm_queue_config[] covers multicast queues 256 to 299. That means kernels which already have the IPQ9574 PPE QM code take the broken else branch in ppe_config_qm() on every probe. Since this fixes code that is already merged, could it be sent on its own to net with the Fixes: tag, rather than as part of the IPQ5424 series? -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 03/11] dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 01/11] dt-bindings: net: qcom,ipq9574-ppe: Split EDMA reset into sys and apb Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 02/11] net: ethernet: qualcomm: ppe: Fix multicast queue config table access Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 04/11] docs: networking: Document IPQ5424 as a supported SoC Luo Jie ` (8 subsequent siblings) 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie IPQ5424 integrates the same PPE switch core as IPQ9574, but requires a different, smaller set of interconnect paths, and has only 3 front panel ports plus the EDMA FIFO interface, without the EIP FIFO. Add the IPQ5424 compatible, describe the interconnect paths of each SoC, and limit the Ethernet ports of IPQ5424 to ports 1-3. Also match all Ethernet port nodes, so that ports out of the supported range are rejected by the reg limits instead of being left unchecked. Reviewed-by: Rob Herring (Arm) <robh@kernel.org> Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- .../devicetree/bindings/net/qcom,ipq9574-ppe.yaml | 86 +++++++++++++++++----- 1 file changed, 69 insertions(+), 17 deletions(-) diff --git a/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml b/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml index c899f4b56945..96e9b9420892 100644 --- a/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml +++ b/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml @@ -74,9 +74,14 @@ description: | +------->| QCA8075 PHY | | PHY4 | | PHY5 | (clock) +-------------------------------------+ +-------+ +-------+ + The IPQ5424 PPE reuses the same switch core, but wires up only 3 + front panel ports (GMAC0-2) and the single EDMA FIFO interface; it + has no EIP FIFO and no ports 4-6. + properties: compatible: enum: + - qcom,ipq5424-ppe - qcom,ipq9574-ppe reg: @@ -105,24 +110,16 @@ properties: description: PPE switch miscellaneous interrupt interconnects: - items: - - description: Bus interconnect path leading to PPE switch core function - - description: Bus interconnect path leading to PPE register access - - description: Bus interconnect path leading to QoS generation - - description: Bus interconnect path leading to timeout reference - - description: Bus interconnect path leading to NSS NOC from memory NOC - - description: Bus interconnect path leading to memory NOC from NSS NOC - - description: Bus interconnect path leading to enhanced memory NOC from NSS NOC + minItems: 5 + maxItems: 7 + description: + The number of interconnect paths depends on compatible, 5 paths for + qcom,ipq5424-ppe and 7 paths for qcom,ipq9574-ppe, enumerated in the + allOf conditionals below. interconnect-names: - items: - - const: ppe - - const: ppe_cfg - - const: qos_gen - - const: timeout_ref - - const: nssnoc_memnoc - - const: memnoc_nssnoc - - const: memnoc_nssnoc_1 + minItems: 5 + maxItems: 7 ethernet-dma: type: object @@ -182,7 +179,7 @@ properties: ethernet-ports: patternProperties: - "^ethernet-port@[1-6]+$": + "^ethernet-port@[0-9a-f]+$": type: object unevaluatedProperties: false $ref: ethernet-switch-port.yaml# @@ -236,6 +233,61 @@ required: allOf: - $ref: ethernet-switch.yaml + - if: + properties: + compatible: + contains: + const: qcom,ipq9574-ppe + then: + properties: + interconnects: + items: + - description: Bus interconnect path leading to PPE switch core function + - description: Bus interconnect path leading to PPE register access + - description: Bus interconnect path leading to QoS generation + - description: Bus interconnect path leading to timeout reference + - description: Bus interconnect path leading to NSS NOC from memory NOC + - description: Bus interconnect path leading to memory NOC from NSS NOC + - description: Bus interconnect path leading to enhanced memory NOC from NSS NOC + + interconnect-names: + items: + - const: ppe + - const: ppe_cfg + - const: qos_gen + - const: timeout_ref + - const: nssnoc_memnoc + - const: memnoc_nssnoc + - const: memnoc_nssnoc_1 + - if: + properties: + compatible: + contains: + const: qcom,ipq5424-ppe + then: + properties: + interconnects: + items: + - description: Bus interconnect path leading to PPE switch core function + - description: Bus interconnect path leading to PPE register access + - description: Bus interconnect path leading to CE AXI + - description: Bus interconnect path leading to CE APB + - description: Bus interconnect path leading to NSS CSR access + + interconnect-names: + items: + - const: ppe + - const: ppe_cfg + - const: nssnoc_ce_axi + - const: nssnoc_ce_apb + - const: nssnoc_nss_csr + + ethernet-ports: + patternProperties: + "^ethernet-port@[0-9a-f]+$": + properties: + reg: + maximum: 3 unevaluatedProperties: false -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 03/11] dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support 2026-10-11 13:02 ` [PATCH net-next v2 03/11] dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider. Critical: 0 · High: 1 · Medium: 0 · Low: 1 If you believe none of the issues are legitimate, please reply to each issue of Medium severity or higher and explain why the AI is wrong. If any of them are legitimate and you plan to respin, please let patchwork know by including "pw-bot: cr" as a separate line at the end of your reply (one such reply per series is enough). - [High] The PPE port pattern still misses port nodes that ethernet- switch.yaml allows, so the patch does not deliver what its commit… - [Low] The new IPQ5424 paragraph in the binding description (qcom,ipq9574-ppe.yaml lines 77-79) calls the three front-panel MACs… -- dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support This patch adds the qcom,ipq5424-ppe compatible to the PPE binding and moves the interconnect lists into per-SoC allOf conditionals. It limits the IPQ5424 Ethernet port reg values to 3. It also widens the port node pattern so that out-of-range ports are checked against the reg limits. > diff --git a/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml b/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml > index c899f4b56945..96e9b9420892 100644 > --- a/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml > +++ b/Documentation/devicetree/bindings/net/qcom,ipq9574-ppe.yaml > @@ -74,9 +74,14 @@ description: | > +------->| QCA8075 PHY | | PHY4 | | PHY5 | > (clock) +-------------------------------------+ +-------+ +-------+ > > + The IPQ5424 PPE reuses the same switch core, but wires up only 3 > + front panel ports (GMAC0-2) and the single EDMA FIFO interface; it > + has no EIP FIFO and no ports 4-6. [Severity: Low] Is "GMAC0-2" accurate here? The IPQ9574 part of this description calls the front panel MACs "GMAC/XGMACs", and the IPQ5424 ports look XGMAC-capable too. drivers/clk/qcom/nsscc-ipq5424.c registers NSS_CC_XGMAC0_PTP_REF_CLK through NSS_CC_XGMAC2_PTP_REF_CLK, along with their resets. The IPQ5424 platform support patch in this series reserves only XGMAC3-5 in ppe_reserved_ranges_ipq5424, so XGMAC0-2 stay accessible. The companion documentation patch uses "MAC0 to MAC2". Would "MAC0-2" or "GMAC/XGMAC0-2" describe the hardware more accurately? [ ... ] > @@ -182,7 +179,7 @@ properties: > > ethernet-ports: > patternProperties: > - "^ethernet-port@[1-6]+$": > + "^ethernet-port@[0-9a-f]+$": > type: object > unevaluatedProperties: false > $ref: ethernet-switch-port.yaml# [Severity: High] The commit message says: Also match all Ethernet port nodes, so that ports out of the supported range are rejected by the reg limits instead of being left unchecked. Does this pattern match all the port nodes the schema accepts? The referenced ethernet-switch.yaml accepts both spellings for the container and for its children: Documentation/devicetree/bindings/net/ethernet-switch.yaml: patternProperties: '^(ethernet-)?ports$': type: object unevaluatedProperties: false ... patternProperties: '^(ethernet-)?port@[0-9a-f]+$': type: object description: Ethernet switch ports ... oneOf: - required: - ports - required: - ethernet-ports Take a qcom,ipq5424-ppe node with this child: ethernet-ports { port@5 { reg = <5>; }; }; The port@5 child seems to match only the generic "type: object" pattern in ethernet-switch.yaml. That means it counts as evaluated and passes unevaluatedProperties: false. None of the PPE port checks would run on it: - the reg minimum and maximum - the IPQ5424 "maximum: 3" limit - the required clocks and resets - the ethernet-switch-port.yaml reference A "ports { port@N { ... }; };" container would skip all of the PPE port checks in the same way. The new IPQ5424 conditional in allOf uses the same "^ethernet-port@[0-9a-f]+$" pattern, and only under ethernet-ports, so it has the same gap. Later patches in the series don't seem to change these patterns. Could both this pattern and the IPQ5424 conditional use '^(ethernet-)?ports$' and '^(ethernet-)?port@[0-9a-f]+$', as qca8k.yaml, mt7530.yaml and lan966x-switch.yaml do? [ ... ] -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 04/11] docs: networking: Document IPQ5424 as a supported SoC 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (2 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 03/11] dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 05/11] net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 Luo Jie ` (7 subsequent siblings) 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie Update the qualcomm PPE driver documentation to list IPQ5424 among the supported SoCs, and describe the per-SoC PPE hardware differences. The IPQ5424 PPE reuses the same switch core as IPQ9574, but runs at a clock rate of 375 MHz and supports only 3 front panel ports along with the EDMA FIFO port for host CPU communication. The EIP FIFO port is not available on IPQ5424. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- .../networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst b/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst index 4ab299a28969..04c48cec66d5 100644 --- a/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst +++ b/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst @@ -167,6 +167,14 @@ PPE Driver Supported SoCs The PPE driver supports the following IPQ SoC: - IPQ9574 + The PPE runs at a clock rate of 353 MHz. The switch core has 6 front panel + ports (port1 to port6) and two FIFO interfaces: the EDMA FIFO (port0) for + the host CPU communication and the EIP FIFO (port7) for the EIP engine. +- IPQ5424 + The PPE reuses the same switch core as IPQ9574 and runs at a clock rate of + 375 MHz. It supports 3 front panel ports (port1 to port3) with MAC0 to MAC2, + and only the EDMA FIFO interface (port0) for the host CPU communication. The + EIP FIFO and port4 to port6 are not available. Enabling the Driver -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 04/11] docs: networking: Document IPQ5424 as a supported SoC 2026-10-11 13:02 ` [PATCH net-next v2 04/11] docs: networking: Document IPQ5424 as a supported SoC Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] This finding is not valid; I'm keeping it here only because it is marked requires_validation=true. -- docs: networking: Document IPQ5424 as a supported SoC This commit adds IPQ5424 to the list of supported SoCs in the Qualcomm PPE driver documentation. It also describes how the two SoCs differ: IPQ9574 runs at 353 MHz with 6 front panel ports plus the EDMA and EIP FIFOs, and IPQ5424 runs at 375 MHz with 3 front panel ports and only the EDMA FIFO. > diff --git a/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst b/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst > index 4ab299a28969..04c48cec66d5 100644 > --- a/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst > +++ b/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst > @@ -167,6 +167,14 @@ PPE Driver Supported SoCs > The PPE driver supports the following IPQ SoC: > > - IPQ9574 > + The PPE runs at a clock rate of 353 MHz. The switch core has 6 front panel > + ports (port1 to port6) and two FIFO interfaces: the EDMA FIFO (port0) for > + the host CPU communication and the EIP FIFO (port7) for the EIP engine. > +- IPQ5424 > + The PPE reuses the same switch core as IPQ9574 and runs at a clock rate of > + 375 MHz. It supports 3 front panel ports (port1 to port3) with MAC0 to MAC2, [Severity: Low] This isn't a bug, but this patch documents IPQ5424 one patch before the driver supports it. At this commit, qcom_ppe_of_match in drivers/net/ethernet/qualcomm/ppe/ppe.c only matches "qcom,ipq9574-ppe". The clock rate and port count are still the fixed IPQ9574 values (353 MHz, 8 ports), and ppe_icc_data covers only IPQ9574. The next patch, "net: ethernet: qualcomm: ppe: Add platform support for IPQ5424", adds the missing pieces: #define IPQ5424_PPE_CLK_RATE 375000000 ... .ppe_rate = IPQ5424_PPE_CLK_RATE, .num_ports = IPQ5424_PPE_PORT_MAX, .icc_paths = ipq5424_ppe_icc_data, ... { .compatible = "qcom,ipq5424-ppe", .data = &ipq5424_data }, By the end of the series, the driver matches this documentation. There is no effect on build or runtime. Would it make sense to move this docs patch after the platform support patch, so the supported SoC list is accurate at every commit? > + and only the EDMA FIFO interface (port0) for the host CPU communication. The > + EIP FIFO and port4 to port6 are not available. [ ... ] -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 05/11] net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (3 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 04/11] docs: networking: Document IPQ5424 as a supported SoC Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 06/11] net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration Luo Jie ` (6 subsequent siblings) 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie IPQ5424 integrates the same PPE switch core as IPQ9574, but has only 3 Ethernet ports plus the EDMA FIFO, without the EIP FIFO. The PPE clock runs at 375 MHz instead of IPQ9574's 353 MHz, and IPQ5424 requires a different, smaller set of interconnect paths. The register space of the unavailable MAC3 to MAC5 must also not be accessed on IPQ5424. Add the platform data per SoC to describe these differences, and add the IPQ5424 compatible. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe.c | 132 ++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe.c b/drivers/net/ethernet/qualcomm/ppe/ppe.c index 3c301e609d3e..f71b673b6f97 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe.c @@ -18,13 +18,34 @@ #include "ppe_config.h" #include "ppe_debugfs.h" -#define PPE_PORT_MAX 8 -#define PPE_CLK_RATE 353000000 +#define IPQ9574_PPE_CLK_RATE 353000000 +#define IPQ5424_PPE_CLK_RATE 375000000 + +/* 6 physical ports, 1 EDMA FIFO and 1 EIP FIFO. */ +#define IPQ9574_PPE_PORT_MAX 8 +/* 3 physical ports and 1 EDMA FIFO. */ +#define IPQ5424_PPE_PORT_MAX 4 + +/** + * struct ppe_of_data - PPE private data of IPQ SoC + * @ppe_rate: PPE clock rate + * @num_ports: Number of PPE ports + * @regmap_config: Regmap configuration + * @icc_paths: Interconnect paths per PPE type + * @num_icc_paths: Number of ICC paths + */ +struct ppe_of_data { + unsigned long ppe_rate; + int num_ports; + const struct regmap_config *regmap_config; + const struct icc_bulk_data *icc_paths; + int num_icc_paths; +}; /* ICC clocks for enabling PPE device. The avg_bw and peak_bw with value 0 * will be updated by the clock rate of PPE. */ -static const struct icc_bulk_data ppe_icc_data[] = { +static const struct icc_bulk_data ipq9574_ppe_icc_data[] = { { .name = "ppe", .avg_bw = 0, @@ -62,6 +83,34 @@ static const struct icc_bulk_data ppe_icc_data[] = { }, }; +static const struct icc_bulk_data ipq5424_ppe_icc_data[] = { + { + .name = "ppe", + .avg_bw = 0, + .peak_bw = 0, + }, + { + .name = "ppe_cfg", + .avg_bw = 0, + .peak_bw = 0, + }, + { + .name = "nssnoc_ce_axi", + .avg_bw = 0, + .peak_bw = 0, + }, + { + .name = "nssnoc_ce_apb", + .avg_bw = 0, + .peak_bw = 0, + }, + { + .name = "nssnoc_nss_csr", + .avg_bw = 100000, + .peak_bw = 100000, + }, +}; + static const struct regmap_range ppe_readable_ranges[] = { regmap_reg_range(0x0, 0x1ff), /* Global */ regmap_reg_range(0x400, 0x5ff), /* LPI CSR */ @@ -108,7 +157,36 @@ static const struct regmap_config regmap_config_ipq9574 = { .max_register = 0xbef800, }; -static int ppe_clock_init_and_reset(struct ppe_device *ppe_dev) +/* For IPQ5424, there are only three Ethernet ports, the register space of + * GMAC/XGMAC 3-5 is unavailable. + */ +static const struct regmap_range ppe_reserved_ranges_ipq5424[] = { + regmap_reg_range(0x1600, 0x17ff), /* GMAC3 */ + regmap_reg_range(0x1800, 0x19ff), /* GMAC4 */ + regmap_reg_range(0x1a00, 0x1bff), /* GMAC5 */ + regmap_reg_range(0x50c000, 0x50ffff), /* XGMAC3 */ + regmap_reg_range(0x510000, 0x513fff), /* XGMAC4 */ + regmap_reg_range(0x514000, 0x517fff), /* XGMAC5 */ +}; + +static const struct regmap_access_table ppe_reg_table_ipq5424 = { + .yes_ranges = ppe_readable_ranges, + .n_yes_ranges = ARRAY_SIZE(ppe_readable_ranges), + .no_ranges = ppe_reserved_ranges_ipq5424, + .n_no_ranges = ARRAY_SIZE(ppe_reserved_ranges_ipq5424), +}; + +static const struct regmap_config regmap_config_ipq5424 = { + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + .rd_table = &ppe_reg_table_ipq5424, + .wr_table = &ppe_reg_table_ipq5424, + .max_register = 0xbef800, +}; + +static int ppe_clock_init_and_reset(struct ppe_device *ppe_dev, + const struct ppe_of_data *data) { unsigned long ppe_rate = ppe_dev->clk_rate; struct device *dev = ppe_dev->dev; @@ -118,15 +196,15 @@ static int ppe_clock_init_and_reset(struct ppe_device *ppe_dev) int ret, i; for (i = 0; i < ppe_dev->num_icc_paths; i++) { - ppe_dev->icc_paths[i].name = ppe_icc_data[i].name; - ppe_dev->icc_paths[i].avg_bw = ppe_icc_data[i].avg_bw ? : + ppe_dev->icc_paths[i].name = data->icc_paths[i].name; + ppe_dev->icc_paths[i].avg_bw = data->icc_paths[i].avg_bw ? : Bps_to_icc(ppe_rate); /* PPE does not have an explicit peak bandwidth requirement, * so set the peak bandwidth to be equal to the average * bandwidth. */ - ppe_dev->icc_paths[i].peak_bw = ppe_icc_data[i].peak_bw ? : + ppe_dev->icc_paths[i].peak_bw = data->icc_paths[i].peak_bw ? : Bps_to_icc(ppe_rate); } @@ -173,12 +251,17 @@ static int ppe_clock_init_and_reset(struct ppe_device *ppe_dev) static int qcom_ppe_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + const struct ppe_of_data *data; struct ppe_device *ppe_dev; void __iomem *base; - int ret, num_icc; + int ret; + + data = of_device_get_match_data(dev); + if (!data) + return dev_err_probe(dev, -EINVAL, "PPE no match data provided\n"); - num_icc = ARRAY_SIZE(ppe_icc_data); - ppe_dev = devm_kzalloc(dev, struct_size(ppe_dev, icc_paths, num_icc), + ppe_dev = devm_kzalloc(dev, + struct_size(ppe_dev, icc_paths, data->num_icc_paths), GFP_KERNEL); if (!ppe_dev) return -ENOMEM; @@ -187,16 +270,16 @@ static int qcom_ppe_probe(struct platform_device *pdev) if (IS_ERR(base)) return dev_err_probe(dev, PTR_ERR(base), "PPE ioremap failed\n"); - ppe_dev->regmap = devm_regmap_init_mmio(dev, base, ®map_config_ipq9574); + ppe_dev->regmap = devm_regmap_init_mmio(dev, base, data->regmap_config); if (IS_ERR(ppe_dev->regmap)) return dev_err_probe(dev, PTR_ERR(ppe_dev->regmap), "PPE initialize regmap failed\n"); ppe_dev->dev = dev; - ppe_dev->clk_rate = PPE_CLK_RATE; - ppe_dev->num_ports = PPE_PORT_MAX; - ppe_dev->num_icc_paths = num_icc; + ppe_dev->clk_rate = data->ppe_rate; + ppe_dev->num_ports = data->num_ports; + ppe_dev->num_icc_paths = data->num_icc_paths; - ret = ppe_clock_init_and_reset(ppe_dev); + ret = ppe_clock_init_and_reset(ppe_dev, data); if (ret) return dev_err_probe(dev, ret, "PPE clock config failed\n"); @@ -218,8 +301,25 @@ static void qcom_ppe_remove(struct platform_device *pdev) ppe_debugfs_teardown(ppe_dev); } +static const struct ppe_of_data ipq9574_data = { + .ppe_rate = IPQ9574_PPE_CLK_RATE, + .num_ports = IPQ9574_PPE_PORT_MAX, + .regmap_config = ®map_config_ipq9574, + .icc_paths = ipq9574_ppe_icc_data, + .num_icc_paths = ARRAY_SIZE(ipq9574_ppe_icc_data), +}; + +static const struct ppe_of_data ipq5424_data = { + .ppe_rate = IPQ5424_PPE_CLK_RATE, + .num_ports = IPQ5424_PPE_PORT_MAX, + .regmap_config = ®map_config_ipq5424, + .icc_paths = ipq5424_ppe_icc_data, + .num_icc_paths = ARRAY_SIZE(ipq5424_ppe_icc_data), +}; + static const struct of_device_id qcom_ppe_of_match[] = { - { .compatible = "qcom,ipq9574-ppe" }, + { .compatible = "qcom,ipq9574-ppe", .data = &ipq9574_data }, + { .compatible = "qcom,ipq5424-ppe", .data = &ipq5424_data }, {} }; MODULE_DEVICE_TABLE(of, qcom_ppe_of_match); -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 05/11] net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 2026-10-11 13:02 ` [PATCH net-next v2 05/11] net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] In the commit "net: ethernet: qualcomm: ppe: Add platform support for IPQ5424", the new "qcom,ipq5424-ppe" compatible makes the driver… -- net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 This commit adds per-SoC platform data to the PPE driver: clock rate, port count, regmap config and interconnect paths. It also adds the "qcom,ipq5424-ppe" compatible. IPQ5424 has 3 Ethernet ports plus the EDMA FIFO, a 375 MHz PPE clock, a smaller set of interconnect paths, and no access to the MAC3-MAC5 register space. > diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe.c b/drivers/net/ethernet/qualcomm/ppe/ppe.c > index 3c301e609d3e..f71b673b6f97 100644 > --- a/drivers/net/ethernet/qualcomm/ppe/ppe.c > +++ b/drivers/net/ethernet/qualcomm/ppe/ppe.c [ ... ] > @@ -218,8 +301,25 @@ static void qcom_ppe_remove(struct platform_device *pdev) > ppe_debugfs_teardown(ppe_dev); > } > > +static const struct ppe_of_data ipq9574_data = { > + .ppe_rate = IPQ9574_PPE_CLK_RATE, > + .num_ports = IPQ9574_PPE_PORT_MAX, > + .regmap_config = ®map_config_ipq9574, > + .icc_paths = ipq9574_ppe_icc_data, > + .num_icc_paths = ARRAY_SIZE(ipq9574_ppe_icc_data), > +}; > + > +static const struct ppe_of_data ipq5424_data = { > + .ppe_rate = IPQ5424_PPE_CLK_RATE, > + .num_ports = IPQ5424_PPE_PORT_MAX, > + .regmap_config = ®map_config_ipq5424, > + .icc_paths = ipq5424_ppe_icc_data, > + .num_icc_paths = ARRAY_SIZE(ipq5424_ppe_icc_data), > +}; > + > static const struct of_device_id qcom_ppe_of_match[] = { > - { .compatible = "qcom,ipq9574-ppe" }, > + { .compatible = "qcom,ipq9574-ppe", .data = &ipq9574_data }, > + { .compatible = "qcom,ipq5424-ppe", .data = &ipq5424_data }, [Severity: Low] This compatible makes the driver probe on IPQ5424. At this commit, does qcom_ppe_probe()->ppe_hw_config() still program the IPQ9574-only hardware tables on IPQ5424? ppe_config_scheduler() in ppe_config.c uses the IPQ9574 tables on every SoC: drivers/net/ethernet/qualcomm/ppe/ppe_config.c:ppe_config_scheduler() { ... count = ARRAY_SIZE(ipq9574_ppe_sch_bm_config); bm_cfg = ipq9574_ppe_sch_bm_config; ... count = ARRAY_SIZE(ipq9574_ppe_sch_qm_config); qm_cfg = ipq9574_ppe_sch_qm_config; ... } ppe_config_bm() also always uses ipq9574_ppe_bm_port_config and the IPQ9574 group buffer limit. These tables have entries for PPE ports 4-7 (physical ports 4-6 and the EIP FIFO), which IPQ5424 does not have. The BM scheduler entries also set backup_port_valid to false. The only code that checks ppe_dev->num_ports is the ppe_port_sch_config loop. At this commit, neither struct ppe_of_data nor struct ppe_device has a type field or any way to select per-SoC tables. That means IPQ5424 gets the IPQ9574 BM, QM and TDM scheduler settings. Scheduler slots go to ports that do not exist, and ports 2-3 get bandwidth shares sized for IPQ9574. Later patches in this series fix this. "Add IPQ5424 BM buffer configuration", "Add IPQ5424 QM configuration", "Add IPQ5424 scheduler resource configuration" and "Add IPQ5424 scheduler configuration" add a .type field to the platform data. ppe_config_bm(), ppe_config_qm() and ppe_config_scheduler() then switch on ppe_dev->type to pick the ipq5424_* tables. Could the commit message say that IPQ5424 support is incomplete until those patches are applied? Alternatively, could the IPQ5424 compatible be added after them, so a bisect cannot land on a partly configured IPQ5424 PPE? > {} > }; > MODULE_DEVICE_TABLE(of, qcom_ppe_of_match); -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 06/11] net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (4 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 05/11] net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 07/11] net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration Luo Jie ` (5 subsequent siblings) 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie IPQ5424 has fewer PPE ports than IPQ9574, so it requires a different buffer configuration per port, and more buffers are left for the shared buffer pool. IPQ5424 also has more BM ports than IPQ9574, 19 versus 15, so some BM register tables have more entries on IPQ5424, and some of them are located at different addresses. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe.c | 5 ++ drivers/net/ethernet/qualcomm/ppe/ppe.h | 15 +++++ drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 79 +++++++++++++++++++++++--- drivers/net/ethernet/qualcomm/ppe/ppe_regs.h | 35 +++++++++--- 4 files changed, 118 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe.c b/drivers/net/ethernet/qualcomm/ppe/ppe.c index f71b673b6f97..b144fd818998 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe.c @@ -28,6 +28,7 @@ /** * struct ppe_of_data - PPE private data of IPQ SoC + * @type: PPE type value * @ppe_rate: PPE clock rate * @num_ports: Number of PPE ports * @regmap_config: Regmap configuration @@ -35,6 +36,7 @@ * @num_icc_paths: Number of ICC paths */ struct ppe_of_data { + enum ppe_type type; unsigned long ppe_rate; int num_ports; const struct regmap_config *regmap_config; @@ -275,6 +277,7 @@ static int qcom_ppe_probe(struct platform_device *pdev) return dev_err_probe(dev, PTR_ERR(ppe_dev->regmap), "PPE initialize regmap failed\n"); ppe_dev->dev = dev; + ppe_dev->type = data->type; ppe_dev->clk_rate = data->ppe_rate; ppe_dev->num_ports = data->num_ports; ppe_dev->num_icc_paths = data->num_icc_paths; @@ -302,6 +305,7 @@ static void qcom_ppe_remove(struct platform_device *pdev) } static const struct ppe_of_data ipq9574_data = { + .type = IPQ9574_PPE, .ppe_rate = IPQ9574_PPE_CLK_RATE, .num_ports = IPQ9574_PPE_PORT_MAX, .regmap_config = ®map_config_ipq9574, @@ -310,6 +314,7 @@ static const struct ppe_of_data ipq9574_data = { }; static const struct ppe_of_data ipq5424_data = { + .type = IPQ5424_PPE, .ppe_rate = IPQ5424_PPE_CLK_RATE, .num_ports = IPQ5424_PPE_PORT_MAX, .regmap_config = ®map_config_ipq5424, diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe.h b/drivers/net/ethernet/qualcomm/ppe/ppe.h index 27458f0bc206..33b876d2e079 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe.h +++ b/drivers/net/ethernet/qualcomm/ppe/ppe.h @@ -13,10 +13,24 @@ struct device; struct regmap; struct dentry; +/** + * enum ppe_type - PPE device type. + * @IPQ9574_PPE: PPE device of IPQ9574. + * @IPQ5424_PPE: PPE device of IPQ5424. + * + * PPE type is used to identify the PPE device of the different + * IPQ platform. + */ +enum ppe_type { + IPQ9574_PPE, + IPQ5424_PPE, +}; + /** * struct ppe_device - PPE device private data. * @dev: PPE device structure. * @regmap: PPE register map. + * @type: Different PPE type on various IPQ SoC. * @clk_rate: PPE clock rate. * @num_ports: Number of PPE ports. * @debugfs_root: Debugfs root entry. @@ -30,6 +44,7 @@ struct dentry; struct ppe_device { struct device *dev; struct regmap *regmap; + enum ppe_type type; unsigned long clk_rate; unsigned int num_ports; struct dentry *debugfs_root; diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c index 2f4f59280647..ef46e9b133fe 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c @@ -230,6 +230,56 @@ static const struct ppe_bm_port_config ipq9574_ppe_bm_port_config[] = { }, }; +/* IPQ5424 has fewer PPE physical ports (3) than IPQ9574 (6), so fewer + * buffers need to be reserved for per-port purposes. Out of the same + * 2048 total, the rest assigned to the general 'group0' pool is + * correspondingly larger here, 1650 versus IPQ9574's 1550. + */ +static const int ipq5424_ppe_bm_group_config = 1650; + +/* The buffer configurations per PPE port on IPQ5424. There are 19 BM + * ports supported by PPE. BM port (0-15) is for EDMA port 0, and BM + * port (16-18) is for the 3 PPE physical ports. + */ +static const struct ppe_bm_port_config ipq5424_ppe_bm_port_config[] = { + { + /* Buffer configuration for the BM port ID 0 of EDMA. */ + .port_id_start = 0, + .port_id_end = 0, + .pre_alloc = 0, + .in_fly_buf = 100, + .ceil = 1146, + .weight = 7, + .resume_offset = 8, + .resume_ceil = 0, + .dynamic = true, + }, + { + /* Buffer configuration for the BM port ID 1-15 of EDMA. */ + .port_id_start = 1, + .port_id_end = 15, + .pre_alloc = 0, + .in_fly_buf = 100, + .ceil = 250, + .weight = 4, + .resume_offset = 36, + .resume_ceil = 0, + .dynamic = true, + }, + { + /* Buffer configuration for the BM port ID 16-18 of PPE ports. */ + .port_id_start = 16, + .port_id_end = 18, + .pre_alloc = 0, + .in_fly_buf = 128, + .ceil = 250, + .weight = 4, + .resume_offset = 36, + .resume_ceil = 0, + .dynamic = true, + }, +}; + /* QM fetches the packet from PPE buffer management for transmitting the * packet out. The QM group configuration limits the total number of buffers * enqueued by all PPE hardware queues. @@ -1413,7 +1463,7 @@ static int ppe_config_bm_threshold(struct ppe_device *ppe_dev, int bm_port_id, /* Assign the default group ID 0 to the BM port. */ val = FIELD_PREP(PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID, 0); - reg = PPE_BM_PORT_GROUP_ID_ADDR + PPE_BM_PORT_GROUP_ID_INC * bm_port_id; + reg = PPE_BM_PORT_GROUP_ID_ADDR(ppe_dev) + PPE_BM_PORT_GROUP_ID_INC * bm_port_id; ret = regmap_update_bits(ppe_dev->regmap, reg, PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID, val); @@ -1431,25 +1481,38 @@ static int ppe_config_bm(struct ppe_device *ppe_dev) { const struct ppe_bm_port_config *port_cfg; unsigned int i, bm_port_id, port_cfg_cnt; - u32 reg, val; + u32 reg, val, group_cfg; int ret; + switch (ppe_dev->type) { + case IPQ9574_PPE: + port_cfg = ipq9574_ppe_bm_port_config; + port_cfg_cnt = ARRAY_SIZE(ipq9574_ppe_bm_port_config); + group_cfg = ipq9574_ppe_bm_group_config; + break; + case IPQ5424_PPE: + port_cfg = ipq5424_ppe_bm_port_config; + port_cfg_cnt = ARRAY_SIZE(ipq5424_ppe_bm_port_config); + group_cfg = ipq5424_ppe_bm_group_config; + break; + default: + dev_err(ppe_dev->dev, "Invalid PPE type %d\n", ppe_dev->type); + return -EINVAL; + } + + reg = PPE_BM_SHARED_GROUP_CFG_ADDR(ppe_dev); + /* Configure the allocated buffer number only for group 0. * The buffer number of group 1-3 is already cleared to 0 * after PPE reset during the probe of PPE driver. */ - reg = PPE_BM_SHARED_GROUP_CFG_ADDR; - val = FIELD_PREP(PPE_BM_SHARED_GROUP_CFG_SHARED_LIMIT, - ipq9574_ppe_bm_group_config); + val = FIELD_PREP(PPE_BM_SHARED_GROUP_CFG_SHARED_LIMIT, group_cfg); ret = regmap_update_bits(ppe_dev->regmap, reg, PPE_BM_SHARED_GROUP_CFG_SHARED_LIMIT, val); if (ret) goto bm_config_fail; - /* Configure buffer thresholds for the BM ports. */ - port_cfg = ipq9574_ppe_bm_port_config; - port_cfg_cnt = ARRAY_SIZE(ipq9574_ppe_bm_port_config); for (i = 0; i < port_cfg_cnt; i++) { for (bm_port_id = port_cfg[i].port_id_start; bm_port_id <= port_cfg[i].port_id_end; bm_port_id++) { diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h index 746dfbb5a682..441e8e04a80b 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h @@ -386,17 +386,32 @@ #define PPE_PSCH_SCH_CFG_TBL_DES_SECOND_PORT_EN BIT(16) #define PPE_PSCH_SCH_CFG_TBL_DES_SECOND_PORT GENMASK(20, 17) -/* There are 15 BM ports and 4 BM groups supported by PPE. - * BM port (0-7) is for EDMA port 0, BM port (8-13) is for - * PPE physical port 1-6 and BM port 14 is for EIP port. +/* There are 15 BM ports on IPQ9574 and 19 BM ports on IPQ5424, and + * 4 BM groups supported by PPE. On IPQ9574, BM port (0-7) is for EDMA + * port 0, BM port (8-13) is for PPE physical port 1-6 and BM port 14 + * is for EIP port. On IPQ5424, BM port (0-15) is for EDMA port 0 and + * BM port (16-18) is for PPE physical port 1-3. + * + * The per-BM-port tables PPE_BM_PORT_FC_MODE and PPE_BM_PORT_FC_CFG_TBL + * are at the same address on both SoCs, IPQ5424 only has more entries. */ +#define PPE_BM_PORT_IPQ9574_ENTRIES 15 +#define PPE_BM_PORT_IPQ5424_ENTRIES 19 +#define PPE_BM_PORT_ENTRIES(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_PORT_IPQ5424_ENTRIES : \ + PPE_BM_PORT_IPQ9574_ENTRIES) + #define PPE_BM_PORT_FC_MODE_ADDR 0x600100 -#define PPE_BM_PORT_FC_MODE_ENTRIES 15 +#define PPE_BM_PORT_FC_MODE_ENTRIES(ppe_dev) PPE_BM_PORT_ENTRIES(ppe_dev) #define PPE_BM_PORT_FC_MODE_INC 0x4 #define PPE_BM_PORT_FC_MODE_EN BIT(0) -#define PPE_BM_PORT_GROUP_ID_ADDR 0x600180 -#define PPE_BM_PORT_GROUP_ID_ENTRIES 15 +#define PPE_BM_PORT_GROUP_ID_IPQ9574_ADDR 0x600180 +#define PPE_BM_PORT_GROUP_ID_IPQ5424_ADDR 0x6001c0 +#define PPE_BM_PORT_GROUP_ID_ADDR(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_PORT_GROUP_ID_IPQ5424_ADDR : \ + PPE_BM_PORT_GROUP_ID_IPQ9574_ADDR) +#define PPE_BM_PORT_GROUP_ID_ENTRIES(ppe_dev) PPE_BM_PORT_ENTRIES(ppe_dev) #define PPE_BM_PORT_GROUP_ID_INC 0x4 #define PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID GENMASK(1, 0) @@ -412,13 +427,17 @@ #define PPE_BM_REACT_CNT_TBL_INC 0x4 #define PPE_BM_REACT_CNT_VAL GENMASK(8, 0) -#define PPE_BM_SHARED_GROUP_CFG_ADDR 0x600290 +#define PPE_BM_SHARED_GROUP_CFG_IPQ9574_ADDR 0x600290 +#define PPE_BM_SHARED_GROUP_CFG_IPQ5424_ADDR 0x6002f0 +#define PPE_BM_SHARED_GROUP_CFG_ADDR(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_SHARED_GROUP_CFG_IPQ5424_ADDR : \ + PPE_BM_SHARED_GROUP_CFG_IPQ9574_ADDR) #define PPE_BM_SHARED_GROUP_CFG_ENTRIES 4 #define PPE_BM_SHARED_GROUP_CFG_INC 0x4 #define PPE_BM_SHARED_GROUP_CFG_SHARED_LIMIT GENMASK(10, 0) #define PPE_BM_PORT_FC_CFG_TBL_ADDR 0x601000 -#define PPE_BM_PORT_FC_CFG_TBL_ENTRIES 15 +#define PPE_BM_PORT_FC_CFG_TBL_ENTRIES(ppe_dev) PPE_BM_PORT_ENTRIES(ppe_dev) #define PPE_BM_PORT_FC_CFG_TBL_INC 0x10 #define PPE_BM_PORT_FC_W0_REACT_LIMIT GENMASK(8, 0) #define PPE_BM_PORT_FC_W0_RESUME_THRESHOLD GENMASK(17, 9) -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 06/11] net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration 2026-10-11 13:02 ` [PATCH net-next v2 06/11] net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] This patch adds PPE_BM_PORT_GROUP_ID_IPQ5424_ADDR = 0x6001c0, and ppe_config_bm_threshold() now writes the IPQ5424 BM port group IDs to… -- net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration This patch adds an IPQ5424 BM buffer configuration (per-port thresholds and a larger group0 shared pool) and a ppe_type field in struct ppe_device to select it. It also adds per-SoC address and entry-count macros for the BM register tables, which have more entries on IPQ5424 and in some cases sit at different addresses. > diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h > index 746dfbb5a682..441e8e04a80b 100644 > --- a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h > +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h [ ... ] > -#define PPE_BM_PORT_GROUP_ID_ADDR 0x600180 > -#define PPE_BM_PORT_GROUP_ID_ENTRIES 15 > +#define PPE_BM_PORT_GROUP_ID_IPQ9574_ADDR 0x600180 > +#define PPE_BM_PORT_GROUP_ID_IPQ5424_ADDR 0x6001c0 [Severity: Low] With this change, two tables in this header use the same address on IPQ5424. Right below this hunk, the counter tables still have one fixed layout for all SoCs: /* Counters for PPE buffers used for packets cached. */ #define PPE_BM_USED_CNT_TBL_ADDR 0x6001c0 #define PPE_BM_USED_CNT_TBL_ENTRIES 15 ... #define PPE_BM_REACT_CNT_TBL_ADDR 0x600240 #define PPE_BM_REACT_CNT_TBL_ENTRIES 15 ppe_bm_counter_get() in ppe_debugfs.c uses these constants on every SoC: for (i = 0; i < PPE_BM_USED_CNT_TBL_ENTRIES; i++) { reg = PPE_BM_USED_CNT_TBL_ADDR + i * PPE_BM_USED_CNT_TBL_INC; ... reg = PPE_BM_REACT_CNT_TBL_ADDR + i * PPE_BM_REACT_CNT_TBL_INC; On IPQ5424, will the "BM USED/REACT" debugfs output show the group ID registers that ppe_config_bm_threshold() just wrote, instead of buffer usage counters? The REACT values would also come from the wrong table, and BM ports 15-18 would never be shown. Ports 16-18 are the three physical ports. The configuration write to 0x6001c0 looks correct; only the debugfs read side is affected. The new PPE_BM_PORT_*_ENTRIES(ppe_dev) macros also have no callers yet in this patch. A later patch in this series, "net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support", fixes this. It adds IPQ5424 counter table addresses (0x600220 and 0x600280, 19 entries each) and makes ppe_debugfs.c use the per-SoC macros. Would it make sense to move the counter address split into this patch? That way the header never has GROUP_ID and USED_CNT at the same IPQ5424 address in between patches. > +#define PPE_BM_PORT_GROUP_ID_ADDR(ppe_dev) \ > + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_PORT_GROUP_ID_IPQ5424_ADDR : \ > + PPE_BM_PORT_GROUP_ID_IPQ9574_ADDR) > +#define PPE_BM_PORT_GROUP_ID_ENTRIES(ppe_dev) PPE_BM_PORT_ENTRIES(ppe_dev) > #define PPE_BM_PORT_GROUP_ID_INC 0x4 > #define PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID GENMASK(1, 0) [ ... ] -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 07/11] net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (5 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 06/11] net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 08/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler resource configuration Luo Jie ` (4 subsequent siblings) 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie Multicast queues are dedicated per PPE port. IPQ5424 has only 3 physical PPE ports, versus IPQ9574's 6 PPE ports, so multicast queues 284 to 299 are not available on IPQ5424, and 2010 buffers are assigned to the shared group0 buffer pool, instead of IPQ9574's 2000. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 53 ++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c index ef46e9b133fe..d2bd78853b98 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c @@ -314,6 +314,37 @@ static const struct ppe_qm_queue_config ipq9574_ppe_qm_queue_config[] = { }, }; +/* Multicast queues are dedicated per PPE port. IPQ5424 has only 3 physical + * PPE ports, versus IPQ9574's 6 PPE ports, so multicast queues 284 to 299 + * are not available on IPQ5424, and the buffer pool assigned to the general + * 'group0' is larger here, 2010 versus IPQ9574's 2000. + */ +static const int ipq5424_ppe_qm_group_config = 2010; + +/* Default QM settings for unicast and multicast queues for IPQ5424. */ +static const struct ppe_qm_queue_config ipq5424_ppe_qm_queue_config[] = { + { + /* QM settings for unicast queues 0 to 255. */ + .queue_start = 0, + .queue_end = 255, + .prealloc_buf = 0, + .ceil = 1200, + .weight = 7, + .resume_offset = 36, + .dynamic = true, + }, + { + /* QM settings for multicast queues 256 to 283. */ + .queue_start = 256, + .queue_end = 283, + .prealloc_buf = 0, + .ceil = 250, + .weight = 0, + .resume_offset = 36, + .dynamic = false, + }, +}; + /* PPE scheduler configuration for BM includes multiple entries. Each entry * indicates the primary port to be assigned the buffers for the ingress or * to release the buffers for the egress. Backup port ID will be used when @@ -1535,12 +1566,28 @@ static int ppe_config_bm(struct ppe_device *ppe_dev) */ static int ppe_config_qm(struct ppe_device *ppe_dev) { + int ret, i, group_buffer_cfg, queue_id, queue_cfg_count; const struct ppe_qm_queue_config *queue_cfg; - int ret, i, queue_id, queue_cfg_count; u32 reg, multicast_queue_cfg[3]; u32 unicast_queue_cfg[4]; u32 group_cfg[3]; + switch (ppe_dev->type) { + case IPQ9574_PPE: + group_buffer_cfg = ipq9574_ppe_qm_group_config; + queue_cfg = ipq9574_ppe_qm_queue_config; + queue_cfg_count = ARRAY_SIZE(ipq9574_ppe_qm_queue_config); + break; + case IPQ5424_PPE: + group_buffer_cfg = ipq5424_ppe_qm_group_config; + queue_cfg = ipq5424_ppe_qm_queue_config; + queue_cfg_count = ARRAY_SIZE(ipq5424_ppe_qm_queue_config); + break; + default: + dev_err(ppe_dev->dev, "Invalid PPE type %d\n", ppe_dev->type); + return -EINVAL; + } + /* Assign the buffer number to the group 0 by default. */ reg = PPE_AC_GRP_CFG_TBL_ADDR; ret = regmap_bulk_read(ppe_dev->regmap, reg, @@ -1548,15 +1595,13 @@ static int ppe_config_qm(struct ppe_device *ppe_dev) if (ret) goto qm_config_fail; - PPE_AC_GRP_SET_BUF_LIMIT(group_cfg, ipq9574_ppe_qm_group_config); + PPE_AC_GRP_SET_BUF_LIMIT(group_cfg, group_buffer_cfg); ret = regmap_bulk_write(ppe_dev->regmap, reg, group_cfg, ARRAY_SIZE(group_cfg)); if (ret) goto qm_config_fail; - queue_cfg = ipq9574_ppe_qm_queue_config; - queue_cfg_count = ARRAY_SIZE(ipq9574_ppe_qm_queue_config); for (i = 0; i < queue_cfg_count; i++) { queue_id = queue_cfg[i].queue_start; -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 07/11] net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration 2026-10-11 13:02 ` [PATCH net-next v2 07/11] net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] The commit message and the new code comment above ipq5424_ppe_qm_group_config in… Pre-existing issues: - [Low] At this commit, ppe_port_resource_get() checks `port > ppe_dev->num_ports` and then indexes the single IPQ9574-shaped… -- net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration This commit adds IPQ5424-specific QM settings, which ppe_config_qm() selects based on ppe_dev->type. On IPQ5424 the multicast queue range ends at 283 instead of 299. The group0 shared buffer pool is set to 2010 buffers instead of 2000. > diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c > index ef46e9b133fe..d2bd78853b98 100644 > --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c > +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c > @@ -314,6 +314,37 @@ static const struct ppe_qm_queue_config ipq9574_ppe_qm_queue_config[] = { > }, > }; > > +/* Multicast queues are dedicated per PPE port. IPQ5424 has only 3 physical > + * PPE ports, versus IPQ9574's 6 PPE ports, so multicast queues 284 to 299 > + * are not available on IPQ5424, and the buffer pool assigned to the general > + * 'group0' is larger here, 2010 versus IPQ9574's 2000. > + */ [Severity: Low] Is this explanation complete? The commit message uses the same wording. In ppe_scheduler_res[], ports 4 to 7 each get four multicast queues: port 4: mcastq 284-287 port 5: mcastq 288-291 port 6: mcastq 292-295 port 7: mcastq 296-299 The three missing physical ports only cover queues 284-295. Queues 296-299 belong to port 7, the EIP FIFO port, which IPQ5424 also does not have. The queue range in ipq5424_ppe_qm_queue_config[] looks correct. Could the comment and the commit message also mention the missing EIP port? > +static const int ipq5424_ppe_qm_group_config = 2010; > + > +/* Default QM settings for unicast and multicast queues for IPQ5424. */ > +static const struct ppe_qm_queue_config ipq5424_ppe_qm_queue_config[] = { [ ... ] > + { > + /* QM settings for multicast queues 256 to 283. */ > + .queue_start = 256, > + .queue_end = 283, > + .prealloc_buf = 0, > + .ceil = 250, > + .weight = 0, > + .resume_offset = 36, > + .dynamic = false, > + }, > +}; [Severity: Low] This is a pre-existing issue, not one introduced by this patch, but it interacts with the multicast range set here. ppe_port_resource_get() still indexes the single IPQ9574-shaped ppe_scheduler_res[] table: drivers/net/ethernet/qualcomm/ppe/ppe_config.c:ppe_port_resource_get() { ... /* The reserved resource with the maximum port ID of PPE is * also allowed to be acquired. */ if (port > ppe_dev->num_ports) return -EINVAL; res = ppe_scheduler_res[port]; ... } On IPQ5424, num_ports is 4. A request for the reserved resource (port == 4) would return the IPQ9574 port 4 entry, which has unicast queues 192-207 and multicast queues 284-287. This patch leaves multicast queues 284-287 unconfigured in QM, so enqueue and dequeue stay disabled for them. The correct reserved entry for IPQ5424 would be unicast queues 64-143 with no multicast queues. Can ppe_port_resource_get() hand out multicast queue IDs that are disabled in QM on IPQ5424? No in-tree caller passes port == num_ports at this commit, so the problem is latent. ppe_queue_dest_init() loops while port_id < num_ports, and the other caller passes port 0. A later patch in this series, "net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler resource configuration", fixes this. It adds ipq5424_ppe_scheduler_res[], where index 4 is the reserved entry. It also changes ppe_port_resource_get() to pick the table by ppe_dev->type and to bound the index by the table size. [ ... ] -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 08/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler resource configuration 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (6 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 07/11] net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 09/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler configuration Luo Jie ` (3 subsequent siblings) 11 siblings, 0 replies; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie The PPE scheduler resources, such as queues and scheduler nodes, are assigned per PPE port, followed by one reserved resource entry. IPQ5424 has fewer PPE ports than IPQ9574, so its reserved resource is located at a different position. Add the dedicated scheduler resource configuration for IPQ5424. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 84 ++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c index d2bd78853b98..01c92a5459d9 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c @@ -814,7 +814,7 @@ static const struct ppe_scheduler_port_config ppe_port_sch_config[] = { /* The scheduler resource is applied to each PPE port, The resource * includes the unicast & multicast queues, flow nodes and DRR nodes. */ -static const struct ppe_port_schedule_resource ppe_scheduler_res[] = { +static const struct ppe_port_schedule_resource ipq9574_ppe_scheduler_res[] = { { .ucastq_start = 0, .ucastq_end = 63, .mcastq_start = 256, @@ -916,6 +916,64 @@ static const struct ppe_port_schedule_resource ppe_scheduler_res[] = { }, }; +static const struct ppe_port_schedule_resource ipq5424_ppe_scheduler_res[] = { + { .ucastq_start = 0, + .ucastq_end = 63, + .mcastq_start = 256, + .mcastq_end = 271, + .flow_id_start = 0, + .flow_id_end = 0, + .l0node_start = 0, + .l0node_end = 7, + .l1node_start = 0, + .l1node_end = 0, + }, + { .ucastq_start = 144, + .ucastq_end = 159, + .mcastq_start = 272, + .mcastq_end = 275, + .flow_id_start = 36, + .flow_id_end = 39, + .l0node_start = 48, + .l0node_end = 63, + .l1node_start = 8, + .l1node_end = 11, + }, + { .ucastq_start = 160, + .ucastq_end = 175, + .mcastq_start = 276, + .mcastq_end = 279, + .flow_id_start = 40, + .flow_id_end = 43, + .l0node_start = 64, + .l0node_end = 79, + .l1node_start = 12, + .l1node_end = 15, + }, + { .ucastq_start = 176, + .ucastq_end = 191, + .mcastq_start = 280, + .mcastq_end = 283, + .flow_id_start = 44, + .flow_id_end = 47, + .l0node_start = 80, + .l0node_end = 95, + .l1node_start = 16, + .l1node_end = 19, + }, + { .ucastq_start = 64, + .ucastq_end = 143, + .mcastq_start = 0, + .mcastq_end = 0, + .flow_id_start = 1, + .flow_id_end = 35, + .l0node_start = 8, + .l0node_end = 47, + .l1node_start = 1, + .l1node_end = 7, + }, +}; + /* Set the PPE queue level scheduler configuration. */ static int ppe_scheduler_l0_queue_map_set(struct ppe_device *ppe_dev, int node_id, int port, @@ -1153,15 +1211,31 @@ int ppe_port_resource_get(struct ppe_device *ppe_dev, int port, enum ppe_resource_type type, int *res_start, int *res_end) { + const struct ppe_port_schedule_resource *scheduler_res; struct ppe_port_schedule_resource res; + unsigned int scheduler_res_len; + + switch (ppe_dev->type) { + case IPQ9574_PPE: + scheduler_res = ipq9574_ppe_scheduler_res; + scheduler_res_len = ARRAY_SIZE(ipq9574_ppe_scheduler_res); + break; + case IPQ5424_PPE: + scheduler_res = ipq5424_ppe_scheduler_res; + scheduler_res_len = ARRAY_SIZE(ipq5424_ppe_scheduler_res); + break; + default: + dev_err(ppe_dev->dev, "Invalid PPE type %d\n", ppe_dev->type); + return -EINVAL; + } - /* The reserved resource with the maximum port ID of PPE is - * also allowed to be acquired. + /* The reserved resource, stored at the last entry of the + * scheduler resource table, is also allowed to be acquired. */ - if (port > ppe_dev->num_ports) + if (port >= scheduler_res_len) return -EINVAL; - res = ppe_scheduler_res[port]; + res = scheduler_res[port]; switch (type) { case PPE_RES_UCAST: *res_start = res.ucastq_start; -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 09/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler configuration 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (7 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 08/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler resource configuration Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 10/11] net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration Luo Jie ` (2 subsequent siblings) 11 siblings, 0 replies; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie The PPE scheduler arbitrates the access to the BM and QM among the PPE ports. IPQ5424 has a different port topology than IPQ9574, so it requires its own BM and QM scheduler configuration. Add the BM and QM scheduler configuration tables for IPQ5424. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 231 +++++++++++++++++++++++-- 1 file changed, 221 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c index 01c92a5459d9..017d2e834251 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c @@ -520,6 +520,205 @@ static const struct ppe_scheduler_qm_config ipq9574_ppe_sch_qm_config[] = { {0x98, 6, 5, true, 2}, }; +static const struct ppe_scheduler_bm_config ipq5424_ppe_sch_bm_config[] = { + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 1}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, false, 0}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 2}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 1, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 3}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 3}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 1, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 1}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, false, 0}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 3}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 2, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 3}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 1, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 1}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, false, 0}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 3}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 2, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 1}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 3, true, 2}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 1, false, 0}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 3}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 3, false, 0}, + {true, PPE_SCH_EGRESS, 1, true, 2}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 3, false, 0}, + {true, PPE_SCH_INGRESS, 2, false, 0}, + {true, PPE_SCH_EGRESS, 0, false, 0}, + {true, PPE_SCH_INGRESS, 1, false, 0}, + {true, PPE_SCH_EGRESS, 2, true, 3}, + {true, PPE_SCH_INGRESS, 0, false, 0}, + {true, PPE_SCH_EGRESS, 1, false, 0}, +}; + +/* ensch_port_bmp is left as 0 for every entry here, unlike + * ipq9574_ppe_sch_qm_config[] above. This is expected for IPQ5424, + * not an omission. + */ +static const struct ppe_scheduler_qm_config ipq5424_ppe_sch_qm_config[] = { + {0x0, 3, 2, false, 0}, + {0x0, 1, 3, false, 0}, + {0x0, 0, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 3, 1, true, 0}, + {0x0, 3, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 3, 1, true, 0}, + {0x0, 3, 2, false, 0}, + {0x0, 1, 3, false, 0}, + {0x0, 0, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 3, 1, true, 0}, + {0x0, 3, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 0, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 3, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 3, 2, true, 0}, + {0x0, 3, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 1, 3, false, 0}, + {0x0, 0, 1, false, 0}, + {0x0, 3, 2, true, 0}, + {0x0, 3, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 0, 2, false, 0}, + {0x0, 3, 1, false, 0}, + {0x0, 2, 0, false, 0}, + {0x0, 1, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 0, 2, false, 0}, + {0x0, 3, 0, false, 0}, + {0x0, 3, 1, false, 0}, + {0x0, 2, 3, false, 0}, + {0x0, 0, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 3, 2, true, 0}, + {0x0, 3, 1, false, 0}, + {0x0, 2, 3, false, 0}, + {0x0, 0, 2, false, 0}, + {0x0, 1, 0, false, 0}, + {0x0, 2, 1, false, 0}, + {0x0, 0, 2, false, 0}, + {0x0, 3, 0, false, 0}, +}; + static const struct ppe_scheduler_port_config ppe_port_sch_config[] = { { .port = 0, @@ -1817,14 +2016,29 @@ static int ppe_config_scheduler(struct ppe_device *ppe_dev) const struct ppe_scheduler_port_config *port_cfg; const struct ppe_scheduler_qm_config *qm_cfg; const struct ppe_scheduler_bm_config *bm_cfg; - int ret, i, count; + int ret, i, bm_count, qm_count, count; u32 val, reg; - count = ARRAY_SIZE(ipq9574_ppe_sch_bm_config); - bm_cfg = ipq9574_ppe_sch_bm_config; + switch (ppe_dev->type) { + case IPQ9574_PPE: + bm_cfg = ipq9574_ppe_sch_bm_config; + bm_count = ARRAY_SIZE(ipq9574_ppe_sch_bm_config); + qm_cfg = ipq9574_ppe_sch_qm_config; + qm_count = ARRAY_SIZE(ipq9574_ppe_sch_qm_config); + break; + case IPQ5424_PPE: + bm_cfg = ipq5424_ppe_sch_bm_config; + bm_count = ARRAY_SIZE(ipq5424_ppe_sch_bm_config); + qm_cfg = ipq5424_ppe_sch_qm_config; + qm_count = ARRAY_SIZE(ipq5424_ppe_sch_qm_config); + break; + default: + dev_err(ppe_dev->dev, "Invalid PPE type %d\n", ppe_dev->type); + return -EINVAL; + } /* Configure the depth of BM scheduler entries. */ - val = FIELD_PREP(PPE_BM_SCH_CTRL_SCH_DEPTH, count); + val = FIELD_PREP(PPE_BM_SCH_CTRL_SCH_DEPTH, bm_count); val |= FIELD_PREP(PPE_BM_SCH_CTRL_SCH_OFFSET, 0); val |= FIELD_PREP(PPE_BM_SCH_CTRL_SCH_EN, 1); @@ -1836,7 +2050,7 @@ static int ppe_config_scheduler(struct ppe_device *ppe_dev) * egress port, the second port takes effect when the specified port * is in the inactive state. */ - for (i = 0; i < count; i++) { + for (i = 0; i < bm_count; i++) { val = FIELD_PREP(PPE_BM_SCH_CFG_TBL_VALID, bm_cfg[i].valid); val |= FIELD_PREP(PPE_BM_SCH_CFG_TBL_DIR, bm_cfg[i].dir); val |= FIELD_PREP(PPE_BM_SCH_CFG_TBL_PORT_NUM, bm_cfg[i].port); @@ -1851,11 +2065,8 @@ static int ppe_config_scheduler(struct ppe_device *ppe_dev) goto sch_config_fail; } - count = ARRAY_SIZE(ipq9574_ppe_sch_qm_config); - qm_cfg = ipq9574_ppe_sch_qm_config; - /* Configure the depth of QM scheduler entries. */ - val = FIELD_PREP(PPE_PSCH_SCH_DEPTH_CFG_SCH_DEPTH, count); + val = FIELD_PREP(PPE_PSCH_SCH_DEPTH_CFG_SCH_DEPTH, qm_count); ret = regmap_write(ppe_dev->regmap, PPE_PSCH_SCH_DEPTH_CFG_ADDR, val); if (ret) goto sch_config_fail; @@ -1864,7 +2075,7 @@ static int ppe_config_scheduler(struct ppe_device *ppe_dev) * port, the second port takes effect when the specified dequeue * port is in the inactive port. */ - for (i = 0; i < count; i++) { + for (i = 0; i < qm_count; i++) { val = FIELD_PREP(PPE_PSCH_SCH_CFG_TBL_ENS_PORT_BITMAP, qm_cfg[i].ensch_port_bmp); val |= FIELD_PREP(PPE_PSCH_SCH_CFG_TBL_ENS_PORT, -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 10/11] net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (8 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 09/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler configuration Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 11/11] net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support Luo Jie 2026-10-11 13:05 ` [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC netdev-bot+sinfo 11 siblings, 1 reply; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie The entries of the L2 service code table are 0x20 apart on IPQ5424, instead of 0x10 on IPQ9574. Each IPQ5424 entry also has a second word holding the extended egress bypass bitmap, which adds the bypass of the source MAC multicast drop, L2 flooding and tunnel exception counter control. Add the L2 service code table stride and the extended egress bypass bitmap for IPQ5424. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe_config.c | 13 ++++++++++--- drivers/net/ethernet/qualcomm/ppe/ppe_config.h | 4 ++++ drivers/net/ethernet/qualcomm/ppe/ppe_regs.h | 12 +++++++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c index 017d2e834251..3dc1bcc8949e 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c @@ -1476,7 +1476,7 @@ int ppe_port_resource_get(struct ppe_device *ppe_dev, int port, */ int ppe_sc_config_set(struct ppe_device *ppe_dev, int sc, struct ppe_sc_cfg cfg) { - u32 val, reg, servcode_val[2] = {}; + u32 val, reg, servcode_val[2] = {}, in_l2_val[2] = {}; unsigned long bitmap_value; int ret; @@ -1490,9 +1490,16 @@ int ppe_sc_config_set(struct ppe_device *ppe_dev, int sc, struct ppe_sc_cfg cfg) test_bit(PPE_SC_BYPASS_COUNTER_RX, cfg.bitmaps.counter)); val |= FIELD_PREP(PPE_IN_L2_SERVICE_TBL_TX_CNT_EN, test_bit(PPE_SC_BYPASS_COUNTER_TX, cfg.bitmaps.counter)); - reg = PPE_IN_L2_SERVICE_TBL_ADDR + PPE_IN_L2_SERVICE_TBL_INC * sc; + reg = PPE_IN_L2_SERVICE_TBL_ADDR + PPE_IN_L2_SERVICE_TBL_INC(ppe_dev) * sc; - ret = regmap_write(ppe_dev->regmap, reg, val); + in_l2_val[0] = val; + + bitmap_value = bitmap_read(cfg.bitmaps.egress, PPE_SC_BYPASS_EGRESS_SMAC_MC_DROP, + PPE_SC_BYPASS_EGRESS_SIZE - PPE_SC_BYPASS_EGRESS_SMAC_MC_DROP); + in_l2_val[1] = FIELD_PREP(PPE_IN_L2_SERVICE_TBL_W1_BYPASS_BITMAP_EXT, bitmap_value); + + ret = regmap_bulk_write(ppe_dev->regmap, reg, in_l2_val, + PPE_IN_L2_SERVICE_TBL_WORDS(ppe_dev)); if (ret) return ret; diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.h b/drivers/net/ethernet/qualcomm/ppe/ppe_config.h index 60493e51e0a4..e7cdab9d963a 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.h +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.h @@ -163,6 +163,10 @@ enum ppe_sc_egress_type { PPE_SC_BYPASS_EGRESS_FAKE_MAC_DROP = 21, PPE_SC_BYPASS_EGRESS_TUNL_CONTEXT = 22, PPE_SC_BYPASS_EGRESS_FLOW_POLICER = 23, + /* Values 24-26 are only supported by IPQ5424. */ + PPE_SC_BYPASS_EGRESS_SMAC_MC_DROP = 24, + PPE_SC_BYPASS_EGRESS_L2_FLOODING = 25, + PPE_SC_BYPASS_EGRESS_TUNNEL_EXP_CNT_CTRL = 26, /* This must be last as it determines the size of the BITMAP. */ PPE_SC_BYPASS_EGRESS_SIZE, }; diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h index 441e8e04a80b..089aa34b7732 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h @@ -223,13 +223,23 @@ /* PPE service code configuration for destination port and counter. */ #define PPE_IN_L2_SERVICE_TBL_ADDR 0x66000 #define PPE_IN_L2_SERVICE_TBL_ENTRIES 256 -#define PPE_IN_L2_SERVICE_TBL_INC 0x10 +#define PPE_IN_L2_SERVICE_TBL_IPQ9574_INC 0x10 +#define PPE_IN_L2_SERVICE_TBL_IPQ5424_INC 0x20 +#define PPE_IN_L2_SERVICE_TBL_INC(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_IN_L2_SERVICE_TBL_IPQ5424_INC : \ + PPE_IN_L2_SERVICE_TBL_IPQ9574_INC) +#define PPE_IN_L2_SERVICE_TBL_IPQ9574_WORDS 1 +#define PPE_IN_L2_SERVICE_TBL_IPQ5424_WORDS 2 +#define PPE_IN_L2_SERVICE_TBL_WORDS(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_IN_L2_SERVICE_TBL_IPQ5424_WORDS : \ + PPE_IN_L2_SERVICE_TBL_IPQ9574_WORDS) #define PPE_IN_L2_SERVICE_TBL_DST_PORT_ID_VALID BIT(0) #define PPE_IN_L2_SERVICE_TBL_DST_PORT_ID GENMASK(4, 1) #define PPE_IN_L2_SERVICE_TBL_DST_DIRECTION BIT(5) #define PPE_IN_L2_SERVICE_TBL_DST_BYPASS_BITMAP GENMASK(29, 6) #define PPE_IN_L2_SERVICE_TBL_RX_CNT_EN BIT(30) #define PPE_IN_L2_SERVICE_TBL_TX_CNT_EN BIT(31) +#define PPE_IN_L2_SERVICE_TBL_W1_BYPASS_BITMAP_EXT GENMASK(7, 0) /* L2 Port configurations */ #define PPE_L2_VP_PORT_TBL_ADDR 0x98000 -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 10/11] net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration 2026-10-11 13:02 ` [PATCH net-next v2 10/11] net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration Luo Jie @ 2026-10-12 13:03 ` netdev-bot+sashiko 0 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sashiko @ 2026-10-12 13:03 UTC (permalink / raw) To: jie.luo Cc: andrew+netdev, davem, edumazet, kuba, pabeni, robh, krzk+dt, conor+dt, quic_leiwei, quic_suruchia, quic_pavir, horms, corbet, skhan, rdunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Thank you for your contribution! Sashiko AI review found more severe issue(s) in other patches of this series. This mail is only an FYI, in case you want to address the nit picks below when you respin. Low priority / nit picks for your consideration: - [Low] The patch adds PPE_SC_BYPASS_EGRESS_SMAC_MC_DROP (24), PPE_SC_BYPASS_EGRESS_L2_FLOODING (25) and… -- net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration This patch makes the stride of the L2 service code table depend on the SoC: 0x20 on IPQ5424 and 0x10 on IPQ9574. On IPQ5424 it also writes a second word per entry with the extended egress bypass bitmap. Three new egress bypass bits (24-26) are added for source MAC multicast drop, L2 flooding and tunnel exception counter control. > diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c > index 017d2e8342511..3dc1bcc8949eb 100644 > --- a/drivers/net/ethernet/qualcomm/ppe/ppe_config.c > +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_config.c [ ... ] > @@ -1490,9 +1490,16 @@ int ppe_sc_config_set(struct ppe_device *ppe_dev, int sc, struct ppe_sc_cfg cfg) > test_bit(PPE_SC_BYPASS_COUNTER_RX, cfg.bitmaps.counter)); > val |= FIELD_PREP(PPE_IN_L2_SERVICE_TBL_TX_CNT_EN, > test_bit(PPE_SC_BYPASS_COUNTER_TX, cfg.bitmaps.counter)); > - reg = PPE_IN_L2_SERVICE_TBL_ADDR + PPE_IN_L2_SERVICE_TBL_INC * sc; > + reg = PPE_IN_L2_SERVICE_TBL_ADDR + PPE_IN_L2_SERVICE_TBL_INC(ppe_dev) * sc; > > - ret = regmap_write(ppe_dev->regmap, reg, val); > + in_l2_val[0] = val; > + > + bitmap_value = bitmap_read(cfg.bitmaps.egress, PPE_SC_BYPASS_EGRESS_SMAC_MC_DROP, > + PPE_SC_BYPASS_EGRESS_SIZE - PPE_SC_BYPASS_EGRESS_SMAC_MC_DROP); > + in_l2_val[1] = FIELD_PREP(PPE_IN_L2_SERVICE_TBL_W1_BYPASS_BITMAP_EXT, bitmap_value); [Severity: Low] Is the CPU service code meant to bypass all three new checks on IPQ5424? The new enum values raise PPE_SC_BYPASS_EGRESS_SIZE from 24 to 27. ppe_servcode_init() is unchanged, and it still fills the whole egress bitmap and clears only one bit: drivers/net/ethernet/qualcomm/ppe/ppe_config.c:ppe_servcode_init() { ... bitmap_fill(sc_cfg.bitmaps.egress, PPE_SC_BYPASS_EGRESS_SIZE); clear_bit(PPE_SC_BYPASS_EGRESS_ACL_POST_ROUTING_CHECK, sc_cfg.bitmaps.egress); return ppe_sc_config_set(ppe_dev, PPE_EDMA_SC_BYPASS_ID, sc_cfg); } Because of this, bitmap_read() here returns 0x7, and that value goes into word 1 of the entry for PPE_EDMA_SC_BYPASS_ID on IPQ5424. Service code 1 then bypasses source MAC multicast drop, L2 flooding and tunnel exception counter control. This matches the existing policy of bypassing every egress feature except the ACL post-routing check, and IPQ9574 is unaffected. However, neither the commit message nor a code comment says that the default CPU service code now enables these bypasses. Could the commit message, or a comment in ppe_servcode_init(), say whether this is intended? > + > + ret = regmap_bulk_write(ppe_dev->regmap, reg, in_l2_val, > + PPE_IN_L2_SERVICE_TBL_WORDS(ppe_dev)); > if (ret) > return ret; > [ ... ] -- Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20261011-qcom_ipq5424_ppe-v2-0-8c7b057e2c43%40oss.qualcomm.com ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next v2 11/11] net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (9 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 10/11] net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration Luo Jie @ 2026-10-11 13:02 ` Luo Jie 2026-10-11 13:05 ` [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC netdev-bot+sinfo 11 siblings, 0 replies; 20+ messages in thread From: Luo Jie @ 2026-10-11 13:02 UTC (permalink / raw) To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap Cc: netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen, Luo Jie IPQ5424 has more BM ports than IPQ9574, so the BM used, reacted and overflow-drop counter tables have more entries on IPQ5424, and the used and reacted counter tables are located at different addresses. The BM silent-drop counter table on the other hand has only 4 entries on IPQ5424, versus 8 on IPQ9574. Signed-off-by: Luo Jie <jie.luo@oss.qualcomm.com> --- drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c | 14 +++++----- drivers/net/ethernet/qualcomm/ppe/ppe_regs.h | 36 ++++++++++++++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c b/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c index fd959a76ff43..8d5a6fad8337 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_debugfs.c @@ -201,7 +201,7 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq) seq_printf(seq, "%-24s", "BM SILENT_DROP:"); tag = 0; - for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES; i++) { + for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES(ppe_dev); i++) { reg = PPE_DROP_CNT_TBL_ADDR + i * PPE_DROP_CNT_TBL_INC; ret = ppe_pkt_cnt_get(ppe_dev, reg, PPE_PKT_CNT_SIZE_1WORD, &pkt_cnt, NULL); @@ -225,7 +225,7 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq) */ seq_printf(seq, "%-24s", "BM OVERFLOW_DROP:"); tag = 0; - for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES; i++) { + for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES(ppe_dev); i++) { reg = PPE_DROP_STAT_TBL_ADDR + PPE_DROP_STAT_TBL_INC * i; ret = ppe_pkt_cnt_get(ppe_dev, reg, PPE_PKT_CNT_SIZE_3WORD, @@ -248,8 +248,8 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq) /* The number of currently occupied buffers, that can't be flushed. */ seq_printf(seq, "%-24s", "BM USED/REACT:"); tag = 0; - for (i = 0; i < PPE_BM_USED_CNT_TBL_ENTRIES; i++) { - reg = PPE_BM_USED_CNT_TBL_ADDR + i * PPE_BM_USED_CNT_TBL_INC; + for (i = 0; i < PPE_BM_USED_CNT_TBL_ENTRIES(ppe_dev); i++) { + reg = PPE_BM_USED_CNT_TBL_ADDR(ppe_dev) + i * PPE_BM_USED_CNT_TBL_INC; ret = regmap_read(ppe_dev->regmap, reg, &val); if (ret) { dev_err(ppe_dev->dev, "CNT ERROR %d\n", ret); @@ -261,7 +261,7 @@ static int ppe_bm_counter_get(struct ppe_device *ppe_dev, struct seq_file *seq) */ pkt_cnt = FIELD_GET(PPE_BM_USED_CNT_VAL, val); - reg = PPE_BM_REACT_CNT_TBL_ADDR + i * PPE_BM_REACT_CNT_TBL_INC; + reg = PPE_BM_REACT_CNT_TBL_ADDR(ppe_dev) + i * PPE_BM_REACT_CNT_TBL_INC; ret = regmap_read(ppe_dev->regmap, reg, &val); if (ret) { dev_err(ppe_dev->dev, "CNT ERROR %d\n", ret); @@ -723,12 +723,12 @@ static ssize_t ppe_packet_counter_write(struct file *file, switch (entry->counter_type) { case PPE_CNT_BM: - for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES; i++) { + for (i = 0; i < PPE_DROP_CNT_TBL_ENTRIES(ppe_dev); i++) { reg = PPE_DROP_CNT_TBL_ADDR + i * PPE_DROP_CNT_TBL_INC; ppe_tbl_pkt_cnt_clear(ppe_dev, reg, PPE_PKT_CNT_SIZE_1WORD); } - for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES; i++) { + for (i = 0; i < PPE_DROP_STAT_TBL_ENTRIES(ppe_dev); i++) { reg = PPE_DROP_STAT_TBL_ADDR + PPE_DROP_STAT_TBL_INC * i; ppe_tbl_pkt_cnt_clear(ppe_dev, reg, PPE_PKT_CNT_SIZE_3WORD); } diff --git a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h index 089aa34b7732..d08ab02bdf79 100644 --- a/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h +++ b/drivers/net/ethernet/qualcomm/ppe/ppe_regs.h @@ -18,12 +18,20 @@ /* PPE drop counters. */ #define PPE_DROP_CNT_TBL_ADDR 0xb024 -#define PPE_DROP_CNT_TBL_ENTRIES 8 +#define PPE_DROP_CNT_TBL_IPQ9574_ENTRIES 8 +#define PPE_DROP_CNT_TBL_IPQ5424_ENTRIES 4 +#define PPE_DROP_CNT_TBL_ENTRIES(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_DROP_CNT_TBL_IPQ5424_ENTRIES : \ + PPE_DROP_CNT_TBL_IPQ9574_ENTRIES) #define PPE_DROP_CNT_TBL_INC 4 /* BM port drop counters. */ #define PPE_DROP_STAT_TBL_ADDR 0xe000 -#define PPE_DROP_STAT_TBL_ENTRIES 30 +#define PPE_DROP_STAT_TBL_IPQ9574_ENTRIES 30 +#define PPE_DROP_STAT_TBL_IPQ5424_ENTRIES 38 +#define PPE_DROP_STAT_TBL_ENTRIES(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_DROP_STAT_TBL_IPQ5424_ENTRIES : \ + PPE_DROP_STAT_TBL_IPQ9574_ENTRIES) #define PPE_DROP_STAT_TBL_INC 0x10 /* Egress VLAN counters. */ @@ -426,14 +434,30 @@ #define PPE_BM_PORT_GROUP_ID_SHARED_GROUP_ID GENMASK(1, 0) /* Counters for PPE buffers used for packets cached. */ -#define PPE_BM_USED_CNT_TBL_ADDR 0x6001c0 -#define PPE_BM_USED_CNT_TBL_ENTRIES 15 +#define PPE_BM_USED_CNT_TBL_IPQ9574_ADDR 0x6001c0 +#define PPE_BM_USED_CNT_TBL_IPQ5424_ADDR 0x600220 +#define PPE_BM_USED_CNT_TBL_ADDR(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_USED_CNT_TBL_IPQ5424_ADDR : \ + PPE_BM_USED_CNT_TBL_IPQ9574_ADDR) +#define PPE_BM_USED_CNT_TBL_IPQ9574_ENTRIES 15 +#define PPE_BM_USED_CNT_TBL_IPQ5424_ENTRIES 19 +#define PPE_BM_USED_CNT_TBL_ENTRIES(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_USED_CNT_TBL_IPQ5424_ENTRIES : \ + PPE_BM_USED_CNT_TBL_IPQ9574_ENTRIES) #define PPE_BM_USED_CNT_TBL_INC 0x4 #define PPE_BM_USED_CNT_VAL GENMASK(10, 0) /* Counters for PPE buffers used for packets received after pause frame sent. */ -#define PPE_BM_REACT_CNT_TBL_ADDR 0x600240 -#define PPE_BM_REACT_CNT_TBL_ENTRIES 15 +#define PPE_BM_REACT_CNT_TBL_IPQ9574_ADDR 0x600240 +#define PPE_BM_REACT_CNT_TBL_IPQ5424_ADDR 0x600280 +#define PPE_BM_REACT_CNT_TBL_ADDR(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_REACT_CNT_TBL_IPQ5424_ADDR : \ + PPE_BM_REACT_CNT_TBL_IPQ9574_ADDR) +#define PPE_BM_REACT_CNT_TBL_IPQ9574_ENTRIES 15 +#define PPE_BM_REACT_CNT_TBL_IPQ5424_ENTRIES 19 +#define PPE_BM_REACT_CNT_TBL_ENTRIES(ppe_dev) \ + ((ppe_dev)->type == IPQ5424_PPE ? PPE_BM_REACT_CNT_TBL_IPQ5424_ENTRIES : \ + PPE_BM_REACT_CNT_TBL_IPQ9574_ENTRIES) #define PPE_BM_REACT_CNT_TBL_INC 0x4 #define PPE_BM_REACT_CNT_VAL GENMASK(8, 0) -- 2.43.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie ` (10 preceding siblings ...) 2026-10-11 13:02 ` [PATCH net-next v2 11/11] net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support Luo Jie @ 2026-10-11 13:05 ` netdev-bot+sinfo 11 siblings, 0 replies; 20+ messages in thread From: netdev-bot+sinfo @ 2026-10-11 13:05 UTC (permalink / raw) To: Luo Jie Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Lei Wei, Suruchi Agarwal, Pavithra R, Simon Horman, Jonathan Corbet, Shuah Khan, Randy Dunlap, netdev, linux-arm-msm, devicetree, linux-kernel, linux-doc, quic_kkumarcs, quic_linchen Hi! This is an automated message. This series looks like a fix, but its commit messages seem to be missing some information: - How the issue was discovered, e.g. hit in production, hit during development, syzbot report, manual code inspection, LLM or static analysis tool scan. - Whether the issue was actually triggered, or is only theoretical (e.g. found by code inspection). If it was triggered please include the symptoms, like the stack trace or error messages. - What hardware the change was tested on. For driver fixes please mention the device (and if relevant firmware version) used for testing, or say that the change was not tested on real hardware. Please do not repost the series just to address the above. Instead, reply to this email with the missing information, so that reviewers can take it into account. If the series needs another revision for other reasons, please include the information in the commit messages then. The evaluation is done by an LLM so it may be wrong, if you think that is the case please reply and explain. ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2026-10-12 13:03 UTC | newest] Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-10-11 13:02 [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 01/11] dt-bindings: net: qcom,ipq9574-ppe: Split EDMA reset into sys and apb Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 02/11] net: ethernet: qualcomm: ppe: Fix multicast queue config table access Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 03/11] dt-bindings: net: qcom,ipq9574-ppe: Add IPQ5424 PPE support Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 04/11] docs: networking: Document IPQ5424 as a supported SoC Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 05/11] net: ethernet: qualcomm: ppe: Add platform support for IPQ5424 Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 06/11] net: ethernet: qualcomm: ppe: Add IPQ5424 BM buffer configuration Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 07/11] net: ethernet: qualcomm: ppe: Add IPQ5424 QM configuration Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 08/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler resource configuration Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 09/11] net: ethernet: qualcomm: ppe: Add IPQ5424 scheduler configuration Luo Jie 2026-10-11 13:02 ` [PATCH net-next v2 10/11] net: ethernet: qualcomm: ppe: Add IPQ5424 service code configuration Luo Jie 2026-10-12 13:03 ` netdev-bot+sashiko 2026-10-11 13:02 ` [PATCH net-next v2 11/11] net: ethernet: qualcomm: ppe: Add IPQ5424 counter debugfs support Luo Jie 2026-10-11 13:05 ` [PATCH net-next v2 00/11] net: ethernet: qualcomm: ppe: Add support for IPQ5424 SoC netdev-bot+sinfo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®