kernel: b53: force BCM531x5 port 5 link state if enabled
authorRafał Miłecki <rafal@milecki.pl>
Thu, 18 Aug 2016 09:05:12 +0000 (11:05 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Thu, 8 Sep 2016 21:03:46 +0000 (23:03 +0200)
Some devices (e.g. Tenda AC9 based on BCM47189B0) have BCM53125 with
port 5 connected to the second Ethernet interface on the SoC. In such
case there is no PHY and we need to force link manually.

This assumes port 5 can be marked as enabled for such devices. It's not
implemented yet unfortunately.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
target/linux/generic/files/drivers/net/phy/b53/b53_common.c

index d96d8b8b6d7eeb872ea1d82b602740a6fe7cce1b..b884010d28268f317ff7a2920562f2bb31a1104c 100644 (file)
@@ -534,6 +534,19 @@ 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);
+
+               /* BCM47189 has another interface connected to the port 5 */
+               if (dev->enabled_ports & BIT(5)) {
+                       u8 po_reg = B53_GMII_PORT_OVERRIDE_CTRL(5);
+                       u8 gmii_po;
+
+                       b53_read8(dev, B53_CTRL_PAGE, po_reg, &gmii_po);
+                       gmii_po |= GMII_PO_LINK |
+                                  GMII_PO_RX_FLOW |
+                                  GMII_PO_TX_FLOW |
+                                  GMII_PO_EN;
+                       b53_write8(dev, B53_CTRL_PAGE, po_reg, gmii_po);
+               }
        } else if (is5301x(dev)) {
                if (cpu_port == 8) {
                        u8 mii_port_override;