Hi Srinivas, Gentle ping, any comments from the nvmem side? Thank you! On Fri, Jul 26, 2024 at 3:38 PM Geert Uytterhoeven <geert+renesas@xxxxxxxxx> wrote: > R-Car Gen3/Gen4 SoCs contain fuses indicating hardware support or > hardware parameters. Unfortunately the various SoCs require different > mechanisms to read the state of the fuses: > - On R-Car Gen3, the fuse monitor registers are in the middle of the > Pin Function Controller (PFC) register block, > - On R-Car V3U and S4-8, the E-FUSE non-volatile memory is accessible > through a separate register block in the PFC, > - On R-Car V4H and V4M, the E-FUSE non-volatile memory is accessible > through the second register block of OTP_MEM. > > As the first variant is quite different from the other two, and there is > currently no use case requiring support for it, this patch series adds > support for the last 2 variants only. > > Note that the first two revisions of this series implemented only basic > nvmem support, and a custom in-kernel API, mimicked after the > fuse-tregra driver. Then, Arnd told me on IRC that the R-Car E-FUSE > driver should use the nvmem framework fully. > > The fuses' states can be read using the nvmem subsystem: > - In kernelspace, through the nvmem_cell_*() API. > A first known use case is reading tuning parameters for the > Universal Flash Storage controller on R-Car S4-8 ES1.2. > - In userspace, through sysfs. E.g. on R-Car S4-8 ES1.2: > / # hd /sys/bus/nvmem/devices/rcar-fuse/nvmem > 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| > * > 000000e0 00 00 00 00 fe 00 00 00 00 00 00 00 00 00 00 00 |....�...........| > 000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| > * > 00000140 00 00 00 00 23 51 23 51 52 98 52 98 00 00 00 00 |....#Q#QR�R�....| > 00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| > * > 00000200 > > Changes compared to v2[1]: > - Dropped accepted dt-bindings, > - Drop "pinctrl: renesas: Add R-Car Gen3 fuse support", > - New patch "dt-bindings: fuse: Move renesas,rcar-{efuse,otp} to > nvmem", > - Drop superfluous semicolon, > - Drop the custom rcar_fuse_read() kernel API, in favor of the > standard nvmem_cell_*() API, > - Drop support for explicitly-instantiated platform devices with > accompanying platform data, which would be needed to support fuses > tightly integrated with the Pin Function Controller on R-Car Gen3 > SoCs. It can be added when a use case shows up. > - Move from drivers/soc/renesas/ to drivers/nvmem/, > - Register the full register block that contains the E-FUSE data > registers with the nvmem subsystem, but use keepouts to ignore all > registers before the first or after the last documented data > register. Undocumented registers in between are still accessible. > - Replace offset/nregs in rcar_fuse_data by start/end, > - Use __ioread32_copy() helper, > - Initialize most fields of struct nvmem_config in its declaration, > - Rename nvmem device from "fuse" to "rcar-fuse", > - Use NVMEM_DEVID_NONE, > - Add an entry to the MAINTAINERS file, > - Fix reg size, > - New patch "arm64: dts: renesas: r8a779f4: Add UFS tuning parameters > in E-FUSE". > > Changes compared to v1[2]: > - Drop RFC state and broaden audience, > - Fix typo in one-line summary, > - Add Reviewed-by. > > This has been tested on R-Car V3U, S4-8 ES1.0 and ES1.2, V4H, and V4M. > > Thanks for your comments! > > [1] https://lore.kernel.org/cover.1716974502.git.geert+renesas@xxxxxxxxx > [2] https://lore.kernel.org/cover.1714642390.git.geert+renesas@xxxxxxxxx > > Geert Uytterhoeven (7): > dt-bindings: fuse: Move renesas,rcar-{efuse,otp} to nvmem > nvmem: Add R-Car E-FUSE driver > arm64: dts: renesas: r8a779a0: Add E-FUSE node > arm64: dts: renesas: r8a779f0: Add E-FUSE node > arm64: dts: renesas: r8a779f4: Add UFS tuning parameters in E-FUSE > arm64: dts: renesas: r8a779g0: Add OTP_MEM node > arm64: dts: renesas: r8a779h0: Add OTP_MEM node > > .../{fuse => nvmem}/renesas,rcar-efuse.yaml | 35 +++-- > .../{fuse => nvmem}/renesas,rcar-otp.yaml | 17 ++- > MAINTAINERS | 2 + > arch/arm64/boot/dts/renesas/r8a779a0.dtsi | 8 + > arch/arm64/boot/dts/renesas/r8a779f0.dtsi | 8 + > arch/arm64/boot/dts/renesas/r8a779f4.dtsi | 12 ++ > arch/arm64/boot/dts/renesas/r8a779g0.dtsi | 5 + > arch/arm64/boot/dts/renesas/r8a779h0.dtsi | 5 + > drivers/nvmem/Kconfig | 11 ++ > drivers/nvmem/Makefile | 2 + > drivers/nvmem/rcar-efuse.c | 142 ++++++++++++++++++ > 11 files changed, 230 insertions(+), 17 deletions(-) > rename Documentation/devicetree/bindings/{fuse => nvmem}/renesas,rcar-efuse.yaml (54%) > rename Documentation/devicetree/bindings/{fuse => nvmem}/renesas,rcar-otp.yaml (60%) > create mode 100644 drivers/nvmem/rcar-efuse.c > > -- > 2.34.1