rtl8139 pci mem freeze (more info)

Daniel Kobras zxmfj03@fphp16.tphys.physik.uni-tuebingen.de
Thu Sep 30 17:44:27 1999


On Thu, 30 Sep 1999, Donald Becker wrote:

> > +	outl_f(dev->dev_addr[0], ioaddr + MAC0);
> > +	outl(dev->dev_addr[4], ioaddr + MAC0 + 4);
> 
> This is incorrect -- you are only writing one byte of the station address.

Duh. Yes.

> I think that the proper code is
> 	outl(cpu_to_le32(*(u32*)(dev->dev_addr + 0)), ioaddr + MAC0 + 0);
> 	outl(cpu_to_le32(*(u32*)(dev->dev_addr + 4)), ioaddr + MAC0 + 4);

Hm... I admit I always get terribly confused when it comes to endianness
issues but isn't the LE ordering already enforced by the fact that
dev_addr is a u8[] rather than a u32[]?

> > -		outw(cur_rx - 16, ioaddr + RxBufPtr);
> > +		outw_f(cur_rx - 16, ioaddr + RxBufPtr);
> 
> This is very curious.  It makes me suspicious about what the motherboard
> chipset is doing to the writes if this doesn't work correctly.

I'm puzzled as well. That's why I was extra careful that this change 
indeed fixed the problem before sending out the patch. It did, but I don't
have the faintest idea as to why. So I guess there are still possible
lockups hidden in the driver (on certain chipsets). 

Daniel.

 | To unsubscribe, send mail to Majordomo@cesdis.gsfc.nasa.gov, and within the
 |  body of the mail, include only the text:
 |   unsubscribe this-list-name youraddress@wherever.org
 | You will be unsubscribed as speedily as possible.