Signed-off-by: Rafał Miłecki <zaj...@gmail.com>
---
 .../generic/files/drivers/net/phy/b53/b53_common.c | 23 +++++++++++++++++++++-
 .../generic/files/drivers/net/phy/b53/b53_regs.h   |  1 +
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c 
b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
index e44d194..4597742 100644
--- a/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
+++ b/target/linux/generic/files/drivers/net/phy/b53/b53_common.c
@@ -525,7 +525,7 @@ static int b53_switch_reset(struct b53_device *dev)
                                return -EINVAL;
                        }
                }
-       } else if ((is531x5(dev) || is5301x(dev)) && dev->sw_dev.cpu_port == 
B53_CPU_PORT) {
+       } else if (is531x5(dev) && dev->sw_dev.cpu_port == B53_CPU_PORT) {
                u8 mii_port_override;
 
                b53_read8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
@@ -533,6 +533,27 @@ static int b53_switch_reset(struct b53_device *dev)
                b53_write8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
                           mii_port_override | PORT_OVERRIDE_EN |
                           PORT_OVERRIDE_LINK);
+       } else if (is5301x(dev)) {
+               /*
+                * CPU interface attached to port 8 requires specific handling.
+                * It uses different overriding register and extra ports 5 and 7
+                * need to be configured as well.
+                */
+               if (dev->sw_dev.cpu_port == 8) {
+                       u8 mii_port_override;
+
+                       b53_read8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
+                                 &mii_port_override);
+                       mii_port_override |= PORT_OVERRIDE_LINK |
+                                            PORT_OVERRIDE_RX_FLOW |
+                                            PORT_OVERRIDE_TX_FLOW |
+                                            PORT_OVERRIDE_SPEED_2000M |
+                                            PORT_OVERRIDE_EN;
+                       b53_write8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
+                                  mii_port_override);
+               } else {
+                       pr_warn("overriding CPU port other than 8 is not 
supported yet\n");
+               }
        }
 
        b53_enable_mib(dev);
diff --git a/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h 
b/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h
index 6d71493..129946d 100644
--- a/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h
+++ b/target/linux/generic/files/drivers/net/phy/b53/b53_regs.h
@@ -86,6 +86,7 @@
 #define   PORT_OVERRIDE_RV_MII_25      BIT(4) /* BCM5325 only */
 #define   PORT_OVERRIDE_RX_FLOW                BIT(4)
 #define   PORT_OVERRIDE_TX_FLOW                BIT(5)
+#define   PORT_OVERRIDE_SPEED_2000M    BIT(6) /* BCM5301X only, requires 
setting 1000M */
 #define   PORT_OVERRIDE_EN             BIT(7) /* Use the register contents */
 
 /* Power-down mode control */
-- 
1.8.4.5
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to