Merge branch 'devel-stable' of http://ftp.arm.linux.org.uk/pub/linux/arm/kernel/git...
[linux-3.10.git] / arch / arm / mach-realview / realview_pbx.c
index 08fd683..63c4114 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/amba/bus.h>
 #include <linux/amba/pl061.h>
 #include <linux/amba/mmci.h>
+#include <linux/amba/pl022.h>
 #include <linux/io.h>
 
 #include <asm/irq.h>
@@ -136,52 +137,37 @@ static struct pl061_platform_data gpio2_plat_data = {
        .irq_base       = -1,
 };
 
+static struct pl022_ssp_controller ssp0_plat_data = {
+       .bus_id = 0,
+       .enable_dma = 0,
+       .num_chipselect = 1,
+};
+
 /*
  * RealView PBXCore AMBA devices
  */
 
 #define GPIO2_IRQ              { IRQ_PBX_GPIO2, NO_IRQ }
-#define GPIO2_DMA              { 0, 0 }
 #define GPIO3_IRQ              { IRQ_PBX_GPIO3, NO_IRQ }
-#define GPIO3_DMA              { 0, 0 }
 #define AACI_IRQ               { IRQ_PBX_AACI, NO_IRQ }
-#define AACI_DMA               { 0x80, 0x81 }
 #define MMCI0_IRQ              { IRQ_PBX_MMCI0A, IRQ_PBX_MMCI0B }
-#define MMCI0_DMA              { 0x84, 0 }
 #define KMI0_IRQ               { IRQ_PBX_KMI0, NO_IRQ }
-#define KMI0_DMA               { 0, 0 }
 #define KMI1_IRQ               { IRQ_PBX_KMI1, NO_IRQ }
-#define KMI1_DMA               { 0, 0 }
 #define PBX_SMC_IRQ            { NO_IRQ, NO_IRQ }
-#define PBX_SMC_DMA            { 0, 0 }
 #define MPMC_IRQ               { NO_IRQ, NO_IRQ }
-#define MPMC_DMA               { 0, 0 }
 #define PBX_CLCD_IRQ           { IRQ_PBX_CLCD, NO_IRQ }
-#define PBX_CLCD_DMA           { 0, 0 }
 #define DMAC_IRQ               { IRQ_PBX_DMAC, NO_IRQ }
-#define DMAC_DMA               { 0, 0 }
 #define SCTL_IRQ               { NO_IRQ, NO_IRQ }
-#define SCTL_DMA               { 0, 0 }
 #define PBX_WATCHDOG_IRQ       { IRQ_PBX_WATCHDOG, NO_IRQ }
-#define PBX_WATCHDOG_DMA       { 0, 0 }
 #define PBX_GPIO0_IRQ          { IRQ_PBX_GPIO0, NO_IRQ }
-#define PBX_GPIO0_DMA          { 0, 0 }
 #define GPIO1_IRQ              { IRQ_PBX_GPIO1, NO_IRQ }
-#define GPIO1_DMA              { 0, 0 }
 #define PBX_RTC_IRQ            { IRQ_PBX_RTC, NO_IRQ }
-#define PBX_RTC_DMA            { 0, 0 }
 #define SCI_IRQ                        { IRQ_PBX_SCI, NO_IRQ }
-#define SCI_DMA                        { 7, 6 }
 #define PBX_UART0_IRQ          { IRQ_PBX_UART0, NO_IRQ }
-#define PBX_UART0_DMA          { 15, 14 }
 #define PBX_UART1_IRQ          { IRQ_PBX_UART1, NO_IRQ }
-#define PBX_UART1_DMA          { 13, 12 }
 #define PBX_UART2_IRQ          { IRQ_PBX_UART2, NO_IRQ }
-#define PBX_UART2_DMA          { 11, 10 }
 #define PBX_UART3_IRQ          { IRQ_PBX_UART3, NO_IRQ }
-#define PBX_UART3_DMA          { 0x86, 0x87 }
 #define PBX_SSP_IRQ            { IRQ_PBX_SSP, NO_IRQ }
-#define PBX_SSP_DMA            { 9, 8 }
 
 /* FPGA Primecells */
 AMBA_DEVICE(aaci,      "fpga:aaci",    AACI,           NULL);
@@ -202,7 +188,7 @@ AMBA_DEVICE(sci0,   "dev:sci0",     SCI,            NULL);
 AMBA_DEVICE(uart0,     "dev:uart0",    PBX_UART0,      NULL);
 AMBA_DEVICE(uart1,     "dev:uart1",    PBX_UART1,      NULL);
 AMBA_DEVICE(uart2,     "dev:uart2",    PBX_UART2,      NULL);
-AMBA_DEVICE(ssp0,      "dev:ssp0",     PBX_SSP,        NULL);
+AMBA_DEVICE(ssp0,      "dev:ssp0",     PBX_SSP,        &ssp0_plat_data);
 
 /* Primecells on the NEC ISSP chip */
 AMBA_DEVICE(clcd,      "issp:clcd",    PBX_CLCD,       &clcd_plat_data);
@@ -306,15 +292,12 @@ static void __init gic_init_irq(void)
 {
        /* ARM PBX on-board GIC */
        if (core_tile_pbx11mp() || core_tile_pbxa9mp()) {
-               gic_cpu_base_addr = __io_address(REALVIEW_PBX_TILE_GIC_CPU_BASE);
-               gic_dist_init(0, __io_address(REALVIEW_PBX_TILE_GIC_DIST_BASE),
-                             29);
-               gic_cpu_init(0, __io_address(REALVIEW_PBX_TILE_GIC_CPU_BASE));
+               gic_init(0, 29, __io_address(REALVIEW_PBX_TILE_GIC_DIST_BASE),
+                        __io_address(REALVIEW_PBX_TILE_GIC_CPU_BASE));
        } else {
-               gic_cpu_base_addr = __io_address(REALVIEW_PBX_GIC_CPU_BASE);
-               gic_dist_init(0, __io_address(REALVIEW_PBX_GIC_DIST_BASE),
-                             IRQ_PBX_GIC_START);
-               gic_cpu_init(0, __io_address(REALVIEW_PBX_GIC_CPU_BASE));
+               gic_init(0, IRQ_PBX_GIC_START,
+                        __io_address(REALVIEW_PBX_GIC_DIST_BASE),
+                        __io_address(REALVIEW_PBX_GIC_CPU_BASE));
        }
 }
 
@@ -336,8 +319,8 @@ static struct sys_timer realview_pbx_timer = {
        .init           = realview_pbx_timer_init,
 };
 
-static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags,
-                              char **from, struct meminfo *meminfo)
+static void realview_pbx_fixup(struct tag *tags, char **from,
+                              struct meminfo *meminfo)
 {
 #ifdef CONFIG_SPARSEMEM
        /*
@@ -352,7 +335,7 @@ static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags,
        meminfo->bank[2].size = SZ_256M;
        meminfo->nr_banks = 3;
 #else
-       realview_fixup(mdesc, tags, from, meminfo);
+       realview_fixup(tags, from, meminfo);
 #endif
 }
 
@@ -410,12 +393,14 @@ static void __init realview_pbx_init(void)
 
 MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX")
        /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
-       .phys_io        = REALVIEW_PBX_UART0_BASE & SECTION_MASK,
-       .io_pg_offst    = (IO_ADDRESS(REALVIEW_PBX_UART0_BASE) >> 18) & 0xfffc,
-       .boot_params    = PHYS_OFFSET + 0x00000100,
+       .atag_offset    = 0x100,
        .fixup          = realview_pbx_fixup,
        .map_io         = realview_pbx_map_io,
+       .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
        .timer          = &realview_pbx_timer,
        .init_machine   = realview_pbx_init,
+#ifdef CONFIG_ZONE_DMA
+       .dma_zone_size  = SZ_256M,
+#endif
 MACHINE_END