Patchwork [U-Boot,resend,2/2] net/macb: Add arch specific routine to get mdio control

login
register
mail settings
Submitter Vipin Kumar
Date Dec. 6, 2012, 7:10 a.m.
Message ID <8ff845e533e9d174c6fe70cc8a6be5ec753bd071.1354777675.git.vipin.kumar@st.com>
Download mbox | patch
Permalink /patch/204158/
State Superseded
Delegated to: Joe Hershberger
Headers show

Comments

Vipin Kumar - Dec. 6, 2012, 7:10 a.m.
From: Shiraz Hashim <shiraz.hashim@st.com>

SPEAr310 and SPEAr320 Ethernet interfaces share same MDIO lines to control their
respective phys. Currently their is a fixed configuration in which only a
particular MAC can use the MDIO lines.

Call an arch specific function to take control of specific mdio lines at
runtime.

Signed-off-by: Shiraz Hashim <shiraz.hashim@st.com>
Signed-off-by: Vipin Kumar <vipin.kumar@st.com>
---
 drivers/net/macb.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
Vipin Kumar - Dec. 12, 2012, 10:37 a.m.
ping. one more :)

On 12/6/2012 12:40 PM, Vipin KUMAR wrote:
> From: Shiraz Hashim<shiraz.hashim@st.com>
>
> SPEAr310 and SPEAr320 Ethernet interfaces share same MDIO lines to control their
> respective phys. Currently their is a fixed configuration in which only a
> particular MAC can use the MDIO lines.
>
> Call an arch specific function to take control of specific mdio lines at
> runtime.
>
> Signed-off-by: Shiraz Hashim<shiraz.hashim@st.com>
> Signed-off-by: Vipin Kumar<vipin.kumar@st.com>
> ---
>   drivers/net/macb.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> index 8bacbda..45fbbd7 100644
> --- a/drivers/net/macb.c
> +++ b/drivers/net/macb.c
> @@ -163,6 +163,13 @@ static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
>   	return MACB_BFEXT(DATA, frame);
>   }
>
> +static void __def_arch_get_mdio_control(const char *name)
> +{
> +	return;
> +}
> +int arch_get_mdio_control(const char *name)
> +	__attribute__((weak, alias("__def_arch_get_mdio_control")));
> +
>   #if defined(CONFIG_CMD_MII)
>
>   int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value)
> @@ -173,6 +180,7 @@ int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value)
>   	if ( macb->phy_addr != phy_adr )
>   		return -1;
>
> +	arch_get_mdio_control(devname);
>   	*value = macb_mdio_read(macb, reg);
>
>   	return 0;
> @@ -186,6 +194,7 @@ int macb_miiphy_write(const char *devname, u8 phy_adr, u8 reg, u16 value)
>   	if ( macb->phy_addr != phy_adr )
>   		return -1;
>
> +	arch_get_mdio_control(devname);
>   	macb_mdio_write(macb, reg, value);
>
>   	return 0;
> @@ -377,6 +386,7 @@ static int macb_phy_init(struct macb_device *macb)
>   	int media, speed, duplex;
>   	int i;
>
> +	arch_get_mdio_control(netdev->name);
>   #ifdef CONFIG_MACB_SEARCH_PHY
>   	/* Auto-detect phy_addr */
>   	if (!macb_phy_find(macb)) {
Stefan Roese - Dec. 12, 2012, 11:07 a.m.
On 12/06/2012 08:10 AM, Vipin Kumar wrote:
> From: Shiraz Hashim <shiraz.hashim@st.com>
> 
> SPEAr310 and SPEAr320 Ethernet interfaces share same MDIO lines to control their
> respective phys. Currently their is a fixed configuration in which only a
> particular MAC can use the MDIO lines.

"there is" instead of "their is"

> Call an arch specific function to take control of specific mdio lines at
> runtime.
> 
> Signed-off-by: Shiraz Hashim <shiraz.hashim@st.com>
> Signed-off-by: Vipin Kumar <vipin.kumar@st.com>
> ---
>  drivers/net/macb.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> index 8bacbda..45fbbd7 100644
> --- a/drivers/net/macb.c
> +++ b/drivers/net/macb.c
> @@ -163,6 +163,13 @@ static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
>  	return MACB_BFEXT(DATA, frame);
>  }
>  
> +static void __def_arch_get_mdio_control(const char *name)
> +{
> +	return;
> +}
> +int arch_get_mdio_control(const char *name)
> +	__attribute__((weak, alias("__def_arch_get_mdio_control")));

__weak from linux/compiler.h please

Otherwise:

Acked-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan
Vipin Kumar - Dec. 12, 2012, 11:13 a.m.
On 12/12/2012 4:37 PM, Stefan Roese wrote:
> On 12/06/2012 08:10 AM, Vipin Kumar wrote:
>> From: Shiraz Hashim<shiraz.hashim@st.com>
>>
>> SPEAr310 and SPEAr320 Ethernet interfaces share same MDIO lines to control their
>> respective phys. Currently their is a fixed configuration in which only a
>> particular MAC can use the MDIO lines.
>
> "there is" instead of "their is"
>

Thanks. I would change this in v2

>> Call an arch specific function to take control of specific mdio lines at
>> runtime.
>>
>> Signed-off-by: Shiraz Hashim<shiraz.hashim@st.com>
>> Signed-off-by: Vipin Kumar<vipin.kumar@st.com>
>> ---
>>   drivers/net/macb.c | 10 ++++++++++
>>   1 file changed, 10 insertions(+)
>>
>> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
>> index 8bacbda..45fbbd7 100644
>> --- a/drivers/net/macb.c
>> +++ b/drivers/net/macb.c
>> @@ -163,6 +163,13 @@ static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
>>   	return MACB_BFEXT(DATA, frame);
>>   }
>>
>> +static void __def_arch_get_mdio_control(const char *name)
>> +{
>> +	return;
>> +}
>> +int arch_get_mdio_control(const char *name)
>> +	__attribute__((weak, alias("__def_arch_get_mdio_control")));
>
> __weak from linux/compiler.h please
>

in v2

> Otherwise:
>
> Acked-by: Stefan Roese<sr@denx.de>
>
> Thanks,
> Stefan
>
>

Vipin

Patch

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 8bacbda..45fbbd7 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -163,6 +163,13 @@  static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
 	return MACB_BFEXT(DATA, frame);
 }
 
+static void __def_arch_get_mdio_control(const char *name)
+{
+	return;
+}
+int arch_get_mdio_control(const char *name)
+	__attribute__((weak, alias("__def_arch_get_mdio_control")));
+
 #if defined(CONFIG_CMD_MII)
 
 int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value)
@@ -173,6 +180,7 @@  int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value)
 	if ( macb->phy_addr != phy_adr )
 		return -1;
 
+	arch_get_mdio_control(devname);
 	*value = macb_mdio_read(macb, reg);
 
 	return 0;
@@ -186,6 +194,7 @@  int macb_miiphy_write(const char *devname, u8 phy_adr, u8 reg, u16 value)
 	if ( macb->phy_addr != phy_adr )
 		return -1;
 
+	arch_get_mdio_control(devname);
 	macb_mdio_write(macb, reg, value);
 
 	return 0;
@@ -377,6 +386,7 @@  static int macb_phy_init(struct macb_device *macb)
 	int media, speed, duplex;
 	int i;
 
+	arch_get_mdio_control(netdev->name);
 #ifdef CONFIG_MACB_SEARCH_PHY
 	/* Auto-detect phy_addr */
 	if (!macb_phy_find(macb)) {