aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2014-01-06 17:21:16 -0500
committerBjorn Helgaas <bhelgaas@google.com>2014-01-07 13:36:35 -0500
commitd68c5a271727e09ce4a26ea8b85cbb852e06650f (patch)
tree58f48c1f956a0a18f7dff57718ca19e0f4d2b6b1
parente501b3d87f003dfad8fcbd0f55ae17ea52495a56 (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.c8
-rw-r--r--drivers/char/agp/ati-agp.c8
-rw-r--r--drivers/char/agp/nvidia-agp.c4
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)
205static int amd_irongate_configure(void) 205static 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
197static int ati_configure(void) 197static 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;