# SPDX-License-Identifier: GPL-2.0-only
# Copyright 2013-2023 The DT-Utils Authors <oss-tools@pengutronix.de>

dt-utils 2023.11.0
==================

A small bugfix release, mainly consisting of the following commit:

* commit b67e96895f52 "libdt: prefer first found disk when looking for block
  devices"
  When using barebox-state on boards with a barbeox-state partition on an eMMC
  device, it could happen that barebox-state tried to find a GPT partition on
  /dev/mmcblkXbootN instead of /dev/mmcblkX, obviously failing to find a
  matching partition there, and quitting without any further action. This commit
  restores the old behaviour of using the first found MMC device (/dev/mmcblkX)
  instead of the last one. Although this is not completely future-proof, it has
  worked for years and serves a good stop-gap solution for now.

A few more housekeeping and maintenance commits:

* commit feca1c1ffdaa "README: provide git format.subjectPrefix line to copy"
* commit 1cd62596dbd7 "meson: align libdt-utils version with autotools'"

This release includes contributions by Ahmad Fatoum, Enrico Jörns, Leonard
Göhrs, and Roland Hieber. Thank you to all contributors!

dt-utils 2023.08.0
==================

This release includes contributions by Ahmad Fatoum, Alexander Shiyan,
Christian Eggers, Marco Felsch, Michael Olbrich, Roland Hieber, Sascha Hauer,
Ulrich Ölmann, Uwe Kleine-König, and Yegor Yefremov.

Possibly breaking changes
-------------------------

(none known)

New features
------------

* commit f80d96b15978 "libdt: add support for barebox,storage-by-uuid" added
  support for specifying barebox-state backend nodes in the device tree using
  the 'barebox,storage-by-uuid' compatible. The similarly-named Barebox driver
  looks for a storage device matching the given UUID, and when found registers a
  new device for it. This makes it possible to use GPT and MBR partitions as
  state backends without re-stating their respective partition tables in the
  device tree.

* commit bfa8e8eab135 "state: automatically find state.dtb in the ESP"
  implemented auto-detection of device trees on the EFI System Partition in
  /boot or /efi (the usual ESP mount points on most Linux distributions).

* barebox-state can now auto-detect state partitions on GPT if they have the
  Partition Type GUID 4778ed65-bf42-45fa-9c5b-287a1dc4aab1, which corresponds to
  a feature merged in Barebox v2023.07.0 (see commits leading up to
  <https://git.pengutronix.de/cgit/barebox/commit/?id=776714d9570253c46635>).
  - commit 2bab30b7d653 "libdt: add of_property_write_strings support"
  - commit c4ea02e5fb6e "libdt: generalize of_find_device_by_uuid for scoped lookup of all UUIDs"
  - commit 7de908382bed "libdt: fix of_get_devicepath looking up sibling if device unavailable"
  - commit 03a6d0146f5a "state: backend: direct: open block device in read-only mode if possible"
  - commit 86233cfe9ba5 "libdt: factor out u64 sysattr parsing into helper"
  - commit c458361777ab "libdt: drop broken if-branch"
  - commit cff3f1c19d78 "libdt: factor out __of_cdev_find helper"
  - commit 7a71beff497e "libdt: use block device partition instead of parent if found"
  - commit 72970a627990 "state: align with barebox use of of_cdev_find"
  - commit 5059165acd2b "libdt: use of_find_device_by_uuid for partuuid lookup"
  - commit b32cb1c15c42 "state: allow lookup of barebox state partition by Type GUID"

* commit 0976c48731ef "state: add option to lock device node" implemented
  locking the device node directly via flock() in the barebox-state tool instead
  of writing a lock file to the /run directory. This helps on systems that don't
  have a world-writeable /run. Currently the behaviour is disabled by default
  and can be enabled by the ./configure --enable-lock-device option and the
  'lock-device' option in meson.

* Meson was added as a build system. The support is currently experimental, but
  the plan is to phase out autotools in the future, but for now the old way of
  building the project will stay in place. See the updated instruction in the
  README for how to build dt-utils and run the new unit tests.
  - commit bc6e5d24916f "Add meson as build system"
  - commit 4e7ad815b856 "meson: options: use defaults of type boolean for boolean options"
  - commit 6dc8b1a948cf "meson: set optimization level to -O2 by default"
  - commit fc97420e830c "Makefile: include meson files in the dist tarball"

* There is now an initial set of unit tests, see the README on how to run them.
  - commit e5c524875a91 "meson: add simple integration test"
  - commit be44af10aa91 "libdt: add CONFIG_TEST_LOOPBACK"
  - commit 69a223619e28 "test: add barebox-state loop block device tests"
  - commit 885bb2feac99 "test: add test case with non-existent /dev/file"

* All files now have machine-readable license and copyright information, and the
  project conforms to the REUSE specification (see <https://reuse.software/>).
  You can build a Software Bill of Materials in SPDX format by running the
  'reuse spdx' command.
  - commit 893c6c9f628f "treewide: add SPDX identifiers to files with GPL-2.0-only license"
  - commit c1880166d1e3 "treewide: add SPDX identifiers to files with GPL-2.0-or-later license"
  - commit af84fa465d69 "treewide: add SPDX identifiers to files with GPL-3.0-or-later license"
  - commit fa56be74c3bd "treewide: add SPDX identifier to file with Zlib license"
  - commit 6c7ccb22ea30 "treewide: add CC0-1.0 SPDX identifiers for trivial files"
  - commit 75b7b2bce1d9 "treewide: add GPL-2.0-only SPDX identifiers to files without license"
  - commit 95d6b5c4c95d "treewide: add trivial copyright headers"
  - commit 18416bd75b83 "DCO: add SPDX license information"
  - commit 681180373d82 "README: mention compatibility with the REUSE specification"

Bug fixes
---------

* commit 81d5a909d690 "configure: pass -fno-strict-aliasing to GCC"
* commit 10743d54b420 "libdt: fix issues of external function without prototype"
* commit 6fd6d7ffff6d "libdt: use memcpy instead of strncpy"
* commit f4f3b62ad229 "barebox-state: fix use after free in error path"

* Bug fixes ported from Barebox:
   - commit 624ef0ec9a83 "state: backend_raw: fix ignoring unpack failures"
   - commit 39d574a4147e "state: backend_storage: deal gracefully with runtime bucket corruption"
   - commit 5944ccf83477 "state: treat state with all-invalid buckets as dirty"
   - commit 2524cbe1a879 "state: propagate failure to fixup enum32 into DT"
   - commit 74d1803dd3b2 "common: xstrdup: don't panic on xstrdup(NULL)"

Refactoring
-----------

* commit 5a9036656149 "libdt: only requires a partname for mtd"

General maintenance and housekeeping
------------------------------------

* commit 1872584786ca "Makefile: add a helpful 'filesums' target"
* commit 50f7f71f81da "treewide: remove references to CREDITS file"
* commit b30a3162f2f9 "update README"
* commit 181479122870 "configure: improve state-backward-compatibility help text"
* commit 89701c0867eb "README: add link to lore mail archive"
* commit 783a1c00de61 "configure: fix state-backward-compatibility help text"
* commit 37a46daa6302 "sizes.h: remove unreferenced file"
* commit db54c5f4be08 "libdt: don't use old-style function definition"
* commit 6d60e2d68c1f "README: fix Git repository URL"
* commit 0b194c865e3f "README: clarify the need for "real names" with the DCO process"
* commit 3ed8bc213a82 "Makefile: include missing files in the dist tarball"

* Maintenance changes ported from Barebox:
  - commit b5ae056f25c5 "state: Remove duplicate incudes"
  - commit 78346955f4a1 "state: remove param member from struct state_string"
  - commit af4951b6f36a "state: remove param member from state_uint32, state_enum32, state_mac"
  - commit a761f9ba04d9 "state: remove unused function"
  - commit fb3452fca971 "state: add SPDX-License-Identifier for files without explicit license"
  - commit 5fb31b446022 "state: fix typos found with codespell"


dt-utils 2021.03.0
==================

This release includes contributions from Ahmad Fatoum, Andrey Smirnov, Enrico
Jorns, Jan Luebbe, Jan Remmet, Jookia, Juergen Borleis, Kim Christensen, Lucas
Stach, Roland Hieber, Sascha Hauer, Stefan Agner, Steffen Trumtrar, Ulrich
Ölmann, Uwe Kleine-König and Xogium. Thanks to all contributors!

Possibly breaking changes
-------------------------

* commit a6ca873a368d "Don't install a pkg-config file for libdt"
  libdt isn't supposed to be installed as a system library as nobody wants to care about things like
  a stable API. Also the generated .pc file was completely bogus as it added "-labc" to the linker
  instead of -ldt-utils.

* commit 2dbca4c3284b "state: keep backward compatibility"
  This changes barebox-state's default behaviour.
  Previous variants of the state variable set did not contain metadata. The read function in the
  'direct' storage backend honors this, but the write function doesn't, which makes an update of the
  state variable set impossible.
  This commit introduces the new compile time option '--enable-state-backward-compatibility' to
  ./configure, which is disabled by default. If this compile time option is enabled, barebox-state
  will keep the storage in a format that can be read by barebox <= v2016.08.0 when writing variables
  into a 'direct' storage backend, or fail if this requirement cannot be guaranteed.

* commit d1e4783c0051 "follow the Developer's Certificate of Origin",
  commit 886f13aa31a6 "Makefile: add ./DCO to the dist tarball"
  (see files README and DCO)

New features
------------

* libdt:
  - commit af85ab844b1d "libdt: support finding devices by partuuid",
    commit 9f3915824bc7 "libdt: support upper-case hexadecimals in value of partuuid property"
    This allows specifying partitions in devicetree that are actually not described in the
    devicetree to allow referencing them, e.g.:
        partitions {
                compatible = "fixed-partitions";
                #address-cells = <1>;
                #size-cells = <1>;
                state_part: state {
                        partuuid = "21367da7-c51f-499f-9aad-e1f366992365";
                };
        };
  - commit 4826dcbce749 "libdt: enumerate amba bus as well"
    Make barebox-state usable on STM32MP1, which probes the SD/MMC host controller over amba, not
    the platform bus as most other ARM systems.

* barebox-state:
  - add new options --quiet, --force, and --version
    . commit 52221e50b0df "barebox-state: complete cmdline options"
    . commit 15786485ab8b "barebox-state: add cmdline option "--version""
  - commit 74cd46affa37 "barebox-state: get devicetree from file"
    Adds an -i/--input argument to barebox-state to allow passing a devicetree as a file instead of
    using it from the system. This can be used for example on systems that do not use device trees
    (such as x86) but where we want to use a dtb blob for describing the state storage and format.
  - commit 0a75604bc61f "barebox-state: have the --set option to avoid writes if possible"
    Previously, barebox-state --set would always dirty the state when successful. Users seeking to
    conserve write cycles thus have to --get the variable in question first to check whether to
    write it. Make life of such users easier by having barebox-state support this out-of-the-box.

* dtblint:
  - commit 38d7af00e6cb "dtblint: check reset-gpio-active-high + reset-gpio for matching polarity"
  - commit 8498644efe82 "dtblint: add support for fsl,imx6dl-iomuxc"
  - commit a75ea34157c5 "dtblint: fsl,iomuxc: improve check for reserved bits"

Bug Fixes
---------

* barebox-state:
  - commit 99918b8f3ad2 "barebox-state: fix usage of multiple state instances"
    This makes concurrent calls to barebox-state with the following syntax possible:
    $ barebox-state --get blue.x &
    $ barebox-state --get yellow.y &
  - commit 634317cc9120 "state: backend_bucket_circular: fix double free()"
  - commit ef7355cccc3a "state: Fix lseek error check in state_backend_bucket_direct_read()"
  - commit d59af7f22ab4 "state: Fix lseek error check in state_backend_bucket_direct_write()"
  - commit f234f3ec9498 "state: Fix lseek error check in state_mtd_peb_read()"
  - commit b85142e1cbd4 "state: Fix lseek error check in state_mtd_peb_write()"
  - commit a1fe3159ca2a "state: check length"
  - commit b548f61a0460 "state: backend_bucket_circular: mark block as bad if mtd_peb_torture() failed"
  - commit fd48fe4efb40 "state: use /run to store lockfile"
    The old location /var/lock is considered legacy, and might no longer exist on all systems.

* dtblint:
  - commit 1ec150f6927f "dtblint-imx-pinmux: fix wrong table entry"
  - commit 218b148b284c "dtblint-imx-pinmux: fix another set of wrong table entries"
  - commit 186ff7702c66 "dtblint-imx-pinmux: fix swmux suggested values"
  - commit 5b58e1fc72e9 "dtblint-imx-pinmux: fix another set of wrong table entries"

Refactoring
-----------

* state: harmonise our code with barebox
  - commit 6ae166207bc8 "common: align declarations of dev_add_param_*() functions with barebox"

* several smaller bugfixes, typo fixes, and cleanup:
  - commit 0cd8a9b06523 "of_get_devicepath: again correct comment"
  - commit 8c3b39c89307 "barebox-state: fix error message"
  - commit a927ee527036 "state: fix typo"
  - commit 9106360a3c85 "barebox-state: remove declaration of __state_uint8_get()"
  - commit e210e3b79be8 "barebox-state: remove unused variables"
  - commit 338b9962e28a "keystore-blob: remove unused variable"
  - commit 949bab33700e "base64: remove unused variable"
  - commit fc86ad03b4dc "base64: remove duplicate ‘const’ declaration specifier"
  - commit 89d033284cb6 "state: fix formatting of "off_t" variables"
  - commit 5588a6c32d54 "state: fix formatting of "uint32_t" variables"
  - commit 4bfd158f068d "remove leftovers from libabc skeleton"
  - commit baee943b2c98 "state: drop unused code and declarations for non-existing functions"
  - commit 20fb10ce5d55 "state: backend_storage: harmonize code with barebox"
  - commit e267c877e2ee "state: harmonize code with barebox"
  - commit 1aeb1e4fdff0 "state: harmonize code with barebox"
  - commit 81c542966f99 "configure: remove build time option '--disable-logging'"
    (which wasn't used anywhere)
  - commit 8874600851ac "configure: remove build time option '--enable-debug'"
    (which wasn't used anywhere)
  - commit 5f1eb84d2364 "configure: update repository URL"


dt-utils 2019.01.0
==================
This release includes contributions from Andrey Smirnov, Antony Pavlov, Daniel Schultz, Enrico
Jorns, Ian Abbott, Juergen Borleis, Ladislav Michl, Lucas Stach, Michael Olbrich, Philipp Zabel,
Roland Hieber, Sam Ravnborg, Sascha Hauer, Ulrich Ölmann, and Uwe Kleine-König. Thanks to all
contributors!

Changes:
* libdt: fix leaks of memory returned by read_file() calls
* libdt: xzalloc: die on failure, like the similar-named kernel function
* libdt: add of_property_write_string() as a convenience function to set a property to a string
* libdt: add dev_set_name() as a convenience function to set a device's name
* state: harmonize our implementation with upstream barebox:
  - Fixes:
    . backend_bucket_circular: fix the case when write size is not a power of 2
    . backend_bucket_circular: fix length check when reading old state format
    . backend_bucket_circular: fix two memory leaks
    . backend_storage: don't refresh the storage needlessly
    . fix error return value when state_new_from_node() cannot resolve a phandle
    . fix use-after-free in state_backend_format_dtb_pack()
    . make finding the backend node more robust by using its reproducible name
    . remove checks for xzalloc() returning NULL, which cannot happen
    . do not complain about missing backend-storage-type, which is irrelevant for mtd devices
  - Potentially breaking changes:
    . make pointing to the backend using a phandle the only supported method
    . state nodes without an alias in the /aliases/ node now lead to an error. barebox already creates
      a missing alias in the fixupped device tree automatically since v2017.06.0.
    . refuse to set the read-only 'dirty' state variable
    . remove unused arguments from state_new_from_node()
  - New features:
    . add new 'init_from_defaults' state variable to allow detection whether a state has been
      initialized from default values, i.e. state_load() failed.
    . add an internal variable to protect existing data in a state bucket and make updates of the
      state implementation more robust
    . add new function state_read_mac() to read a MAC address from state
    . notify when the old state format is detected (this was previously a debugging message)
    . provide an error message when an error occurs in state_convert_node_variable()
    . add more debugging messages
  - port several changes to barebox's fixup functions, but since device trees are already fixupped at
    boot time, this code is never used by dt-utils
  - some further minor refactoring as well fixing some typos and documentation comments

dt-utils 2018.05.1
==================
change project mail to oss-tools@pengutronix.de
fix compilation for glibc version 2.27.9000-36.fc29 and newer ("redefinition of 'struct statx'")
fix compiler warnings on gcc >= 6 about wrong type conversion in messages

dt-utils 2018.05.0
==================

barebox-state: block while waiting for file lock
barebox-state: Fail for unhandled arguments
barebox-state: fix termination of long_options[] to fix segfault
common: Include sys/types.h header to fix build with musl
common: Rename strlcpy to DT_strlcpy to fix build with uClibc
barebox-state: backend_raw: init digest earlier

dt-utils 2017.03.0
==================
barebox-state: Support new OF partition binding with partitions node
barebox-state: Support reading state even when it can't be authenticated (-f)
barebox-state: Fix -EUCLEAN handling: Data is valid when -EUCLEAN is returned
barebox-state: Sync with barebox codebase

dt-utils 2016.12.0
==================
libdt: cache udev scan results
libdt: limit device enumeration
barebox-state: fall back to /state if there is no alias defined
backend_storage: fix missing include
libdt: take the parent to search for block devices

dt-utils 2016.08.0
==================
barebox-state: Fix printing variable on get.
barebox-state: Fix exit code for missing or invalid argument.

dt-utils 2016.07.2
==================
barebox-state: Restore backwards compatibility with older versions and add
blockdevice detection.

dt-utils 2016.07.1
==================
barebox-state: Support to use multiple state frameworks at for the same call.
dtblint: new checks for pinctrl-imx6q and imx*-fec.

dt-utils 2016.07.0
==================
barebox-state: Update to latest mainline state. This also speeds up reading of
state.

dt-utils 2016.05.2
==================
barebox-state: Fix info outputs to be on stderr

dt-utils 2016.05.1
==================
barebox-state: Update bitflip handling

dt-utils 2016.05.0
==================
barebox-state: Update to refactored state code from barebox
barebox-state: Add a global lock

dt-utils 2016.02.0
==================
keystore-blob: Uses system independent path to blob_gen

dt-utils 2015.10.0
==================
Resync with barebox.
Add support for imx6 based caam keystore

dt-utils 2015.06.1
==================
Resync with barebox.
- string support: trailing zero not needed

dt-utils 2015.06.0
==================
Resync with barebox.
- add hmac support
- add uint8 and string support

dt-utils 2015.05.1
==================
Resync with barebox.

dt-utils 2015.05.0
==================
Renamed to dt-utils.

libdt 2014.11.0
===============
Initial release.
