[ARM] 5544/1: Trust PrimeCell resource sizes
authorLinus Walleij <linus.walleij@stericsson.com>
Sun, 7 Jun 2009 22:27:31 +0000 (23:27 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 11 Jun 2009 14:36:56 +0000 (15:36 +0100)
I found the PrimeCell/AMBA Bus drivers distrusting the resource
passed in as part of the struct amba_device abstraction. This
patch removes all hard coded resource sizes found in the PrimeCell
drivers and move the responsibility of this definition back to
the platform/board device definition, which already exist and
appear to be correct for all in-tree users of these drivers.
We do this using the resource_size() inline function which was
also replicated in the only driver using the resource size, so
that has been changed too. The KMI_SIZE was left in kmi.h in case
someone likes it. Test-compiled against Versatile and Integrator
defconfigs, seems to work but I don't posess these boards and
cannot test them.

Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/input/serio/ambakmi.c
drivers/mmc/host/mmci.c
drivers/rtc/rtc-pl030.c
drivers/rtc/rtc-pl031.c
drivers/serial/amba-pl010.c
drivers/serial/amba-pl011.c
drivers/video/amba-clcd.c
sound/arm/aaci.c

index a28c06d..89b3941 100644 (file)
@@ -135,7 +135,7 @@ static int amba_kmi_probe(struct amba_device *dev, struct amba_id *id)
        io->dev.parent  = &dev->dev;
 
        kmi->io         = io;
-       kmi->base       = ioremap(dev->res.start, KMI_SIZE);
+       kmi->base       = ioremap(dev->res.start, resource_size(&dev->res));
        if (!kmi->base) {
                ret = -ENOMEM;
                goto out;
index 7d4febd..e1aa847 100644 (file)
@@ -546,7 +546,7 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
                host->mclk = clk_get_rate(host->clk);
                DBG(host, "eventual mclk rate: %u Hz\n", host->mclk);
        }
-       host->base = ioremap(dev->res.start, SZ_4K);
+       host->base = ioremap(dev->res.start, resource_size(&dev->res));
        if (!host->base) {
                ret = -ENOMEM;
                goto clk_disable;
index aaf1f75..457231b 100644 (file)
@@ -117,7 +117,7 @@ static int pl030_probe(struct amba_device *dev, struct amba_id *id)
                goto err_rtc;
        }
 
-       rtc->base = ioremap(dev->res.start, SZ_4K);
+       rtc->base = ioremap(dev->res.start, resource_size(&dev->res));
        if (!rtc->base) {
                ret = -ENOMEM;
                goto err_map;
index 451fc13..f41873f 100644 (file)
@@ -142,8 +142,7 @@ static int pl031_probe(struct amba_device *adev, struct amba_id *id)
                goto out;
        }
 
-       ldata->base = ioremap(adev->res.start,
-                             adev->res.end - adev->res.start + 1);
+       ldata->base = ioremap(adev->res.start, resource_size(&adev->res));
        if (!ldata->base) {
                ret = -ENOMEM;
                goto out_no_remap;
index cdc049d..58a4879 100644 (file)
@@ -686,7 +686,7 @@ static int pl010_probe(struct amba_device *dev, struct amba_id *id)
                goto out;
        }
 
-       base = ioremap(dev->res.start, PAGE_SIZE);
+       base = ioremap(dev->res.start, resource_size(&dev->res));
        if (!base) {
                ret = -ENOMEM;
                goto free;
index 8c5bda2..bf82e28 100644 (file)
@@ -767,7 +767,7 @@ static int pl011_probe(struct amba_device *dev, struct amba_id *id)
                goto out;
        }
 
-       base = ioremap(dev->res.start, PAGE_SIZE);
+       base = ioremap(dev->res.start, resource_size(&dev->res));
        if (!base) {
                ret = -ENOMEM;
                goto free;
index d1f80ba..fb8163d 100644 (file)
@@ -351,7 +351,7 @@ static int clcdfb_register(struct clcd_fb *fb)
        }
 
        fb->fb.fix.mmio_start   = fb->dev->res.start;
-       fb->fb.fix.mmio_len     = 4096;
+       fb->fb.fix.mmio_len     = resource_size(&fb->dev->res);
 
        fb->regs = ioremap(fb->fb.fix.mmio_start, fb->fb.fix.mmio_len);
        if (!fb->regs) {
index 5c48e36..dc78272 100644 (file)
@@ -1089,7 +1089,7 @@ static int __devinit aaci_probe(struct amba_device *dev, struct amba_id *id)
                goto out;
        }
 
-       aaci->base = ioremap(dev->res.start, SZ_4K);
+       aaci->base = ioremap(dev->res.start, resource_size(&dev->res));
        if (!aaci->base) {
                ret = -ENOMEM;
                goto out;