1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0+ */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Copyright (c) 2007 Simtec Electronics 4*4882a593Smuzhiyun * Ben Dooks <ben@simtec.co.uk> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * S3C2412 Power Manager low-level sleep support 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun#include <linux/linkage.h> 10*4882a593Smuzhiyun#include <asm/assembler.h> 11*4882a593Smuzhiyun#include "map.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun#include "regs-irq.h" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun .text 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun .global s3c2412_sleep_enter 18*4882a593Smuzhiyun 19*4882a593Smuzhiyuns3c2412_sleep_enter: 20*4882a593Smuzhiyun mov r0, #0 /* argument for coprocessors */ 21*4882a593Smuzhiyun ldr r1, =S3C2410_INTPND 22*4882a593Smuzhiyun ldr r2, =S3C2410_SRCPND 23*4882a593Smuzhiyun ldr r3, =S3C2410_EINTPEND 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun teq r0, r0 26*4882a593Smuzhiyun bl s3c2412_sleep_enter1 27*4882a593Smuzhiyun teq pc, r0 28*4882a593Smuzhiyun bl s3c2412_sleep_enter1 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun .align 5 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* this is called twice, first with the Z flag to ensure that the 33*4882a593Smuzhiyun * instructions have been loaded into the cache, and the second 34*4882a593Smuzhiyun * time to try and suspend the system. 35*4882a593Smuzhiyun */ 36*4882a593Smuzhiyuns3c2412_sleep_enter1: 37*4882a593Smuzhiyun mcr p15, 0, r0, c7, c10, 4 38*4882a593Smuzhiyun mcrne p15, 0, r0, c7, c0, 4 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* if we return from here, it is because an interrupt was 41*4882a593Smuzhiyun * active when we tried to shutdown. Try and ack the IRQ and 42*4882a593Smuzhiyun * retry, as simply returning causes the system to lock. 43*4882a593Smuzhiyun */ 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun ldrne r9, [r1] 46*4882a593Smuzhiyun strne r9, [r1] 47*4882a593Smuzhiyun ldrne r9, [r2] 48*4882a593Smuzhiyun strne r9, [r2] 49*4882a593Smuzhiyun ldrne r9, [r3] 50*4882a593Smuzhiyun strne r9, [r3] 51*4882a593Smuzhiyun bne s3c2412_sleep_enter1 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun ret lr 54