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