diff mbox

[v2] net: sh-eth: Add flag to determine the type of TSU register

Message ID 1367903291-32323-1-git-send-email-nobuhiro.iwamatsu.yj@renesas.com
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Nobuhiro Iwamatsu May 7, 2013, 5:08 a.m. UTC
Some sh-eth devices may have two ether devices inside.
And the function of TSU is accessed from each ether device.
In this case, sh-eth need to remap address using devm_ioremap(),
without using devm_ioremap_resource().
tsu_shared_reg of sh_eth_cpu_data is used for this control.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
---
V2:
  - Change variable name from tsu_multi_reg to tsu_shared_reg.
  - Update commit message.

 drivers/net/ethernet/renesas/sh_eth.c |   11 ++++++++++-
 drivers/net/ethernet/renesas/sh_eth.h |    1 +
 2 files changed, 11 insertions(+), 1 deletion(-)

Comments

Sergei Shtylyov May 7, 2013, 2:44 p.m. UTC | #1
Hello.

    You shouldn't have posted this patch (and the subsequent series) 
during the merge window, as David will probably tell you.

On 07-05-2013 9:08, Nobuhiro Iwamatsu wrote:

> Some sh-eth devices may have two ether devices inside.

    You probably meant to say: "some SoCs may have two Ether devices 
inside".

> And the function of TSU is accessed from each ether device.
> In this case, sh-eth need to remap address using devm_ioremap(),
> without using devm_ioremap_resource().

    You could use devm_ioremap_resource() for the 1st Ether instance, 
and devm_ioremap() for the 2nd, couldn't you?

> tsu_shared_reg of sh_eth_cpu_data is used for this control.

> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov June 3, 2013, 10:07 p.m. UTC | #2
Hello.

On 05/07/2013 09:08 AM, Nobuhiro Iwamatsu wrote:

> Some sh-eth devices may have two ether devices inside.
> And the function of TSU is accessed from each ether device.
> In this case, sh-eth need to remap address using devm_ioremap(),
> without using devm_ioremap_resource().
> tsu_shared_reg of sh_eth_cpu_data is used for this control.
>
> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
[...]

> @@ -2750,7 +2754,12 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
>   			ret = -ENODEV;
>   			goto out_release;
>   		}

     This patch is not good anymore since in the meanwhile the above 
check got removed.
Iwamatsu-san, are you going to respin this patch and the next series of 
9 patches any time
soon. I need them to base my work on.

> -		mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
> +
> +		if (mdp->cd->tsu_shared_reg)
> +			mdp->tsu_addr = devm_ioremap(&pdev->dev, rtsu->start,
> +					resource_size(rtsu));
> +		else
> +			mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
>

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov June 4, 2013, 5:19 p.m. UTC | #3
Hello.

On 05/07/2013 06:44 PM, I wrote:

>    You shouldn't have posted this patch (and the subsequent series) 
> during the merge window, as David will probably tell you.
>
> On 07-05-2013 9:08, Nobuhiro Iwamatsu wrote:
>
>> Some sh-eth devices may have two ether devices inside.
>
>    You probably meant to say: "some SoCs may have two Ether devices 
> inside".
>
>> And the function of TSU is accessed from each ether device.
>> In this case, sh-eth need to remap address using devm_ioremap(),
>> without using devm_ioremap_resource().
>
>    You could use devm_ioremap_resource() for the 1st Ether instance, 
> and devm_ioremap() for the 2nd, couldn't you?

     Wait, you can't have the same resource on both platform devices, 
that's a resource conflict.

>
>> tsu_shared_reg of sh_eth_cpu_data is used for this control.
>
>> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
>

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nobuhiro Iwamatsu June 5, 2013, 5:12 a.m. UTC | #4
Hi,

(2013/06/05 2:19), Sergei Shtylyov wrote:
> Hello.
>
> On 05/07/2013 06:44 PM, I wrote:
>
>> You shouldn't have posted this patch (and the subsequent series) during the merge window, as David will probably tell you.
>>
>> On 07-05-2013 9:08, Nobuhiro Iwamatsu wrote:
>>
>>> Some sh-eth devices may have two ether devices inside.
>>
>> You probably meant to say: "some SoCs may have two Ether devices inside".
>>
>>> And the function of TSU is accessed from each ether device.
>>> In this case, sh-eth need to remap address using devm_ioremap(),
>>> without using devm_ioremap_resource().
>>
>> You could use devm_ioremap_resource() for the 1st Ether instance, and devm_ioremap() for the 2nd, couldn't you?
>

Yes, hmm. I will rewrite this patch.

> Wait, you can't have the same resource on both platform devices, that's a resource conflict.

yes, therefore, we are using lock in sh_eth_set_multicast_list function.

>
>>
>>> tsu_shared_reg of sh_eth_cpu_data is used for this control.
>>
>>> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
>>
>
> WBR, Sergei
>
>

Best regards,
   Nobuhiro
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov June 5, 2013, 2:21 p.m. UTC | #5
Hello.

On 04-06-2013 2:07, Sergei Shtylyov wrote:

>> Some sh-eth devices may have two ether devices inside.
>> And the function of TSU is accessed from each ether device.
>> In this case, sh-eth need to remap address using devm_ioremap(),
>> without using devm_ioremap_resource().
>> tsu_shared_reg of sh_eth_cpu_data is used for this control.

>> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> [...]

>> @@ -2750,7 +2754,12 @@ static int sh_eth_drv_probe(struct
>> platform_device *pdev)
>>               ret = -ENODEV;
>>               goto out_release;
>>           }

>      This patch is not good anymore since in the meanwhile the above
> check got removed.
> Iwamatsu-san, are you going to respin this patch and the next series of
> 9 patches any time
> soon. I need them to base my work on.

    So, I have taken the following series in my own hands and will 
repost it soon. Your authorship will be kept. And I've left this patch 
for you to deal with since I'm not directly interested in it.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov Jan. 2, 2018, 5:27 p.m. UTC | #6
Hello!

On 05/07/2013 09:08 AM, Nobuhiro Iwamatsu wrote:

> Some sh-eth devices may have two ether devices inside.
> And the function of TSU is accessed from each ether device.
> In this case, sh-eth need to remap address using devm_ioremap(),
> without using devm_ioremap_resource().
> tsu_shared_reg of sh_eth_cpu_data is used for this control.
> 
> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
> ---
> V2:
>    - Change variable name from tsu_multi_reg to tsu_shared_reg.
>    - Update commit message.
> 
>   drivers/net/ethernet/renesas/sh_eth.c |   11 ++++++++++-
>   drivers/net/ethernet/renesas/sh_eth.h |    1 +
>   2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
> index 33dc6f2..489be0e 100644
> --- a/drivers/net/ethernet/renesas/sh_eth.c
> +++ b/drivers/net/ethernet/renesas/sh_eth.c
[...]
> @@ -2750,7 +2754,12 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
>   			ret = -ENODEV;
>   			goto out_release;
>   		}
> -		mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
> +
> +		if (mdp->cd->tsu_shared_reg)
> +			mdp->tsu_addr = devm_ioremap(&pdev->dev, rtsu->start,
> +					resource_size(rtsu));

    I now think there's no need for a special flag -- we can just use 'devno' 
(at least for the pure platform devices). The DT probing case remains unsolved 
though (might make sense to look at the resource #0, whether it has 0x800 set 
or not)...

> +		else
> +			mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
>   		if (IS_ERR(mdp->tsu_addr)) {
>   			ret = PTR_ERR(mdp->tsu_addr);
>   			goto out_release;

MBR, Sergei
diff mbox

Patch

diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 33dc6f2..489be0e 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -610,6 +610,7 @@  static struct sh_eth_cpu_data sh_eth_my_cpu_data_giga = {
 	.no_trimd	= 1,
 	.no_ade		= 1,
 	.tsu		= 1,
+	.tsu_shared_reg	= 1,
 };
 
 static struct sh_eth_cpu_data *sh_eth_get_cpu_data(struct sh_eth_private *mdp)
@@ -691,6 +692,8 @@  static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 #if defined(CONFIG_CPU_SUBTYPE_SH7734)
 	.hw_crc     = 1,
 	.select_mii = 1,
+#else
+	.tsu_shared_reg	= 1,
 #endif
 };
 
@@ -844,6 +847,7 @@  static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 static struct sh_eth_cpu_data sh_eth_my_cpu_data = {
 	.eesipr_value	= DMAC_M_RFRMER | DMAC_M_ECI | 0x003fffff,
 	.tsu		= 1,
+	.tsu_shared_reg	= 1,
 };
 #endif
 
@@ -2750,7 +2754,12 @@  static int sh_eth_drv_probe(struct platform_device *pdev)
 			ret = -ENODEV;
 			goto out_release;
 		}
-		mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
+
+		if (mdp->cd->tsu_shared_reg)
+			mdp->tsu_addr = devm_ioremap(&pdev->dev, rtsu->start,
+					resource_size(rtsu));
+		else
+			mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
 		if (IS_ERR(mdp->tsu_addr)) {
 			ret = PTR_ERR(mdp->tsu_addr);
 			goto out_release;
diff --git a/drivers/net/ethernet/renesas/sh_eth.h b/drivers/net/ethernet/renesas/sh_eth.h
index 1ddc9f2..26cb8a0 100644
--- a/drivers/net/ethernet/renesas/sh_eth.h
+++ b/drivers/net/ethernet/renesas/sh_eth.h
@@ -472,6 +472,7 @@  struct sh_eth_cpu_data {
 	unsigned tpauser:1;		/* EtherC have TPAUSER */
 	unsigned bculr:1;		/* EtherC have BCULR */
 	unsigned tsu:1;			/* EtherC have TSU */
+	unsigned tsu_shared_reg:1;	/* EtherC have TSU shared register */
 	unsigned hw_swap:1;		/* E-DMAC have DE bit in EDMR */
 	unsigned rpadir:1;		/* E-DMAC have RPADIR */
 	unsigned no_trimd:1;		/* E-DMAC DO NOT have TRIMD */