]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: airoha: Make flow control source port mapping dependent on nbq parameter
authorLorenzo Bianconi <lorenzo@kernel.org>
Fri, 6 Mar 2026 08:07:27 +0000 (09:07 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Mar 2026 02:18:49 +0000 (19:18 -0700)
Flow control source port mapping for USB serdes needs to be configured
according to the GDM port nbq parameter. This is a preliminary patch
since nbq parameter is specific for the given port serdes and needs to
be read from the DTS (in the current codebase is assigned statically).

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260306-airoha-fix-loopback-for-usb-serdes-v2-1-319de9c96826@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/airoha/airoha_eth.c
drivers/net/ethernet/airoha/airoha_regs.h

index 09acbe6695368132ddd92c3501f8711476db73f6..7b47d9e066cee75609501f87b0e97d936325517c 100644 (file)
@@ -1729,10 +1729,12 @@ static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
                      SP_CPORT_MASK(val),
                      __field_prep(SP_CPORT_MASK(val), FE_PSE_PORT_CDM2));
 
-       if (port->id != AIROHA_GDM3_IDX && airoha_is_7581(eth))
-               airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6,
-                             FC_ID_OF_SRC_PORT24_MASK,
-                             FIELD_PREP(FC_ID_OF_SRC_PORT24_MASK, 2));
+       if (port->id == AIROHA_GDM4_IDX && airoha_is_7581(eth)) {
+               u32 mask = FC_ID_OF_SRC_PORT_MASK(nbq);
+
+               airoha_fe_rmw(eth, REG_SRC_PORT_FC_MAP6, mask,
+                             __field_prep(mask, AIROHA_GDM2_IDX));
+       }
 
        return 0;
 }
index ed4e3407f4a0e8b6a630ea1213ef155604479b66..29878b954c77c79ae45e63357840a10c23c517f2 100644 (file)
 #define SP_CPORT_MASK(_n)              GENMASK(3 + ((_n) << 2), ((_n) << 2))
 
 #define REG_SRC_PORT_FC_MAP6           0x2298
-#define FC_ID_OF_SRC_PORT27_MASK       GENMASK(28, 24)
-#define FC_ID_OF_SRC_PORT26_MASK       GENMASK(20, 16)
-#define FC_ID_OF_SRC_PORT25_MASK       GENMASK(12, 8)
-#define FC_ID_OF_SRC_PORT24_MASK       GENMASK(4, 0)
+#define FC_ID_OF_SRC_PORT_MASK(_n)     GENMASK(4 + ((_n) << 3), ((_n) << 3))
 
 #define REG_CDM5_RX_OQ1_DROP_CNT       0x29d4