xref: /rk3399_ARM-atf/plat/rockchip/rk3568/drivers/otp/otp.h (revision 673c444372181a5ac23c14b9efd3003a37ce0193)
1*4e1ccc60SShengfei Xu /*
2*4e1ccc60SShengfei Xu  * Copyright (c) 2024-2025, Rockchip Electronics Co., Ltd. All rights reserved.
3*4e1ccc60SShengfei Xu  *
4*4e1ccc60SShengfei Xu  * SPDX-License-Identifier: BSD-3-Clause
5*4e1ccc60SShengfei Xu  */
6*4e1ccc60SShengfei Xu 
7*4e1ccc60SShengfei Xu #ifndef OTP_H
8*4e1ccc60SShengfei Xu #define OTP_H
9*4e1ccc60SShengfei Xu 
10*4e1ccc60SShengfei Xu #define WRITE_MASK			(16)
11*4e1ccc60SShengfei Xu 
12*4e1ccc60SShengfei Xu #define OTP_MAX_SIZE			512
13*4e1ccc60SShengfei Xu #define OTP_MAX_BYTE_SIZE		(OTP_MAX_SIZE * 2)
14*4e1ccc60SShengfei Xu #define OTP_S_SIZE			448
15*4e1ccc60SShengfei Xu #define OTP_S_BYTE_SIZE			(OTP_S_SIZE * 2)
16*4e1ccc60SShengfei Xu #define OTP_NS_SIZE			64
17*4e1ccc60SShengfei Xu #define OTP_NS_BYTE_SIZE		(OTP_NS_SIZE * 2)
18*4e1ccc60SShengfei Xu #define OTP_PROG_MASK			0
19*4e1ccc60SShengfei Xu #define OTP_PROG_MASK_NUM		32
20*4e1ccc60SShengfei Xu #define OTP_READ_MASK			0x0100
21*4e1ccc60SShengfei Xu #define OTP_READ_MASK_NUM		32
22*4e1ccc60SShengfei Xu #define IS_READ_MASK			0
23*4e1ccc60SShengfei Xu #define IS_WRITE_MASK			1
24*4e1ccc60SShengfei Xu #define IS_DISBALE_MASK			0
25*4e1ccc60SShengfei Xu #define IS_ENABLE_MASK			1
26*4e1ccc60SShengfei Xu #define OTP_MASK_BYPASS			0x200
27*4e1ccc60SShengfei Xu 
28*4e1ccc60SShengfei Xu /* CRU controller register */
29*4e1ccc60SShengfei Xu #define CLK_NS_OTP_USER_EN		(1 << 11)
30*4e1ccc60SShengfei Xu #define CLK_NS_OTP_SBPI_EN		(1 << 10)
31*4e1ccc60SShengfei Xu #define PCLK_NS_OTP_EN			(1 << 9)
32*4e1ccc60SShengfei Xu #define PCLK_PHY_OTP_EN			(1 << 13)
33*4e1ccc60SShengfei Xu #define OTP_PHY_SRSTN			(1u << 15)
34*4e1ccc60SShengfei Xu 
35*4e1ccc60SShengfei Xu /* SCRU controller register */
36*4e1ccc60SShengfei Xu #define CLK_S_OTP_USER_EN		(1 << 7)
37*4e1ccc60SShengfei Xu #define CLK_S_OTP_SBPI_EN		(1 << 6)
38*4e1ccc60SShengfei Xu #define PCLK_S_OTP_EN			(1 << 5)
39*4e1ccc60SShengfei Xu 
40*4e1ccc60SShengfei Xu /* SGRF controller register */
41*4e1ccc60SShengfei Xu #define SGRF_CON_OTP_CKE		(1 << 2)
42*4e1ccc60SShengfei Xu #define SGRF_CON_OTP_SECURE		(1 << 1)
43*4e1ccc60SShengfei Xu 
44*4e1ccc60SShengfei Xu /* OTP controller register */
45*4e1ccc60SShengfei Xu #define REG_OTPC_SBPI_CTRL		(0x0020)
46*4e1ccc60SShengfei Xu #define SBPI_DEV_ID_SHIFT		(8)
47*4e1ccc60SShengfei Xu #define SBPI_DEV_ID_MASK		(0xFF)
48*4e1ccc60SShengfei Xu #define SBPI_CS_DEASSERT		(1 << 3)
49*4e1ccc60SShengfei Xu #define SBPI_CS_AUTO			(1 << 2)
50*4e1ccc60SShengfei Xu #define SBPI_SP				(1 << 1)
51*4e1ccc60SShengfei Xu #define SBPI_ENABLE			(1 << 0)
52*4e1ccc60SShengfei Xu #define REG_OTPC_SBPI_CMD_VALID_PRE	(0x0024)
53*4e1ccc60SShengfei Xu #define REG_OTPC_SBPI_CS_VALID_PRE	(0x0028)
54*4e1ccc60SShengfei Xu #define REG_OTPC_SBPI_STATUS		(0x002C)
55*4e1ccc60SShengfei Xu #define REG_OTPC_USER_CTRL		(0x0100)
56*4e1ccc60SShengfei Xu #define USER_PD				(1 << 1)
57*4e1ccc60SShengfei Xu #define USER_DCTRL			(1 << 0)
58*4e1ccc60SShengfei Xu #define REG_OTPC_USER_ADDR		(0x0104)
59*4e1ccc60SShengfei Xu #define REG_OTPC_USER_ENABLE		(0x0108)
60*4e1ccc60SShengfei Xu #define USER_ENABLE			(1 << 0)
61*4e1ccc60SShengfei Xu #define REG_OTPC_USER_STATUS		(0x0110)
62*4e1ccc60SShengfei Xu #define REG_OTPC_USER_QP		(0x0120)
63*4e1ccc60SShengfei Xu #define REG_OTPC_USER_Q			(0x0124)
64*4e1ccc60SShengfei Xu #define REG_OTPC_USER_QSR		(0x0128)
65*4e1ccc60SShengfei Xu #define REG_OTPC_USER_QRR		(0x012C)
66*4e1ccc60SShengfei Xu #define REG_OTPC_SBPI_CMD_OFFSET(n)	(0x1000 + (n << 2))
67*4e1ccc60SShengfei Xu #define REG_OTPC_SBPI_READ_DATA_BASE	(0x2000)
68*4e1ccc60SShengfei Xu #define REG_OTPC_INT_CON		(0x0300)
69*4e1ccc60SShengfei Xu #define REG_OTPC_INT_STATUS		(0x0304)
70*4e1ccc60SShengfei Xu 
71*4e1ccc60SShengfei Xu #define REG_KEY_READER_CONFIG		0x00
72*4e1ccc60SShengfei Xu #define OTP_KEY_ACCESS_START		(1 << 0)
73*4e1ccc60SShengfei Xu #define SBPI_VAILI_COMMAND(n)		(0xffff0000 | n)
74*4e1ccc60SShengfei Xu 
75*4e1ccc60SShengfei Xu int rk_otp_read(uint32_t addr, uint32_t length,
76*4e1ccc60SShengfei Xu 		    uint16_t *buf, bool is_need_ecc);
77*4e1ccc60SShengfei Xu int rk_otp_ns_ecc_flag(uint32_t addr);
78*4e1ccc60SShengfei Xu #endif /* OTP_H */
79