Merge remote-tracking branches 'arm-soc/irqchip/gic-vic-move' and 'arm-soc/timer...
authorSimon Horman <horms+renesas@verge.net.au>
Thu, 24 Jan 2013 08:57:20 +0000 (17:57 +0900)
committerSimon Horman <horms+renesas@verge.net.au>
Thu, 24 Jan 2013 08:57:20 +0000 (17:57 +0900)
Conflicts:
arch/arm/mach-bcm/board_bcm.c
arch/arm/mach-cns3xxx/cns3420vb.c
arch/arm/mach-ep93xx/adssphere.c
arch/arm/mach-ep93xx/edb93xx.c
arch/arm/mach-ep93xx/gesbc9312.c
arch/arm/mach-ep93xx/micro9.c
arch/arm/mach-ep93xx/simone.c
arch/arm/mach-ep93xx/snappercl15.c
arch/arm/mach-ep93xx/ts72xx.c
arch/arm/mach-ep93xx/vision_ep9307.c
arch/arm/mach-highbank/highbank.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-msm/board-dt-8960.c
arch/arm/mach-netx/nxdb500.c
arch/arm/mach-netx/nxdkn.c
arch/arm/mach-netx/nxeb500hmi.c
arch/arm/mach-nomadik/board-nhk8815.c
arch/arm/mach-picoxcell/common.c
arch/arm/mach-realview/realview_eb.c
arch/arm/mach-realview/realview_pb1176.c
arch/arm/mach-realview/realview_pb11mp.c
arch/arm/mach-realview/realview_pba8.c
arch/arm/mach-realview/realview_pbx.c
arch/arm/mach-socfpga/socfpga.c
arch/arm/mach-spear13xx/spear1310.c
arch/arm/mach-spear13xx/spear1340.c
arch/arm/mach-spear13xx/spear13xx.c
arch/arm/mach-spear3xx/spear300.c
arch/arm/mach-spear3xx/spear310.c
arch/arm/mach-spear3xx/spear320.c
arch/arm/mach-spear3xx/spear3xx.c
arch/arm/mach-spear6xx/spear6xx.c
arch/arm/mach-tegra/board-dt-tegra20.c
arch/arm/mach-tegra/board-dt-tegra30.c
arch/arm/mach-u300/core.c
arch/arm/mach-ux500/board-mop500.c
arch/arm/mach-ux500/cpu-db8500.c
arch/arm/mach-versatile/versatile_ab.c
arch/arm/mach-versatile/versatile_dt.c
arch/arm/mach-versatile/versatile_pb.c
arch/arm/mach-vexpress/v2m.c
include/asm-generic/vmlinux.lds.h

92 files changed:
1  2 
arch/arm/mach-bcm/board_bcm.c
arch/arm/mach-cns3xxx/cns3420vb.c
arch/arm/mach-cns3xxx/core.c
arch/arm/mach-davinci/board-dm646x-evm.c
arch/arm/mach-ep93xx/adssphere.c
arch/arm/mach-ep93xx/core.c
arch/arm/mach-ep93xx/edb93xx.c
arch/arm/mach-ep93xx/gesbc9312.c
arch/arm/mach-ep93xx/micro9.c
arch/arm/mach-ep93xx/simone.c
arch/arm/mach-ep93xx/snappercl15.c
arch/arm/mach-ep93xx/ts72xx.c
arch/arm/mach-ep93xx/vision_ep9307.c
arch/arm/mach-exynos/mach-armlex4210.c
arch/arm/mach-exynos/mach-exynos4-dt.c
arch/arm/mach-exynos/mach-exynos5-dt.c
arch/arm/mach-exynos/mach-nuri.c
arch/arm/mach-exynos/mach-origen.c
arch/arm/mach-exynos/mach-smdk4x12.c
arch/arm/mach-exynos/mach-smdkv310.c
arch/arm/mach-exynos/mach-universal_c210.c
arch/arm/mach-exynos/mct.c
arch/arm/mach-highbank/highbank.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-ks8695/board-acs5k.c
arch/arm/mach-msm/board-dt-8660.c
arch/arm/mach-msm/board-dt-8960.c
arch/arm/mach-msm/timer.c
arch/arm/mach-netx/nxdb500.c
arch/arm/mach-netx/nxdkn.c
arch/arm/mach-netx/nxeb500hmi.c
arch/arm/mach-nomadik/board-nhk8815.c
arch/arm/mach-omap1/board-ams-delta.c
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-picoxcell/common.c
arch/arm/mach-realview/realview_eb.c
arch/arm/mach-realview/realview_pb1176.c
arch/arm/mach-realview/realview_pb11mp.c
arch/arm/mach-realview/realview_pba8.c
arch/arm/mach-realview/realview_pbx.c
arch/arm/mach-s3c64xx/mach-anw6410.c
arch/arm/mach-s3c64xx/mach-crag6410.c
arch/arm/mach-s3c64xx/mach-hmt.c
arch/arm/mach-s3c64xx/mach-mini6410.c
arch/arm/mach-s3c64xx/mach-ncp.c
arch/arm/mach-s3c64xx/mach-real6410.c
arch/arm/mach-s3c64xx/mach-smartq5.c
arch/arm/mach-s3c64xx/mach-smartq7.c
arch/arm/mach-s3c64xx/mach-smdk6400.c
arch/arm/mach-s3c64xx/mach-smdk6410.c
arch/arm/mach-s5p64x0/mach-smdk6440.c
arch/arm/mach-s5p64x0/mach-smdk6450.c
arch/arm/mach-s5pc100/mach-smdkc100.c
arch/arm/mach-s5pv210/mach-aquila.c
arch/arm/mach-s5pv210/mach-goni.c
arch/arm/mach-s5pv210/mach-smdkc110.c
arch/arm/mach-s5pv210/mach-smdkv210.c
arch/arm/mach-s5pv210/mach-torbreck.c
arch/arm/mach-shmobile/board-ag5evm.c
arch/arm/mach-shmobile/board-kota2.c
arch/arm/mach-shmobile/board-kzm9d.c
arch/arm/mach-shmobile/board-kzm9g.c
arch/arm/mach-shmobile/board-marzen.c
arch/arm/mach-shmobile/setup-emev2.c
arch/arm/mach-socfpga/socfpga.c
arch/arm/mach-spear13xx/include/mach/generic.h
arch/arm/mach-spear13xx/spear1310.c
arch/arm/mach-spear13xx/spear1340.c
arch/arm/mach-spear13xx/spear13xx.c
arch/arm/mach-spear3xx/include/mach/generic.h
arch/arm/mach-spear3xx/spear300.c
arch/arm/mach-spear3xx/spear310.c
arch/arm/mach-spear3xx/spear320.c
arch/arm/mach-spear3xx/spear3xx.c
arch/arm/mach-spear6xx/spear6xx.c
arch/arm/mach-sunxi/sunxi.c
arch/arm/mach-tegra/board-dt-tegra20.c
arch/arm/mach-tegra/board-dt-tegra30.c
arch/arm/mach-u300/core.c
arch/arm/mach-ux500/board-mop500.c
arch/arm/mach-ux500/cpu-db8500.c
arch/arm/mach-versatile/core.c
arch/arm/mach-versatile/versatile_ab.c
arch/arm/mach-versatile/versatile_dt.c
arch/arm/mach-versatile/versatile_pb.c
arch/arm/mach-vexpress/v2m.c
arch/arm/mach-zynq/common.c
arch/arm/plat-samsung/include/plat/cpu.h
include/asm-generic/vmlinux.lds.h

index 5c920bde679111ff3fc7a0625c71617bf6383f9b,3df68030cf684360b81e9874b3a97a58b0df86f5..23ed015a8c15dd35920c6466f51a5cc1600bec50
   * GNU General Public License for more details.
   */
  
 -#include <linux/of_irq.h>
  #include <linux/of_platform.h>
  #include <linux/init.h>
  #include <linux/device.h>
  #include <linux/platform_device.h>
 +#include <linux/irqchip.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
 -
  #include <asm/mach/time.h>
  
 -static const struct of_device_id irq_match[] = {
 -      {.compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      {}
 -};
 -
  static void timer_init(void)
  {
  }
  
- static struct sys_timer timer = {
-       .init = timer_init,
- };
 -static void __init init_irq(void)
 -{
 -      of_irq_init(irq_match);
 -}
--
  static void __init board_init(void)
  {
        of_platform_populate(NULL, of_default_bus_match_table, NULL,
@@@ -37,8 -45,9 +33,8 @@@
  static const char * const bcm11351_dt_compat[] = { "bcm,bcm11351", NULL, };
  
  DT_MACHINE_START(BCM11351_DT, "Broadcom Application Processor")
 -      .init_irq = init_irq,
 +      .init_irq = irqchip_init,
-       .timer = &timer,
+       .init_time = timer_init,
        .init_machine = board_init,
        .dt_compat = bcm11351_dt_compat,
 -      .handle_irq = gic_handle_irq,
  MACHINE_END
index 26f36d7efecdacc76395ffbd8a18ee34b9db6820,3c86f910b647846110e2f922f7df6c3d4497426f..a71867e1d8d6c58b591909facb33598bcfc57543
@@@ -28,6 -28,7 +28,6 @@@
  #include <linux/usb/ohci_pdriver.h>
  #include <asm/setup.h>
  #include <asm/mach-types.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/time.h>
@@@ -249,7 -250,8 +249,7 @@@ MACHINE_START(CNS3420VB, "Cavium Networ
        .atag_offset    = 0x100,
        .map_io         = cns3420_map_io,
        .init_irq       = cns3xxx_init_irq,
-       .timer          = &cns3xxx_timer,
+       .init_time      = cns3xxx_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = cns3420_init,
        .restart        = cns3xxx_restart,
  MACHINE_END
index db3806c00f4b497ccbf060b9f5412eaf931cf6ef,1754f8f4f34cbd557a0379804a92a072a8101293..27d57d16067a8f5f98769704ceec3ec92f995fb2
  #include <linux/interrupt.h>
  #include <linux/clockchips.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <asm/mach/map.h>
  #include <asm/mach/time.h>
  #include <asm/mach/irq.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <mach/cns3xxx.h>
  #include "core.h"
@@@ -235,17 -235,13 +235,13 @@@ static void __init __cns3xxx_timer_init
        cns3xxx_clockevents_init(timer_irq);
  }
  
static void __init cns3xxx_timer_init(void)
+ void __init cns3xxx_timer_init(void)
  {
        cns3xxx_tmr1 = IOMEM(CNS3XXX_TIMER1_2_3_BASE_VIRT);
  
        __cns3xxx_timer_init(IRQ_CNS3XXX_TIMER0);
  }
  
- struct sys_timer cns3xxx_timer = {
-       .init = cns3xxx_timer_init,
- };
  #ifdef CONFIG_CACHE_L2X0
  
  void __init cns3xxx_l2x0_init(void)
index 6e2f1631df5b0e1321c9d80d11beea76c8c29607,a9f2054c3e9b30fe21f6fd09691f994487170b15..de7adff324dc4f1c9751160213ccc202070419f0
@@@ -358,7 -358,7 +358,7 @@@ static int cpld_video_probe(struct i2c_
        return 0;
  }
  
 -static int __devexit cpld_video_remove(struct i2c_client *client)
 +static int cpld_video_remove(struct i2c_client *client)
  {
        cpld_client = NULL;
        return 0;
@@@ -818,7 -818,7 +818,7 @@@ MACHINE_START(DAVINCI_DM6467_EVM, "DaVi
        .atag_offset  = 0x100,
        .map_io       = davinci_map_io,
        .init_irq     = davinci_irq_init,
-       .timer        = &davinci_timer,
+       .init_time      = davinci_timer_init,
        .init_machine = evm_init,
        .init_late      = davinci_init_late,
        .dma_zone_size  = SZ_128M,
@@@ -829,7 -829,7 +829,7 @@@ MACHINE_START(DAVINCI_DM6467TEVM, "DaVi
        .atag_offset  = 0x100,
        .map_io       = davinci_map_io,
        .init_irq     = davinci_irq_init,
-       .timer        = &davinci_timer,
+       .init_time      = davinci_timer_init,
        .init_machine = evm_init,
        .init_late      = davinci_init_late,
        .dma_zone_size  = SZ_128M,
index 19332bf022bc2b10ed9190cb171025ff44dddd9c,82d9c788535a160f31ebae61f04e9fbb4e3469df..bda6c3a5c923c4d27715a5862f77e0cb20939251
@@@ -17,6 -17,7 +17,6 @@@
  
  #include <mach/hardware.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -38,7 -39,8 +38,7 @@@ MACHINE_START(ADSSPHERE, "ADS Sphere bo
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = adssphere_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index c533f37aad2fdb7d2b566246be3d3972c97aad7e,ee27b4b0ab078f9687f9201371da25307ddee0bd..c49ed3dc1aea68eb009c5bebbbcb0328d16a4fdc
@@@ -34,7 -34,6 +34,7 @@@
  #include <linux/i2c-gpio.h>
  #include <linux/spi/spi.h>
  #include <linux/export.h>
 +#include <linux/irqchip/arm-vic.h>
  
  #include <mach/hardware.h>
  #include <linux/platform_data/video-ep93xx.h>
@@@ -45,6 -44,8 +45,6 @@@
  #include <asm/mach/map.h>
  #include <asm/mach/time.h>
  
 -#include <asm/hardware/vic.h>
 -
  #include "soc.h"
  
  /*************************************************************************
@@@ -139,11 -140,29 +139,29 @@@ static struct irqaction ep93xx_timer_ir
        .handler        = ep93xx_timer_interrupt,
  };
  
- static void __init ep93xx_timer_init(void)
+ static u32 ep93xx_gettimeoffset(void)
+ {
+       int offset;
+       offset = __raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time;
+       /*
+        * Timer 4 is based on a 983.04 kHz reference clock,
+        * so dividing by 983040 gives the fraction of a second,
+        * so dividing by 0.983040 converts to uS.
+        * Refactor the calculation to avoid overflow.
+        * Finally, multiply by 1000 to give nS.
+        */
+       return (offset + (53 * offset / 3072)) * 1000;
+ }
+ void __init ep93xx_timer_init(void)
  {
        u32 tmode = EP93XX_TIMER123_CONTROL_MODE |
                    EP93XX_TIMER123_CONTROL_CLKSEL;
  
+       arch_gettimeoffset = ep93xx_gettimeoffset;
        /* Enable periodic HZ timer.  */
        __raw_writel(tmode, EP93XX_TIMER1_CONTROL);
        __raw_writel(TIMER1_RELOAD, EP93XX_TIMER1_LOAD);
        setup_irq(IRQ_EP93XX_TIMER1, &ep93xx_timer_irq);
  }
  
- static unsigned long ep93xx_gettimeoffset(void)
- {
-       int offset;
-       offset = __raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time;
-       /* Calculate (1000000 / 983040) * offset.  */
-       return offset + (53 * offset / 3072);
- }
- struct sys_timer ep93xx_timer = {
-       .init           = ep93xx_timer_init,
-       .offset         = ep93xx_gettimeoffset,
- };
  
  /*************************************************************************
   * EP93xx IRQ handling
index 5abf2cbe5afd84ec6b5c24fd9c42732eb7b4158f,ac260519c9e93180ac3e5ff3940d19fc5a49e264..27b14ae92c7e6e5e804e8e62deba96156ae746cc
@@@ -39,6 -39,7 +39,6 @@@
  #include <linux/platform_data/spi-ep93xx.h>
  #include <mach/gpio-ep93xx.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -275,7 -276,8 +275,7 @@@ MACHINE_START(EDB9301, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -288,7 -290,8 +288,7 @@@ MACHINE_START(EDB9302, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -301,7 -304,8 +301,7 @@@ MACHINE_START(EDB9302A, "Cirrus Logic E
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -314,7 -318,8 +314,7 @@@ MACHINE_START(EDB9307, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -327,7 -332,8 +327,7 @@@ MACHINE_START(EDB9307A, "Cirrus Logic E
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -340,7 -346,8 +340,7 @@@ MACHINE_START(EDB9312, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -353,7 -360,8 +353,7 @@@ MACHINE_START(EDB9315, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -366,7 -374,8 +366,7 @@@ MACHINE_START(EDB9315A, "Cirrus Logic E
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = edb93xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index 2a7375be6fff869aeacb9224ecad3f13dabe378d,76c50f42bd717da0f1f34e46ff78343fb406abf4..0cca5b1833093524d1c7468003bbae19c4f0c514
@@@ -17,6 -17,7 +17,6 @@@
  
  #include <mach/hardware.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -38,7 -39,8 +38,7 @@@ MACHINE_START(GESBC9312, "Glomation GES
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = gesbc9312_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index 723c0d36a6095ef99f3e69d7584636dd89edf65e,777cd2170f8a3fb60e74500cfee998bd760a9885..373583c298255179d5b4f553d61dc9d38081e874
@@@ -18,6 -18,7 +18,6 @@@
  
  #include <mach/hardware.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -81,7 -82,8 +81,7 @@@ MACHINE_START(MICRO9, "Contec Micro9-Hi
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = micro9_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -94,7 -96,8 +94,7 @@@ MACHINE_START(MICRO9M, "Contec Micro9-M
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = micro9_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -107,7 -110,8 +107,7 @@@ MACHINE_START(MICRO9L, "Contec Micro9-L
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = micro9_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
@@@ -120,7 -124,8 +120,7 @@@ MACHINE_START(MICRO9S, "Contec Micro9-S
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = micro9_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index 651a7db051204b8972ef856ef4aeb4d46121e05e,6ff39ee2ad5da0cd876a06f3a47f1c7e94138174..36f22c1a31fe596a71c596aa21d4e589435f15ba
@@@ -25,6 -25,7 +25,6 @@@
  #include <linux/platform_data/video-ep93xx.h>
  #include <mach/gpio-ep93xx.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -82,7 -83,8 +82,7 @@@ MACHINE_START(SIM_ONE, "Simplemachines 
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = simone_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index b4389d3820cc24fd7e5d652002256416fde9d97a,6434c07dbf96728c7182a3163d2e358cb1dbd5c6..aa86f86638ddcc6eab8cda6cdb986b9d6233c7c7
@@@ -31,6 -31,7 +31,6 @@@
  #include <linux/platform_data/video-ep93xx.h>
  #include <mach/gpio-ep93xx.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -175,7 -176,8 +175,7 @@@ MACHINE_START(SNAPPER_CL15, "Bluewater 
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = snappercl15_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index 1eeee09f421fb6d078d81d727f19a174549f2744,e4fa0d3760a53b040bce2461afc96bbb7a1106ef..61f4b5dc4d7dd9ad8d6802606b47d2117be314cc
@@@ -22,6 -22,7 +22,6 @@@
  
  #include <mach/hardware.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/map.h>
  #include <asm/mach/arch.h>
@@@ -245,7 -246,8 +245,7 @@@ MACHINE_START(TS72XX, "Technologic Syst
        .atag_offset    = 0x100,
        .map_io         = ts72xx_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = ts72xx_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index 723d048176db3c95e8f9ffda1b709f49c045d966,8610ba29399133187e49f0a68292d74c27413bb5..605956fd07a2bdc7e133f07b7e8000b333fd566b
@@@ -34,6 -34,7 +34,6 @@@
  #include <linux/platform_data/spi-ep93xx.h>
  #include <mach/gpio-ep93xx.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/map.h>
  #include <asm/mach/arch.h>
@@@ -363,7 -364,8 +363,7 @@@ MACHINE_START(VISION_EP9307, "Vision En
        .atag_offset    = 0x100,
        .map_io         = vision_map_io,
        .init_irq       = ep93xx_init_irq,
-       .timer          = &ep93xx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = ep93xx_timer_init,
        .init_machine   = vision_init_machine,
        .init_late      = ep93xx_init_late,
        .restart        = ep93xx_restart,
index a11a36fc7bf52461e37f02484f75fc370b51eaf3,2f18130d0d1044281cfcbad985607c937c86420d..685f29173afa8295313ab2e6320a2d029fb90ff2
@@@ -16,6 -16,7 +16,6 @@@
  #include <linux/smsc911x.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  
  #include <plat/cpu.h>
@@@ -200,8 -201,9 +200,8 @@@ MACHINE_START(ARMLEX4210, "ARMLEX4210"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = armlex4210_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = armlex4210_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .restart        = exynos4_restart,
  MACHINE_END
index 34c45b6c8b2c2031ba9ebc94205b4874c1bad35b,160030168b1995f88a5661c09f4d9452f5792a45..112d10e53d203c6a4a32ae1644f67220a1680d7a
@@@ -15,6 -15,7 +15,6 @@@
  #include <linux/serial_core.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <mach/map.h>
  
  #include <plat/cpu.h>
@@@ -106,9 -107,10 +106,9 @@@ DT_MACHINE_START(EXYNOS4210_DT, "Samsun
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = exynos4_dt_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = exynos4_dt_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .dt_compat      = exynos4_dt_compat,
        .restart        = exynos4_restart,
  MACHINE_END
index 3a3bee463c46b860adf52268c17882380bb55477,4e074c67cc8beaa510ee4f24f1b8edfd91995fa3..0deeecffa3aef2c5992c3998078f7b2ffc09ecf8
@@@ -16,6 -16,7 +16,6 @@@
  #include <linux/io.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <mach/map.h>
  #include <mach/regs-pmu.h>
  
@@@ -178,9 -179,10 +178,9 @@@ DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG E
        .init_irq       = exynos5_init_irq,
        .smp            = smp_ops(exynos_smp_ops),
        .map_io         = exynos5_dt_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = exynos5_dt_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .dt_compat      = exynos5_dt_compat,
        .restart        = exynos5_restart,
        .reserve        = exynos5_reserve,
index 55f8183e1d6fe334b7d531a7f0c067a10a69ecba,dccd1d16b836b33e5a7d79c2afa2f2cafce8e1a2..b8b3fbf0bae73508ce00d989130f48824dc6077c
@@@ -39,6 -39,7 +39,6 @@@
  #include <media/v4l2-mediabus.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  
  #include <plat/adc.h>
@@@ -1378,9 -1379,10 +1378,9 @@@ MACHINE_START(NURI, "NURI"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = nuri_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = nuri_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .reserve        = &nuri_reserve,
        .restart        = exynos4_restart,
  MACHINE_END
index 45cda369923eec5da8d86e0e82722727a2df2b5a,4e1156324562712761a0ebab4ea81f4eaee99b6c..579d2d171daa6e4ea21f56611dda80f536d41133
@@@ -29,6 -29,7 +29,6 @@@
  #include <linux/platform_data/usb-exynos.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  
  #include <video/platform_lcd.h>
@@@ -813,9 -814,10 +813,9 @@@ MACHINE_START(ORIGEN, "ORIGEN"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = origen_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = origen_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .reserve        = &origen_reserve,
        .restart        = exynos4_restart,
  MACHINE_END
index d5dbd51b26e3e737fde8110475eac2cc2be08def,e9c9c2995f09c7989b75521ab3386160ad331b5a..fe6149624b849aa2dd624115711e1eb1e9fcbee6
@@@ -25,6 -25,7 +25,6 @@@
  #include <linux/platform_data/s3c-hsotg.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  
  #include <video/samsung_fimd.h>
@@@ -375,8 -376,9 +375,8 @@@ MACHINE_START(SMDK4212, "SMDK4212"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = smdk4x12_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = smdk4x12_machine_init,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .restart        = exynos4_restart,
        .reserve        = &smdk4x12_reserve,
  MACHINE_END
@@@ -388,9 -390,10 +388,9 @@@ MACHINE_START(SMDK4412, "SMDK4412"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = smdk4x12_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = smdk4x12_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .restart        = exynos4_restart,
        .reserve        = &smdk4x12_reserve,
  MACHINE_END
index b095964f29892bbe289ccb6a8da1a17a997702c3,b228ab9bda0bf34a8226fb9c61ffc3e4da73e643..d71672922b191c7270a1dfa3fcdb28718e1bbf66
@@@ -26,6 -26,7 +26,6 @@@
  #include <linux/platform_data/usb-exynos.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  
  #include <video/platform_lcd.h>
@@@ -422,8 -423,9 +422,8 @@@ MACHINE_START(SMDKV310, "SMDKV310"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = smdkv310_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = smdkv310_machine_init,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .reserve        = &smdkv310_reserve,
        .restart        = exynos4_restart,
  MACHINE_END
@@@ -434,9 -436,10 +434,9 @@@ MACHINE_START(SMDKC210, "SMDKC210"
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = smdkv310_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = smdkv310_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &exynos4_timer,
+       .init_time      = exynos4_timer_init,
        .reserve        = &smdkv310_reserve,
        .restart        = exynos4_restart,
  MACHINE_END
index be3777587283e9c2b73a279b9c265bcb22d0c54a,866f29a9beee0c4e3fb9467a376dae3bfedef75c..c9d33a43103e81bc1623aea71b239cc7bb4e5da2
@@@ -29,6 -29,7 +29,6 @@@
  #include <drm/exynos_drm.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  
  #include <video/samsung_fimd.h>
@@@ -1150,9 -1151,10 +1150,9 @@@ MACHINE_START(UNIVERSAL_C210, "UNIVERSA
        .smp            = smp_ops(exynos_smp_ops),
        .init_irq       = exynos4_init_irq,
        .map_io         = universal_map_io,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = universal_machine_init,
        .init_late      = exynos_init_late,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .reserve        = &universal_reserve,
        .restart        = exynos4_restart,
  MACHINE_END
index baefe9b0be14ddc75578057aec51c8d9829f9809,4a89b54fcadbf43e06fe09e26f539fc305d95fbd..668d1a6d392d1c887e79f2e15a5156979f5ae225
@@@ -22,6 -22,7 +22,6 @@@
  #include <linux/of.h>
  
  #include <asm/arch_timer.h>
 -#include <asm/hardware/gic.h>
  #include <asm/localtimer.h>
  
  #include <plat/cpu.h>
@@@ -477,7 -478,7 +477,7 @@@ static void __init exynos4_timer_resour
  #endif /* CONFIG_LOCAL_TIMERS */
  }
  
static void __init exynos_timer_init(void)
void __init exynos4_timer_init(void)
  {
        if (soc_is_exynos5440()) {
                arch_timer_of_register();
        exynos4_clocksource_init();
        exynos4_clockevent_init();
  }
- struct sys_timer exynos4_timer = {
-       .init           = exynos_timer_init,
- };
index f9191eacd0fc958170142b8dbc2741de052d1b87,f6ca285ee5c51296e943a48071b723e9e93c49ac..fd630bccbd315fec1582ae91ac95d46dfce05008
@@@ -18,7 -18,6 +18,7 @@@
  #include <linux/dma-mapping.h>
  #include <linux/io.h>
  #include <linux/irq.h>
 +#include <linux/irqchip.h>
  #include <linux/irqdomain.h>
  #include <linux/of.h>
  #include <linux/of_irq.h>
@@@ -33,6 -32,7 +33,6 @@@
  #include <asm/smp_twd.h>
  #include <asm/hardware/arm_timer.h>
  #include <asm/hardware/timer-sp.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -66,6 -66,12 +66,6 @@@ void highbank_set_cpu_jump(int cpu, voi
                          HB_JUMP_TABLE_PHYS(cpu) + 15);
  }
  
 -const static struct of_device_id irq_match[] = {
 -      { .compatible = "arm,cortex-a15-gic", .data = gic_of_init, },
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      {}
 -};
 -
  #ifdef CONFIG_CACHE_L2X0
  static void highbank_l2x0_disable(void)
  {
@@@ -76,7 -82,7 +76,7 @@@
  
  static void __init highbank_init_irq(void)
  {
 -      of_irq_init(irq_match);
 +      irqchip_init();
  
        if (of_find_compatible_node(NULL, NULL, "arm,cortex-a9"))
                highbank_scu_map_io();
@@@ -123,13 -129,9 +123,9 @@@ static void __init highbank_timer_init(
        arch_timer_sched_clock_init();
  }
  
- static struct sys_timer highbank_timer = {
-       .init = highbank_timer_init,
- };
  static void highbank_power_off(void)
  {
 -      hignbank_set_pwr_shutdown();
 +      highbank_set_pwr_shutdown();
  
        while (1)
                cpu_do_idle();
@@@ -203,7 -205,8 +199,7 @@@ DT_MACHINE_START(HIGHBANK, "Highbank"
        .smp            = smp_ops(highbank_smp_ops),
        .map_io         = debug_ll_io_init,
        .init_irq       = highbank_init_irq,
-       .timer          = &highbank_timer,
+       .init_time      = highbank_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = highbank_init,
        .dt_compat      = highbank_match,
        .restart        = highbank_restart,
index 724bfeb8f88bc88662b901aaadba4d460a27c8b2,cd277a0f5b16d6c1fd36199c4e2095a3ef244c12..8d3d06e0e8a19a527e89ffedf75ba50ecd652477
@@@ -18,7 -18,6 +18,7 @@@
  #include <linux/init.h>
  #include <linux/io.h>
  #include <linux/irq.h>
 +#include <linux/irqchip.h>
  #include <linux/of.h>
  #include <linux/of_address.h>
  #include <linux/of_irq.h>
@@@ -30,6 -29,7 +30,6 @@@
  #include <asm/cpuidle.h>
  #include <asm/smp_twd.h>
  #include <asm/hardware/cache-l2x0.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
  #include <asm/system_misc.h>
@@@ -221,12 -221,17 +221,12 @@@ static void __init imx6q_map_io(void
        imx6q_clock_map_io();
  }
  
 -static const struct of_device_id imx6q_irq_match[] __initconst = {
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      { /* sentinel */ }
 -};
 -
  static void __init imx6q_init_irq(void)
  {
        l2x0_of_init(0, ~0UL);
        imx_src_init();
        imx_gpc_init();
 -      of_irq_init(imx6q_irq_match);
 +      irqchip_init();
  }
  
  static void __init imx6q_timer_init(void)
        imx_print_silicon_rev("i.MX6Q", imx6q_revision());
  }
  
- static struct sys_timer imx6q_timer = {
-       .init = imx6q_timer_init,
- };
  static const char *imx6q_dt_compat[] __initdata = {
        "fsl,imx6q",
        NULL,
@@@ -249,7 -250,8 +245,7 @@@ DT_MACHINE_START(IMX6Q, "Freescale i.MX
        .smp            = smp_ops(imx_smp_ops),
        .map_io         = imx6q_map_io,
        .init_irq       = imx6q_init_irq,
-       .timer          = &imx6q_timer,
 -      .handle_irq     = imx6q_handle_irq,
+       .init_time      = imx6q_timer_init,
        .init_machine   = imx6q_init_machine,
        .init_late      = imx6q_init_late,
        .dt_compat      = imx6q_dt_compat,
index de4fd2bb1e27960a36d4301792a072bee90409f3,d6f57fd6f788b0c8582244ca1391de8c7964932a..d4af5c191c24e49fd5f4d8bf092dc61230a898ae
@@@ -67,10 -67,6 +67,10 @@@ static void __init kirkwood_legacy_clk_
        orion_clkdev_add(NULL, "mv643xx_eth_port.1",
                         of_clk_get_from_provider(&clkspec));
  
 +      clkspec.args[0] = CGC_BIT_SDIO;
 +      orion_clkdev_add(NULL, "mvsdio",
 +                       of_clk_get_from_provider(&clkspec));
 +
  }
  
  static void __init kirkwood_of_clk_init(void)
@@@ -183,7 -179,7 +183,7 @@@ DT_MACHINE_START(KIRKWOOD_DT, "Marvell 
        .map_io         = kirkwood_map_io,
        .init_early     = kirkwood_init_early,
        .init_irq       = orion_dt_init_irq,
-       .timer          = &kirkwood_timer,
+       .init_time      = kirkwood_timer_init,
        .init_machine   = kirkwood_dt_init,
        .restart        = kirkwood_restart,
        .dt_compat      = kirkwood_dt_board_compat,
index b0c306ccbc6e38369167a7aef437914bd85affd7,7beec9b8becd2e0f623d25ae15705198de07d6b3..456d6386edf8b5f34e80f3b25de4605e18269ad2
@@@ -92,7 -92,7 +92,7 @@@ static struct i2c_board_info acs5k_i2c_
        },
  };
  
 -static void __devinit acs5k_i2c_init(void)
 +static void acs5k_i2c_init(void)
  {
        /* The gpio interface */
        platform_device_register(&acs5k_i2c_device);
@@@ -227,6 -227,6 +227,6 @@@ MACHINE_START(ACS5K, "Brivo Systems LL
        .map_io         = ks8695_map_io,
        .init_irq       = ks8695_init_irq,
        .init_machine   = acs5k_init,
-       .timer          = &ks8695_timer,
+       .init_time      = ks8695_timer_init,
        .restart        = ks8695_restart,
  MACHINE_END
index c111cec64338952d0553fda429b094634d1a14e7,27c41eabfd12ec1177afd79ed5046d4bddae2d23..7dcfc5300bbd2e6a8345d73899f7b74d4568825e
   */
  
  #include <linux/init.h>
 +#include <linux/irqchip.h>
  #include <linux/of.h>
 -#include <linux/of_irq.h>
  #include <linux/of_platform.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  #include <mach/board.h>
  #include "common.h"
  
 -static const struct of_device_id msm_dt_gic_match[] __initconst = {
 -      { .compatible = "qcom,msm-8660-qgic", .data = gic_of_init },
 -      {}
 -};
 -
 -static void __init msm8x60_init_irq(void)
 -{
 -      of_irq_init(msm_dt_gic_match);
 -}
 -
  static void __init msm8x60_init_late(void)
  {
        smd_debugfs_init();
@@@ -44,9 -55,10 +44,9 @@@ static const char *msm8x60_fluid_match[
  DT_MACHINE_START(MSM_DT, "Qualcomm MSM (Flattened Device Tree)")
        .smp = smp_ops(msm_smp_ops),
        .map_io = msm_map_msm8x60_io,
 -      .init_irq = msm8x60_init_irq,
 -      .handle_irq = gic_handle_irq,
 +      .init_irq = irqchip_init,
        .init_machine = msm8x60_dt_init,
        .init_late = msm8x60_init_late,
-       .timer = &msm_dt_timer,
+       .init_time      = msm_dt_timer_init,
        .dt_compat = msm8x60_fluid_match,
  MACHINE_END
index fad0e5083e4389bcb271083284c1e2c6a5638cd0,3226d5276962bbdf2b40831b05fe25dfb7ae61b5..73019363ffa4db099ea801a85fe7a9d8a4b0b3ff
   */
  
  #include <linux/init.h>
 -#include <linux/of_irq.h>
 +#include <linux/irqchip.h>
  #include <linux/of_platform.h>
  
 -#include <asm/hardware/gic.h>
  #include <asm/mach/arch.h>
  
  #include "common.h"
  
 -static const struct of_device_id msm_dt_gic_match[] __initconst = {
 -      { .compatible = "qcom,msm-qgic2", .data = gic_of_init },
 -      { }
 -};
 -
 -static void __init msm_dt_init_irq(void)
 -{
 -      of_irq_init(msm_dt_gic_match);
 -}
 -
  static void __init msm_dt_init(void)
  {
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
@@@ -31,8 -42,9 +31,8 @@@ static const char * const msm8960_dt_ma
  DT_MACHINE_START(MSM8960_DT, "Qualcomm MSM (Flattened Device Tree)")
        .smp = smp_ops(msm_smp_ops),
        .map_io = msm_map_msm8960_io,
 -      .init_irq = msm_dt_init_irq,
 +      .init_irq = irqchip_init,
-       .timer = &msm_dt_timer,
+       .init_time      = msm_dt_timer_init,
        .init_machine = msm_dt_init,
        .dt_compat = msm8960_dt_match,
 -      .handle_irq = gic_handle_irq,
  MACHINE_END
index 4330285d6753650b0dc218789a3e659344e2fe71,2fb5f3eec50f3edd08580935a575b226ebf9a2cf..dfc506721a5ae8464761e82079243dbc6a1a5450
@@@ -25,6 -25,7 +25,6 @@@
  #include <linux/of_irq.h>
  
  #include <asm/mach/time.h>
 -#include <asm/hardware/gic.h>
  #include <asm/localtimer.h>
  #include <asm/sched_clock.h>
  
@@@ -228,7 -229,7 +228,7 @@@ static const struct of_device_id msm_gp
        { },
  };
  
static void __init msm_dt_timer_init(void)
+ void __init msm_dt_timer_init(void)
  {
        struct device_node *np;
        u32 freq;
  
        msm_timer_init(freq, 32, irq, !!percpu_offset);
  }
- struct sys_timer msm_dt_timer = {
-       .init = msm_dt_timer_init
- };
  #endif
  
  static int __init msm_timer_map(phys_addr_t event, phys_addr_t source)
        return 0;
  }
  
static void __init msm7x01_timer_init(void)
+ void __init msm7x01_timer_init(void)
  {
        struct clocksource *cs = &msm_clocksource;
  
                        false);
  }
  
- struct sys_timer msm7x01_timer = {
-       .init = msm7x01_timer_init
- };
- static void __init msm7x30_timer_init(void)
+ void __init msm7x30_timer_init(void)
  {
        if (msm_timer_map(0xc0100004, 0xc0100024))
                return;
        msm_timer_init(24576000 / 4, 32, 1, false);
  }
  
- struct sys_timer msm7x30_timer = {
-       .init = msm7x30_timer_init
- };
- static void __init qsd8x50_timer_init(void)
+ void __init qsd8x50_timer_init(void)
  {
        if (msm_timer_map(0xAC100000, 0xAC100010))
                return;
        msm_timer_init(19200000 / 4, 32, 7, false);
  }
- struct sys_timer qsd8x50_timer = {
-       .init = qsd8x50_timer_init
- };
index 04d5e5eb6473ac294e53402cca2c8ed357b0623f,241e1b9c58cb5be730a3d432b7f288da9f9ac22e..9b558eb3070fd6d554a88c7f8d3bd580a8df3f27
@@@ -28,6 -28,7 +28,6 @@@
  #include <mach/hardware.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/vic.h>
  #include <mach/netx-regs.h>
  #include <linux/platform_data/eth-netx.h>
  
@@@ -203,7 -204,8 +203,7 @@@ MACHINE_START(NXDB500, "Hilscher nxdb50
        .atag_offset    = 0x100,
        .map_io         = netx_map_io,
        .init_irq       = netx_init_irq,
-       .timer          = &netx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = netx_timer_init,
        .init_machine   = nxdb500_init,
        .restart        = netx_restart,
  MACHINE_END
index cf15bdd50f6fe37a66f07dde276c646ee924a2df,055aeecedde2e93a058883083f129e403526a75e..a5e86cd365e7d202b832294c1f646c811402b423
@@@ -28,6 -28,7 +28,6 @@@
  #include <mach/hardware.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/vic.h>
  #include <mach/netx-regs.h>
  #include <linux/platform_data/eth-netx.h>
  
@@@ -96,7 -97,8 +96,7 @@@ MACHINE_START(NXDKN, "Hilscher nxdkn"
        .atag_offset    = 0x100,
        .map_io         = netx_map_io,
        .init_irq       = netx_init_irq,
-       .timer          = &netx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = netx_timer_init,
        .init_machine   = nxdkn_init,
        .restart        = netx_restart,
  MACHINE_END
index 069bd26e1b72731a4f29969ae13fda256133ee20,018e91c55b00527c321abe253fa58a585aacbf52..ad17885d0159e69909dbbd74b8f248cc6056bda5
@@@ -28,6 -28,7 +28,6 @@@
  #include <mach/hardware.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/vic.h>
  #include <mach/netx-regs.h>
  #include <linux/platform_data/eth-netx.h>
  
@@@ -180,7 -181,8 +180,7 @@@ MACHINE_START(NXEB500HMI, "Hilscher nxe
        .atag_offset    = 0x100,
        .map_io         = netx_map_io,
        .init_irq       = netx_init_irq,
-       .timer          = &netx_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = netx_timer_init,
        .init_machine   = nxeb500hmi_init,
        .restart        = netx_restart,
  MACHINE_END
index 5748df0d725a6aad918b56c1a6bdba747cfed3ff,ab756ed87ef05b8f705dbd71da090b4400762a01..aaed48d9437449d1333e59e793ba3a59a9ce0d10
@@@ -27,6 -27,8 +27,6 @@@
  #include <linux/pinctrl/machine.h>
  #include <linux/platform_data/pinctrl-nomadik.h>
  #include <linux/platform_data/clocksource-nomadik-mtu.h>
 -#include <linux/platform_data/mtd-nomadik-nand.h>
 -#include <asm/hardware/vic.h>
  #include <asm/sizes.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
@@@ -266,10 -268,6 +266,6 @@@ static void __init nomadik_timer_init(v
        nmdk_timer_init(io_p2v(NOMADIK_MTU0_BASE), IRQ_MTU0);
  }
  
- static struct sys_timer nomadik_timer = {
-       .init   = nomadik_timer_init,
- };
  static struct i2c_board_info __initdata nhk8815_i2c0_devices[] = {
        {
                I2C_BOARD_INFO("stw4811", 0x2d),
@@@ -351,7 -349,8 +347,7 @@@ MACHINE_START(NOMADIK, "NHK8815"
        .atag_offset    = 0x100,
        .map_io         = cpu8815_map_io,
        .init_irq       = cpu8815_init_irq,
-       .timer          = &nomadik_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = nomadik_timer_init,
        .init_machine   = nhk8815_platform_init,
        .restart        = cpu8815_restart,
  MACHINE_END
index 2e98a3ac7c5e1f5fdc56046507bda4b61aa1b3ae,3d2aa6f30192d708ec05ac27c4a038229680e724..2aab761ee68db7ae8fee7fd5eaf84e82f9c80572
@@@ -160,7 -160,7 +160,7 @@@ static struct omap_lcd_config ams_delta
        .ctrl_name      = "internal",
  };
  
 -static struct omap_usb_config ams_delta_usb_config = {
 +static struct omap_usb_config ams_delta_usb_config __initdata = {
        .register_host  = 1,
        .hmc_mode       = 16,
        .pins[0]        = 2,
@@@ -628,6 -628,6 +628,6 @@@ MACHINE_START(AMS_DELTA, "Amstrad E3 (D
        .init_irq       = omap1_init_irq,
        .init_machine   = ams_delta_init,
        .init_late      = ams_delta_init_late,
-       .timer          = &omap1_timer,
+       .init_time      = omap1_timer_init,
        .restart        = omap1_restart,
  MACHINE_END
index cb43253dfa864f6e6346b229f94802a22829c3c7,f5d5f5941d7d37e7a363d3fdd5a93beec84a016b..f8eeef40efe8e1cdae47e5d748bb58d396d4381a
  #include <linux/regulator/fixed.h>
  #include <linux/leds.h>
  #include <linux/leds_pwm.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/omap4-keypad.h>
  #include <linux/usb/musb.h>
  
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -722,8 -722,9 +722,8 @@@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4
        .map_io         = omap4_map_io,
        .init_early     = omap4430_init_early,
        .init_irq       = gic_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = omap_4430sdp_init,
        .init_late      = omap4430_init_late,
-       .timer          = &omap4_timer,
+       .init_time      = omap4_local_timer_init,
        .restart        = omap44xx_restart,
  MACHINE_END
index 73be86852f6a80349a22a91fa2c0db76e2dfeeb2,8a5f814613c678b4b67b625395b4acf6fbad52f4..2590463e4b57d5729cc7e22ab9198c4c60464426
@@@ -16,6 -16,7 +16,6 @@@
  #include <linux/of_platform.h>
  #include <linux/irqdomain.h>
  
 -#include <asm/hardware/gic.h>
  #include <asm/mach/arch.h>
  
  #include "common.h"
@@@ -64,7 -65,7 +64,7 @@@ DT_MACHINE_START(OMAP242X_DT, "Generic 
        .init_irq       = omap_intc_of_init,
        .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = omap_generic_init,
-       .timer          = &omap2_timer,
+       .init_time      = omap2_sync32k_timer_init,
        .dt_compat      = omap242x_boards_compat,
        .restart        = omap2xxx_restart,
  MACHINE_END
@@@ -83,7 -84,7 +83,7 @@@ DT_MACHINE_START(OMAP243X_DT, "Generic 
        .init_irq       = omap_intc_of_init,
        .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = omap_generic_init,
-       .timer          = &omap2_timer,
+       .init_time      = omap2_sync32k_timer_init,
        .dt_compat      = omap243x_boards_compat,
        .restart        = omap2xxx_restart,
  MACHINE_END
@@@ -102,7 -103,7 +102,7 @@@ DT_MACHINE_START(OMAP3_DT, "Generic OMA
        .init_irq       = omap_intc_of_init,
        .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_generic_init,
-       .timer          = &omap3_timer,
+       .init_time      = omap3_sync32k_timer_init,
        .dt_compat      = omap3_boards_compat,
        .restart        = omap3xxx_restart,
  MACHINE_END
@@@ -119,7 -120,7 +119,7 @@@ DT_MACHINE_START(OMAP3_GP_DT, "Generic 
        .init_irq       = omap_intc_of_init,
        .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_generic_init,
-       .timer          = &omap3_secure_timer,
+       .init_time      = omap3_secure_sync32k_timer_init,
        .dt_compat      = omap3_gp_boards_compat,
        .restart        = omap3xxx_restart,
  MACHINE_END
@@@ -138,7 -139,7 +138,7 @@@ DT_MACHINE_START(AM33XX_DT, "Generic AM
        .init_irq       = omap_intc_of_init,
        .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_generic_init,
-       .timer          = &omap3_am33xx_timer,
+       .init_time      = omap3_am33xx_gptimer_timer_init,
        .dt_compat      = am33xx_boards_compat,
  MACHINE_END
  #endif
@@@ -155,9 -156,10 +155,9 @@@ DT_MACHINE_START(OMAP4_DT, "Generic OMA
        .map_io         = omap4_map_io,
        .init_early     = omap4430_init_early,
        .init_irq       = omap_gic_of_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = omap_generic_init,
        .init_late      = omap4430_init_late,
-       .timer          = &omap4_timer,
+       .init_time      = omap4_local_timer_init,
        .dt_compat      = omap4_boards_compat,
        .restart        = omap44xx_restart,
  MACHINE_END
@@@ -175,8 -177,9 +175,8 @@@ DT_MACHINE_START(OMAP5_DT, "Generic OMA
        .map_io         = omap5_map_io,
        .init_early     = omap5_init_early,
        .init_irq       = omap_gic_of_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = omap_generic_init,
-       .timer          = &omap5_timer,
+       .init_time      = omap5_realtime_timer_init,
        .dt_compat      = omap5_boards_compat,
        .restart        = omap44xx_restart,
  MACHINE_END
index 37495bc9a59c360eec5c33a2c77ffe52fe0c8378,ed8240c1a9b9597f3a3e8e154146bb9cea042680..22838fa44a607493467e9805a87b51aced1cf115
@@@ -31,9 -31,9 +31,9 @@@
  #include <linux/ti_wilink_st.h>
  #include <linux/usb/musb.h>
  #include <linux/wl12xx.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/omap-abe-twl6040.h>
  
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -453,8 -453,9 +453,8 @@@ MACHINE_START(OMAP4_PANDA, "OMAP4 Pand
        .map_io         = omap4_map_io,
        .init_early     = omap4430_init_early,
        .init_irq       = gic_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = omap4_panda_init,
        .init_late      = omap4430_init_late,
-       .timer          = &omap4_timer,
+       .init_time      = omap4_local_timer_init,
        .restart        = omap44xx_restart,
  MACHINE_END
index 35ee21443f032c15b32bfbcdf04720053114a039,518c59bdbcda584890cb9e2110d2cd63ceb4043a..70b441ad1d18b2d4d17b20344133c004820e752d
@@@ -9,7 -9,6 +9,7 @@@
   */
  #include <linux/delay.h>
  #include <linux/irq.h>
 +#include <linux/irqchip.h>
  #include <linux/irqdomain.h>
  #include <linux/of.h>
  #include <linux/of_address.h>
@@@ -18,6 -17,7 +18,6 @@@
  #include <linux/dw_apb_timer.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach/map.h>
  
  #include "common.h"
@@@ -70,6 -70,16 +70,6 @@@ static const char *picoxcell_dt_match[
        NULL
  };
  
 -static const struct of_device_id vic_of_match[] __initconst = {
 -      { .compatible = "arm,pl192-vic", .data = vic_of_init, },
 -      { /* Sentinel */ }
 -};
 -
 -static void __init picoxcell_init_irq(void)
 -{
 -      of_irq_init(vic_of_match);
 -}
 -
  static void picoxcell_wdt_restart(char mode, const char *cmd)
  {
        /*
@@@ -87,8 -97,9 +87,8 @@@
  DT_MACHINE_START(PICOXCELL, "Picochip picoXcell")
        .map_io         = picoxcell_map_io,
        .nr_irqs        = NR_IRQS_LEGACY,
 -      .init_irq       = picoxcell_init_irq,
 -      .handle_irq     = vic_handle_irq,
 +      .init_irq       = irqchip_init,
-       .timer          = &dw_apb_timer,
+       .init_time      = dw_apb_timer_init,
        .init_machine   = picoxcell_init_machine,
        .dt_compat      = picoxcell_dt_match,
        .restart        = picoxcell_wdt_restart,
index 728587c60770f9a3e78e0de2340879b791c68c00,f892862fd6aecbe2861eaa8b3fbfba74f7a9d3b7..5b1c8bfe6fa938e9c5413c4c556bad17db4cfe31
  #include <linux/amba/mmci.h>
  #include <linux/amba/pl022.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/clk-realview.h>
  
  #include <mach/hardware.h>
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  #include <asm/pgtable.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <asm/smp_twd.h>
  
@@@ -418,10 -418,6 +418,6 @@@ static void __init realview_eb_timer_in
        realview_eb_twd_init();
  }
  
- static struct sys_timer realview_eb_timer = {
-       .init           = realview_eb_timer_init,
- };
  static void realview_eb_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
@@@ -472,7 -468,8 +468,7 @@@ MACHINE_START(REALVIEW_EB, "ARM-RealVie
        .map_io         = realview_eb_map_io,
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
-       .timer          = &realview_eb_timer,
+       .init_time      = realview_eb_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_eb_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
index 3d116c44c0d483c3d0345c99a23bbbb925c0bf9b,6a4524b93fc6a91d584b676e0da0c79579444b36..d5e83a1f6982bc2251c28be72f1c1836a8891e7e
  #include <linux/mtd/physmap.h>
  #include <linux/mtd/partitions.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/clk-realview.h>
  
  #include <mach/hardware.h>
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  #include <asm/pgtable.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  
  #include <asm/mach/arch.h>
@@@ -329,10 -329,6 +329,6 @@@ static void __init realview_pb1176_time
        realview_timer_init(IRQ_DC1176_TIMER0);
  }
  
- static struct sys_timer realview_pb1176_timer = {
-       .init           = realview_pb1176_timer_init,
- };
  static void realview_pb1176_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
@@@ -384,7 -380,8 +380,7 @@@ MACHINE_START(REALVIEW_PB1176, "ARM-Rea
        .map_io         = realview_pb1176_map_io,
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
-       .timer          = &realview_pb1176_timer,
+       .init_time      = realview_pb1176_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pb1176_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
index e1b8efdf35b6a25eed91873c45d3d1359e2e9cc2,502f6e6c6913c984191ab1796c7c541648d15865..c3cfe213b5e66c2bf55294c389b98e0408423995
  #include <linux/amba/mmci.h>
  #include <linux/amba/pl022.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/clk-realview.h>
  
  #include <mach/hardware.h>
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  #include <asm/pgtable.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <asm/smp_twd.h>
  
@@@ -316,10 -316,6 +316,6 @@@ static void __init realview_pb11mp_time
        realview_pb11mp_twd_init();
  }
  
- static struct sys_timer realview_pb11mp_timer = {
-       .init           = realview_pb11mp_timer_init,
- };
  static void realview_pb11mp_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
@@@ -367,7 -363,8 +363,7 @@@ MACHINE_START(REALVIEW_PB11MP, "ARM-Rea
        .map_io         = realview_pb11mp_map_io,
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
-       .timer          = &realview_pb11mp_timer,
+       .init_time      = realview_pb11mp_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pb11mp_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
index 0b037f23b0f68fca500d4e2da21bfab177c4d8dd,85c81aaa05e897e2af8f7b2f29e2b34830bf4720..dde652a596202a80a35d11300c1343d4dbdf26e9
  #include <linux/amba/mmci.h>
  #include <linux/amba/pl022.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/clk-realview.h>
  
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  #include <asm/pgtable.h>
 -#include <asm/hardware/gic.h>
  
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -264,10 -264,6 +264,6 @@@ static void __init realview_pba8_timer_
        realview_timer_init(IRQ_PBA8_TIMER0_1);
  }
  
- static struct sys_timer realview_pba8_timer = {
-       .init           = realview_pba8_timer_init,
- };
  static void realview_pba8_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
@@@ -308,7 -304,8 +304,7 @@@ MACHINE_START(REALVIEW_PBA8, "ARM-RealV
        .map_io         = realview_pba8_map_io,
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
-       .timer          = &realview_pba8_timer,
+       .init_time      = realview_pba8_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pba8_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
index a1f1ef557c67e263c6437ac4695159033ccc69b2,a15a7b0be29b31e97fc10aec5d33dafc2431729b..54f0185b01e336ab9518a2b6e4cd130c879ccdef
  #include <linux/amba/mmci.h>
  #include <linux/amba/pl022.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/clk-realview.h>
  
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  #include <asm/smp_twd.h>
  #include <asm/pgtable.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  
  #include <asm/mach/arch.h>
@@@ -324,10 -324,6 +324,6 @@@ static void __init realview_pbx_timer_i
        realview_pbx_twd_init();
  }
  
- static struct sys_timer realview_pbx_timer = {
-       .init           = realview_pbx_timer_init,
- };
  static void realview_pbx_fixup(struct tag *tags, char **from,
                               struct meminfo *meminfo)
  {
@@@ -404,7 -400,8 +400,7 @@@ MACHINE_START(REALVIEW_PBX, "ARM-RealVi
        .map_io         = realview_pbx_map_io,
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
-       .timer          = &realview_pbx_timer,
+       .init_time      = realview_pbx_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pbx_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
index fa570c2e9381fa02b7d679d20cf42ce6079f1034,75cbc67f628e4d7e45fe6a7731b2d7be6f908bf5..afeae0b5bb28802c19a578545741857d5c13586b
@@@ -31,6 -31,7 +31,6 @@@
  #include <video/platform_lcd.h>
  #include <video/samsung_fimd.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/irq.h>
@@@ -229,9 -230,10 +229,9 @@@ MACHINE_START(ANW6410, "A&W6410"
        .atag_offset    = 0x100,
  
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = anw6410_map_io,
        .init_machine   = anw6410_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 3185f82a0c84507f0d997c1a33c47b675673f59c,87aab127dd60fdba4e417b9e03bb40be4cbf6061..5b6adc7f1d3916cecdd78961152f31287078fd17
@@@ -42,6 -42,7 +42,6 @@@
  
  #include <sound/wm1250-ev1.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach-types.h>
  
@@@ -170,7 -171,7 +170,7 @@@ static struct fb_videomode crag6410_lcd
  };
  
  /* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
 -static struct s3c_fb_platdata crag6410_lcd_pdata __devinitdata = {
 +static struct s3c_fb_platdata crag6410_lcd_pdata = {
        .setup_gpio     = s3c64xx_fb_gpio_setup_24bpp,
        .vtiming        = &crag6410_lcd_timing,
        .win[0]         = &crag6410_fb_win0,
  
  /* 2x6 keypad */
  
 -static uint32_t crag6410_keymap[] __devinitdata = {
 +static uint32_t crag6410_keymap[] = {
        /* KEY(row, col, keycode) */
        KEY(0, 0, KEY_VOLUMEUP),
        KEY(0, 1, KEY_HOME),
        KEY(1, 5, KEY_CAMERA),
  };
  
 -static struct matrix_keymap_data crag6410_keymap_data __devinitdata = {
 +static struct matrix_keymap_data crag6410_keymap_data = {
        .keymap         = crag6410_keymap,
        .keymap_size    = ARRAY_SIZE(crag6410_keymap),
  };
  
 -static struct samsung_keypad_platdata crag6410_keypad_data __devinitdata = {
 +static struct samsung_keypad_platdata crag6410_keypad_data = {
        .keymap_data    = &crag6410_keymap_data,
        .rows           = 2,
        .cols           = 6,
@@@ -406,11 -407,11 +406,11 @@@ static struct wm831x_buckv_pdata vddarm
        .dvs_gpio = S3C64XX_GPK(0),
  };
  
 -static struct regulator_consumer_supply vddarm_consumers[] __devinitdata = {
 +static struct regulator_consumer_supply vddarm_consumers[] = {
        REGULATOR_SUPPLY("vddarm", NULL),
  };
  
 -static struct regulator_init_data vddarm __devinitdata = {
 +static struct regulator_init_data vddarm = {
        .constraints = {
                .name = "VDDARM",
                .min_uV = 1000000,
        .driver_data = &vddarm_pdata,
  };
  
 -static struct regulator_consumer_supply vddint_consumers[] __devinitdata = {
 +static struct regulator_consumer_supply vddint_consumers[] = {
        REGULATOR_SUPPLY("vddint", NULL),
  };
  
 -static struct regulator_init_data vddint __devinitdata = {
 +static struct regulator_init_data vddint = {
        .constraints = {
                .name = "VDDINT",
                .min_uV = 1000000,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddmem __devinitdata = {
 +static struct regulator_init_data vddmem = {
        .constraints = {
                .name = "VDDMEM",
                .always_on = 1,
        },
  };
  
 -static struct regulator_init_data vddsys __devinitdata = {
 +static struct regulator_init_data vddsys = {
        .constraints = {
                .name = "VDDSYS,VDDEXT,VDDPCM,VDDSS",
                .always_on = 1,
        },
  };
  
 -static struct regulator_consumer_supply vddmmc_consumers[] __devinitdata = {
 +static struct regulator_consumer_supply vddmmc_consumers[] = {
        REGULATOR_SUPPLY("vmmc", "s3c-sdhci.0"),
        REGULATOR_SUPPLY("vmmc", "s3c-sdhci.1"),
        REGULATOR_SUPPLY("vmmc", "s3c-sdhci.2"),
  };
  
 -static struct regulator_init_data vddmmc __devinitdata = {
 +static struct regulator_init_data vddmmc = {
        .constraints = {
                .name = "VDDMMC,UH",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddotgi __devinitdata = {
 +static struct regulator_init_data vddotgi = {
        .constraints = {
                .name = "VDDOTGi",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddotg __devinitdata = {
 +static struct regulator_init_data vddotg = {
        .constraints = {
                .name = "VDDOTG",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddhi __devinitdata = {
 +static struct regulator_init_data vddhi = {
        .constraints = {
                .name = "VDDHI",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddadc __devinitdata = {
 +static struct regulator_init_data vddadc = {
        .constraints = {
                .name = "VDDADC,VDDDAC",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddmem0 __devinitdata = {
 +static struct regulator_init_data vddmem0 = {
        .constraints = {
                .name = "VDDMEM0",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddpll __devinitdata = {
 +static struct regulator_init_data vddpll = {
        .constraints = {
                .name = "VDDPLL",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddlcd __devinitdata = {
 +static struct regulator_init_data vddlcd = {
        .constraints = {
                .name = "VDDLCD",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct regulator_init_data vddalive __devinitdata = {
 +static struct regulator_init_data vddalive = {
        .constraints = {
                .name = "VDDALIVE",
                .always_on = 1,
        .supply_regulator = "WALLVDD",
  };
  
 -static struct wm831x_backup_pdata banff_backup_pdata __devinitdata = {
 +static struct wm831x_backup_pdata banff_backup_pdata = {
        .charger_enable = 1,
        .vlim = 2500,  /* mV */
        .ilim = 200,   /* uA */
  };
  
 -static struct wm831x_status_pdata banff_red_led __devinitdata = {
 +static struct wm831x_status_pdata banff_red_led = {
        .name = "banff:red:",
        .default_src = WM831X_STATUS_MANUAL,
  };
  
 -static struct wm831x_status_pdata banff_green_led __devinitdata = {
 +static struct wm831x_status_pdata banff_green_led = {
        .name = "banff:green:",
        .default_src = WM831X_STATUS_MANUAL,
  };
  
 -static struct wm831x_touch_pdata touch_pdata __devinitdata = {
 +static struct wm831x_touch_pdata touch_pdata = {
        .data_irq = S3C_EINT(26),
        .pd_irq = S3C_EINT(27),
  };
  
 -static struct wm831x_pdata crag_pmic_pdata __devinitdata = {
 +static struct wm831x_pdata crag_pmic_pdata = {
        .wm831x_num = 1,
        .gpio_base = BANFF_PMIC_GPIO_BASE,
        .soft_shutdown = true,
        .touch = &touch_pdata,
  };
  
 -static struct i2c_board_info i2c_devs0[] __devinitdata = {
 +static struct i2c_board_info i2c_devs0[] = {
        { I2C_BOARD_INFO("24c08", 0x50), },
        { I2C_BOARD_INFO("tca6408", 0x20),
          .platform_data = &crag6410_pca_data,
@@@ -615,13 -616,13 +615,13 @@@ static struct s3c2410_platform_i2c i2c0
        .frequency = 400000,
  };
  
 -static struct regulator_consumer_supply pvdd_1v2_consumers[] __devinitdata = {
 +static struct regulator_consumer_supply pvdd_1v2_consumers[] = {
        REGULATOR_SUPPLY("DCVDD", "spi0.0"),
        REGULATOR_SUPPLY("AVDD", "spi0.0"),
        REGULATOR_SUPPLY("AVDD", "spi0.1"),
  };
  
 -static struct regulator_init_data pvdd_1v2 __devinitdata = {
 +static struct regulator_init_data pvdd_1v2 = {
        .constraints = {
                .name = "PVDD_1V2",
                .valid_ops_mask = REGULATOR_CHANGE_STATUS,
        .num_consumer_supplies = ARRAY_SIZE(pvdd_1v2_consumers),
  };
  
 -static struct regulator_consumer_supply pvdd_1v8_consumers[] __devinitdata = {
 +static struct regulator_consumer_supply pvdd_1v8_consumers[] = {
        REGULATOR_SUPPLY("LDOVDD", "1-001a"),
        REGULATOR_SUPPLY("PLLVDD", "1-001a"),
        REGULATOR_SUPPLY("DBVDD", "1-001a"),
        REGULATOR_SUPPLY("CPVDD", "wm5110-codec"),
  };
  
 -static struct regulator_init_data pvdd_1v8 __devinitdata = {
 +static struct regulator_init_data pvdd_1v8 = {
        .constraints = {
                .name = "PVDD_1V8",
                .always_on = 1,
        .num_consumer_supplies = ARRAY_SIZE(pvdd_1v8_consumers),
  };
  
 -static struct regulator_consumer_supply pvdd_3v3_consumers[] __devinitdata = {
 +static struct regulator_consumer_supply pvdd_3v3_consumers[] = {
        REGULATOR_SUPPLY("MICVDD", "1-001a"),
        REGULATOR_SUPPLY("AVDD1", "1-001a"),
  };
  
 -static struct regulator_init_data pvdd_3v3 __devinitdata = {
 +static struct regulator_init_data pvdd_3v3 = {
        .constraints = {
                .name = "PVDD_3V3",
                .always_on = 1,
        .num_consumer_supplies = ARRAY_SIZE(pvdd_3v3_consumers),
  };
  
 -static struct wm831x_pdata glenfarclas_pmic_pdata __devinitdata = {
 +static struct wm831x_pdata glenfarclas_pmic_pdata = {
        .wm831x_num = 2,
        .irq_base = GLENFARCLAS_PMIC_IRQ_BASE,
        .gpio_base = GLENFARCLAS_PMIC_GPIO_BASE,
@@@ -720,7 -721,7 +720,7 @@@ static struct wm1250_ev1_pdata wm1250_e
        },
  };
  
 -static struct i2c_board_info i2c_devs1[] __devinitdata = {
 +static struct i2c_board_info i2c_devs1[] = {
        { I2C_BOARD_INFO("wm8311", 0x34),
          .irq = S3C_EINT(0),
          .platform_data = &glenfarclas_pmic_pdata },
@@@ -866,9 -867,10 +866,9 @@@ MACHINE_START(WLF_CRAGG_6410, "Wolfson 
        /* Maintainer: Mark Brown <broonie@opensource.wolfsonmicro.com> */
        .atag_offset    = 0x100,
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = crag6410_map_io,
        .init_machine   = crag6410_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 2c81bf15f02bc49cdc49d7c1837f7f4047b45020,7e8605d981421a4beb9590fab73daf2e2f1aa771..7212eb9cfeb9f255f5581b485a2f34eb4afd0261
@@@ -30,6 -30,7 +30,6 @@@
  #include <mach/hardware.h>
  #include <mach/map.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  
@@@ -272,9 -273,10 +272,9 @@@ MACHINE_START(HMT, "Airgoo-HMT"
        /* Maintainer: Peter Korsgaard <jacmet@sunsite.dk> */
        .atag_offset    = 0x100,
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = hmt_map_io,
        .init_machine   = hmt_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 3f1e0102f09c51382e5359438fec07aa8f9e4566,4f8dc7dff92bc112b20281fe23fc1bca89f27404..e173e6e982288d007f27d079f1fbec7f1e17c0a8
@@@ -24,6 -24,7 +24,6 @@@
  #include <linux/serial_core.h>
  #include <linux/types.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -351,9 -352,10 +351,9 @@@ MACHINE_START(MINI6410, "MINI6410"
        /* Maintainer: Darius Augulis <augulis.darius@gmail.com> */
        .atag_offset    = 0x100,
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = mini6410_map_io,
        .init_machine   = mini6410_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 73caf9fdf5f7273c60c5c853788217a8c500c8f2,cdd7f947376c49b6c58cb84b7a71a4d72bfdb877..8d3cedd995ffd43a88c1398cff7ce5ddaa33bbb9
@@@ -26,6 -26,7 +26,6 @@@
  #include <video/platform_lcd.h>
  #include <video/samsung_fimd.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/irq.h>
@@@ -100,9 -101,10 +100,9 @@@ MACHINE_START(NCP, "NCP"
        /* Maintainer: Samsung Electronics */
        .atag_offset    = 0x100,
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = ncp_map_io,
        .init_machine   = ncp_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 4f8129d09ba718879709922b9b13ef6352af4d89,b0f61982ef565ee7425bf3a9f806d546290b3307..4d0d47a66930547e03b3bef6fc78a8ca577f70af
@@@ -25,6 -25,7 +25,6 @@@
  #include <linux/serial_core.h>
  #include <linux/types.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -330,9 -331,10 +330,9 @@@ MACHINE_START(REAL6410, "REAL6410"
        .atag_offset    = 0x100,
  
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = real6410_map_io,
        .init_machine   = real6410_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 323399b3d110690e864193940631a0d8997a7f22,7a737614717eb7e5464de8b27e63482a90a6c40e..ca2afcfce57391f29721325229246895002823ed
@@@ -17,6 -17,7 +17,6 @@@
  #include <linux/leds.h>
  #include <linux/platform_device.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -152,9 -153,10 +152,9 @@@ MACHINE_START(SMARTQ5, "SmartQ 5"
        /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */
        .atag_offset    = 0x100,
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smartq_map_io,
        .init_machine   = smartq5_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 9077b85785ca66fd081184b6e429e2194063ce1f,889d525325c85a369e512034f8828955973ae336..37bb0c632a5efe1043b2473d053be656b0d38d73
@@@ -17,6 -17,7 +17,6 @@@
  #include <linux/leds.h>
  #include <linux/platform_device.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -168,9 -169,10 +168,9 @@@ MACHINE_START(SMARTQ7, "SmartQ 7"
        /* Maintainer: Maurus Cuelenaere <mcuelenaere AT gmail DOT com> */
        .atag_offset    = 0x100,
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smartq_map_io,
        .init_machine   = smartq7_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index 7df76e482b41c8e8fe1d56c8db6619ca9c3e035e,e31fe5bb37b6153ecbcd931032a1d42282e5a509..a392869c834262360ec0ce5a51abffca27977bc4
@@@ -22,6 -22,7 +22,6 @@@
  
  #include <asm/mach-types.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/irq.h>
@@@ -89,9 -90,10 +89,9 @@@ MACHINE_START(SMDK6400, "SMDK6400"
        .atag_offset    = 0x100,
  
        .init_irq       = s3c6400_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdk6400_map_io,
        .init_machine   = smdk6400_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index ad5142ab77568bb9c921bf2d4d37c732a8157e45,f1b87cd9cb0e2dbb66752db0ad5f5010d8ec1ff9..1663d10ba02a5324cbfe05d7ae87af16d4303519
@@@ -45,6 -45,7 +45,6 @@@
  #include <video/platform_lcd.h>
  #include <video/samsung_fimd.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/irq.h>
@@@ -699,9 -700,10 +699,9 @@@ MACHINE_START(SMDK6410, "SMDK6410"
        .atag_offset    = 0x100,
  
        .init_irq       = s3c6410_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdk6410_map_io,
        .init_machine   = smdk6410_machine_init,
        .init_late      = s3c64xx_init_late,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s3c64xx_restart,
  MACHINE_END
index e2419296a9e23ae87f6b3a0789e16d6f5c55d4ff,0a3146dc081a3b45eb48afc6515316b5836b76f4..a40d5eb381241041049432496dcb185ef84a485f
@@@ -29,6 -29,7 +29,6 @@@
  #include <video/platform_lcd.h>
  #include <video/samsung_fimd.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/irq.h>
@@@ -271,8 -272,9 +271,8 @@@ MACHINE_START(SMDK6440, "SMDK6440"
        .atag_offset    = 0x100,
  
        .init_irq       = s5p6440_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdk6440_map_io,
        .init_machine   = smdk6440_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .restart        = s5p64x0_restart,
  MACHINE_END
index 999273107fa9034a6c14e3cf9d968ea0aac08e64,36917f2ea25afea6d5f2c798fffedfee8c1e0ed1..703e576a26e0d7ac082a218fdb9163b1e1d4e2fb
@@@ -29,6 -29,7 +29,6 @@@
  #include <video/platform_lcd.h>
  #include <video/samsung_fimd.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/irq.h>
@@@ -290,8 -291,9 +290,8 @@@ MACHINE_START(SMDK6450, "SMDK6450"
        .atag_offset    = 0x100,
  
        .init_irq       = s5p6450_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdk6450_map_io,
        .init_machine   = smdk6450_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .restart        = s5p64x0_restart,
  MACHINE_END
index c3f30953df212c0442ed6b52a9192a681361a6fb,39a9197d17468bd8e43fc0ab52a5964714733d61..185a19583898dc3221d0fa69122a96a21a9d0a6b
@@@ -25,6 -25,7 +25,6 @@@
  #include <linux/input.h>
  #include <linux/pwm_backlight.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  
@@@ -253,8 -254,9 +253,8 @@@ MACHINE_START(SMDKC100, "SMDKC100"
        /* Maintainer: Byungho Min <bhmin@samsung.com> */
        .atag_offset    = 0x100,
        .init_irq       = s5pc100_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdkc100_map_io,
        .init_machine   = smdkc100_machine_init,
-       .timer          = &s3c24xx_timer,
+       .init_time      = s3c24xx_timer_init,
        .restart        = s5pc100_restart,
  MACHINE_END
index 45eb0a8244c4086cafbb95491fd6bda40f186504,1fb44a5ebb83d07ee059134de888eec68778f29c..11900a8e88a3369daba6dd5a5e64f94a9adb7319
@@@ -22,6 -22,7 +22,6 @@@
  #include <linux/input.h>
  #include <linux/gpio.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/setup.h>
@@@ -684,8 -685,9 +684,8 @@@ MACHINE_START(AQUILA, "Aquila"
           Kyungmin Park <kyungmin.park@samsung.com> */
        .atag_offset    = 0x100,
        .init_irq       = s5pv210_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = aquila_map_io,
        .init_machine   = aquila_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .restart        = s5pv210_restart,
  MACHINE_END
index 9f7f1607c5474af66fb6a2c7bdfef098f73b172f,ababdca2b3e416d4b446c4a2db5d43e5a8b7a562..5704815917466bda61ffcda940aefd213bf78829
@@@ -29,6 -29,7 +29,6 @@@
  #include <linux/interrupt.h>
  #include <linux/platform_data/s3c-hsotg.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/setup.h>
@@@ -971,9 -972,10 +971,9 @@@ MACHINE_START(GONI, "GONI"
        /* Maintainers: Kyungmin Park <kyungmin.park@samsung.com> */
        .atag_offset    = 0x100,
        .init_irq       = s5pv210_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = goni_map_io,
        .init_machine   = goni_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .reserve        = &goni_reserve,
        .restart        = s5pv210_restart,
  MACHINE_END
index 2f152f919769e8bd90edfc5c5fa98ac785398699,acfb0ebce13b18574a96aaa0f2a29f86f11e9a60..28bd0248a3e2ec57be4499bfa517d0fd5271e0b4
@@@ -15,6 -15,7 +15,6 @@@
  #include <linux/i2c.h>
  #include <linux/device.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/setup.h>
@@@ -151,9 -152,10 +151,9 @@@ MACHINE_START(SMDKC110, "SMDKC110"
        /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
        .atag_offset    = 0x100,
        .init_irq       = s5pv210_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdkc110_map_io,
        .init_machine   = smdkc110_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .restart        = s5pv210_restart,
        .reserve        = &smdkc110_reserve,
  MACHINE_END
index 721967bc3927c7df9336ef7e1b61b10d68d1f6b8,e1d820f3b4269f123b198a94f74163e1db2bd346..3c73f36869bbab37d49134882f3f1cb8f9758f08
@@@ -21,6 -21,7 +21,6 @@@
  #include <linux/pwm_backlight.h>
  #include <linux/platform_data/s3c-hsotg.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/setup.h>
@@@ -327,9 -328,10 +327,9 @@@ MACHINE_START(SMDKV210, "SMDKV210"
        /* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
        .atag_offset    = 0x100,
        .init_irq       = s5pv210_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = smdkv210_map_io,
        .init_machine   = smdkv210_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .restart        = s5pv210_restart,
        .reserve        = &smdkv210_reserve,
  MACHINE_END
index 0ed270f8b0a831369fb8a8c7269bbeba69722469,1e6fc6eccdf32107d87a490620b5e6be87169833..2d4c5531819c06d7038149f0e872fa1b3a16a79d
@@@ -14,6 -14,7 +14,6 @@@
  #include <linux/init.h>
  #include <linux/serial_core.h>
  
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/setup.h>
@@@ -128,8 -129,9 +128,8 @@@ MACHINE_START(TORBRECK, "TORBRECK"
        /* Maintainer: Hyunchul Ko <ghcstop@gmail.com> */
        .atag_offset    = 0x100,
        .init_irq       = s5pv210_init_irq,
 -      .handle_irq     = vic_handle_irq,
        .map_io         = torbreck_map_io,
        .init_machine   = torbreck_machine_init,
-       .timer          = &s5p_timer,
+       .init_time      = s5p_timer_init,
        .restart        = s5pv210_restart,
  MACHINE_END
index fd28358e2abea007dcf267eea8517dd2981b1f9d,d81a66362b7cf97a4b629ca2ac84b8d4731ece79..705bc63c7984fcdd0c96de9c64e3cc9d210a3817
@@@ -40,7 -40,6 +40,7 @@@
  #include <linux/mmc/sh_mobile_sdhi.h>
  #include <linux/mfd/tmio.h>
  #include <linux/sh_clk.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <video/sh_mobile_lcdc.h>
  #include <video/sh_mipi_dsi.h>
  #include <sound/sh_fsi.h>
@@@ -50,6 -49,7 +50,6 @@@
  #include <mach/common.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <asm/traps.h>
  
@@@ -668,7 -668,8 +668,7 @@@ MACHINE_START(AG5EVM, "ag5evm"
        .init_early     = sh73a0_add_early_devices,
        .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = sh73a0_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = ag5evm_init,
        .init_late      = shmobile_init_late,
-       .timer          = &shmobile_timer,
+       .init_time      = sh73a0_earlytimer_init,
  MACHINE_END
index a1d315fc329a397d030edb8a7e59e78d31576651,2f24994f2ef84eb6b67662c2664ac9c6a4e1d8b0..d759a9c2b9e83fc3a6c9d2b1f86602239472f8cc
@@@ -35,7 -35,6 +35,7 @@@
  #include <linux/input/sh_keysc.h>
  #include <linux/gpio_keys.h>
  #include <linux/leds.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/platform_data/leds-renesas-tpu.h>
  #include <linux/mmc/host.h>
  #include <linux/mmc/sh_mmcif.h>
@@@ -48,6 -47,7 +48,6 @@@
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <asm/traps.h>
  
@@@ -550,7 -550,8 +550,7 @@@ MACHINE_START(KOTA2, "kota2"
        .init_early     = sh73a0_add_early_devices,
        .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = sh73a0_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = kota2_init,
        .init_late      = shmobile_init_late,
-       .timer          = &shmobile_timer,
+       .init_time      = sh73a0_earlytimer_init,
  MACHINE_END
index f3f180dc23e50c5b4f33a29634f4fbc40e8e42b7,59be864f599242d4c667ee6c1dc39a044441cf92..c254782aa7276c59297273ab6c7d40ede2a15097
@@@ -28,6 -28,7 +28,6 @@@
  #include <mach/emev2.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  /* Dummy supplies, where voltage doesn't matter */
  static struct regulator_consumer_supply dummy_supplies[] = {
@@@ -88,8 -89,9 +88,8 @@@ DT_MACHINE_START(KZM9D_DT, "kzm9d"
        .init_early     = emev2_add_early_devices,
        .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = emev2_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = kzm9d_add_standard_devices,
        .init_late      = shmobile_init_late,
-       .timer          = &shmobile_timer,
+       .init_time      = shmobile_timer_init,
        .dt_compat      = kzm9d_boards_compat_dt,
  MACHINE_END
index 278c8f26f22e6a5f4dceb65d5e9e0c5257b9c9ff,adb23ef5112136c3bdae378ec94d2b0153c8704a..ac9428530d7b5254b30ad33e9b81e1dd458e47c6
@@@ -25,7 -25,6 +25,7 @@@
  #include <linux/i2c.h>
  #include <linux/i2c/pcf857x.h>
  #include <linux/input.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <linux/mmc/host.h>
  #include <linux/mmc/sh_mmcif.h>
  #include <linux/mmc/sh_mobile_sdhi.h>
@@@ -43,6 -42,7 +43,6 @@@
  #include <mach/sh73a0.h>
  #include <mach/common.h>
  #include <asm/hardware/cache-l2x0.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <video/sh_mobile_lcdc.h>
@@@ -792,9 -792,10 +792,9 @@@ DT_MACHINE_START(KZM9G_DT, "kzm9g"
        .init_early     = sh73a0_add_early_devices,
        .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = sh73a0_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = kzm_init,
        .init_late      = shmobile_init_late,
-       .timer          = &shmobile_timer,
+       .init_time      = sh73a0_earlytimer_init,
        .restart        = kzm9g_restart,
        .dt_compat      = kzm9g_boards_compat_dt,
  MACHINE_END
index fad8db103e9ca6e4c2bb2e5a44cf157e1d0536d4,ca45a0c50afe4de0326dcd0a259ea4dde57b792a..cdcb799e802f0e2e5bcdaeaf42e50107a18b0197
@@@ -44,6 -44,7 +44,6 @@@
  #include <mach/irqs.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  #include <asm/traps.h>
  
  /* Fixed 3.3V regulator to be used by SDHI0 */
@@@ -381,7 -382,8 +381,7 @@@ MACHINE_START(MARZEN, "marzen"
        .init_early     = r8a7779_add_early_devices,
        .nr_irqs        = NR_IRQS_LEGACY,
        .init_irq       = r8a7779_init_irq,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = marzen_init,
        .init_late      = marzen_init_late,
-       .timer          = &shmobile_timer,
+       .init_time      = r8a7779_earlytimer_init,
  MACHINE_END
index 646d61b22153d6ae8abbc0485c79b82dc553614b,ea61cb657ac3aa275285d37765fabcec393052bd..47662a581c0a59d172529f06970b4e2ecb271e3d
  #include <linux/init.h>
  #include <linux/interrupt.h>
  #include <linux/irq.h>
 +#include <linux/irqchip.h>
  #include <linux/platform_device.h>
  #include <linux/platform_data/gpio-em.h>
  #include <linux/of_platform.h>
  #include <linux/delay.h>
  #include <linux/input.h>
  #include <linux/io.h>
 -#include <linux/of_irq.h>
 +#include <linux/irqchip/arm-gic.h>
  #include <mach/hardware.h>
  #include <mach/common.h>
  #include <mach/emev2.h>
@@@ -36,6 -35,7 +36,6 @@@
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <asm/mach/time.h>
 -#include <asm/hardware/gic.h>
  
  static struct map_desc emev2_io_desc[] __initdata = {
  #ifdef CONFIG_SMP
@@@ -445,18 -445,29 +445,18 @@@ void __init emev2_add_standard_devices_
                             emev2_auxdata_lookup, NULL);
  }
  
 -static const struct of_device_id emev2_dt_irq_match[] = {
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      {},
 -};
 -
  static const char *emev2_boards_compat_dt[] __initdata = {
        "renesas,emev2",
        NULL,
  };
  
 -void __init emev2_init_irq_dt(void)
 -{
 -      of_irq_init(emev2_dt_irq_match);
 -}
 -
  DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)")
        .smp            = smp_ops(emev2_smp_ops),
        .init_early     = emev2_init_delay,
        .nr_irqs        = NR_IRQS_LEGACY,
 -      .init_irq       = emev2_init_irq_dt,
 -      .handle_irq     = gic_handle_irq,
 +      .init_irq       = irqchip_init,
        .init_machine   = emev2_add_standard_devices_dt,
-       .timer          = &shmobile_timer,
+       .init_time      = shmobile_timer_init,
        .dt_compat      = emev2_boards_compat_dt,
  MACHINE_END
  
index 7d55febf23688a336a600d351e7ac050f39dd881,b54baea5f809ebe69b32cdd95f73c8aa38bd48d9..27d68468a027b85aaebccc6fc6b9833baa8b4960
   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
   */
  #include <linux/dw_apb_timer.h>
 +#include <linux/irqchip.h>
  #include <linux/of_address.h>
  #include <linux/of_irq.h>
  #include <linux/of_platform.h>
  
  #include <asm/hardware/cache-l2x0.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  
@@@ -62,6 -62,11 +62,6 @@@ static void __init socfpga_map_io(void
        early_printk("Early printk initialized\n");
  }
  
 -const static struct of_device_id irq_match[] = {
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      {}
 -};
 -
  void __init socfpga_sysmgr_init(void)
  {
        struct device_node *np;
@@@ -73,9 -78,9 +73,9 @@@
        rst_manager_base_addr = of_iomap(np, 0);
  }
  
 -static void __init gic_init_irq(void)
 +static void __init socfpga_init_irq(void)
  {
 -      of_irq_init(irq_match);
 +      irqchip_init();
        socfpga_sysmgr_init();
  }
  
@@@ -100,8 -105,9 +100,8 @@@ static const char *altera_dt_match[] = 
  DT_MACHINE_START(SOCFPGA, "Altera SOCFPGA")
        .smp            = smp_ops(socfpga_smp_ops),
        .map_io         = socfpga_map_io,
 -      .init_irq       = gic_init_irq,
 -      .handle_irq     = gic_handle_irq,
 +      .init_irq       = socfpga_init_irq,
-       .timer          = &dw_apb_timer,
+       .init_time      = dw_apb_timer_init,
        .init_machine   = socfpga_cyclone5_init,
        .restart        = socfpga_cyclone5_restart,
        .dt_compat      = altera_dt_match,
index 510dec7982214b2ccfa2006b71028ddb5035c4e3,35e8a00746397a665ba9c7f755f3f0483ad4449a..633e678e01a3231c2480ee0756e8d95150f08345
@@@ -18,7 -18,7 +18,7 @@@
  #include <asm/mach/time.h>
  
  /* Add spear13xx structure declarations here */
- extern struct sys_timer spear13xx_timer;
+ extern void spear13xx_timer_init(void);
  extern struct pl022_ssp_controller pl022_plat_data;
  extern struct dw_dma_platform_data dmac_plat_data;
  extern struct dw_dma_slave cf_dma_priv;
@@@ -28,6 -28,7 +28,6 @@@ extern struct dw_dma_slave nand_write_d
  /* Add spear13xx family function declarations here */
  void __init spear_setup_of_timer(void);
  void __init spear13xx_map_io(void);
 -void __init spear13xx_dt_init_irq(void);
  void __init spear13xx_l2x0_init(void);
  bool dw_dma_filter(struct dma_chan *chan, void *slave);
  void spear_restart(char, const char *);
index 5de3e6f24aad4f6fb649e5272d78a761ee665d07,e77d05d480827be039ce6e1b83957725d1e73783..56214d1076ef6ff092e3ca9d427c217f539fd8cc
@@@ -14,9 -14,9 +14,9 @@@
  #define pr_fmt(fmt) "SPEAr1310: " fmt
  
  #include <linux/amba/pl022.h>
 +#include <linux/irqchip.h>
  #include <linux/of_platform.h>
  #include <linux/pata_arasan_cf_data.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  #include <mach/generic.h>
@@@ -90,8 -90,9 +90,8 @@@ static void __init spear1310_map_io(voi
  DT_MACHINE_START(SPEAR1310_DT, "ST SPEAr1310 SoC with Flattened Device Tree")
        .smp            =       smp_ops(spear13xx_smp_ops),
        .map_io         =       spear1310_map_io,
 -      .init_irq       =       spear13xx_dt_init_irq,
 -      .handle_irq     =       gic_handle_irq,
 +      .init_irq       =       irqchip_init,
-       .timer          =       &spear13xx_timer,
+       .init_time      =       spear13xx_timer_init,
        .init_machine   =       spear1310_dt_init,
        .restart        =       spear_restart,
        .dt_compat      =       spear1310_dt_board_compat,
index 18331deaed76f7480d6886f440f07c85952b44cb,ebc254779069040f646449d3d770c99f175c4400..9a28beb2a11393634aa3a41016acc36d95c54618
@@@ -18,7 -18,7 +18,7 @@@
  #include <linux/delay.h>
  #include <linux/dw_dmac.h>
  #include <linux/of_platform.h>
 -#include <asm/hardware/gic.h>
 +#include <linux/irqchip.h>
  #include <asm/mach/arch.h>
  #include <mach/dma.h>
  #include <mach/generic.h>
@@@ -184,8 -184,9 +184,8 @@@ static const char * const spear1340_dt_
  DT_MACHINE_START(SPEAR1340_DT, "ST SPEAr1340 SoC with Flattened Device Tree")
        .smp            =       smp_ops(spear13xx_smp_ops),
        .map_io         =       spear13xx_map_io,
 -      .init_irq       =       spear13xx_dt_init_irq,
 -      .handle_irq     =       gic_handle_irq,
 +      .init_irq       =       irqchip_init,
-       .timer          =       &spear13xx_timer,
+       .init_time      =       spear13xx_timer_init,
        .init_machine   =       spear1340_dt_init,
        .restart        =       spear_restart,
        .dt_compat      =       spear1340_dt_board_compat,
index 22e3cd57e7504c8a627bbf9c753334d4ed67e3d1,7f7acf775f07f5521cb44cb90419bd6fa25274e2..c7d2b4a8d8cc8dade91873b7a137656395b40051
@@@ -17,8 -17,9 +17,8 @@@
  #include <linux/clk.h>
  #include <linux/dw_dmac.h>
  #include <linux/err.h>
 -#include <linux/of_irq.h>
 +#include <linux/of.h>
  #include <asm/hardware/cache-l2x0.h>
 -#include <asm/hardware/gic.h>
  #include <asm/mach/map.h>
  #include <asm/smp_twd.h>
  #include <mach/dma.h>
@@@ -152,7 -153,7 +152,7 @@@ static void __init spear13xx_clk_init(v
                pr_err("%s: Unknown machine\n", __func__);
  }
  
static void __init spear13xx_timer_init(void)
+ void __init spear13xx_timer_init(void)
  {
        char pclk_name[] = "osc_24m_clk";
        struct clk *gpt_clk, *pclk;
        spear_setup_of_timer();
        twd_local_timer_of_register();
  }
--
- struct sys_timer spear13xx_timer = {
-       .init = spear13xx_timer_init,
 -static const struct of_device_id gic_of_match[] __initconst = {
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init },
 -      { /* Sentinel */ }
--};
 -
 -void __init spear13xx_dt_init_irq(void)
 -{
 -      of_irq_init(gic_of_match);
 -}
index c26b7a4b11264ec56aeaaa2dd76e26578e812d11,46b8f7e4d380012a61e26e0414f4f601e3059df8..df310799e4166d5f78178202beb101575274136d
@@@ -22,7 -22,7 +22,7 @@@
  #include <asm/mach/map.h>
  
  /* Add spear3xx family device structure declarations here */
- extern struct sys_timer spear3xx_timer;
+ extern void spear3xx_timer_init(void);
  extern struct pl022_ssp_controller pl022_plat_data;
  extern struct pl08x_platform_data pl080_plat_data;
  
@@@ -30,6 -30,7 +30,6 @@@
  void __init spear_setup_of_timer(void);
  void __init spear3xx_clk_init(void);
  void __init spear3xx_map_io(void);
 -void __init spear3xx_dt_init_irq(void);
  
  void spear_restart(char, const char *);
  
index 499479bbbaf9a3c683420fb73161ceaa2acb2ad0,2630efa93f5ed56babfe7715275b8497868f5d70..bbc9b7e9c62c39bca8753f225a5ecb450783a6a6
@@@ -14,8 -14,8 +14,8 @@@
  #define pr_fmt(fmt) "SPEAr300: " fmt
  
  #include <linux/amba/pl08x.h>
 +#include <linux/irqchip.h>
  #include <linux/of_platform.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <mach/generic.h>
  #include <mach/spear.h>
@@@ -212,8 -212,9 +212,8 @@@ static void __init spear300_map_io(void
  
  DT_MACHINE_START(SPEAR300_DT, "ST SPEAr300 SoC with Flattened Device Tree")
        .map_io         =       spear300_map_io,
 -      .init_irq       =       spear3xx_dt_init_irq,
 -      .handle_irq     =       vic_handle_irq,
 +      .init_irq       =       irqchip_init,
-       .timer          =       &spear3xx_timer,
+       .init_time      =       spear3xx_timer_init,
        .init_machine   =       spear300_dt_init,
        .restart        =       spear_restart,
        .dt_compat      =       spear300_dt_board_compat,
index 367d9be40ec12df2b573071834ae8babde13c59f,b6147eaebcde8a46cf803a79b69d48792bb862f7..c13a434a81959309b59f0ce3919f2704aa371063
@@@ -15,8 -15,8 +15,8 @@@
  
  #include <linux/amba/pl08x.h>
  #include <linux/amba/serial.h>
 +#include <linux/irqchip.h>
  #include <linux/of_platform.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <mach/generic.h>
  #include <mach/spear.h>
@@@ -254,8 -254,9 +254,8 @@@ static void __init spear310_map_io(void
  
  DT_MACHINE_START(SPEAR310_DT, "ST SPEAr310 SoC with Flattened Device Tree")
        .map_io         =       spear310_map_io,
 -      .init_irq       =       spear3xx_dt_init_irq,
 -      .handle_irq     =       vic_handle_irq,
 +      .init_irq       =       irqchip_init,
-       .timer          =       &spear3xx_timer,
+       .init_time      =       spear3xx_timer_init,
        .init_machine   =       spear310_dt_init,
        .restart        =       spear_restart,
        .dt_compat      =       spear310_dt_board_compat,
index 34c212e6cbf6b0abc91050927d0ed6ec4bdbe53e,53160f713afe72f7d4a7f3f1765eb793931817f1..e1c77079a3e52f8805bd0c9ad5a3c9b61ccd2624
@@@ -16,8 -16,8 +16,8 @@@
  #include <linux/amba/pl022.h>
  #include <linux/amba/pl08x.h>
  #include <linux/amba/serial.h>
 +#include <linux/irqchip.h>
  #include <linux/of_platform.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <mach/generic.h>
  #include <mach/spear.h>
@@@ -268,8 -268,9 +268,8 @@@ static void __init spear320_map_io(void
  
  DT_MACHINE_START(SPEAR320_DT, "ST SPEAr320 SoC with Flattened Device Tree")
        .map_io         =       spear320_map_io,
 -      .init_irq       =       spear3xx_dt_init_irq,
 -      .handle_irq     =       vic_handle_irq,
 +      .init_irq       =       irqchip_init,
-       .timer          =       &spear3xx_timer,
+       .init_time      =       spear3xx_timer_init,
        .init_machine   =       spear320_dt_init,
        .restart        =       spear_restart,
        .dt_compat      =       spear320_dt_board_compat,
index c6003ef0c9f6688c0d29a2931052eab2e055854a,89f4c58908e318381c5d67f41117f0c54da0fd1a..b2ba516ca2d4ee4a46e8eb9a4a328bebb09aa3dd
  
  #include <linux/amba/pl022.h>
  #include <linux/amba/pl08x.h>
 -#include <linux/irqchip/spear-shirq.h>
 -#include <linux/of_irq.h>
  #include <linux/io.h>
  #include <asm/hardware/pl080.h>
 -#include <asm/hardware/vic.h>
  #include <plat/pl080.h>
  #include <mach/generic.h>
  #include <mach/spear.h>
@@@ -84,7 -87,7 +84,7 @@@ void __init spear3xx_map_io(void
        iotable_init(spear3xx_io_desc, ARRAY_SIZE(spear3xx_io_desc));
  }
  
static void __init spear3xx_timer_init(void)
+ void __init spear3xx_timer_init(void)
  {
        char pclk_name[] = "pll3_clk";
        struct clk *gpt_clk, *pclk;
  
        spear_setup_of_timer();
  }
--
- struct sys_timer spear3xx_timer = {
-       .init = spear3xx_timer_init,
 -static const struct of_device_id vic_of_match[] __initconst = {
 -      { .compatible = "arm,pl190-vic", .data = vic_of_init, },
 -      { .compatible = "st,spear300-shirq", .data = spear300_shirq_of_init, },
 -      { .compatible = "st,spear310-shirq", .data = spear310_shirq_of_init, },
 -      { .compatible = "st,spear320-shirq", .data = spear320_shirq_of_init, },
 -      { /* Sentinel */ }
--};
 -
 -void __init spear3xx_dt_init_irq(void)
 -{
 -      of_irq_init(vic_of_match);
 -}
index 3f6fac0fdb719bb2aa53c60a4545b26276881e12,1f85bc07c6cb3c75e2a75beaff00bf3e819bf5d5..b8bd33ca88bdba6a7d880bfd8ef56d8cf3507dc3
  #include <linux/amba/pl08x.h>
  #include <linux/clk.h>
  #include <linux/err.h>
 +#include <linux/irqchip.h>
  #include <linux/of.h>
  #include <linux/of_address.h>
 -#include <linux/of_irq.h>
  #include <linux/of_platform.h>
  #include <asm/hardware/pl080.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
  #include <asm/mach/map.h>
@@@ -373,7 -374,7 +373,7 @@@ void __init spear6xx_map_io(void
        iotable_init(spear6xx_io_desc, ARRAY_SIZE(spear6xx_io_desc));
  }
  
static void __init spear6xx_timer_init(void)
+ void __init spear6xx_timer_init(void)
  {
        char pclk_name[] = "pll3_clk";
        struct clk *gpt_clk, *pclk;
        spear_setup_of_timer();
  }
  
- struct sys_timer spear6xx_timer = {
-       .init = spear6xx_timer_init,
- };
  /* Add auxdata to pass platform data */
  struct of_dev_auxdata spear6xx_auxdata_lookup[] __initdata = {
        OF_DEV_AUXDATA("arm,pl080", SPEAR6XX_ICM3_DMA_BASE, NULL,
@@@ -424,10 -421,21 +420,10 @@@ static const char *spear600_dt_board_co
        NULL
  };
  
 -static const struct of_device_id vic_of_match[] __initconst = {
 -      { .compatible = "arm,pl190-vic", .data = vic_of_init, },
 -      { /* Sentinel */ }
 -};
 -
 -static void __init spear6xx_dt_init_irq(void)
 -{
 -      of_irq_init(vic_of_match);
 -}
 -
  DT_MACHINE_START(SPEAR600_DT, "ST SPEAr600 (Flattened Device Tree)")
        .map_io         =       spear6xx_map_io,
 -      .init_irq       =       spear6xx_dt_init_irq,
 -      .handle_irq     =       vic_handle_irq,
 +      .init_irq       =       irqchip_init,
-       .timer          =       &spear6xx_timer,
+       .init_time      =       spear6xx_timer_init,
        .init_machine   =       spear600_dt_init,
        .restart        =       spear_restart,
        .dt_compat      =       spear600_dt_board_compat,
index 0ff310eecdfdcfcc1ea3c695cebc76871c097877,cba4cd3bf93a25bbebff27343c7dd3cb94b2d37f..fb8fbcecb17f3038a989dc4dae3154d10bc5b233
@@@ -21,6 -21,8 +21,6 @@@
  
  #include <linux/irqchip/sunxi.h>
  
 -#include <asm/hardware/vic.h>
 -
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
  
@@@ -78,8 -80,8 +78,8 @@@ static void __init sunxi_dt_init(void
  }
  
  static const char * const sunxi_board_dt_compat[] = {
 -      "allwinner,sun4i",
 -      "allwinner,sun5i",
 +      "allwinner,sun4i-a10",
 +      "allwinner,sun5i-a13",
        NULL,
  };
  
@@@ -89,6 -91,6 +89,6 @@@ DT_MACHINE_START(SUNXI_DT, "Allwinner A
        .init_irq       = sunxi_init_irq,
        .handle_irq     = sunxi_handle_irq,
        .restart        = sunxi_restart,
-       .timer          = &sunxi_timer,
+       .init_time      = &sunxi_timer_init,
        .dt_compat      = sunxi_board_dt_compat,
  MACHINE_END
index 04008c8185354f9dd255edd9136236ceef5b3fff,3b9956aabf5ab5b7cb678a1e29b970263846a8b5..5ed81bab2d4bb4eb6aaf561200c400cc8d1cc506
@@@ -25,6 -25,7 +25,6 @@@
  #include <linux/of.h>
  #include <linux/of_address.h>
  #include <linux/of_fdt.h>
 -#include <linux/of_irq.h>
  #include <linux/of_platform.h>
  #include <linux/pda_power.h>
  #include <linux/platform_data/tegra_usb.h>
@@@ -33,6 -34,7 +33,6 @@@
  #include <linux/i2c-tegra.h>
  #include <linux/usb/tegra_usb_phy.h>
  
 -#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
@@@ -200,7 -202,8 +200,7 @@@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegr
        .smp            = smp_ops(tegra_smp_ops),
        .init_early     = tegra20_init_early,
        .init_irq       = tegra_dt_init_irq,
-       .timer          = &tegra_sys_timer,
 -      .handle_irq     = gic_handle_irq,
+       .init_time      = tegra_init_timer,
        .init_machine   = tegra_dt_init,
        .init_late      = tegra_dt_init_late,
        .restart        = tegra_assert_system_reset,
index 672db8abdc3861bdb3dd55941df7e133efdca3e2,381b2f25f0b4f89ca191491121909e152e6278c9..12dc2ddeca640914c694d92a0735813de37c6591
@@@ -31,6 -31,7 +31,6 @@@
  #include <linux/of_platform.h>
  
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  #include "board.h"
  #include "clock.h"
@@@ -111,7 -112,8 +111,7 @@@ DT_MACHINE_START(TEGRA30_DT, "NVIDIA Te
        .map_io         = tegra_map_common_io,
        .init_early     = tegra30_init_early,
        .init_irq       = tegra_dt_init_irq,
-       .timer          = &tegra_sys_timer,
 -      .handle_irq     = gic_handle_irq,
+       .init_time      = tegra_init_timer,
        .init_machine   = tegra30_dt_init,
        .init_late      = tegra_init_late,
        .restart        = tegra_assert_system_reset,
index 26b48fa9ea62b68ca7cad2e9fec4a0df09f34e85,100a8b764dad684427a2bedfefe2c7b0890c8732..12060ae4e8f186f49467066fd6d8dc7de3092c49
  #include <linux/dma-mapping.h>
  #include <linux/platform_data/clk-u300.h>
  #include <linux/platform_data/pinctrl-coh901.h>
 +#include <linux/irqchip/arm-vic.h>
  
  #include <asm/types.h>
  #include <asm/setup.h>
  #include <asm/memory.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach/map.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
@@@ -1779,7 -1779,8 +1779,7 @@@ MACHINE_START(U300, "Ericsson AB U335 S
        .map_io         = u300_map_io,
        .nr_irqs        = 0,
        .init_irq       = u300_init_irq,
-       .timer          = &u300_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = u300_timer_init,
        .init_machine   = u300_init_machine,
        .restart        = u300_restart,
  MACHINE_END
index af406c7b0d70dea1d18662a771c7bfff3944d865,e1dfa24b4fb92ac4630ae2d0df463290bdcbbec4..0e928d28175914daddaf63f496b29e8139be1d9f
@@@ -40,6 -40,7 +40,6 @@@
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  #include <mach/hardware.h>
  #include <mach/setup.h>
@@@ -750,7 -751,8 +750,7 @@@ MACHINE_START(U8500, "ST-Ericsson MOP50
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */
-       .timer          = &ux500_timer,
+       .init_time      = ux500_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = mop500_init_machine,
        .init_late      = ux500_init_late,
  MACHINE_END
@@@ -759,7 -761,8 +759,7 @@@ MACHINE_START(U8520, "ST-Ericsson U852
        .atag_offset    = 0x100,
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
-       .timer          = &ux500_timer,
+       .init_time      = ux500_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = mop500_init_machine,
        .init_late      = ux500_init_late,
  MACHINE_END
@@@ -769,7 -772,8 +769,7 @@@ MACHINE_START(HREFV60, "ST-Ericsson U85
        .smp            = smp_ops(ux500_smp_ops),
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
-       .timer          = &ux500_timer,
+       .init_time      = ux500_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = hrefv60_init_machine,
        .init_late      = ux500_init_late,
  MACHINE_END
@@@ -780,7 -784,8 +780,7 @@@ MACHINE_START(SNOWBALL, "Calao Systems 
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */
-       .timer          = &ux500_timer,
+       .init_time      = ux500_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = snowball_init_machine,
        .init_late      = NULL,
  MACHINE_END
index 4c91d767c99cb5402f8cc74d70a6903293c859fd,7875d3c85df1a61f5dd81604747fe6c70e0ead83..218a6b1ada7e82e3859d00e25ee047f31ec2a0a8
@@@ -27,6 -27,7 +27,6 @@@
  #include <asm/pmu.h>
  #include <asm/mach/map.h>
  #include <asm/mach/arch.h>
 -#include <asm/hardware/gic.h>
  
  #include <mach/hardware.h>
  #include <mach/setup.h>
@@@ -284,8 -285,7 +284,8 @@@ static struct of_dev_auxdata u8500_auxd
        OF_DEV_AUXDATA("st,nomadik-i2c", 0x80110000, "nmk-i2c.3", NULL),
        OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL),
        /* Requires device name bindings. */
 -      OF_DEV_AUXDATA("stericsson,nmk_pinctrl", 0, "pinctrl-db8500", NULL),
 +      OF_DEV_AUXDATA("stericsson,nmk_pinctrl", U8500_PRCMU_BASE,
 +              "pinctrl-db8500", NULL),
        /* Requires clock name and DMA bindings. */
        OF_DEV_AUXDATA("stericsson,ux500-msp-i2s", 0x80123000,
                "ux500-msp-i2s.0", &msp0_platform_data),
@@@ -340,7 -340,8 +340,7 @@@ DT_MACHINE_START(U8500_DT, "ST-Ericsso
        .map_io         = u8500_map_io,
        .init_irq       = ux500_init_irq,
        /* we re-use nomadik timer here */
-       .timer          = &ux500_timer,
+       .init_time      = ux500_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = u8500_init_machine,
        .init_late      = NULL,
        .dt_compat      = stericsson_dt_platform_compat,
index 49ac384d2814b46b749684d4a8a0563859327f09,d5ddc0c77f5b0acecf277681d5f0666927010a75..a42b89083eb25c8ce6d8e551dc4082e977085cc7
@@@ -32,7 -32,6 +32,7 @@@
  #include <linux/amba/mmci.h>
  #include <linux/amba/pl022.h>
  #include <linux/io.h>
 +#include <linux/irqchip/arm-vic.h>
  #include <linux/irqchip/versatile-fpga.h>
  #include <linux/gfp.h>
  #include <linux/clkdev.h>
@@@ -41,6 -40,7 +41,6 @@@
  #include <asm/irq.h>
  #include <asm/hardware/arm_timer.h>
  #include <asm/hardware/icst.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  
  #include <asm/mach/arch.h>
@@@ -770,7 -770,7 +770,7 @@@ void __init versatile_init(void
  /*
   * Set up timer interrupt, and return the current time in seconds.
   */
static void __init versatile_timer_init(void)
+ void __init versatile_timer_init(void)
  {
        u32 val;
  
        sp804_clocksource_init(TIMER3_VA_BASE, "timer3");
        sp804_clockevents_init(TIMER0_VA_BASE, IRQ_TIMERINT0_1, "timer0");
  }
- struct sys_timer versatile_timer = {
-       .init           = versatile_timer_init,
- };
index ddeec670d50da16198b1151ee9e24afccdbfb70f,187c1da2c4bbbcaeb0c4c7afc9ffe3a9d2f6ae61..1caef1093793de3d0580d26ff93cd711dfcb2717
@@@ -26,6 -26,7 +26,6 @@@
  
  #include <mach/hardware.h>
  #include <asm/irq.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  
  #include <asm/mach/arch.h>
@@@ -38,7 -39,8 +38,7 @@@ MACHINE_START(VERSATILE_AB, "ARM-Versat
        .map_io         = versatile_map_io,
        .init_early     = versatile_init_early,
        .init_irq       = versatile_init_irq,
-       .timer          = &versatile_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = versatile_timer_init,
        .init_machine   = versatile_init,
        .restart        = versatile_restart,
  MACHINE_END
index f48f2e4b667dee300bcdc4d8668f4d2b13a85f6e,ccf9f8a9206712a3f684bad505fc3250cfe6f14b..2558f2e957c37cb63f32d1efd8c2d487e3add7b7
@@@ -24,6 -24,7 +24,6 @@@
  #include <linux/init.h>
  #include <linux/of_irq.h>
  #include <linux/of_platform.h>
 -#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -45,7 -46,8 +45,7 @@@ DT_MACHINE_START(VERSATILE_PB, "ARM-Ver
        .map_io         = versatile_map_io,
        .init_early     = versatile_init_early,
        .init_irq       = versatile_init_irq,
-       .timer          = &versatile_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = versatile_timer_init,
        .init_machine   = versatile_dt_init,
        .dt_compat      = versatile_dt_match,
        .restart        = versatile_restart,
index e52eb23a0a289d6a621a0af47bf8ded4476dff45,1cabc0aa569d5bb1fc035171beb438bc6eb48ae7..611d140c8695a35b9768221bd125ac76a7e393cc
@@@ -27,6 -27,7 +27,6 @@@
  #include <linux/io.h>
  
  #include <mach/hardware.h>
 -#include <asm/hardware/vic.h>
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  
@@@ -106,7 -107,8 +106,7 @@@ MACHINE_START(VERSATILE_PB, "ARM-Versat
        .map_io         = versatile_map_io,
        .init_early     = versatile_init_early,
        .init_irq       = versatile_init_irq,
-       .timer          = &versatile_timer,
 -      .handle_irq     = vic_handle_irq,
+       .init_time      = versatile_timer_init,
        .init_machine   = versatile_pb_init,
        .restart        = versatile_restart,
  MACHINE_END
index 82be02b3ae28e1010bbc7531c9990024361da67a,08bd548ef144baca12da82a531ff99a1d027d97f..915683cb67d60a6eed062fa49cbc7781a11f761b
@@@ -7,7 -7,6 +7,7 @@@
  #include <linux/io.h>
  #include <linux/smp.h>
  #include <linux/init.h>
 +#include <linux/irqchip.h>
  #include <linux/of_address.h>
  #include <linux/of_fdt.h>
  #include <linux/of_irq.h>
@@@ -31,6 -30,7 +31,6 @@@
  #include <asm/mach/time.h>
  #include <asm/hardware/arm_timer.h>
  #include <asm/hardware/cache-l2x0.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/timer-sp.h>
  
  #include <mach/ct-ca9x4.h>
@@@ -291,10 -291,6 +291,6 @@@ static void __init v2m_timer_init(void
        v2m_sp804_init(ioremap(V2M_TIMER01, SZ_4K), IRQ_V2M_TIMER0);
  }
  
- static struct sys_timer v2m_timer = {
-       .init   = v2m_timer_init,
- };
  static void __init v2m_init_early(void)
  {
        if (ct_desc->init_early)
@@@ -376,7 -372,8 +372,7 @@@ MACHINE_START(VEXPRESS, "ARM-Versatile 
        .map_io         = v2m_map_io,
        .init_early     = v2m_init_early,
        .init_irq       = v2m_init_irq,
-       .timer          = &v2m_timer,
+       .init_time      = v2m_timer_init,
 -      .handle_irq     = gic_handle_irq,
        .init_machine   = v2m_init,
        .restart        = vexpress_restart,
  MACHINE_END
@@@ -433,6 -430,16 +429,6 @@@ void __init v2m_dt_init_early(void
        }
  }
  
 -static  struct of_device_id vexpress_irq_match[] __initdata = {
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      {}
 -};
 -
 -static void __init v2m_dt_init_irq(void)
 -{
 -      of_irq_init(vexpress_irq_match);
 -}
 -
  static void __init v2m_dt_timer_init(void)
  {
        struct device_node *node = NULL;
                                24000000);
  }
  
- static struct sys_timer v2m_dt_timer = {
-       .init = v2m_dt_timer_init,
- };
  static const struct of_device_id v2m_dt_bus_match[] __initconst = {
        { .compatible = "simple-bus", },
        { .compatible = "arm,amba-bus", },
@@@ -486,8 -489,9 +478,8 @@@ DT_MACHINE_START(VEXPRESS_DT, "ARM-Vers
        .smp            = smp_ops(vexpress_smp_ops),
        .map_io         = v2m_dt_map_io,
        .init_early     = v2m_dt_init_early,
 -      .init_irq       = v2m_dt_init_irq,
 +      .init_irq       = irqchip_init,
-       .timer          = &v2m_dt_timer,
+       .init_time      = v2m_dt_timer_init,
        .init_machine   = v2m_dt_init,
 -      .handle_irq     = gic_handle_irq,
        .restart        = vexpress_restart,
  MACHINE_END
index 2d96745dd9ad450b5b248afbc6aef5645595b4ce,2ae4bce652b6f78a1ca5fe2e39cf5baf3255e2a6..6472a69cbfe110b5ab2cfeecc9574aff465be686
@@@ -31,6 -31,7 +31,6 @@@
  #include <asm/mach-types.h>
  #include <asm/page.h>
  #include <asm/pgtable.h>
 -#include <asm/hardware/gic.h>
  #include <asm/hardware/cache-l2x0.h>
  
  #include "common.h"
@@@ -54,6 -55,19 +54,6 @@@ static void __init xilinx_init_machine(
        of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL);
  }
  
 -static struct of_device_id irq_match[] __initdata = {
 -      { .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
 -      { }
 -};
 -
 -/**
 - * xilinx_irq_init() - Interrupt controller initialization for the GIC.
 - */
 -static void __init xilinx_irq_init(void)
 -{
 -      of_irq_init(irq_match);
 -}
 -
  #define SCU_PERIPH_PHYS               0xF8F00000
  #define SCU_PERIPH_SIZE               SZ_8K
  #define SCU_PERIPH_VIRT               (VMALLOC_END - SCU_PERIPH_SIZE)
@@@ -79,13 -93,6 +79,6 @@@ static void __init xilinx_zynq_timer_in
        xttcpss_timer_init();
  }
  
- /*
-  * Instantiate and initialize the system timer structure
-  */
- static struct sys_timer xttcpss_sys_timer = {
-       .init           = xilinx_zynq_timer_init,
- };
  /**
   * xilinx_map_io() - Create memory mappings needed for early I/O.
   */
@@@ -103,8 -110,9 +96,8 @@@ static const char *xilinx_dt_match[] = 
  
  MACHINE_START(XILINX_EP107, "Xilinx Zynq Platform")
        .map_io         = xilinx_map_io,
 -      .init_irq       = xilinx_irq_init,
 -      .handle_irq     = gic_handle_irq,
 +      .init_irq       = irqchip_init,
        .init_machine   = xilinx_init_machine,
-       .timer          = &xttcpss_sys_timer,
+       .init_time      = xilinx_zynq_timer_init,
        .dt_compat      = xilinx_dt_match,
  MACHINE_END
index b69e11dc679da60d8c800c0658a30c84b47437e8,e0667a1c137c40594490a47b52ce09465d0f2f0b..37703ef6dfc76ff28b70543b55311f7abc52269b
@@@ -43,7 -43,7 +43,7 @@@ extern unsigned long samsung_cpu_id
  #define EXYNOS4_CPU_MASK      0xFFFE0000
  
  #define EXYNOS5250_SOC_ID     0x43520000
 -#define EXYNOS5440_SOC_ID     0x54400000
 +#define EXYNOS5440_SOC_ID     0xE5440000
  #define EXYNOS5_SOC_MASK      0xFFFFF000
  
  #define IS_SAMSUNG_CPU(name, id, mask)                \
@@@ -194,8 -194,7 +194,7 @@@ extern void s3c24xx_init_uartdevs(char 
  
  /* timer for 2410/2440 */
  
- struct sys_timer;
- extern struct sys_timer s3c24xx_timer;
+ extern void s3c24xx_timer_init(void);
  
  extern struct syscore_ops s3c2410_pm_syscore_ops;
  extern struct syscore_ops s3c2412_pm_syscore_ops;
index c80c599897b92c1df4edeb86f3ae72ff7ac17989,1e744c5a0ffe974c76debea9ea0d889098003d23..fc62ac5c6d4fa5324712cc3578be327261a6872c
  #define TRACE_SYSCALLS()
  #endif
  
+ #ifdef CONFIG_CLKSRC_OF
+ #define CLKSRC_OF_TABLES() . = ALIGN(8);                              \
+                          VMLINUX_SYMBOL(__clksrc_of_table) = .;       \
+                          *(__clksrc_of_table)                         \
+                          *(__clksrc_of_table_end)
+ #else
+ #define CLKSRC_OF_TABLES()
+ #endif
 +#ifdef CONFIG_IRQCHIP
 +#define IRQCHIP_OF_MATCH_TABLE()                                      \
 +      . = ALIGN(8);                                                   \
 +      VMLINUX_SYMBOL(__irqchip_begin) = .;                            \
 +      *(__irqchip_of_table)                                           \
 +      *(__irqchip_of_end)
 +#else
 +#define IRQCHIP_OF_MATCH_TABLE()
 +#endif
 +
  #define KERNEL_DTB()                                                  \
        STRUCT_ALIGN();                                                 \
        VMLINUX_SYMBOL(__dtb_start) = .;                                \
        DEV_DISCARD(init.rodata)                                        \
        CPU_DISCARD(init.rodata)                                        \
        MEM_DISCARD(init.rodata)                                        \
 -      KERNEL_DTB()
+       CLKSRC_OF_TABLES()                                              \
 +      KERNEL_DTB()                                                    \
 +      IRQCHIP_OF_MATCH_TABLE()
  
  #define INIT_TEXT                                                     \
        *(.init.text)                                                   \