From patchwork Sat Jan 16 20:36:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Biju Das X-Patchwork-Id: 1427562 X-Patchwork-Delegate: marek.vasut@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DJ8xK2Hlkz9sVR for ; Sun, 17 Jan 2021 07:37:25 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 2169D82981; Sat, 16 Jan 2021 21:37:10 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=bp.renesas.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id 1420482978; Sat, 16 Jan 2021 21:37:07 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,KHOP_HELO_FCRDNS, SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.2 Received: from relmlie5.idc.renesas.com (relmlor1.renesas.com [210.160.252.171]) by phobos.denx.de (Postfix) with ESMTP id B8C3382974 for ; Sat, 16 Jan 2021 21:37:01 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=bp.renesas.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=biju.das.jz@bp.renesas.com X-IronPort-AV: E=Sophos;i="5.79,352,1602514800"; d="scan'208";a="69211963" Received: from unknown (HELO relmlir6.idc.renesas.com) ([10.200.68.152]) by relmlie5.idc.renesas.com with ESMTP; 17 Jan 2021 05:37:00 +0900 Received: from localhost.localdomain (unknown [172.29.53.99]) by relmlir6.idc.renesas.com (Postfix) with ESMTP id 9CCCF4016A7B; Sun, 17 Jan 2021 05:36:58 +0900 (JST) From: Biju Das To: Nobuhiro Iwamatsu , Marek Vasut Cc: Biju Das , Lad Prabhakar , Adam Ford , Tom Rini , u-boot@lists.denx.de, Chris Paterson Subject: [PATCH v8 1/4] arm: rmobile: Add RZ/G2[HMNE] SoC support Date: Sat, 16 Jan 2021 20:36:51 +0000 Message-Id: <20210116203654.31066-2-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210116203654.31066-1-biju.das.jz@bp.renesas.com> References: <20210116203654.31066-1-biju.das.jz@bp.renesas.com> X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean RZ/G2 SoC's are identical to R-Car Gen3 SoC's apart from some automotive peripherals. RZ/G2H (R8A774E1) = R-Car H3-N (R8A77951). RZ/G2M (R8A774A1) = R-Car M3-W (R8A77960). RZ/G2N (R8A774B1) = R-Car M3-N (R8A77965). RZ/G2E (R8A774C0) = R-Car E3 (R8A77990). As the devices are the same they also have the same SoC PRR register values. SoC driver is used to distinguish the cpu type based on the family. Signed-off-by: Biju Das Reviewed-by: Lad Prabhakar --- v7->v8 * Optimized the cpu detection image size, when Renesas SoC identification driver is disabled for R-Car Gen2 SPL builds with v8: -------- $ size spl/arch/arm/mach-rmobile/cpu_info.o text data bss dec hex filename 462 0 0 462 1ce spl/arch/arm/mach-rmobile/cpu_info.o $ ls -al spl/arch/arm/mach-rmobile/cpu_info.o -rw-r--r-- 1 biju biju 9308 Jan 16 17:28 spl/arch/arm/mach-rmobile/cpu_info.o $ ls -al spl/arch/arm/mach-rmobile/cpu_info-rcar.o -rw-r--r-- 1 biju biju 6864 Jan 16 18:28 spl/arch/arm/mach-rmobile/cpu_info-rcar.o $ size spl/arch/arm/mach-rmobile/cpu_info-rcar.o text data bss dec hex filename 154 0 0 154 9a spl/arch/arm/mach-rmobile/cpu_info-rcar.o with v7: -------- $ size spl/arch/arm/mach-rmobile/cpu_info.o text data bss dec hex filename 330 0 0 330 14a spl/arch/arm/mach-rmobile/cpu_info.o $ ls -al spl/arch/arm/mach-rmobile/cpu_info.o -rw-r--r-- 1 biju biju 9176 Jan 16 18:10 spl/arch/arm/mach-rmobile/cpu_info.o $ ls -al spl/arch/arm/mach-rmobile/cpu_info-rcar.o -rw-r--r-- 1 biju biju 6244 Jan 16 18:30 spl/arch/arm/mach-rmobile/cpu_info-rcar.o $ size spl/arch/arm/mach-rmobile/cpu_info-rcar.o text data bss dec hex filename 120 0 0 120 78 spl/arch/arm/mach-rmobile/cpu_info-rcar.o v6->v7 * Seperated driver patch series from board support patches. v5->v6 * Optimized the unique CPU identification method by using Renesas SoC identification driver. v4->v5 * Add support for unique identification of RZ/G2 CPU types (Ref: https://patchwork.ozlabs.org/project/uboot/patch/20201008085941.3600-1-biju.das.jz@bp.renesas.com/) v3->v4 * Dropped CPU info reporting logic for RZ/G2. Will address this later. * Added PRRID's for RZG2[HMNE] (Ref: https://patchwork.ozlabs.org/project/uboot/patch/20201001103658.4835-1-biju.das.jz@bp.renesas.com/) v2->v3 * Reworked as per Marek's suggestion * Added rzg2_get_cpu_type function to get cpu_type by matching TFA compatible string * Removed SoC family type Enum (Ref: https://patchwork.ozlabs.org/project/uboot/patch/20200922160317.16296-2-biju.das.jz@bp.renesas.com/) v1->v2: * Add comment's related to loop logic (ref: https://patchwork.ozlabs.org/project/uboot/patch/20200918160307.14323-1-biju.das.jz@bp.renesas.com/) v1: * New patch (ref:https://patchwork.ozlabs.org/project/uboot/patch/20200915143630.7678-4-biju.das.jz@bp.renesas.com/ --- arch/arm/mach-rmobile/Makefile | 7 +++ arch/arm/mach-rmobile/cpu_info-rcar.c | 20 ++++++- arch/arm/mach-rmobile/cpu_info.c | 12 +++- arch/arm/mach-rmobile/include/mach/rmobile.h | 63 +++++++++++++++----- arch/arm/mach-rmobile/soc_family-info.c | 21 +++++++ 5 files changed, 102 insertions(+), 21 deletions(-) create mode 100644 arch/arm/mach-rmobile/soc_family-info.c diff --git a/arch/arm/mach-rmobile/Makefile b/arch/arm/mach-rmobile/Makefile index 3206bce722..305dee87e2 100644 --- a/arch/arm/mach-rmobile/Makefile +++ b/arch/arm/mach-rmobile/Makefile @@ -13,6 +13,13 @@ 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_RCAR_GEN3) += soc_family-info.o + +ifeq ($(CONFIG_RCAR_GEN2),y) +ifneq ($(CONFIG_SPL_BUILD),y) +obj-y += soc_family-info.o +endif +endif OBJCOPYFLAGS_u-boot-spl.srec := -O srec quiet_cmd_objcopy = OBJCOPY $@ diff --git a/arch/arm/mach-rmobile/cpu_info-rcar.c b/arch/arm/mach-rmobile/cpu_info-rcar.c index 5bde24ae0e..7d162235d2 100644 --- a/arch/arm/mach-rmobile/cpu_info-rcar.c +++ b/arch/arm/mach-rmobile/cpu_info-rcar.c @@ -1,8 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 /* - * arch/arm/cpu/armv7/rmobile/cpu_info-rcar.c + * arch/arm/mach-rmobile/cpu_info-rcar.c * - * Copyright (C) 2013,2014 Renesas Electronics Corporation + * Copyright (C) 2013-2021 Renesas Electronics Corporation */ #include #include @@ -12,6 +12,15 @@ #define R8A7796_REV_1_1 0x5210 #define R8A7796_REV_1_3 0x5211 +#if defined(CONFIG_RCAR_GEN2) && defined(CONFIG_SPL_BUILD) +static bool __is_rzg_family(void) +{ + return false; +} +bool is_rzg_family(void) + __attribute__((weak, alias("__is_rzg_family"))); +#endif + static u32 rmobile_get_prr(void) { #ifdef CONFIG_RCAR_GEN3 @@ -23,7 +32,12 @@ static u32 rmobile_get_prr(void) u32 rmobile_get_cpu_type(void) { - return (rmobile_get_prr() & 0x00007F00) >> 8; + u32 soc_id = (rmobile_get_prr() & 0x7F00) >> 8; + + if (is_rzg_family()) + soc_id |= RZG_CPU_MASK; + + return soc_id; } u32 rmobile_get_cpu_rev_integer(void) diff --git a/arch/arm/mach-rmobile/cpu_info.c b/arch/arm/mach-rmobile/cpu_info.c index fdbbd72e28..2555fa4903 100644 --- a/arch/arm/mach-rmobile/cpu_info.c +++ b/arch/arm/mach-rmobile/cpu_info.c @@ -3,12 +3,12 @@ * (C) Copyright 2012 Nobuhiro Iwamatsu * (C) Copyright 2012 Renesas Solutions Corp. */ -#include -#include #include -#include #include +#include +#include #include +#include #include #ifdef CONFIG_ARCH_CPU_INIT @@ -64,6 +64,11 @@ static const struct { { RMOBILE_CPU_TYPE_R8A7792, "R8A7792" }, { RMOBILE_CPU_TYPE_R8A7793, "R8A7793" }, { RMOBILE_CPU_TYPE_R8A7794, "R8A7794" }, +#ifdef CONFIG_RCAR_GEN3 + { RMOBILE_CPU_TYPE_R8A774A1, "R8A774A1" }, + { RMOBILE_CPU_TYPE_R8A774B1, "R8A774B1" }, + { RMOBILE_CPU_TYPE_R8A774C0, "R8A774C0" }, + { RMOBILE_CPU_TYPE_R8A774E1, "R8A774E1" }, { RMOBILE_CPU_TYPE_R8A7795, "R8A7795" }, { RMOBILE_CPU_TYPE_R8A7796, "R8A7796" }, { RMOBILE_CPU_TYPE_R8A77965, "R8A77965" }, @@ -71,6 +76,7 @@ static const struct { { RMOBILE_CPU_TYPE_R8A77980, "R8A77980" }, { RMOBILE_CPU_TYPE_R8A77990, "R8A77990" }, { RMOBILE_CPU_TYPE_R8A77995, "R8A77995" }, +#endif { 0x0, "CPU" }, }; diff --git a/arch/arm/mach-rmobile/include/mach/rmobile.h b/arch/arm/mach-rmobile/include/mach/rmobile.h index a50249dc96..58e51e8df2 100644 --- a/arch/arm/mach-rmobile/include/mach/rmobile.h +++ b/arch/arm/mach-rmobile/include/mach/rmobile.h @@ -1,6 +1,8 @@ #ifndef __ASM_ARCH_RMOBILE_H #define __ASM_ARCH_RMOBILE_H +#include + #if defined(CONFIG_ARCH_RMOBILE) #if defined(CONFIG_SH73A0) #include @@ -24,23 +26,54 @@ #endif #endif /* CONFIG_ARCH_RMOBILE */ -/* PRR CPU IDs */ -#define RMOBILE_CPU_TYPE_SH73A0 0x37 -#define RMOBILE_CPU_TYPE_R8A7740 0x40 -#define RMOBILE_CPU_TYPE_R8A7790 0x45 -#define RMOBILE_CPU_TYPE_R8A7791 0x47 -#define RMOBILE_CPU_TYPE_R8A7792 0x4A -#define RMOBILE_CPU_TYPE_R8A7793 0x4B -#define RMOBILE_CPU_TYPE_R8A7794 0x4C -#define RMOBILE_CPU_TYPE_R8A7795 0x4F -#define RMOBILE_CPU_TYPE_R8A7796 0x52 -#define RMOBILE_CPU_TYPE_R8A77965 0x55 -#define RMOBILE_CPU_TYPE_R8A77970 0x54 -#define RMOBILE_CPU_TYPE_R8A77980 0x56 -#define RMOBILE_CPU_TYPE_R8A77990 0x57 -#define RMOBILE_CPU_TYPE_R8A77995 0x58 +/* PRR IDs */ +#define SOC_ID_SH73A0 0x37 +#define SOC_ID_R8A7740 0x40 +#define SOC_ID_R8A774A1 0x52 +#define SOC_ID_R8A774B1 0x55 +#define SOC_ID_R8A774C0 0x57 +#define SOC_ID_R8A774E1 0x4F +#define SOC_ID_R8A7790 0x45 +#define SOC_ID_R8A7791 0x47 +#define SOC_ID_R8A7792 0x4A +#define SOC_ID_R8A7793 0x4B +#define SOC_ID_R8A7794 0x4C +#define SOC_ID_R8A7795 0x4F +#define SOC_ID_R8A7796 0x52 +#define SOC_ID_R8A77965 0x55 +#define SOC_ID_R8A77970 0x54 +#define SOC_ID_R8A77980 0x56 +#define SOC_ID_R8A77990 0x57 +#define SOC_ID_R8A77995 0x58 + +/* CPU IDs */ +#define RMOBILE_CPU_TYPE_SH73A0 SOC_ID_SH73A0 +#define RMOBILE_CPU_TYPE_R8A7740 SOC_ID_R8A7740 +#define RMOBILE_CPU_TYPE_R8A774A1 (SOC_ID_R8A774A1 | RZG_CPU_MASK) +#define RMOBILE_CPU_TYPE_R8A774B1 (SOC_ID_R8A774B1 | RZG_CPU_MASK) +#define RMOBILE_CPU_TYPE_R8A774C0 (SOC_ID_R8A774C0 | RZG_CPU_MASK) +#define RMOBILE_CPU_TYPE_R8A774E1 (SOC_ID_R8A774E1 | RZG_CPU_MASK) +#define RMOBILE_CPU_TYPE_R8A7790 SOC_ID_R8A7790 +#define RMOBILE_CPU_TYPE_R8A7791 SOC_ID_R8A7791 +#define RMOBILE_CPU_TYPE_R8A7792 SOC_ID_R8A7792 +#define RMOBILE_CPU_TYPE_R8A7793 SOC_ID_R8A7793 +#define RMOBILE_CPU_TYPE_R8A7794 SOC_ID_R8A7794 +#define RMOBILE_CPU_TYPE_R8A7795 SOC_ID_R8A7795 +#define RMOBILE_CPU_TYPE_R8A7796 SOC_ID_R8A7796 +#define RMOBILE_CPU_TYPE_R8A77965 SOC_ID_R8A77965 +#define RMOBILE_CPU_TYPE_R8A77970 SOC_ID_R8A77970 +#define RMOBILE_CPU_TYPE_R8A77980 SOC_ID_R8A77980 +#define RMOBILE_CPU_TYPE_R8A77990 SOC_ID_R8A77990 +#define RMOBILE_CPU_TYPE_R8A77995 SOC_ID_R8A77995 + +/* + * R-Car and RZ/G SoC's share same PRR ID's for the same SoC type. The + * RZG_CPU_MASK is used to provide a unique CPU identification for RZ/G SoC's. + */ +#define RZG_CPU_MASK 0x1000 #ifndef __ASSEMBLY__ +bool is_rzg_family(void); u32 rmobile_get_cpu_type(void); u32 rmobile_get_cpu_rev_integer(void); u32 rmobile_get_cpu_rev_fraction(void); diff --git a/arch/arm/mach-rmobile/soc_family-info.c b/arch/arm/mach-rmobile/soc_family-info.c new file mode 100644 index 0000000000..f09bd1a79f --- /dev/null +++ b/arch/arm/mach-rmobile/soc_family-info.c @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2021 Renesas Electronics Corporation + * + */ +#include +#include + +bool is_rzg_family(void) +{ + bool rzg_family_type = false; + struct udevice *soc; + char name[16]; + + if (!(soc_get(&soc) || soc_get_family(soc, name, 16))) { + if (!strcmp(name, "RZ/G2")) + rzg_family_type = true; + } + + return rzg_family_type; +}