In an IRC conversation, Nishanth Menon dug up that the ABE PLL issue is indeed known and the workaround is to use sys_clk as its input clock instead of using the 32 kHz clock:
http://gitorious.ti.com/lcpd-agross/omapdrm/commit/b55d24d8b7bcf7bc53261b82d...
Assuming this indeed fixes the problem, it seems like a good workaround for now. See below for a forward-port of this patch. I haven't yet had a chance to test it.
Perhaps in the future we might revisit this issue if we want to try entering an ultra low power mode in which the main osc is disabled and all clocks derive from the ABE PLL (apparently originally intended to allow music playback with minimal power consumption), but doing so would be quite challenging anyway due to the constraints imposed by this mode.
Matthijs
diff --git a/drivers/clk/ti/clk-54xx.c b/drivers/clk/ti/clk-54xx.c index 20f6985a80ef..2f818eadb516 100644 --- a/drivers/clk/ti/clk-54xx.c +++ b/drivers/clk/ti/clk-54xx.c @@ -229,15 +229,15 @@ static struct ti_dt_clk omap54xx_clks[] = { 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, *sys_clkin, *usb_dpll;
ti_dt_clocks_register(omap54xx_clks);
omap2_clk_disable_autoidle_all();
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); + sys_clkin = clk_get_sys(NULL, "sys_clkin"); + rc = clk_set_parent(abe_dpll_ref, sys_clkin); abe_dpll = clk_get_sys(NULL, "dpll_abe_ck"); if (!rc) rc = clk_set_rate(abe_dpll, OMAP5_DPLL_ABE_DEFFREQ);