xref: /arm-trusted-firmware/include/drivers/brcm/sotp.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016-2020, Broadcom
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef SOTP_H
8*91f16700Schasinglulu #define SOTP_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <stddef.h>
11*91f16700Schasinglulu #include <stdint.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #include <platform_sotp.h>
14*91f16700Schasinglulu 
15*91f16700Schasinglulu #define SOTP_ROW_NO_ECC 0
16*91f16700Schasinglulu #define SOTP_ROW_ECC 1
17*91f16700Schasinglulu 
18*91f16700Schasinglulu #define SOTP_STATUS_1 (SOTP_REGS_OTP_BASE + 0x001c)
19*91f16700Schasinglulu #define SOTP_FAIL_BITS 0x18000000000
20*91f16700Schasinglulu #define SOTP_ECC_ERR_DETECT 0x8000000000000000
21*91f16700Schasinglulu 
22*91f16700Schasinglulu #define SOTP_REGS_SOTP_CHIP_STATES (SOTP_REGS_OTP_BASE + 0x0028)
23*91f16700Schasinglulu #define SOTP_REGS_OTP_WR_LOCK (SOTP_REGS_OTP_BASE + 0x0038)
24*91f16700Schasinglulu 
25*91f16700Schasinglulu #define SOTP_CHIP_STATES_MANU_DEBUG_MASK (1 << 8)
26*91f16700Schasinglulu #define SOTP_DEVICE_SECURE_CFG0_OTP_ERASED_MASK (3 << 16)
27*91f16700Schasinglulu #define SOTP_REGS_SOTP_CHIP_STATES_OTP_ERASED_MASK (1 << 16)
28*91f16700Schasinglulu 
29*91f16700Schasinglulu #define SOTP_DEVICE_SECURE_CFG0_CID_MASK (3 << 2)
30*91f16700Schasinglulu #define SOTP_DEVICE_SECURE_CFG0_AB_MASK  (3 << 6)
31*91f16700Schasinglulu #define SOTP_DEVICE_SECURE_CFG0_DEV_MASK (3 << 8)
32*91f16700Schasinglulu 
33*91f16700Schasinglulu #define SOTP_BOOT_SOURCE_SHIFT 8
34*91f16700Schasinglulu /* bits 14 and 15 */
35*91f16700Schasinglulu #define SOTP_BOOT_SOURCE_ENABLE_MASK (0xC0 << SOTP_BOOT_SOURCE_SHIFT)
36*91f16700Schasinglulu /* bits 8 to 13 */
37*91f16700Schasinglulu #define SOTP_BOOT_SOURCE_BITS0 (0x03 << SOTP_BOOT_SOURCE_SHIFT)
38*91f16700Schasinglulu #define SOTP_BOOT_SOURCE_BITS1 (0x0C << SOTP_BOOT_SOURCE_SHIFT)
39*91f16700Schasinglulu #define SOTP_BOOT_SOURCE_BITS2 (0x30 << SOTP_BOOT_SOURCE_SHIFT)
40*91f16700Schasinglulu #define SOTP_BOOT_SOURCE_MASK (0x3F << SOTP_BOOT_SOURCE_SHIFT)
41*91f16700Schasinglulu 
42*91f16700Schasinglulu #define SOTP_ATF_CFG_ROW_ID SOTP_DEVICE_SECURE_CFG2_ROW
43*91f16700Schasinglulu /* bits 28 and 29 */
44*91f16700Schasinglulu #define SOTP_SBL_MASK (3 << 28)
45*91f16700Schasinglulu /* bits 30 and 31 */
46*91f16700Schasinglulu #define SOTP_ATF_NVCOUNTER_ENABLE_MASK ((uint64_t)3 << 30)
47*91f16700Schasinglulu /* bits 32 and 33 */
48*91f16700Schasinglulu #define SOTP_ATF_WATCHDOG_ENABLE_MASK ((uint64_t)3 << 32)
49*91f16700Schasinglulu /* bits 34 and 35 */
50*91f16700Schasinglulu #define SOTP_ATF_PLL_ON ((uint64_t)3 << 34)
51*91f16700Schasinglulu /* bits 36 and 37 */
52*91f16700Schasinglulu #define SOTP_ATF_RESET_RETRY ((uint64_t)3 << 36)
53*91f16700Schasinglulu /* bits 38 to 40 */
54*91f16700Schasinglulu #define SOTP_ATF_LOG_LEVEL_SHIFT 38
55*91f16700Schasinglulu #define SOTP_ATF_LOG_LEVEL ((uint64_t)7 << SOTP_ATF_LOG_LEVEL_SHIFT)
56*91f16700Schasinglulu 
57*91f16700Schasinglulu #define SOTP_ATF2_CFG_ROW_ID SOTP_DEVICE_SECURE_CFG3_ROW
58*91f16700Schasinglulu /* bits 16 and 17 */
59*91f16700Schasinglulu #define SOTP_ROMKEY_MASK (3 << 16)
60*91f16700Schasinglulu /* bits 18 and 19 */
61*91f16700Schasinglulu #define SOTP_EC_EN_MASK (3 << 18)
62*91f16700Schasinglulu 
63*91f16700Schasinglulu #define SOTP_ENC_DEV_TYPE_AB_DEV ((uint64_t)0x19999800000)
64*91f16700Schasinglulu #define SOTP_ENC_DEV_TYPE_MASK   ((uint64_t)0x1ffff800000)
65*91f16700Schasinglulu 
66*91f16700Schasinglulu uint64_t sotp_mem_read(uint32_t offset, uint32_t sotp_add_ecc);
67*91f16700Schasinglulu void sotp_mem_write(uint32_t addr, uint32_t sotp_add_ecc, uint64_t wdata);
68*91f16700Schasinglulu int sotp_read_key(uint8_t *key, size_t keysize, int start_row, int end_row);
69*91f16700Schasinglulu int sotp_key_erased(void);
70*91f16700Schasinglulu uint32_t sotp_redundancy_reduction(uint32_t sotp_row_data);
71*91f16700Schasinglulu #endif
72