Commit 626863a3 authored by Ben Gardiner's avatar Ben Gardiner Committed by Sekhar Nori

ARM: davinci: sram: switch from iotable to ioremapped regions

The current davinci init sets up SRAM in iotables. There has been
an observed failure to boot a da850 with 128K specified in the
iotable.

Make the davinci sram allocator do an ioremap of the region
specified by the entries in davinci_soc_info before registering
with gen_pool_add_virt(). Remove all iotable SRAM mappings and
SRAM_VIRT.

Regression tested suspend/resume on AM180x EVM.
Signed-off-by: default avatarBen Gardiner <bengardiner@nanometrics.ca>
Signed-off-by: default avatarMatt Porter <mporter@ti.com>
Signed-off-by: default avatarSekhar Nori <nsekhar@ti.com>
parent 2eb2478d
...@@ -781,12 +781,6 @@ static struct map_desc da850_io_desc[] = { ...@@ -781,12 +781,6 @@ static struct map_desc da850_io_desc[] = {
.length = DA8XX_CP_INTC_SIZE, .length = DA8XX_CP_INTC_SIZE,
.type = MT_DEVICE .type = MT_DEVICE
}, },
{
.virtual = SRAM_VIRT,
.pfn = __phys_to_pfn(DA8XX_ARM_RAM_BASE),
.length = SZ_8K,
.type = MT_DEVICE
},
}; };
static u32 da850_psc_bases[] = { DA8XX_PSC0_BASE, DA8XX_PSC1_BASE }; static u32 da850_psc_bases[] = { DA8XX_PSC0_BASE, DA8XX_PSC1_BASE };
......
...@@ -758,12 +758,6 @@ static struct map_desc dm355_io_desc[] = { ...@@ -758,12 +758,6 @@ static struct map_desc dm355_io_desc[] = {
.length = IO_SIZE, .length = IO_SIZE,
.type = MT_DEVICE .type = MT_DEVICE
}, },
{
.virtual = SRAM_VIRT,
.pfn = __phys_to_pfn(0x00010000),
.length = SZ_32K,
.type = MT_MEMORY_NONCACHED,
},
}; };
/* Contents of JTAG ID register used to identify exact cpu type */ /* Contents of JTAG ID register used to identify exact cpu type */
......
...@@ -985,12 +985,6 @@ static struct map_desc dm365_io_desc[] = { ...@@ -985,12 +985,6 @@ static struct map_desc dm365_io_desc[] = {
.length = IO_SIZE, .length = IO_SIZE,
.type = MT_DEVICE .type = MT_DEVICE
}, },
{
.virtual = SRAM_VIRT,
.pfn = __phys_to_pfn(0x00010000),
.length = SZ_32K,
.type = MT_MEMORY_NONCACHED,
},
}; };
static struct resource dm365_ks_resources[] = { static struct resource dm365_ks_resources[] = {
......
...@@ -786,12 +786,6 @@ static struct map_desc dm644x_io_desc[] = { ...@@ -786,12 +786,6 @@ static struct map_desc dm644x_io_desc[] = {
.length = IO_SIZE, .length = IO_SIZE,
.type = MT_DEVICE .type = MT_DEVICE
}, },
{
.virtual = SRAM_VIRT,
.pfn = __phys_to_pfn(0x00008000),
.length = SZ_16K,
.type = MT_MEMORY_NONCACHED,
},
}; };
/* Contents of JTAG ID register used to identify exact cpu type */ /* Contents of JTAG ID register used to identify exact cpu type */
......
...@@ -756,12 +756,6 @@ static struct map_desc dm646x_io_desc[] = { ...@@ -756,12 +756,6 @@ static struct map_desc dm646x_io_desc[] = {
.length = IO_SIZE, .length = IO_SIZE,
.type = MT_DEVICE .type = MT_DEVICE
}, },
{
.virtual = SRAM_VIRT,
.pfn = __phys_to_pfn(0x00010000),
.length = SZ_32K,
.type = MT_MEMORY_NONCACHED,
},
}; };
/* Contents of JTAG ID register used to identify exact cpu type */ /* Contents of JTAG ID register used to identify exact cpu type */
......
...@@ -104,8 +104,6 @@ int davinci_pm_init(void); ...@@ -104,8 +104,6 @@ int davinci_pm_init(void);
static inline int davinci_pm_init(void) { return 0; } static inline int davinci_pm_init(void) { return 0; }
#endif #endif
/* standard place to map on-chip SRAMs; they *may* support DMA */
#define SRAM_VIRT 0xfffe0000
#define SRAM_SIZE SZ_128K #define SRAM_SIZE SZ_128K
#endif /* __ARCH_ARM_MACH_DAVINCI_COMMON_H */ #endif /* __ARCH_ARM_MACH_DAVINCI_COMMON_H */
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <linux/genalloc.h> #include <linux/genalloc.h>
#include <mach/common.h> #include <mach/common.h>
...@@ -32,7 +33,7 @@ void *sram_alloc(size_t len, dma_addr_t *dma) ...@@ -32,7 +33,7 @@ void *sram_alloc(size_t len, dma_addr_t *dma)
return NULL; return NULL;
if (dma) if (dma)
*dma = dma_base + (vaddr - SRAM_VIRT); *dma = gen_pool_virt_to_phys(sram_pool, vaddr);
return (void *)vaddr; return (void *)vaddr;
} }
...@@ -53,8 +54,10 @@ EXPORT_SYMBOL(sram_free); ...@@ -53,8 +54,10 @@ EXPORT_SYMBOL(sram_free);
*/ */
static int __init sram_init(void) static int __init sram_init(void)
{ {
phys_addr_t phys = davinci_soc_info.sram_dma;
unsigned len = davinci_soc_info.sram_len; unsigned len = davinci_soc_info.sram_len;
int status = 0; int status = 0;
void *addr;
if (len) { if (len) {
len = min_t(unsigned, len, SRAM_SIZE); len = min_t(unsigned, len, SRAM_SIZE);
...@@ -62,8 +65,17 @@ static int __init sram_init(void) ...@@ -62,8 +65,17 @@ static int __init sram_init(void)
if (!sram_pool) if (!sram_pool)
status = -ENOMEM; status = -ENOMEM;
} }
if (sram_pool)
status = gen_pool_add(sram_pool, SRAM_VIRT, len, -1); if (sram_pool) {
addr = ioremap(phys, len);
if (!addr)
return -ENOMEM;
status = gen_pool_add_virt(sram_pool, (unsigned)addr,
phys, len, -1);
if (status < 0)
iounmap(addr);
}
WARN_ON(status < 0); WARN_ON(status < 0);
return status; return status;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment