]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'restart' into for-next
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 11 Dec 2011 09:58:42 +0000 (09:58 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 11 Dec 2011 09:58:42 +0000 (09:58 +0000)
79 files changed:
1  2 
arch/arm/include/asm/system.h
arch/arm/kernel/process.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-highbank/highbank.c
arch/arm/mach-imx/clock-imx6q.c
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-imx/src.c
arch/arm/mach-kirkwood/sheevaplug-setup.c
arch/arm/mach-mmp/gplugd.c
arch/arm/mach-mxs/mach-mx28evk.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-2430sdp.c
arch/arm/mach-omap2/board-3430sdp.c
arch/arm/mach-omap2/board-3630sdp.c
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-am3517crane.c
arch/arm/mach-omap2/board-am3517evm.c
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/board-cm-t35.c
arch/arm/mach-omap2/board-cm-t3517.c
arch/arm/mach-omap2/board-devkit8000.c
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/board-h4.c
arch/arm/mach-omap2/board-igep0020.c
arch/arm/mach-omap2/board-ldp.c
arch/arm/mach-omap2/board-n8x0.c
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-omap2/board-omap3evm.c
arch/arm/mach-omap2/board-omap3logic.c
arch/arm/mach-omap2/board-omap3pandora.c
arch/arm/mach-omap2/board-omap3stalker.c
arch/arm/mach-omap2/board-omap3touchbook.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/board-overo.c
arch/arm/mach-omap2/board-rm680.c
arch/arm/mach-omap2/board-rx51.c
arch/arm/mach-omap2/board-zoom.c
arch/arm/mach-omap2/common.h
arch/arm/mach-orion5x/ts209-setup.c
arch/arm/mach-pxa/balloon3.c
arch/arm/mach-pxa/colibri-pxa320.c
arch/arm/mach-pxa/gumstix.c
arch/arm/mach-pxa/palmtc.c
arch/arm/mach-pxa/vpac270.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-spear3xx/spear300_evb.c
arch/arm/mach-spear3xx/spear310_evb.c
arch/arm/mach-spear3xx/spear320_evb.c
arch/arm/mach-spear6xx/spear600_evb.c
arch/arm/mach-tegra/board-dt.c
arch/arm/mach-tegra/board-harmony.c
arch/arm/mach-tegra/board-paz00.c
arch/arm/mach-tegra/board-seaboard.c
arch/arm/mach-tegra/board-trimslice.c
arch/arm/mach-u300/u300.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/plat-iop/Makefile
arch/arm/plat-mxc/include/mach/common.h
arch/arm/plat-mxc/include/mach/system.h
arch/arm/plat-mxc/system.c

index 53785828744ca687be6a6aec35176289d1a2cbe4,03775b14be87d8afb40df68e010810274fc40b0e..e4c96cc6ec0cf470e214a00e72008925379c74bb
@@@ -80,14 -80,6 +80,14 @@@ struct siginfo
  void arm_notify_die(const char *str, struct pt_regs *regs, struct siginfo *info,
                unsigned long err, unsigned long trap);
  
 +#ifdef CONFIG_ARM_LPAE
 +#define FAULT_CODE_ALIGNMENT  33
 +#define FAULT_CODE_DEBUG      34
 +#else
 +#define FAULT_CODE_ALIGNMENT  1
 +#define FAULT_CODE_DEBUG      2
 +#endif
 +
  void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
                                       struct pt_regs *),
                     int sig, int code, const char *name);
@@@ -108,7 -100,6 +108,6 @@@ extern void __show_regs(struct pt_regs 
  extern int __pure cpu_architecture(void);
  extern void cpu_init(void);
  
- void arm_machine_restart(char mode, const char *cmd);
  void soft_restart(unsigned long);
  extern void (*arm_pm_restart)(char str, const char *cmd);
  
index eeb3e16c60465616067d7681a47b35f8752c4d78,a92ca50f6f0ac4c1f3a00d38e571e8798bb00923..17859ce4e7be3326902b6b828fab9a6ec4d1c190
@@@ -117,14 -117,8 +117,8 @@@ void soft_restart(unsigned long addr
        cpu_reset(addr);
  }
  
void arm_machine_restart(char mode, const char *cmd)
static void null_restart(char mode, const char *cmd)
  {
-       /* Disable interrupts first */
-       local_irq_disable();
-       local_fiq_disable();
-       /* Call the architecture specific reboot code. */
-       arch_reset(mode, cmd);
  }
  
  /*
  void (*pm_power_off)(void);
  EXPORT_SYMBOL(pm_power_off);
  
- void (*arm_pm_restart)(char str, const char *cmd) = arm_machine_restart;
+ void (*arm_pm_restart)(char str, const char *cmd) = null_restart;
  EXPORT_SYMBOL_GPL(arm_pm_restart);
  
  static void do_nothing(void *unused)
@@@ -191,9 -185,6 +185,9 @@@ void cpu_idle(void
  #endif
  
                        local_irq_disable();
 +#ifdef CONFIG_PL310_ERRATA_769419
 +                      wmb();
 +#endif
                        if (hlt_counter) {
                                local_irq_enable();
                                cpu_relax();
index 594852fe24cc1dfe517e904e383cc677c73a819e,9b8c3d59731bf625670b2e4737d2e3d01c177847..2c5fb4c7e509b8786fb1ba0d45cb974bc373f4d2
@@@ -26,7 -26,6 +26,7 @@@
  #include <linux/mtd/partitions.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>
@@@ -202,6 -201,6 +202,7 @@@ MACHINE_START(CNS3420VB, "Cavium Networ
        .map_io         = cns3420_map_io,
        .init_irq       = cns3xxx_init_irq,
        .timer          = &cns3xxx_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = cns3420_init,
+       .restart        = cns3xxx_restart,
  MACHINE_END
index d9b0ea2ba4d80c6769fe6b822c759307a2bd1585,7b41651728cdf406efd2becb71124653a614c86d..681e939407d4bc907dfb99f528992c12bb462eec
@@@ -16,7 -16,6 +16,7 @@@
  
  #include <mach/hardware.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -37,7 -36,7 +37,8 @@@ MACHINE_START(ADSSPHERE, "ADS Sphere bo
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = adssphere_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
index 9bbae0835f27925037498db672836100d2490c60,c5731c68acc02b69199a56a89b4724177465f68f..d115653edca3e3cd9632fcfb14ebb616dad7a985
@@@ -39,7 -39,6 +39,7 @@@
  #include <mach/ep93xx_spi.h>
  #include <mach/gpio-ep93xx.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -251,9 -250,9 +251,10 @@@ MACHINE_START(EDB9301, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -263,9 -262,9 +264,10 @@@ MACHINE_START(EDB9302, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -275,9 -274,9 +277,10 @@@ MACHINE_START(EDB9302A, "Cirrus Logic E
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -287,9 -286,9 +290,10 @@@ MACHINE_START(EDB9307, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -299,9 -298,9 +303,10 @@@ MACHINE_START(EDB9307A, "Cirrus Logic E
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -311,9 -310,9 +316,10 @@@ MACHINE_START(EDB9312, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -323,9 -322,9 +329,10 @@@ MACHINE_START(EDB9315, "Cirrus Logic ED
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -335,8 -334,8 +342,9 @@@ MACHINE_START(EDB9315A, "Cirrus Logic E
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = edb93xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
index 1dd32a7c5f151767037a6f365232589ec1d909ca,7b89e8a1bb7b9ad7c1bb8d01f77eb9cda14171e1..af46970dc58e78c2a484c4db0351c1eb8f94ab4b
@@@ -16,7 -16,6 +16,7 @@@
  
  #include <mach/hardware.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -37,7 -36,7 +37,8 @@@ MACHINE_START(GESBC9312, "Glomation GES
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = gesbc9312_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
index a6dae6c2e3c1f96b749eb8526fccfbd7cf4b04d7,050ce9216d7cb1c7373ec452d10eb11c6628c2b4..7b98084f0c97bf14e8830a30b3dd18b10d5a3163
@@@ -18,7 -18,6 +18,7 @@@
  
  #include <mach/hardware.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -81,9 -80,9 +81,10 @@@ MACHINE_START(MICRO9, "Contec Micro9-Hi
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = micro9_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -93,9 -92,9 +94,10 @@@ MACHINE_START(MICRO9M, "Contec Micro9-M
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = micro9_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -105,9 -104,9 +107,10 @@@ MACHINE_START(MICRO9L, "Contec Micro9-L
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = micro9_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
  
@@@ -117,8 -116,8 +120,9 @@@ MACHINE_START(MICRO9S, "Contec Micro9-S
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = micro9_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
  #endif
index 40121ba8e711f76359d8017ded27d127aa1843b1,188cbdb4dbdadf6101e26f2262507650eeb280b2..f4e553eca21c7d7c4cfdfd406489a34623945592
@@@ -25,7 -25,6 +25,7 @@@
  #include <mach/fb.h>
  #include <mach/gpio-ep93xx.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -81,7 -80,7 +81,8 @@@ MACHINE_START(SIM_ONE, "Simplemachines 
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = simone_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
index ec7c63ff01e22e4e62f7e678069778bcd828fac9,797afdee80abd7fa2f06aefddade9e938a14dafa..fd846331ddff9119023c2a726adae50a16578f6f
@@@ -31,7 -31,6 +31,7 @@@
  #include <mach/fb.h>
  #include <mach/gpio-ep93xx.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  
@@@ -178,7 -177,7 +178,8 @@@ MACHINE_START(SNAPPER_CL15, "Bluewater 
        .atag_offset    = 0x100,
        .map_io         = ep93xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = snappercl15_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
index 760384e6407de90adc04fd78781df2ef2ba7da67,de9bb541b5500a35992d818692d01cfd47a192ed..79f8ecf07a190a082ac4da524ef185faea62715a
@@@ -23,7 -23,6 +23,7 @@@
  #include <mach/hardware.h>
  #include <mach/ts72xx.h>
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/map.h>
  #include <asm/mach/arch.h>
@@@ -248,7 -247,7 +248,8 @@@ MACHINE_START(TS72XX, "Technologic Syst
        .atag_offset    = 0x100,
        .map_io         = ts72xx_map_io,
        .init_irq       = ep93xx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &ep93xx_timer,
        .init_machine   = ts72xx_init_machine,
+       .restart        = ep93xx_restart,
  MACHINE_END
index 7266dd510f1a4ed9dd495c3268f6430a776b3dc4,9d356a10a198110f457dce5cb1eb83b69e751e6a..804c4a55f8038c75cbf0731168ee6d0d36de004a
@@@ -22,7 -22,6 +22,7 @@@
  #include <linux/of_irq.h>
  #include <linux/of_platform.h>
  #include <linux/of_address.h>
 +#include <linux/smp.h>
  
  #include <asm/cacheflush.h>
  #include <asm/unified.h>
@@@ -73,9 -72,6 +73,9 @@@ static void __init highbank_map_io(void
  
  void highbank_set_cpu_jump(int cpu, void *jump_addr)
  {
 +#ifdef CONFIG_SMP
 +      cpu = cpu_logical_map(cpu);
 +#endif
        writel(BSYM(virt_to_phys(jump_addr)), HB_JUMP_TABLE_VIRT(cpu));
        __cpuc_flush_dcache_area(HB_JUMP_TABLE_VIRT(cpu), 16);
        outer_clean_range(HB_JUMP_TABLE_PHYS(cpu),
@@@ -144,7 -140,7 +144,8 @@@ DT_MACHINE_START(HIGHBANK, "Highbank"
        .map_io         = highbank_map_io,
        .init_irq       = highbank_init_irq,
        .timer          = &highbank_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = highbank_init,
        .dt_compat      = highbank_match,
+       .restart        = highbank_restart,
  MACHINE_END
index 039a7abb165a35f4afc10ae08dbb7cc62f1121f7,3ae8759f3b9689beae63d437f38399ec771e665d..9273c2a24b540a12646c406ac82dedb6c27ca28b
@@@ -1139,7 -1139,7 +1139,7 @@@ static int _clk_set_rate(struct clk *cl
                return -EINVAL;
  
        max_div = ((d->bm_pred >> d->bp_pred) + 1) *
 -                ((d->bm_pred >> d->bp_pred) + 1);
 +                ((d->bm_podf >> d->bp_podf) + 1);
  
        div = parent_rate / rate;
        if (div == 0)
@@@ -1931,14 -1931,12 +1931,12 @@@ int imx6q_set_lpm(enum mxc_cpu_pwr_mod
                val |= 0x1 << BP_CLPCR_LPM;
                val &= ~BM_CLPCR_VSTBY;
                val &= ~BM_CLPCR_SBYOS;
-               val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
                break;
        case STOP_POWER_OFF:
                val |= 0x2 << BP_CLPCR_LPM;
                val |= 0x3 << BP_CLPCR_STBY_COUNT;
                val |= BM_CLPCR_VSTBY;
                val |= BM_CLPCR_SBYOS;
-               val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
                break;
        default:
                return -EINVAL;
@@@ -1953,17 -1951,14 +1951,17 @@@ static struct map_desc imx6q_clock_desc
        imx_map_entry(MX6Q, ANATOP, MT_DEVICE),
  };
  
 +void __init imx6q_clock_map_io(void)
 +{
 +      iotable_init(imx6q_clock_desc, ARRAY_SIZE(imx6q_clock_desc));
 +}
 +
  int __init mx6q_clocks_init(void)
  {
        struct device_node *np;
        void __iomem *base;
        int i, irq;
  
 -      iotable_init(imx6q_clock_desc, ARRAY_SIZE(imx6q_clock_desc));
 -
        /* retrieve the freqency of fixed clocks from device tree */
        for_each_compatible_node(np, NULL, "fixed-clock") {
                u32 rate;
        clk_set_rate(&asrc_serial_clk, 1500000);
        clk_set_rate(&enfc_clk, 11000000);
  
 +      /*
 +       * Before pinctrl API is available, we have to rely on the pad
 +       * configuration set up by bootloader.  For usdhc example here,
 +       * u-boot sets up the pads for 49.5 MHz case, and we have to lower
 +       * the usdhc clock from 198 to 49.5 MHz to match the pad configuration.
 +       *
 +       * FIXME: This is should be removed after pinctrl API is available.
 +       * At that time, usdhc driver can call pinctrl API to change pad
 +       * configuration dynamically per different usdhc clock settings.
 +       */
 +      clk_set_rate(&usdhc1_clk, 49500000);
 +      clk_set_rate(&usdhc2_clk, 49500000);
 +      clk_set_rate(&usdhc3_clk, 49500000);
 +      clk_set_rate(&usdhc4_clk, 49500000);
 +
        np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
        base = of_iomap(np, 0);
        WARN_ON(!base);
index 9cd860a27af5f797cff2b9e5ceaf1798e09e8777,b8236f39934b918ea3c48490036f8c9fffc8b69c..70a395ee36cf488224764a515d6fe1ec661a3c26
   * http://www.gnu.org/copyleft/gpl.html
   */
  
+ #include <linux/delay.h>
  #include <linux/init.h>
+ #include <linux/io.h>
  #include <linux/irq.h>
  #include <linux/irqdomain.h>
  #include <linux/of.h>
+ #include <linux/of_address.h>
  #include <linux/of_irq.h>
  #include <linux/of_platform.h>
  #include <asm/hardware/cache-l2x0.h>
  #include <mach/common.h>
  #include <mach/hardware.h>
  
+ void imx6q_restart(char mode, const char *cmd)
+ {
+       struct device_node *np;
+       void __iomem *wdog_base;
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-wdt");
+       wdog_base = of_iomap(np, 0);
+       if (!wdog_base)
+               goto soft;
+       imx_src_prepare_restart();
+       /* enable wdog */
+       writew_relaxed(1 << 2, wdog_base);
+       /* write twice to ensure the request will not get ignored */
+       writew_relaxed(1 << 2, wdog_base);
+       /* wait for reset to assert ... */
+       mdelay(500);
+       pr_err("Watchdog reset failed to assert reset\n");
+       /* delay to allow the serial port to show the message */
+       mdelay(50);
+ soft:
+       /* we'll take a jump through zero as a poor second */
+       soft_restart(0);
+ }
  static void __init imx6q_init_machine(void)
  {
        of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
@@@ -34,7 -67,6 +67,7 @@@ static void __init imx6q_map_io(void
  {
        imx_lluart_map_io();
        imx_scu_map_io();
 +      imx6q_clock_map_io();
  }
  
  static void __init imx6q_gpio_add_irq_domain(struct device_node *np,
@@@ -82,4 -114,5 +115,5 @@@ DT_MACHINE_START(IMX6Q, "Freescale i.MX
        .timer          = &imx6q_timer,
        .init_machine   = imx6q_init_machine,
        .dt_compat      = imx6q_dt_compat,
+       .restart        = imx6q_restart,
  MACHINE_END
diff --combined arch/arm/mach-imx/src.c
index a8e33681b73251f498a7cfee463f20c3f6d0e1ff,117538c7d4837089fcde4efeb5fe150e63da8495..4bde04f99e38ceda85fd4cb43f89bf2eb080ead7
  #include <linux/io.h>
  #include <linux/of.h>
  #include <linux/of_address.h>
 +#include <linux/smp.h>
  #include <asm/unified.h>
  
  #define SRC_SCR                               0x000
  #define SRC_GPR1                      0x020
+ #define BP_SRC_SCR_WARM_RESET_ENABLE  0
  #define BP_SRC_SCR_CORE1_RST          14
  #define BP_SRC_SCR_CORE1_ENABLE               22
  
  static void __iomem *src_base;
  
 +#ifndef CONFIG_SMP
 +#define cpu_logical_map(cpu)          0
 +#endif
 +
  void imx_enable_cpu(int cpu, bool enable)
  {
        u32 mask, val;
  
 +      cpu = cpu_logical_map(cpu);
        mask = 1 << (BP_SRC_SCR_CORE1_ENABLE + cpu - 1);
        val = readl_relaxed(src_base + SRC_SCR);
        val = enable ? val | mask : val & ~mask;
  
  void imx_set_cpu_jump(int cpu, void *jump_addr)
  {
 +      cpu = cpu_logical_map(cpu);
        writel_relaxed(BSYM(virt_to_phys(jump_addr)),
                       src_base + SRC_GPR1 + cpu * 8);
  }
  
+ void imx_src_prepare_restart(void)
+ {
+       u32 val;
+       /* clear enable bits of secondary cores */
+       val = readl_relaxed(src_base + SRC_SCR);
+       val &= ~(0x7 << BP_SRC_SCR_CORE1_ENABLE);
+       writel_relaxed(val, src_base + SRC_SCR);
+       /* clear persistent entry register of primary core */
+       writel_relaxed(0, src_base + SRC_GPR1);
+ }
  void __init imx_src_init(void)
  {
        struct device_node *np;
+       u32 val;
  
        np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-src");
        src_base = of_iomap(np, 0);
        WARN_ON(!src_base);
+       /*
+        * force warm reset sources to generate cold reset
+        * for a more reliable restart
+        */
+       val = readl_relaxed(src_base + SRC_SCR);
+       val &= ~(1 << BP_SRC_SCR_WARM_RESET_ENABLE);
+       writel_relaxed(val, src_base + SRC_SCR);
  }
index 046eeb6b9f5491b86ab764c75559344cb66005fe,85bff6b7699e7bdc2ed0e15a482338c686805ff0..4ea70e5f7137587e8cbac4e0211f8ee3d370b6f5
@@@ -107,7 -107,7 +107,7 @@@ static void __init sheevaplug_init(void
        kirkwood_init();
  
        /* setup gpio pin select */
 -      if (machine_is_sheeva_esata())
 +      if (machine_is_esata_sheevaplug())
                kirkwood_mpp_conf(sheeva_esata_mpp_config);
        else
                kirkwood_mpp_conf(sheevaplug_mpp_config);
        kirkwood_ge00_init(&sheevaplug_ge00_data);
  
        /* honor lower power consumption for plugs with out eSATA */
 -      if (machine_is_sheeva_esata())
 +      if (machine_is_esata_sheevaplug())
                kirkwood_sata_init(&sheeva_esata_sata_data);
  
        /* enable sd wp and sd cd on plugs with esata */
 -      if (machine_is_sheeva_esata())
 +      if (machine_is_esata_sheevaplug())
                kirkwood_sdio_init(&sheeva_esata_mvsdio_data);
        else
                kirkwood_sdio_init(&sheevaplug_mvsdio_data);
@@@ -144,6 -144,7 +144,7 @@@ MACHINE_START(SHEEVAPLUG, "Marvell Shee
        .init_early     = kirkwood_init_early,
        .init_irq       = kirkwood_init_irq,
        .timer          = &kirkwood_timer,
+       .restart        = kirkwood_restart,
  MACHINE_END
  #endif
  
@@@ -155,5 -156,6 +156,6 @@@ MACHINE_START(ESATA_SHEEVAPLUG, "Marvel
        .init_early     = kirkwood_init_early,
        .init_irq       = kirkwood_init_irq,
        .timer          = &kirkwood_timer,
+       .restart        = kirkwood_restart,
  MACHINE_END
  #endif
index 4665767a4f79ee918ec1fd24053d296ce13d0806,a87f2f5cf8b6ef20c0e25a39994424eb04435bdf..1e3abbe37cac01b584e3a5857302092e62d4f4d3
@@@ -182,7 -182,7 +182,7 @@@ static void __init gplugd_init(void
  
        /* on-chip devices */
        pxa168_add_uart(3);
 -      pxa168_add_ssp(0);
 +      pxa168_add_ssp(1);
        pxa168_add_twsi(0, NULL, ARRAY_AND_SIZE(gplugd_i2c_board_info));
  
        pxa168_add_eth(&gplugd_eth_platform_data);
@@@ -194,4 -194,5 +194,5 @@@ MACHINE_START(GPLUGD, "PXA168-based Gur
        .init_irq       = pxa168_init_irq,
        .timer          = &pxa168_timer,
        .init_machine   = gplugd_init,
+       .restart        = pxa168_restart,
  MACHINE_END
index 064ec5abaa557f7c6679bf4fe965c67f3fb6a022,1d2548f7a0685cd10f92509c92cea739b4fb29da..d0cc37fd23a4ba16f31df3091217973ef1e78013
@@@ -471,8 -471,7 +471,8 @@@ static void __init mx28evk_init(void
                               "mmc0-slot-power");
        if (ret)
                pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret);
 -      mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
 +      else
 +              mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
  
        ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW,
                               "mmc1-slot-power");
        else
                mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
  
 -      mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
        mx28_add_rtc_stmp3xxx();
  
        gpio_led_register_device(0, &mx28evk_led_data);
@@@ -501,4 -501,5 +501,5 @@@ MACHINE_START(MX28EVK, "Freescale MX28 
        .init_irq       = mx28_init_irq,
        .timer          = &mx28evk_timer,
        .init_machine   = mx28evk_init,
+       .restart        = mxs_restart,
  MACHINE_END
index ef8cf3574a0259756ac89284bb74eff300757c36,5384b5a78f688bcb9a976957c9bae392ffac6b02..180ea899a48afcf76586f24cf1a68cca5438f098
@@@ -28,7 -28,6 +28,7 @@@
  #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 <mach/eth.h>
  
@@@ -204,7 -203,7 +204,8 @@@ MACHINE_START(NXDB500, "Hilscher nxdb50
        .atag_offset    = 0x100,
        .map_io         = netx_map_io,
        .init_irq       = netx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &netx_timer,
        .init_machine   = nxdb500_init,
+       .restart        = netx_restart,
  MACHINE_END
index 588558bdd800c160429300220e69ddcc16d69cc3,2df3783ef45933fd56c39dbe269caf985dbe6497..58009e29b20e722d5f9759d148d3a26e1b3fbcc4
@@@ -28,7 -28,6 +28,7 @@@
  #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 <mach/eth.h>
  
@@@ -97,7 -96,7 +97,8 @@@ MACHINE_START(NXDKN, "Hilscher nxdkn"
        .atag_offset    = 0x100,
        .map_io         = netx_map_io,
        .init_irq       = netx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &netx_timer,
        .init_machine   = nxdkn_init,
+       .restart        = netx_restart,
  MACHINE_END
index cfcbb50386487f450ed3de4546327df2980a4349,26255b2ce47386a544a7c983e22b3ba2176c6f13..122e99826ef6fd0869a80f2935352c081a000ec1
@@@ -28,7 -28,6 +28,7 @@@
  #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 <mach/eth.h>
  
@@@ -181,7 -180,7 +181,8 @@@ MACHINE_START(NXEB500HMI, "Hilscher nxe
        .atag_offset    = 0x100,
        .map_io         = netx_map_io,
        .init_irq       = netx_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &netx_timer,
        .init_machine   = nxeb500hmi_init,
+       .restart        = netx_restart,
  MACHINE_END
index f98259c050eea48acd4b480ba1058ed339ed656c,68c7b79bad790f2f5a134c1a958255cb3baf5a00..7c878bf0034094fbbc8e31a933f9d091b4ae95f0
@@@ -21,7 -21,6 +21,7 @@@
  #include <linux/mtd/onenand.h>
  #include <linux/mtd/partitions.h>
  #include <linux/io.h>
 +#include <asm/hardware/vic.h>
  #include <asm/sizes.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
@@@ -35,6 -34,8 +35,8 @@@
  #include <mach/nand.h>
  #include <mach/fsmc.h>
  
+ #include "cpu-8815.h"
  /* Initial value for SRC control register: all timers use MXTAL/8 source */
  #define SRC_CR_INIT_MASK      0x00007fff
  #define SRC_CR_INIT_VAL               0x2aaa8000
@@@ -281,7 -282,7 +283,8 @@@ MACHINE_START(NOMADIK, "NHK8815"
        .atag_offset    = 0x100,
        .map_io         = cpu8815_map_io,
        .init_irq       = cpu8815_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &nomadik_timer,
        .init_machine   = nhk8815_platform_init,
+       .restart        = cpu8815_restart,
  MACHINE_END
index af7911963c0dc53429b33eb039aaec9d80152453,21203690b5fb2bed588c6290172b2ee0aa028e95..88909cc0b25407eada87f91b651525fa35cf30fe
@@@ -302,6 -302,8 +302,6 @@@ static void __init ams_delta_init(void
        omap_cfg_reg(J19_1610_CAM_D6);
        omap_cfg_reg(J18_1610_CAM_D7);
  
 -      iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));
 -
        omap_board_config = ams_delta_config;
        omap_board_config_size = ARRAY_SIZE(ams_delta_config);
        omap_serial_init();
@@@ -371,21 -373,16 +371,22 @@@ static int __init ams_delta_modem_init(
  }
  arch_initcall(ams_delta_modem_init);
  
 +static void __init ams_delta_map_io(void)
 +{
 +      omap15xx_map_io();
 +      iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));
 +}
 +
  MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)")
        /* Maintainer: Jonathan McDowell <noodles@earth.li> */
        .atag_offset    = 0x100,
 -      .map_io         = omap15xx_map_io,
 +      .map_io         = ams_delta_map_io,
        .init_early     = omap1_init_early,
        .reserve        = omap_reserve,
        .init_irq       = omap1_init_irq,
        .init_machine   = ams_delta_init,
        .timer          = &omap1_timer,
+       .restart        = omap1_restart,
  MACHINE_END
  
  EXPORT_SYMBOL(ams_delta_latch1_write);
index d88143faca59c33d0d277c33a01954c40d75b473,2e730242132f31d8404f18463e4290a705c1d061..7370983f809fc3994a8722970f2c6f7f1a85f08e
@@@ -301,7 -301,7 +301,8 @@@ MACHINE_START(OMAP_2430SDP, "OMAP2430 s
        .map_io         = omap243x_map_io,
        .init_early     = omap2430_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = omap_2430sdp_init,
        .timer          = &omap2_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 83126368ed99f2bf0d32679c0ec1e2cb265a5516,7111677c7e6b7bf64cc1d1aedb09fa0ebbef7fb7..9996334cb6879f2fe6b7b770608a7db7cde8375f
@@@ -728,7 -728,7 +728,8 @@@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3
        .map_io         = omap3_map_io,
        .init_early     = omap3430_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_3430sdp_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 7969dd904bd3a5ae9f3bca43cf8911018c1c965a,a01d08118a405d5121ec3c4caedd1dfcadadc26c..6ef350d1ae4f40a89a8b1bc54c6858780db1b2a8
@@@ -215,7 -215,7 +215,8 @@@ MACHINE_START(OMAP_3630SDP, "OMAP 3630S
        .map_io         = omap3_map_io,
        .init_early     = omap3630_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_sdp_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index ef2bbc09428a2e29b2786bbeb623ac307e1d1ed8,8a46ad8f1227de145c960f633f203c0923de65c3..bad5d5a5ef7949fafdeb06ce4a2e95d686eeb29c
@@@ -27,7 -27,6 +27,7 @@@
  #include <linux/leds_pwm.h>
  
  #include <mach/hardware.h>
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -984,7 -983,7 +984,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,
        .timer          = &omap4_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 7e90f93263dba49e0470915b16cacaf0fe6b0e08,c1d6b6338b005ef0f09027997d8752f9f53e0e33..c3851e8de28bf78d94f4be19baa0ca869915cd95
@@@ -98,7 -98,7 +98,8 @@@ MACHINE_START(CRANEBOARD, "AM3517/05 CR
        .map_io         = omap3_map_io,
        .init_early     = am35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = am3517_crane_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 551cae8d9b8a08b036a135bc7be1f72176adbd75,18c079070ec3ecda655f6b096d4d8db5ceaf92ea..f5a3a3f117394e0c713b9deff1419f9f02fba415
@@@ -491,7 -491,7 +491,8 @@@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM
        .map_io         = omap3_map_io,
        .init_early     = am35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = am3517_evm_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 5a66480feed099f0463209c05f194b280a69f5ac,75c731c45b2df364c7fb88e4cd5e319ed226de96..ac773829941f487493f4ce0592dfa787592211a9
@@@ -354,7 -354,7 +354,8 @@@ MACHINE_START(OMAP_APOLLON, "OMAP24xx A
        .map_io         = omap242x_map_io,
        .init_early     = omap2420_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = omap_apollon_init,
        .timer          = &omap2_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 510b6a2ff0fa3c3675d81f54374e58bc89d41e62,c3402cdf0bac212b63dff4c87897b5f0c165ada3..1545102d1f9b2b5a8471785aadfe463f84185d30
@@@ -634,9 -634,9 +634,10 @@@ MACHINE_START(CM_T35, "Compulab CM-T35"
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = cm_t35_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  
  MACHINE_START(CM_T3730, "Compulab CM-T3730")
        .map_io         = omap3_map_io,
        .init_early     = omap3630_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = cm_t3730_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index efc5cedb1fbb86f51c20aeacaf5775eea772bd27,0b06ac3d440b4c8c55c7046c266b7fcaf8f91c11..f36d694d21590e069aa390a66eb56024d113d8f7
@@@ -299,7 -299,7 +299,8 @@@ MACHINE_START(CM_T3517, "Compulab CM-T3
        .map_io         = omap3_map_io,
        .init_early     = am35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = cm_t3517_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index d81ea7fa75ef6f59425d1f44c05af46a6ea339d0,519e5f9d491cb30d43c467c1d6ed7f590c8f97f0..e873063f4fdaf4cac7fffe5d18ca718a79cb84fe
@@@ -660,7 -660,7 +660,8 @@@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = devkit8000_init,
        .timer          = &omap3_secure_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 63b54163b99365d32fcdaf3b489ca276b94c4d2f,f462d8c65bc4875b7b2699e9a5dce4d3d8cde159..f8c5b2cc7c9c228c14847b16ca3d9f98eaa35426
@@@ -106,6 -106,7 +106,7 @@@ DT_MACHINE_START(OMAP242X_DT, "Generic 
        .init_machine   = omap_generic_init,
        .timer          = &omap2_timer,
        .dt_compat      = omap242x_boards_compat,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  #endif
  
@@@ -121,10 -122,10 +122,11 @@@ DT_MACHINE_START(OMAP243X_DT, "Generic 
        .map_io         = omap243x_map_io,
        .init_early     = omap2430_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = omap_generic_init,
        .timer          = &omap2_timer,
        .dt_compat      = omap243x_boards_compat,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  #endif
  
@@@ -143,6 -144,7 +145,7 @@@ DT_MACHINE_START(OMAP3_DT, "Generic OMA
        .init_machine   = omap3_init,
        .timer          = &omap3_timer,
        .dt_compat      = omap3_boards_compat,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  #endif
  
@@@ -161,5 -163,6 +164,6 @@@ DT_MACHINE_START(OMAP4_DT, "Generic OMA
        .init_machine   = omap4_init,
        .timer          = &omap4_timer,
        .dt_compat      = omap4_boards_compat,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  #endif
index ec4018362e8ea3f9e8a1d937e9ca0b2f92ccaf59,34ccde484fa61eed35644ecc193d984df59b692c..54af800d143c0e261b4acd6548103c6b3c08634f
@@@ -396,7 -396,7 +396,8 @@@ MACHINE_START(OMAP_H4, "OMAP2420 H4 boa
        .map_io         = omap242x_map_io,
        .init_early     = omap2420_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = omap_h4_init,
        .timer          = &omap2_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 5949f6ae3edf6038cdf1c4d46798924e09da2b92,e1850d555616bd2ebaa7e0e3ae834d7b9b5566ad..a59ace0ed560a57cdf1009cd15d596b94d71c76d
@@@ -672,9 -672,9 +672,10 @@@ MACHINE_START(IGEP0020, "IGEP v2 board"
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = igep_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  
  MACHINE_START(IGEP0030, "IGEP OMAP3 module")
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = igep_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 13bde0e6693463a61610eba0749ad2315571e119,84bbdd6e5aff7c0b8628446f6feac9736b0567c1..2d2a61f7dcbf8e3d799fee8054a39011d94ab603
@@@ -434,7 -434,7 +434,8 @@@ MACHINE_START(OMAP_LDP, "OMAP LDP board
        .map_io         = omap3_map_io,
        .init_early     = omap3430_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_ldp_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index bebd3d84365eec43e34eb5f786b1956c27e0a15b,cc1dd541224a8fb096862f5a62a8a77ab6c5244c..cef2cf1c0b8d9affe9afdedcaa16376b1caab783
@@@ -689,9 -689,9 +689,10 @@@ MACHINE_START(NOKIA_N800, "Nokia N800"
        .map_io         = omap242x_map_io,
        .init_early     = omap2420_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = n8x0_init_machine,
        .timer          = &omap2_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  
  MACHINE_START(NOKIA_N810, "Nokia N810")
        .map_io         = omap242x_map_io,
        .init_early     = omap2420_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = n8x0_init_machine,
        .timer          = &omap2_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  
  MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
        .map_io         = omap242x_map_io,
        .init_early     = omap2420_init_early,
        .init_irq       = omap2_init_irq,
 +      .handle_irq     = omap2_intc_handle_irq,
        .init_machine   = n8x0_init_machine,
        .timer          = &omap2_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index c34f56588284bfe00deff8c0ca6d19d36245395d,bb6031f6dcb6f4ebf12d8f4bd71f684adc25c226..7ffcd2839e7ba872d872e0a53476b2e95832c2a2
@@@ -559,7 -559,7 +559,8 @@@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beag
        .map_io         = omap3_map_io,
        .init_early     = omap3_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap3_beagle_init,
        .timer          = &omap3_secure_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index f11bc444e7befeddacc57b6f24ceef9fff5f446f,60912e4732531961913e2430c85581dd19d31d1c..003fe34c934311251452ba4af1efc20382dbbdb6
@@@ -681,7 -681,7 +681,8 @@@ MACHINE_START(OMAP3EVM, "OMAP3 EVM"
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap3_evm_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 5fa6bad9574ee812aeed2579e42c40942600b1eb,7ecf04a3ff1db63c5bbce743ad1e29c5512dfcf4..4198dd017d8fdfde7fd00b2a8a00d5f9d7e766fb
@@@ -208,9 -208,9 +208,10 @@@ MACHINE_START(OMAP3_TORPEDO, "Logic OMA
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap3logic_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  
  MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap3logic_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index ef315c585b752e7c0c845fac37bd6dbbb8bc52de,7071a2473a6b0cbdd5eb83c04a4b63efa1eeee53..1644b73017fcafbdc0e7b87a503ac35f92e8f992
@@@ -606,7 -606,7 +606,8 @@@ MACHINE_START(OMAP3_PANDORA, "Pandora H
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap3pandora_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index b21d70a2e4a7229efae9a754bb1ab37f63438efe,6e47987d989b98c4b0de9cf8ec2e8a728d549615..cb089a46f62f691cceec4c20f9f035111dded5a3
@@@ -454,7 -454,7 +454,8 @@@ MACHINE_START(SBC3530, "OMAP3 STALKER"
        .map_io                 = omap3_map_io,
        .init_early             = omap35xx_init_early,
        .init_irq               = omap3_init_irq,
 +      .handle_irq             = omap3_intc_handle_irq,
        .init_machine           = omap3_stalker_init,
        .timer                  = &omap3_secure_timer,
+       .restart                = omap_prcm_restart,
  MACHINE_END
index 18cd340f9b7bfb232937404167ed53993676de89,5bb590a40f2bbed16c6c67ab641b5dc07ba73486..a0b851aafccad1bc87d900d9474cfa689e8cf39d
@@@ -381,7 -381,7 +381,8 @@@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbo
        .map_io         = omap3_map_io,
        .init_early     = omap3430_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap3_touchbook_init,
        .timer          = &omap3_secure_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index b6f114436dbc74bb93d09300deef50db59b57c52,955cbee91b4624044245beaa6f39920b7c7e24e3..8b06c6a60d02767819f4cdb833f72f3f6471c580
@@@ -30,7 -30,6 +30,7 @@@
  #include <linux/wl12xx.h>
  
  #include <mach/hardware.h>
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
@@@ -577,7 -576,7 +577,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,
        .timer          = &omap4_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 60a61ea759bf4262b3fd7e529650bf91a0118157,c14d78129999a764fcae3c64c42860e208540e0e..52c0cef77165cb2cbc8a658d8fd63b260ec5662a
@@@ -562,7 -562,7 +562,8 @@@ MACHINE_START(OVERO, "Gumstix Overo"
        .map_io         = omap3_map_io,
        .init_early     = omap35xx_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = overo_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index a79d49e3fe09a2442ee59debb5ace8480a677a6c,0c67ecc244d688dc255c86fd2bc3f3db0dcecf0b..8678b386c6a2ab8e7a0b664546f837eb9966d36f
@@@ -149,7 -149,7 +149,8 @@@ MACHINE_START(NOKIA_RM680, "Nokia RM-68
        .map_io         = omap3_map_io,
        .init_early     = omap3630_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = rm680_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 4e3c0965edf3d0a39df68505d3bc3cd30af721ea,c3e716ad2b513bd34ad1b3d3d535c4477f9aafa6..27f01f051dfff07135762b216621eabbc6bf1046
@@@ -127,7 -127,7 +127,8 @@@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 
        .map_io         = omap3_map_io,
        .init_early     = omap3430_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = rx51_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 70e5b54a2115ec3adfbaa6746e619f28ccb8655a,68d6f1c875b816f41739d94c538150f52e03692d..5c20bcc57f2b951d50fe2bef11080b36e9729a36
@@@ -135,9 -135,9 +135,10 @@@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 b
        .map_io         = omap3_map_io,
        .init_early     = omap3430_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_zoom_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
  
  MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
        .map_io         = omap3_map_io,
        .init_early     = omap3630_init_early,
        .init_irq       = omap3_init_irq,
 +      .handle_irq     = omap3_intc_handle_irq,
        .init_machine   = omap_zoom_init,
        .timer          = &omap3_timer,
+       .restart        = omap_prcm_restart,
  MACHINE_END
index 012bac7d56a593c5234788dac459df27a4bb92cf,1df1b396fc3bf2108f97be9478e5ebea9e1ca091..cda888a2e635189f5321218239193b8de6bb5001
@@@ -84,6 -84,7 +84,7 @@@ void omap3_init_early(void);  /* Do not 
  void am35xx_init_early(void);
  void ti816x_init_early(void);
  void omap4430_init_early(void);
+ void omap_prcm_restart(char, const char *);
  
  /*
   * IO bases for various OMAP processors
@@@ -153,8 -154,6 +154,8 @@@ void omap_intc_restore_context(void)
  void omap3_intc_suspend(void);
  void omap3_intc_prepare_idle(void);
  void omap3_intc_resume_idle(void);
 +void omap2_intc_handle_irq(struct pt_regs *regs);
 +void omap3_intc_handle_irq(struct pt_regs *regs);
  
  /*
   * wfi used in low power code. Directly opcode is used instead
  extern void __iomem *l2cache_base;
  #endif
  
 -extern void __iomem *gic_dist_base_addr;
 -
  extern void __init gic_init_irq(void);
  extern void omap_smc1(u32 fn, u32 arg);
  
index fbf66ea8c77fec7696e1a1bf57e5840865a95963,62c156b20ccd173fa204a301b87685f6a90b4e19..5d6408745582b1341845a5b6ccb76f54e11ca8b9
@@@ -178,7 -178,7 +178,7 @@@ static struct hw_pci qnap_ts209_pci __i
  
  static int __init qnap_ts209_pci_init(void)
  {
 -      if (machine_is_ts_x09())
 +      if (machine_is_ts209())
                pci_common_init(&qnap_ts209_pci);
  
        return 0;
@@@ -329,4 -329,5 +329,5 @@@ MACHINE_START(TS209, "QNAP TS-109/TS-20
        .init_irq       = orion5x_init_irq,
        .timer          = &orion5x_timer,
        .fixup          = tag_fixup_mem32,
+       .restart        = orion5x_restart,
  MACHINE_END
index 4b81f59a4cbaf5aebbac8c1d55980d9b4dd45618,5e25e1783d4fc5db5bb41858167ec0dbb87b046e..82514f5c38f1588c4bea4848749428079c858df8
@@@ -307,7 -307,7 +307,7 @@@ static inline void balloon3_mmc_init(vo
  /******************************************************************************
   * USB Gadget
   ******************************************************************************/
 -#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
 +#if defined(CONFIG_USB_PXA27X)||defined(CONFIG_USB_PXA27X_MODULE)
  static void balloon3_udc_command(int cmd)
  {
        if (cmd == PXA2XX_UDC_CMD_CONNECT)
@@@ -829,4 -829,5 +829,5 @@@ MACHINE_START(BALLOON3, "Balloon3"
        .timer          = &pxa_timer,
        .init_machine   = balloon3_init,
        .atag_offset    = 0x100,
+       .restart        = pxa_restart,
  MACHINE_END
index d23b92b80488257db2ef2bf4af458fc4060feaf8,6cc3caa161e480b5f91bfc3731fcfd1ff8c241a2..5028f2300d508f7b36360ec147ce219dcaf4f15c
@@@ -146,7 -146,7 +146,7 @@@ static void __init colibri_pxa320_init_
  static inline void __init colibri_pxa320_init_eth(void) {}
  #endif /* CONFIG_AX88796 */
  
 -#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
 +#if defined(CONFIG_USB_PXA27X)||defined(CONFIG_USB_PXA27X_MODULE)
  static struct gpio_vbus_mach_info colibri_pxa320_gpio_vbus_info = {
        .gpio_vbus              = mfp_to_gpio(MFP_PIN_GPIO96),
        .gpio_pullup            = -1,
@@@ -259,5 -259,6 +259,6 @@@ MACHINE_START(COLIBRI320, "Toradex Coli
        .init_irq       = pxa3xx_init_irq,
        .handle_irq     = pxa3xx_handle_irq,
        .timer          = &pxa_timer,
+       .restart        = pxa_restart,
  MACHINE_END
  
index ffdd70dad327dd135f1a2d5fc36a3cde45f2f86b,03e5e0b7472853c49fe7b8659ffe6f32df45b166..ac3b1cef47519ed4c431cc2b576bfc76ebcda792
@@@ -106,7 -106,7 +106,7 @@@ static void __init gumstix_mmc_init(voi
  }
  #endif
  
 -#ifdef CONFIG_USB_GADGET_PXA25X
 +#ifdef CONFIG_USB_PXA25X
  static struct gpio_vbus_mach_info gumstix_udc_info = {
        .gpio_vbus              = GPIO_GUMSTIX_USB_GPIOn,
        .gpio_pullup            = GPIO_GUMSTIX_USB_GPIOx,
@@@ -239,4 -239,5 +239,5 @@@ MACHINE_START(GUMSTIX, "Gumstix"
        .handle_irq     = pxa25x_handle_irq,
        .timer          = &pxa_timer,
        .init_machine   = gumstix_init,
+       .restart        = pxa_restart,
  MACHINE_END
index 2c24c67fd92b6d863fc2e534b6ad9f15b7daaaf7,e4dd719023751d747da6b76b311240bf10c050d6..29b51b40f09df49a60a2ab07d91122f0f840ed74
@@@ -338,7 -338,7 +338,7 @@@ static inline void palmtc_mkp_init(void
  /******************************************************************************
   * UDC
   ******************************************************************************/
 -#if defined(CONFIG_USB_GADGET_PXA25X)||defined(CONFIG_USB_GADGET_PXA25X_MODULE)
 +#if defined(CONFIG_USB_PXA25X)||defined(CONFIG_USB_PXA25X_MODULE)
  static struct gpio_vbus_mach_info palmtc_udc_info = {
        .gpio_vbus              = GPIO_NR_PALMTC_USB_DETECT_N,
        .gpio_vbus_inverted     = 1,
@@@ -542,5 -542,6 +542,6 @@@ MACHINE_START(PALMTC, "Palm Tungsten|C"
        .init_irq       = pxa25x_init_irq,
        .handle_irq     = pxa25x_handle_irq,
        .timer          = &pxa_timer,
-       .init_machine   = palmtc_init
+       .init_machine   = palmtc_init,
+       .restart        = pxa_restart,
  MACHINE_END
index ca0c6615028c42aa0414cc2e76de4a0a29c83918,d2bd67724179522f642d0c2468d45182f8139733..fed5fb08871490e58e6887b92c0e4fa404321053
@@@ -343,7 -343,7 +343,7 @@@ static inline void vpac270_uhc_init(voi
  /******************************************************************************
   * USB Gadget
   ******************************************************************************/
 -#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
 +#if defined(CONFIG_USB_PXA27X)||defined(CONFIG_USB_PXA27X_MODULE)
  static struct gpio_vbus_mach_info vpac270_gpio_vbus_info = {
        .gpio_vbus              = GPIO41_VPAC270_UDC_DETECT,
        .gpio_pullup            = -1,
@@@ -721,5 -721,6 +721,6 @@@ MACHINE_START(VPAC270, "Voipac PXA270"
        .init_irq       = pxa27x_init_irq,
        .handle_irq     = pxa27x_handle_irq,
        .timer          = &pxa_timer,
-       .init_machine   = vpac270_init
+       .init_machine   = vpac270_init,
+       .restart        = pxa_restart,
  MACHINE_END
index 1ca944aea7f8800cee56daa23bf545d4d6a5b595,4b796241dd76e1d75f06cae835aa8bf2a68bab43..f92a920cf507c1b411d3503daced441bcfe8b576
@@@ -91,8 -91,8 +91,8 @@@ static struct map_desc realview_eb_io_d
  
  static struct map_desc realview_eb11mp_io_desc[] __initdata = {
        {
 -              .virtual        = IO_ADDRESS(REALVIEW_EB11MP_GIC_CPU_BASE),
 -              .pfn            = __phys_to_pfn(REALVIEW_EB11MP_GIC_CPU_BASE),
 +              .virtual        = IO_ADDRESS(REALVIEW_EB11MP_SCU_BASE),
 +              .pfn            = __phys_to_pfn(REALVIEW_EB11MP_SCU_BASE),
                .length         = SZ_4K,
                .type           = MT_DEVICE,
        }, {
@@@ -415,7 -415,7 +415,7 @@@ static struct sys_timer realview_eb_tim
        .init           = realview_eb_timer_init,
  };
  
- static void realview_eb_reset(char mode)
+ static void realview_eb_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
        void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
        __raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
        if (core_tile_eb11mp())
                __raw_writel(0x0008, reset_ctrl);
+       dsb();
  }
  
  static void __init realview_eb_init(void)
  #ifdef CONFIG_LEDS
        leds_event = realview_leds_event;
  #endif
-       realview_reset = realview_eb_reset;
  }
  
  MACHINE_START(REALVIEW_EB, "ARM-RealView EB")
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
        .timer          = &realview_eb_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_eb_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
  #endif
+       .restart        = realview_eb_restart,
  MACHINE_END
index bd8fec8b20d96b06db52f0525035320c8977afab,09e630bfa4462435b8efd014c107eab06249ebc0..8ec37b29e0fa22bd0b048ab8a0a25c0f234c6f85
@@@ -336,12 -336,13 +336,13 @@@ static struct sys_timer realview_pb1176
        .init           = realview_pb1176_timer_init,
  };
  
- static void realview_pb1176_reset(char mode)
+ static void realview_pb1176_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
        void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
        __raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
        __raw_writel(REALVIEW_PB1176_SYS_SOFT_RESET, reset_ctrl);
+       dsb();
  }
  
  static void realview_pb1176_fixup(struct tag *tags, char **from,
@@@ -381,7 -382,6 +382,6 @@@ static void __init realview_pb1176_init
  #ifdef CONFIG_LEDS
        leds_event = realview_leds_event;
  #endif
-       realview_reset = realview_pb1176_reset;
  }
  
  MACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176")
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
        .timer          = &realview_pb1176_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pb1176_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
  #endif
+       .restart        = realview_pb1176_restart,
  MACHINE_END
index fa73ba81a44930c9b733db4540ee7f45f9478f3c,e38e85b6472daf418de24e2f915ea2fb92dd0f4f..f035fda8b619d0000ac539d82b700742e944e707
@@@ -315,7 -315,7 +315,7 @@@ static struct sys_timer realview_pb11mp
        .init           = realview_pb11mp_timer_init,
  };
  
- static void realview_pb11mp_reset(char mode)
+ static void realview_pb11mp_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
        void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
        __raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
        __raw_writel(0x0000, reset_ctrl);
        __raw_writel(0x0004, reset_ctrl);
+       dsb();
  }
  
  static void __init realview_pb11mp_init(void)
  #ifdef CONFIG_LEDS
        leds_event = realview_leds_event;
  #endif
-       realview_reset = realview_pb11mp_reset;
  }
  
  MACHINE_START(REALVIEW_PB11MP, "ARM-RealView PB11MPCore")
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
        .timer          = &realview_pb11mp_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pb11mp_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
  #endif
+       .restart        = realview_pb11mp_restart,
  MACHINE_END
index 6e5f2b9ddb7e384f11b3be17a8ad2a1a3488df95,04d1e4953090adcd905e6fc292ef231ad85a83ee..0109c8b440ccd339eb458821119f064fce06b899
@@@ -271,7 -271,7 +271,7 @@@ static struct sys_timer realview_pba8_t
        .init           = realview_pba8_timer_init,
  };
  
- static void realview_pba8_reset(char mode)
+ static void realview_pba8_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
        void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
        __raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
        __raw_writel(0x0000, reset_ctrl);
        __raw_writel(0x0004, reset_ctrl);
+       dsb();
  }
  
  static void __init realview_pba8_init(void)
  #ifdef CONFIG_LEDS
        leds_event = realview_leds_event;
  #endif
-       realview_reset = realview_pba8_reset;
  }
  
  MACHINE_START(REALVIEW_PBA8, "ARM-RealView PB-A8")
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
        .timer          = &realview_pba8_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pba8_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
  #endif
+       .restart        = realview_pba8_restart,
  MACHINE_END
index 7aabc21af01cbda5e05aeaacb9bb537ecefae5a3,d515452323ab837c3082ec4075624402f30ce3b7..0194b3e26dc1146293dce362d5aed04e6b0f6df0
@@@ -98,8 -98,8 +98,8 @@@ static struct map_desc realview_pbx_io_
  
  static struct map_desc realview_local_io_desc[] __initdata = {
        {
 -              .virtual        = IO_ADDRESS(REALVIEW_PBX_TILE_GIC_CPU_BASE),
 -              .pfn            = __phys_to_pfn(REALVIEW_PBX_TILE_GIC_CPU_BASE),
 +              .virtual        = IO_ADDRESS(REALVIEW_PBX_TILE_SCU_BASE),
 +              .pfn            = __phys_to_pfn(REALVIEW_PBX_TILE_SCU_BASE),
                .length         = SZ_4K,
                .type           = MT_DEVICE,
        }, {
@@@ -339,7 -339,7 +339,7 @@@ static void realview_pbx_fixup(struct t
  #endif
  }
  
- static void realview_pbx_reset(char mode)
+ static void realview_pbx_restart(char mode, const char *cmd)
  {
        void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL);
        void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK);
        __raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl);
        __raw_writel(0x00F0, reset_ctrl);
        __raw_writel(0x00F4, reset_ctrl);
+       dsb();
  }
  
  static void __init realview_pbx_init(void)
  #ifdef CONFIG_LEDS
        leds_event = realview_leds_event;
  #endif
-       realview_reset = realview_pbx_reset;
  }
  
  MACHINE_START(REALVIEW_PBX, "ARM-RealView PBX")
        .init_early     = realview_init_early,
        .init_irq       = gic_init_irq,
        .timer          = &realview_pbx_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = realview_pbx_init,
  #ifdef CONFIG_ZONE_DMA
        .dma_zone_size  = SZ_256M,
  #endif
+       .restart        = realview_pbx_restart,
  MACHINE_END
index 61068ba67923536ce8604b96cc4a4b1d595bdd16,8b429f05b6133612e7ce43467392810674587a6a..3462ab9d612231b5107cad2787ffd67c7fdc2632
@@@ -11,7 -11,6 +11,7 @@@
   * warranty of any kind, whether express or implied.
   */
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach-types.h>
  #include <mach/generic.h>
@@@ -68,7 -67,7 +68,8 @@@ MACHINE_START(SPEAR300, "ST-SPEAR300-EV
        .atag_offset    =       0x100,
        .map_io         =       spear3xx_map_io,
        .init_irq       =       spear3xx_init_irq,
 +      .handle_irq     =       vic_handle_irq,
        .timer          =       &spear3xx_timer,
        .init_machine   =       spear300_evb_init,
+       .restart        =       spear_restart,
  MACHINE_END
index 7903abe92bf6f9c6c2029c6693c5789f5b0698cd,a11d6ead0aed75d7fa06b45d9f581632ffa9e680..f92c4993f65ae5477d69e11cb2a301cf9c7ab240
@@@ -11,7 -11,6 +11,7 @@@
   * warranty of any kind, whether express or implied.
   */
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach-types.h>
  #include <mach/generic.h>
@@@ -74,7 -73,7 +74,8 @@@ MACHINE_START(SPEAR310, "ST-SPEAR310-EV
        .atag_offset    =       0x100,
        .map_io         =       spear3xx_map_io,
        .init_irq       =       spear3xx_init_irq,
 +      .handle_irq     =       vic_handle_irq,
        .timer          =       &spear3xx_timer,
        .init_machine   =       spear310_evb_init,
+       .restart        =       spear_restart,
  MACHINE_END
index e9751f970933078d462f3382330b5516c642c6b5,4239a70686c5a049841e04165fde71b3520477f8..105334ab70213e85a4f3c8f8909e5cb634879921
@@@ -11,7 -11,6 +11,7 @@@
   * warranty of any kind, whether express or implied.
   */
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach-types.h>
  #include <mach/generic.h>
@@@ -72,7 -71,7 +72,8 @@@ MACHINE_START(SPEAR320, "ST-SPEAR320-EV
        .atag_offset    =       0x100,
        .map_io         =       spear3xx_map_io,
        .init_irq       =       spear3xx_init_irq,
 +      .handle_irq     =       vic_handle_irq,
        .timer          =       &spear3xx_timer,
        .init_machine   =       spear320_evb_init,
+       .restart        =       spear_restart,
  MACHINE_END
index ff139ed0a61ede2037bd6fcd5f78821aa5c93311,0a16559ba26421510f871509c58dd2f30f1707d7..c6e4254741cc71348696369e494ab79c86494060
@@@ -11,7 -11,6 +11,7 @@@
   * warranty of any kind, whether express or implied.
   */
  
 +#include <asm/hardware/vic.h>
  #include <asm/mach/arch.h>
  #include <asm/mach-types.h>
  #include <mach/generic.h>
@@@ -47,7 -46,7 +47,8 @@@ MACHINE_START(SPEAR600, "ST-SPEAR600-EV
        .atag_offset    =       0x100,
        .map_io         =       spear6xx_map_io,
        .init_irq       =       spear6xx_init_irq,
 +      .handle_irq     =       vic_handle_irq,
        .timer          =       &spear6xx_timer,
        .init_machine   =       spear600_evb_init,
+       .restart        =       spear_restart,
  MACHINE_END
index f6f03ce340fcafd4a0f72dff707ad3764a6321e2,a00713cbaa24a317f1b1f5edf0283c325b0d4ad9..e417a8383dbbcb4feae0dfdd2f59d956d8faeaa3
@@@ -32,7 -32,6 +32,7 @@@
  #include <linux/i2c.h>
  #include <linux/i2c-tegra.h>
  
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
@@@ -102,13 -101,6 +102,13 @@@ static void __init tegra_dt_init(void
  
        tegra_clk_init_from_table(tegra_dt_clk_init_table);
  
 +      /*
 +       * Finished with the static registrations now; fill in the missing
 +       * devices
 +       */
 +      of_platform_populate(NULL, tegra_dt_match_table,
 +                              tegra20_auxdata_lookup, NULL);
 +
        for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) {
                if (of_machine_is_compatible(pinmux_configs[i].machine)) {
                        pinmux_configs[i].init();
  
        WARN(i == ARRAY_SIZE(pinmux_configs),
                "Unknown platform! Pinmuxing not initialized\n");
 -
 -      /*
 -       * Finished with the static registrations now; fill in the missing
 -       * devices
 -       */
 -      of_platform_populate(NULL, tegra_dt_match_table, tegra20_auxdata_lookup, NULL);
  }
  
  static const char * tegra_dt_board_compat[] = {
@@@ -131,8 -129,8 +131,9 @@@ DT_MACHINE_START(TEGRA_DT, "nVidia Tegr
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_dt_init,
+       .restart        = tegra_assert_system_reset,
        .dt_compat      = tegra_dt_board_compat,
  MACHINE_END
index fd190a8dc6654c7e8fb200d85d596ffd15c26f2b,7eaa52de756cbfe128b44ebfcd8fa0c8d15d40a7..70ee674131f9fee9d77a189c12fafbb0dbd3af65
@@@ -31,7 -31,6 +31,7 @@@
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
 +#include <asm/hardware/gic.h>
  #include <asm/setup.h>
  
  #include <mach/tegra_wm8903_pdata.h>
@@@ -188,7 -187,7 +188,8 @@@ MACHINE_START(HARMONY, "harmony"
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_harmony_init,
+       .restart        = tegra_assert_system_reset,
  MACHINE_END
index 0b7e1cfee70dacb03f9810a5f3ca90a316238737,28c97e3174073f6db4644342b11c5304c7dbbc51..33d6205ad307c07cafb34296444458c742e66419
@@@ -29,7 -29,6 +29,7 @@@
  #include <linux/gpio.h>
  #include <linux/rfkill-gpio.h>
  
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/time.h>
@@@ -191,7 -190,7 +191,8 @@@ MACHINE_START(PAZ00, "Toshiba AC100 / D
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_paz00_init,
+       .restart        = tegra_assert_system_reset,
  MACHINE_END
index 7328379b1356b0fd8ac54d5f268bae71d7fdf11e,9b2eca1f5283c0c5c285a1942952ee971a6b8cd5..c1599eb8e0cb0acb791551f9b90a0d1f124da1e1
@@@ -34,7 -34,6 +34,7 @@@
  
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
 +#include <asm/hardware/gic.h>
  
  #include "board.h"
  #include "board-seaboard.h"
@@@ -285,9 -284,9 +285,10 @@@ MACHINE_START(SEABOARD, "seaboard"
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_seaboard_init,
+       .restart        = tegra_assert_system_reset,
  MACHINE_END
  
  MACHINE_START(KAEN, "kaen")
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_kaen_init,
+       .restart        = tegra_assert_system_reset,
  MACHINE_END
  
  MACHINE_START(WARIO, "wario")
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_wario_init,
+       .restart        = tegra_assert_system_reset,
  MACHINE_END
index 60a36a2e0be19696c9a53e96b1afaf716c93fee5,1fa9e48e8ec627ecad7889676e2901b9686a91ad..c242314a1db5e55e2a6552da18ef99497f100a7f
@@@ -26,7 -26,6 +26,7 @@@
  #include <linux/i2c.h>
  #include <linux/gpio.h>
  
 +#include <asm/hardware/gic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/setup.h>
@@@ -177,7 -176,7 +177,8 @@@ MACHINE_START(TRIMSLICE, "trimslice"
        .map_io         = tegra_map_common_io,
        .init_early     = tegra_init_early,
        .init_irq       = tegra_init_irq,
 +      .handle_irq     = gic_handle_irq,
        .timer          = &tegra_timer,
        .init_machine   = tegra_trimslice_init,
+       .restart        = tegra_assert_system_reset,
  MACHINE_END
index 4a4fd334eb6e5fb081ae81f99422ec9c1f440a0b,a75c9b83974880926ae84b1fc9920c89b5ec70d9..def45bda29327eb14eb97cd3712957814b0f9870
@@@ -19,7 -19,6 +19,7 @@@
  #include <linux/io.h>
  #include <mach/hardware.h>
  #include <mach/platform.h>
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/memory.h>
@@@ -50,7 -49,7 +50,8 @@@ MACHINE_START(U300, MACH_U300_STRING
        .atag_offset    = BOOT_PARAMS_OFFSET,
        .map_io         = u300_map_io,
        .init_irq       = u300_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &u300_timer,
        .init_machine   = u300_init_machine,
+       .restart        = u300_restart,
  MACHINE_END
index 4d8dfc15f3e6d21fcc347cebb7a3f15d2866747f,b7a6a4b1a1dec5a341d8e9649bdf1c4f5426fb3d..cbcda61162d32182a915fa25890d76d981c1ba27
@@@ -141,6 -141,11 +141,6 @@@ static struct map_desc versatile_io_des
        },
  #ifdef CONFIG_MACH_VERSATILE_AB
        {
 -              .virtual        =  IO_ADDRESS(VERSATILE_GPIO0_BASE),
 -              .pfn            = __phys_to_pfn(VERSATILE_GPIO0_BASE),
 -              .length         = SZ_4K,
 -              .type           = MT_DEVICE
 -      }, {
                .virtual        =  IO_ADDRESS(VERSATILE_IB2_BASE),
                .pfn            = __phys_to_pfn(VERSATILE_IB2_BASE),
                .length         = SZ_64M,
@@@ -740,6 -745,19 +740,19 @@@ static void versatile_leds_event(led_ev
  }
  #endif        /* CONFIG_LEDS */
  
+ void versatile_restart(char mode, const char *cmd)
+ {
+       void __iomem *sys = __io_address(VERSATILE_SYS_BASE);
+       u32 val;
+       val = __raw_readl(sys + VERSATILE_SYS_RESETCTL_OFFSET);
+       val |= 0x105;
+       __raw_writel(0xa05f, sys + VERSATILE_SYS_LOCK_OFFSET);
+       __raw_writel(val, sys + VERSATILE_SYS_RESETCTL_OFFSET);
+       __raw_writel(0, sys + VERSATILE_SYS_LOCK_OFFSET);
+ }
  /* Early initializations */
  void __init versatile_init_early(void)
  {
index c83a1f379f7aba55d15adcf19e3caf2610760425,f1277ac92fac515f81377df735b81862cbc48b4a..63b8dd2b9f4d297132605432af9c17363870d517
@@@ -27,7 -27,6 +27,7 @@@
  
  #include <mach/hardware.h>
  #include <asm/irq.h>
 +#include <asm/hardware/vic.h>
  #include <asm/mach-types.h>
  
  #include <asm/mach/arch.h>
@@@ -40,7 -39,7 +40,8 @@@ MACHINE_START(VERSATILE_AB, "ARM-Versat
        .map_io         = versatile_map_io,
        .init_early     = versatile_init_early,
        .init_irq       = versatile_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &versatile_timer,
        .init_machine   = versatile_init,
+       .restart        = versatile_restart,
  MACHINE_END
index f4d1e0f072c8466c49955e11b182a79f7766cbf8,f48f2e4b667dee300bcdc4d8668f4d2b13a85f6e..ae5ad3c8f3dd0184f0a4259986a9ee8131558703
@@@ -24,7 -24,6 +24,7 @@@
  #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>
  
@@@ -46,8 -45,8 +46,9 @@@ DT_MACHINE_START(VERSATILE_PB, "ARM-Ver
        .map_io         = versatile_map_io,
        .init_early     = versatile_init_early,
        .init_irq       = versatile_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &versatile_timer,
        .init_machine   = versatile_dt_init,
        .dt_compat      = versatile_dt_match,
+       .restart        = versatile_restart,
  MACHINE_END
index 4d31eeb6c10136023c272bd10d9a562517e190ba,839bea633821c399260a0775777b5db345902efd..7aab79b665e71ee8bc57899817e29c76db046ac7
@@@ -28,7 -28,6 +28,7 @@@
  #include <linux/io.h>
  
  #include <mach/hardware.h>
 +#include <asm/hardware/vic.h>
  #include <asm/irq.h>
  #include <asm/mach-types.h>
  
@@@ -108,7 -107,7 +108,8 @@@ MACHINE_START(VERSATILE_PB, "ARM-Versat
        .map_io         = versatile_map_io,
        .init_early     = versatile_init_early,
        .init_irq       = versatile_init_irq,
 +      .handle_irq     = vic_handle_irq,
        .timer          = &versatile_timer,
        .init_machine   = versatile_pb_init,
+       .restart        = versatile_restart,
  MACHINE_END
index 7aa07a8ce2323ff65606070a09cce2a338edd747,b9a465bd2d0ffb32af5c5f5e852489df20e4489c..6dd10e320ef68de0e16726cca8062bbc911cb6da
@@@ -23,7 -23,6 +23,7 @@@
  #include <asm/hardware/arm_timer.h>
  #include <asm/hardware/timer-sp.h>
  #include <asm/hardware/sp810.h>
 +#include <asm/hardware/gic.h>
  
  #include <mach/ct-ca9x4.h>
  #include <mach/motherboard.h>
@@@ -438,7 -437,6 +438,6 @@@ static void __init v2m_init(void
                amba_device_register(v2m_amba_devs[i], &iomem_resource);
  
        pm_power_off = v2m_power_off;
-       arm_pm_restart = v2m_restart;
  
        ct_desc->init_tile();
  }
@@@ -449,6 -447,6 +448,7 @@@ MACHINE_START(VEXPRESS, "ARM-Versatile 
        .init_early     = v2m_init_early,
        .init_irq       = v2m_init_irq,
        .timer          = &v2m_timer,
 +      .handle_irq     = gic_handle_irq,
        .init_machine   = v2m_init,
+       .restart        = v2m_restart,
  MACHINE_END
index 90f7153a8d78bb0473a9a2d5a78f51145d888a2a,f5aebfec4f2ad4c971b1e729878b82b2bba5c344..a99dc15a70f7955060bcc0ae5b7509efaa7922aa
@@@ -10,9 -10,11 +10,10 @@@ obj-$(CONFIG_ARCH_IOP32X) += i2c.
  obj-$(CONFIG_ARCH_IOP32X) += pci.o
  obj-$(CONFIG_ARCH_IOP32X) += setup.o
  obj-$(CONFIG_ARCH_IOP32X) += time.o
 -obj-$(CONFIG_ARCH_IOP32X) += io.o
  obj-$(CONFIG_ARCH_IOP32X) += cp6.o
  obj-$(CONFIG_ARCH_IOP32X) += adma.o
  obj-$(CONFIG_ARCH_IOP32X) += pmu.o
+ obj-$(CONFIG_ARCH_IOP32X) += restart.o
  
  # IOP33X
  obj-$(CONFIG_ARCH_IOP33X) += gpio.o
@@@ -20,9 -22,11 +21,10 @@@ obj-$(CONFIG_ARCH_IOP33X) += i2c.
  obj-$(CONFIG_ARCH_IOP33X) += pci.o
  obj-$(CONFIG_ARCH_IOP33X) += setup.o
  obj-$(CONFIG_ARCH_IOP33X) += time.o
 -obj-$(CONFIG_ARCH_IOP33X) += io.o
  obj-$(CONFIG_ARCH_IOP33X) += cp6.o
  obj-$(CONFIG_ARCH_IOP33X) += adma.o
  obj-$(CONFIG_ARCH_IOP33X) += pmu.o
+ obj-$(CONFIG_ARCH_IOP33X) += restart.o
  
  # IOP13XX
  obj-$(CONFIG_ARCH_IOP13XX) += cp6.o
index 6698cae942f78e21072a8fea8719c181313a16fd,5ad0497c92ff1a9414235b9aef6c709aab30c3fe..83cca9bcfc972729fd74fecc8ce1272189d04b6a
@@@ -71,8 -71,8 +71,8 @@@ extern int mx6q_clocks_init(void)
  extern struct platform_device *mxc_register_gpio(char *name, int id,
        resource_size_t iobase, resource_size_t iosize, int irq, int irq_high);
  extern void mxc_set_cpu_type(unsigned int type);
+ extern void mxc_restart(char, const char *);
  extern void mxc_arch_reset_init(void __iomem *);
- extern void mx51_efikamx_reset(void);
  extern int mx53_revision(void);
  extern int mx53_display_revision(void);
  
@@@ -85,10 -85,12 +85,10 @@@ enum mxc_cpu_pwr_mode 
  };
  
  extern void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode);
 -extern void (*imx_idle)(void);
  extern void imx_print_silicon_rev(const char *cpu, int srev);
  
  void avic_handle_irq(struct pt_regs *);
  void tzic_handle_irq(struct pt_regs *);
 -void gic_handle_irq(struct pt_regs *);
  
  #define imx1_handle_irq avic_handle_irq
  #define imx21_handle_irq avic_handle_irq
@@@ -121,6 -123,7 +121,7 @@@ static inline void imx_smp_prepare(void
  extern void imx_enable_cpu(int cpu, bool enable);
  extern void imx_set_cpu_jump(int cpu, void *jump_addr);
  extern void imx_src_init(void);
+ extern void imx_src_prepare_restart(void);
  extern void imx_gpc_init(void);
  extern void imx_gpc_pre_suspend(void);
  extern void imx_gpc_post_resume(void);
@@@ -131,5 -134,4 +132,5 @@@ extern void imx53_qsb_common_init(void)
  extern void imx53_smd_common_init(void);
  extern int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode);
  extern void imx6q_pm_init(void);
 +extern void imx6q_clock_map_io(void);
  #endif
index b9895d250167cf6b384d5cb1320e00e855537019,b9c71b409095db90ce3e3d0647a8ec23f76a0da4..13ad0df2e86065bf43cb8882fab90e4fed5b4957
  #ifndef __ASM_ARCH_MXC_SYSTEM_H__
  #define __ASM_ARCH_MXC_SYSTEM_H__
  
 -extern void (*imx_idle)(void);
 -
  static inline void arch_idle(void)
  {
 -      if (imx_idle != NULL)
 -              (imx_idle)();
 -      else
 -              cpu_do_idle();
 +      cpu_do_idle();
  }
  
- void arch_reset(char mode, const char *cmd);
  #endif /* __ASM_ARCH_MXC_SYSTEM_H__ */
index 7e5c76ea4466a425a49ba8e64f450403f58733ab,80de9e24d4cecb6d361f2a285fe6f151f11a3ce6..3599bf2cfd4f7a351717bb3abdd2f54160d4d712
@@@ -21,7 -21,6 +21,7 @@@
  #include <linux/io.h>
  #include <linux/err.h>
  #include <linux/delay.h>
 +#include <linux/module.h>
  
  #include <mach/hardware.h>
  #include <mach/common.h>
  #include <asm/system.h>
  #include <asm/mach-types.h>
  
 -void (*imx_idle)(void) = NULL;
  void __iomem *(*imx_ioremap)(unsigned long, size_t, unsigned int) = NULL;
 +EXPORT_SYMBOL_GPL(imx_ioremap);
  
  static void __iomem *wdog_base;
  
  /*
   * Reset the system. It is called by machine_restart().
   */
- void arch_reset(char mode, const char *cmd)
+ void mxc_restart(char mode, const char *cmd)
  {
        unsigned int wcr_enable;
  
- #ifdef CONFIG_MACH_MX51_EFIKAMX
-       if (machine_is_mx51_efikamx()) {
-               mx51_efikamx_reset();
-               return;
-       }
- #endif
        if (cpu_is_mx1()) {
                wcr_enable = (1 << 0);
        } else {