BAST: Add pata_platform IDE driver Add a pata_platform based IDE driver for the Simtec BAST and the Thorcom VR1000 machines. This will lead to the removal of the old IDE driver at drivers/ide/arm/bast-ide.c as pata_platform can provide everything we need, and one driver is better than two. Signed-off-by: Ben Dooks diff -urpN -X linux-2.6.22-rc3/Documentation/dontdiff linux-2.6.22-rc3/arch/arm/mach-s3c2410/Kconfig linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/Kconfig --- linux-2.6.22-rc3/arch/arm/mach-s3c2410/Kconfig 2007-04-26 04:08:32.000000000 +0100 +++ linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/Kconfig 2007-05-28 15:20:16.000000000 +0100 @@ -36,6 +36,11 @@ config S3C2410_CLOCK help Clock code for the S3C2410, and similar processors +config MACH_BAST_IDE + bool + help + Internal node for machines with an BAST style IDE + interface menu "S3C2410 Machines" @@ -69,6 +74,7 @@ config ARCH_BAST bool "Simtec Electronics BAST (EB2410ITX)" select CPU_S3C2410 select PM_SIMTEC if PM + select MACH_BAST_IDE select ISA help Say Y here if you are using the Simtec Electronics EB2410ITX @@ -99,6 +105,7 @@ config BAST_PC104_IRQ config MACH_VR1000 bool "Thorcom VR1000" select PM_SIMTEC if PM + select MACH_BAST_IDE select CPU_S3C2410 help Say Y here if you are using the Thorcom VR1000 board. @@ -110,4 +117,3 @@ config MACH_QT2410 Say Y here if you are using the Armzone QT2410 endmenu - diff -urpN -X linux-2.6.22-rc3/Documentation/dontdiff linux-2.6.22-rc3/arch/arm/mach-s3c2410/Makefile linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/Makefile --- linux-2.6.22-rc3/arch/arm/mach-s3c2410/Makefile 2007-05-27 18:54:18.000000000 +0100 +++ linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/Makefile 2007-05-28 15:16:10.000000000 +0100 @@ -29,3 +29,7 @@ obj-$(CONFIG_MACH_AML_M5900) += mach-aml obj-$(CONFIG_BAST_PC104_IRQ) += bast-irq.o obj-$(CONFIG_MACH_VR1000) += mach-vr1000.o usb-simtec.o obj-$(CONFIG_MACH_QT2410) += mach-qt2410.o + +# machine additions + +obj-$(CONFIG_MACH_BAST_IDE) += bast-ide.o diff -urpN -X linux-2.6.22-rc3/Documentation/dontdiff linux-2.6.22-rc3/arch/arm/mach-s3c2410/bast-ide.c linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/bast-ide.c --- linux-2.6.22-rc3/arch/arm/mach-s3c2410/bast-ide.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/bast-ide.c 2007-05-28 15:21:31.000000000 +0100 @@ -0,0 +1,111 @@ +/* linux/arch/arm/mach-s3c2410/bast-ide.c + * + * Copyright 2007 Simtec Electronics + * http://www.simtec.co.uk/products/EB2410ITX/ + * http://armlinux.simtec.co.uk/ + * Ben Dooks + * + * 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 + +/* IDE ports */ + +static struct pata_platform_info bast_ide_platdata = { + .ioport_shift = 5, +}; + +#define IDE_CS S3C2410_CS5 + +static struct resource bast_ide0_resource[] = { + [0] = { + .start = IDE_CS + BAST_PA_IDEPRI, + .end = IDE_CS + BAST_PA_IDEPRI + (8 * 0x20) - 1, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = IDE_CS + BAST_PA_IDEPRIAUX + (6 * 0x20) , + .end = IDE_CS + BAST_PA_IDEPRIAUX + (7 * 0x20) - 1, + .flags = IORESOURCE_MEM, + }, + [2] = { + .start = IRQ_IDE0, + .end = IRQ_IDE0, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device bast_device_ide0 = { + .name = "pata_platform", + .id = 0, + .num_resources = ARRAY_SIZE(bast_ide0_resource), + .resource = bast_ide0_resource, + .dev = { + .platform_data = &bast_ide_platdata, + .coherent_dma_mask = ~0, + } + +}; + +static struct resource bast_ide1_resource[] = { + [0] = { + .start = IDE_CS + BAST_PA_IDESEC, + .end = IDE_CS + BAST_PA_IDESEC + (8 * 0x20) - 1, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = IDE_CS + BAST_PA_IDESECAUX + (6 * 0x20), + .end = IDE_CS + BAST_PA_IDESECAUX + (7 * 0x20) - 1, + .flags = IORESOURCE_MEM, + }, + [2] = { + .start = IRQ_IDE1, + .end = IRQ_IDE1, + .flags = IORESOURCE_IRQ, + }, +}; + +static struct platform_device bast_device_ide1 = { + .name = "pata_platform", + .id = 1, + .num_resources = ARRAY_SIZE(bast_ide1_resource), + .resource = bast_ide1_resource, + .dev = { + .platform_data = &bast_ide_platdata, + .coherent_dma_mask = ~0, + } +}; + +static struct platform_device *bast_ide_devices[] __initdata = { + &bast_device_ide0, + &bast_device_ide1, +}; + +static __init int bast_ide_init(void) +{ + if (machine_is_bast() || machine_is_vr1000()) + return platform_add_devices(bast_ide_devices, + ARRAY_SIZE(bast_ide_devices)); + + return 0; +} + +fs_initcall(bast_ide_init); diff -urpN -X linux-2.6.22-rc3/Documentation/dontdiff linux-2.6.22-rc3/arch/arm/mach-s3c2410/mach-bast.c linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/mach-bast.c --- linux-2.6.22-rc3/arch/arm/mach-s3c2410/mach-bast.c 2007-05-27 18:54:18.000000000 +0100 +++ linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/mach-bast.c 2007-05-28 15:15:11.000000000 +0100 @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -131,37 +132,21 @@ static struct map_desc bast_iodesc[] __i { VA_C2(BAST_VA_ISAIO), PA_CS2(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { VA_C2(BAST_VA_ISAMEM), PA_CS2(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, { VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, - { VA_C2(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C2(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C2(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C2(BAST_VA_IDESECAUX), PA_CS3(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, /* slow, word */ { VA_C3(BAST_VA_ISAIO), PA_CS3(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { VA_C3(BAST_VA_ISAMEM), PA_CS3(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, { VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, - { VA_C3(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C3(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C3(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C3(BAST_VA_IDESECAUX), PA_CS3(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, /* fast, byte */ { VA_C4(BAST_VA_ISAIO), PA_CS4(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { VA_C4(BAST_VA_ISAMEM), PA_CS4(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, { VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, - { VA_C4(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C4(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C4(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C4(BAST_VA_IDESECAUX), PA_CS5(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, /* fast, word */ { VA_C5(BAST_VA_ISAIO), PA_CS5(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, { VA_C5(BAST_VA_ISAMEM), PA_CS5(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, { VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, - { VA_C5(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C5(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C5(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C5(BAST_VA_IDESECAUX), PA_CS5(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, }; #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK @@ -441,6 +426,7 @@ static struct s3c2410fb_mach_info __init } }; + /* Standard BAST devices */ static struct platform_device *bast_devices[] __initdata = { diff -urpN -X linux-2.6.22-rc3/Documentation/dontdiff linux-2.6.22-rc3/arch/arm/mach-s3c2410/mach-vr1000.c linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/mach-vr1000.c --- linux-2.6.22-rc3/arch/arm/mach-s3c2410/mach-vr1000.c 2007-05-27 18:54:18.000000000 +0100 +++ linux-2.6.22-rc3-pata/arch/arm/mach-s3c2410/mach-vr1000.c 2007-05-28 15:15:29.000000000 +0100 @@ -97,34 +97,6 @@ static struct map_desc vr1000_iodesc[] _ .length = SZ_1M, .type = MT_DEVICE, }, - - /* peripheral space... one for each of fast/slow/byte/16bit */ - /* note, ide is only decoded in word space, even though some registers - * are only 8bit */ - - /* slow, byte */ - { VA_C2(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C2(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C2(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C2(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, - - /* slow, word */ - { VA_C3(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C3(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C3(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C3(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, - - /* fast, byte */ - { VA_C4(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C4(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C4(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C4(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, - - /* fast, word */ - { VA_C5(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, - { VA_C5(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, - { VA_C5(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, - { VA_C5(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, }; #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK