These ports are also used in GMAC3 configuration, just for radios
rather than physical Ethernet ports.

Signed-off-by: Rafał Miłecki <[email protected]>
---
People interested in more details of GMAC3 configuration may take a look
at bcmfwd.h from Broadcom's SDK.
---
 .../generic/files/drivers/net/phy/b53/b53_common.c | 38 +++++++++++++++-------
 1 file changed, 27 insertions(+), 11 deletions(-)

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 676e301..fa137ab 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
@@ -478,6 +478,23 @@ static void b53_switch_reset_gpio(struct b53_device *dev)
        dev->current_page = 0xff;
 }
 
+static void b53_gmii_port_override(struct b53_device *dev, int port)
+{
+       u8 po_reg = B53_GMII_PORT_OVERRIDE_CTRL(port);
+       u8 gmii_po = 0;
+
+       if (WARN_ON(port > 7))
+               return;
+
+       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 |
+                  GMII_PO_SPEED_2000M;
+       b53_write8(dev, B53_CTRL_PAGE, po_reg, gmii_po);
+}
+
 static int b53_switch_reset(struct b53_device *dev)
 {
        u8 cpu_port = dev->sw_dev.cpu_port;
@@ -548,18 +565,17 @@ static int b53_switch_reset(struct b53_device *dev)
                        b53_write8(dev, B53_CTRL_PAGE, B53_PORT_OVERRIDE_CTRL,
                                   mii_port_override);
 
-                       /* TODO: Ports 5 & 7 require some extra handling */
+                       /*
+                        * Port 8 is used as CPU in GMAC3 configuration. In such
+                        * case ports 5 and 7 are connected to wireless radios.
+                        * With proper drivers it's possible to make hw switch
+                        * handle wlan <-> lan bridging.
+                        * Both ports need overriding to be usable.
+                        */
+                       b53_gmii_port_override(dev, 5);
+                       b53_gmii_port_override(dev, 7);
                } else {
-                       u8 po_reg = B53_GMII_PORT_OVERRIDE_CTRL(cpu_port);
-                       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 |
-                                  GMII_PO_SPEED_2000M;
-                       b53_write8(dev, B53_CTRL_PAGE, po_reg, gmii_po);
+                       b53_gmii_port_override(dev, cpu_port);
                }
        }
 
-- 
1.8.4.5
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to