summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-12-18 15:22:27 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2012-12-19 21:51:49 +0100
commite412cb78053ebfe5d9546a98abcf1f671b14ca43 (patch)
tree184ed5dd5fbd6e6536d2dd3d92d157d858064294 /arch
parentf42ee5fd404e49d84291b7a1ac0c28fd987c176e (diff)
downloadbarebox-e412cb78053ebfe5d9546a98abcf1f671b14ca43.tar.gz
barebox-e412cb78053ebfe5d9546a98abcf1f671b14ca43.tar.xz
ARM omap: Make gpmc base runtime configurable
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-omap/devices-gpmc-nand.c2
-rw-r--r--arch/arm/mach-omap/gpmc.c14
-rw-r--r--arch/arm/mach-omap/include/mach/gpmc.h4
3 files changed, 16 insertions, 4 deletions
diff --git a/arch/arm/mach-omap/devices-gpmc-nand.c b/arch/arm/mach-omap/devices-gpmc-nand.c
index 42cb1b42bf..b2a2b0fdb9 100644
--- a/arch/arm/mach-omap/devices-gpmc-nand.c
+++ b/arch/arm/mach-omap/devices-gpmc-nand.c
@@ -46,7 +46,7 @@ int omap_add_gpmc_nand_device(struct gpmc_nand_platform_data *pdata)
/* Configure GPMC CS before register */
gpmc_cs_config(pdata->cs, pdata->nand_cfg);
- add_generic_device("gpmc_nand", DEVICE_ID_DYNAMIC, NULL, OMAP_GPMC_BASE,
+ add_generic_device("gpmc_nand", DEVICE_ID_DYNAMIC, NULL, (resource_size_t)omap_gpmc_base,
1024 * 4, IORESOURCE_MEM, pdata);
return 0;
diff --git a/arch/arm/mach-omap/gpmc.c b/arch/arm/mach-omap/gpmc.c
index 4cfb7cf4ee..d2b70247f7 100644
--- a/arch/arm/mach-omap/gpmc.c
+++ b/arch/arm/mach-omap/gpmc.c
@@ -29,6 +29,16 @@
#include <mach/sys_info.h>
#include <mach/syslib.h>
+void __iomem *omap_gpmc_base;
+
+static int gpmc_init(void)
+{
+ omap_gpmc_base = (void *)OMAP_GPMC_BASE;
+
+ return 0;
+}
+pure_initcall(gpmc_init);
+
/**
* @brief Do a Generic initialization of GPMC. if you choose otherwise,
* Use gpmc registers to modify the values. The defaults configured are:
@@ -43,7 +53,7 @@
void gpmc_generic_init(unsigned int cfg)
{
uint64_t start;
- unsigned int reg = GPMC_REG(CONFIG7_0);
+ void __iomem *reg = GPMC_REG(CONFIG7_0);
char x = 0;
debug("gpmccfg=0x%x\n", cfg);
@@ -89,7 +99,7 @@ EXPORT_SYMBOL(gpmc_generic_init);
*/
void gpmc_cs_config(char cs, struct gpmc_config *config)
{
- unsigned int reg = GPMC_REG(CONFIG1_0) + (cs * GPMC_CONFIG_CS_SIZE);
+ void __iomem *reg = GPMC_REG(CONFIG1_0) + (cs * GPMC_CONFIG_CS_SIZE);
unsigned char x = 0;
debug("gpmccs=0x%x cfg=0x%p\n", cs, config);
diff --git a/arch/arm/mach-omap/include/mach/gpmc.h b/arch/arm/mach-omap/include/mach/gpmc.h
index 957ff55eff..d4eac79717 100644
--- a/arch/arm/mach-omap/include/mach/gpmc.h
+++ b/arch/arm/mach-omap/include/mach/gpmc.h
@@ -32,8 +32,10 @@
#ifndef __ASM_ARCH_OMAP_GPMC_H
#define __ASM_ARCH_OMAP_GPMC_H
+extern void __iomem *omap_gpmc_base;
+
/** GPMC Reg Wrapper */
-#define GPMC_REG(REGNAME) (OMAP_GPMC_BASE + GPMC_##REGNAME)
+#define GPMC_REG(REGNAME) (omap_gpmc_base + GPMC_##REGNAME)
#define GPMC_SYS_CONFIG (0x10)
#define GPMC_SYS_STATUS (0x14)