mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
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:
parent
a94ab561e2
commit
3e5f3dbe3a
5 changed files with 65 additions and 4 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 $@
|
||||||
|
|
41
arch/arm/mach-rmobile/cpu_info-rzg.c
Normal file
41
arch/arm/mach-rmobile/cpu_info-rzg.c
Normal 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;
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue