[U-Boot] [PATCH] net: phy: marvell: Add functions to read PHY's extended registers
Lukasz Majewski
lukma at denx.de
Thu Oct 26 21:02:14 UTC 2017
Hi York,
> On 10/26/2017 08:16 AM, Lukasz Majewski wrote:
> > On Thu, 26 Oct 2017 17:15:19 +0200
> > Lukasz Majewski <lukma at denx.de> wrote:
> >
> >> On Thu, 26 Oct 2017 15:05:18 +0000
> >> York Sun <york.sun at nxp.com> wrote:
> >>
> >>> On 09/29/2017 07:48 AM, Lukasz Majewski wrote:
> >>>> This commit allows extended Marvell registers to be read with:
> >>>>
> >>>> foo > mdio rx FEC 3.10
> >>>> Reading from bus FEC
> >>>> PHY at address 0:
> >>>> 3.16 - 0x1063
> >>>> foo > mdio wx FEC 3.10 0x1011
> >>>>
> >>>> The above code changes the way ETH connector LEDs blink.
> >>>>
> >>>> Signed-off-by: Lukasz Majewski <lukma at denx.de>
> >>>> ---
> >>>> drivers/net/phy/marvell.c | 27 +++++++++++++++++++++++++++
> >>>> 1 file changed, 27 insertions(+)
> >>>>
> >>>> diff --git a/drivers/net/phy/marvell.c
> >>>> b/drivers/net/phy/marvell.c index b7f300e..a167c34 100644
> >>>> --- a/drivers/net/phy/marvell.c
> >>>> +++ b/drivers/net/phy/marvell.c
> >>>> @@ -104,6 +104,31 @@
> >>>> #define MIIM_88E151x_MODE_SGMII 1
> >>>> #define MIIM_88E151x_RESET_OFFS 15
> >>>>
> >>>> +static int m88e1xxx_phy_extread(struct phy_device *phydev, int
> >>>> addr,
> >>>> + int devaddr, int regnum)
> >>>> +{
> >>>> + int oldpage = phy_read(phydev, MDIO_DEVAD_NONE,
> >>>> MII_MARVELL_PHY_PAGE);
> >>>> + int val;
> >>>> +
> >>>> + phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE,
> >>>> devaddr);
> >>>> + val = phy_read(phydev, MDIO_DEVAD_NONE, regnum);
> >>>> + phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE,
> >>>> oldpage); +
> >>>> + return val;
> >>>> +}
> >>>> +
> >>>> +static int m88e1xxx_phy_extwrite(struct phy_device *phydev, int
> >>>> addr,
> >>>> + int devaddr, int regnum, u16
> >>>> val) +{
> >>>> + int oldpage = phy_read(phydev, MDIO_DEVAD_NONE,
> >>>> MII_MARVELL_PHY_PAGE); +
> >>>> + phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE,
> >>>> devaddr);
> >>>> + phy_write(phydev, MDIO_DEVAD_NONE, regnum, val);
> >>>> + phy_write(phydev, MDIO_DEVAD_NONE, MII_MARVELL_PHY_PAGE,
> >>>> oldpage); +
> >>>> + return 0;
> >>>> +}
> >>>> +
> >>>> /* Marvell 88E1011S */
> >>>> static int m88e1011s_config(struct phy_device *phydev)
> >>>> {
> >>>> @@ -669,6 +694,8 @@ static struct phy_driver M88E1510_driver = {
> >>>> .config = &m88e1510_config,
> >>>> .startup = &m88e1011s_startup,
> >>>> .shutdown = &genphy_shutdown,
> >>>> + .readext = &m88e1xxx_phy_extread,
> >>>> + .writeext = &m88e1xxx_phy_extwrite,
> >>>> };
> >>>>
> >>>> /*
> >>>>
> >>>
> >>>
> >>> I guess this feature is usable. You only enable it for M88E1510.
> >>> Can the same be applied to other Marvell PHYs?
> >>
> >> It should work...
> >>
> >> However, in this patch I've only enabled one - which I could
> >> test.....
> >>
> >> I can enable more if you can help me with debugging.
> >
> > s/debugging/testing
> >
>
> I can try to find some old boards with Marvell PHYs, but it is not
> easy. Our recent boards don't use their PHYs (don't ask me why).
> Maybe we can take another approach. If you have access to the PHY
> manual, maybe you can confirm the extended page is available. This
> actually prompts another thought. What would happen if you access to
> a non-exist page? I hope it doesn't lock the system. Please try it.
It should not harm the devices. I would add the code to devices which
we can test.
Support for others would be added on demand if somebody can test the
code.
>
> York
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
More information about the U-Boot
mailing list