1d710aa31STomasz Figa/* 2d710aa31STomasz Figa * Copyright (c) 2013 Samsung Electronics Co., Ltd. 3d710aa31STomasz Figa * http://www.samsung.com 4d710aa31STomasz Figa * 5d710aa31STomasz Figa * Exynos low-level resume code 6d710aa31STomasz Figa * 7d710aa31STomasz Figa * This program is free software; you can redistribute it and/or modify 8d710aa31STomasz Figa * it under the terms of the GNU General Public License as published by 9d710aa31STomasz Figa * the Free Software Foundation; either version 2 of the License, or 10d710aa31STomasz Figa * (at your option) any later version. 11d710aa31STomasz Figa * 12d710aa31STomasz Figa * This program is distributed in the hope that it will be useful, 13d710aa31STomasz Figa * but WITHOUT ANY WARRANTY; without even the implied warranty of 14d710aa31STomasz Figa * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15d710aa31STomasz Figa * GNU General Public License for more details. 16d710aa31STomasz Figa */ 17d710aa31STomasz Figa 18d710aa31STomasz Figa#include <linux/linkage.h> 19d710aa31STomasz Figa#include <asm/asm-offsets.h> 20d710aa31STomasz Figa#include <asm/hardware/cache-l2x0.h> 21d710aa31STomasz Figa 22d710aa31STomasz Figa#define CPU_MASK 0xff0ffff0 23d710aa31STomasz Figa#define CPU_CORTEX_A9 0x410fc090 24d710aa31STomasz Figa 25d710aa31STomasz Figa /* 26d710aa31STomasz Figa * The following code is located into the .data section. This is to 27d710aa31STomasz Figa * allow l2x0_regs_phys to be accessed with a relative load while we 28d710aa31STomasz Figa * can't rely on any MMU translation. We could have put l2x0_regs_phys 29d710aa31STomasz Figa * in the .text section as well, but some setups might insist on it to 30d710aa31STomasz Figa * be truly read-only. (Reference from: arch/arm/kernel/sleep.S) 31d710aa31STomasz Figa */ 32d710aa31STomasz Figa .data 33d710aa31STomasz Figa .align 34d710aa31STomasz Figa 35d710aa31STomasz Figa /* 36d710aa31STomasz Figa * sleep magic, to allow the bootloader to check for an valid 37d710aa31STomasz Figa * image to resume to. Must be the first word before the 38d710aa31STomasz Figa * exynos_cpu_resume entry. 39d710aa31STomasz Figa */ 40d710aa31STomasz Figa 41d710aa31STomasz Figa .word 0x2bedf00d 42d710aa31STomasz Figa 43d710aa31STomasz Figa /* 44d710aa31STomasz Figa * exynos_cpu_resume 45d710aa31STomasz Figa * 46d710aa31STomasz Figa * resume code entry for bootloader to call 47d710aa31STomasz Figa */ 48d710aa31STomasz Figa 49d710aa31STomasz FigaENTRY(exynos_cpu_resume) 50d710aa31STomasz Figa#ifdef CONFIG_CACHE_L2X0 51d710aa31STomasz Figa mrc p15, 0, r0, c0, c0, 0 52d710aa31STomasz Figa ldr r1, =CPU_MASK 53d710aa31STomasz Figa and r0, r0, r1 54d710aa31STomasz Figa ldr r1, =CPU_CORTEX_A9 55d710aa31STomasz Figa cmp r0, r1 56d710aa31STomasz Figa bne skip_l2_resume 57d710aa31STomasz Figa adr r0, l2x0_regs_phys 58d710aa31STomasz Figa ldr r0, [r0] 59d710aa31STomasz Figa cmp r0, #0 60d710aa31STomasz Figa beq skip_l2_resume 61d710aa31STomasz Figa ldr r1, [r0, #L2X0_R_PHY_BASE] 62d710aa31STomasz Figa ldr r2, [r1, #L2X0_CTRL] 63d710aa31STomasz Figa tst r2, #0x1 64d710aa31STomasz Figa bne skip_l2_resume 65d710aa31STomasz Figa ldr r2, [r0, #L2X0_R_AUX_CTRL] 66d710aa31STomasz Figa str r2, [r1, #L2X0_AUX_CTRL] 67d710aa31STomasz Figa ldr r2, [r0, #L2X0_R_TAG_LATENCY] 68d710aa31STomasz Figa str r2, [r1, #L2X0_TAG_LATENCY_CTRL] 69d710aa31STomasz Figa ldr r2, [r0, #L2X0_R_DATA_LATENCY] 70d710aa31STomasz Figa str r2, [r1, #L2X0_DATA_LATENCY_CTRL] 71d710aa31STomasz Figa ldr r2, [r0, #L2X0_R_PREFETCH_CTRL] 72d710aa31STomasz Figa str r2, [r1, #L2X0_PREFETCH_CTRL] 73d710aa31STomasz Figa ldr r2, [r0, #L2X0_R_PWR_CTRL] 74d710aa31STomasz Figa str r2, [r1, #L2X0_POWER_CTRL] 75d710aa31STomasz Figa mov r2, #1 76d710aa31STomasz Figa str r2, [r1, #L2X0_CTRL] 77d710aa31STomasz Figaskip_l2_resume: 78d710aa31STomasz Figa#endif 79d710aa31STomasz Figa b cpu_resume 80d710aa31STomasz FigaENDPROC(exynos_cpu_resume) 81d710aa31STomasz Figa#ifdef CONFIG_CACHE_L2X0 82d710aa31STomasz Figa .globl l2x0_regs_phys 83d710aa31STomasz Figal2x0_regs_phys: 84d710aa31STomasz Figa .long 0 85d710aa31STomasz Figa#endif 86