mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-19 03:08:31 +00:00
d041288586
Chain of Trust is enabled for ARM platforms (LS1021 and LS1043). In board_late_init(), fsl_setenv_chain_of_trust() is called which will perform the following: - If boot mode is non-secure, return (No Change) - If boot mode is secure, set the following environmet variables: bootdelay = 0 (To disable Boot Prompt) bootcmd = CONFIG_CHAIN_BOOT_CMD (Validate and execute Boot script) Signed-off-by: Aneesh Bansal <aneesh.bansal@nxp.com> Acked-by: Ruchika Gupta <ruchika.gupta@nxp.com> Reviewed-by: York Sun <york.sun@nxp.com>
70 lines
1.7 KiB
C
70 lines
1.7 KiB
C
/*
|
|
* Copyright 2015 Freescale Semiconductor, Inc.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <fsl_validate.h>
|
|
#include <fsl_sfp.h>
|
|
|
|
#ifdef CONFIG_LS102XA
|
|
#include <asm/arch/immap_ls102xa.h>
|
|
#endif
|
|
|
|
#if defined(CONFIG_MPC85xx)
|
|
#define CONFIG_DCFG_ADDR CONFIG_SYS_MPC85xx_GUTS_ADDR
|
|
#else
|
|
#define CONFIG_DCFG_ADDR CONFIG_SYS_FSL_GUTS_ADDR
|
|
#endif
|
|
|
|
#ifdef CONFIG_SYS_FSL_CCSR_GUR_LE
|
|
#define gur_in32(a) in_le32(a)
|
|
#else
|
|
#define gur_in32(a) in_be32(a)
|
|
#endif
|
|
|
|
/* Check the Boot Mode. If Secure, return 1 else return 0 */
|
|
int fsl_check_boot_mode_secure(void)
|
|
{
|
|
uint32_t val;
|
|
struct ccsr_sfp_regs *sfp_regs = (void *)(CONFIG_SYS_SFP_ADDR);
|
|
struct ccsr_gur __iomem *gur = (void *)(CONFIG_DCFG_ADDR);
|
|
|
|
val = sfp_in32(&sfp_regs->ospr) & ITS_MASK;
|
|
if (val == ITS_MASK)
|
|
return 1;
|
|
|
|
#if defined(CONFIG_FSL_CORENET) || !defined(CONFIG_MPC85xx)
|
|
/* For PBL based platforms check the SB_EN bit in RCWSR */
|
|
val = gur_in32(&gur->rcwsr[RCW_SB_EN_REG_INDEX - 1]) & RCW_SB_EN_MASK;
|
|
if (val == RCW_SB_EN_MASK)
|
|
return 1;
|
|
#endif
|
|
|
|
#if defined(CONFIG_MPC85xx) && !defined(CONFIG_FSL_CORENET)
|
|
/* For Non-PBL Platforms, check the Device Status register 2*/
|
|
val = gur_in32(&gur->pordevsr2) & MPC85xx_PORDEVSR2_SBC_MASK;
|
|
if (val != MPC85xx_PORDEVSR2_SBC_MASK)
|
|
return 1;
|
|
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
int fsl_setenv_chain_of_trust(void)
|
|
{
|
|
/* Check Boot Mode
|
|
* If Boot Mode is Non-Secure, no changes are required
|
|
*/
|
|
if (fsl_check_boot_mode_secure() == 0)
|
|
return 0;
|
|
|
|
/* If Boot mode is Secure, set the environment variables
|
|
* bootdelay = 0 (To disable Boot Prompt)
|
|
* bootcmd = CONFIG_CHAIN_BOOT_CMD (Validate and execute Boot script)
|
|
*/
|
|
setenv("bootdelay", "0");
|
|
setenv("bootcmd", CONFIG_CHAIN_BOOT_CMD);
|
|
return 0;
|
|
}
|