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