1*63e22517SMarek Vasut /* 2*63e22517SMarek Vasut * board/renesas/ebisu/ebisu.c 3*63e22517SMarek Vasut * This file is Ebisu board support. 4*63e22517SMarek Vasut * 5*63e22517SMarek Vasut * Copyright (C) 2018 Marek Vasut <marek.vasut+renesas@gmail.com> 6*63e22517SMarek Vasut * 7*63e22517SMarek Vasut * SPDX-License-Identifier: GPL-2.0+ 8*63e22517SMarek Vasut */ 9*63e22517SMarek Vasut 10*63e22517SMarek Vasut #include <common.h> 11*63e22517SMarek Vasut #include <malloc.h> 12*63e22517SMarek Vasut #include <netdev.h> 13*63e22517SMarek Vasut #include <dm.h> 14*63e22517SMarek Vasut #include <dm/platform_data/serial_sh.h> 15*63e22517SMarek Vasut #include <asm/processor.h> 16*63e22517SMarek Vasut #include <asm/mach-types.h> 17*63e22517SMarek Vasut #include <asm/io.h> 18*63e22517SMarek Vasut #include <linux/errno.h> 19*63e22517SMarek Vasut #include <asm/arch/sys_proto.h> 20*63e22517SMarek Vasut #include <asm/gpio.h> 21*63e22517SMarek Vasut #include <asm/arch/gpio.h> 22*63e22517SMarek Vasut #include <asm/arch/rmobile.h> 23*63e22517SMarek Vasut #include <asm/arch/rcar-mstp.h> 24*63e22517SMarek Vasut #include <asm/arch/sh_sdhi.h> 25*63e22517SMarek Vasut #include <i2c.h> 26*63e22517SMarek Vasut #include <mmc.h> 27*63e22517SMarek Vasut 28*63e22517SMarek Vasut DECLARE_GLOBAL_DATA_PTR; 29*63e22517SMarek Vasut 30*63e22517SMarek Vasut void s_init(void) 31*63e22517SMarek Vasut { 32*63e22517SMarek Vasut } 33*63e22517SMarek Vasut 34*63e22517SMarek Vasut #define TMU0_MSTP125 BIT(25) /* secure */ 35*63e22517SMarek Vasut 36*63e22517SMarek Vasut int board_early_init_f(void) 37*63e22517SMarek Vasut { 38*63e22517SMarek Vasut /* TMU0 */ 39*63e22517SMarek Vasut mstp_clrbits_le32(MSTPSR1, SMSTPCR1, TMU0_MSTP125); 40*63e22517SMarek Vasut 41*63e22517SMarek Vasut return 0; 42*63e22517SMarek Vasut } 43*63e22517SMarek Vasut 44*63e22517SMarek Vasut int board_init(void) 45*63e22517SMarek Vasut { 46*63e22517SMarek Vasut /* adress of boot parameters */ 47*63e22517SMarek Vasut gd->bd->bi_boot_params = CONFIG_SYS_TEXT_BASE + 0x50000; 48*63e22517SMarek Vasut 49*63e22517SMarek Vasut return 0; 50*63e22517SMarek Vasut } 51*63e22517SMarek Vasut 52*63e22517SMarek Vasut int dram_init(void) 53*63e22517SMarek Vasut { 54*63e22517SMarek Vasut if (fdtdec_setup_memory_size() != 0) 55*63e22517SMarek Vasut return -EINVAL; 56*63e22517SMarek Vasut 57*63e22517SMarek Vasut return 0; 58*63e22517SMarek Vasut } 59*63e22517SMarek Vasut 60*63e22517SMarek Vasut int dram_init_banksize(void) 61*63e22517SMarek Vasut { 62*63e22517SMarek Vasut fdtdec_setup_memory_banksize(); 63*63e22517SMarek Vasut 64*63e22517SMarek Vasut return 0; 65*63e22517SMarek Vasut } 66*63e22517SMarek Vasut 67*63e22517SMarek Vasut #define RST_BASE 0xE6160000 68*63e22517SMarek Vasut #define RST_CA57RESCNT (RST_BASE + 0x40) 69*63e22517SMarek Vasut #define RST_CA53RESCNT (RST_BASE + 0x44) 70*63e22517SMarek Vasut #define RST_RSTOUTCR (RST_BASE + 0x58) 71*63e22517SMarek Vasut #define RST_CA57_CODE 0xA5A5000F 72*63e22517SMarek Vasut #define RST_CA53_CODE 0x5A5A000F 73*63e22517SMarek Vasut 74*63e22517SMarek Vasut void reset_cpu(ulong addr) 75*63e22517SMarek Vasut { 76*63e22517SMarek Vasut unsigned long midr, cputype; 77*63e22517SMarek Vasut 78*63e22517SMarek Vasut asm volatile("mrs %0, midr_el1" : "=r" (midr)); 79*63e22517SMarek Vasut cputype = (midr >> 4) & 0xfff; 80*63e22517SMarek Vasut 81*63e22517SMarek Vasut if (cputype == 0xd03) 82*63e22517SMarek Vasut writel(RST_CA53_CODE, RST_CA53RESCNT); 83*63e22517SMarek Vasut else if (cputype == 0xd07) 84*63e22517SMarek Vasut writel(RST_CA57_CODE, RST_CA57RESCNT); 85*63e22517SMarek Vasut else 86*63e22517SMarek Vasut hang(); 87*63e22517SMarek Vasut } 88