1*0a6b2714SAneesh Bansal /* 2*0a6b2714SAneesh Bansal * Copyright 2015 Freescale Semiconductor, Inc. 3*0a6b2714SAneesh Bansal * 4*0a6b2714SAneesh Bansal * SPDX-License-Identifier: GPL-2.0+ 5*0a6b2714SAneesh Bansal */ 6*0a6b2714SAneesh Bansal 7*0a6b2714SAneesh Bansal #include <common.h> 8*0a6b2714SAneesh Bansal #include <fsl_validate.h> 9*0a6b2714SAneesh Bansal #include <fsl_sfp.h> 10*0a6b2714SAneesh Bansal 11*0a6b2714SAneesh Bansal #ifdef CONFIG_LS102XA 12*0a6b2714SAneesh Bansal #include <asm/arch/immap_ls102xa.h> 13*0a6b2714SAneesh Bansal #endif 14*0a6b2714SAneesh Bansal 15*0a6b2714SAneesh Bansal #if defined(CONFIG_MPC85xx) 16*0a6b2714SAneesh Bansal #define CONFIG_DCFG_ADDR CONFIG_SYS_MPC85xx_GUTS_ADDR 17*0a6b2714SAneesh Bansal #else 18*0a6b2714SAneesh Bansal #define CONFIG_DCFG_ADDR CONFIG_SYS_FSL_GUTS_ADDR 19*0a6b2714SAneesh Bansal #endif 20*0a6b2714SAneesh Bansal 21*0a6b2714SAneesh Bansal #ifdef CONFIG_SYS_FSL_CCSR_GUR_LE 22*0a6b2714SAneesh Bansal #define gur_in32(a) in_le32(a) 23*0a6b2714SAneesh Bansal #else 24*0a6b2714SAneesh Bansal #define gur_in32(a) in_be32(a) 25*0a6b2714SAneesh Bansal #endif 26*0a6b2714SAneesh Bansal 27*0a6b2714SAneesh Bansal /* Check the Boot Mode. If Secure, return 1 else return 0 */ 28*0a6b2714SAneesh Bansal int fsl_check_boot_mode_secure(void) 29*0a6b2714SAneesh Bansal { 30*0a6b2714SAneesh Bansal uint32_t val; 31*0a6b2714SAneesh Bansal struct ccsr_sfp_regs *sfp_regs = (void *)(CONFIG_SYS_SFP_ADDR); 32*0a6b2714SAneesh Bansal struct ccsr_gur __iomem *gur = (void *)(CONFIG_DCFG_ADDR); 33*0a6b2714SAneesh Bansal 34*0a6b2714SAneesh Bansal val = sfp_in32(&sfp_regs->ospr) & ITS_MASK; 35*0a6b2714SAneesh Bansal if (val == ITS_MASK) 36*0a6b2714SAneesh Bansal return 1; 37*0a6b2714SAneesh Bansal 38*0a6b2714SAneesh Bansal #if defined(CONFIG_FSL_CORENET) || !defined(CONFIG_MPC85xx) 39*0a6b2714SAneesh Bansal /* For PBL based platforms check the SB_EN bit in RCWSR */ 40*0a6b2714SAneesh Bansal val = gur_in32(&gur->rcwsr[RCW_SB_EN_REG_INDEX - 1]) & RCW_SB_EN_MASK; 41*0a6b2714SAneesh Bansal if (val == RCW_SB_EN_MASK) 42*0a6b2714SAneesh Bansal return 1; 43*0a6b2714SAneesh Bansal #endif 44*0a6b2714SAneesh Bansal 45*0a6b2714SAneesh Bansal #if defined(CONFIG_MPC85xx) && !defined(CONFIG_FSL_CORENET) 46*0a6b2714SAneesh Bansal /* For Non-PBL Platforms, check the Device Status register 2*/ 47*0a6b2714SAneesh Bansal val = gur_in32(&gur->pordevsr2) & MPC85xx_PORDEVSR2_SBC_MASK; 48*0a6b2714SAneesh Bansal if (val != MPC85xx_PORDEVSR2_SBC_MASK) 49*0a6b2714SAneesh Bansal return 1; 50*0a6b2714SAneesh Bansal 51*0a6b2714SAneesh Bansal #endif 52*0a6b2714SAneesh Bansal return 0; 53*0a6b2714SAneesh Bansal } 54