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