|  | @@ -312,3 +312,97 @@ void omap1_pm_suspend(void)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Stop all DSP domain clocks */
 | 
	
		
			
				|  |  |  	__raw_writew(0, DSP_IDLECT2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Step 5: Wakeup Event Setup
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	omap_pm_wakeup_setup();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Step 6: ARM and Traffic controller shutdown
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* disable ARM watchdog */
 | 
	
		
			
				|  |  | +	omap_writel(0x00F5, OMAP_WDT_TIMER_MODE);
 | 
	
		
			
				|  |  | +	omap_writel(0x00A0, OMAP_WDT_TIMER_MODE);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Step 6b: ARM and Traffic controller shutdown
 | 
	
		
			
				|  |  | +	 *
 | 
	
		
			
				|  |  | +	 * Step 6 continues here. Prepare jump to power management
 | 
	
		
			
				|  |  | +	 * assembly code in internal SRAM.
 | 
	
		
			
				|  |  | +	 *
 | 
	
		
			
				|  |  | +	 * Since the omap_cpu_suspend routine has been copied to
 | 
	
		
			
				|  |  | +	 * SRAM, we'll do an indirect procedure call to it and pass the
 | 
	
		
			
				|  |  | +	 * contents of arm_idlect1 and arm_idlect2 so it can restore
 | 
	
		
			
				|  |  | +	 * them when it wakes up and it will return.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	arg0 = arm_sleep_save[ARM_SLEEP_SAVE_ARM_IDLECT1];
 | 
	
		
			
				|  |  | +	arg1 = arm_sleep_save[ARM_SLEEP_SAVE_ARM_IDLECT2];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Step 6c: ARM and Traffic controller shutdown
 | 
	
		
			
				|  |  | +	 *
 | 
	
		
			
				|  |  | +	 * Jump to assembly code. The processor will stay there
 | 
	
		
			
				|  |  | +	 * until wake up.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	omap_sram_suspend(arg0, arg1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * If we are here, processor is woken up!
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Restore DSP clocks
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* again temporarily enabling api_ck to access DSP registers */
 | 
	
		
			
				|  |  | +	omap_writew(omap_readw(ARM_IDLECT2) | 1 << EN_APICK, ARM_IDLECT2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* Restore DSP domain clocks */
 | 
	
		
			
				|  |  | +	DSP_RESTORE(DSP_IDLECT2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Restore ARM state, except ARM_IDLECT1/2 which omap_cpu_suspend did
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (!(cpu_is_omap15xx()))
 | 
	
		
			
				|  |  | +		ARM_RESTORE(ARM_IDLECT3);
 | 
	
		
			
				|  |  | +	ARM_RESTORE(ARM_CKCTL);
 | 
	
		
			
				|  |  | +	ARM_RESTORE(ARM_EWUPCT);
 | 
	
		
			
				|  |  | +	ARM_RESTORE(ARM_RSTCT1);
 | 
	
		
			
				|  |  | +	ARM_RESTORE(ARM_RSTCT2);
 | 
	
		
			
				|  |  | +	ARM_RESTORE(ARM_SYSST);
 | 
	
		
			
				|  |  | +	ULPD_RESTORE(ULPD_CLOCK_CTRL);
 | 
	
		
			
				|  |  | +	ULPD_RESTORE(ULPD_STATUS_REQ);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if (cpu_is_omap7xx()) {
 | 
	
		
			
				|  |  | +		MPUI7XX_RESTORE(EMIFS_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI7XX_RESTORE(EMIFF_SDRAM_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI7XX_RESTORE(OMAP_IH1_MIR);
 | 
	
		
			
				|  |  | +		MPUI7XX_RESTORE(OMAP_IH2_0_MIR);
 | 
	
		
			
				|  |  | +		MPUI7XX_RESTORE(OMAP_IH2_1_MIR);
 | 
	
		
			
				|  |  | +	} else if (cpu_is_omap15xx()) {
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(MPUI_CTRL);
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(MPUI_DSP_BOOT_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(MPUI_DSP_API_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(EMIFS_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(EMIFF_SDRAM_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(OMAP_IH1_MIR);
 | 
	
		
			
				|  |  | +		MPUI1510_RESTORE(OMAP_IH2_MIR);
 | 
	
		
			
				|  |  | +	} else if (cpu_is_omap16xx()) {
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(MPUI_CTRL);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(MPUI_DSP_BOOT_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(MPUI_DSP_API_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(EMIFS_CONFIG);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(EMIFF_SDRAM_CONFIG);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(OMAP_IH1_MIR);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(OMAP_IH2_0_MIR);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(OMAP_IH2_1_MIR);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(OMAP_IH2_2_MIR);
 | 
	
		
			
				|  |  | +		MPUI1610_RESTORE(OMAP_IH2_3_MIR);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 |