[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