1 // SPDX-License-Identifier: GPL-2.0+
3 * (C) Copyright 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
4 * (C) Copyright 2012-2021 Renesas Solutions Corp.
12 #include <linux/ctype.h>
14 #ifdef CONFIG_ARCH_CPU_INIT
15 int arch_cpu_init(void)
22 /* R-Car Gen3 and Gen4 D-cache is enabled in memmap-gen3.c */
23 #ifndef CONFIG_RCAR_64
24 #if !CONFIG_IS_ENABLED(SYS_DCACHE_OFF)
25 void enable_caches(void)
32 #ifdef CONFIG_DISPLAY_CPUINFO
33 #if !defined(CONFIG_RZA1) && !defined(CONFIG_RZN1)
34 __weak const u8 *rzg_get_cpu_name(void)
39 __weak u32 renesas_get_cpu_type(void)
44 __weak u32 renesas_get_cpu_rev_integer(void)
49 __weak u32 renesas_get_cpu_rev_fraction(void)
54 /* CPU information table */
58 } renesas_cpuinfo[] = {
59 { RENESAS_CPU_TYPE_R8A7790, "R8A7790" },
60 { RENESAS_CPU_TYPE_R8A7791, "R8A7791" },
61 { RENESAS_CPU_TYPE_R8A7792, "R8A7792" },
62 { RENESAS_CPU_TYPE_R8A7793, "R8A7793" },
63 { RENESAS_CPU_TYPE_R8A7794, "R8A7794" },
64 { RENESAS_CPU_TYPE_R8A7795, "R8A7795" },
65 { RENESAS_CPU_TYPE_R8A7796, "R8A7796" },
66 { RENESAS_CPU_TYPE_R8A77965, "R8A77965" },
67 { RENESAS_CPU_TYPE_R8A77970, "R8A77970" },
68 { RENESAS_CPU_TYPE_R8A77980, "R8A77980" },
69 { RENESAS_CPU_TYPE_R8A77990, "R8A77990" },
70 { RENESAS_CPU_TYPE_R8A77995, "R8A77995" },
71 { RENESAS_CPU_TYPE_R8A779A0, "R8A779A0" },
72 { RENESAS_CPU_TYPE_R8A779F0, "R8A779F0" },
73 { RENESAS_CPU_TYPE_R8A779G0, "R8A779G0" },
74 { RENESAS_CPU_TYPE_R8A779H0, "R8A779H0" },
78 static int renesas_cpuinfo_idx(void)
80 u32 cpu_type = renesas_get_cpu_type();
83 for (i = 0; i < ARRAY_SIZE(renesas_cpuinfo) - 1; i++)
84 if (renesas_cpuinfo[i].cpu_type == cpu_type)
87 /* Unknown "CPU" entry */
88 return ARRAY_SIZE(renesas_cpuinfo) - 1;
91 static const u8 *get_cpu_name(int idx)
93 const u8 *cpu_name = rzg_get_cpu_name();
95 return cpu_name ? cpu_name : renesas_cpuinfo[idx].cpu_name;
98 #ifdef CONFIG_ARCH_MISC_INIT
99 int arch_misc_init(void)
101 int i, idx = renesas_cpuinfo_idx();
102 const u8 *cpu_name = get_cpu_name(idx);
103 char cpu[10] = { 0 };
105 for (i = 0; i < sizeof(cpu); i++)
106 cpu[i] = tolower(cpu_name[i]);
108 env_set("platform", cpu);
114 int print_cpuinfo(void)
116 int i = renesas_cpuinfo_idx();
118 if (renesas_cpuinfo[i].cpu_type == RENESAS_CPU_TYPE_R8A7796 &&
119 renesas_get_cpu_rev_integer() == 1 &&
120 renesas_get_cpu_rev_fraction() == 1) {
121 printf("CPU: Renesas Electronics %s rev 1.1/1.2\n", get_cpu_name(i));
125 printf("CPU: Renesas Electronics %s rev %d.%d\n",
126 get_cpu_name(i), renesas_get_cpu_rev_integer(),
127 renesas_get_cpu_rev_fraction());
131 #elif defined(CONFIG_RZA1)
132 int print_cpuinfo(void)
134 printf("CPU: Renesas Electronics RZ/A1\n");
137 #else /* CONFIG_RZN1 */
138 int print_cpuinfo(void)
140 printf("CPU: Renesas Electronics RZ/N1\n");
144 #endif /* CONFIG_DISPLAY_CPUINFO */