summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorPaul Burton <paul.burton@imgtec.com>2016-05-26 17:32:29 +0100
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>2016-05-31 09:38:11 +0200
commitbed1ca322da9b597aa59723a02a1dd647bf8bde4 (patch)
tree9d922069025938762f6a2ea2bdf34094f5ba1655 /drivers
parent442d2e0149c4f3f2dadcf6ebc28b58d317fc5aa0 (diff)
downloadtalos-obmc-uboot-bed1ca322da9b597aa59723a02a1dd647bf8bde4.tar.gz
talos-obmc-uboot-bed1ca322da9b597aa59723a02a1dd647bf8bde4.zip
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: Paul Burton <paul.burton@imgtec.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/pcnet.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/pcnet.c b/drivers/net/pcnet.c
index d1fd4e4e24..1da9996986 100644
--- a/drivers/net/pcnet.c
+++ b/drivers/net/pcnet.c
@@ -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: ",
OpenPOWER on IntegriCloud