int __init omap5xxx_dt_clk_init(void)
 {
        int rc;
-       struct clk *abe_dpll_ref, *abe_dpll, *sys_32k_ck, *usb_dpll;
+       struct clk *abe_dpll_ref, *abe_dpll, *abe_dpll_byp, *sys_32k_ck, *usb_dpll;
 
        ti_dt_clocks_register(omap54xx_clks);
 
        abe_dpll_ref = clk_get_sys(NULL, "abe_dpll_clk_mux");
        sys_32k_ck = clk_get_sys(NULL, "sys_32k_ck");
        rc = clk_set_parent(abe_dpll_ref, sys_32k_ck);
+
+       /*
+        * This must also be set to sys_32k_ck to match or
+        * the ABE DPLL will not lock on a warm reboot when
+        * ABE timers are used.
+        */
+       abe_dpll_byp = clk_get_sys(NULL, "abe_dpll_bypass_clk_mux");
+       if (!rc)
+               rc = clk_set_parent(abe_dpll_byp, sys_32k_ck);
+
        abe_dpll = clk_get_sys(NULL, "dpll_abe_ck");
        if (!rc)
                rc = clk_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ);