diff options
author | Sergei Shtylyov <sshtylyov@ru.mvista.com> | 2008-04-12 21:30:58 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-04-12 21:30:58 -0400 |
commit | 2de58e30db3f7e83592e22fb459dd6695b648889 (patch) | |
tree | ea4bb850d897aaccb86c9a5b155761b453be0957 | |
parent | 16a79142e51f9eedbf3ae9a20d9cdb2f88c86acc (diff) |
tg3: fix MMIO for PPC 44x platforms
The driver stores the PCI resource addresses into 'unsigned long' variable
before calling ioremap_nocache() on them. This warrants kernel oops when the
registers are accessed on PPC 44x platforms which (being 32-bit) have PCI
memory space mapped beyond 4 GB.
The arch/ppc/ kernel has a fixup in ioremap() that creates an illusion that
the PCI memory resource is mapped below 4 GB, but arch/powerpc/ code got rid
of this trick, having instead CONFIG_RESOURCES_64BIT enabled.
[ Bump driver version and release date -DaveM ]
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/tg3.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index d4655b2d1f3f..96043c5746d0 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -64,8 +64,8 @@ | |||
64 | 64 | ||
65 | #define DRV_MODULE_NAME "tg3" | 65 | #define DRV_MODULE_NAME "tg3" |
66 | #define PFX DRV_MODULE_NAME ": " | 66 | #define PFX DRV_MODULE_NAME ": " |
67 | #define DRV_MODULE_VERSION "3.89" | 67 | #define DRV_MODULE_VERSION "3.90" |
68 | #define DRV_MODULE_RELDATE "April 03, 2008" | 68 | #define DRV_MODULE_RELDATE "April 12, 2008" |
69 | 69 | ||
70 | #define TG3_DEF_MAC_MODE 0 | 70 | #define TG3_DEF_MAC_MODE 0 |
71 | #define TG3_DEF_RX_MODE 0 | 71 | #define TG3_DEF_RX_MODE 0 |
@@ -12578,7 +12578,8 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
12578 | const struct pci_device_id *ent) | 12578 | const struct pci_device_id *ent) |
12579 | { | 12579 | { |
12580 | static int tg3_version_printed = 0; | 12580 | static int tg3_version_printed = 0; |
12581 | unsigned long tg3reg_base, tg3reg_len; | 12581 | resource_size_t tg3reg_base; |
12582 | unsigned long tg3reg_len; | ||
12582 | struct net_device *dev; | 12583 | struct net_device *dev; |
12583 | struct tg3 *tp; | 12584 | struct tg3 *tp; |
12584 | int err, pm_cap; | 12585 | int err, pm_cap; |