bool "Support RealView/PB11MPCore platform"
        select CPU_V6
        select ARM_GIC
+       select HAVE_PATA_PLATFORM
        help
          Include support for the ARM(R) RealView MPCore Platform Baseboard.
          PB11MPCore is a platform with an on-board ARM11MPCore and has
        bool "Support RealView/PB-A8 platform"
        select CPU_V7
        select ARM_GIC
+       select HAVE_PATA_PLATFORM
        help
          Include support for the ARM(R) RealView Cortex-A8 Platform Baseboard.
          PB-A8 is a platform with an on-board Cortex-A8 and has support for
 
 #include <linux/clockchips.h>
 #include <linux/io.h>
 #include <linux/smc911x.h>
+#include <linux/ata_platform.h>
 
 #include <asm/clkdev.h>
 #include <asm/system.h>
        return platform_device_register(&realview_eth_device);
 }
 
+static struct pata_platform_info pata_platform_data = {
+       .ioport_shift           = 1,
+};
+
+static struct resource pata_resources[] = {
+       [0] = {
+               .start          = REALVIEW_CF_BASE,
+               .end            = REALVIEW_CF_BASE + 0xff,
+               .flags          = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start          = REALVIEW_CF_BASE + 0x100,
+               .end            = REALVIEW_CF_BASE + SZ_4K - 1,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+struct platform_device realview_cf_device = {
+       .name                   = "pata_platform",
+       .id                     = -1,
+       .num_resources          = ARRAY_SIZE(pata_resources),
+       .resource               = pata_resources,
+       .dev                    = {
+               .platform_data  = &pata_platform_data,
+       },
+};
+
 static struct resource realview_i2c_resource = {
        .start          = REALVIEW_I2C_BASE,
        .end            = REALVIEW_I2C_BASE + SZ_4K - 1,
 
 }
 
 extern struct platform_device realview_flash_device;
+extern struct platform_device realview_cf_device;
 extern struct platform_device realview_i2c_device;
 extern struct mmc_platform_data realview_mmc0_plat_data;
 extern struct mmc_platform_data realview_mmc1_plat_data;
 
 #define REALVIEW_PBA8_DMC_BASE                 0x100E0000      /* DMC configuration */
 #define REALVIEW_PBA8_SMC_BASE                 0x100E1000      /* SMC configuration */
 #define REALVIEW_PBA8_CAN_BASE                 0x100E2000      /* CAN bus */
-#define REALVIEW_PBA8_CF_BASE                  0x18000000      /* Compact flash */
-#define REALVIEW_PBA8_CF_MEM_BASE              0x18003000      /* SMC for Compact flash */
 #define REALVIEW_PBA8_GIC_CPU_BASE             0x1E000000      /* Generic interrupt controller CPU interface */
 #define REALVIEW_PBA8_FLASH0_BASE              0x40000000
 #define REALVIEW_PBA8_FLASH0_SIZE              SZ_64M
 
 #define REALVIEW_SDRAM67_BASE         0x70000000       /* SDRAM banks 6 and 7 */
 #define REALVIEW_LT_BASE              0x80000000       /* Logic Tile expansion */
 
+/*
+ * CompactFlash
+ */
+#define REALVIEW_CF_BASE               0x18000000      /* CompactFlash */
+#define REALVIEW_CF_MEM_BASE           0x18003000      /* SMC for CompactFlash */
+
 /*
  * Disk on Chip
  */
 
        },
 };
 
-struct resource realview_pb11mp_cf_resources[] = {
-       [0] = {
-               .start          = REALVIEW_PB11MP_CF_BASE,
-               .end            = REALVIEW_PB11MP_CF_BASE + SZ_4K - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start          = REALVIEW_PB11MP_CF_MEM_BASE,
-               .end            = REALVIEW_PB11MP_CF_MEM_BASE + SZ_4K - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       [2] = {
-               .start          = -1,           /* FIXME: Find correct irq */
-               .end            = -1,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-struct platform_device realview_pb11mp_cf_device = {
-       .name           = "compactflash",
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(realview_pb11mp_cf_resources),
-       .resource       = realview_pb11mp_cf_resources,
-};
-
 static void __init gic_init_irq(void)
 {
        unsigned int pldctrl;
                                ARRAY_SIZE(realview_pb11mp_flash_resource));
        realview_eth_register(NULL, realview_pb11mp_smsc911x_resources);
        platform_device_register(&realview_i2c_device);
-       platform_device_register(&realview_pb11mp_cf_device);
+       platform_device_register(&realview_cf_device);
 
        for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
                struct amba_device *d = amba_devs[i];
 
        },
 };
 
-struct resource realview_pba8_cf_resources[] = {
-       [0] = {
-               .start          = REALVIEW_PBA8_CF_BASE,
-               .end            = REALVIEW_PBA8_CF_BASE + SZ_4K - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       [1] = {
-               .start          = REALVIEW_PBA8_CF_MEM_BASE,
-               .end            = REALVIEW_PBA8_CF_MEM_BASE + SZ_4K - 1,
-               .flags          = IORESOURCE_MEM,
-       },
-       [2] = {
-               .start          = -1,           /* FIXME: Find correct irq */
-               .end            = -1,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-struct platform_device realview_pba8_cf_device = {
-       .name           = "compactflash",
-       .id             = 0,
-       .num_resources  = ARRAY_SIZE(realview_pba8_cf_resources),
-       .resource       = realview_pba8_cf_resources,
-};
-
 static void __init gic_init_irq(void)
 {
        /* ARM PB-A8 on-board GIC */
                                ARRAY_SIZE(realview_pba8_flash_resource));
        realview_eth_register(NULL, realview_pba8_smsc911x_resources);
        platform_device_register(&realview_i2c_device);
-       platform_device_register(&realview_pba8_cf_device);
+       platform_device_register(&realview_cf_device);
 
        for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
                struct amba_device *d = amba_devs[i];