diff options
-rw-r--r-- | arch/arm/mach-rmobile/Kconfig.64 | 5 | ||||
-rw-r--r-- | arch/arm/mach-rmobile/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-rmobile/cpu_info-rzg.c | 41 | ||||
-rw-r--r-- | arch/arm/mach-rmobile/cpu_info.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-rmobile/include/mach/rmobile.h | 1 |
5 files changed, 65 insertions, 4 deletions
diff --git a/arch/arm/mach-rmobile/Kconfig.64 b/arch/arm/mach-rmobile/Kconfig.64 index 8127d33f2d6..3f7ec053795 100644 --- a/arch/arm/mach-rmobile/Kconfig.64 +++ b/arch/arm/mach-rmobile/Kconfig.64 @@ -57,6 +57,9 @@ config R8A77995 imply CLK_R8A77995 imply PINCTRL_PFC_R8A77995 +config RZ_G2 + bool "Renesas ARM SoCs RZ/G2 (64bit)" + endmenu choice @@ -107,6 +110,7 @@ config TARGET_HIHOPE_RZG2 imply R8A774A1 imply R8A774B1 imply R8A774E1 + imply RZ_G2 imply SYS_MALLOC_F imply MULTI_DTB_FIT imply MULTI_DTB_FIT_USER_DEFINED_AREA @@ -116,6 +120,7 @@ config TARGET_HIHOPE_RZG2 config TARGET_SILINUX_EK874 bool "Silicon Linux EK874 board" imply R8A774C0 + imply RZ_G2 help Support for Silicon Linux EK874 platform diff --git a/arch/arm/mach-rmobile/Makefile b/arch/arm/mach-rmobile/Makefile index 9f56af465ec..81a0dedb41a 100644 --- a/arch/arm/mach-rmobile/Makefile +++ b/arch/arm/mach-rmobile/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_SH73A0) += lowlevel_init.o cpu_info-sh73a0.o pfc-sh73a0.o obj-$(CONFIG_R8A7740) += lowlevel_init.o cpu_info-r8a7740.o pfc-r8a7740.o obj-$(CONFIG_RCAR_GEN2) += lowlevel_init_ca15.o cpu_info-rcar.o obj-$(CONFIG_RCAR_GEN3) += lowlevel_init_gen3.o cpu_info-rcar.o memmap-gen3.o +obj-$(CONFIG_RZ_G2) += cpu_info-rzg.o OBJCOPYFLAGS_u-boot-spl.srec := -O srec quiet_cmd_objcopy = OBJCOPY $@ diff --git a/arch/arm/mach-rmobile/cpu_info-rzg.c b/arch/arm/mach-rmobile/cpu_info-rzg.c new file mode 100644 index 00000000000..1c18fd06f0b --- /dev/null +++ b/arch/arm/mach-rmobile/cpu_info-rzg.c @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2021 Renesas Electronics Corporation + * + */ +#include <common.h> +#include <linux/libfdt.h> + +/* If the firmware passed a device tree, use it for soc identification. */ +extern u64 rcar_atf_boot_args[]; + +/* CPU information table */ +static const struct { + char *soc_name; + u8 cpu_name[10]; +} tfa_info[] = { + { "renesas,r8a774a1", "R8A774A1" }, + { "renesas,r8a774b1", "R8A774B1" }, + { "renesas,r8a774c0", "R8A774C0" }, + { "renesas,r8a774e1", "R8A774E1" } +}; + +const u8 *rzg_get_cpu_name(void) +{ + void *atf_fdt_blob = (void *)(rcar_atf_boot_args[1]); + bool ret = false; + int i; + + if (fdt_magic(atf_fdt_blob) != FDT_MAGIC) + return NULL; + + for (i = 0; i < ARRAY_SIZE(tfa_info); i++) { + if (fdt_node_check_compatible(atf_fdt_blob, 0, + tfa_info[i].soc_name) == 0) { + ret = true; + break; + } + } + + return ret ? tfa_info[i].cpu_name : NULL; +} diff --git a/arch/arm/mach-rmobile/cpu_info.c b/arch/arm/mach-rmobile/cpu_info.c index fdbbd72e285..9ec622bdb51 100644 --- a/arch/arm/mach-rmobile/cpu_info.c +++ b/arch/arm/mach-rmobile/cpu_info.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> - * (C) Copyright 2012 Renesas Solutions Corp. + * (C) Copyright 2012-2021 Renesas Solutions Corp. */ #include <common.h> #include <cpu_func.h> @@ -31,6 +31,11 @@ void enable_caches(void) #ifdef CONFIG_DISPLAY_CPUINFO #ifndef CONFIG_RZA1 +__weak const u8 *rzg_get_cpu_name(void) +{ + return 0; +} + static u32 __rmobile_get_cpu_type(void) { return 0x0; @@ -52,7 +57,7 @@ static u32 __rmobile_get_cpu_rev_fraction(void) u32 rmobile_get_cpu_rev_fraction(void) __attribute__((weak, alias("__rmobile_get_cpu_rev_fraction"))); -/* CPU infomation table */ +/* CPU information table */ static const struct { u16 cpu_type; u8 cpu_name[10]; @@ -86,14 +91,22 @@ static int rmobile_cpuinfo_idx(void) return i; } +static const u8 *get_cpu_name(int idx) +{ + const u8 *cpu_name = rzg_get_cpu_name(); + + return cpu_name ? cpu_name : rmobile_cpuinfo[idx].cpu_name; +} + #ifdef CONFIG_ARCH_MISC_INIT int arch_misc_init(void) { int i, idx = rmobile_cpuinfo_idx(); + const u8 *cpu_name = get_cpu_name(idx); char cpu[10] = { 0 }; for (i = 0; i < sizeof(cpu); i++) - cpu[i] = tolower(rmobile_cpuinfo[idx].cpu_name[i]); + cpu[i] = tolower(cpu_name[i]); env_set("platform", cpu); @@ -106,7 +119,7 @@ int print_cpuinfo(void) int i = rmobile_cpuinfo_idx(); printf("CPU: Renesas Electronics %s rev %d.%d\n", - rmobile_cpuinfo[i].cpu_name, rmobile_get_cpu_rev_integer(), + get_cpu_name(i), rmobile_get_cpu_rev_integer(), rmobile_get_cpu_rev_fraction()); return 0; diff --git a/arch/arm/mach-rmobile/include/mach/rmobile.h b/arch/arm/mach-rmobile/include/mach/rmobile.h index a50249dc963..a688636141e 100644 --- a/arch/arm/mach-rmobile/include/mach/rmobile.h +++ b/arch/arm/mach-rmobile/include/mach/rmobile.h @@ -41,6 +41,7 @@ #define RMOBILE_CPU_TYPE_R8A77995 0x58 #ifndef __ASSEMBLY__ +const u8 *rzg_get_cpu_name(void); u32 rmobile_get_cpu_type(void); u32 rmobile_get_cpu_rev_integer(void); u32 rmobile_get_cpu_rev_fraction(void); |