提交 bed1ca32 编写于 作者: P Paul Burton 提交者: Daniel Schwierzeck

net: pcnet: Fix init on big endian 64 bit

If dev->iobase is 64 bits wide then writing the value of the BAR into a
pointer to iobase will not work on big endian systems, where the BAR
value will incorrectly get written to the upper 32 bits of the 64 bit
variable. Fix this by reading the BAR into a u32, matching the type
expected by pci_read_config_dword.
Signed-off-by: NPaul Burton <paul.burton@imgtec.com>
上级 442d2e01
......@@ -155,6 +155,7 @@ int pcnet_initialize(bd_t *bis)
struct eth_device *dev;
u16 command, status;
int dev_nr = 0;
u32 bar;
PCNET_DEBUG1("\npcnet_initialize...\n");
......@@ -182,9 +183,8 @@ int pcnet_initialize(bd_t *bis)
/*
* Setup the PCI device.
*/
pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_0,
(unsigned int *)&dev->iobase);
dev->iobase = pci_io_to_phys(devbusfn, dev->iobase);
pci_read_config_dword(devbusfn, PCI_BASE_ADDRESS_0, &bar);
dev->iobase = pci_io_to_phys(devbusfn, bar);
dev->iobase &= ~0xf;
PCNET_DEBUG1("%s: devbusfn=0x%x iobase=0x%lx: ",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册