xref: /rk3399_rockchip-uboot/include/rockchip-otp.h (revision 07f8bbdb3305a0a7b69f9cfd6d3e96a084e412a5)
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
14*07f8bbdbSXuhui Lin #define OTPC_LOCK_CTRL			0x050
156e12c1ddSJason Zhu #define OTPC_USER_CTRL			0x0100
166e12c1ddSJason Zhu #define OTPC_USER_ADDR			0x0104
176e12c1ddSJason Zhu #define OTPC_USER_ENABLE		0x0108
186e12c1ddSJason Zhu #define OTPC_USER_QP			0x0120
196e12c1ddSJason Zhu #define OTPC_USER_Q			0x0124
206e12c1ddSJason Zhu #define OTPC_INT_STATUS			0x0304
216e12c1ddSJason Zhu #define OTPC_SBPI_CMD0_OFFSET		0x1000
226e12c1ddSJason Zhu #define OTPC_SBPI_CMD1_OFFSET		0x1004
236e12c1ddSJason Zhu 
246e12c1ddSJason Zhu /* OTP Register bits and masks */
256e12c1ddSJason Zhu #define OTPC_USER_ADDR_MASK		GENMASK(31, 16)
266e12c1ddSJason Zhu #define OTPC_USE_USER			BIT(0)
276e12c1ddSJason Zhu #define OTPC_USE_USER_MASK		GENMASK(16, 16)
286e12c1ddSJason Zhu #define OTPC_USER_FSM_ENABLE		BIT(0)
296e12c1ddSJason Zhu #define OTPC_USER_FSM_ENABLE_MASK	GENMASK(16, 16)
306e12c1ddSJason Zhu #define OTPC_SBPI_DONE			BIT(1)
316e12c1ddSJason Zhu #define OTPC_USER_DONE			BIT(2)
326e12c1ddSJason Zhu 
336e12c1ddSJason Zhu #define SBPI_DAP_ADDR			0x02
346e12c1ddSJason Zhu #define SBPI_DAP_ADDR_SHIFT		8
356e12c1ddSJason Zhu #define SBPI_DAP_ADDR_MASK		GENMASK(31, 24)
366e12c1ddSJason Zhu #define SBPI_CMD_VALID_MASK		GENMASK(31, 16)
376e12c1ddSJason Zhu #define SBPI_DAP_CMD_WRF		0xC0
386e12c1ddSJason Zhu #define SBPI_DAP_REG_ECC		0x3A
396e12c1ddSJason Zhu #define SBPI_ECC_ENABLE			0x00
406e12c1ddSJason Zhu #define SBPI_ECC_DISABLE		0x09
416e12c1ddSJason Zhu #define SBPI_ENABLE			BIT(0)
426e12c1ddSJason Zhu #define SBPI_ENABLE_MASK		GENMASK(16, 16)
436e12c1ddSJason Zhu 
446e12c1ddSJason Zhu #define OTPC_TIMEOUT			10000
456e12c1ddSJason Zhu 
469fed581aSFinley Xiao #define OTPC_MODE_CTRL			0x2000
479fed581aSFinley Xiao #define OTPC_IRQ_ST			0x2008
489fed581aSFinley Xiao #define OTPC_ACCESS_ADDR		0x200c
499fed581aSFinley Xiao #define OTPC_RD_DATA			0x2010
509fed581aSFinley Xiao #define OTPC_REPR_RD_TRANS_NUM		0x2020
519fed581aSFinley Xiao #define OTPC_DEEP_STANDBY		0x0
529fed581aSFinley Xiao #define OTPC_STANDBY			0x1
539fed581aSFinley Xiao #define OTPC_ACTIVE			0x2
549fed581aSFinley Xiao #define OTPC_READ_ACCESS		0x3
559fed581aSFinley Xiao #define OTPC_TRANS_NUM			0x1
569fed581aSFinley Xiao #define OTPC_RDM_IRQ_ST			BIT(0)
579fed581aSFinley Xiao #define OTPC_STB2ACT_IRQ_ST		BIT(7)
589fed581aSFinley Xiao #define OTPC_DP2STB_IRQ_ST		BIT(8)
599fed581aSFinley Xiao #define OTPC_ACT2STB_IRQ_ST		BIT(9)
609fed581aSFinley Xiao #define OTPC_STB2DP_IRQ_ST		BIT(10)
61*07f8bbdbSXuhui Lin 
62*07f8bbdbSXuhui Lin #define KEY_READER_CFG   		0x0
63*07f8bbdbSXuhui Lin 
649fed581aSFinley Xiao #define RK3308BS_NBYTES			4
659fed581aSFinley Xiao #define RK3308BS_MAX_BYTES		0x80
669fed581aSFinley Xiao #define RK3308BS_NO_SECURE_OFFSET	224
679fed581aSFinley Xiao 
68fd7b5182SFinley Xiao #define RK3568_NBYTES			2
69fd7b5182SFinley Xiao 
70dd270bd4SXuhui Lin #define RK3576_NO_SECURE_OFFSET		0x1c0
71dd270bd4SXuhui Lin 
72975a7fc3SFinley Xiao #define RK3588_OTPC_AUTO_CTRL		0x04
73975a7fc3SFinley Xiao #define RK3588_OTPC_AUTO_EN		0x08
74975a7fc3SFinley Xiao #define RK3588_OTPC_INT_ST		0x84
75975a7fc3SFinley Xiao #define RK3588_OTPC_DOUT0		0x20
76975a7fc3SFinley Xiao #define RK3588_NO_SECURE_OFFSET		0x300
77975a7fc3SFinley Xiao #define RK3588_NBYTES			4
78975a7fc3SFinley Xiao #define RK3588_BURST_NUM		1
79975a7fc3SFinley Xiao #define RK3588_BURST_SHIFT		8
80975a7fc3SFinley Xiao #define RK3588_ADDR_SHIFT		16
81975a7fc3SFinley Xiao #define RK3588_AUTO_EN			BIT(0)
82975a7fc3SFinley Xiao #define RK3588_RD_DONE			BIT(1)
83975a7fc3SFinley Xiao 
84a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_CEB		0x00
85a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RSTB		0x04
86a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_ST		0x18
87a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RADDR		0x1C
88a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RSTART		0x20
89a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_RDATA		0x24
90a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_TRWH		0x28
91a4c57e8aSFinley Xiao #define RV1126_OTP_READ_ST		0x30
92a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRADDR		0x34
93a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRLEN		0x38
94a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRDATA		0x3c
95a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_FAILTIME		0x40
96a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRSTART		0x44
97a4c57e8aSFinley Xiao #define RV1126_OTP_NVM_PRSTATE		0x48
986e12c1ddSJason Zhu 
996e12c1ddSJason Zhu struct rockchip_otp_platdata {
1006e12c1ddSJason Zhu 	void __iomem *base;
101cbe24667SJason Zhu 	unsigned long secure_conf_base;
102cbe24667SJason Zhu 	unsigned long otp_mask_base;
103cf432719SJason Zhu 	unsigned long otp_cru_rst_base;
104*07f8bbdbSXuhui Lin 	unsigned long key_reader_base;
1056e12c1ddSJason Zhu };
1066e12c1ddSJason Zhu 
1076e12c1ddSJason Zhu #endif
108