xref: /openbmc/u-boot/arch/arm/cpu/arm946es/start.S (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
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