1f56348afSSteve Sakoman/* 2f56348afSSteve Sakoman * armboot - Startup Code for OMAP3530/ARM Cortex CPU-core 3f56348afSSteve Sakoman * 4f56348afSSteve Sakoman * Copyright (c) 2004 Texas Instruments <r-woodruff2@ti.com> 5f56348afSSteve Sakoman * 6f56348afSSteve Sakoman * Copyright (c) 2001 Marius Gröger <mag@sysgo.de> 7f56348afSSteve Sakoman * Copyright (c) 2002 Alex Züpke <azu@sysgo.de> 8f56348afSSteve Sakoman * Copyright (c) 2002 Gary Jennejohn <garyj@denx.de> 9f56348afSSteve Sakoman * Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com> 10f56348afSSteve Sakoman * Copyright (c) 2003 Kshitij <kshitij@ti.com> 11f56348afSSteve Sakoman * Copyright (c) 2006-2008 Syed Mohammed Khasim <x0khasim@ti.com> 12f56348afSSteve Sakoman * 131a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 14f56348afSSteve Sakoman */ 15f56348afSSteve Sakoman 1625ddd1fbSWolfgang Denk#include <asm-offsets.h> 17f56348afSSteve Sakoman#include <config.h> 18a8c68639SAneesh V#include <asm/system.h> 1974236acaSAneesh V#include <linux/linkage.h> 20d31d4a2dSKeerthy#include <asm/armv7.h> 21f56348afSSteve Sakoman 22f56348afSSteve Sakoman/************************************************************************* 23f56348afSSteve Sakoman * 24f56348afSSteve Sakoman * Startup Code (reset vector) 25f56348afSSteve Sakoman * 26003b09daSPavel Machek * Do important init only if we don't start from memory! 27003b09daSPavel Machek * Setup memory and board specific bits prior to relocation. 28003b09daSPavel Machek * Relocate armboot to ram. Setup stack. 29f56348afSSteve Sakoman * 30f56348afSSteve Sakoman *************************************************************************/ 31f56348afSSteve Sakoman 3241623c91SAlbert ARIBAUD .globl reset 33e11c6c27SSimon Glass .globl save_boot_params_ret 34b04bb64bSPhilipp Tomsich .type save_boot_params_ret,%function 35d31d4a2dSKeerthy#ifdef CONFIG_ARMV7_LPAE 36d31d4a2dSKeerthy .global switch_to_hypervisor_ret 37d31d4a2dSKeerthy#endif 38561142afSHeiko Schocher 39a3f8c59fSZhihuan He#if !CONFIG_IS_ENABLED(TINY_FRAMEWORK) 40a3f8c59fSZhihuan He 41561142afSHeiko Schocherreset: 42e11c6c27SSimon Glass /* Allow the board to save important registers */ 43e11c6c27SSimon Glass b save_boot_params 44e11c6c27SSimon Glasssave_boot_params_ret: 45d31d4a2dSKeerthy#ifdef CONFIG_ARMV7_LPAE 46d31d4a2dSKeerthy/* 47d31d4a2dSKeerthy * check for Hypervisor support 48d31d4a2dSKeerthy */ 49d31d4a2dSKeerthy mrc p15, 0, r0, c0, c1, 1 @ read ID_PFR1 50d31d4a2dSKeerthy and r0, r0, #CPUID_ARM_VIRT_MASK @ mask virtualization bits 51d31d4a2dSKeerthy cmp r0, #(1 << CPUID_ARM_VIRT_SHIFT) 52d31d4a2dSKeerthy beq switch_to_hypervisor 53d31d4a2dSKeerthyswitch_to_hypervisor_ret: 54d31d4a2dSKeerthy#endif 55561142afSHeiko Schocher /* 56c4a4e2e2SAndre Przywara * disable interrupts (FIQ and IRQ), also set the cpu to SVC32 mode, 57c4a4e2e2SAndre Przywara * except if in HYP mode already 58561142afSHeiko Schocher */ 59561142afSHeiko Schocher mrs r0, cpsr 60c4a4e2e2SAndre Przywara and r1, r0, #0x1f @ mask mode bits 61c4a4e2e2SAndre Przywara teq r1, #0x1a @ test for HYP mode 62c4a4e2e2SAndre Przywara bicne r0, r0, #0x1f @ clear all mode bits 63c4a4e2e2SAndre Przywara orrne r0, r0, #0x13 @ set SVC mode 64c4a4e2e2SAndre Przywara orr r0, r0, #0xc0 @ disable FIQ and IRQ 65561142afSHeiko Schocher msr cpsr,r0 66561142afSHeiko Schocher 67817007c1SJoseph Chen /* Enable ACTLR.SMP bit */ 68817007c1SJoseph Chen mrc p15, 0, r0, c1, c0, 1 69817007c1SJoseph Chen orr r0, r0, #(1 << 6) @ Enable ACTLR.SMP bit 70817007c1SJoseph Chen mcr p15, 0, r0, c1, c0, 1 71817007c1SJoseph Chen 72a8c68639SAneesh V/* 73a8c68639SAneesh V * Setup vector: 74a8c68639SAneesh V * (OMAP4 spl TEXT_BASE is not 32 byte aligned. 75a8c68639SAneesh V * Continue to use ROM code vector only in OMAP4 spl) 76a8c68639SAneesh V */ 77840fe95cSSiarhei Siamashka#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) 780f274f53SPeng Fan /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ 790f274f53SPeng Fan mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register 80a8c68639SAneesh V bic r0, #CR_V @ V = 0 810f274f53SPeng Fan mcr p15, 0, r0, c1, c0, 0 @ Write CP15 SCTLR Register 82a8c68639SAneesh V 83a8c68639SAneesh V /* Set vector address in CP15 VBAR register */ 84a8c68639SAneesh V ldr r0, =_start 85a8c68639SAneesh V mcr p15, 0, r0, c12, c0, 0 @Set VBAR 86a8c68639SAneesh V#endif 87a8c68639SAneesh V 88617c1becSJoseph Chen /* Enable Asynchronous external abort after vectors setup */ 89617c1becSJoseph Chen mrs r0, cpsr 90617c1becSJoseph Chen bic r0, r0, #0x100 @ CPSR.A bit 91617c1becSJoseph Chen msr cpsr_x,r0 92617c1becSJoseph Chen 93561142afSHeiko Schocher /* the mask ROM code should have PLL and others stable */ 94561142afSHeiko Schocher#ifndef CONFIG_SKIP_LOWLEVEL_INIT 9580433c9aSSimon Glass bl cpu_init_cp15 96b5bd0982SSimon Glass#ifndef CONFIG_SKIP_LOWLEVEL_INIT_ONLY 97561142afSHeiko Schocher bl cpu_init_crit 98561142afSHeiko Schocher#endif 99b5bd0982SSimon Glass#endif 100561142afSHeiko Schocher 101e05e5de7SAlbert ARIBAUD bl _main 102561142afSHeiko Schocher 103561142afSHeiko Schocher/*------------------------------------------------------------------------------*/ 104561142afSHeiko Schocher 105e05e5de7SAlbert ARIBAUDENTRY(c_runtime_cpu_setup) 106c2dd0d45SAneesh V/* 107c2dd0d45SAneesh V * If I-cache is enabled invalidate it 108c2dd0d45SAneesh V */ 109c2dd0d45SAneesh V#ifndef CONFIG_SYS_ICACHE_OFF 110c2dd0d45SAneesh V mcr p15, 0, r0, c7, c5, 0 @ invalidate icache 111c2dd0d45SAneesh V mcr p15, 0, r0, c7, c10, 4 @ DSB 112c2dd0d45SAneesh V mcr p15, 0, r0, c7, c5, 4 @ ISB 113c2dd0d45SAneesh V#endif 114f8b9d1d3STetsuyuki Kobayashi 115e05e5de7SAlbert ARIBAUD bx lr 116561142afSHeiko Schocher 117e05e5de7SAlbert ARIBAUDENDPROC(c_runtime_cpu_setup) 118c3d3a541SHeiko Schocher 119a3f8c59fSZhihuan He#endif/* !CONFIG_IS_ENABLED(TINY_FRAMEWORK) */ 120a3f8c59fSZhihuan He 121f56348afSSteve Sakoman/************************************************************************* 122f56348afSSteve Sakoman * 1236f0dba85STetsuyuki Kobayashi * void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3) 1246f0dba85STetsuyuki Kobayashi * __attribute__((weak)); 1256f0dba85STetsuyuki Kobayashi * 1266f0dba85STetsuyuki Kobayashi * Stack pointer is not yet initialized at this moment 1276f0dba85STetsuyuki Kobayashi * Don't save anything to stack even if compiled with -O0 1286f0dba85STetsuyuki Kobayashi * 1296f0dba85STetsuyuki Kobayashi *************************************************************************/ 1306f0dba85STetsuyuki KobayashiENTRY(save_boot_params) 131e11c6c27SSimon Glass b save_boot_params_ret @ back to my caller 1326f0dba85STetsuyuki KobayashiENDPROC(save_boot_params) 1336f0dba85STetsuyuki Kobayashi .weak save_boot_params 1346f0dba85STetsuyuki Kobayashi 135d31d4a2dSKeerthy#ifdef CONFIG_ARMV7_LPAE 136d31d4a2dSKeerthyENTRY(switch_to_hypervisor) 137d31d4a2dSKeerthy b switch_to_hypervisor_ret 138d31d4a2dSKeerthyENDPROC(switch_to_hypervisor) 139d31d4a2dSKeerthy .weak switch_to_hypervisor 140d31d4a2dSKeerthy#endif 141d31d4a2dSKeerthy 1426f0dba85STetsuyuki Kobayashi/************************************************************************* 1436f0dba85STetsuyuki Kobayashi * 14480433c9aSSimon Glass * cpu_init_cp15 145f56348afSSteve Sakoman * 14680433c9aSSimon Glass * Setup CP15 registers (cache, MMU, TLBs). The I-cache is turned on unless 14780433c9aSSimon Glass * CONFIG_SYS_ICACHE_OFF is defined. 148f56348afSSteve Sakoman * 149f56348afSSteve Sakoman *************************************************************************/ 15074236acaSAneesh VENTRY(cpu_init_cp15) 151f56348afSSteve Sakoman /* 152f56348afSSteve Sakoman * Invalidate L1 I/D 153f56348afSSteve Sakoman */ 154f56348afSSteve Sakoman mov r0, #0 @ set up for MCR 155f56348afSSteve Sakoman mcr p15, 0, r0, c8, c7, 0 @ invalidate TLBs 156f56348afSSteve Sakoman mcr p15, 0, r0, c7, c5, 0 @ invalidate icache 157c2dd0d45SAneesh V mcr p15, 0, r0, c7, c5, 6 @ invalidate BP array 158c2dd0d45SAneesh V mcr p15, 0, r0, c7, c10, 4 @ DSB 159c2dd0d45SAneesh V mcr p15, 0, r0, c7, c5, 4 @ ISB 160f56348afSSteve Sakoman 161f56348afSSteve Sakoman /* 162f56348afSSteve Sakoman * disable MMU stuff and caches 163f56348afSSteve Sakoman */ 164f56348afSSteve Sakoman mrc p15, 0, r0, c1, c0, 0 165f56348afSSteve Sakoman bic r0, r0, #0x00002000 @ clear bits 13 (--V-) 166f56348afSSteve Sakoman bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM) 167*11f9ae3aSJoseph Chen#if 0 /* There is unalign access when decompress firmware. */ 168f56348afSSteve Sakoman orr r0, r0, #0x00000002 @ set bit 1 (--A-) Align 169*11f9ae3aSJoseph Chen#endif 170c2dd0d45SAneesh V orr r0, r0, #0x00000800 @ set bit 11 (Z---) BTB 171c2dd0d45SAneesh V#ifdef CONFIG_SYS_ICACHE_OFF 172c2dd0d45SAneesh V bic r0, r0, #0x00001000 @ clear bit 12 (I) I-cache 173c2dd0d45SAneesh V#else 174c2dd0d45SAneesh V orr r0, r0, #0x00001000 @ set bit 12 (I) I-cache 175c2dd0d45SAneesh V#endif 176f56348afSSteve Sakoman mcr p15, 0, r0, c1, c0, 0 1770678587fSStephen Warren 178c5d4752cSStephen Warren#ifdef CONFIG_ARM_ERRATA_716044 179c5d4752cSStephen Warren mrc p15, 0, r0, c1, c0, 0 @ read system control register 180c5d4752cSStephen Warren orr r0, r0, #1 << 11 @ set bit #11 181c5d4752cSStephen Warren mcr p15, 0, r0, c1, c0, 0 @ write system control register 182c5d4752cSStephen Warren#endif 183c5d4752cSStephen Warren 184f71cbfe3SNitin Garg#if (defined(CONFIG_ARM_ERRATA_742230) || defined(CONFIG_ARM_ERRATA_794072)) 1850678587fSStephen Warren mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 1860678587fSStephen Warren orr r0, r0, #1 << 4 @ set bit #4 1870678587fSStephen Warren mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 1880678587fSStephen Warren#endif 1890678587fSStephen Warren 1900678587fSStephen Warren#ifdef CONFIG_ARM_ERRATA_743622 1910678587fSStephen Warren mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 1920678587fSStephen Warren orr r0, r0, #1 << 6 @ set bit #6 1930678587fSStephen Warren mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 1940678587fSStephen Warren#endif 1950678587fSStephen Warren 1960678587fSStephen Warren#ifdef CONFIG_ARM_ERRATA_751472 1970678587fSStephen Warren mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 1980678587fSStephen Warren orr r0, r0, #1 << 11 @ set bit #11 1990678587fSStephen Warren mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 2000678587fSStephen Warren#endif 201b7588e3bSNitin Garg#ifdef CONFIG_ARM_ERRATA_761320 202b7588e3bSNitin Garg mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 203b7588e3bSNitin Garg orr r0, r0, #1 << 21 @ set bit #21 204b7588e3bSNitin Garg mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 205b7588e3bSNitin Garg#endif 2060678587fSStephen Warren 20711d94319SPeng Fan#ifdef CONFIG_ARM_ERRATA_845369 20811d94319SPeng Fan mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 20911d94319SPeng Fan orr r0, r0, #1 << 22 @ set bit #22 21011d94319SPeng Fan mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 21111d94319SPeng Fan#endif 21211d94319SPeng Fan 213c616a0dfSNishanth Menon mov r5, lr @ Store my Caller 214c616a0dfSNishanth Menon mrc p15, 0, r1, c0, c0, 0 @ r1 has Read Main ID Register (MIDR) 215c616a0dfSNishanth Menon mov r3, r1, lsr #20 @ get variant field 216c616a0dfSNishanth Menon and r3, r3, #0xf @ r3 has CPU variant 217c616a0dfSNishanth Menon and r4, r1, #0xf @ r4 has CPU revision 218c616a0dfSNishanth Menon mov r2, r3, lsl #4 @ shift variant field for combined value 219c616a0dfSNishanth Menon orr r2, r4, r2 @ r2 has combined CPU variant + revision 220c616a0dfSNishanth Menon 221c616a0dfSNishanth Menon#ifdef CONFIG_ARM_ERRATA_798870 222c616a0dfSNishanth Menon cmp r2, #0x30 @ Applies to lower than R3p0 223c616a0dfSNishanth Menon bge skip_errata_798870 @ skip if not affected rev 224c616a0dfSNishanth Menon cmp r2, #0x20 @ Applies to including and above R2p0 225c616a0dfSNishanth Menon blt skip_errata_798870 @ skip if not affected rev 226c616a0dfSNishanth Menon 227c616a0dfSNishanth Menon mrc p15, 1, r0, c15, c0, 0 @ read l2 aux ctrl reg 228c616a0dfSNishanth Menon orr r0, r0, #1 << 7 @ Enable hazard-detect timeout 229c616a0dfSNishanth Menon push {r1-r5} @ Save the cpu info registers 230c616a0dfSNishanth Menon bl v7_arch_cp15_set_l2aux_ctrl 231c616a0dfSNishanth Menon isb @ Recommended ISB after l2actlr update 232c616a0dfSNishanth Menon pop {r1-r5} @ Restore the cpu info - fall through 233c616a0dfSNishanth Menonskip_errata_798870: 234c616a0dfSNishanth Menon#endif 235c616a0dfSNishanth Menon 236a615d0beSNishanth Menon#ifdef CONFIG_ARM_ERRATA_801819 237a615d0beSNishanth Menon cmp r2, #0x24 @ Applies to lt including R2p4 238a615d0beSNishanth Menon bgt skip_errata_801819 @ skip if not affected rev 239a615d0beSNishanth Menon cmp r2, #0x20 @ Applies to including and above R2p0 240a615d0beSNishanth Menon blt skip_errata_801819 @ skip if not affected rev 241a615d0beSNishanth Menon mrc p15, 0, r0, c0, c0, 6 @ pick up REVIDR reg 242a615d0beSNishanth Menon and r0, r0, #1 << 3 @ check REVIDR[3] 243a615d0beSNishanth Menon cmp r0, #1 << 3 244a615d0beSNishanth Menon beq skip_errata_801819 @ skip erratum if REVIDR[3] is set 245a615d0beSNishanth Menon 246a615d0beSNishanth Menon mrc p15, 0, r0, c1, c0, 1 @ read auxilary control register 247a615d0beSNishanth Menon orr r0, r0, #3 << 27 @ Disables streaming. All write-allocate 248a615d0beSNishanth Menon @ lines allocate in the L1 or L2 cache. 249a615d0beSNishanth Menon orr r0, r0, #3 << 25 @ Disables streaming. All write-allocate 250a615d0beSNishanth Menon @ lines allocate in the L1 cache. 251a615d0beSNishanth Menon push {r1-r5} @ Save the cpu info registers 252a615d0beSNishanth Menon bl v7_arch_cp15_set_acr 253a615d0beSNishanth Menon pop {r1-r5} @ Restore the cpu info - fall through 254a615d0beSNishanth Menonskip_errata_801819: 255a615d0beSNishanth Menon#endif 256a615d0beSNishanth Menon 257b45c48a7SNishanth Menon#ifdef CONFIG_ARM_ERRATA_454179 258b45c48a7SNishanth Menon cmp r2, #0x21 @ Only on < r2p1 259b45c48a7SNishanth Menon bge skip_errata_454179 260b45c48a7SNishanth Menon 261b45c48a7SNishanth Menon mrc p15, 0, r0, c1, c0, 1 @ Read ACR 262b45c48a7SNishanth Menon orr r0, r0, #(0x3 << 6) @ Set DBSM(BIT7) and IBE(BIT6) bits 263b45c48a7SNishanth Menon push {r1-r5} @ Save the cpu info registers 264b45c48a7SNishanth Menon bl v7_arch_cp15_set_acr 265b45c48a7SNishanth Menon pop {r1-r5} @ Restore the cpu info - fall through 266b45c48a7SNishanth Menon 267b45c48a7SNishanth Menonskip_errata_454179: 268b45c48a7SNishanth Menon#endif 269b45c48a7SNishanth Menon 2705902f4ceSNishanth Menon#ifdef CONFIG_ARM_ERRATA_430973 2715902f4ceSNishanth Menon cmp r2, #0x21 @ Only on < r2p1 2725902f4ceSNishanth Menon bge skip_errata_430973 2735902f4ceSNishanth Menon 2745902f4ceSNishanth Menon mrc p15, 0, r0, c1, c0, 1 @ Read ACR 2755902f4ceSNishanth Menon orr r0, r0, #(0x1 << 6) @ Set IBE bit 2765902f4ceSNishanth Menon push {r1-r5} @ Save the cpu info registers 2775902f4ceSNishanth Menon bl v7_arch_cp15_set_acr 2785902f4ceSNishanth Menon pop {r1-r5} @ Restore the cpu info - fall through 2795902f4ceSNishanth Menon 2805902f4ceSNishanth Menonskip_errata_430973: 2815902f4ceSNishanth Menon#endif 2825902f4ceSNishanth Menon 2839b4d65f9SNishanth Menon#ifdef CONFIG_ARM_ERRATA_621766 2849b4d65f9SNishanth Menon cmp r2, #0x21 @ Only on < r2p1 2859b4d65f9SNishanth Menon bge skip_errata_621766 2869b4d65f9SNishanth Menon 2879b4d65f9SNishanth Menon mrc p15, 0, r0, c1, c0, 1 @ Read ACR 2889b4d65f9SNishanth Menon orr r0, r0, #(0x1 << 5) @ Set L1NEON bit 2899b4d65f9SNishanth Menon push {r1-r5} @ Save the cpu info registers 2909b4d65f9SNishanth Menon bl v7_arch_cp15_set_acr 2919b4d65f9SNishanth Menon pop {r1-r5} @ Restore the cpu info - fall through 2929b4d65f9SNishanth Menon 2939b4d65f9SNishanth Menonskip_errata_621766: 2949b4d65f9SNishanth Menon#endif 2959b4d65f9SNishanth Menon 29619a75b8cSSiarhei Siamashka#ifdef CONFIG_ARM_ERRATA_725233 29719a75b8cSSiarhei Siamashka cmp r2, #0x21 @ Only on < r2p1 (Cortex A8) 29819a75b8cSSiarhei Siamashka bge skip_errata_725233 29919a75b8cSSiarhei Siamashka 30019a75b8cSSiarhei Siamashka mrc p15, 1, r0, c9, c0, 2 @ Read L2ACR 30119a75b8cSSiarhei Siamashka orr r0, r0, #(0x1 << 27) @ L2 PLD data forwarding disable 30219a75b8cSSiarhei Siamashka push {r1-r5} @ Save the cpu info registers 30319a75b8cSSiarhei Siamashka bl v7_arch_cp15_set_l2aux_ctrl 30419a75b8cSSiarhei Siamashka pop {r1-r5} @ Restore the cpu info - fall through 30519a75b8cSSiarhei Siamashka 30619a75b8cSSiarhei Siamashkaskip_errata_725233: 30719a75b8cSSiarhei Siamashka#endif 30819a75b8cSSiarhei Siamashka 3098776350dSNisal Menuka#ifdef CONFIG_ARM_ERRATA_852421 3108776350dSNisal Menuka mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 3118776350dSNisal Menuka orr r0, r0, #1 << 24 @ set bit #24 3128776350dSNisal Menuka mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 3138776350dSNisal Menuka#endif 3148776350dSNisal Menuka 3158776350dSNisal Menuka#ifdef CONFIG_ARM_ERRATA_852423 3168776350dSNisal Menuka mrc p15, 0, r0, c15, c0, 1 @ read diagnostic register 3178776350dSNisal Menuka orr r0, r0, #1 << 12 @ set bit #12 3188776350dSNisal Menuka mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register 3198776350dSNisal Menuka#endif 3208776350dSNisal Menuka 3217c1a6210SJoseph Chen#if defined(CONFIG_ARM_ZERO_CNTVOFF) && defined(CONFIG_SPL_BUILD) 3227c1a6210SJoseph Chen /* 3237c1a6210SJoseph Chen * CNTVOFF usage constraints: 3247c1a6210SJoseph Chen * Only accessible from Hyp mode, or from Monitor mode when SCR.NS is 3257c1a6210SJoseph Chen * set to 1. 3267c1a6210SJoseph Chen */ 3277c1a6210SJoseph Chen /* switch to MON */ 3287c1a6210SJoseph Chen cps #22 3297c1a6210SJoseph Chen isb 3307c1a6210SJoseph Chen 3317c1a6210SJoseph Chen /* Update SCR.NS to non Secure mode */ 3327c1a6210SJoseph Chen mrc p15, 0, r0, c1, c1, 0 3337c1a6210SJoseph Chen orr r0, r0, #(1 << 0) 3347c1a6210SJoseph Chen mcr p15, 0, r0, c1, c1, 0 3357c1a6210SJoseph Chen isb 3367c1a6210SJoseph Chen 3377c1a6210SJoseph Chen /* set vtimer virtual offset 0 */ 3387c1a6210SJoseph Chen mov r0, #0 3397c1a6210SJoseph Chen mcrr p15, 4, r0, r0, c14 @ CNTVOFF 3407c1a6210SJoseph Chen 3417c1a6210SJoseph Chen /* Update SCR.NS to Secure mode */ 3427c1a6210SJoseph Chen mrc p15, 0, r0, c1, c1, 0 3437c1a6210SJoseph Chen bic r0, r0, #(1 << 0) 3447c1a6210SJoseph Chen mcr p15, 0, r0, c1, c1, 0 3457c1a6210SJoseph Chen isb 3467c1a6210SJoseph Chen 3477c1a6210SJoseph Chen /* switch back to SVC */ 3487c1a6210SJoseph Chen cps #19 3497c1a6210SJoseph Chen isb 3507c1a6210SJoseph Chen#endif 3517c1a6210SJoseph Chen 352c616a0dfSNishanth Menon mov pc, r5 @ back to my caller 35374236acaSAneesh VENDPROC(cpu_init_cp15) 35480433c9aSSimon Glass 355b5bd0982SSimon Glass#if !defined(CONFIG_SKIP_LOWLEVEL_INIT) && \ 356b5bd0982SSimon Glass !defined(CONFIG_SKIP_LOWLEVEL_INIT_ONLY) 35780433c9aSSimon Glass/************************************************************************* 35880433c9aSSimon Glass * 35980433c9aSSimon Glass * CPU_init_critical registers 36080433c9aSSimon Glass * 36180433c9aSSimon Glass * setup important registers 36280433c9aSSimon Glass * setup memory timing 36380433c9aSSimon Glass * 36480433c9aSSimon Glass *************************************************************************/ 36574236acaSAneesh VENTRY(cpu_init_crit) 366f56348afSSteve Sakoman /* 367f56348afSSteve Sakoman * Jump to board specific initialization... 368f56348afSSteve Sakoman * The Mask ROM will have already initialized 369f56348afSSteve Sakoman * basic memory. Go here to bump up clock rate and handle 370f56348afSSteve Sakoman * wake up conditions. 371f56348afSSteve Sakoman */ 37263ee53a7SBenoît Thébaudeau b lowlevel_init @ go setup pll,mux,memory 37374236acaSAneesh VENDPROC(cpu_init_crit) 37422193540SRob Herring#endif 375