Jump to content

WeeB

Members
  • Posts

    1
  • Joined

  • Last visited

Reputation Activity

  1. Like
    WeeB got a reaction from tkaiser in Update patch for sunxi-dev 4.5 - bananapi-r1 switch   
    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
     
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines