xref: /rk3399_ARM-atf/plat/brcm/board/common/sbl_util.c (revision f29d1e0c72e6665ba4c8ab11bad83f59669ea0d9)
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