Skip to content
View in the app

A better way to browse. Learn more.

Armbian Community Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Update patch for sunxi-dev 4.5 - bananapi-r1 switch

Featured Replies

This patch modifies the sunxi-dev/bananapi-r1-switch-driver.patch to work with

the changed phy/mdio interface in 4.5.
It was also necessary to revert
commit

88f8b1bb41c6208f81b6a480244533ded7b59493 "stmmac: Fix 'eth0: No PHY found' regression"

because it breaks networking on all my sun7i-a20 boards (bananapi, cubietruck, and bananapi-r1)

 

From ce978c1235f68cf7bfeb81693d047afcee6df038 Mon Sep 17 00:00:00 2001
From: Werner Boellmann <WeeB@sample.net>
Date: Mon, 15 Feb 2016 12:22:08 +0100
Subject: [PATCH] bananapi-r1 switch driver: Modifications for Kernel v4.5

---
 drivers/net/phy/b53/b53_mdio.c      | 63 ++++++++++---------------------------
 drivers/net/phy/b53/b53_phy_fixup.c |  4 +--
 2 files changed, 19 insertions(+), 48 deletions(-)

diff --git a/drivers/net/phy/b53/b53_mdio.c b/drivers/net/phy/b53/b53_mdio.c
index 3c25f0e..fcf3a23 100644
--- a/drivers/net/phy/b53/b53_mdio.c
+++ b/drivers/net/phy/b53/b53_mdio.c
@@ -257,11 +257,11 @@ static int b53_phy_probe(struct phy_device *phydev)
     int ret;
 
     /* allow the generic phy driver to take over */
-    if (phydev->addr != B53_PSEUDO_PHY && phydev->addr != 0)
+    if (phydev->mdio.addr != B53_PSEUDO_PHY && phydev->mdio.addr != 0)
         return -ENODEV;
 
     dev.current_page = 0xff;
-    dev.priv = phydev->bus;
+    dev.priv = phydev->mdio.bus;
     dev.ops = &b53_mdio_ops;
     dev.pdata = NULL;
     mutex_init(&dev.reg_mutex);
@@ -285,7 +285,7 @@ static int b53_phy_config_init(struct phy_device *phydev)
     struct b53_device *dev;
     int ret;
 
-    dev = b53_switch_alloc(&phydev->dev, &b53_mdio_ops, phydev->bus);
+    dev = b53_switch_alloc(&phydev->mdio.dev, &b53_mdio_ops, phydev->mdio.bus);
     if (!dev)
         return -ENOMEM;
 
@@ -341,10 +341,10 @@ static int b53_phy_read_status(struct phy_device *phydev)
     return 0;
 }
 
-/* BCM5325, BCM539x */
-static struct phy_driver b53_phy_driver_id1 = {
-    .phy_id        = 0x0143bc00,
+static struct phy_driver b53_phy_drivers[] = {
+ { /* BCM5325, BCM539x */
     .name        = "Broadcom B53 (1)",
+    .phy_id        = 0x0143bc00,
     .phy_id_mask    = 0x1ffffc00,
     .features    = 0,
     .probe        = b53_phy_probe,
@@ -352,15 +352,10 @@ static struct phy_driver b53_phy_driver_id1 = {
     .config_aneg    = b53_phy_config_aneg,
     .config_init    = b53_phy_config_init,
     .read_status    = b53_phy_read_status,
-    .driver = {
-        .owner = THIS_MODULE,
-    },
-};
-
-/* BCM53125, BCM53128 */
-static struct phy_driver b53_phy_driver_id2 = {
-    .phy_id        = 0x03625c00,
+ },
+ { /* BCM53125, BCM53128 */
     .name        = "Broadcom B53 (2)",
+    .phy_id        = 0x03625c00,
     .phy_id_mask    = 0x1ffffc00,
     .features    = 0,
     .probe        = b53_phy_probe,
@@ -368,15 +363,10 @@ static struct phy_driver b53_phy_driver_id2 = {
     .config_aneg    = b53_phy_config_aneg,
     .config_init    = b53_phy_config_init,
     .read_status    = b53_phy_read_status,
-    .driver = {
-        .owner = THIS_MODULE,
-    },
-};
-
-/* BCM5365 */
-static struct phy_driver b53_phy_driver_id3 = {
-    .phy_id        = 0x00406000,
+ },
+ { /* BCM5365 */
     .name        = "Broadcom B53 (3)",
+    .phy_id        = 0x00406000,
     .phy_id_mask    = 0x1ffffc00,
     .features    = 0,
     .probe        = b53_phy_probe,
@@ -384,38 +374,19 @@ static struct phy_driver b53_phy_driver_id3 = {
     .config_aneg    = b53_phy_config_aneg,
     .config_init    = b53_phy_config_init,
     .read_status    = b53_phy_read_status,
-    .driver = {
-        .owner = THIS_MODULE,
-    },
+ }
 };
 
 int __init b53_phy_driver_register(void)
 {
-    int ret;
-
-    ret = phy_driver_register(&b53_phy_driver_id1);
-    if (ret)
-        return ret;
-
-    ret = phy_driver_register(&b53_phy_driver_id2);
-    if (ret)
-        goto err1;
-
-    ret = phy_driver_register(&b53_phy_driver_id3);
-    if (!ret)
-        return 0;
-
-    phy_driver_unregister(&b53_phy_driver_id2);
-err1:
-    phy_driver_unregister(&b53_phy_driver_id1);
-    return ret;
+    return phy_drivers_register(b53_phy_drivers,
+            ARRAY_SIZE(b53_phy_drivers), THIS_MODULE);
 }
 
 void __exit b53_phy_driver_unregister(void)
 {
-    phy_driver_unregister(&b53_phy_driver_id3);
-    phy_driver_unregister(&b53_phy_driver_id2);
-    phy_driver_unregister(&b53_phy_driver_id1);
+    phy_drivers_unregister(b53_phy_drivers,
+            ARRAY_SIZE(b53_phy_drivers));
 }
 
 module_init(b53_phy_driver_register);
diff --git a/drivers/net/phy/b53/b53_phy_fixup.c b/drivers/net/phy/b53/b53_phy_fixup.c
index 72d1373..ac3779e 100644
--- a/drivers/net/phy/b53/b53_phy_fixup.c
+++ b/drivers/net/phy/b53/b53_phy_fixup.c
@@ -29,9 +29,9 @@
 static int b53_phy_fixup(struct phy_device *dev)
 {
     u32 phy_id;
-    struct mii_bus *bus = dev->bus;
+    struct mii_bus *bus = dev->mdio.bus;
 
-    if (dev->addr != B53_PSEUDO_PHY)
+    if (dev->mdio.addr != B53_PSEUDO_PHY)
         return 0;
 
     /* read the first port's id */
--
2.7.0

 

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.