WeeB Posted March 18, 2016 Posted March 18, 2016 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 2001From: Werner Boellmann <WeeB@sample.net>Date: Mon, 15 Feb 2016 12:22:08 +0100Subject: [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.cindex 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.cindex 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 1
Recommended Posts