|
@@ -485,10 +485,10 @@ static struct clk_lookup lookups[] = {
|
|
|
|
|
|
int __init mx35_clocks_init()
|
|
|
{
|
|
|
- unsigned int ll = 0;
|
|
|
+ unsigned int cgr2 = 3 << 26, cgr3 = 0;
|
|
|
|
|
|
#if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_ICEDCC)
|
|
|
- ll = (3 << 16);
|
|
|
+ cgr2 |= 3 << 16;
|
|
|
#endif
|
|
|
|
|
|
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
|
@@ -499,8 +499,20 @@ int __init mx35_clocks_init()
|
|
|
__raw_writel((3 << 18), CCM_BASE + CCM_CGR0);
|
|
|
__raw_writel((3 << 2) | (3 << 4) | (3 << 6) | (3 << 8) | (3 << 16),
|
|
|
CCM_BASE + CCM_CGR1);
|
|
|
- __raw_writel((3 << 26) | ll, CCM_BASE + CCM_CGR2);
|
|
|
- __raw_writel(0, CCM_BASE + CCM_CGR3);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Check if we came up in internal boot mode. If yes, we need some
|
|
|
+ * extra clocks turned on, otherwise the MX35 boot ROM code will
|
|
|
+ * hang after a watchdog reset.
|
|
|
+ */
|
|
|
+ if (!(__raw_readl(CCM_BASE + CCM_RCSR) & (3 << 10))) {
|
|
|
+ /* Additionally turn on UART1, SCC, and IIM clocks */
|
|
|
+ cgr2 |= 3 << 16 | 3 << 4;
|
|
|
+ cgr3 |= 3 << 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ __raw_writel(cgr2, CCM_BASE + CCM_CGR2);
|
|
|
+ __raw_writel(cgr3, CCM_BASE + CCM_CGR3);
|
|
|
|
|
|
mxc_timer_init(&gpt_clk,
|
|
|
MX35_IO_ADDRESS(MX35_GPT1_BASE_ADDR), MX35_INT_GPT);
|