
From: Lukas Funke lukas.funke@weidmueller.com
This series adds a driver to read and write ZynqMP eFuses [1]. The driver can be accessed by the 'fuse read' and 'fuse write' commands
Example:
=> fuse read 0 0xc 3 Reading bank 0:
Word 0x0000000c: 3cb16685 013af244 40000000
Note: Accessing eFuses requires eFuse access to be enabled in the underlying PMU firmware.
Use cases are: - Reading/writing user specific eFuses to enable device specific implementations - Revoking SPK IDs - Reading SoC version/DNA
[1] https://docs.amd.com/r/en-US/ug1085-zynq-ultrascale-trm/eFUSE
Changes in v3: - Align ZynqMP eFuse driver with Linux kernel - Adapt versal, versal-net and zynqmp to use common chip-id function - Enable CMD_FUSE and ZYNQMP_EFUSE for zynqmp_virt and zynqmp_kria defconfig - Use 'dev_err' instead 'log_msg_ret' if possible
Changes in v2: - Drop vendor specific fuse cmd, use existing fuse cmd - Minor code refactoring (reverse x-mas tree)
Lukas Funke (7): configs: zynqmp_kria: Enable CMD_FUSE and ZYNQMP_EFUSE configs: zynqmp_virt: Enable CMD_FUSE and ZYNQMP_EFUSE soc: xilinx: versal: Use zynqmp_pm_get_chipid() to get chip revision soc: xilinx: versal-net: Use zynqmp_pm_get_chipid() to get chip revision soc: xilinx: zynqmp: Use zynqmp_pm_get_chipid() to get chip revision firmware: zynqmp: Add support to access efuses drivers: misc: Add driver to access ZynqMP efuses
configs/xilinx_zynqmp_kria_defconfig | 2 + configs/xilinx_zynqmp_virt_defconfig | 2 + drivers/firmware/firmware-zynqmp.c | 31 +++ drivers/misc/Kconfig | 8 + drivers/misc/Makefile | 1 + drivers/misc/zynqmp_efuse.c | 360 +++++++++++++++++++++++++++ drivers/soc/soc_xilinx_versal.c | 13 +- drivers/soc/soc_xilinx_versal_net.c | 13 +- drivers/soc/soc_xilinx_zynqmp.c | 21 +- include/zynqmp_firmware.h | 2 + 10 files changed, 427 insertions(+), 26 deletions(-) create mode 100644 drivers/misc/zynqmp_efuse.c