blob: 14029246844c44497e4b18e6cd4b888516ddfbc6 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +02002/*
Cyril Chemparathy678e0082010-06-07 14:13:27 -04003 * armboot - Startup Code for ARM1176 CPU-core
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +02004 *
5 * Copyright (c) 2007 Samsung Electronics
6 *
7 * Copyright (C) 2008
8 * Guennadi Liakhovetki, DENX Software Engineering, <lg@denx.de>
9 *
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +020010 * 2007-09-21 - Restructured codes by jsgood (jsgood.yang@samsung.com)
11 * 2007-09-21 - Added MoviNAND and OneNAND boot codes by
12 * jsgood (jsgood.yang@samsung.com)
13 * Base codes by scsuh (sc.suh)
14 */
15
Wolfgang Denk25ddd1f2010-10-26 14:34:52 +020016#include <asm-offsets.h>
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +020017#include <config.h>
Cédric Schieli3e10fcd2016-11-11 11:59:06 +010018#include <linux/linkage.h>
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +020019
Benoît Thébaudeau9ce8e232013-04-11 09:36:02 +000020#ifndef CONFIG_SYS_PHY_UBOOT_BASE
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +020021#define CONFIG_SYS_PHY_UBOOT_BASE CONFIG_SYS_UBOOT_BASE
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +020022#endif
23
24/*
25 *************************************************************************
26 *
Guennadi Liakhovetski9b077732008-08-31 00:39:46 +020027 * Startup Code (reset vector)
28 *
29 * do important init only if we don't start from memory!
30 * setup Memory and board specific bits prior to relocation.
31 * relocate armboot to ram
32 * setup stack
33 *
34 *************************************************************************
35 */
36
Albert ARIBAUD41623c92014-04-15 16:13:51 +020037 .globl reset
Heiko Schochera51dd672010-09-17 13:10:53 +020038
39reset:
Cédric Schieli3e10fcd2016-11-11 11:59:06 +010040 /* Allow the board to save important registers */
41 b save_boot_params
42.globl save_boot_params_ret
43save_boot_params_ret:
44
Heiko Schochera51dd672010-09-17 13:10:53 +020045 /*
46 * set the cpu to SVC32 mode
47 */
48 mrs r0, cpsr
49 bic r0, r0, #0x3f
50 orr r0, r0, #0xd3
51 msr cpsr, r0
52
53/*
54 *************************************************************************
55 *
56 * CPU_init_critical registers
57 *
58 * setup important registers
59 * setup memory timing
60 *
61 *************************************************************************
62 */
63 /*
64 * we do sys-critical inits only at reboot,
65 * not when booting from ram!
66 */
67cpu_init_crit:
68 /*
69 * When booting from NAND - it has definitely been a reset, so, no need
70 * to flush caches and disable the MMU
71 */
Benoît Thébaudeau66f30bf2013-04-11 09:36:01 +000072#ifndef CONFIG_SPL_BUILD
Heiko Schochera51dd672010-09-17 13:10:53 +020073 /*
74 * flush v4 I/D caches
75 */
76 mov r0, #0
77 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */
78 mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */
79
80 /*
81 * disable MMU stuff and caches
82 */
83 mrc p15, 0, r0, c1, c0, 0
84 bic r0, r0, #0x00002300 @ clear bits 13, 9:8 (--V- --RS)
85 bic r0, r0, #0x00000087 @ clear bits 7, 2:0 (B--- -CAM)
Yuichiro Gotoba10b852016-02-25 10:23:34 +090086 orr r0, r0, #0x00000002 @ set bit 1 (A) Align
Heiko Schochera51dd672010-09-17 13:10:53 +020087 orr r0, r0, #0x00001000 @ set bit 12 (I) I-Cache
88
89 /* Prepare to disable the MMU */
90 adr r2, mmu_disable_phys
Wolfgang Denk14d0a022010-10-07 21:51:12 +020091 sub r2, r2, #(CONFIG_SYS_PHY_UBOOT_BASE - CONFIG_SYS_TEXT_BASE)
Heiko Schochera51dd672010-09-17 13:10:53 +020092 b mmu_disable
93
94 .align 5
95 /* Run in a single cache-line */
96mmu_disable:
97 mcr p15, 0, r0, c1, c0, 0
98 nop
99 nop
100 mov pc, r2
101mmu_disable_phys:
102
Heiko Schochera51dd672010-09-17 13:10:53 +0200103#endif
104
105 /*
106 * Go setup Memory and board specific bits prior to relocation.
107 */
108 bl lowlevel_init /* go setup pll,mux,memory */
109
Albert ARIBAUDe05e5de2013-01-08 10:18:02 +0000110 bl _main
Heiko Schochera51dd672010-09-17 13:10:53 +0200111
112/*------------------------------------------------------------------------------*/
113
Albert ARIBAUDe05e5de2013-01-08 10:18:02 +0000114 .globl c_runtime_cpu_setup
115c_runtime_cpu_setup:
116
117 mov pc, lr
Cédric Schieli3e10fcd2016-11-11 11:59:06 +0100118
119WEAK(save_boot_params)
120 b save_boot_params_ret /* back to my caller */
121ENDPROC(save_boot_params)