Эх сурвалжийг харах

pm: at91: pm_slowclock: fix suspend/resume hang up in timeouts

Removed timeout on XTAL, PLL lock and Master Clock Ready, hang if
something went wrong instead of continuing in unknown condition. There
is not much we can do if a PLL lock never ends, we are running in SRAM
and we will not be able to connect back the sdram or ddram in order to
be able to fire up a message or just panic.

As a bonus, not decounting the timeout register in slow clock mode
reduce cumulated suspend time and resume time from ~17ms to ~15ms.

Signed-off-by: Sylvain Rochet <sylvain.rochet@finsecur.com>
Acked-by: Wenyou.Yang <wenyou.yang@atmel.com>
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Sylvain Rochet 10 жил өмнө
parent
commit
ad4a38d218

+ 4 - 29
arch/arm/mach-at91/pm_slowclock.S

@@ -25,11 +25,6 @@
  */
  */
 #undef SLOWDOWN_MASTER_CLOCK
 #undef SLOWDOWN_MASTER_CLOCK
 
 
-#define MCKRDY_TIMEOUT		1000
-#define MOSCRDY_TIMEOUT 	1000
-#define PLLALOCK_TIMEOUT	1000
-#define PLLBLOCK_TIMEOUT	1000
-
 pmc	.req	r0
 pmc	.req	r0
 sdramc	.req	r1
 sdramc	.req	r1
 ramc1	.req	r2
 ramc1	.req	r2
@@ -41,56 +36,36 @@ tmp2	.req	r5
  * Wait until master clock is ready (after switching master clock source)
  * Wait until master clock is ready (after switching master clock source)
  */
  */
 	.macro wait_mckrdy
 	.macro wait_mckrdy
-	mov	tmp2, #MCKRDY_TIMEOUT
-1:	sub	tmp2, tmp2, #1
-	cmp	tmp2, #0
-	beq	2f
-	ldr	tmp1, [pmc, #AT91_PMC_SR]
+1:	ldr	tmp1, [pmc, #AT91_PMC_SR]
 	tst	tmp1, #AT91_PMC_MCKRDY
 	tst	tmp1, #AT91_PMC_MCKRDY
 	beq	1b
 	beq	1b
-2:
 	.endm
 	.endm
 
 
 /*
 /*
  * Wait until master oscillator has stabilized.
  * Wait until master oscillator has stabilized.
  */
  */
 	.macro wait_moscrdy
 	.macro wait_moscrdy
-	mov	tmp2, #MOSCRDY_TIMEOUT
-1:	sub	tmp2, tmp2, #1
-	cmp	tmp2, #0
-	beq	2f
-	ldr	tmp1, [pmc, #AT91_PMC_SR]
+1:	ldr	tmp1, [pmc, #AT91_PMC_SR]
 	tst	tmp1, #AT91_PMC_MOSCS
 	tst	tmp1, #AT91_PMC_MOSCS
 	beq	1b
 	beq	1b
-2:
 	.endm
 	.endm
 
 
 /*
 /*
  * Wait until PLLA has locked.
  * Wait until PLLA has locked.
  */
  */
 	.macro wait_pllalock
 	.macro wait_pllalock
-	mov	tmp2, #PLLALOCK_TIMEOUT
-1:	sub	tmp2, tmp2, #1
-	cmp	tmp2, #0
-	beq	2f
-	ldr	tmp1, [pmc, #AT91_PMC_SR]
+1:	ldr	tmp1, [pmc, #AT91_PMC_SR]
 	tst	tmp1, #AT91_PMC_LOCKA
 	tst	tmp1, #AT91_PMC_LOCKA
 	beq	1b
 	beq	1b
-2:
 	.endm
 	.endm
 
 
 /*
 /*
  * Wait until PLLB has locked.
  * Wait until PLLB has locked.
  */
  */
 	.macro wait_pllblock
 	.macro wait_pllblock
-	mov	tmp2, #PLLBLOCK_TIMEOUT
-1:	sub	tmp2, tmp2, #1
-	cmp	tmp2, #0
-	beq	2f
-	ldr	tmp1, [pmc, #AT91_PMC_SR]
+1:	ldr	tmp1, [pmc, #AT91_PMC_SR]
 	tst	tmp1, #AT91_PMC_LOCKB
 	tst	tmp1, #AT91_PMC_LOCKB
 	beq	1b
 	beq	1b
-2:
 	.endm
 	.endm
 
 
 	.text
 	.text