1*f29d1e0cSSheetal Tigadoli /* 2*f29d1e0cSSheetal Tigadoli * Copyright (c) 2015 - 2020, Broadcom 3*f29d1e0cSSheetal Tigadoli * 4*f29d1e0cSSheetal Tigadoli * SPDX-License-Identifier: BSD-3-Clause 5*f29d1e0cSSheetal Tigadoli */ 6*f29d1e0cSSheetal Tigadoli 7*f29d1e0cSSheetal Tigadoli #include <stdint.h> 8*f29d1e0cSSheetal Tigadoli 9*f29d1e0cSSheetal Tigadoli #include <common/debug.h> 10*f29d1e0cSSheetal Tigadoli 11*f29d1e0cSSheetal Tigadoli #include <platform_def.h> 12*f29d1e0cSSheetal Tigadoli #include <sbl_util.h> 13*f29d1e0cSSheetal Tigadoli #include <sotp.h> 14*f29d1e0cSSheetal Tigadoli 15*f29d1e0cSSheetal Tigadoli #pragma weak plat_sbl_status 16*f29d1e0cSSheetal Tigadoli 17*f29d1e0cSSheetal Tigadoli int plat_sbl_status(uint64_t sbl_status) 18*f29d1e0cSSheetal Tigadoli { 19*f29d1e0cSSheetal Tigadoli return sbl_status ? 1:0; 20*f29d1e0cSSheetal Tigadoli } 21*f29d1e0cSSheetal Tigadoli 22*f29d1e0cSSheetal Tigadoli int sbl_status(void) 23*f29d1e0cSSheetal Tigadoli { 24*f29d1e0cSSheetal Tigadoli uint64_t sbl_sotp = 0; 25*f29d1e0cSSheetal Tigadoli int ret = SBL_DISABLED; 26*f29d1e0cSSheetal Tigadoli 27*f29d1e0cSSheetal Tigadoli sbl_sotp = sotp_mem_read(SOTP_ATF_CFG_ROW_ID, SOTP_ROW_NO_ECC); 28*f29d1e0cSSheetal Tigadoli 29*f29d1e0cSSheetal Tigadoli if (sbl_sotp != SOTP_ECC_ERR_DETECT) { 30*f29d1e0cSSheetal Tigadoli 31*f29d1e0cSSheetal Tigadoli sbl_sotp &= SOTP_SBL_MASK; 32*f29d1e0cSSheetal Tigadoli 33*f29d1e0cSSheetal Tigadoli if (plat_sbl_status(sbl_sotp)) 34*f29d1e0cSSheetal Tigadoli ret = SBL_ENABLED; 35*f29d1e0cSSheetal Tigadoli } 36*f29d1e0cSSheetal Tigadoli 37*f29d1e0cSSheetal Tigadoli VERBOSE("SBL status: %d\n", ret); 38*f29d1e0cSSheetal Tigadoli 39*f29d1e0cSSheetal Tigadoli return ret; 40*f29d1e0cSSheetal Tigadoli } 41