All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
@ 2017-10-27  9:12 Lukasz Majewski
  2017-10-27 15:06 ` York Sun
  2017-10-30 21:57 ` [U-Boot] [PATCH v3] " Lukasz Majewski
  0 siblings, 2 replies; 12+ messages in thread
From: Lukasz Majewski @ 2017-10-27  9:12 UTC (permalink / raw)
  To: u-boot

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@denx.de>

---

Changes in v2:
- Provide the readext and writeext callbacks to other marvell ETH PHY
devices

 drivers/net/phy/marvell.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index b7f300e..19f451d 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)
 {
@@ -599,6 +624,8 @@ static struct phy_driver M88E1011S_driver = {
 	.config = &m88e1011s_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1111S_driver = {
@@ -609,6 +636,8 @@ static struct phy_driver M88E1111S_driver = {
 	.config = &m88e1111s_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1118_driver = {
@@ -619,6 +648,8 @@ static struct phy_driver M88E1118_driver = {
 	.config = &m88e1118_config,
 	.startup = &m88e1118_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1118R_driver = {
@@ -629,6 +660,8 @@ static struct phy_driver M88E1118R_driver = {
 	.config = &m88e1118_config,
 	.startup = &m88e1118_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1121R_driver = {
@@ -639,6 +672,8 @@ static struct phy_driver M88E1121R_driver = {
 	.config = &m88e1121_config,
 	.startup = &genphy_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1145_driver = {
@@ -649,6 +684,8 @@ static struct phy_driver M88E1145_driver = {
 	.config = &m88e1145_config,
 	.startup = &m88e1145_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1149S_driver = {
@@ -659,6 +696,8 @@ static struct phy_driver M88E1149S_driver = {
 	.config = &m88e1149_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1510_driver = {
@@ -669,6 +708,8 @@ static struct phy_driver M88E1510_driver = {
 	.config = &m88e1510_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 /*
@@ -684,6 +725,8 @@ static struct phy_driver M88E1518_driver = {
 	.config = &m88e1518_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1310_driver = {
@@ -694,6 +737,8 @@ static struct phy_driver M88E1310_driver = {
 	.config = &m88e1310_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1680_driver = {
@@ -704,6 +749,8 @@ static struct phy_driver M88E1680_driver = {
 	.config = &m88e1680_config,
 	.startup = &genphy_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 int phy_marvell_init(void)
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-27  9:12 [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers Lukasz Majewski
@ 2017-10-27 15:06 ` York Sun
  2017-10-27 15:23   ` Lukasz Majewski
  2017-10-30 21:57 ` [U-Boot] [PATCH v3] " Lukasz Majewski
  1 sibling, 1 reply; 12+ messages in thread
From: York Sun @ 2017-10-27 15:06 UTC (permalink / raw)
  To: u-boot

On 10/27/2017 02:12 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@denx.de>
> 
> ---
> 
> Changes in v2:
> - Provide the readext and writeext callbacks to other marvell ETH PHY
> devices
> 
>  drivers/net/phy/marvell.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 47 insertions(+)
> 
> diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
> index b7f300e..19f451d 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)
>  {
> @@ -599,6 +624,8 @@ static struct phy_driver M88E1011S_driver = {
>  	.config = &m88e1011s_config,
>  	.startup = &m88e1011s_startup,
>  	.shutdown = &genphy_shutdown,
> +	.readext = &m88e1xxx_phy_extread,
> +	.writeext = &m88e1xxx_phy_extwrite,
>  };
>  

Lukasz,

This seems wrong. 88E1011S doesn't have the page register. I can only
confirm 88E1111 and 88E1145 have pages. I don't have other part's
datasheet to check.

York

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-27 15:06 ` York Sun
@ 2017-10-27 15:23   ` Lukasz Majewski
  2017-10-27 15:28     ` York Sun
  0 siblings, 1 reply; 12+ messages in thread
From: Lukasz Majewski @ 2017-10-27 15:23 UTC (permalink / raw)
  To: u-boot

On Fri, 27 Oct 2017 15:06:37 +0000
York Sun <york.sun@nxp.com> wrote:

> On 10/27/2017 02:12 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@denx.de>
> > 
> > ---
> > 
> > Changes in v2:
> > - Provide the readext and writeext callbacks to other marvell ETH
> > PHY devices
> > 
> >  drivers/net/phy/marvell.c | 47
> > +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47
> > insertions(+)
> > 
> > diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
> > index b7f300e..19f451d 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)
> >  {
> > @@ -599,6 +624,8 @@ static struct phy_driver M88E1011S_driver = {
> >  	.config = &m88e1011s_config,
> >  	.startup = &m88e1011s_startup,
> >  	.shutdown = &genphy_shutdown,
> > +	.readext = &m88e1xxx_phy_extread,
> > +	.writeext = &m88e1xxx_phy_extwrite,
> >  };
> >  
> 
> Lukasz,
> 
> This seems wrong. 88E1011S doesn't have the page register.

Ok. I will remove this one from v3.

> I can only
> confirm 88E1111 and 88E1145 have pages. 

I do know that it works on 88E151x

The 88E1318 and 88E1618 seems to be unknown.

>I don't have other part's
> datasheet to check.

> 
> 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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-27 15:23   ` Lukasz Majewski
@ 2017-10-27 15:28     ` York Sun
  2017-10-28 21:46       ` Lukasz Majewski
  2017-10-30 10:34       ` Lukasz Majewski
  0 siblings, 2 replies; 12+ messages in thread
From: York Sun @ 2017-10-27 15:28 UTC (permalink / raw)
  To: u-boot

On 10/27/2017 08:23 AM, Lukasz Majewski wrote:
> On Fri, 27 Oct 2017 15:06:37 +0000
> York Sun <york.sun@nxp.com> wrote:
> 
>> On 10/27/2017 02:12 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@denx.de>
>>>
>>> ---
>>>
>>> Changes in v2:
>>> - Provide the readext and writeext callbacks to other marvell ETH
>>> PHY devices
>>>
>>>  drivers/net/phy/marvell.c | 47
>>> +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47
>>> insertions(+)
>>>
>>> diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
>>> index b7f300e..19f451d 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);

For register 30 and 31, the page register is 29, not 22.

>>> +	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)
>>>  {
>>> @@ -599,6 +624,8 @@ static struct phy_driver M88E1011S_driver = {
>>>  	.config = &m88e1011s_config,
>>>  	.startup = &m88e1011s_startup,
>>>  	.shutdown = &genphy_shutdown,
>>> +	.readext = &m88e1xxx_phy_extread,
>>> +	.writeext = &m88e1xxx_phy_extwrite,
>>>  };
>>>  
>>
>> Lukasz,
>>
>> This seems wrong. 88E1011S doesn't have the page register.
> 
> Ok. I will remove this one from v3.
> 
>> I can only
>> confirm 88E1111 and 88E1145 have pages. 
> 
> I do know that it works on 88E151x
> 
> The 88E1318 and 88E1618 seems to be unknown.
> 
>> I don't have other part's
>> datasheet to check.
> 

I suggest only to enable the parts you can confirm on hardware,
datasheet, or from the source code (where the page register is used).

York

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-27 15:28     ` York Sun
@ 2017-10-28 21:46       ` Lukasz Majewski
  2017-10-30 10:34       ` Lukasz Majewski
  1 sibling, 0 replies; 12+ messages in thread
From: Lukasz Majewski @ 2017-10-28 21:46 UTC (permalink / raw)
  To: u-boot

Hi York,

> On 10/27/2017 08:23 AM, Lukasz Majewski wrote:
> > On Fri, 27 Oct 2017 15:06:37 +0000
> > York Sun <york.sun@nxp.com> wrote:
> > 
> >> On 10/27/2017 02:12 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@denx.de>
> >>>
> >>> ---
> >>>
> >>> Changes in v2:
> >>> - Provide the readext and writeext callbacks to other marvell ETH
> >>> PHY devices
> >>>
> >>>  drivers/net/phy/marvell.c | 47
> >>> +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47
> >>> insertions(+)
> >>>
> >>> diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
> >>> index b7f300e..19f451d 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);
> 
> For register 30 and 31, the page register is 29, not 22.
> 
> >>> +	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)
> >>>  {
> >>> @@ -599,6 +624,8 @@ static struct phy_driver M88E1011S_driver = {
> >>>  	.config = &m88e1011s_config,
> >>>  	.startup = &m88e1011s_startup,
> >>>  	.shutdown = &genphy_shutdown,
> >>> +	.readext = &m88e1xxx_phy_extread,
> >>> +	.writeext = &m88e1xxx_phy_extwrite,
> >>>  };
> >>>  
> >>
> >> Lukasz,
> >>
> >> This seems wrong. 88E1011S doesn't have the page register.
> > 
> > Ok. I will remove this one from v3.
> > 
> >> I can only
> >> confirm 88E1111 and 88E1145 have pages. 
> > 
> > I do know that it works on 88E151x
> > 
> > The 88E1318 and 88E1618 seems to be unknown.
> > 
> >> I don't have other part's
> >> datasheet to check.

Datasheet is not so easily accessible.

> > 
> 
> I suggest only to enable the parts you can confirm on hardware,
> datasheet, or from the source code (where the page register is used).

Then this code will be enabled at:

88E1111, 88E1145, and 88E151x (which I can test).

> 
> 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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-27 15:28     ` York Sun
  2017-10-28 21:46       ` Lukasz Majewski
@ 2017-10-30 10:34       ` Lukasz Majewski
  2017-10-30 14:56         ` York Sun
  1 sibling, 1 reply; 12+ messages in thread
From: Lukasz Majewski @ 2017-10-30 10:34 UTC (permalink / raw)
  To: u-boot

Hi York,

> On 10/27/2017 08:23 AM, Lukasz Majewski wrote:
> > On Fri, 27 Oct 2017 15:06:37 +0000
> > York Sun <york.sun@nxp.com> wrote:
> >   
> >> On 10/27/2017 02:12 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@denx.de>
> >>>
> >>> ---
> >>>
> >>> Changes in v2:
> >>> - Provide the readext and writeext callbacks to other marvell ETH
> >>> PHY devices
> >>>
> >>>  drivers/net/phy/marvell.c | 47
> >>> +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47
> >>> insertions(+)
> >>>
> >>> diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
> >>> index b7f300e..19f451d 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);  
> 
> For register 30 and 31, the page register is 29, not 22.

Yes, for 88E1145 and 88E1149 the page register is 29, not 22 (as it is
in majority of devices from marvell.c file in u-boot).

It seems like the most practical approach would be as presented in
patch v1 - just enable this code on PHY which I can test.

If you find other devices (boards) and test the code, then we can add
it as well.
 
> >>> +	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)
> >>>  {
> >>> @@ -599,6 +624,8 @@ static struct phy_driver M88E1011S_driver = {
> >>>  	.config = &m88e1011s_config,
> >>>  	.startup = &m88e1011s_startup,
> >>>  	.shutdown = &genphy_shutdown,
> >>> +	.readext = &m88e1xxx_phy_extread,
> >>> +	.writeext = &m88e1xxx_phy_extwrite,
> >>>  };
> >>>    
> >>
> >> Lukasz,
> >>
> >> This seems wrong. 88E1011S doesn't have the page register.  
> > 
> > Ok. I will remove this one from v3.
> >   
> >> I can only
> >> confirm 88E1111 and 88E1145 have pages.   
> > 
> > I do know that it works on 88E151x
> > 
> > The 88E1318 and 88E1618 seems to be unknown.
> >   
> >> I don't have other part's
> >> datasheet to check.  
> >   
> 
> I suggest only to enable the parts you can confirm on hardware,
> datasheet, or from the source code (where the page register is used).
> 
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171030/edd7b7fe/attachment.sig>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-30 10:34       ` Lukasz Majewski
@ 2017-10-30 14:56         ` York Sun
  0 siblings, 0 replies; 12+ messages in thread
From: York Sun @ 2017-10-30 14:56 UTC (permalink / raw)
  To: u-boot

On 10/30/2017 03:34 AM, Lukasz Majewski wrote:
> Hi York,
> 
>> On 10/27/2017 08:23 AM, Lukasz Majewski wrote:
>>> On Fri, 27 Oct 2017 15:06:37 +0000
>>> York Sun <york.sun@nxp.com> wrote:
>>>   
>>>> On 10/27/2017 02:12 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@denx.de>
>>>>>
>>>>> ---
>>>>>
>>>>> Changes in v2:
>>>>> - Provide the readext and writeext callbacks to other marvell ETH
>>>>> PHY devices
>>>>>
>>>>>  drivers/net/phy/marvell.c | 47
>>>>> +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47
>>>>> insertions(+)
>>>>>
>>>>> diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
>>>>> index b7f300e..19f451d 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);  
>>
>> For register 30 and 31, the page register is 29, not 22.
> 
> Yes, for 88E1145 and 88E1149 the page register is 29, not 22 (as it is
> in majority of devices from marvell.c file in u-boot).
> 
> It seems like the most practical approach would be as presented in
> patch v1 - just enable this code on PHY which I can test.
> 
> If you find other devices (boards) and test the code, then we can add
> it as well.
>  

OK. Thanks for trying.

York

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v3] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-27  9:12 [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers Lukasz Majewski
  2017-10-27 15:06 ` York Sun
@ 2017-10-30 21:57 ` Lukasz Majewski
  2017-10-30 22:16   ` York Sun
                     ` (2 more replies)
  1 sibling, 3 replies; 12+ messages in thread
From: Lukasz Majewski @ 2017-10-30 21:57 UTC (permalink / raw)
  To: u-boot

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@denx.de>

---

Changes in v3:
    - Enable extended registers access only for 88E151x family of PHYs

Changes in v2:
    - Provide the readext and writeext callbacks to other marvell ETH PHY
    devices

 drivers/net/phy/marvell.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index b7f300e40f..0b9a9fce8a 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,
 };
 
 /*
@@ -684,6 +711,8 @@ static struct phy_driver M88E1518_driver = {
 	.config = &m88e1518_config,
 	.startup = &m88e1011s_startup,
 	.shutdown = &genphy_shutdown,
+	.readext = &m88e1xxx_phy_extread,
+	.writeext = &m88e1xxx_phy_extwrite,
 };
 
 static struct phy_driver M88E1310_driver = {
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v3] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-30 21:57 ` [U-Boot] [PATCH v3] " Lukasz Majewski
@ 2017-10-30 22:16   ` York Sun
  2017-11-17 10:06     ` Lukasz Majewski
  2017-12-05 20:20   ` Joe Hershberger
  2018-01-22 16:49   ` [U-Boot] " Joe Hershberger
  2 siblings, 1 reply; 12+ messages in thread
From: York Sun @ 2017-10-30 22:16 UTC (permalink / raw)
  To: u-boot

On 10/30/2017 02:58 PM, 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@denx.de>
> 
> ---
> 
> Changes in v3:
>     - Enable extended registers access only for 88E151x family of PHYs
> 
> Changes in v2:
>     - Provide the readext and writeext callbacks to other marvell ETH PHY
>     devices
> 

Reviewed-by: York Sun <york.sun@nxp.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v3] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-30 22:16   ` York Sun
@ 2017-11-17 10:06     ` Lukasz Majewski
  0 siblings, 0 replies; 12+ messages in thread
From: Lukasz Majewski @ 2017-11-17 10:06 UTC (permalink / raw)
  To: u-boot

Hi Joe,

> On 10/30/2017 02:58 PM, 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@denx.de>
> > 
> > ---
> > 
> > Changes in v3:
> >     - Enable extended registers access only for 88E151x family of
> > PHYs
> > 
> > Changes in v2:
> >     - Provide the readext and writeext callbacks to other marvell
> > ETH PHY devices
> >   
> 
> Reviewed-by: York Sun <york.sun@nxp.com>

Would it be possible to add this patch to your next u-boot-net PR?

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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171117/9dcc3797/attachment.sig>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v3] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-30 21:57 ` [U-Boot] [PATCH v3] " Lukasz Majewski
  2017-10-30 22:16   ` York Sun
@ 2017-12-05 20:20   ` Joe Hershberger
  2018-01-22 16:49   ` [U-Boot] " Joe Hershberger
  2 siblings, 0 replies; 12+ messages in thread
From: Joe Hershberger @ 2017-12-05 20:20 UTC (permalink / raw)
  To: u-boot

On Mon, Oct 30, 2017 at 4:57 PM, Lukasz Majewski <lukma@denx.de> 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@denx.de>

Acked-by: Joe Hershberger <joe.hershberger@ni.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] net: phy: marvell: Add functions to read PHY's extended registers
  2017-10-30 21:57 ` [U-Boot] [PATCH v3] " Lukasz Majewski
  2017-10-30 22:16   ` York Sun
  2017-12-05 20:20   ` Joe Hershberger
@ 2018-01-22 16:49   ` Joe Hershberger
  2 siblings, 0 replies; 12+ messages in thread
From: Joe Hershberger @ 2018-01-22 16:49 UTC (permalink / raw)
  To: u-boot

Hi Lukasz,

https://patchwork.ozlabs.org/patch/832191/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git

Thanks!
-Joe

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-01-22 16:49 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-27  9:12 [U-Boot] [PATCH v2] net: phy: marvell: Add functions to read PHY's extended registers Lukasz Majewski
2017-10-27 15:06 ` York Sun
2017-10-27 15:23   ` Lukasz Majewski
2017-10-27 15:28     ` York Sun
2017-10-28 21:46       ` Lukasz Majewski
2017-10-30 10:34       ` Lukasz Majewski
2017-10-30 14:56         ` York Sun
2017-10-30 21:57 ` [U-Boot] [PATCH v3] " Lukasz Majewski
2017-10-30 22:16   ` York Sun
2017-11-17 10:06     ` Lukasz Majewski
2017-12-05 20:20   ` Joe Hershberger
2018-01-22 16:49   ` [U-Boot] " Joe Hershberger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.