mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
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: Ben Gardiner <bengardiner@nanometrics.ca> Signed-off-by: Matt Porter <mporter@ti.com> Signed-off-by: Sekhar Nori <nsekhar@ti.com>
This commit is contained in:
parent
2eb2478d47
commit
626863a3f3
@ -781,12 +781,6 @@ static struct map_desc da850_io_desc[] = {
|
||||
.length = DA8XX_CP_INTC_SIZE,
|
||||
.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 };
|
||||
|
@ -758,12 +758,6 @@ static struct map_desc dm355_io_desc[] = {
|
||||
.length = IO_SIZE,
|
||||
.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 */
|
||||
|
@ -985,12 +985,6 @@ static struct map_desc dm365_io_desc[] = {
|
||||
.length = IO_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
{
|
||||
.virtual = SRAM_VIRT,
|
||||
.pfn = __phys_to_pfn(0x00010000),
|
||||
.length = SZ_32K,
|
||||
.type = MT_MEMORY_NONCACHED,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource dm365_ks_resources[] = {
|
||||
|
@ -786,12 +786,6 @@ static struct map_desc dm644x_io_desc[] = {
|
||||
.length = IO_SIZE,
|
||||
.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 */
|
||||
|
@ -756,12 +756,6 @@ static struct map_desc dm646x_io_desc[] = {
|
||||
.length = IO_SIZE,
|
||||
.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 */
|
||||
|
@ -104,8 +104,6 @@ int davinci_pm_init(void);
|
||||
static inline int davinci_pm_init(void) { return 0; }
|
||||
#endif
|
||||
|
||||
/* standard place to map on-chip SRAMs; they *may* support DMA */
|
||||
#define SRAM_VIRT 0xfffe0000
|
||||
#define SRAM_SIZE SZ_128K
|
||||
|
||||
#endif /* __ARCH_ARM_MACH_DAVINCI_COMMON_H */
|
||||
|
@ -10,6 +10,7 @@
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/genalloc.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
@ -32,7 +33,7 @@ void *sram_alloc(size_t len, dma_addr_t *dma)
|
||||
return NULL;
|
||||
|
||||
if (dma)
|
||||
*dma = dma_base + (vaddr - SRAM_VIRT);
|
||||
*dma = gen_pool_virt_to_phys(sram_pool, vaddr);
|
||||
return (void *)vaddr;
|
||||
|
||||
}
|
||||
@ -53,8 +54,10 @@ EXPORT_SYMBOL(sram_free);
|
||||
*/
|
||||
static int __init sram_init(void)
|
||||
{
|
||||
phys_addr_t phys = davinci_soc_info.sram_dma;
|
||||
unsigned len = davinci_soc_info.sram_len;
|
||||
int status = 0;
|
||||
void *addr;
|
||||
|
||||
if (len) {
|
||||
len = min_t(unsigned, len, SRAM_SIZE);
|
||||
@ -62,8 +65,17 @@ static int __init sram_init(void)
|
||||
if (!sram_pool)
|
||||
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);
|
||||
return status;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user