From 9d529c6e7b73088551057445763b2be755a3b82f Mon Sep 17 00:00:00 2001 From: Ben Dooks Date: Thu, 3 Jul 2008 11:24:39 +0100 Subject: [PATCH] [ARM] S3C24XX: Add physmap device for all Simtec NOR equiped boards. Move to using the physmap platform device code to attached NOR flash on Simtec boards so that the old bast-flash driver can be safely removed. Signed-off-by: Ben Dooks --- arch/arm/mach-s3c2410/Kconfig | 7 +++ arch/arm/mach-s3c2410/Makefile | 4 ++ arch/arm/mach-s3c2410/mach-bast.c | 22 ++------ arch/arm/mach-s3c2410/mach-vr1000.c | 22 ++------ arch/arm/mach-s3c2410/nor-simtec.c | 86 +++++++++++++++++++++++++++++ arch/arm/mach-s3c2410/nor-simtec.h | 14 +++++ 6 files changed, 119 insertions(+), 36 deletions(-) create mode 100644 arch/arm/mach-s3c2410/nor-simtec.c create mode 100644 arch/arm/mach-s3c2410/nor-simtec.h diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig index 69689701acf..1a7d01b4744 100644 --- a/arch/arm/mach-s3c2410/Kconfig +++ b/arch/arm/mach-s3c2410/Kconfig @@ -37,6 +37,11 @@ config S3C2410_CLOCK help Clock code for the S3C2410, and similar processors +config SIMTEC_NOR + bool + help + Internal node to specify machine has simtec NOR mapping + config MACH_BAST_IDE bool select HAVE_PATA_PLATFORM @@ -76,6 +81,7 @@ config ARCH_BAST bool "Simtec Electronics BAST (EB2410ITX)" select CPU_S3C2410 select PM_SIMTEC if PM + select SIMTEC_NOR select MACH_BAST_IDE select ISA help @@ -114,6 +120,7 @@ config MACH_TCT_HAMMER config MACH_VR1000 bool "Thorcom VR1000" select PM_SIMTEC if PM + select SIMTEC_NOR select MACH_BAST_IDE select CPU_S3C2410 help diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile index 8a4055dc858..00f31f8c4e7 100644 --- a/arch/arm/mach-s3c2410/Makefile +++ b/arch/arm/mach-s3c2410/Makefile @@ -31,6 +31,10 @@ obj-$(CONFIG_MACH_TCT_HAMMER) += mach-tct_hammer.o obj-$(CONFIG_MACH_VR1000) += mach-vr1000.o usb-simtec.o obj-$(CONFIG_MACH_QT2410) += mach-qt2410.o +# Common bits of machine support + +obj-$(CONFIG_SIMTEC_NOR) += nor-simtec.o + # machine additions obj-$(CONFIG_MACH_BAST_IDE) += bast-ide.o diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 093be00c8eb..2a512e86314 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c @@ -57,7 +57,9 @@ #include #include #include + #include "usb-simtec.h" +#include "nor-simtec.h" #define COPYRIGHT ", (c) 2004-2005 Simtec Electronics" @@ -203,23 +205,6 @@ static struct s3c2410_uartcfg bast_uartcfgs[] __initdata = { } }; -/* NOR Flash on BAST board */ - -static struct resource bast_nor_resource[] = { - [0] = { - .start = S3C2410_CS1 + 0x4000000, - .end = S3C2410_CS1 + 0x4000000 + (32*1024*1024) - 1, - .flags = IORESOURCE_MEM, - } -}; - -static struct platform_device bast_device_nor = { - .name = "bast-nor", - .id = -1, - .num_resources = ARRAY_SIZE(bast_nor_resource), - .resource = bast_nor_resource, -}; - /* NAND Flash on BAST board */ #ifdef CONFIG_PM @@ -559,7 +544,6 @@ static struct platform_device *bast_devices[] __initdata = { &s3c_device_i2c, &s3c_device_rtc, &s3c_device_nand, - &bast_device_nor, &bast_device_dm9k, &bast_device_asix, &bast_device_axpp, @@ -608,6 +592,8 @@ static void __init bast_init(void) s3c24xx_fb_set_platdata(&bast_fb_info); platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices)); + + nor_simtec_init(); } MACHINE_START(BAST, "Simtec-BAST") diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c index 1d0a0284f33..f133ccfc359 100644 --- a/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/arch/arm/mach-s3c2410/mach-vr1000.c @@ -46,7 +46,9 @@ #include #include #include + #include "usb-simtec.h" +#include "nor-simtec.h" /* macros for virtual address mods for the io space entries */ #define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5) @@ -202,23 +204,6 @@ static struct platform_device serial_device = { }, }; -/* MTD NOR Flash */ - -static struct resource vr1000_nor_resource[] = { - [0] = { - .start = S3C2410_CS1 + 0x4000000, - .end = S3C2410_CS1 + 0x4000000 + SZ_16M - 1, - .flags = IORESOURCE_MEM, - } -}; - -static struct platform_device vr1000_nor = { - .name = "bast-nor", - .id = -1, - .num_resources = ARRAY_SIZE(vr1000_nor_resource), - .resource = vr1000_nor_resource, -}; - /* DM9000 ethernet devices */ static struct resource vr1000_dm9k0_resource[] = { @@ -339,7 +324,6 @@ static struct platform_device *vr1000_devices[] __initdata = { &s3c_device_i2c, &s3c_device_adc, &serial_device, - &vr1000_nor, &vr1000_dm9k0, &vr1000_dm9k1, &vr1000_led1, @@ -388,6 +372,8 @@ static void __init vr1000_map_io(void) static void __init vr1000_init(void) { platform_add_devices(vr1000_devices, ARRAY_SIZE(vr1000_devices)); + + nor_simtec_init(); } MACHINE_START(VR1000, "Thorcom-VR1000") diff --git a/arch/arm/mach-s3c2410/nor-simtec.c b/arch/arm/mach-s3c2410/nor-simtec.c new file mode 100644 index 00000000000..f44e21b9c3b --- /dev/null +++ b/arch/arm/mach-s3c2410/nor-simtec.c @@ -0,0 +1,86 @@ +/* linux/arch/arm/mach-s3c2410/nor-simtec.c + * + * Copyright (c) 2008 Simtec Electronics + * http://armlinux.simtec.co.uk/ + * Ben Dooks + * + * Simtec NOR mapping + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + + +static void simtec_nor_vpp(struct map_info *map, int vpp) +{ + unsigned int val; + unsigned long flags; + + local_irq_save(flags); + val = __raw_readb(BAST_VA_CTRL3); + + printk(KERN_DEBUG "%s(%d)\n", __func__, vpp); + + if (vpp) + val |= BAST_CPLD_CTRL3_ROMWEN; + else + val &= ~BAST_CPLD_CTRL3_ROMWEN; + + __raw_writeb(val, BAST_VA_CTRL3); + local_irq_restore(flags); +} + +struct physmap_flash_data simtec_nor_pdata = { + .width = 2, + .set_vpp = simtec_nor_vpp, + .nr_parts = 0, +}; + +static struct resource simtec_nor_resource[] = { + [0] = { + .start = S3C2410_CS1 + 0x4000000, + .end = S3C2410_CS1 + 0x4000000 + SZ_8M - 1, + .flags = IORESOURCE_MEM, + } +}; + +static struct platform_device simtec_device_nor = { + .name = "physmap-flash", + .id = -1, + .num_resources = ARRAY_SIZE(simtec_nor_resource), + .resource = simtec_nor_resource, + .dev = { + .platform_data = &simtec_nor_pdata, + }, +}; + +void __init nor_simtec_init(void) +{ + int ret; + + ret = platform_device_register(&simtec_device_nor); + if (ret < 0) + printk(KERN_ERR "failed to register physmap-flash device\n"); + else + simtec_nor_vpp(NULL, 1); +} diff --git a/arch/arm/mach-s3c2410/nor-simtec.h b/arch/arm/mach-s3c2410/nor-simtec.h new file mode 100644 index 00000000000..f619c1e0d0c --- /dev/null +++ b/arch/arm/mach-s3c2410/nor-simtec.h @@ -0,0 +1,14 @@ +/* linux/arch/arm/mach-s3c2410/nor-simtec.h + * + * Copyright (c) 2008 Simtec Electronics + * http://armlinux.simtec.co.uk/ + * Ben Dooks + * + * Simtec NOR mapping + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +extern void nor_simtec_init(void); -- 2.41.1