Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nvmem: rockchip-otp: Move read-offset into variant-data

The RK3588 has an offset into the OTP area where the readable area begins
and automatically adds this to the start address.
Other variants are very much similar to rk3588, just with a different
offset, so move that value into variant-data.

To match the size in bytes, store this value also in bytes and not in
number of blocks.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/20250411112251.68002-2-srinivas.kandagatla@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Heiko Stuebner and committed by
Greg Kroah-Hartman
6907e809 0af2f6be

+3 -2
+3 -2
drivers/nvmem/rockchip-otp.c
··· 59 59 #define RK3588_OTPC_AUTO_EN 0x08 60 60 #define RK3588_OTPC_INT_ST 0x84 61 61 #define RK3588_OTPC_DOUT0 0x20 62 - #define RK3588_NO_SECURE_OFFSET 0x300 63 62 #define RK3588_NBYTES 4 64 63 #define RK3588_BURST_NUM 1 65 64 #define RK3588_BURST_SHIFT 8 ··· 68 69 69 70 struct rockchip_data { 70 71 int size; 72 + int read_offset; 71 73 const char * const *clks; 72 74 int num_clks; 73 75 nvmem_reg_read_t reg_read; ··· 196 196 addr_start = round_down(offset, RK3588_NBYTES) / RK3588_NBYTES; 197 197 addr_end = round_up(offset + bytes, RK3588_NBYTES) / RK3588_NBYTES; 198 198 addr_len = addr_end - addr_start; 199 - addr_start += RK3588_NO_SECURE_OFFSET; 199 + addr_start += otp->data->read_offset / RK3588_NBYTES; 200 200 201 201 buf = kzalloc(array_size(addr_len, RK3588_NBYTES), GFP_KERNEL); 202 202 if (!buf) ··· 280 280 281 281 static const struct rockchip_data rk3588_data = { 282 282 .size = 0x400, 283 + .read_offset = 0xc00, 283 284 .clks = rk3588_otp_clocks, 284 285 .num_clks = ARRAY_SIZE(rk3588_otp_clocks), 285 286 .reg_read = rk3588_otp_read,