[PATCH 00/10] Add barebox TLV infrastructure

Ahmad Fatoum a.fatoum at pengutronix.de
Fri Apr 11 00:40:35 PDT 2025


barebox TLV is a system to store and retrieve a device's (read-only)
meta-data from non-volatile memory.
It is intended to handle information that are usually only set in
the factory - like serial number, MAC-addresses, analog calibration
data, etc.
Data is stored in a tag-length-value format (hence the name) and read
from non-volatile memory during startup.

Unpacked values are fixed up into the devicetree ``chosen``-node
for consumption by the operating system.

This system has already been deployed in the field for a couple of years
now on the LXA TAC. The feature is given a generic name though, because
it's hoped it will be useful to a more general audience.

Nowadays, this could be implemented as a NVMEM layout in Linux.
The benefit of doing it in barebox is that, when signing is added
in the future, we preclude an attacker from showing barebox
and Linux different content.

Nevertheless, NVMEM layout infrastructure in barebox could be
useful, but our NVMEM support needs an overhaul to support layouts,
so fixed-partitions is the only supported binding for now.

Ahmad Fatoum (8):
  net: factor out eth_of_get_fixup_node
  net: export list of registered ethernet addresses
  common: add optional systemd.hostname generation
  common: add barebox TLV support
  commands: add TLV debugging command
  scripts: add bareboxtlv host/target tool
  boards: add decoder for LXA TLV v1 format
  ARM: stm32mp: lxa: enable TLV support for TAC & FairyTux2

Chris Fiege (2):
  scripts: Add Barebox TLV Generator Tooling
  doc: Add User-Documentation for Barebox TLV

 .../bindings/nvmem/barebox,tlv.yaml           |  60 ++++
 Documentation/user/barebox-tlv.rst            |  93 +++++
 Documentation/user/user-manual.rst            |   1 +
 arch/arm/boards/lxa-fairytux2/board.c         |   8 +
 arch/arm/boards/lxa-tac/board.c               |   8 +
 .../dts/stm32mp153c-lxa-fairytux2-gen2.dts    |   1 +
 arch/arm/dts/stm32mp153c-lxa-fairytux2.dtsi   |   1 +
 arch/arm/dts/stm32mp15xc-lxa-tac.dtsi         |   2 +
 arch/arm/mach-stm32mp/Kconfig                 |   2 +
 commands/Kconfig                              |  12 +
 commands/Makefile                             |   1 +
 commands/tlv.c                                |  55 +++
 common/Kconfig                                |  34 ++
 common/Makefile                               |   1 +
 common/boards/Kconfig                         |   5 +
 common/boards/Makefile                        |   1 +
 common/boards/lxa/Makefile                    |   2 +
 common/boards/lxa/factory-data.c              | 132 +++++++
 common/bootm.c                                |   9 +-
 common/tlv/Makefile                           |   4 +
 common/tlv/barebox.c                          | 183 ++++++++++
 common/tlv/bus.c                              | 133 ++++++++
 common/tlv/drv.c                              |  49 +++
 common/tlv/parser.c                           | 211 ++++++++++++
 common/tlv/register.c                         |  94 +++++
 include/net.h                                 |  21 ++
 include/string.h                              |   7 +
 include/tlv/format.h                          |  72 ++++
 include/tlv/tlv.h                             |  99 ++++++
 lib/string.c                                  |  21 ++
 net/eth.c                                     |  40 +--
 scripts/.gitignore                            |   2 +
 scripts/Makefile                              |   2 +
 .../bareboxtlv-generator.py                   | 321 ++++++++++++++++++
 .../bareboxtlv-generator/data-example.yaml    |  12 +
 scripts/bareboxtlv-generator/requirements.txt |   2 +
 .../bareboxtlv-generator/schema-example.yaml  |  48 +++
 scripts/bareboxtlv-target.c                   |   1 +
 scripts/bareboxtlv.c                          | 183 ++++++++++
 scripts/include/asm/unaligned.h               |  21 ++
 scripts/include/linux/build_bug.h             |   8 +
 scripts/include/linux/stringify.h             |  14 +
 test/self/Kconfig                             |   7 +
 test/self/Makefile                            |   1 +
 test/self/tlv.c                               |  89 +++++
 test/self/tlv.dts                             |  27 ++
 46 files changed, 2080 insertions(+), 20 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/nvmem/barebox,tlv.yaml
 create mode 100644 Documentation/user/barebox-tlv.rst
 create mode 100644 commands/tlv.c
 create mode 100644 common/boards/lxa/Makefile
 create mode 100644 common/boards/lxa/factory-data.c
 create mode 100644 common/tlv/Makefile
 create mode 100644 common/tlv/barebox.c
 create mode 100644 common/tlv/bus.c
 create mode 100644 common/tlv/drv.c
 create mode 100644 common/tlv/parser.c
 create mode 100644 common/tlv/register.c
 create mode 100644 include/tlv/format.h
 create mode 100644 include/tlv/tlv.h
 create mode 100755 scripts/bareboxtlv-generator/bareboxtlv-generator.py
 create mode 100644 scripts/bareboxtlv-generator/data-example.yaml
 create mode 100644 scripts/bareboxtlv-generator/requirements.txt
 create mode 100644 scripts/bareboxtlv-generator/schema-example.yaml
 create mode 100644 scripts/bareboxtlv-target.c
 create mode 100644 scripts/bareboxtlv.c
 create mode 100644 scripts/include/asm/unaligned.h
 create mode 100644 scripts/include/linux/build_bug.h
 create mode 100644 scripts/include/linux/stringify.h
 create mode 100644 test/self/tlv.c
 create mode 100644 test/self/tlv.dts

-- 
2.39.5




More information about the barebox mailing list