16e12c1ddSJason Zhu /* SPDX-License-Identifier: GPL-2.0+ */ 26e12c1ddSJason Zhu /* 36e12c1ddSJason Zhu * (C) Copyright 2019 Rockchip Electronics Co., Ltd 46e12c1ddSJason Zhu */ 56e12c1ddSJason Zhu 66e12c1ddSJason Zhu #ifndef _ROCKCHIP_OTP_H_ 76e12c1ddSJason Zhu #define _ROCKCHIP_OTP_H_ 86e12c1ddSJason Zhu 96e12c1ddSJason Zhu /* OTP Register Offsets */ 106e12c1ddSJason Zhu #define OTPC_SBPI_CTRL 0x0020 116e12c1ddSJason Zhu #define OTPC_SBPI_CMD_VALID_PRE 0x0024 126e12c1ddSJason Zhu #define OTPC_SBPI_CS_VALID_PRE 0x0028 136e12c1ddSJason Zhu #define OTPC_SBPI_STATUS 0x002C 146e12c1ddSJason Zhu #define OTPC_USER_CTRL 0x0100 156e12c1ddSJason Zhu #define OTPC_USER_ADDR 0x0104 166e12c1ddSJason Zhu #define OTPC_USER_ENABLE 0x0108 176e12c1ddSJason Zhu #define OTPC_USER_QP 0x0120 186e12c1ddSJason Zhu #define OTPC_USER_Q 0x0124 196e12c1ddSJason Zhu #define OTPC_INT_STATUS 0x0304 206e12c1ddSJason Zhu #define OTPC_SBPI_CMD0_OFFSET 0x1000 216e12c1ddSJason Zhu #define OTPC_SBPI_CMD1_OFFSET 0x1004 226e12c1ddSJason Zhu 236e12c1ddSJason Zhu /* OTP Register bits and masks */ 246e12c1ddSJason Zhu #define OTPC_USER_ADDR_MASK GENMASK(31, 16) 256e12c1ddSJason Zhu #define OTPC_USE_USER BIT(0) 266e12c1ddSJason Zhu #define OTPC_USE_USER_MASK GENMASK(16, 16) 276e12c1ddSJason Zhu #define OTPC_USER_FSM_ENABLE BIT(0) 286e12c1ddSJason Zhu #define OTPC_USER_FSM_ENABLE_MASK GENMASK(16, 16) 296e12c1ddSJason Zhu #define OTPC_SBPI_DONE BIT(1) 306e12c1ddSJason Zhu #define OTPC_USER_DONE BIT(2) 316e12c1ddSJason Zhu 326e12c1ddSJason Zhu #define SBPI_DAP_ADDR 0x02 336e12c1ddSJason Zhu #define SBPI_DAP_ADDR_SHIFT 8 346e12c1ddSJason Zhu #define SBPI_DAP_ADDR_MASK GENMASK(31, 24) 356e12c1ddSJason Zhu #define SBPI_CMD_VALID_MASK GENMASK(31, 16) 366e12c1ddSJason Zhu #define SBPI_DAP_CMD_WRF 0xC0 376e12c1ddSJason Zhu #define SBPI_DAP_REG_ECC 0x3A 386e12c1ddSJason Zhu #define SBPI_ECC_ENABLE 0x00 396e12c1ddSJason Zhu #define SBPI_ECC_DISABLE 0x09 406e12c1ddSJason Zhu #define SBPI_ENABLE BIT(0) 416e12c1ddSJason Zhu #define SBPI_ENABLE_MASK GENMASK(16, 16) 426e12c1ddSJason Zhu 436e12c1ddSJason Zhu #define OTPC_TIMEOUT 10000 446e12c1ddSJason Zhu 459fed581aSFinley Xiao #define OTPC_MODE_CTRL 0x2000 469fed581aSFinley Xiao #define OTPC_IRQ_ST 0x2008 479fed581aSFinley Xiao #define OTPC_ACCESS_ADDR 0x200c 489fed581aSFinley Xiao #define OTPC_RD_DATA 0x2010 499fed581aSFinley Xiao #define OTPC_REPR_RD_TRANS_NUM 0x2020 509fed581aSFinley Xiao #define OTPC_DEEP_STANDBY 0x0 519fed581aSFinley Xiao #define OTPC_STANDBY 0x1 529fed581aSFinley Xiao #define OTPC_ACTIVE 0x2 539fed581aSFinley Xiao #define OTPC_READ_ACCESS 0x3 549fed581aSFinley Xiao #define OTPC_TRANS_NUM 0x1 559fed581aSFinley Xiao #define OTPC_RDM_IRQ_ST BIT(0) 569fed581aSFinley Xiao #define OTPC_STB2ACT_IRQ_ST BIT(7) 579fed581aSFinley Xiao #define OTPC_DP2STB_IRQ_ST BIT(8) 589fed581aSFinley Xiao #define OTPC_ACT2STB_IRQ_ST BIT(9) 599fed581aSFinley Xiao #define OTPC_STB2DP_IRQ_ST BIT(10) 609fed581aSFinley Xiao #define RK3308BS_NBYTES 4 619fed581aSFinley Xiao #define RK3308BS_MAX_BYTES 0x80 629fed581aSFinley Xiao #define RK3308BS_NO_SECURE_OFFSET 224 639fed581aSFinley Xiao 64fd7b5182SFinley Xiao #define RK3568_NBYTES 2 65fd7b5182SFinley Xiao 66*975a7fc3SFinley Xiao #define RK3588_OTPC_AUTO_CTRL 0x04 67*975a7fc3SFinley Xiao #define RK3588_OTPC_AUTO_EN 0x08 68*975a7fc3SFinley Xiao #define RK3588_OTPC_INT_ST 0x84 69*975a7fc3SFinley Xiao #define RK3588_OTPC_DOUT0 0x20 70*975a7fc3SFinley Xiao #define RK3588_NO_SECURE_OFFSET 0x300 71*975a7fc3SFinley Xiao #define RK3588_MAX_BYTES 0x400 72*975a7fc3SFinley Xiao #define RK3588_NBYTES 4 73*975a7fc3SFinley Xiao #define RK3588_BURST_NUM 1 74*975a7fc3SFinley Xiao #define RK3588_BURST_SHIFT 8 75*975a7fc3SFinley Xiao #define RK3588_ADDR_SHIFT 16 76*975a7fc3SFinley Xiao #define RK3588_AUTO_EN BIT(0) 77*975a7fc3SFinley Xiao #define RK3588_RD_DONE BIT(1) 78*975a7fc3SFinley Xiao 79a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_CEB 0x00 80a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RSTB 0x04 81a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_ST 0x18 82a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RADDR 0x1C 83a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RSTART 0x20 84a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RDATA 0x24 85a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_TRWH 0x28 86a4c57e8aSFinley Xiao #define RV1126_OTP_READ_ST 0x30 87a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRADDR 0x34 88a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRLEN 0x38 89a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRDATA 0x3c 90a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_FAILTIME 0x40 91a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRSTART 0x44 92a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRSTATE 0x48 936e12c1ddSJason Zhu 946e12c1ddSJason Zhu struct rockchip_otp_platdata { 956e12c1ddSJason Zhu void __iomem *base; 96cbe24667SJason Zhu unsigned long secure_conf_base; 97cbe24667SJason Zhu unsigned long otp_mask_base; 98cf432719SJason Zhu unsigned long otp_cru_rst_base; 996e12c1ddSJason Zhu }; 1006e12c1ddSJason Zhu 1016e12c1ddSJason Zhu #endif 102