diff mbox

Stmmac: fix a bug when clk_csr == 0x0

Message ID CAKT61h8mcj1Gvp1i8xkM_NS2+fv1WhPtCQaFq7mi=i=JUqT4Uw@mail.gmail.com
State Superseded, archived
Delegated to: David Miller
Headers show

Commit Message

Wan ZongShun Oct. 9, 2013, 2:37 a.m. UTC
Hi Giuseppe,

According to spec, if csr clock freq is 60-100Mhz, we have to set CR[5:2] = 0000
but when I set the 'plat_dat.clk_csr = 0',acctually, this value is not used
since the driver code judge 'if (!priv->plat->clk_csr)' then go to dynamic tune
the MDC clock. So I add other judge condition.

Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
 include/linux/stmmac.h                            | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

Comments

Giuseppe CAVALLARO Oct. 9, 2013, 2:43 p.m. UTC | #1
hello

On 10/9/2013 4:37 AM, Wan ZongShun wrote:
> Hi Giuseppe,
>
> According to spec, if csr clock freq is 60-100Mhz, we have to set CR[5:2] = 0000
> but when I set the 'plat_dat.clk_csr = 0',acctually, this value is not used
> since the driver code judge 'if (!priv->plat->clk_csr)' then go to dynamic tune
> the MDC clock. So I add other judge condition.

yes, and true in case of 60-100Mhz... I don't know if this was actually
tested on SPEAr long time ago.

Pls document the new platform field in the stmmac.txt or find a way
to reuse the clk_csr (maybe not the case)

peppe

>
> Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
> ---
>   drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
>   include/linux/stmmac.h                            | 1 +
>   2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 8d4ccd3..a849092c 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -2741,7 +2741,7 @@ struct stmmac_priv *stmmac_dvr_probe(struct
> device *device,
>        * set the MDC clock dynamically according to the csr actual
>        * clock input.
>        */
> -    if (!priv->plat->clk_csr)
> +    if (priv->plat->dynamic_mdc_clk_en)
>           stmmac_clk_csr_set(priv);
>       else
>           priv->clk_csr = priv->plat->clk_csr;
> diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
> index bb5deb0..e2552ce 100644
> --- a/include/linux/stmmac.h
> +++ b/include/linux/stmmac.h
> @@ -101,6 +101,7 @@ struct plat_stmmacenet_data {
>       struct stmmac_mdio_bus_data *mdio_bus_data;
>       struct stmmac_dma_cfg *dma_cfg;
>       int clk_csr;
> +    int dynamic_mdc_clk_en;
>       int has_gmac;
>       int enh_desc;
>       int tx_coe;
>

--
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
Wan ZongShun Oct. 9, 2013, 3:02 p.m. UTC | #2
2013/10/9 Giuseppe CAVALLARO <peppe.cavallaro@st.com>:
> hello
>
>
> On 10/9/2013 4:37 AM, Wan ZongShun wrote:
>>
>> Hi Giuseppe,
>>
>> According to spec, if csr clock freq is 60-100Mhz, we have to set CR[5:2]
>> = 0000
>> but when I set the 'plat_dat.clk_csr = 0',acctually, this value is not
>> used
>> since the driver code judge 'if (!priv->plat->clk_csr)' then go to dynamic
>> tune
>> the MDC clock. So I add other judge condition.
>
>
> yes, and true in case of 60-100Mhz... I don't know if this was actually
> tested on SPEAr long time ago.
>

Hmmm, I am using other GBE chip based on synopsis IP, so I am testing
it on other platform.

> Pls document the new platform field in the stmmac.txt or find a way
> to reuse the clk_csr (maybe not the case)

Do you mean I need submit the other patch to add some comments for
this new field?
I can not find better way to fix this issue and make it more
compatible to another platform.

Wan.

>
> peppe
>
>
>>
>> Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
>> ---
>>   drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
>>   include/linux/stmmac.h                            | 1 +
>>   2 files changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> index 8d4ccd3..a849092c 100644
>> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> @@ -2741,7 +2741,7 @@ struct stmmac_priv *stmmac_dvr_probe(struct
>> device *device,
>>        * set the MDC clock dynamically according to the csr actual
>>        * clock input.
>>        */
>> -    if (!priv->plat->clk_csr)
>> +    if (priv->plat->dynamic_mdc_clk_en)
>>           stmmac_clk_csr_set(priv);
>>       else
>>           priv->clk_csr = priv->plat->clk_csr;
>> diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
>> index bb5deb0..e2552ce 100644
>> --- a/include/linux/stmmac.h
>> +++ b/include/linux/stmmac.h
>> @@ -101,6 +101,7 @@ struct plat_stmmacenet_data {
>>       struct stmmac_mdio_bus_data *mdio_bus_data;
>>       struct stmmac_dma_cfg *dma_cfg;
>>       int clk_csr;
>> +    int dynamic_mdc_clk_en;
>>       int has_gmac;
>>       int enh_desc;
>>       int tx_coe;
>>
>
Giuseppe CAVALLARO Oct. 9, 2013, 3:16 p.m. UTC | #3
On 10/9/2013 5:02 PM, Wan ZongShun wrote:
> 2013/10/9 Giuseppe CAVALLARO <peppe.cavallaro@st.com>:
>> hello
>>
>>
>> On 10/9/2013 4:37 AM, Wan ZongShun wrote:
>>>
>>> Hi Giuseppe,
>>>
>>> According to spec, if csr clock freq is 60-100Mhz, we have to set CR[5:2]
>>> = 0000
>>> but when I set the 'plat_dat.clk_csr = 0',acctually, this value is not
>>> used
>>> since the driver code judge 'if (!priv->plat->clk_csr)' then go to dynamic
>>> tune
>>> the MDC clock. So I add other judge condition.
>>
>>
>> yes, and true in case of 60-100Mhz... I don't know if this was actually
>> tested on SPEAr long time ago.
>>
>
> Hmmm, I am using other GBE chip based on synopsis IP, so I am testing
> it on other platform.
>
>> Pls document the new platform field in the stmmac.txt or find a way
>> to reuse the clk_csr (maybe not the case)
>
> Do you mean I need submit the other patch to add some comments for
> this new field?

yes in the Documentation/networking/stmmac.txt

peppe

> I can not find better way to fix this issue and make it more
> compatible to another platform.
>
> Wan.
>
>>
>> peppe
>>
>>
>>>
>>> Signed-off-by: Wan Zongshun <mcuos.com@gmail.com>
>>> ---
>>>    drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
>>>    include/linux/stmmac.h                            | 1 +
>>>    2 files changed, 2 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>>> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>>> index 8d4ccd3..a849092c 100644
>>> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>>> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>>> @@ -2741,7 +2741,7 @@ struct stmmac_priv *stmmac_dvr_probe(struct
>>> device *device,
>>>         * set the MDC clock dynamically according to the csr actual
>>>         * clock input.
>>>         */
>>> -    if (!priv->plat->clk_csr)
>>> +    if (priv->plat->dynamic_mdc_clk_en)
>>>            stmmac_clk_csr_set(priv);
>>>        else
>>>            priv->clk_csr = priv->plat->clk_csr;
>>> diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
>>> index bb5deb0..e2552ce 100644
>>> --- a/include/linux/stmmac.h
>>> +++ b/include/linux/stmmac.h
>>> @@ -101,6 +101,7 @@ struct plat_stmmacenet_data {
>>>        struct stmmac_mdio_bus_data *mdio_bus_data;
>>>        struct stmmac_dma_cfg *dma_cfg;
>>>        int clk_csr;
>>> +    int dynamic_mdc_clk_en;
>>>        int has_gmac;
>>>        int enh_desc;
>>>        int tx_coe;
>>>
>>
>
>
>

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

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 8d4ccd3..a849092c 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2741,7 +2741,7 @@  struct stmmac_priv *stmmac_dvr_probe(struct
device *device,
      * set the MDC clock dynamically according to the csr actual
      * clock input.
      */
-    if (!priv->plat->clk_csr)
+    if (priv->plat->dynamic_mdc_clk_en)
         stmmac_clk_csr_set(priv);
     else
         priv->clk_csr = priv->plat->clk_csr;
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index bb5deb0..e2552ce 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -101,6 +101,7 @@  struct plat_stmmacenet_data {
     struct stmmac_mdio_bus_data *mdio_bus_data;
     struct stmmac_dma_cfg *dma_cfg;
     int clk_csr;
+    int dynamic_mdc_clk_en;
     int has_gmac;
     int enh_desc;
     int tx_coe;