]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: mach-rmobile: Add CPU info support for RZ/G2
authorBiju Das <biju.das.jz@bp.renesas.com>
Wed, 17 Mar 2021 14:11:50 +0000 (14:11 +0000)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Tue, 13 Apr 2021 21:36:25 +0000 (23:36 +0200)
Add CPU info support for RZ/G2 SoC's.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
arch/arm/mach-rmobile/Kconfig.64
arch/arm/mach-rmobile/Makefile
arch/arm/mach-rmobile/cpu_info-rzg.c [new file with mode: 0644]
arch/arm/mach-rmobile/cpu_info.c
arch/arm/mach-rmobile/include/mach/rmobile.h

index 8127d33f2d63b660d4540512d6aca41d6f3e0fda..3f7ec05379512ead061b80d5487be11320a26630 100644 (file)
@@ -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
 
index 9f56af465ec651c078588294bdc8ceeb94ea2596..81a0dedb41af58c53d8dc09b69c56049c4697ff2 100644 (file)
@@ -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 (file)
index 0000000..1c18fd0
--- /dev/null
@@ -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;
+}
index fdbbd72e2857acbc54092499c4de7b670f04536f..9ec622bdb5101ab396a7aa34b42a1567131bf4b5 100644 (file)
@@ -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;
index a50249dc9638b7dedc8c7e53affbe9e0af041a09..a688636141ef98816e39da6eafd3dc18f93200d6 100644 (file)
@@ -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);