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