65 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * sleep mode for CSR SiRFprimaII
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Licensed under GPLv2 or later.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <linux/linkage.h>
							 | 
						||
| 
								 | 
							
								#include <asm/ptrace.h>
							 | 
						||
| 
								 | 
							
								#include <asm/assembler.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "pm.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define DENALI_CTL_22_OFF	0x58
							 | 
						||
| 
								 | 
							
								#define DENALI_CTL_112_OFF	0x1c0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									.text
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ENTRY(sirfsoc_finish_suspend)
							 | 
						||
| 
								 | 
							
									@ r5: 	mem controller
							 | 
						||
| 
								 | 
							
									ldr     r0, =sirfsoc_memc_base
							 | 
						||
| 
								 | 
							
									ldr	r5, [r0]
							 | 
						||
| 
								 | 
							
									@ r6: 	pwrc base offset
							 | 
						||
| 
								 | 
							
									ldr     r0, =sirfsoc_pwrc_base
							 | 
						||
| 
								 | 
							
									ldr	r6, [r0]
							 | 
						||
| 
								 | 
							
									@ r7: 	rtc iobrg controller
							 | 
						||
| 
								 | 
							
									ldr     r0, =sirfsoc_rtciobrg_base
							 | 
						||
| 
								 | 
							
									ldr	r7, [r0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@ Read the power control register and set the
							 | 
						||
| 
								 | 
							
									@ sleep force bit.
							 | 
						||
| 
								 | 
							
									add	r0, r6, #SIRFSOC_PWRC_PDN_CTRL
							 | 
						||
| 
								 | 
							
									bl	__sirfsoc_rtc_iobrg_readl
							 | 
						||
| 
								 | 
							
									orr	r0,r0,#SIRFSOC_PWR_SLEEPFORCE
							 | 
						||
| 
								 | 
							
									add	r1, r6, #SIRFSOC_PWRC_PDN_CTRL
							 | 
						||
| 
								 | 
							
									bl	sirfsoc_rtc_iobrg_pre_writel
							 | 
						||
| 
								 | 
							
									mov	r1, #0x1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@ read the MEM ctl register and set the self
							 | 
						||
| 
								 | 
							
									@ refresh bit
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									ldr	r2, [r5, #DENALI_CTL_22_OFF]
							 | 
						||
| 
								 | 
							
									orr	r2, r2, #0x1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@ Following code has to run from cache since
							 | 
						||
| 
								 | 
							
									@ the RAM is going to self refresh mode
							 | 
						||
| 
								 | 
							
									.align 5
							 | 
						||
| 
								 | 
							
									str	r2, [r5, #DENALI_CTL_22_OFF]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
									ldr	r4, [r5, #DENALI_CTL_112_OFF]
							 | 
						||
| 
								 | 
							
									tst	r4, #0x1
							 | 
						||
| 
								 | 
							
									bne	1b
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									@ write SLEEPFORCE through rtc iobridge
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									str	r1, [r7]
							 | 
						||
| 
								 | 
							
									@ wait rtc io bridge sync
							 | 
						||
| 
								 | 
							
								1:
							 | 
						||
| 
								 | 
							
									ldr	r3, [r7]
							 | 
						||
| 
								 | 
							
									tst	r3, #0x01
							 | 
						||
| 
								 | 
							
									bne	1b
							 | 
						||
| 
								 | 
							
									b .
							 |