Lines Matching full:otp

15 #include <rockchip-otp.h>
22 static int rockchip_otp_wait_status(struct rockchip_otp_platdata *otp, in rockchip_otp_wait_status() argument
27 while (!(readl(otp->base + OTPC_INT_STATUS) & flag)) { in rockchip_otp_wait_status()
37 writel(flag, otp->base + OTPC_INT_STATUS); in rockchip_otp_wait_status()
42 static int rockchip_otp_ecc_enable(struct rockchip_otp_platdata *otp, in rockchip_otp_ecc_enable() argument
48 otp->base + OTPC_SBPI_CTRL); in rockchip_otp_ecc_enable()
50 writel(SBPI_CMD_VALID_MASK | 0x1, otp->base + OTPC_SBPI_CMD_VALID_PRE); in rockchip_otp_ecc_enable()
52 otp->base + OTPC_SBPI_CMD0_OFFSET); in rockchip_otp_ecc_enable()
54 writel(SBPI_ECC_ENABLE, otp->base + OTPC_SBPI_CMD1_OFFSET); in rockchip_otp_ecc_enable()
56 writel(SBPI_ECC_DISABLE, otp->base + OTPC_SBPI_CMD1_OFFSET); in rockchip_otp_ecc_enable()
58 writel(SBPI_ENABLE_MASK | SBPI_ENABLE, otp->base + OTPC_SBPI_CTRL); in rockchip_otp_ecc_enable()
60 ret = rockchip_otp_wait_status(otp, OTPC_SBPI_DONE); in rockchip_otp_ecc_enable()
70 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_px30_otp_read() local
74 ret = rockchip_otp_ecc_enable(otp, false); in rockchip_px30_otp_read()
80 writel(OTPC_USE_USER | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL); in rockchip_px30_otp_read()
84 otp->base + OTPC_USER_ADDR); in rockchip_px30_otp_read()
86 otp->base + OTPC_USER_ENABLE); in rockchip_px30_otp_read()
87 ret = rockchip_otp_wait_status(otp, OTPC_USER_DONE); in rockchip_px30_otp_read()
92 *buffer++ = readb(otp->base + OTPC_USER_Q); in rockchip_px30_otp_read()
96 writel(0x0 | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL); in rockchip_px30_otp_read()
101 static int rk3308bs_otp_wait_status(struct rockchip_otp_platdata *otp, u32 flag) in rk3308bs_otp_wait_status() argument
105 while (!(readl(otp->base + OTPC_IRQ_ST) & flag)) { in rk3308bs_otp_wait_status()
115 writel(flag, otp->base + OTPC_IRQ_ST); in rk3308bs_otp_wait_status()
120 static int rk3308bs_otp_active(struct rockchip_otp_platdata *otp) in rk3308bs_otp_active() argument
125 mode = readl(otp->base + OTPC_MODE_CTRL); in rk3308bs_otp_active()
129 writel(OTPC_STANDBY, otp->base + OTPC_MODE_CTRL); in rk3308bs_otp_active()
130 ret = rk3308bs_otp_wait_status(otp, OTPC_DP2STB_IRQ_ST); in rk3308bs_otp_active()
132 dev_err(otp->dev, "timeout during wait dp2stb\n"); in rk3308bs_otp_active()
136 writel(OTPC_ACTIVE, otp->base + OTPC_MODE_CTRL); in rk3308bs_otp_active()
137 ret = rk3308bs_otp_wait_status(otp, OTPC_STB2ACT_IRQ_ST); in rk3308bs_otp_active()
139 dev_err(otp->dev, "timeout during wait stb2act\n"); in rk3308bs_otp_active()
150 static int rk3308bs_otp_standby(struct rockchip_otp_platdata *otp) in rk3308bs_otp_standby() argument
155 mode = readl(otp->base + OTPC_MODE_CTRL); in rk3308bs_otp_standby()
159 writel(OTPC_STANDBY, otp->base + OTPC_MODE_CTRL); in rk3308bs_otp_standby()
160 ret = rk3308bs_otp_wait_status(otp, OTPC_ACT2STB_IRQ_ST); in rk3308bs_otp_standby()
162 dev_err(otp->dev, "timeout during wait act2stb\n"); in rk3308bs_otp_standby()
166 writel(OTPC_DEEP_STANDBY, otp->base + OTPC_MODE_CTRL); in rk3308bs_otp_standby()
167 ret = rk3308bs_otp_wait_status(otp, OTPC_STB2DP_IRQ_ST); in rk3308bs_otp_standby()
169 dev_err(otp->dev, "timeout during wait stb2dp\n"); in rk3308bs_otp_standby()
183 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_rk3308bs_otp_read() local
194 ret = rk3308bs_otp_active(otp); in rockchip_rk3308bs_otp_read()
210 writel(OTPC_TRANS_NUM, otp->base + OTPC_REPR_RD_TRANS_NUM); in rockchip_rk3308bs_otp_read()
211 writel(addr_start++, otp->base + OTPC_ACCESS_ADDR); in rockchip_rk3308bs_otp_read()
212 writel(OTPC_READ_ACCESS, otp->base + OTPC_MODE_CTRL); in rockchip_rk3308bs_otp_read()
213 ret = rk3308bs_otp_wait_status(otp, OTPC_RDM_IRQ_ST); in rockchip_rk3308bs_otp_read()
218 out_value = readl(otp->base + OTPC_RD_DATA); in rockchip_rk3308bs_otp_read()
226 rk3308bs_otp_standby(otp); in rockchip_rk3308bs_otp_read()
234 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_rk3568_otp_read() local
249 ret = rockchip_otp_ecc_enable(otp, true); in rockchip_rk3568_otp_read()
255 writel(OTPC_USE_USER | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL); in rockchip_rk3568_otp_read()
259 otp->base + OTPC_USER_ADDR); in rockchip_rk3568_otp_read()
261 otp->base + OTPC_USER_ENABLE); in rockchip_rk3568_otp_read()
262 ret = rockchip_otp_wait_status(otp, OTPC_USER_DONE); in rockchip_rk3568_otp_read()
267 out_value = readl(otp->base + OTPC_USER_Q); in rockchip_rk3568_otp_read()
275 writel(0x0 | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL); in rockchip_rk3568_otp_read()
285 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_rk3588_otp_read() local
309 otp->base + RK3588_OTPC_AUTO_CTRL); in rockchip_rk3588_otp_read()
310 writel(RK3588_AUTO_EN, otp->base + RK3588_OTPC_AUTO_EN); in rockchip_rk3588_otp_read()
311 ret = readl_poll_timeout(otp->base + RK3588_OTPC_INT_ST, st, in rockchip_rk3588_otp_read()
317 writel(RK3588_RD_DONE, otp->base + RK3588_OTPC_INT_ST); in rockchip_rk3588_otp_read()
319 out_value = readl(otp->base + RK3588_OTPC_DOUT0); in rockchip_rk3588_otp_read()
335 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_rv1126_otp_init() local
339 writel(0x0, otp->base + RV1126_OTP_NVM_CEB); in rockchip_rv1126_otp_init()
340 ret = readl_poll_timeout(otp->base + RV1126_OTP_NVM_ST, status, in rockchip_rv1126_otp_init()
347 writel(0x1, otp->base + RV1126_OTP_NVM_RSTB); in rockchip_rv1126_otp_init()
348 ret = readl_poll_timeout(otp->base + RV1126_OTP_NVM_ST, status, in rockchip_rv1126_otp_init()
361 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_rv1126_otp_read() local
367 writel(offset++, otp->base + RV1126_OTP_NVM_RADDR); in rockchip_rv1126_otp_read()
368 writel(0x1, otp->base + RV1126_OTP_NVM_RSTART); in rockchip_rv1126_otp_read()
369 ret = readl_poll_timeout(otp->base + RV1126_OTP_READ_ST, in rockchip_rv1126_otp_read()
376 *buffer++ = readb(otp->base + RV1126_OTP_NVM_RDATA); in rockchip_rv1126_otp_read()
403 struct rockchip_otp_platdata *otp = dev_get_platdata(dev); in rockchip_otp_ofdata_to_platdata() local
405 otp->base = dev_read_addr_ptr(dev); in rockchip_otp_ofdata_to_platdata()
447 .compatible = "rockchip,px30-otp",
451 .compatible = "rockchip,px30s-otp",
455 .compatible = "rockchip,rk3308-otp",
459 .compatible = "rockchip,rk3308bs-otp",
463 .compatible = "rockchip,rk3528-otp",
467 .compatible = "rockchip,rk3562-otp",
471 .compatible = "rockchip,rk3568-otp",
475 .compatible = "rockchip,rk3588-otp",
479 .compatible = "rockchip,rv1106-otp",
483 .compatible = "rockchip,rv1126-otp",