xref: /openbmc/u-boot/arch/arm/mach-rmobile/lowlevel_init.S (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */
2badbb63cSNobuhiro Iwamatsu/*
3badbb63cSNobuhiro Iwamatsu * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.Iwamatsu.yj@renesas.com>
4badbb63cSNobuhiro Iwamatsu * Copyright (C) 2012 Renesas Solutions Corp.
5badbb63cSNobuhiro Iwamatsu */
6badbb63cSNobuhiro Iwamatsu
7badbb63cSNobuhiro Iwamatsu#include <config.h>
8badbb63cSNobuhiro Iwamatsu#include <linux/linkage.h>
9badbb63cSNobuhiro Iwamatsu
10badbb63cSNobuhiro IwamatsuENTRY(lowlevel_init)
11badbb63cSNobuhiro Iwamatsu	ldr		r0, =MERAM_BASE
12badbb63cSNobuhiro Iwamatsu	mov		r1, #0x0
13badbb63cSNobuhiro Iwamatsu	str		r1, [r0]
14badbb63cSNobuhiro Iwamatsu
15badbb63cSNobuhiro Iwamatsu	mrc		p15, 0, r0, c0, c0, 5
16badbb63cSNobuhiro Iwamatsu	ands	r0, r0, #0xF
17badbb63cSNobuhiro Iwamatsu	beq		lowlevel_init__
18badbb63cSNobuhiro Iwamatsu	b		wait_interrupt
19badbb63cSNobuhiro Iwamatsu
20badbb63cSNobuhiro Iwamatsu	.pool
21badbb63cSNobuhiro Iwamatsu	.align 4
22badbb63cSNobuhiro Iwamatsu
23badbb63cSNobuhiro Iwamatsuwait_interrupt:
24badbb63cSNobuhiro Iwamatsu#ifdef ICCICR
25badbb63cSNobuhiro Iwamatsu	ldr     r1, =ICCICR
26badbb63cSNobuhiro Iwamatsu	mov     r2, #0x0
27badbb63cSNobuhiro Iwamatsu	str     r2, [r1]
28badbb63cSNobuhiro Iwamatsu	mov     r2, #0xF0
29badbb63cSNobuhiro Iwamatsu	adds    r1, r1, #4 /* ICCPMR */
30badbb63cSNobuhiro Iwamatsu	str     r2, [r1]
31badbb63cSNobuhiro Iwamatsu	ldr     r1, =ICCICR
32badbb63cSNobuhiro Iwamatsu	mov     r2, #0x1
33badbb63cSNobuhiro Iwamatsu	str     r2, [r1]
34badbb63cSNobuhiro Iwamatsu#endif
35badbb63cSNobuhiro Iwamatsu
36badbb63cSNobuhiro Iwamatsuwait_loop:
37badbb63cSNobuhiro Iwamatsu	.long	0xE320F003 /* wfi */
38badbb63cSNobuhiro Iwamatsu
39badbb63cSNobuhiro Iwamatsu	ldr		r2, [r1, #0xC]
40badbb63cSNobuhiro Iwamatsu	str		r2, [r1, #0x10]
41badbb63cSNobuhiro Iwamatsu
42badbb63cSNobuhiro Iwamatsu	ldr		r0, =MERAM_BASE
43badbb63cSNobuhiro Iwamatsu	ldr		r2, [r0]
44badbb63cSNobuhiro Iwamatsu	cmp		r2, #0
45badbb63cSNobuhiro Iwamatsu	movne	pc, r2
46badbb63cSNobuhiro Iwamatsu
47badbb63cSNobuhiro Iwamatsu	b		wait_loop
48badbb63cSNobuhiro Iwamatsu
49badbb63cSNobuhiro Iwamatsuwait_loop_end:
50badbb63cSNobuhiro Iwamatsu	.pool
51badbb63cSNobuhiro Iwamatsu	.align 4
52badbb63cSNobuhiro Iwamatsu
53badbb63cSNobuhiro Iwamatsulowlevel_init__:
54badbb63cSNobuhiro Iwamatsu
55badbb63cSNobuhiro Iwamatsu	mov r0, #0x200000
56badbb63cSNobuhiro Iwamatsu
57badbb63cSNobuhiro Iwamatsuloop0:
58badbb63cSNobuhiro Iwamatsu	subs r0, r0, #1
59badbb63cSNobuhiro Iwamatsu	bne  loop0
60badbb63cSNobuhiro Iwamatsu
61badbb63cSNobuhiro Iwamatsu	ldr sp, MERAM_STACK
62badbb63cSNobuhiro Iwamatsu	b s_init
63badbb63cSNobuhiro Iwamatsu
64badbb63cSNobuhiro Iwamatsu	.pool
65badbb63cSNobuhiro Iwamatsu	.align 4
66badbb63cSNobuhiro Iwamatsu
67badbb63cSNobuhiro IwamatsuENDPROC(lowlevel_init)
68badbb63cSNobuhiro Iwamatsu	.ltorg
69badbb63cSNobuhiro Iwamatsu
70badbb63cSNobuhiro IwamatsuMERAM_STACK:
71badbb63cSNobuhiro Iwamatsu	.word LOW_LEVEL_MERAM_STACK
72