status = "disabled";
 };
 
-/include/ "am35xx-clocks.dtsi"
-/include/ "omap36xx-am35xx-omap3430es2plus-clocks.dtsi"
+#include "am35xx-clocks.dtsi"
+#include "omap36xx-am35xx-omap3430es2plus-clocks.dtsi"
+
+/* Preferred always-on timer for clocksource */
+&timer1_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               assigned-clocks = <&gpt1_fck>;
+               assigned-clock-parents = <&sys_ck>;
+       };
+};
+
+/* Preferred timer for clockevent */
+&timer2_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               assigned-clocks = <&gpt2_fck>;
+               assigned-clock-parents = <&sys_ck>;
+       };
+};
 
        phys = <0 &hsusb2_phy>;
 };
 
+/* Unusable as clocksource because of unreliable oscillator */
+&counter32k {
+       status = "disabled";
+};
+
+/* Unusable as clockevent because if unreliable oscillator, allow to idle */
+&timer1_target {
+       /delete-property/ti,no-reset-on-init;
+       /delete-property/ti,no-idle;
+       timer@0 {
+               /delete-property/ti,timer-alwon;
+       };
+};
+
+/* Preferred always-on timer for clocksource */
+&timer12_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               /* Always clocked by secure_32k_fck */
+       };
+};
+
+/* Preferred timer for clockevent */
+&timer2_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               assigned-clocks = <&gpt2_fck>;
+               assigned-clock-parents = <&sys_ck>;
+       };
+};
+
 &twl_gpio {
        ti,use-leds;
        /* pullups: BIT(1) */
 
                display2 = &tv0;
        };
 };
+
+/* Unusable as clocksource because of unreliable oscillator */
+&counter32k {
+       status = "disabled";
+};
+
+/* Unusable as clockevent because if unreliable oscillator, allow to idle */
+&timer1_target {
+       /delete-property/ti,no-reset-on-init;
+       /delete-property/ti,no-idle;
+       timer@0 {
+               /delete-property/ti,timer-alwon;
+       };
+};
+
+/* Preferred always-on timer for clocksource */
+&timer12_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               /* Always clocked by secure_32k_fck */
+       };
+};
+
+/* Preferred timer for clockevent */
+&timer2_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               assigned-clocks = <&gpt2_fck>;
+               assigned-clock-parents = <&sys_ck>;
+       };
+};
 
                        };
                };
 
-               counter32k: counter@48320000 {
-                       compatible = "ti,omap-counter32k";
-                       reg = <0x48320000 0x20>;
-                       ti,hwmods = "counter_32k";
+               target-module@48320000 {
+                       compatible = "ti,sysc-omap2", "ti,sysc";
+                       reg = <0x48320000 0x4>,
+                             <0x48320004 0x4>;
+                       reg-names = "rev", "sysc";
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>;
+                       clocks = <&wkup_32k_fck>, <&omap_32ksync_ick>;
+                       clock-names = "fck", "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x48320000 0x1000>;
+
+                       counter32k: counter@0 {
+                               compatible = "ti,omap-counter32k";
+                               reg = <0x0 0x20>;
+                       };
                };
 
                intc: interrupt-controller@48200000 {
                        dma-names = "rx";
                };
 
-               timer1: timer@48318000 {
-                       compatible = "ti,omap3430-timer";
-                       reg = <0x48318000 0x400>;
-                       interrupts = <37>;
-                       ti,hwmods = "timer1";
-                       ti,timer-alwon;
+               timer1_target: target-module@48318000 {
+                       compatible = "ti,sysc-omap2-timer", "ti,sysc";
+                       reg = <0x48318000 0x4>,
+                             <0x48318010 0x4>,
+                             <0x48318014 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY |
+                                        SYSC_OMAP2_EMUFREE |
+                                        SYSC_OMAP2_ENAWAKEUP |
+                                        SYSC_OMAP2_SOFTRESET |
+                                        SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       clocks = <&gpt1_fck>, <&gpt1_ick>;
+                       clock-names = "fck", "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x48318000 0x1000>;
+
+                       timer1: timer@0 {
+                               compatible = "ti,omap3430-timer";
+                               reg = <0x0 0x80>;
+                               clocks = <&gpt1_fck>;
+                               clock-names = "fck";
+                               interrupts = <37>;
+                               ti,timer-alwon;
+                       };
                };
 
-               timer2: timer@49032000 {
-                       compatible = "ti,omap3430-timer";
-                       reg = <0x49032000 0x400>;
-                       interrupts = <38>;
-                       ti,hwmods = "timer2";
+               timer2_target: target-module@49032000 {
+                       compatible = "ti,sysc-omap2-timer", "ti,sysc";
+                       reg = <0x49032000 0x4>,
+                             <0x49032010 0x4>,
+                             <0x49032014 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY |
+                                        SYSC_OMAP2_EMUFREE |
+                                        SYSC_OMAP2_ENAWAKEUP |
+                                        SYSC_OMAP2_SOFTRESET |
+                                        SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       clocks = <&gpt2_fck>, <&gpt2_ick>;
+                       clock-names = "fck", "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x49032000 0x1000>;
+
+                       timer2: timer@0 {
+                               compatible = "ti,omap3430-timer";
+                               reg = <0 0x400>;
+                               interrupts = <38>;
+                       };
                };
 
                timer3: timer@49034000 {
                        ti,timer-pwm;
                };
 
-               timer12: timer@48304000 {
-                       compatible = "ti,omap3430-timer";
-                       reg = <0x48304000 0x400>;
-                       interrupts = <95>;
-                       ti,hwmods = "timer12";
-                       ti,timer-alwon;
-                       ti,timer-secure;
+               timer12_target: target-module@48304000 {
+                       compatible = "ti,sysc-omap2-timer", "ti,sysc";
+                       reg = <0x48304000 0x4>,
+                             <0x48304010 0x4>,
+                             <0x48304014 0x4>;
+                       reg-names = "rev", "sysc", "syss";
+                       ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY |
+                                        SYSC_OMAP2_EMUFREE |
+                                        SYSC_OMAP2_ENAWAKEUP |
+                                        SYSC_OMAP2_SOFTRESET |
+                                        SYSC_OMAP2_AUTOIDLE)>;
+                       ti,sysc-sidle = <SYSC_IDLE_FORCE>,
+                                       <SYSC_IDLE_NO>,
+                                       <SYSC_IDLE_SMART>;
+                       ti,syss-mask = <1>;
+                       clocks = <&gpt12_fck>, <&gpt12_ick>;
+                       clock-names = "fck", "ick";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       ranges = <0x0 0x48304000 0x1000>;
+
+                       timer12: timer@0 {
+                               compatible = "ti,omap3430-timer";
+                               reg = <0 0x400>;
+                               interrupts = <95>;
+                               ti,timer-alwon;
+                               ti,timer-secure;
+                       };
                };
 
                usbhstll: usbhstll@48062000 {
        };
 };
 
-/include/ "omap3xxx-clocks.dtsi"
+#include "omap3xxx-clocks.dtsi"
+
+/* Preferred always-on timer for clockevent. Some boards must use dmtimer12 */
+&timer1_target {
+       ti,no-reset-on-init;
+       ti,no-idle;
+       timer@0 {
+               assigned-clocks = <&gpt1_fck>;
+               assigned-clock-parents = <&omap_32k_fck>;
+       };
+};
 
        .init_early     = omap3430_init_early,
        .init_machine   = omap_generic_init,
        .init_late      = omap3_init_late,
-       .init_time      = omap_init_time,
+       .init_time      = omap_init_time_of,
        .dt_compat      = n900_boards_compat,
        .restart        = omap3xxx_restart,
 MACHINE_END
        .init_early     = omap3430_init_early,
        .init_machine   = omap_generic_init,
        .init_late      = omap3_init_late,
-       .init_time      = omap_init_time,
+       .init_time      = omap_init_time_of,
        .dt_compat      = omap3_boards_compat,
        .restart        = omap3xxx_restart,
 MACHINE_END
        .init_early     = omap3630_init_early,
        .init_machine   = omap_generic_init,
        .init_late      = omap3_init_late,
-       .init_time      = omap_init_time,
+       .init_time      = omap_init_time_of,
        .dt_compat      = omap36xx_boards_compat,
        .restart        = omap3xxx_restart,
 MACHINE_END
        .init_early     = omap3430_init_early,
        .init_machine   = omap_generic_init,
        .init_late      = omap3_init_late,
-       .init_time      = omap3_secure_sync32k_timer_init,
+       .init_time      = omap_init_time_of,
        .dt_compat      = omap3_gp_boards_compat,
        .restart        = omap3xxx_restart,
 MACHINE_END
        .init_early     = am35xx_init_early,
        .init_machine   = omap_generic_init,
        .init_late      = omap3_init_late,
-       .init_time      = omap3_gptimer_timer_init,
+       .init_time      = omap_init_time_of,
        .dt_compat      = am3517_boards_compat,
        .restart        = omap3xxx_restart,
 MACHINE_END
 
        .sysc = &omap3xxx_timer_sysc,
 };
 
-/* timer1 */
-static struct omap_hwmod omap3xxx_timer1_hwmod = {
-       .name           = "timer1",
-       .main_clk       = "gpt1_fck",
-       .prcm           = {
-               .omap2 = {
-                       .module_offs = WKUP_MOD,
-                       .idlest_reg_id = 1,
-                       .idlest_idle_bit = OMAP3430_ST_GPT1_SHIFT,
-               },
-       },
-       .class          = &omap3xxx_timer_hwmod_class,
-       .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
-};
-
-/* timer2 */
-static struct omap_hwmod omap3xxx_timer2_hwmod = {
-       .name           = "timer2",
-       .main_clk       = "gpt2_fck",
-       .prcm           = {
-               .omap2 = {
-                       .module_offs = OMAP3430_PER_MOD,
-                       .idlest_reg_id = 1,
-                       .idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,
-               },
-       },
-       .class          = &omap3xxx_timer_hwmod_class,
-       .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
-};
-
 /* timer3 */
 static struct omap_hwmod omap3xxx_timer3_hwmod = {
        .name           = "timer3",
        .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
 };
 
-/* timer12 */
-static struct omap_hwmod omap3xxx_timer12_hwmod = {
-       .name           = "timer12",
-       .main_clk       = "gpt12_fck",
-       .prcm           = {
-               .omap2 = {
-                       .module_offs = WKUP_MOD,
-                       .idlest_reg_id = 1,
-                       .idlest_idle_bit = OMAP3430_ST_GPT12_SHIFT,
-               },
-       },
-       .class          = &omap3xxx_timer_hwmod_class,
-       .flags          = HWMOD_SET_DEFAULT_CLOCKACT,
-};
-
 /*
  * 'wd_timer' class
  * 32-bit watchdog upward counter that generates a pulse on the reset pin on
        .class          = &omap3xxx_sad2d_class,
 };
 
-/*
- * '32K sync counter' class
- * 32-bit ordinary counter, clocked by the falling edge of the 32 khz clock
- */
-static struct omap_hwmod_class_sysconfig omap3xxx_counter_sysc = {
-       .rev_offs       = 0x0000,
-       .sysc_offs      = 0x0004,
-       .sysc_flags     = SYSC_HAS_SIDLEMODE,
-       .idlemodes      = (SIDLE_FORCE | SIDLE_NO),
-       .sysc_fields    = &omap_hwmod_sysc_type1,
-};
-
-static struct omap_hwmod_class omap3xxx_counter_hwmod_class = {
-       .name   = "counter",
-       .sysc   = &omap3xxx_counter_sysc,
-};
-
-static struct omap_hwmod omap3xxx_counter_32k_hwmod = {
-       .name           = "counter_32k",
-       .class          = &omap3xxx_counter_hwmod_class,
-       .clkdm_name     = "wkup_clkdm",
-       .flags          = HWMOD_SWSUP_SIDLE,
-       .main_clk       = "wkup_32k_fck",
-       .prcm           = {
-               .omap2  = {
-                       .module_offs = WKUP_MOD,
-                       .idlest_reg_id = 1,
-                       .idlest_idle_bit = OMAP3430_ST_32KSYNC_SHIFT,
-               },
-       },
-};
-
 /*
  * 'gpmc' class
  * general purpose memory controller
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-
-/* l4_wkup -> timer1 */
-static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__timer1 = {
-       .master         = &omap3xxx_l4_wkup_hwmod,
-       .slave          = &omap3xxx_timer1_hwmod,
-       .clk            = "gpt1_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-
-/* l4_per -> timer2 */
-static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer2 = {
-       .master         = &omap3xxx_l4_per_hwmod,
-       .slave          = &omap3xxx_timer2_hwmod,
-       .clk            = "gpt2_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-
 /* l4_per -> timer3 */
 static struct omap_hwmod_ocp_if omap3xxx_l4_per__timer3 = {
        .master         = &omap3xxx_l4_per_hwmod,
        .user           = OCP_USER_MPU | OCP_USER_SDMA,
 };
 
-
-/* l4_core -> timer12 */
-static struct omap_hwmod_ocp_if omap3xxx_l4_sec__timer12 = {
-       .master         = &omap3xxx_l4_sec_hwmod,
-       .slave          = &omap3xxx_timer12_hwmod,
-       .clk            = "gpt12_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* l4_wkup -> wd_timer2 */
 
 static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__wd_timer2 = {
        .flags          = OMAP_FIREWALL_L4 | OCPIF_SWSUP_IDLE,
 };
 
-/* l4_wkup -> 32ksync_counter */
-
-
-static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__counter_32k = {
-       .master         = &omap3xxx_l4_wkup_hwmod,
-       .slave          = &omap3xxx_counter_32k_hwmod,
-       .clk            = "omap_32ksync_ick",
-       .user           = OCP_USER_MPU | OCP_USER_SDMA,
-};
-
 /* am35xx has Davinci MDIO & EMAC */
 static struct omap_hwmod_class am35xx_mdio_class = {
        .name = "davinci_mdio",
        &omap3_l4_core__i2c2,
        &omap3_l4_core__i2c3,
        &omap3xxx_l4_wkup__l4_sec,
-       &omap3xxx_l4_wkup__timer1,
-       &omap3xxx_l4_per__timer2,
        &omap3xxx_l4_per__timer3,
        &omap3xxx_l4_per__timer4,
        &omap3xxx_l4_per__timer5,
        &omap34xx_l4_core__mcspi2,
        &omap34xx_l4_core__mcspi3,
        &omap34xx_l4_core__mcspi4,
-       &omap3xxx_l4_wkup__counter_32k,
        &omap3xxx_l3_main__gpmc,
        NULL,
 };
 
-/* GP-only hwmod links */
-static struct omap_hwmod_ocp_if *omap34xx_gp_hwmod_ocp_ifs[] __initdata = {
-       &omap3xxx_l4_sec__timer12,
-       NULL,
-};
-
-static struct omap_hwmod_ocp_if *omap36xx_gp_hwmod_ocp_ifs[] __initdata = {
-       &omap3xxx_l4_sec__timer12,
-       NULL,
-};
-
-static struct omap_hwmod_ocp_if *am35xx_gp_hwmod_ocp_ifs[] __initdata = {
-       &omap3xxx_l4_sec__timer12,
-       NULL,
-};
-
 /* crypto hwmod links */
 static struct omap_hwmod_ocp_if *omap34xx_sham_hwmod_ocp_ifs[] __initdata = {
        &omap3xxx_l4_core__sham,
 int __init omap3xxx_hwmod_init(void)
 {
        int r;
-       struct omap_hwmod_ocp_if **h = NULL, **h_gp = NULL, **h_sham = NULL;
+       struct omap_hwmod_ocp_if **h = NULL, **h_sham = NULL;
        struct omap_hwmod_ocp_if **h_aes = NULL;
        struct device_node *bus;
        unsigned int rev;
            rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||
            rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {
                h = omap34xx_hwmod_ocp_ifs;
-               h_gp = omap34xx_gp_hwmod_ocp_ifs;
                h_sham = omap34xx_sham_hwmod_ocp_ifs;
                h_aes = omap34xx_aes_hwmod_ocp_ifs;
        } else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {
                h = am35xx_hwmod_ocp_ifs;
-               h_gp = am35xx_gp_hwmod_ocp_ifs;
                h_sham = am35xx_sham_hwmod_ocp_ifs;
                h_aes = am35xx_aes_hwmod_ocp_ifs;
        } else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||
                   rev == OMAP3630_REV_ES1_2) {
                h = omap36xx_hwmod_ocp_ifs;
-               h_gp = omap36xx_gp_hwmod_ocp_ifs;
                h_sham = omap36xx_sham_hwmod_ocp_ifs;
                h_aes = omap36xx_aes_hwmod_ocp_ifs;
        } else {
        if (r < 0)
                return r;
 
-       /* Register GP-only hwmod links. */
-       if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) {
-               r = omap_hwmod_register_links(h_gp);
-               if (r < 0)
-                       return r;
-       }
-
        /*
         * Register crypto hwmod links only if they are not disabled in DT.
         * If DT information is missing, enable them only for GP devices.