This is my second attempt to solve the use case where there is only the base MAC address stored in an EEPROM or similar storage provider. This is the case for the Kontron sl28 board and multiple openwrt supported boards. Introduce an NVMEM transformation op. This can then be used to parse or swap bytes of the NVMEM cell value. A transformation might also have multiple output values, like in the base mac address case. It reads the mac address from the nvmem storage and generates multiple individual addresses, i.e. on our board we reserve 8 consecutive addresses. These addresses then can be assigned to different network interfaces. To make it possible to reference different values we need to introduce an argument to the phandle. This additional argument is then an index which is can be used by the transformation op. Previous discussion can be found here: https://lore.kernel.org/linux-devicetree/20211123134425.3875656-1-michael@xxxxxxxx/ Michael Walle (8): of: base: add of_parse_phandle_with_optional_args() dt-bindings: nvmem: add transformation bindings nvmem: core: add an index parameter to the cell nvmem: core: add transformations support net: add helper eth_addr_add() nvmem: transformations: ethernet address offset support arm64: dts: ls1028a: sl28: get MAC addresses from VPD arm64: defconfig: enable NVMEM transformations .../devicetree/bindings/mtd/mtd.yaml | 7 +- .../bindings/nvmem/nvmem-transformations.yaml | 46 ++++++++++++ .../fsl-ls1028a-kontron-kbox-a-230-ls.dts | 8 ++ .../fsl-ls1028a-kontron-sl28-var1.dts | 2 + .../fsl-ls1028a-kontron-sl28-var2.dts | 4 + .../fsl-ls1028a-kontron-sl28-var4.dts | 2 + .../freescale/fsl-ls1028a-kontron-sl28.dts | 17 +++++ arch/arm64/configs/defconfig | 1 + drivers/nvmem/Kconfig | 7 ++ drivers/nvmem/Makefile | 1 + drivers/nvmem/core.c | 44 ++++++++--- drivers/nvmem/imx-ocotp.c | 4 +- drivers/nvmem/transformations.c | 73 +++++++++++++++++++ drivers/of/base.c | 23 ++++++ include/linux/etherdevice.h | 14 ++++ include/linux/nvmem-provider.h | 13 +++- include/linux/of.h | 12 +++ 17 files changed, 260 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/nvmem/nvmem-transformations.yaml create mode 100644 drivers/nvmem/transformations.c -- 2.30.2