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:

committed by
Sekhar Nori

parent
2eb2478d47
commit
626863a3f3
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user