Message ID | 1360185517-9317-1-git-send-email-david.andrey@netmodule.com |
---|---|
State | Accepted |
Delegated to: | Joe Hershberger |
Headers | show |
Hi David, On 06.02.2013 22:18, David Andrey wrote: > Add support for Micrel PHY KSZ9031 in phylib, > including small rework for KSZ9021 to avoid > code duplication > > Signed-off-by: David Andrey <david.andrey@netmodule.com> > Cc: Troy Kisky <troy.kisky@boundarydevices.com> > Cc: Joe Herschberger <joe.hershberger@gmail.com> > Cc: Andy Fleming <afleming@freescale.com> > > --- > > Changes for v2: > - Same startup function for KSZ9021 and 9031 > --- > drivers/net/phy/micrel.c | 79 ++++++++++++++++++++++++++++++---------------- > 1 files changed, 52 insertions(+), 27 deletions(-) > > diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c > index 30f3264..2a8b6cb 100644 > --- a/drivers/net/phy/micrel.c > +++ b/drivers/net/phy/micrel.c > @@ -18,6 +18,7 @@ > * > * Copyright 2010-2011 Freescale Semiconductor, Inc. > * author Andy Fleming > + * (C) 2012 NetModule AG, David Andrey, added KSZ9031 > * > */ > #include <config.h> > @@ -52,16 +53,46 @@ static struct phy_driver KS8721_driver = { > }; > #endif > > + > +/** > + * KSZ9021 - KSZ9031 common > + */ > + > +#define MII_KSZ90xx_PHY_CTL 0x1f > +#define MIIM_KSZ90xx_PHYCTL_1000 (1 << 6) > +#define MIIM_KSZ90xx_PHYCTL_100 (1 << 5) > +#define MIIM_KSZ90xx_PHYCTL_10 (1 << 4) > +#define MIIM_KSZ90xx_PHYCTL_DUPLEX (1 << 3) > + > +static int ksz90xx_startup(struct phy_device *phydev) > +{ > + unsigned phy_ctl; > + genphy_update_link(phydev); > + phy_ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_KSZ90xx_PHY_CTL); > + > + if (phy_ctl & MIIM_KSZ90xx_PHYCTL_DUPLEX) > + phydev->duplex = DUPLEX_FULL; > + else > + phydev->duplex = DUPLEX_HALF; > + > + if (phy_ctl & MIIM_KSZ90xx_PHYCTL_1000) > + phydev->speed = SPEED_1000; > + else if (phy_ctl & MIIM_KSZ90xx_PHYCTL_100) > + phydev->speed = SPEED_100; > + else if (phy_ctl & MIIM_KSZ90xx_PHYCTL_10) > + phydev->speed = SPEED_10; > + return 0; > +} > #ifdef CONFIG_PHY_MICREL_KSZ9021 > -/* ksz9021 PHY Registers */ > + > +/* > + * KSZ9021 > + */ > + > +/* PHY Registers */ > #define MII_KSZ9021_EXTENDED_CTRL 0x0b > #define MII_KSZ9021_EXTENDED_DATAW 0x0c > #define MII_KSZ9021_EXTENDED_DATAR 0x0d > -#define MII_KSZ9021_PHY_CTL 0x1f > -#define MIIM_KSZ9021_PHYCTL_1000 (1 << 6) > -#define MIIM_KSZ9021_PHYCTL_100 (1 << 5) > -#define MIIM_KSZ9021_PHYCTL_10 (1 << 4) > -#define MIIM_KSZ9021_PHYCTL_DUPLEX (1 << 3) > > #define CTRL1000_PREFER_MASTER (1 << 10) > #define CTRL1000_CONFIG_MASTER (1 << 11) > @@ -106,37 +137,30 @@ static int ksz9021_config(struct phy_device *phydev) > return 0; > } > > -static int ksz9021_startup(struct phy_device *phydev) > -{ > - unsigned phy_ctl; > - genphy_update_link(phydev); > - phy_ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_KSZ9021_PHY_CTL); > - > - if (phy_ctl & MIIM_KSZ9021_PHYCTL_DUPLEX) > - phydev->duplex = DUPLEX_FULL; > - else > - phydev->duplex = DUPLEX_HALF; > - > - if (phy_ctl & MIIM_KSZ9021_PHYCTL_1000) > - phydev->speed = SPEED_1000; > - else if (phy_ctl & MIIM_KSZ9021_PHYCTL_100) > - phydev->speed = SPEED_100; > - else if (phy_ctl & MIIM_KSZ9021_PHYCTL_10) > - phydev->speed = SPEED_10; > - return 0; > -} > - > static struct phy_driver ksz9021_driver = { > .name = "Micrel ksz9021", > .uid = 0x221610, > .mask = 0xfffff0, Why don't you just change the mask to support both PHY's with one struct here? Something like this: static struct phy_driver ksz9021_driver = { - .name = "Micrel ksz9021", + .name = "Micrel ksz90x1", .uid = 0x221610, - .mask = 0xfffff0, + .mask = 0xffffc0, This would be much "simpler". Does it work for you? Best regards, Stefan -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: office@denx.de
Hi Stefan, > Why don't you just change the mask to support both PHY's with one struct here? Something like this: > > static struct phy_driver ksz9021_driver = { > - .name = "Micrel ksz9021", > + .name = "Micrel ksz90x1", > .uid = 0x221610, > - .mask = 0xfffff0, > + .mask = 0xffffc0, > > This would be much "simpler". Does it work for you? Well, because the ksz9031 works well with the generic phy config function. See ksz9021_config vs genphy_config Regards David
Hi David, On 25.03.2013 21:39, David Andrey wrote: >> Why don't you just change the mask to support both PHY's with one > struct here? Something like this: >> >> static struct phy_driver ksz9021_driver = { >> - .name = "Micrel ksz9021", >> + .name = "Micrel ksz90x1", >> .uid = 0x221610, >> - .mask = 0xfffff0, >> + .mask = 0xffffc0, >> >> This would be much "simpler". Does it work for you? > > Well, because the ksz9031 works well with the generic phy config > function. See ksz9021_config vs genphy_config Okay, I see. Thanks. Acked-by: Stefan Roese <sr@denx.de> Thanks, Stefan
Hi Joe, On Wed, Feb 6, 2013 at 7:18 PM, David Andrey <david.andrey@netmodule.com> wrote: > Add support for Micrel PHY KSZ9031 in phylib, > including small rework for KSZ9021 to avoid > code duplication > > Signed-off-by: David Andrey <david.andrey@netmodule.com> > Cc: Troy Kisky <troy.kisky@boundarydevices.com> > Cc: Joe Herschberger <joe.hershberger@gmail.com> > Cc: Andy Fleming <afleming@freescale.com> Can we get this one applied for the upcoming 2013.04? Regards, Fabio Estevam
On Tue, Jun 18, 2013 at 10:31 AM, Fabio Estevam <festevam@gmail.com> wrote: > Hi Joe, > > On Wed, Feb 6, 2013 at 7:18 PM, David Andrey <david.andrey@netmodule.com> wrote: >> Add support for Micrel PHY KSZ9031 in phylib, >> including small rework for KSZ9021 to avoid >> code duplication >> >> Signed-off-by: David Andrey <david.andrey@netmodule.com> >> Cc: Troy Kisky <troy.kisky@boundarydevices.com> >> Cc: Joe Herschberger <joe.hershberger@gmail.com> >> Cc: Andy Fleming <afleming@freescale.com> > > Can we get this one applied for the upcoming 2013.04? I have this in a branch, but I'm fixing problems with a few patches. I'll send a PR soon that should include this. Cheers, -Joe
On Wed, Feb 6, 2013 at 3:18 PM, David Andrey <david.andrey@netmodule.com> wrote: > Add support for Micrel PHY KSZ9031 in phylib, > including small rework for KSZ9021 to avoid > code duplication > > Signed-off-by: David Andrey <david.andrey@netmodule.com> > Cc: Troy Kisky <troy.kisky@boundarydevices.com> > Cc: Joe Herschberger <joe.hershberger@gmail.com> > Cc: Andy Fleming <afleming@freescale.com> Applied, Thanks. -Joe
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c index 30f3264..2a8b6cb 100644 --- a/drivers/net/phy/micrel.c +++ b/drivers/net/phy/micrel.c @@ -18,6 +18,7 @@ * * Copyright 2010-2011 Freescale Semiconductor, Inc. * author Andy Fleming + * (C) 2012 NetModule AG, David Andrey, added KSZ9031 * */ #include <config.h> @@ -52,16 +53,46 @@ static struct phy_driver KS8721_driver = { }; #endif + +/** + * KSZ9021 - KSZ9031 common + */ + +#define MII_KSZ90xx_PHY_CTL 0x1f +#define MIIM_KSZ90xx_PHYCTL_1000 (1 << 6) +#define MIIM_KSZ90xx_PHYCTL_100 (1 << 5) +#define MIIM_KSZ90xx_PHYCTL_10 (1 << 4) +#define MIIM_KSZ90xx_PHYCTL_DUPLEX (1 << 3) + +static int ksz90xx_startup(struct phy_device *phydev) +{ + unsigned phy_ctl; + genphy_update_link(phydev); + phy_ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_KSZ90xx_PHY_CTL); + + if (phy_ctl & MIIM_KSZ90xx_PHYCTL_DUPLEX) + phydev->duplex = DUPLEX_FULL; + else + phydev->duplex = DUPLEX_HALF; + + if (phy_ctl & MIIM_KSZ90xx_PHYCTL_1000) + phydev->speed = SPEED_1000; + else if (phy_ctl & MIIM_KSZ90xx_PHYCTL_100) + phydev->speed = SPEED_100; + else if (phy_ctl & MIIM_KSZ90xx_PHYCTL_10) + phydev->speed = SPEED_10; + return 0; +} #ifdef CONFIG_PHY_MICREL_KSZ9021 -/* ksz9021 PHY Registers */ + +/* + * KSZ9021 + */ + +/* PHY Registers */ #define MII_KSZ9021_EXTENDED_CTRL 0x0b #define MII_KSZ9021_EXTENDED_DATAW 0x0c #define MII_KSZ9021_EXTENDED_DATAR 0x0d -#define MII_KSZ9021_PHY_CTL 0x1f -#define MIIM_KSZ9021_PHYCTL_1000 (1 << 6) -#define MIIM_KSZ9021_PHYCTL_100 (1 << 5) -#define MIIM_KSZ9021_PHYCTL_10 (1 << 4) -#define MIIM_KSZ9021_PHYCTL_DUPLEX (1 << 3) #define CTRL1000_PREFER_MASTER (1 << 10) #define CTRL1000_CONFIG_MASTER (1 << 11) @@ -106,37 +137,30 @@ static int ksz9021_config(struct phy_device *phydev) return 0; } -static int ksz9021_startup(struct phy_device *phydev) -{ - unsigned phy_ctl; - genphy_update_link(phydev); - phy_ctl = phy_read(phydev, MDIO_DEVAD_NONE, MII_KSZ9021_PHY_CTL); - - if (phy_ctl & MIIM_KSZ9021_PHYCTL_DUPLEX) - phydev->duplex = DUPLEX_FULL; - else - phydev->duplex = DUPLEX_HALF; - - if (phy_ctl & MIIM_KSZ9021_PHYCTL_1000) - phydev->speed = SPEED_1000; - else if (phy_ctl & MIIM_KSZ9021_PHYCTL_100) - phydev->speed = SPEED_100; - else if (phy_ctl & MIIM_KSZ9021_PHYCTL_10) - phydev->speed = SPEED_10; - return 0; -} - static struct phy_driver ksz9021_driver = { .name = "Micrel ksz9021", .uid = 0x221610, .mask = 0xfffff0, .features = PHY_GBIT_FEATURES, .config = &ksz9021_config, - .startup = &ksz9021_startup, + .startup = &ksz90xx_startup, .shutdown = &genphy_shutdown, }; #endif +/* + * KSZ9031 + */ +static struct phy_driver ksz9031_driver = { + .name = "Micrel ksz9031", + .uid = 0x221620, + .mask = 0xfffffe, + .features = PHY_GBIT_FEATURES, + .config = &genphy_config, + .startup = &ksz90xx_startup, + .shutdown = &genphy_shutdown, +}; + int phy_micrel_init(void) { phy_register(&KSZ804_driver); @@ -145,5 +169,6 @@ int phy_micrel_init(void) #else phy_register(&KS8721_driver); #endif + phy_register(&ksz9031_driver); return 0; }
Add support for Micrel PHY KSZ9031 in phylib, including small rework for KSZ9021 to avoid code duplication Signed-off-by: David Andrey <david.andrey@netmodule.com> Cc: Troy Kisky <troy.kisky@boundarydevices.com> Cc: Joe Herschberger <joe.hershberger@gmail.com> Cc: Andy Fleming <afleming@freescale.com> --- Changes for v2: - Same startup function for KSZ9021 and 9031 --- drivers/net/phy/micrel.c | 79 ++++++++++++++++++++++++++++++---------------- 1 files changed, 52 insertions(+), 27 deletions(-)