aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/pxa27x.c
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut@gmail.com>2010-11-03 11:29:35 -0400
committerEric Miao <eric.y.miao@gmail.com>2010-12-16 01:31:16 -0500
commitad68bb9f7a3cd47396635a5e3895215af57579da (patch)
tree6d9890bc0112b637e95afa0129a08fc20e325234 /arch/arm/mach-pxa/pxa27x.c
parent851982c1b6ca18cedf6d01e4529a0c1ddb30771e (diff)
ARM: pxa: Access SMEMC via virtual addresses
This is important because on PXA3xx, the physical mapping of SMEMC registers differs from the one on PXA2xx. In order to get PCMCIA working on both PXA2xx and PXA320, the PCMCIA driver was adjusted accordingly as well. Also, various places in the kernel had to be patched to use __raw_read/__raw_write. Signed-off-by: Marek Vasut <marek.vasut@gmail.com> Acked-by: Haojian Zhuang <haojian.zhuang@gmail.com> Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
Diffstat (limited to 'arch/arm/mach-pxa/pxa27x.c')
-rw-r--r--arch/arm/mach-pxa/pxa27x.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
index 71dbee42edf9..839548d94185 100644
--- a/arch/arm/mach-pxa/pxa27x.c
+++ b/arch/arm/mach-pxa/pxa27x.c
@@ -17,6 +17,7 @@
17#include <linux/suspend.h> 17#include <linux/suspend.h>
18#include <linux/platform_device.h> 18#include <linux/platform_device.h>
19#include <linux/sysdev.h> 19#include <linux/sysdev.h>
20#include <linux/io.h>
20 21
21#include <asm/mach/map.h> 22#include <asm/mach/map.h>
22#include <mach/hardware.h> 23#include <mach/hardware.h>
@@ -28,6 +29,8 @@
28#include <mach/ohci.h> 29#include <mach/ohci.h>
29#include <mach/pm.h> 30#include <mach/pm.h>
30#include <mach/dma.h> 31#include <mach/dma.h>
32#include <mach/smemc.h>
33
31#include <plat/i2c.h> 34#include <plat/i2c.h>
32 35
33#include "generic.h" 36#include "generic.h"
@@ -255,7 +258,7 @@ enum {
255 258
256void pxa27x_cpu_pm_save(unsigned long *sleep_save) 259void pxa27x_cpu_pm_save(unsigned long *sleep_save)
257{ 260{
258 SAVE(MDREFR); 261 sleep_save[SLEEP_SAVE_MDREFR] = __raw_readl(MDREFR);
259 SAVE(PCFR); 262 SAVE(PCFR);
260 263
261 SAVE(CKEN); 264 SAVE(CKEN);
@@ -264,7 +267,7 @@ void pxa27x_cpu_pm_save(unsigned long *sleep_save)
264 267
265void pxa27x_cpu_pm_restore(unsigned long *sleep_save) 268void pxa27x_cpu_pm_restore(unsigned long *sleep_save)
266{ 269{
267 RESTORE(MDREFR); 270 __raw_writel(sleep_save[SLEEP_SAVE_MDREFR], MDREFR);
268 RESTORE(PCFR); 271 RESTORE(PCFR);
269 272
270 PSSR = PSSR_RDH | PSSR_PH; 273 PSSR = PSSR_RDH | PSSR_PH;
@@ -373,8 +376,8 @@ void __init pxa27x_init_irq(void)
373 376
374static struct map_desc pxa27x_io_desc[] __initdata = { 377static struct map_desc pxa27x_io_desc[] __initdata = {
375 { /* Mem Ctl */ 378 { /* Mem Ctl */
376 .virtual = 0xf6000000, 379 .virtual = SMEMC_VIRT,
377 .pfn = __phys_to_pfn(0x48000000), 380 .pfn = __phys_to_pfn(PXA2XX_SMEMC_BASE),
378 .length = 0x00200000, 381 .length = 0x00200000,
379 .type = MT_DEVICE 382 .type = MT_DEVICE
380 }, { /* IMem ctl */ 383 }, { /* IMem ctl */