arm: mach-rmobile: Add CPU info support for RZ/G2

Add CPU info support for RZ/G2 SoC's.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
This commit is contained in:
Biju Das 2021-03-17 14:11:50 +00:00 committed by Marek Vasut
parent a94ab561e2
commit 3e5f3dbe3a
5 changed files with 65 additions and 4 deletions

View file

@ -57,6 +57,9 @@ config R8A77995
imply CLK_R8A77995 imply CLK_R8A77995
imply PINCTRL_PFC_R8A77995 imply PINCTRL_PFC_R8A77995
config RZ_G2
bool "Renesas ARM SoCs RZ/G2 (64bit)"
endmenu endmenu
choice choice
@ -107,6 +110,7 @@ config TARGET_HIHOPE_RZG2
imply R8A774A1 imply R8A774A1
imply R8A774B1 imply R8A774B1
imply R8A774E1 imply R8A774E1
imply RZ_G2
imply SYS_MALLOC_F imply SYS_MALLOC_F
imply MULTI_DTB_FIT imply MULTI_DTB_FIT
imply MULTI_DTB_FIT_USER_DEFINED_AREA imply MULTI_DTB_FIT_USER_DEFINED_AREA
@ -116,6 +120,7 @@ config TARGET_HIHOPE_RZG2
config TARGET_SILINUX_EK874 config TARGET_SILINUX_EK874
bool "Silicon Linux EK874 board" bool "Silicon Linux EK874 board"
imply R8A774C0 imply R8A774C0
imply RZ_G2
help help
Support for Silicon Linux EK874 platform Support for Silicon Linux EK874 platform

View 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_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_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_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 OBJCOPYFLAGS_u-boot-spl.srec := -O srec
quiet_cmd_objcopy = OBJCOPY $@ quiet_cmd_objcopy = OBJCOPY $@

View file

@ -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;
}

View file

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0+
/* /*
* (C) Copyright 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> * (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 <common.h>
#include <cpu_func.h> #include <cpu_func.h>
@ -31,6 +31,11 @@ void enable_caches(void)
#ifdef CONFIG_DISPLAY_CPUINFO #ifdef CONFIG_DISPLAY_CPUINFO
#ifndef CONFIG_RZA1 #ifndef CONFIG_RZA1
__weak const u8 *rzg_get_cpu_name(void)
{
return 0;
}
static u32 __rmobile_get_cpu_type(void) static u32 __rmobile_get_cpu_type(void)
{ {
return 0x0; return 0x0;
@ -52,7 +57,7 @@ static u32 __rmobile_get_cpu_rev_fraction(void)
u32 rmobile_get_cpu_rev_fraction(void) u32 rmobile_get_cpu_rev_fraction(void)
__attribute__((weak, alias("__rmobile_get_cpu_rev_fraction"))); __attribute__((weak, alias("__rmobile_get_cpu_rev_fraction")));
/* CPU infomation table */ /* CPU information table */
static const struct { static const struct {
u16 cpu_type; u16 cpu_type;
u8 cpu_name[10]; u8 cpu_name[10];
@ -86,14 +91,22 @@ static int rmobile_cpuinfo_idx(void)
return i; 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 #ifdef CONFIG_ARCH_MISC_INIT
int arch_misc_init(void) int arch_misc_init(void)
{ {
int i, idx = rmobile_cpuinfo_idx(); int i, idx = rmobile_cpuinfo_idx();
const u8 *cpu_name = get_cpu_name(idx);
char cpu[10] = { 0 }; char cpu[10] = { 0 };
for (i = 0; i < sizeof(cpu); i++) 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); env_set("platform", cpu);
@ -106,7 +119,7 @@ int print_cpuinfo(void)
int i = rmobile_cpuinfo_idx(); int i = rmobile_cpuinfo_idx();
printf("CPU: Renesas Electronics %s rev %d.%d\n", 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()); rmobile_get_cpu_rev_fraction());
return 0; return 0;

View file

@ -41,6 +41,7 @@
#define RMOBILE_CPU_TYPE_R8A77995 0x58 #define RMOBILE_CPU_TYPE_R8A77995 0x58
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
const u8 *rzg_get_cpu_name(void);
u32 rmobile_get_cpu_type(void); u32 rmobile_get_cpu_type(void);
u32 rmobile_get_cpu_rev_integer(void); u32 rmobile_get_cpu_rev_integer(void);
u32 rmobile_get_cpu_rev_fraction(void); u32 rmobile_get_cpu_rev_fraction(void);