I had not seen this problem until now. The patch looks ok and
probably should have been written that way initially. I have been
able to do a quick touch test with a 970A, 971, 972, 973, 975, 976, and
978 (some on ia32 and others on ppc64) without any adverse effects.
The 975 I have is copper not fiber.
Since only bit 12 is needed to enable LED writes, the code could
really be "a->write_bcr(ioaddr, 2, a->read_bcr(ioaddr, 2) | 0x1000);"
During pcnet32_open the ASEL bit is changed anyway.
This change should also be applied to 2.4.30 as well.
On Tue, Mar 15, 2005 at 02:22:48PM -0800, akpm@xxxxxxxx wrote:
>
> From: "HARDY, Steven" <steven.hardy@xxxxxxxxxxxxxxxx>
>
> I have found a bug in the pcnet32 driver (drivers/net/pcnet32.c) affecting
> all ethernet cards based on the AMD79C975 chip, using the fiber interface.
>
> It's a one line fix, where some config registers get corrupted during
> initialisation (which stops the Fiber interface working with this chip)
>
> This bug was introduced somewhere betweeen 2.4.17 and 2.6.x (noticed whilst
> upgrading to 2.6), and it may affect other chips too. I have checked all
> versions up to 2.6.11-bk6 and they are all broken.
>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
> ---
>
> 25-akpm/drivers/net/pcnet32.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletion(-)
>
> diff -puN drivers/net/pcnet32.c~pcnet32-bug-79c975-fiber-fix
> drivers/net/pcnet32.c
> --- 25/drivers/net/pcnet32.c~pcnet32-bug-79c975-fiber-fix Tue Mar 15
> 14:19:55 2005
> +++ 25-akpm/drivers/net/pcnet32.c Tue Mar 15 14:19:55 2005
> @@ -1351,7 +1351,8 @@ pcnet32_probe1(unsigned long ioaddr, int
> printk(KERN_INFO "%s: registered as %s\n", dev->name, lp->name);
> cards_found++;
>
> - a->write_bcr(ioaddr, 2, 0x1002); /* enable LED writes */
> + /* enable LED writes */
> + a->write_bcr(ioaddr, 2, a->read_bcr(ioaddr, 2) | 0x1002);
>
> return 0;
>
> _
>
--
Don Fry
brazilnut@xxxxxxxxxx
|