Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | // SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> * (C) Copyright 2012-2021 Renesas Solutions Corp. */ #include <cpu_func.h> #include <asm/cache.h> #include <init.h> #include <asm/io.h> #include <env.h> #include <linux/ctype.h> #ifdef CONFIG_ARCH_CPU_INIT int arch_cpu_init(void) { icache_enable(); return 0; } #endif /* R-Car Gen3 and Gen4 D-cache is enabled in memmap-gen3.c */ #ifndef CONFIG_RCAR_64 #if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF) void enable_caches(void) { dcache_enable(); } #endif #endif #ifdef CONFIG_DISPLAY_CPUINFO #if !defined(CONFIG_RZA1) && !defined(CONFIG_RZN1) __weak const u8 *rzg_get_cpu_name(void) { return 0; } __weak u32 renesas_get_cpu_type(void) { return 0x0; } __weak u32 renesas_get_cpu_rev_integer(void) { return 0; } __weak u32 renesas_get_cpu_rev_fraction(void) { return 0; } /* CPU information table */ static const struct { u16 cpu_type; u8 cpu_name[10]; } renesas_cpuinfo[] = { { RENESAS_CPU_TYPE_R8A7790, "R8A7790" }, { RENESAS_CPU_TYPE_R8A7791, "R8A7791" }, { RENESAS_CPU_TYPE_R8A7792, "R8A7792" }, { RENESAS_CPU_TYPE_R8A7793, "R8A7793" }, { RENESAS_CPU_TYPE_R8A7794, "R8A7794" }, { RENESAS_CPU_TYPE_R8A7795, "R8A7795" }, { RENESAS_CPU_TYPE_R8A7796, "R8A7796" }, { RENESAS_CPU_TYPE_R8A77965, "R8A77965" }, { RENESAS_CPU_TYPE_R8A77970, "R8A77970" }, { RENESAS_CPU_TYPE_R8A77980, "R8A77980" }, { RENESAS_CPU_TYPE_R8A77990, "R8A77990" }, { RENESAS_CPU_TYPE_R8A77995, "R8A77995" }, { RENESAS_CPU_TYPE_R8A779A0, "R8A779A0" }, { RENESAS_CPU_TYPE_R8A779F0, "R8A779F0" }, { RENESAS_CPU_TYPE_R8A779G0, "R8A779G0" }, { RENESAS_CPU_TYPE_R8A779H0, "R8A779H0" }, { RMOBILE_CPU_TYPE_R8A78000, "R8A78000" }, { 0x0, "CPU" }, }; static int renesas_cpuinfo_idx(void) { u32 cpu_type = renesas_get_cpu_type(); int i; for (i = 0; i < ARRAY_SIZE(renesas_cpuinfo) - 1; i++) if (renesas_cpuinfo[i].cpu_type == cpu_type) return i; /* Unknown "CPU" entry */ return ARRAY_SIZE(renesas_cpuinfo) - 1; } static const u8 *get_cpu_name(int idx) { const u8 *cpu_name = rzg_get_cpu_name(); return cpu_name ? cpu_name : renesas_cpuinfo[idx].cpu_name; } #ifdef CONFIG_ARCH_MISC_INIT int arch_misc_init(void) { int i, idx = renesas_cpuinfo_idx(); const u8 *cpu_name = get_cpu_name(idx); char cpu[10] = { 0 }; for (i = 0; i < sizeof(cpu); i++) cpu[i] = tolower(cpu_name[i]); env_set("platform", cpu); return 0; } #endif int print_cpuinfo(void) { int i = renesas_cpuinfo_idx(); if (renesas_cpuinfo[i].cpu_type == RENESAS_CPU_TYPE_R8A7796 && renesas_get_cpu_rev_integer() == 1 && renesas_get_cpu_rev_fraction() == 1) { printf("CPU: Renesas Electronics %s rev 1.1/1.2\n", get_cpu_name(i)); return 0; } printf("CPU: Renesas Electronics %s rev %d.%d\n", get_cpu_name(i), renesas_get_cpu_rev_integer(), renesas_get_cpu_rev_fraction()); return 0; } #elif defined(CONFIG_RZA1) int print_cpuinfo(void) { printf("CPU: Renesas Electronics RZ/A1\n"); return 0; } #else /* CONFIG_RZN1 */ int print_cpuinfo(void) { printf("CPU: Renesas Electronics RZ/N1\n"); return 0; } #endif #endif /* CONFIG_DISPLAY_CPUINFO */ |