diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2014-05-16 16:08:32 +0200 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@linaro.org> | 2014-05-16 16:08:32 +0200 |
commit | 3f04e3d3eb77ac9df70619b9c87da71b0eeddc36 (patch) | |
tree | cf1cbadc390888d1910a81ffc40161f783363075 /arch/arm/mach-omap2/gpmc.c | |
parent | 8cffcb0ca33381e07cee4ebe1301d0794054fc97 (diff) | |
parent | 2779ac167b1a1bf8153dca9f3a141c6148c6b89f (diff) | |
download | linux-3f04e3d3eb77ac9df70619b9c87da71b0eeddc36.tar.gz linux-3f04e3d3eb77ac9df70619b9c87da71b0eeddc36.tar.bz2 linux-3f04e3d3eb77ac9df70619b9c87da71b0eeddc36.zip |
Merge remote-tracking branch 'tip/timers/core/timers/core' into clockevents/3.16
Diffstat (limited to 'arch/arm/mach-omap2/gpmc.c')
-rw-r--r-- | arch/arm/mach-omap2/gpmc.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index ab43755364f5..9fe8c949305c 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -501,7 +501,7 @@ static int gpmc_cs_delete_mem(int cs) int r; spin_lock(&gpmc_mem_lock); - r = release_resource(&gpmc_cs_mem[cs]); + r = release_resource(res); res->start = 0; res->end = 0; spin_unlock(&gpmc_mem_lock); @@ -527,6 +527,14 @@ static int gpmc_cs_remap(int cs, u32 base) pr_err("%s: requested chip-select is disabled\n", __func__); return -ENODEV; } + + /* + * Make sure we ignore any device offsets from the GPMC partition + * allocated for the chip select and that the new base confirms + * to the GPMC 16MB minimum granularity. + */ + base &= ~(SZ_16M - 1); + gpmc_cs_get_memconf(cs, &old_base, &size); if (base == old_base) return 0; @@ -586,6 +594,8 @@ EXPORT_SYMBOL(gpmc_cs_request); void gpmc_cs_free(int cs) { + struct resource *res = &gpmc_cs_mem[cs]; + spin_lock(&gpmc_mem_lock); if (cs >= gpmc_cs_num || cs < 0 || !gpmc_cs_reserved(cs)) { printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs); @@ -594,7 +604,8 @@ void gpmc_cs_free(int cs) return; } gpmc_cs_disable_mem(cs); - release_resource(&gpmc_cs_mem[cs]); + if (res->flags) + release_resource(res); gpmc_cs_set_reserved(cs, 0); spin_unlock(&gpmc_mem_lock); } |