aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2015-08-10 23:07:06 -0400
committerDan Williams <dan.j.williams@intel.com>2015-08-10 23:07:06 -0400
commit92b19ff50e8f242392d78b2aacc5b5b672f1796b (patch)
tree463927d91228174419ba1fe327f3cec6b9a2615a
parent2584cf83578c26db144730ef498f4070f82ee3ea (diff)
cleanup IORESOURCE_CACHEABLE vs ioremap()
Quoting Arnd: I was thinking the opposite approach and basically removing all uses of IORESOURCE_CACHEABLE from the kernel. There are only a handful of them.and we can probably replace them all with hardcoded ioremap_cached() calls in the cases they are actually useful. All existing usages of IORESOURCE_CACHEABLE call ioremap() instead of ioremap_nocache() if the resource is cacheable, however ioremap() is uncached by default. Clearly none of the existing usages care about the cacheability. Particularly devm_ioremap_resource() never worked as advertised since it always fell back to plain ioremap(). Clean this up as the new direction we want is to convert ioremap_<type>() usages to memremap(..., flags). Suggested-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--arch/arm/mach-clps711x/board-cdb89712.c2
-rw-r--r--arch/powerpc/kernel/pci_of_scan.c2
-rw-r--r--arch/sparc/kernel/pci.c3
-rw-r--r--drivers/pci/probe.c3
-rw-r--r--drivers/pnp/manager.c2
-rw-r--r--drivers/scsi/aic94xx/aic94xx_init.c7
-rw-r--r--drivers/scsi/arcmsr/arcmsr_hba.c5
-rw-r--r--drivers/scsi/mvsas/mv_init.c15
-rw-r--r--drivers/video/fbdev/ocfb.c1
-rw-r--r--lib/devres.c13
-rw-r--r--lib/pci_iomap.c7
11 files changed, 16 insertions, 44 deletions
diff --git a/arch/arm/mach-clps711x/board-cdb89712.c b/arch/arm/mach-clps711x/board-cdb89712.c
index 1ec378c334e5..972abdb10028 100644
--- a/arch/arm/mach-clps711x/board-cdb89712.c
+++ b/arch/arm/mach-clps711x/board-cdb89712.c
@@ -95,7 +95,7 @@ static struct physmap_flash_data cdb89712_bootrom_pdata __initdata = {
95 95
96static struct resource cdb89712_bootrom_resources[] __initdata = { 96static struct resource cdb89712_bootrom_resources[] __initdata = {
97 DEFINE_RES_NAMED(CS7_PHYS_BASE, SZ_128, "BOOTROM", IORESOURCE_MEM | 97 DEFINE_RES_NAMED(CS7_PHYS_BASE, SZ_128, "BOOTROM", IORESOURCE_MEM |
98 IORESOURCE_CACHEABLE | IORESOURCE_READONLY), 98 IORESOURCE_READONLY),
99}; 99};
100 100
101static struct platform_device cdb89712_bootrom_pdev __initdata = { 101static struct platform_device cdb89712_bootrom_pdev __initdata = {
diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c
index 42e02a2d570b..d4726addff0b 100644
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -102,7 +102,7 @@ static void of_pci_parse_addrs(struct device_node *node, struct pci_dev *dev)
102 res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; 102 res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2];
103 } else if (i == dev->rom_base_reg) { 103 } else if (i == dev->rom_base_reg) {
104 res = &dev->resource[PCI_ROM_RESOURCE]; 104 res = &dev->resource[PCI_ROM_RESOURCE];
105 flags |= IORESOURCE_READONLY | IORESOURCE_CACHEABLE; 105 flags |= IORESOURCE_READONLY;
106 } else { 106 } else {
107 printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); 107 printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i);
108 continue; 108 continue;
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index c928bc64b4ba..04da147e0712 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -231,8 +231,7 @@ static void pci_parse_of_addrs(struct platform_device *op,
231 res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2]; 231 res = &dev->resource[(i - PCI_BASE_ADDRESS_0) >> 2];
232 } else if (i == dev->rom_base_reg) { 232 } else if (i == dev->rom_base_reg) {
233 res = &dev->resource[PCI_ROM_RESOURCE]; 233 res = &dev->resource[PCI_ROM_RESOURCE];
234 flags |= IORESOURCE_READONLY | IORESOURCE_CACHEABLE 234 flags |= IORESOURCE_READONLY | IORESOURCE_SIZEALIGN;
235 | IORESOURCE_SIZEALIGN;
236 } else { 235 } else {
237 printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i); 236 printk(KERN_ERR "PCI: bad cfg reg num 0x%x\n", i);
238 continue; 237 continue;
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index cefd636681b6..8ed37dd04056 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -326,8 +326,7 @@ static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
326 struct resource *res = &dev->resource[PCI_ROM_RESOURCE]; 326 struct resource *res = &dev->resource[PCI_ROM_RESOURCE];
327 dev->rom_base_reg = rom; 327 dev->rom_base_reg = rom;
328 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH | 328 res->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
329 IORESOURCE_READONLY | IORESOURCE_CACHEABLE | 329 IORESOURCE_READONLY | IORESOURCE_SIZEALIGN;
330 IORESOURCE_SIZEALIGN;
331 __pci_read_base(dev, pci_bar_mem32, res, rom); 330 __pci_read_base(dev, pci_bar_mem32, res, rom);
332 } 331 }
333} 332}
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c
index 9357aa779048..7ad3295752ef 100644
--- a/drivers/pnp/manager.c
+++ b/drivers/pnp/manager.c
@@ -97,8 +97,6 @@ static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx)
97 /* ??? rule->flags restricted to 8 bits, all tests bogus ??? */ 97 /* ??? rule->flags restricted to 8 bits, all tests bogus ??? */
98 if (!(rule->flags & IORESOURCE_MEM_WRITEABLE)) 98 if (!(rule->flags & IORESOURCE_MEM_WRITEABLE))
99 res->flags |= IORESOURCE_READONLY; 99 res->flags |= IORESOURCE_READONLY;
100 if (rule->flags & IORESOURCE_MEM_CACHEABLE)
101 res->flags |= IORESOURCE_CACHEABLE;
102 if (rule->flags & IORESOURCE_MEM_RANGELENGTH) 100 if (rule->flags & IORESOURCE_MEM_RANGELENGTH)
103 res->flags |= IORESOURCE_RANGELENGTH; 101 res->flags |= IORESOURCE_RANGELENGTH;
104 if (rule->flags & IORESOURCE_MEM_SHADOWABLE) 102 if (rule->flags & IORESOURCE_MEM_SHADOWABLE)
diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
index 4b135cca42a1..140cb8e6fea2 100644
--- a/drivers/scsi/aic94xx/aic94xx_init.c
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
@@ -100,12 +100,7 @@ static int asd_map_memio(struct asd_ha_struct *asd_ha)
100 pci_name(asd_ha->pcidev)); 100 pci_name(asd_ha->pcidev));
101 goto Err; 101 goto Err;
102 } 102 }
103 if (io_handle->flags & IORESOURCE_CACHEABLE) 103 io_handle->addr = ioremap(io_handle->start, io_handle->len);
104 io_handle->addr = ioremap(io_handle->start,
105 io_handle->len);
106 else
107 io_handle->addr = ioremap_nocache(io_handle->start,
108 io_handle->len);
109 if (!io_handle->addr) { 104 if (!io_handle->addr) {
110 asd_printk("couldn't map MBAR%d of %s\n", i==0?0:1, 105 asd_printk("couldn't map MBAR%d of %s\n", i==0?0:1,
111 pci_name(asd_ha->pcidev)); 106 pci_name(asd_ha->pcidev));
diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
index 914c39f9f388..e4f77cad9fd8 100644
--- a/drivers/scsi/arcmsr/arcmsr_hba.c
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c
@@ -259,10 +259,7 @@ static bool arcmsr_remap_pciregion(struct AdapterControlBlock *acb)
259 addr = (unsigned long)pci_resource_start(pdev, 0); 259 addr = (unsigned long)pci_resource_start(pdev, 0);
260 range = pci_resource_len(pdev, 0); 260 range = pci_resource_len(pdev, 0);
261 flags = pci_resource_flags(pdev, 0); 261 flags = pci_resource_flags(pdev, 0);
262 if (flags & IORESOURCE_CACHEABLE) 262 mem_base0 = ioremap(addr, range);
263 mem_base0 = ioremap(addr, range);
264 else
265 mem_base0 = ioremap_nocache(addr, range);
266 if (!mem_base0) { 263 if (!mem_base0) {
267 pr_notice("arcmsr%d: memory mapping region fail\n", 264 pr_notice("arcmsr%d: memory mapping region fail\n",
268 acb->host->host_no); 265 acb->host->host_no);
diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
index d40d734aa53a..e654b5cec69e 100644
--- a/drivers/scsi/mvsas/mv_init.c
+++ b/drivers/scsi/mvsas/mv_init.c
@@ -324,13 +324,9 @@ int mvs_ioremap(struct mvs_info *mvi, int bar, int bar_ex)
324 goto err_out; 324 goto err_out;
325 325
326 res_flag_ex = pci_resource_flags(pdev, bar_ex); 326 res_flag_ex = pci_resource_flags(pdev, bar_ex);
327 if (res_flag_ex & IORESOURCE_MEM) { 327 if (res_flag_ex & IORESOURCE_MEM)
328 if (res_flag_ex & IORESOURCE_CACHEABLE) 328 mvi->regs_ex = ioremap(res_start, res_len);
329 mvi->regs_ex = ioremap(res_start, res_len); 329 else
330 else
331 mvi->regs_ex = ioremap_nocache(res_start,
332 res_len);
333 } else
334 mvi->regs_ex = (void *)res_start; 330 mvi->regs_ex = (void *)res_start;
335 if (!mvi->regs_ex) 331 if (!mvi->regs_ex)
336 goto err_out; 332 goto err_out;
@@ -342,10 +338,7 @@ int mvs_ioremap(struct mvs_info *mvi, int bar, int bar_ex)
342 goto err_out; 338 goto err_out;
343 339
344 res_flag = pci_resource_flags(pdev, bar); 340 res_flag = pci_resource_flags(pdev, bar);
345 if (res_flag & IORESOURCE_CACHEABLE) 341 mvi->regs = ioremap(res_start, res_len);
346 mvi->regs = ioremap(res_start, res_len);
347 else
348 mvi->regs = ioremap_nocache(res_start, res_len);
349 342
350 if (!mvi->regs) { 343 if (!mvi->regs) {
351 if (mvi->regs_ex && (res_flag_ex & IORESOURCE_MEM)) 344 if (mvi->regs_ex && (res_flag_ex & IORESOURCE_MEM))
diff --git a/drivers/video/fbdev/ocfb.c b/drivers/video/fbdev/ocfb.c
index de9819660ca0..c9293aea8ec3 100644
--- a/drivers/video/fbdev/ocfb.c
+++ b/drivers/video/fbdev/ocfb.c
@@ -325,7 +325,6 @@ static int ocfb_probe(struct platform_device *pdev)
325 dev_err(&pdev->dev, "I/O resource request failed\n"); 325 dev_err(&pdev->dev, "I/O resource request failed\n");
326 return -ENXIO; 326 return -ENXIO;
327 } 327 }
328 res->flags &= ~IORESOURCE_CACHEABLE;
329 fbdev->regs = devm_ioremap_resource(&pdev->dev, res); 328 fbdev->regs = devm_ioremap_resource(&pdev->dev, res);
330 if (IS_ERR(fbdev->regs)) 329 if (IS_ERR(fbdev->regs))
331 return PTR_ERR(fbdev->regs); 330 return PTR_ERR(fbdev->regs);
diff --git a/lib/devres.c b/lib/devres.c
index fbe2aac522e6..f13a2468ff39 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -119,10 +119,9 @@ EXPORT_SYMBOL(devm_iounmap);
119 * @dev: generic device to handle the resource for 119 * @dev: generic device to handle the resource for
120 * @res: resource to be handled 120 * @res: resource to be handled
121 * 121 *
122 * Checks that a resource is a valid memory region, requests the memory region 122 * Checks that a resource is a valid memory region, requests the memory
123 * and ioremaps it either as cacheable or as non-cacheable memory depending on 123 * region and ioremaps it. All operations are managed and will be undone
124 * the resource's flags. All operations are managed and will be undone on 124 * on driver detach.
125 * driver detach.
126 * 125 *
127 * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code 126 * Returns a pointer to the remapped memory or an ERR_PTR() encoded error code
128 * on failure. Usage example: 127 * on failure. Usage example:
@@ -153,11 +152,7 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res)
153 return IOMEM_ERR_PTR(-EBUSY); 152 return IOMEM_ERR_PTR(-EBUSY);
154 } 153 }
155 154
156 if (res->flags & IORESOURCE_CACHEABLE) 155 dest_ptr = devm_ioremap(dev, res->start, size);
157 dest_ptr = devm_ioremap(dev, res->start, size);
158 else
159 dest_ptr = devm_ioremap_nocache(dev, res->start, size);
160
161 if (!dest_ptr) { 156 if (!dest_ptr) {
162 dev_err(dev, "ioremap failed for resource %pR\n", res); 157 dev_err(dev, "ioremap failed for resource %pR\n", res);
163 devm_release_mem_region(dev, res->start, size); 158 devm_release_mem_region(dev, res->start, size);
diff --git a/lib/pci_iomap.c b/lib/pci_iomap.c
index bcce5f149310..e1930dbab2da 100644
--- a/lib/pci_iomap.c
+++ b/lib/pci_iomap.c
@@ -41,11 +41,8 @@ void __iomem *pci_iomap_range(struct pci_dev *dev,
41 len = maxlen; 41 len = maxlen;
42 if (flags & IORESOURCE_IO) 42 if (flags & IORESOURCE_IO)
43 return __pci_ioport_map(dev, start, len); 43 return __pci_ioport_map(dev, start, len);
44 if (flags & IORESOURCE_MEM) { 44 if (flags & IORESOURCE_MEM)
45 if (flags & IORESOURCE_CACHEABLE) 45 return ioremap(start, len);
46 return ioremap(start, len);
47 return ioremap_nocache(start, len);
48 }
49 /* What? */ 46 /* What? */
50 return NULL; 47 return NULL;
51} 48}