* [PATCH 2/2] DM9000B: Fix PHY power for network down/up
@ 2011-02-20 21:45 Henry Nestler
2011-02-21 11:14 ` Sergei Shtylyov
0 siblings, 1 reply; 8+ messages in thread
From: Henry Nestler @ 2011-02-20 21:45 UTC (permalink / raw)
To: netdev; +Cc: akpm, tori, linux-arm-kernel
DM9000 revision B needs 1 ms delay after PHY power on (see spec), and PHY
power must on in register DM9000_GPR before all other settings will change.
Remember, that register DM9000_GPR was not changed by reset sequence.
Without these fix the FIFO goes out of sync and sends wrong data after
sequence of "ifconfig ethX down ; sleep 3 ; ifconfig ethX up".
---
Kernel version 2.6.38-rc5
drivers/net/dm9000.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index 2d4c4fc..5925569 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -802,10 +802,7 @@ dm9000_init_dm9000(struct net_device *dev)
/* Checksum mode */
dm9000_set_rx_csum_unlocked(dev, db->rx_csum);
- /* GPIO0 on pre-activate PHY */
- iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
iow(db, DM9000_GPCR, GPCR_GEP_CNTL); /* Let GPIO0 output */
- iow(db, DM9000_GPR, 0); /* Enable PHY */
ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0;
@@ -1194,6 +1191,10 @@ dm9000_open(struct net_device *dev)
if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
return -EAGAIN;
+ /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
+ iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
+ udelay(1000); /* delay needs by DM9000B */
+
/* Initialize DM9000 board */
dm9000_reset(db);
dm9000_init_dm9000(dev);
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] DM9000B: Fix PHY power for network down/up
2011-02-20 21:45 [PATCH 2/2] DM9000B: Fix PHY power for network down/up Henry Nestler
@ 2011-02-21 11:14 ` Sergei Shtylyov
2011-02-21 21:03 ` Henry Nestler
0 siblings, 1 reply; 8+ messages in thread
From: Sergei Shtylyov @ 2011-02-21 11:14 UTC (permalink / raw)
To: Henry Nestler; +Cc: netdev, tori, akpm, linux-arm-kernel
Hello.
On 21-02-2011 0:45, Henry Nestler wrote:
> DM9000 revision B needs 1 ms delay after PHY power on (see spec), and PHY
> power must on in register
Couldn't parse that.
> DM9000_GPR before all other settings will change.
> Remember, that register DM9000_GPR was not changed by reset sequence.
> Without these fix the FIFO goes out of sync and sends wrong data after
s/these/this/
> sequence of "ifconfig ethX down ; sleep 3 ; ifconfig ethX up".
[...]
> diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
> index 2d4c4fc..5925569 100644
> --- a/drivers/net/dm9000.c
> +++ b/drivers/net/dm9000.c
[...]
> @@ -1194,6 +1191,10 @@ dm9000_open(struct net_device *dev)
> if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
> return -EAGAIN;
>
> + /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
> + iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
> + udelay(1000); /* delay needs by DM9000B */
Why not mdelay(1)?
WBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] DM9000B: Fix PHY power for network down/up
2011-02-21 11:14 ` Sergei Shtylyov
@ 2011-02-21 21:03 ` Henry Nestler
2011-02-22 12:36 ` Sergei Shtylyov
2011-02-22 18:24 ` David Miller
0 siblings, 2 replies; 8+ messages in thread
From: Henry Nestler @ 2011-02-21 21:03 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: netdev, tori, akpm, linux-arm-kernel
On 21.02.2011 12:14, Sergei Shtylyov wrote:
> On 21-02-2011 0:45, Henry Nestler wrote:
>
>> DM9000 revision B needs 1 ms delay after PHY power on (see spec), and PHY
>> power must on in register
>
> Couldn't parse that.
This can read in manual DM900B-12-DS-F02 from September 2 2010, Page 14:
"If this Register 1FH bit 0 is updated from '1' to '0', the all
Registers can not be accessed within 1ms."
The example driver code waits 2 ms.
>> diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
>> index 2d4c4fc..5925569 100644
>> --- a/drivers/net/dm9000.c
>> +++ b/drivers/net/dm9000.c
> [...]
>> @@ -1194,6 +1191,10 @@ dm9000_open(struct net_device *dev)
>> if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
>> return -EAGAIN;
>>
>> + /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
>> + iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
>> + udelay(1000); /* delay needs by DM9000B */
>
> Why not mdelay(1)?
Because udelay is the base of mdelay.
See include/linux/delay.h:31
#define mdelay(n) ... udelay((n)*1000)
--
Henry N.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] DM9000B: Fix PHY power for network down/up
2011-02-21 21:03 ` Henry Nestler
@ 2011-02-22 12:36 ` Sergei Shtylyov
2011-02-22 18:24 ` David Miller
1 sibling, 0 replies; 8+ messages in thread
From: Sergei Shtylyov @ 2011-02-22 12:36 UTC (permalink / raw)
To: Henry Nestler; +Cc: Sergei Shtylyov, netdev, akpm, linux-arm-kernel, tori
Hello.
On 22-02-2011 0:03, Henry Nestler wrote:
>>> DM9000 revision B needs 1 ms delay after PHY power on (see spec), and PHY
>>> power must on in register
>> Couldn't parse that.
You seem to have missed a word in your patch description.
> This can read in manual DM900B-12-DS-F02 from September 2 2010, Page 14:
> "If this Register 1FH bit 0 is updated from '1' to '0', the all
> Registers can not be accessed within 1ms."
That I've understood.
> The example driver code waits 2 ms.
>>> diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
>>> index 2d4c4fc..5925569 100644
>>> --- a/drivers/net/dm9000.c
>>> +++ b/drivers/net/dm9000.c
>> [...]
>>> @@ -1194,6 +1191,10 @@ dm9000_open(struct net_device *dev)
>>> if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
>>> return -EAGAIN;
>>>
>>> + /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
>>> + iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
>>> + udelay(1000); /* delay needs by DM9000B */
>> Why not mdelay(1)?
> Because udelay is the base of mdelay.
> See include/linux/delay.h:31
> #define mdelay(n) ... udelay((n)*1000)
And?
WBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] DM9000B: Fix PHY power for network down/up
2011-02-21 21:03 ` Henry Nestler
2011-02-22 12:36 ` Sergei Shtylyov
@ 2011-02-22 18:24 ` David Miller
2011-02-22 19:58 ` Henry Nestler
2011-02-22 21:29 ` [PATCHv2 " Henry Nestler
1 sibling, 2 replies; 8+ messages in thread
From: David Miller @ 2011-02-22 18:24 UTC (permalink / raw)
To: henry.nestler; +Cc: sshtylyov, netdev, tori, akpm, linux-arm-kernel
From: Henry Nestler <henry.nestler@gmail.com>
Date: Mon, 21 Feb 2011 22:03:31 +0100
> On 21.02.2011 12:14, Sergei Shtylyov wrote:
>> On 21-02-2011 0:45, Henry Nestler wrote:
>>
>>> DM9000 revision B needs 1 ms delay after PHY power on (see spec), and PHY
>>> power must on in register
>>
>> Couldn't parse that.
>
> This can read in manual DM900B-12-DS-F02 from September 2 2010, Page 14:
> "If this Register 1FH bit 0 is updated from '1' to '0', the all
> Registers can not be accessed within 1ms."
>
> The example driver code waits 2 ms.
>
>>> diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
>>> index 2d4c4fc..5925569 100644
>>> --- a/drivers/net/dm9000.c
>>> +++ b/drivers/net/dm9000.c
>> [...]
>>> @@ -1194,6 +1191,10 @@ dm9000_open(struct net_device *dev)
>>> if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
>>> return -EAGAIN;
>>>
>>> + /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
>>> + iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
>>> + udelay(1000); /* delay needs by DM9000B */
>>
>> Why not mdelay(1)?
>
> Because udelay is the base of mdelay.
> See include/linux/delay.h:31
>
> #define mdelay(n) ... udelay((n)*1000)
He is telling you to use mdelay(1) because it's clearer. Please do
so.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] DM9000B: Fix PHY power for network down/up
2011-02-22 18:24 ` David Miller
@ 2011-02-22 19:58 ` Henry Nestler
2011-02-22 21:29 ` [PATCHv2 " Henry Nestler
1 sibling, 0 replies; 8+ messages in thread
From: Henry Nestler @ 2011-02-22 19:58 UTC (permalink / raw)
To: David Miller; +Cc: sshtylyov, netdev, linux-arm-kernel, Sergei Shtylyov
Hello David,
On 22.02.2011 19:24, David Miller wrote:
> From: Henry Nestler <henry.nestler@gmail.com>
> Date: Mon, 21 Feb 2011 22:03:31 +0100
>
>> On 21.02.2011 12:14, Sergei Shtylyov wrote:
>>> On 21-02-2011 0:45, Henry Nestler wrote:
>>>> + udelay(1000); /* delay needs by DM9000B */
>>>
>>> Why not mdelay(1)?
>>
>> Because udelay is the base of mdelay.
>> See include/linux/delay.h:31
>>
>> #define mdelay(n) ... udelay((n)*1000)
>
> He is telling you to use mdelay(1) because it's clearer. Please do
> so.
Thanks, that text explains it better. No problem. I will resend this patch.
--
Henry N.
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCHv2 2/2] DM9000B: Fix PHY power for network down/up
2011-02-22 18:24 ` David Miller
2011-02-22 19:58 ` Henry Nestler
@ 2011-02-22 21:29 ` Henry Nestler
2011-02-23 22:30 ` David Miller
1 sibling, 1 reply; 8+ messages in thread
From: Henry Nestler @ 2011-02-22 21:29 UTC (permalink / raw)
To: netdev; +Cc: akpm, linux-arm-kernel
DM9000 revision B needs 1 ms delay after PHY power-on.
PHY must be powered on by writing 0 into register DM9000_GPR before
all other settings will change (see Davicom spec and example code).
Remember, that register DM9000_GPR was not changed by reset sequence.
Without this fix the FIFO is out of sync and sends wrong data after
sequence of "ifconfig ethX down ; ifconfig ethX up".
---
Kernel version 2.6.38-rc5
drivers/net/dm9000.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index 2d4c4fc..5925569 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -802,10 +802,7 @@ dm9000_init_dm9000(struct net_device *dev)
/* Checksum mode */
dm9000_set_rx_csum_unlocked(dev, db->rx_csum);
- /* GPIO0 on pre-activate PHY */
- iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
iow(db, DM9000_GPCR, GPCR_GEP_CNTL); /* Let GPIO0 output */
- iow(db, DM9000_GPR, 0); /* Enable PHY */
ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0;
@@ -1194,6 +1191,10 @@ dm9000_open(struct net_device *dev)
if (request_irq(dev->irq, dm9000_interrupt, irqflags, dev->name, dev))
return -EAGAIN;
+ /* GPIO0 on pre-activate PHY, Reg 1F is not set by reset */
+ iow(db, DM9000_GPR, 0); /* REG_1F bit0 activate phyxcer */
+ mdelay(1); /* delay needs by DM9000B */
+
/* Initialize DM9000 board */
dm9000_reset(db);
dm9000_init_dm9000(dev);
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCHv2 2/2] DM9000B: Fix PHY power for network down/up
2011-02-22 21:29 ` [PATCHv2 " Henry Nestler
@ 2011-02-23 22:30 ` David Miller
0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2011-02-23 22:30 UTC (permalink / raw)
To: henry.nestler; +Cc: netdev, akpm, linux-arm-kernel
From: Henry Nestler <henry.nestler@gmail.com>
Date: Tue, 22 Feb 2011 22:29:42 +0100
> DM9000 revision B needs 1 ms delay after PHY power-on.
> PHY must be powered on by writing 0 into register DM9000_GPR before
> all other settings will change (see Davicom spec and example code).
>
> Remember, that register DM9000_GPR was not changed by reset sequence.
>
> Without this fix the FIFO is out of sync and sends wrong data after
> sequence of "ifconfig ethX down ; ifconfig ethX up".
I've applied both of your patches, thanks.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-02-23 22:29 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-02-20 21:45 [PATCH 2/2] DM9000B: Fix PHY power for network down/up Henry Nestler
2011-02-21 11:14 ` Sergei Shtylyov
2011-02-21 21:03 ` Henry Nestler
2011-02-22 12:36 ` Sergei Shtylyov
2011-02-22 18:24 ` David Miller
2011-02-22 19:58 ` Henry Nestler
2011-02-22 21:29 ` [PATCHv2 " Henry Nestler
2011-02-23 22:30 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).