diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-01-06 17:21:16 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-01-07 13:36:35 -0500 |
commit | d68c5a271727e09ce4a26ea8b85cbb852e06650f (patch) | |
tree | 58f48c1f956a0a18f7dff57718ca19e0f4d2b6b1 | |
parent | e501b3d87f003dfad8fcbd0f55ae17ea52495a56 (diff) |
agp: Use pci_resource_start() to get CPU physical address for BAR
amd_irongate_configure(), ati_configure(), and nvidia_configure() call
ioremap() on an address read directly from a BAR. But a BAR contains a
bus address, and ioremap() expects a CPU physical address. Use
pci_resource_start() to obtain the physical address.
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/char/agp/amd-k7-agp.c | 8 | ||||
-rw-r--r-- | drivers/char/agp/ati-agp.c | 8 | ||||
-rw-r--r-- | drivers/char/agp/nvidia-agp.c | 4 |
3 files changed, 11 insertions, 9 deletions
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c index 5f028cb1d6e8..3661a51e93e2 100644 --- a/drivers/char/agp/amd-k7-agp.c +++ b/drivers/char/agp/amd-k7-agp.c | |||
@@ -11,7 +11,7 @@ | |||
11 | #include <linux/slab.h> | 11 | #include <linux/slab.h> |
12 | #include "agp.h" | 12 | #include "agp.h" |
13 | 13 | ||
14 | #define AMD_MMBASE 0x14 | 14 | #define AMD_MMBASE_BAR 1 |
15 | #define AMD_APSIZE 0xac | 15 | #define AMD_APSIZE 0xac |
16 | #define AMD_MODECNTL 0xb0 | 16 | #define AMD_MODECNTL 0xb0 |
17 | #define AMD_MODECNTL2 0xb2 | 17 | #define AMD_MODECNTL2 0xb2 |
@@ -205,6 +205,7 @@ static int amd_irongate_fetch_size(void) | |||
205 | static int amd_irongate_configure(void) | 205 | static int amd_irongate_configure(void) |
206 | { | 206 | { |
207 | struct aper_size_info_lvl2 *current_size; | 207 | struct aper_size_info_lvl2 *current_size; |
208 | phys_addr_t reg; | ||
208 | u32 temp; | 209 | u32 temp; |
209 | u16 enable_reg; | 210 | u16 enable_reg; |
210 | 211 | ||
@@ -212,9 +213,8 @@ static int amd_irongate_configure(void) | |||
212 | 213 | ||
213 | if (!amd_irongate_private.registers) { | 214 | if (!amd_irongate_private.registers) { |
214 | /* Get the memory mapped registers */ | 215 | /* Get the memory mapped registers */ |
215 | pci_read_config_dword(agp_bridge->dev, AMD_MMBASE, &temp); | 216 | reg = pci_resource_start(agp_bridge->dev, AMD_MMBASE_BAR); |
216 | temp = (temp & PCI_BASE_ADDRESS_MEM_MASK); | 217 | amd_irongate_private.registers = (volatile u8 __iomem *) ioremap(reg, 4096); |
217 | amd_irongate_private.registers = (volatile u8 __iomem *) ioremap(temp, 4096); | ||
218 | if (!amd_irongate_private.registers) | 218 | if (!amd_irongate_private.registers) |
219 | return -ENOMEM; | 219 | return -ENOMEM; |
220 | } | 220 | } |
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c index 53cb310d433e..ba83c11186ce 100644 --- a/drivers/char/agp/ati-agp.c +++ b/drivers/char/agp/ati-agp.c | |||
@@ -12,7 +12,7 @@ | |||
12 | #include <asm/agp.h> | 12 | #include <asm/agp.h> |
13 | #include "agp.h" | 13 | #include "agp.h" |
14 | 14 | ||
15 | #define ATI_GART_MMBASE_ADDR 0x14 | 15 | #define ATI_GART_MMBASE_BAR 1 |
16 | #define ATI_RS100_APSIZE 0xac | 16 | #define ATI_RS100_APSIZE 0xac |
17 | #define ATI_RS100_IG_AGPMODE 0xb0 | 17 | #define ATI_RS100_IG_AGPMODE 0xb0 |
18 | #define ATI_RS300_APSIZE 0xf8 | 18 | #define ATI_RS300_APSIZE 0xf8 |
@@ -196,12 +196,12 @@ static void ati_cleanup(void) | |||
196 | 196 | ||
197 | static int ati_configure(void) | 197 | static int ati_configure(void) |
198 | { | 198 | { |
199 | phys_addr_t reg; | ||
199 | u32 temp; | 200 | u32 temp; |
200 | 201 | ||
201 | /* Get the memory mapped registers */ | 202 | /* Get the memory mapped registers */ |
202 | pci_read_config_dword(agp_bridge->dev, ATI_GART_MMBASE_ADDR, &temp); | 203 | reg = pci_resource_start(agp_bridge->dev, ATI_GART_MMBASE_BAR); |
203 | temp = (temp & 0xfffff000); | 204 | ati_generic_private.registers = (volatile u8 __iomem *) ioremap(reg, 4096); |
204 | ati_generic_private.registers = (volatile u8 __iomem *) ioremap(temp, 4096); | ||
205 | 205 | ||
206 | if (!ati_generic_private.registers) | 206 | if (!ati_generic_private.registers) |
207 | return -ENOMEM; | 207 | return -ENOMEM; |
diff --git a/drivers/char/agp/nvidia-agp.c b/drivers/char/agp/nvidia-agp.c index ab65d55272c4..a1861b75eb31 100644 --- a/drivers/char/agp/nvidia-agp.c +++ b/drivers/char/agp/nvidia-agp.c | |||
@@ -106,6 +106,7 @@ static int nvidia_configure(void) | |||
106 | { | 106 | { |
107 | int i, rc, num_dirs; | 107 | int i, rc, num_dirs; |
108 | u32 apbase, aplimit; | 108 | u32 apbase, aplimit; |
109 | phys_addr_t apbase_phys; | ||
109 | struct aper_size_info_8 *current_size; | 110 | struct aper_size_info_8 *current_size; |
110 | u32 temp; | 111 | u32 temp; |
111 | 112 | ||
@@ -152,8 +153,9 @@ static int nvidia_configure(void) | |||
152 | pci_write_config_dword(agp_bridge->dev, NVIDIA_0_APSIZE, temp | 0x100); | 153 | pci_write_config_dword(agp_bridge->dev, NVIDIA_0_APSIZE, temp | 0x100); |
153 | 154 | ||
154 | /* map aperture */ | 155 | /* map aperture */ |
156 | apbase_phys = pci_resource_start(agp_bridge->dev, AGP_APERTURE_BAR); | ||
155 | nvidia_private.aperture = | 157 | nvidia_private.aperture = |
156 | (volatile u32 __iomem *) ioremap(apbase, 33 * PAGE_SIZE); | 158 | (volatile u32 __iomem *) ioremap(apbase_phys, 33 * PAGE_SIZE); |
157 | 159 | ||
158 | if (!nvidia_private.aperture) | 160 | if (!nvidia_private.aperture) |
159 | return -ENOMEM; | 161 | return -ENOMEM; |