瀏覽代碼

ARM: 6043/1: AT91 slow-clock resume: Don't wait for a disabled PLL to lock

at91 slow-clock resume: Don't wait for a disabled PLL to lock.

We run into this problem with the PLLB on the at91: ohci-at91 disables
the PLLB when going to suspend. The slowclock code however tries to do
the same: It saves the PLLB register value and when restoring the value
during resume, it waits for the PLLB to lock again. However the PLL will
never lock and the loop would run into its timeout because the slowclock
code just stored and restored an empty register.
This fixes the problem by only restoring PLLA/PLLB when they were enabled
at suspend time.

Cc: Andrew Victor <avictor.za@gmail.com>
Signed-off-by: Anders Larsen <al@alarsen.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Anders Larsen 15 年之前
父節點
當前提交
9823f1a846
共有 1 個文件被更改,包括 12 次插入0 次删除
  1. 12 0
      arch/arm/mach-at91/pm_slowclock.S

+ 12 - 0
arch/arm/mach-at91/pm_slowclock.S

@@ -205,13 +205,25 @@ ENTRY(at91_slow_clock)
 	ldr	r3, .saved_pllbr
 	ldr	r3, .saved_pllbr
 	str	r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
 	str	r3, [r1, #(AT91_CKGR_PLLBR - AT91_PMC)]
 
 
+	tst	r3, #(AT91_PMC_MUL &  0xff0000)
+	bne	1f
+	tst	r3, #(AT91_PMC_MUL & ~0xff0000)
+	beq	2f
+1:
 	wait_pllblock
 	wait_pllblock
+2:
 
 
 	/* Restore PLLA setting */
 	/* Restore PLLA setting */
 	ldr	r3, .saved_pllar
 	ldr	r3, .saved_pllar
 	str	r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)]
 	str	r3, [r1, #(AT91_CKGR_PLLAR - AT91_PMC)]
 
 
+	tst	r3, #(AT91_PMC_MUL &  0xff0000)
+	bne	3f
+	tst	r3, #(AT91_PMC_MUL & ~0xff0000)
+	beq	4f
+3:
 	wait_pllalock
 	wait_pllalock
+4:
 
 
 #ifdef SLOWDOWN_MASTER_CLOCK
 #ifdef SLOWDOWN_MASTER_CLOCK
 	/*
 	/*