]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
net: Add support for mv88e609x switches
authorChris Packham <judge.packham@gmail.com>
Fri, 26 Aug 2016 05:30:25 +0000 (17:30 +1200)
committerJoe Hershberger <joe.hershberger@ni.com>
Thu, 13 Oct 2016 17:25:14 +0000 (12:25 -0500)
The Marvell Link Street mv88e60xx is a series of FastEthernet switch
chips, some of which also support Gigabit ports. It is similar to the
mv88e61xx series which support Gigabit on all ports.

The main difference is the number of ports. Which affects the
PORT_COUNT define and the size of the mask passed to
mv88e61xx_port_set_vlan().

Other than that it's just a matter of adding the appropriate chip
IDs.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Cc: Joshua Scott <joshua.scott@alliedtelesis.co.nz>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/phy/mv88e61xx.c

index 74d56098b5c9823dbdb89c163b3f6552e42cc3a6..7385848c71876e0d0c64ccadcadab78283db5748 100644 (file)
@@ -40,7 +40,7 @@
 
 #define PHY_AUTONEGOTIATE_TIMEOUT      5000
 
-#define PORT_COUNT                     7
+#define PORT_COUNT                     11
 #define PORT_MASK                      ((1 << PORT_COUNT) - 1)
 
 /* Device addresses */
 #endif
 
 /* ID register values for different switch models */
+#define PORT_SWITCH_ID_6096            0x0980
+#define PORT_SWITCH_ID_6097            0x0990
 #define PORT_SWITCH_ID_6172            0x1720
 #define PORT_SWITCH_ID_6176            0x1760
 #define PORT_SWITCH_ID_6240            0x2400
@@ -580,7 +582,7 @@ static int mv88e61xx_port_enable(struct phy_device *phydev, u8 port)
 }
 
 static int mv88e61xx_port_set_vlan(struct phy_device *phydev, u8 port,
-                                                       u8 mask)
+                                                       u16 mask)
 {
        int val;
 
@@ -974,9 +976,21 @@ static struct phy_driver mv88e61xx_driver = {
        .shutdown = &genphy_shutdown,
 };
 
+static struct phy_driver mv88e609x_driver = {
+       .name = "Marvell MV88E609x",
+       .uid = 0x1410c89,
+       .mask = 0xfffffff0,
+       .features = PHY_GBIT_FEATURES,
+       .probe = mv88e61xx_probe,
+       .config = mv88e61xx_phy_config,
+       .startup = mv88e61xx_phy_startup,
+       .shutdown = &genphy_shutdown,
+};
+
 int phy_mv88e61xx_init(void)
 {
        phy_register(&mv88e61xx_driver);
+       phy_register(&mv88e609x_driver);
 
        return 0;
 }