]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: airoha: Disable GDM2 forwarding before configuring GDM2 loopback
authorLorenzo Bianconi <lorenzo@kernel.org>
Wed, 20 May 2026 13:12:02 +0000 (15:12 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jun 2026 15:54:54 +0000 (17:54 +0200)
[ Upstream commit 985d4a55e64e43bd86eeb896b81ceba453301989 ]

Hw design requires to disable GDM2 forwarding before configuring GDM2
loopback in airoha_set_gdm2_loopback routine.

Fixes: 9cd451d414f6e ("net: airoha: Add loopback support for GDM2")
Tested-by: Madhur Agrawal <madhur.agrawal@airoha.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://patch.msgid.link/20260520-airoha-disable-gdm2-fwd-v1-1-1eeea5dffc2f@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/airoha/airoha_eth.c

index 83882a8953d259f4b8c32435fa4aae1e4f456810..13f74335928660c33108517d154bdf6ccd8e0039 100644 (file)
@@ -1781,11 +1781,8 @@ static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
        u32 val, pse_port, chan;
        int src_port;
 
-       /* Forward the traffic to the proper GDM port */
-       pse_port = port->id == AIROHA_GDM3_IDX ? FE_PSE_PORT_GDM3
-                                              : FE_PSE_PORT_GDM4;
        airoha_set_gdm_port_fwd_cfg(eth, REG_GDM_FWD_CFG(AIROHA_GDM2_IDX),
-                                   pse_port);
+                                   FE_PSE_PORT_DROP);
        airoha_fe_clear(eth, REG_GDM_FWD_CFG(AIROHA_GDM2_IDX),
                        GDM_STRIP_CRC_MASK);
 
@@ -1803,6 +1800,11 @@ static int airhoha_set_gdm2_loopback(struct airoha_gdm_port *port)
                      GDM_SHORT_LEN_MASK | GDM_LONG_LEN_MASK,
                      FIELD_PREP(GDM_SHORT_LEN_MASK, 60) |
                      FIELD_PREP(GDM_LONG_LEN_MASK, AIROHA_MAX_MTU));
+       /* Forward the traffic to the proper GDM port */
+       pse_port = port->id == AIROHA_GDM3_IDX ? FE_PSE_PORT_GDM3
+                                              : FE_PSE_PORT_GDM4;
+       airoha_set_gdm_port_fwd_cfg(eth, REG_GDM_FWD_CFG(AIROHA_GDM2_IDX),
+                                   pse_port);
 
        /* Disable VIP and IFC for GDM2 */
        airoha_fe_clear(eth, REG_FE_VIP_PORT_EN, BIT(AIROHA_GDM2_IDX));