1*badbb63cSNobuhiro Iwamatsu /* 2*badbb63cSNobuhiro Iwamatsu * (C) Copyright 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> 3*badbb63cSNobuhiro Iwamatsu * (C) Copyright 2012 Renesas Solutions Corp. 4*badbb63cSNobuhiro Iwamatsu * 5*badbb63cSNobuhiro Iwamatsu * SPDX-License-Identifier: GPL-2.0+ 6*badbb63cSNobuhiro Iwamatsu */ 7*badbb63cSNobuhiro Iwamatsu #include <common.h> 8*badbb63cSNobuhiro Iwamatsu #include <asm/io.h> 9*badbb63cSNobuhiro Iwamatsu 10*badbb63cSNobuhiro Iwamatsu #ifdef CONFIG_ARCH_CPU_INIT 11*badbb63cSNobuhiro Iwamatsu int arch_cpu_init(void) 12*badbb63cSNobuhiro Iwamatsu { 13*badbb63cSNobuhiro Iwamatsu icache_enable(); 14*badbb63cSNobuhiro Iwamatsu return 0; 15*badbb63cSNobuhiro Iwamatsu } 16*badbb63cSNobuhiro Iwamatsu #endif 17*badbb63cSNobuhiro Iwamatsu 18*badbb63cSNobuhiro Iwamatsu #ifndef CONFIG_SYS_DCACHE_OFF 19*badbb63cSNobuhiro Iwamatsu void enable_caches(void) 20*badbb63cSNobuhiro Iwamatsu { 21*badbb63cSNobuhiro Iwamatsu dcache_enable(); 22*badbb63cSNobuhiro Iwamatsu } 23*badbb63cSNobuhiro Iwamatsu #endif 24*badbb63cSNobuhiro Iwamatsu 25*badbb63cSNobuhiro Iwamatsu #ifdef CONFIG_DISPLAY_CPUINFO 26*badbb63cSNobuhiro Iwamatsu static u32 __rmobile_get_cpu_type(void) 27*badbb63cSNobuhiro Iwamatsu { 28*badbb63cSNobuhiro Iwamatsu return 0x0; 29*badbb63cSNobuhiro Iwamatsu } 30*badbb63cSNobuhiro Iwamatsu u32 rmobile_get_cpu_type(void) 31*badbb63cSNobuhiro Iwamatsu __attribute__((weak, alias("__rmobile_get_cpu_type"))); 32*badbb63cSNobuhiro Iwamatsu 33*badbb63cSNobuhiro Iwamatsu static u32 __rmobile_get_cpu_rev_integer(void) 34*badbb63cSNobuhiro Iwamatsu { 35*badbb63cSNobuhiro Iwamatsu return 0; 36*badbb63cSNobuhiro Iwamatsu } 37*badbb63cSNobuhiro Iwamatsu u32 rmobile_get_cpu_rev_integer(void) 38*badbb63cSNobuhiro Iwamatsu __attribute__((weak, alias("__rmobile_get_cpu_rev_integer"))); 39*badbb63cSNobuhiro Iwamatsu 40*badbb63cSNobuhiro Iwamatsu static u32 __rmobile_get_cpu_rev_fraction(void) 41*badbb63cSNobuhiro Iwamatsu { 42*badbb63cSNobuhiro Iwamatsu return 0; 43*badbb63cSNobuhiro Iwamatsu } 44*badbb63cSNobuhiro Iwamatsu u32 rmobile_get_cpu_rev_fraction(void) 45*badbb63cSNobuhiro Iwamatsu __attribute__((weak, alias("__rmobile_get_cpu_rev_fraction"))); 46*badbb63cSNobuhiro Iwamatsu 47*badbb63cSNobuhiro Iwamatsu /* CPU infomation table */ 48*badbb63cSNobuhiro Iwamatsu static const struct { 49*badbb63cSNobuhiro Iwamatsu u16 cpu_type; 50*badbb63cSNobuhiro Iwamatsu u8 cpu_name[10]; 51*badbb63cSNobuhiro Iwamatsu } rmobile_cpuinfo[] = { 52*badbb63cSNobuhiro Iwamatsu { 0x37, "SH73A0" }, 53*badbb63cSNobuhiro Iwamatsu { 0x40, "R8A7740" }, 54*badbb63cSNobuhiro Iwamatsu { 0x45, "R8A7790" }, 55*badbb63cSNobuhiro Iwamatsu { 0x47, "R8A7791" }, 56*badbb63cSNobuhiro Iwamatsu { 0x4B, "R8A7793" }, 57*badbb63cSNobuhiro Iwamatsu { 0x4C, "R8A7794" }, 58*badbb63cSNobuhiro Iwamatsu { 0x0, "CPU" }, 59*badbb63cSNobuhiro Iwamatsu }; 60*badbb63cSNobuhiro Iwamatsu 61*badbb63cSNobuhiro Iwamatsu int print_cpuinfo(void) 62*badbb63cSNobuhiro Iwamatsu { 63*badbb63cSNobuhiro Iwamatsu int i = 0; 64*badbb63cSNobuhiro Iwamatsu u32 cpu_type = rmobile_get_cpu_type(); 65*badbb63cSNobuhiro Iwamatsu for (; i < ARRAY_SIZE(rmobile_cpuinfo); i++) { 66*badbb63cSNobuhiro Iwamatsu if (rmobile_cpuinfo[i].cpu_type == cpu_type) { 67*badbb63cSNobuhiro Iwamatsu printf("CPU: Renesas Electronics %s rev %d.%d\n", 68*badbb63cSNobuhiro Iwamatsu rmobile_cpuinfo[i].cpu_name, 69*badbb63cSNobuhiro Iwamatsu rmobile_get_cpu_rev_integer(), 70*badbb63cSNobuhiro Iwamatsu rmobile_get_cpu_rev_fraction()); 71*badbb63cSNobuhiro Iwamatsu break; 72*badbb63cSNobuhiro Iwamatsu } 73*badbb63cSNobuhiro Iwamatsu } 74*badbb63cSNobuhiro Iwamatsu return 0; 75*badbb63cSNobuhiro Iwamatsu } 76*badbb63cSNobuhiro Iwamatsu #endif /* CONFIG_DISPLAY_CPUINFO */ 77