* [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568
@ 2026-02-05 21:18 Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 1/6] dt-bindings: nvmem: rockchip,otp: Add support for " Heiko Stuebner
` (6 more replies)
0 siblings, 7 replies; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:18 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
This is a continuation of Kever's from april 2025 [0] - hence the v4
The original patches seem to have fallen through the cracks.
Additionally this directly inclues the interal word-size patch [1],
that was previously listed as an external dependency.
And finally meanwhile patches for the RK3528 SoC from Jonas have appeared,
so I've included those too, to get the support for all not-yet supported
SoCs done
Changes in v4:
- rebase onto 6.18-rc8 - the rockchip-otp driver did no receive
additional comments in the meantime
- include the dependency patch about word-sizes
- add support for RK3528
Changes in v3:
- update the clock name from "usr" to "otp" and re-order to sync with
other soc.
- rebase on rk3576 and rk3528, changes suggest by Jonas
- Use rk3568 data structure for rk3562
Changes in v2:
- Update the commit message and add maxItems in schema.
[0] https://patch.msgid.link/20250415103203.82972-1-kever.yang@rock-chips.com
[1] https://patch.msgid.link/20250316191900.1858944-1-jonas@kwiboo.se
Finley Xiao (2):
nvmem: rockchip-otp: Add support for RK3568
nvmem: rockchip-otp: Add support for RK3562
Jonas Karlman (3):
dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528
nvmem: rockchip-otp: Handle internal word_size in main reg_read op
nvmem: rockchip-otp: Add support for RK3528
Kever Yang (1):
dt-bindings: nvmem: rockchip,otp: Add support for RK3562 and RK3568
.../bindings/nvmem/rockchip,otp.yaml | 83 +++++++--
drivers/nvmem/rockchip-otp.c | 161 ++++++++++++++----
2 files changed, 202 insertions(+), 42 deletions(-)
--
2.47.2
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 1/6] dt-bindings: nvmem: rockchip,otp: Add support for RK3562 and RK3568
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
@ 2026-02-05 21:18 ` Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528 Heiko Stuebner
` (5 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:18 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
From: Kever Yang <kever.yang@rock-chips.com>
Add compatible entry for the otp controller in RK3562 and RK3568, add
schema for different clock names for new entry.
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
.../bindings/nvmem/rockchip,otp.yaml | 58 +++++++++++++++----
1 file changed, 48 insertions(+), 10 deletions(-)
diff --git a/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml b/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
index dc89020b0950..e90136f7dcfb 100644
--- a/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
+++ b/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
@@ -14,6 +14,8 @@ properties:
enum:
- rockchip,px30-otp
- rockchip,rk3308-otp
+ - rockchip,rk3562-otp
+ - rockchip,rk3568-otp
- rockchip,rk3576-otp
- rockchip,rk3588-otp
@@ -26,19 +28,15 @@ properties:
clock-names:
minItems: 3
- items:
- - const: otp
- - const: apb_pclk
- - const: phy
- - const: arb
+ maxItems: 4
resets:
minItems: 1
- maxItems: 3
+ maxItems: 4
reset-names:
minItems: 1
- maxItems: 3
+ maxItems: 4
required:
- compatible
@@ -64,13 +62,44 @@ allOf:
clocks:
maxItems: 3
clock-names:
- maxItems: 3
+ items:
+ - const: otp
+ - const: apb_pclk
+ - const: phy
resets:
maxItems: 1
reset-names:
items:
- const: phy
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - rockchip,rk3562-otp
+ - rockchip,rk3568-otp
+ then:
+ properties:
+ clocks:
+ minItems: 4
+ maxItems: 4
+ clock-names:
+ items:
+ - const: otp
+ - const: apb_pclk
+ - const: phy
+ - const: sbpi
+ resets:
+ minItems: 4
+ maxItems: 4
+ reset-names:
+ items:
+ - const: otp
+ - const: apb
+ - const: phy
+ - const: sbpi
+
- if:
properties:
compatible:
@@ -82,7 +111,10 @@ allOf:
clocks:
maxItems: 3
clock-names:
- maxItems: 3
+ items:
+ - const: otp
+ - const: apb_pclk
+ - const: phy
resets:
minItems: 2
maxItems: 2
@@ -101,10 +133,16 @@ allOf:
properties:
clocks:
minItems: 4
+ maxItems: 4
clock-names:
- minItems: 4
+ items:
+ - const: otp
+ - const: apb_pclk
+ - const: phy
+ - const: arb
resets:
minItems: 3
+ maxItems: 3
reset-names:
items:
- const: otp
--
2.47.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 1/6] dt-bindings: nvmem: rockchip,otp: Add support for " Heiko Stuebner
@ 2026-02-05 21:18 ` Heiko Stuebner
2026-02-10 1:25 ` Rob Herring (Arm)
2026-02-05 21:18 ` [PATCH v4 3/6] nvmem: rockchip-otp: Handle internal word_size in main reg_read op Heiko Stuebner
` (4 subsequent siblings)
6 siblings, 1 reply; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:18 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
From: Jonas Karlman <jonas@kwiboo.se>
Add compatible string for the OTP controller in RK3528. Compared to the
RK3562 and RK3568 the OTP in RK3528 does not have a phy clock or reset.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
.../bindings/nvmem/rockchip,otp.yaml | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml b/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
index e90136f7dcfb..7e4d5e1c4ced 100644
--- a/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
+++ b/Documentation/devicetree/bindings/nvmem/rockchip,otp.yaml
@@ -14,6 +14,7 @@ properties:
enum:
- rockchip,px30-otp
- rockchip,rk3308-otp
+ - rockchip,rk3528-otp
- rockchip,rk3562-otp
- rockchip,rk3568-otp
- rockchip,rk3576-otp
@@ -72,6 +73,30 @@ allOf:
items:
- const: phy
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - rockchip,rk3528-otp
+ then:
+ properties:
+ clocks:
+ maxItems: 3
+ clock-names:
+ items:
+ - const: otp
+ - const: apb_pclk
+ - const: sbpi
+ resets:
+ minItems: 3
+ maxItems: 3
+ reset-names:
+ items:
+ - const: otp
+ - const: apb
+ - const: sbpi
+
- if:
properties:
compatible:
--
2.47.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 3/6] nvmem: rockchip-otp: Handle internal word_size in main reg_read op
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 1/6] dt-bindings: nvmem: rockchip,otp: Add support for " Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528 Heiko Stuebner
@ 2026-02-05 21:18 ` Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 4/6] nvmem: rockchip-otp: Add support for RK3568 Heiko Stuebner
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:18 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
From: Jonas Karlman <jonas@kwiboo.se>
Rockchip SoCs RK3576 and RK3588 read data from the OTP using 32-bit
words instead of normal 8-bit bytes. Similar RK3506, RK3528, RK3562 and
RK3568 will read data from OTP using 16-bit words.
The nvmem core stride and word_size cannot fully be used as cells is not
always aligned. Continue to report a stride=1 and word_size=1 in
nvmem_config and instead handle use of SoC specific word_size internally
in the driver.
Move current SoC specific word_size handling from the RK3588 read_reg
operation to the main read_reg operation to help simplify the SoC
specific read_reg operation and allow code reuse in a future RK3568
reg_read operation.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Tested-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/nvmem/rockchip-otp.c | 72 ++++++++++++++++++++----------------
1 file changed, 40 insertions(+), 32 deletions(-)
diff --git a/drivers/nvmem/rockchip-otp.c b/drivers/nvmem/rockchip-otp.c
index d88f12c53242..45bbb6147fb7 100644
--- a/drivers/nvmem/rockchip-otp.c
+++ b/drivers/nvmem/rockchip-otp.c
@@ -59,7 +59,6 @@
#define RK3588_OTPC_AUTO_EN 0x08
#define RK3588_OTPC_INT_ST 0x84
#define RK3588_OTPC_DOUT0 0x20
-#define RK3588_NBYTES 4
#define RK3588_BURST_NUM 1
#define RK3588_BURST_SHIFT 8
#define RK3588_ADDR_SHIFT 16
@@ -69,6 +68,7 @@
struct rockchip_data {
int size;
int read_offset;
+ int word_size;
const char * const *clks;
int num_clks;
nvmem_reg_read_t reg_read;
@@ -185,48 +185,28 @@ static int px30_otp_read(void *context, unsigned int offset,
}
static int rk3588_otp_read(void *context, unsigned int offset,
- void *val, size_t bytes)
+ void *val, size_t count)
{
struct rockchip_otp *otp = context;
- unsigned int addr_start, addr_end, addr_len;
- int ret, i = 0;
- u32 data;
- u8 *buf;
-
- addr_start = round_down(offset, RK3588_NBYTES) / RK3588_NBYTES;
- addr_end = round_up(offset + bytes, RK3588_NBYTES) / RK3588_NBYTES;
- addr_len = addr_end - addr_start;
- addr_start += otp->data->read_offset / RK3588_NBYTES;
-
- buf = kzalloc(array_size(addr_len, RK3588_NBYTES), GFP_KERNEL);
- if (!buf)
- return -ENOMEM;
+ u32 *buf = val;
+ int ret;
- while (addr_len--) {
- writel((addr_start << RK3588_ADDR_SHIFT) |
+ while (count--) {
+ writel((offset++ << RK3588_ADDR_SHIFT) |
(RK3588_BURST_NUM << RK3588_BURST_SHIFT),
otp->base + RK3588_OTPC_AUTO_CTRL);
writel(RK3588_AUTO_EN, otp->base + RK3588_OTPC_AUTO_EN);
ret = rockchip_otp_wait_status(otp, RK3588_OTPC_INT_ST,
RK3588_RD_DONE);
- if (ret < 0) {
+ if (ret) {
dev_err(otp->dev, "timeout during read setup\n");
- goto read_end;
+ return ret;
}
- data = readl(otp->base + RK3588_OTPC_DOUT0);
- memcpy(&buf[i], &data, RK3588_NBYTES);
-
- i += RK3588_NBYTES;
- addr_start++;
+ *buf++ = readl(otp->base + RK3588_OTPC_DOUT0);
}
- memcpy(val, buf + offset % RK3588_NBYTES, bytes);
-
-read_end:
- kfree(buf);
-
return ret;
}
@@ -234,7 +214,7 @@ static int rockchip_otp_read(void *context, unsigned int offset,
void *val, size_t bytes)
{
struct rockchip_otp *otp = context;
- int ret;
+ int ret, word_size;
if (!otp->data || !otp->data->reg_read)
return -EINVAL;
@@ -245,8 +225,34 @@ static int rockchip_otp_read(void *context, unsigned int offset,
return ret;
}
- ret = otp->data->reg_read(context, offset, val, bytes);
+ offset += otp->data->read_offset;
+ word_size = otp->data->word_size;
+
+ if (word_size > 1) {
+ unsigned int addr_start, addr_end;
+ size_t count;
+ u8 *buf;
+
+ addr_start = offset / word_size;
+ addr_end = DIV_ROUND_UP(offset + bytes, word_size);
+ count = addr_end - addr_start;
+
+ buf = kzalloc(array_size(count, word_size), GFP_KERNEL);
+ if (!buf) {
+ ret = -ENOMEM;
+ goto err;
+ }
+
+ ret = otp->data->reg_read(context, addr_start, buf, count);
+ if (!ret)
+ memcpy(val, buf + (offset % word_size), bytes);
+
+ kfree(buf);
+ } else {
+ ret = otp->data->reg_read(context, offset, val, bytes);
+ }
+err:
clk_bulk_disable_unprepare(otp->data->num_clks, otp->clks);
return ret;
@@ -259,7 +265,7 @@ static struct nvmem_config otp_config = {
.type = NVMEM_TYPE_OTP,
.read_only = true,
.stride = 1,
- .word_size = 1,
+ .word_size = sizeof(u8),
.reg_read = rockchip_otp_read,
};
@@ -277,6 +283,7 @@ static const struct rockchip_data px30_data = {
static const struct rockchip_data rk3576_data = {
.size = 0x100,
.read_offset = 0x700,
+ .word_size = sizeof(u32),
.clks = px30_otp_clocks,
.num_clks = ARRAY_SIZE(px30_otp_clocks),
.reg_read = rk3588_otp_read,
@@ -289,6 +296,7 @@ static const char * const rk3588_otp_clocks[] = {
static const struct rockchip_data rk3588_data = {
.size = 0x400,
.read_offset = 0xc00,
+ .word_size = sizeof(u32),
.clks = rk3588_otp_clocks,
.num_clks = ARRAY_SIZE(rk3588_otp_clocks),
.reg_read = rk3588_otp_read,
--
2.47.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 4/6] nvmem: rockchip-otp: Add support for RK3568
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
` (2 preceding siblings ...)
2026-02-05 21:18 ` [PATCH v4 3/6] nvmem: rockchip-otp: Handle internal word_size in main reg_read op Heiko Stuebner
@ 2026-02-05 21:18 ` Heiko Stuebner
2026-02-05 21:19 ` [PATCH v4 5/6] nvmem: rockchip-otp: Add support for RK3562 Heiko Stuebner
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:18 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
From: Finley Xiao <finley.xiao@rock-chips.com>
This adds the necessary data for handling otp the rk3568.
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/nvmem/rockchip-otp.c | 69 ++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/drivers/nvmem/rockchip-otp.c b/drivers/nvmem/rockchip-otp.c
index 45bbb6147fb7..cfb69bc58869 100644
--- a/drivers/nvmem/rockchip-otp.c
+++ b/drivers/nvmem/rockchip-otp.c
@@ -27,6 +27,7 @@
#define OTPC_USER_CTRL 0x0100
#define OTPC_USER_ADDR 0x0104
#define OTPC_USER_ENABLE 0x0108
+#define OTPC_USER_QP 0x0120
#define OTPC_USER_Q 0x0124
#define OTPC_INT_STATUS 0x0304
#define OTPC_SBPI_CMD0_OFFSET 0x1000
@@ -184,6 +185,58 @@ static int px30_otp_read(void *context, unsigned int offset,
return ret;
}
+static int rk3568_otp_read(void *context, unsigned int offset, void *val,
+ size_t count)
+{
+ struct rockchip_otp *otp = context;
+ u16 *buf = val;
+ u32 otp_qp;
+ int ret;
+
+ ret = rockchip_otp_reset(otp);
+ if (ret) {
+ dev_err(otp->dev, "failed to reset otp phy\n");
+ return ret;
+ }
+
+ ret = rockchip_otp_ecc_enable(otp, true);
+ if (ret) {
+ dev_err(otp->dev, "rockchip_otp_ecc_enable err\n");
+ return ret;
+ }
+
+ writel(OTPC_USE_USER | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
+ udelay(5);
+
+ while (count--) {
+ writel(offset++ | OTPC_USER_ADDR_MASK,
+ otp->base + OTPC_USER_ADDR);
+ writel(OTPC_USER_FSM_ENABLE | OTPC_USER_FSM_ENABLE_MASK,
+ otp->base + OTPC_USER_ENABLE);
+
+ ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS,
+ OTPC_USER_DONE);
+ if (ret) {
+ dev_err(otp->dev, "timeout during read setup\n");
+ goto read_end;
+ }
+
+ otp_qp = readl(otp->base + OTPC_USER_QP);
+ if (((otp_qp & 0xc0) == 0xc0) || (otp_qp & 0x20)) {
+ ret = -EIO;
+ dev_err(otp->dev, "ecc check error during read setup\n");
+ goto read_end;
+ }
+
+ *buf++ = readl(otp->base + OTPC_USER_Q);
+ }
+
+read_end:
+ writel(0x0 | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
+
+ return ret;
+}
+
static int rk3588_otp_read(void *context, unsigned int offset,
void *val, size_t count)
{
@@ -280,6 +333,18 @@ static const struct rockchip_data px30_data = {
.reg_read = px30_otp_read,
};
+static const char * const rk3568_otp_clocks[] = {
+ "otp", "apb_pclk", "phy", "sbpi",
+};
+
+static const struct rockchip_data rk3568_data = {
+ .size = 0x80,
+ .word_size = sizeof(u16),
+ .clks = rk3568_otp_clocks,
+ .num_clks = ARRAY_SIZE(rk3568_otp_clocks),
+ .reg_read = rk3568_otp_read,
+};
+
static const struct rockchip_data rk3576_data = {
.size = 0x100,
.read_offset = 0x700,
@@ -311,6 +376,10 @@ static const struct of_device_id rockchip_otp_match[] = {
.compatible = "rockchip,rk3308-otp",
.data = &px30_data,
},
+ {
+ .compatible = "rockchip,rk3568-otp",
+ .data = &rk3568_data,
+ },
{
.compatible = "rockchip,rk3576-otp",
.data = &rk3576_data,
--
2.47.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 5/6] nvmem: rockchip-otp: Add support for RK3562
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
` (3 preceding siblings ...)
2026-02-05 21:18 ` [PATCH v4 4/6] nvmem: rockchip-otp: Add support for RK3568 Heiko Stuebner
@ 2026-02-05 21:19 ` Heiko Stuebner
2026-02-05 21:19 ` [PATCH v4 6/6] nvmem: rockchip-otp: Add support for RK3528 Heiko Stuebner
2026-03-12 8:58 ` [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Srinivas Kandagatla
6 siblings, 0 replies; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:19 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
From: Finley Xiao <finley.xiao@rock-chips.com>
This adds the necessary data for handling otp on the rk3562.
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/nvmem/rockchip-otp.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/nvmem/rockchip-otp.c b/drivers/nvmem/rockchip-otp.c
index cfb69bc58869..62ce22d72586 100644
--- a/drivers/nvmem/rockchip-otp.c
+++ b/drivers/nvmem/rockchip-otp.c
@@ -376,6 +376,10 @@ static const struct of_device_id rockchip_otp_match[] = {
.compatible = "rockchip,rk3308-otp",
.data = &px30_data,
},
+ {
+ .compatible = "rockchip,rk3562-otp",
+ .data = &rk3568_data,
+ },
{
.compatible = "rockchip,rk3568-otp",
.data = &rk3568_data,
--
2.47.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v4 6/6] nvmem: rockchip-otp: Add support for RK3528
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
` (4 preceding siblings ...)
2026-02-05 21:19 ` [PATCH v4 5/6] nvmem: rockchip-otp: Add support for RK3562 Heiko Stuebner
@ 2026-02-05 21:19 ` Heiko Stuebner
2026-02-07 10:33 ` Willy Tarreau
2026-03-12 8:58 ` [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Srinivas Kandagatla
6 siblings, 1 reply; 10+ messages in thread
From: Heiko Stuebner @ 2026-02-05 21:19 UTC (permalink / raw)
To: srini
Cc: robh, krzk+dt, conor+dt, heiko, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
From: Jonas Karlman <jonas@kwiboo.se>
Add support for the OTP controller in RK3528. The OTPC is similar to the
OTPC in RK3562 and RK3568, exept for a missing phy clock and reset.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
drivers/nvmem/rockchip-otp.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/nvmem/rockchip-otp.c b/drivers/nvmem/rockchip-otp.c
index 62ce22d72586..0ec78b5e19e7 100644
--- a/drivers/nvmem/rockchip-otp.c
+++ b/drivers/nvmem/rockchip-otp.c
@@ -333,6 +333,18 @@ static const struct rockchip_data px30_data = {
.reg_read = px30_otp_read,
};
+static const char * const rk3528_otp_clocks[] = {
+ "otp", "apb_pclk", "sbpi",
+};
+
+static const struct rockchip_data rk3528_data = {
+ .size = 0x80,
+ .word_size = sizeof(u16),
+ .clks = rk3528_otp_clocks,
+ .num_clks = ARRAY_SIZE(rk3528_otp_clocks),
+ .reg_read = rk3568_otp_read,
+};
+
static const char * const rk3568_otp_clocks[] = {
"otp", "apb_pclk", "phy", "sbpi",
};
@@ -376,6 +388,10 @@ static const struct of_device_id rockchip_otp_match[] = {
.compatible = "rockchip,rk3308-otp",
.data = &px30_data,
},
+ {
+ .compatible = "rockchip,rk3528-otp",
+ .data = &rk3528_data,
+ },
{
.compatible = "rockchip,rk3562-otp",
.data = &rk3568_data,
--
2.47.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v4 6/6] nvmem: rockchip-otp: Add support for RK3528
2026-02-05 21:19 ` [PATCH v4 6/6] nvmem: rockchip-otp: Add support for RK3528 Heiko Stuebner
@ 2026-02-07 10:33 ` Willy Tarreau
0 siblings, 0 replies; 10+ messages in thread
From: Willy Tarreau @ 2026-02-07 10:33 UTC (permalink / raw)
To: Heiko Stuebner
Cc: srini, robh, krzk+dt, conor+dt, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, jonas
Hi Heiko,
On Thu, Feb 05, 2026 at 10:19:01PM +0100, Heiko Stuebner wrote:
> From: Jonas Karlman <jonas@kwiboo.se>
>
> Add support for the OTP controller in RK3528. The OTPC is similar to the
> OTPC in RK3562 and RK3568, exept for a missing phy clock and reset.
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
This time I'm making sure to respond to the right patch :-)
I applied your series on top of latest master and booted it on my
E20C (rk3528-based). It provides me with entries in which I can
read values, like when I applied Jonas' patch on 6.17, so I guess
that it's OK:
# for i in /sys/devices/platform/soc/*/rockchip-otp0/cells/*; do echo ${i##*/}:;hexdump $i;done
cpu-code@2,0:
0000000 2835
0000002
cpu-leakage@1a,0:
0000000 000e
0000001
cpu-version@8,3:
0000000 0001
0000001
gpu-leakage@1c,0:
0000000 0003
0000001
id@a,0:
0000000 4e54 5532 3433 0000 0000 0000 0800 112d
0000010
logic-leakage@1b,0:
0000000 0017
0000001
tsadc-trim@44,0:
0000000 0200
0000002
So feel free to add this if you want:
Tested-by: Willy Tarreau <w@1wt.eu>
Willy
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528
2026-02-05 21:18 ` [PATCH v4 2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528 Heiko Stuebner
@ 2026-02-10 1:25 ` Rob Herring (Arm)
0 siblings, 0 replies; 10+ messages in thread
From: Rob Herring (Arm) @ 2026-02-10 1:25 UTC (permalink / raw)
To: Heiko Stuebner
Cc: conor+dt, linux-rockchip, kever.yang, linux-arm-kernel,
devicetree, srini, linux-kernel, finley.xiao, krzk+dt, w, jonas
On Thu, 05 Feb 2026 22:18:57 +0100, Heiko Stuebner wrote:
> From: Jonas Karlman <jonas@kwiboo.se>
>
> Add compatible string for the OTP controller in RK3528. Compared to the
> RK3562 and RK3568 the OTP in RK3528 does not have a phy clock or reset.
>
> Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> .../bindings/nvmem/rockchip,otp.yaml | 25 +++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
` (5 preceding siblings ...)
2026-02-05 21:19 ` [PATCH v4 6/6] nvmem: rockchip-otp: Add support for RK3528 Heiko Stuebner
@ 2026-03-12 8:58 ` Srinivas Kandagatla
6 siblings, 0 replies; 10+ messages in thread
From: Srinivas Kandagatla @ 2026-03-12 8:58 UTC (permalink / raw)
To: Heiko Stuebner
Cc: robh, krzk+dt, conor+dt, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, kever.yang, finley.xiao, w, jonas
On Thu, 05 Feb 2026 22:18:55 +0100, Heiko Stuebner wrote:
> This is a continuation of Kever's from april 2025 [0] - hence the v4
> The original patches seem to have fallen through the cracks.
>
> Additionally this directly inclues the interal word-size patch [1],
> that was previously listed as an external dependency.
>
> And finally meanwhile patches for the RK3528 SoC from Jonas have appeared,
> so I've included those too, to get the support for all not-yet supported
> SoCs done
>
> [...]
Applied, thanks!
[1/6] dt-bindings: nvmem: rockchip,otp: Add support for RK3562 and RK3568
commit: 9438f599e77795f59571e57c438b28da59e1e5df
[2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528
commit: c3c46b2a5bdbe254c6d7546d693a6b3886fd2993
[3/6] nvmem: rockchip-otp: Handle internal word_size in main reg_read op
commit: 9e7aba140eba2aeb72e65ea778c89a245fa235a4
[4/6] nvmem: rockchip-otp: Add support for RK3568
commit: 11e01bcb827d369344f7f0e960698d33db9ced5a
[5/6] nvmem: rockchip-otp: Add support for RK3562
commit: e482a8d8a0b4fef407084da1d6a00ad86993e7df
[6/6] nvmem: rockchip-otp: Add support for RK3528
commit: 85e2134182e21dc9550a1e316d690b1dda52d8cf
Best regards,
--
Srinivas Kandagatla <srini@kernel.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-03-12 8:58 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-05 21:18 [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 1/6] dt-bindings: nvmem: rockchip,otp: Add support for " Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 2/6] dt-bindings: nvmem: rockchip,otp: Add compatible for RK3528 Heiko Stuebner
2026-02-10 1:25 ` Rob Herring (Arm)
2026-02-05 21:18 ` [PATCH v4 3/6] nvmem: rockchip-otp: Handle internal word_size in main reg_read op Heiko Stuebner
2026-02-05 21:18 ` [PATCH v4 4/6] nvmem: rockchip-otp: Add support for RK3568 Heiko Stuebner
2026-02-05 21:19 ` [PATCH v4 5/6] nvmem: rockchip-otp: Add support for RK3562 Heiko Stuebner
2026-02-05 21:19 ` [PATCH v4 6/6] nvmem: rockchip-otp: Add support for RK3528 Heiko Stuebner
2026-02-07 10:33 ` Willy Tarreau
2026-03-12 8:58 ` [PATCH v4 0/6] rockchip,otp: Support for RK3528, RK3562 and RK3568 Srinivas Kandagatla
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox