Message ID | 20211231043306.12322-10-luizluca@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: dsa: realtek: MDIO interface and RTL8367S | expand |
On Fri, Dec 31, 2021 at 01:33:04AM -0300, Luiz Angelo Daros de Luca wrote: > Instead of a fixed CPU port, assume that DSA is correct. > > Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com> > Tested-by: Arınç ÜNAL <arinc.unal@arinc9.com> > --- > drivers/net/dsa/realtek/rtl8365mb.c | 23 ++++++++++++++--------- > 1 file changed, 14 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/dsa/realtek/rtl8365mb.c b/drivers/net/dsa/realtek/rtl8365mb.c > index b22f50a9d1ef..168e857a4e34 100644 > --- a/drivers/net/dsa/realtek/rtl8365mb.c > +++ b/drivers/net/dsa/realtek/rtl8365mb.c > @@ -103,14 +103,13 @@ > > /* Chip-specific data and limits */ > #define RTL8365MB_CHIP_ID_8365MB_VC 0x6367 > -#define RTL8365MB_CPU_PORT_NUM_8365MB_VC 6 > #define RTL8365MB_LEARN_LIMIT_MAX_8365MB_VC 2112 > > /* Family-specific data and limits */ > #define RTL8365MB_PHYADDRMAX 7 > #define RTL8365MB_NUM_PHYREGS 32 > #define RTL8365MB_PHYREGMAX (RTL8365MB_NUM_PHYREGS - 1) > -#define RTL8365MB_MAX_NUM_PORTS (RTL8365MB_CPU_PORT_NUM_8365MB_VC + 1) > +#define RTL8365MB_MAX_NUM_PORTS 7 > > /* Chip identification registers */ > #define RTL8365MB_CHIP_ID_REG 0x1300 > @@ -1833,9 +1832,18 @@ static int rtl8365mb_setup(struct dsa_switch *ds) > dev_info(priv->dev, "no interrupt support\n"); > > /* Configure CPU tagging */ > - ret = rtl8365mb_cpu_config(priv); > - if (ret) > - goto out_teardown_irq; > + for (i = 0; i < priv->num_ports; i++) { > + if (!(dsa_is_cpu_port(priv->ds, i))) > + continue; dsa_switch_for_each_cpu_port > + priv->cpu_port = i; > + mb->cpu.mask = BIT(priv->cpu_port); > + mb->cpu.trap_port = priv->cpu_port; > + ret = rtl8365mb_cpu_config(priv); > + if (ret) > + goto out_teardown_irq; > + > + break; > + } > > /* Configure ports */ > for (i = 0; i < priv->num_ports; i++) { > @@ -1967,8 +1975,7 @@ static int rtl8365mb_detect(struct realtek_priv *priv) > "found an RTL8365MB-VC switch (ver=0x%04x)\n", > chip_ver); > > - priv->cpu_port = RTL8365MB_CPU_PORT_NUM_8365MB_VC; > - priv->num_ports = priv->cpu_port + 1; > + priv->num_ports = RTL8365MB_MAX_NUM_PORTS; > > mb->priv = priv; > mb->chip_id = chip_id; > @@ -1979,8 +1986,6 @@ static int rtl8365mb_detect(struct realtek_priv *priv) > mb->jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc); > > mb->cpu.enable = 1; > - mb->cpu.mask = BIT(priv->cpu_port); > - mb->cpu.trap_port = priv->cpu_port; > mb->cpu.insert = RTL8365MB_CPU_INSERT_TO_ALL; > mb->cpu.position = RTL8365MB_CPU_POS_AFTER_SA; > mb->cpu.rx_length = RTL8365MB_CPU_RXLEN_64BYTES; > -- > 2.34.0 >
diff --git a/drivers/net/dsa/realtek/rtl8365mb.c b/drivers/net/dsa/realtek/rtl8365mb.c index b22f50a9d1ef..168e857a4e34 100644 --- a/drivers/net/dsa/realtek/rtl8365mb.c +++ b/drivers/net/dsa/realtek/rtl8365mb.c @@ -103,14 +103,13 @@ /* Chip-specific data and limits */ #define RTL8365MB_CHIP_ID_8365MB_VC 0x6367 -#define RTL8365MB_CPU_PORT_NUM_8365MB_VC 6 #define RTL8365MB_LEARN_LIMIT_MAX_8365MB_VC 2112 /* Family-specific data and limits */ #define RTL8365MB_PHYADDRMAX 7 #define RTL8365MB_NUM_PHYREGS 32 #define RTL8365MB_PHYREGMAX (RTL8365MB_NUM_PHYREGS - 1) -#define RTL8365MB_MAX_NUM_PORTS (RTL8365MB_CPU_PORT_NUM_8365MB_VC + 1) +#define RTL8365MB_MAX_NUM_PORTS 7 /* Chip identification registers */ #define RTL8365MB_CHIP_ID_REG 0x1300 @@ -1833,9 +1832,18 @@ static int rtl8365mb_setup(struct dsa_switch *ds) dev_info(priv->dev, "no interrupt support\n"); /* Configure CPU tagging */ - ret = rtl8365mb_cpu_config(priv); - if (ret) - goto out_teardown_irq; + for (i = 0; i < priv->num_ports; i++) { + if (!(dsa_is_cpu_port(priv->ds, i))) + continue; + priv->cpu_port = i; + mb->cpu.mask = BIT(priv->cpu_port); + mb->cpu.trap_port = priv->cpu_port; + ret = rtl8365mb_cpu_config(priv); + if (ret) + goto out_teardown_irq; + + break; + } /* Configure ports */ for (i = 0; i < priv->num_ports; i++) { @@ -1967,8 +1975,7 @@ static int rtl8365mb_detect(struct realtek_priv *priv) "found an RTL8365MB-VC switch (ver=0x%04x)\n", chip_ver); - priv->cpu_port = RTL8365MB_CPU_PORT_NUM_8365MB_VC; - priv->num_ports = priv->cpu_port + 1; + priv->num_ports = RTL8365MB_MAX_NUM_PORTS; mb->priv = priv; mb->chip_id = chip_id; @@ -1979,8 +1986,6 @@ static int rtl8365mb_detect(struct realtek_priv *priv) mb->jam_size = ARRAY_SIZE(rtl8365mb_init_jam_8365mb_vc); mb->cpu.enable = 1; - mb->cpu.mask = BIT(priv->cpu_port); - mb->cpu.trap_port = priv->cpu_port; mb->cpu.insert = RTL8365MB_CPU_INSERT_TO_ALL; mb->cpu.position = RTL8365MB_CPU_POS_AFTER_SA; mb->cpu.rx_length = RTL8365MB_CPU_RXLEN_64BYTES;