Skip to content

Commit 709a3c9

Browse files
xdarklightkuba-moo
authored andcommitted
net: dsa: lantiq_gswip: Fix GSWIP_MII_CFG(p) register access
There is one GSWIP_MII_CFG register for each switch-port except the CPU port. The register offset for the first port is 0x0, 0x02 for the second, 0x04 for the third and so on. Update the driver to not only restrict the GSWIP_MII_CFG registers to ports 0, 1 and 5. Handle ports 0..5 instead but skip the CPU port. This means we are not overwriting the configuration for the third port (port two since we start counting from zero) with the settings for the sixth port (with number five) anymore. The GSWIP_MII_PCDU(p) registers are not updated because there's really only three (one for each of the following ports: 0, 1, 5). Fixes: 14fceff ("net: dsa: Add Lantiq / Intel DSA driver for vrx200") Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> Acked-by: Hauke Mehrtens <hauke@hauke-m.de> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent c1a9ec7 commit 709a3c9

1 file changed

Lines changed: 6 additions & 17 deletions

File tree

drivers/net/dsa/lantiq_gswip.c

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,7 @@
9292
GSWIP_MDIO_PHY_FDUP_MASK)
9393

9494
/* GSWIP MII Registers */
95-
#define GSWIP_MII_CFG0 0x00
96-
#define GSWIP_MII_CFG1 0x02
97-
#define GSWIP_MII_CFG5 0x04
95+
#define GSWIP_MII_CFGp(p) (0x2 * (p))
9896
#define GSWIP_MII_CFG_EN BIT(14)
9997
#define GSWIP_MII_CFG_LDCLKDIS BIT(12)
10098
#define GSWIP_MII_CFG_MODE_MIIP 0x0
@@ -392,17 +390,9 @@ static void gswip_mii_mask(struct gswip_priv *priv, u32 clear, u32 set,
392390
static void gswip_mii_mask_cfg(struct gswip_priv *priv, u32 clear, u32 set,
393391
int port)
394392
{
395-
switch (port) {
396-
case 0:
397-
gswip_mii_mask(priv, clear, set, GSWIP_MII_CFG0);
398-
break;
399-
case 1:
400-
gswip_mii_mask(priv, clear, set, GSWIP_MII_CFG1);
401-
break;
402-
case 5:
403-
gswip_mii_mask(priv, clear, set, GSWIP_MII_CFG5);
404-
break;
405-
}
393+
/* There's no MII_CFG register for the CPU port */
394+
if (!dsa_is_cpu_port(priv->ds, port))
395+
gswip_mii_mask(priv, clear, set, GSWIP_MII_CFGp(port));
406396
}
407397

408398
static void gswip_mii_mask_pcdu(struct gswip_priv *priv, u32 clear, u32 set,
@@ -822,9 +812,8 @@ static int gswip_setup(struct dsa_switch *ds)
822812
gswip_mdio_mask(priv, 0xff, 0x09, GSWIP_MDIO_MDC_CFG1);
823813

824814
/* Disable the xMII link */
825-
gswip_mii_mask_cfg(priv, GSWIP_MII_CFG_EN, 0, 0);
826-
gswip_mii_mask_cfg(priv, GSWIP_MII_CFG_EN, 0, 1);
827-
gswip_mii_mask_cfg(priv, GSWIP_MII_CFG_EN, 0, 5);
815+
for (i = 0; i < priv->hw_info->max_ports; i++)
816+
gswip_mii_mask_cfg(priv, GSWIP_MII_CFG_EN, 0, i);
828817

829818
/* enable special tag insertion on cpu port */
830819
gswip_switch_mask(priv, 0, GSWIP_FDMA_PCTRL_STEN,

0 commit comments

Comments
 (0)