From patchwork Wed Nov 22 13:15:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 840410 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="rMfa7676"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3yhjdB35Vsz9s71 for ; Thu, 23 Nov 2017 00:15:56 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 4AA97C21D55; Wed, 22 Nov 2017 13:15:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id A1E23C21C4A; Wed, 22 Nov 2017 13:15:39 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 18EDBC21D55; Wed, 22 Nov 2017 13:15:38 +0000 (UTC) Received: from mail-qk0-f194.google.com (mail-qk0-f194.google.com [209.85.220.194]) by lists.denx.de (Postfix) with ESMTPS id 6BBBEC21C26 for ; Wed, 22 Nov 2017 13:15:37 +0000 (UTC) Received: by mail-qk0-f194.google.com with SMTP id 78so16647459qkz.0 for ; Wed, 22 Nov 2017 05:15:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=sfQLOjxbX931V1GFzUlzZryWNI69iAxInYNHIDh23JA=; b=rMfa7676igy32RXx/tt4HeznbOm1esEkNSyPtueex41wzCHxObNTkIKD8WTfg/LFL6 92f/NDajJNxXEOH2pDIZIQyZPSW+MgEPqtErz1YVJQ7PNbg76T62L0FYbZ5bOVKPJn6t D64RvP8ONnV7aHRnAufa7vcEUbsEvDhtijSucxp9ns4y418hEyywgK9B/1sehLkDxjAl oDYc88U9Js4S+gWcp9IK3idl7/zG4pFyoYsdBnMtQ5jAS3BhOEGOlWy7++BVFalN8lEt PnFkybVjrro/RpGOyQBYEPEpKHF+KKmq4MZ0NDzOFGXpKFRDa1DI32/zYnZGecWirEEd BIkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=sfQLOjxbX931V1GFzUlzZryWNI69iAxInYNHIDh23JA=; b=lqV2N6844BVBTO7Zn2WTw7pnJqCdS5iJmJHqFzGMpAR2ILTFTTaCiVoygF8289sO4a gDsTvR7G23yDKKemGpMEXuJ7VdT63isCpiM4x3134+xGOphVJvMQWPtAUbWAtx8Pp2fy flhfFHoPw0VKIE0O6BoNW4AMX+Bk6BQXCpPmRzLJ0Q1lSbuHB/qXAzFiQY0fUdacKCdP C/gr86T6wZ7IqVy/KCRRIToLUSfIH9RISghZfuNit5GMaHkdslbCv/XK2IzN42pgtRgh H3OeZpoiFIHQ1bb/gOEpb1HGWgQ4euT+4cWb+FMUhjlqMZWlwFCJlul1hGxn2D6WC6dp dQ4A== X-Gm-Message-State: AJaThX6pLiNWgvpUwtw0+5KEkK8/F9+TWkkYzsE+e3M2CIooaREhzlaz JNCAk2vENZIgIf3HWzAAlrU= X-Google-Smtp-Source: AGs4zMZe0EBrJ5uOqRlO0TLX0w25p2qlKy+4/LICNvPSYouaHutktS3u2rQQOeffx6BMvbV1v7sokA== X-Received: by 10.55.132.194 with SMTP id g185mr32779045qkd.18.1511356536071; Wed, 22 Nov 2017 05:15:36 -0800 (PST) Received: from localhost.localdomain ([2804:14c:482:866:f014:e630:df01:2cb]) by smtp.gmail.com with ESMTPSA id k34sm8350753qtk.5.2017.11.22.05.15.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Nov 2017 05:15:35 -0800 (PST) From: Fabio Estevam To: sbabic@denx.de Date: Wed, 22 Nov 2017 11:15:26 -0200 Message-Id: <1511356528-8005-1-git-send-email-festevam@gmail.com> X-Mailer: git-send-email 2.7.4 Cc: Fabio Estevam , u-boot@lists.denx.de Subject: [U-Boot] [PATCH 1/3] imx: Add a common way for detecting NXP boards revision X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Fabio Estevam NXP development boards based on i.MX6/i.MX7 contain the board revision information stored in the fuses. Introduce a common function that can be shared by different boards and convert mx6sabreauto to use this new mechanism. Signed-off-by: Fabio Estevam Reviewed-by: Stefano Babic Reviewed-by: Lukasz Majewski --- arch/arm/include/asm/mach-imx/sys_proto.h | 3 ++ arch/arm/mach-imx/Kconfig | 8 +++++ arch/arm/mach-imx/cpu.c | 27 +++++++++++++++++ board/freescale/mx6sabreauto/mx6sabreauto.c | 47 ++--------------------------- configs/mx6sabreauto_defconfig | 1 + 5 files changed, 41 insertions(+), 45 deletions(-) diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h b/arch/arm/include/asm/mach-imx/sys_proto.h index 7036343..d5e3eec 100644 --- a/arch/arm/include/asm/mach-imx/sys_proto.h +++ b/arch/arm/include/asm/mach-imx/sys_proto.h @@ -109,6 +109,9 @@ void imx_set_wdog_powerdown(bool enable); int board_mmc_get_env_dev(int devno); +int nxp_board_rev(void); +const char *nxp_board_rev_string(void); + /* * Initializes on-chip ethernet controllers. * to override, implement board_eth_init() diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index cd8b8d2..81ab125 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -61,3 +61,11 @@ config CMD_HDMIDETECT help This enables the 'hdmidet' command which detects if an HDMI monitor is connected. + +config NXP_BOARD_REVISION + bool "Read NXP board revision from fuses" + depends on ARCH_MX6 || ARCH_MX7 + help + NXP boards based on i.MX6/7 contain the board revision information + stored in the fuses. Select this option if you want to be able to + retrieve the board revision information. diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c index 18205dc..84e829e 100644 --- a/arch/arm/mach-imx/cpu.c +++ b/arch/arm/mach-imx/cpu.c @@ -323,3 +323,30 @@ void set_chipselect_size(int const cs_size) writel(reg, &iomuxc_regs->gpr[1]); } + +#ifdef CONFIG_NXP_BOARD_REVISION +int nxp_board_rev(void) +{ + /* + * Get Board ID information from OCOTP_GP1[15:8] + * RevA: 0x1 + * RevB: 0x2 + * RevC: 0x3 + */ + struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; + struct fuse_bank *bank = &ocotp->bank[4]; + struct fuse_bank4_regs *fuse = + (struct fuse_bank4_regs *)bank->fuse_regs; + + return (readl(&fuse->gp1) >> 8 & 0x0F); +} + +const char *nxp_board_rev_string(void) +{ + char *rev = "A" - 1; + + rev += nxp_board_rev(); + + return rev; +} +#endif diff --git a/board/freescale/mx6sabreauto/mx6sabreauto.c b/board/freescale/mx6sabreauto/mx6sabreauto.c index bdeb5f7..ced254a 100644 --- a/board/freescale/mx6sabreauto/mx6sabreauto.c +++ b/board/freescale/mx6sabreauto/mx6sabreauto.c @@ -397,39 +397,9 @@ int board_eth_init(bd_t *bis) return cpu_eth_init(bis); } -#define BOARD_REV_B 0x200 -#define BOARD_REV_A 0x100 - -static int mx6sabre_rev(void) -{ - /* - * Get Board ID information from OCOTP_GP1[15:8] - * i.MX6Q ARD RevA: 0x01 - * i.MX6Q ARD RevB: 0x02 - */ - struct ocotp_regs *ocotp = (struct ocotp_regs *)OCOTP_BASE_ADDR; - struct fuse_bank *bank = &ocotp->bank[4]; - struct fuse_bank4_regs *fuse = - (struct fuse_bank4_regs *)bank->fuse_regs; - int reg = readl(&fuse->gp1); - int ret; - - switch (reg >> 8 & 0x0F) { - case 0x02: - ret = BOARD_REV_B; - break; - case 0x01: - default: - ret = BOARD_REV_A; - break; - } - - return ret; -} - u32 get_board_rev(void) { - int rev = mx6sabre_rev(); + int rev = nxp_board_rev(); return (get_cpu_rev() & ~(0xF << 8)) | rev; } @@ -703,20 +673,7 @@ int board_late_init(void) int checkboard(void) { - int rev = mx6sabre_rev(); - char *revname; - - switch (rev) { - case BOARD_REV_B: - revname = "B"; - break; - case BOARD_REV_A: - default: - revname = "A"; - break; - } - - printf("Board: MX6Q-Sabreauto rev%s\n", revname); + printf("Board: MX6Q-Sabreauto rev%s\n", nxp_board_rev_string()); return 0; } diff --git a/configs/mx6sabreauto_defconfig b/configs/mx6sabreauto_defconfig index 418a836..215700b 100644 --- a/configs/mx6sabreauto_defconfig +++ b/configs/mx6sabreauto_defconfig @@ -8,6 +8,7 @@ CONFIG_SPL_MMC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y CONFIG_SPL_LIBDISK_SUPPORT=y CONFIG_SPL_WATCHDOG_SUPPORT=y +CONFIG_NXP_BOARD_REVISION=y CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/mach-imx/spl_sd.cfg" # CONFIG_CONSOLE_MUX is not set CONFIG_SYS_CONSOLE_IS_IN_ENV=y