1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 284ad6884SPeter Tyser/* 384ad6884SPeter Tyser * armboot - Startup Code for ARM926EJS CPU-core 484ad6884SPeter Tyser * 584ad6884SPeter Tyser * Copyright (c) 2003 Texas Instruments 684ad6884SPeter Tyser * 784ad6884SPeter Tyser * ----- Adapted for OMAP1610 OMAP730 from ARM925t code ------ 884ad6884SPeter Tyser * 9fa82f871SAlbert ARIBAUD * Copyright (c) 2001 Marius Gröger <mag@sysgo.de> 10fa82f871SAlbert ARIBAUD * Copyright (c) 2002 Alex Züpke <azu@sysgo.de> 1184ad6884SPeter Tyser * Copyright (c) 2002 Gary Jennejohn <garyj@denx.de> 1284ad6884SPeter Tyser * Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com> 1384ad6884SPeter Tyser * Copyright (c) 2003 Kshitij <kshitij@ti.com> 1457b4bce9SAlbert ARIBAUD * Copyright (c) 2010 Albert Aribaud <albert.u.boot@aribaud.net> 1584ad6884SPeter Tyser */ 1684ad6884SPeter Tyser 1725ddd1fbSWolfgang Denk#include <asm-offsets.h> 1884ad6884SPeter Tyser#include <config.h> 1984ad6884SPeter Tyser 2084ad6884SPeter Tyser/* 2184ad6884SPeter Tyser ************************************************************************* 2284ad6884SPeter Tyser * 2384ad6884SPeter Tyser * Startup Code (reset vector) 2484ad6884SPeter Tyser * 2584ad6884SPeter Tyser * do important init only if we don't start from memory! 2684ad6884SPeter Tyser * setup Memory and board specific bits prior to relocation. 2784ad6884SPeter Tyser * relocate armboot to ram 2884ad6884SPeter Tyser * setup stack 2984ad6884SPeter Tyser * 3084ad6884SPeter Tyser ************************************************************************* 3184ad6884SPeter Tyser */ 3284ad6884SPeter Tyser 3341623c91SAlbert ARIBAUD .globl reset 345a8a87edSHeiko Schocher 355a8a87edSHeiko Schocherreset: 365a8a87edSHeiko Schocher /* 375a8a87edSHeiko Schocher * set the cpu to SVC32 mode 385a8a87edSHeiko Schocher */ 395a8a87edSHeiko Schocher mrs r0,cpsr 405a8a87edSHeiko Schocher bic r0,r0,#0x1f 415a8a87edSHeiko Schocher orr r0,r0,#0xd3 425a8a87edSHeiko Schocher msr cpsr,r0 435a8a87edSHeiko Schocher 445a8a87edSHeiko Schocher /* 455a8a87edSHeiko Schocher * we do sys-critical inits only at reboot, 465a8a87edSHeiko Schocher * not when booting from ram! 475a8a87edSHeiko Schocher */ 485a8a87edSHeiko Schocher#ifndef CONFIG_SKIP_LOWLEVEL_INIT 495a8a87edSHeiko Schocher bl cpu_init_crit 505a8a87edSHeiko Schocher#endif 515a8a87edSHeiko Schocher 52e05e5de7SAlbert ARIBAUD bl _main 535a8a87edSHeiko Schocher 545a8a87edSHeiko Schocher/*------------------------------------------------------------------------------*/ 555a8a87edSHeiko Schocher 56e05e5de7SAlbert ARIBAUD .globl c_runtime_cpu_setup 57e05e5de7SAlbert ARIBAUDc_runtime_cpu_setup: 58e05e5de7SAlbert ARIBAUD 59e05e5de7SAlbert ARIBAUD mov pc, lr 60e05e5de7SAlbert ARIBAUD 6184ad6884SPeter Tyser/* 6284ad6884SPeter Tyser ************************************************************************* 6384ad6884SPeter Tyser * 6484ad6884SPeter Tyser * CPU_init_critical registers 6584ad6884SPeter Tyser * 6684ad6884SPeter Tyser * setup important registers 6784ad6884SPeter Tyser * setup memory timing 6884ad6884SPeter Tyser * 6984ad6884SPeter Tyser ************************************************************************* 7084ad6884SPeter Tyser */ 7184ad6884SPeter Tyser 7284ad6884SPeter Tyser 7384ad6884SPeter Tyser#ifndef CONFIG_SKIP_LOWLEVEL_INIT 7484ad6884SPeter Tysercpu_init_crit: 7584ad6884SPeter Tyser /* 7684ad6884SPeter Tyser * flush v4 I/D caches 7784ad6884SPeter Tyser */ 7884ad6884SPeter Tyser mov r0, #0 7984ad6884SPeter Tyser mcr p15, 0, r0, c7, c5, 0 /* flush v4 I-cache */ 8084ad6884SPeter Tyser mcr p15, 0, r0, c7, c6, 0 /* flush v4 D-cache */ 8184ad6884SPeter Tyser 8284ad6884SPeter Tyser /* 8384ad6884SPeter Tyser * disable MMU stuff and caches 8484ad6884SPeter Tyser */ 8584ad6884SPeter Tyser mrc p15, 0, r0, c1, c0, 0 8684ad6884SPeter Tyser bic r0, r0, #0x00002300 /* clear bits 13, 9:8 (--V- --RS) */ 8784ad6884SPeter Tyser bic r0, r0, #0x00000087 /* clear bits 7, 2:0 (B--- -CAM) */ 88ba10b852SYuichiro Goto orr r0, r0, #0x00000002 /* set bit 1 (A) Align */ 8984ad6884SPeter Tyser orr r0, r0, #0x00001000 /* set bit 12 (I) I-Cache */ 9084ad6884SPeter Tyser mcr p15, 0, r0, c1, c0, 0 9184ad6884SPeter Tyser 92b5bd0982SSimon Glass#ifndef CONFIG_SKIP_LOWLEVEL_INIT_ONLY 9384ad6884SPeter Tyser /* 9484ad6884SPeter Tyser * Go setup Memory and board specific bits prior to relocation. 9584ad6884SPeter Tyser */ 9684ad6884SPeter Tyser mov ip, lr /* perserve link reg across call */ 9784ad6884SPeter Tyser bl lowlevel_init /* go setup memory */ 9884ad6884SPeter Tyser mov lr, ip /* restore link */ 99b5bd0982SSimon Glass#endif 10084ad6884SPeter Tyser mov pc, lr /* back to my caller */ 10184ad6884SPeter Tyser#endif 102