From 5b2a64c7455a81aea06dcba97e7f434dd0b760f3 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Mon, 15 Feb 2010 01:45:10 +0100 Subject: [PATCH 1/2] PXA3xx: Add support for preconfiguring SMEMC Signed-off-by: Marek Vasut --- arch/arm/mach-pxa/smemc.c | 30 +++++++++++++++++++++++++++++- arch/arm/mach-pxa/smemc.h | 12 ++++++++++++ 2 files changed, 41 insertions(+), 1 deletions(-) create mode 100644 arch/arm/mach-pxa/smemc.h diff --git a/arch/arm/mach-pxa/smemc.c b/arch/arm/mach-pxa/smemc.c index d6f6904..3f193cc 100644 --- a/arch/arm/mach-pxa/smemc.c +++ b/arch/arm/mach-pxa/smemc.c @@ -10,6 +10,8 @@ #include +#include "smemc.h" + #define SMEMC_PHYS_BASE (0x4A000000) #define SMEMC_PHYS_SIZE (0x90) @@ -73,7 +75,9 @@ static int __init smemc_init(void) int ret = 0; if (cpu_is_pxa3xx()) { - smemc_mmio_base = ioremap(SMEMC_PHYS_BASE, SMEMC_PHYS_SIZE); + if (smemc_mmio_base == NULL) + smemc_mmio_base = ioremap(SMEMC_PHYS_BASE, + SMEMC_PHYS_SIZE); if (smemc_mmio_base == NULL) return -ENODEV; @@ -88,3 +92,27 @@ static int __init smemc_init(void) } subsys_initcall(smemc_init); #endif + +void __init pxa_set_smemc_info(struct pxa_smemc_info *info) +{ + if (!cpu_is_pxa3xx()) + return; + + if (!info) + return; + + smemc_mmio_base = ioremap(SMEMC_PHYS_BASE, SMEMC_PHYS_SIZE); + if (smemc_mmio_base == NULL) { + pr_err("pxa3xx_smemc: ioremap failed, defaults not set\n"); + return; + } + + __raw_writel(info->msc[0], smemc_mmio_base + MSC0); + __raw_writel(info->msc[1], smemc_mmio_base + MSC1); + __raw_writel(info->sxcnfg, smemc_mmio_base + SXCNFG); + __raw_writel(info->memclkcfg, smemc_mmio_base + MEMCLKCFG); + __raw_writel(info->csadrcfg[0], smemc_mmio_base + CSADRCFG0); + __raw_writel(info->csadrcfg[1], smemc_mmio_base + CSADRCFG1); + __raw_writel(info->csadrcfg[2], smemc_mmio_base + CSADRCFG2); + __raw_writel(info->csadrcfg[3], smemc_mmio_base + CSADRCFG3); +} diff --git a/arch/arm/mach-pxa/smemc.h b/arch/arm/mach-pxa/smemc.h new file mode 100644 index 0000000..d4125d2 --- /dev/null +++ b/arch/arm/mach-pxa/smemc.h @@ -0,0 +1,12 @@ +/* + * Static Memory Controller + */ + +struct pxa_smemc_info { + uint32_t msc[2]; + uint32_t sxcnfg; + uint32_t memclkcfg; + uint32_t csadrcfg[4]; +}; + +void __init pxa_set_smemc_info(struct pxa_smemc_info *info); -- 1.6.6.1