mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 07:23:14 +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,
|
.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[] = {
|
|||||||
.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[] = {
|
|||||||
.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[] = {
|
|||||||
.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[] = {
|
|||||||
.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);
|
|||||||
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 @@
|
|||||||
*/
|
*/
|
||||||
#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)
|
|||||||
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);
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user