[PATCH 14/14] bloblist: Update documentation and header comment

Julius Werner jwerner at chromium.org
Wed Jul 26 22:55:17 CEST 2023

Here are a couple of other differences I have found between the
bloblist code after applying your patches and the TL specification:

* bloblist seems to explicitly disallow having the same tag more than
once in the list (e.g. see documentation of bloblist_add()), whereas
the TL specification explicitly allows that. You're of course free to
impose this restriction on the way U-Boot uses the spec, but you may
eventually run into compatibility issues if you hardcode that
assumption and one day might ingest a TL from a different writer that
doesn't adhere to it.

* The bloblist_resize() function doesn't preserve alignment
restrictions when relocating other TEs. I think the (only?) safe way
to resize a TE in-place would be to align the distance that following
TEs need to be moved up to (1 << hdr->align_log2), and then insert a
void dummy TE to account for the additional added distance if

* The comment at the top of bloblist.c should be updated to reflect
how alignment and padding works in the TL spec.

* The checksum algorithm seems incorrect. U-Boot's
table_compute_checksum() subtracts bytes, but the TE spec says they
need to be summed up.

* The bloblist_reloc() function must be updated to follow the TL
relocation mechanism (i.e. take hdr->align_log2 into account to make
sure the new position preserves alignment requirements... I would say
see https://github.com/FirmwareHandoff/firmware_handoff/blob/main/source/transfer_list.rst#relocating-a-tl
for details, but I just noticed that we made a mistake there, so
please check the version from
https://github.com/FirmwareHandoff/firmware_handoff/pull/12 for the
corrected algorithm).

More information about the U-Boot mailing list