protos/limine: Measure device tree blob in DTB feature
diff --git a/USAGE.md b/USAGE.md
index 1e643a85..70445ccc 100644
--- a/USAGE.md
+++ b/USAGE.md
@@ -58,9 +58,9 @@ artifacts it loads. The allocation matches the systemd-boot convention:
* **PCR 8** receives, in order, the on-disk `limine.conf` bytes (before any
in-memory cleanup), and the kernel command line of the booted entry.
* **PCR 9** receives, in load order, the kernel image as read from disk, each
- module/initrd in the order they appear in the config, and, when booting
- Linux on aarch64/riscv/loongarch, the device tree blob as loaded (taken
- from `dtb_path`/`global_dtb` if set, otherwise from the firmware's
+ module/initrd in the order they appear in the config, and, when the booted
+ protocol consumes a device tree blob, the DTB as loaded (taken from
+ `dtb_path`/`global_dtb` if set, otherwise from the firmware's
`EFI_DTB_TABLE_GUID` table) before Limine's `/chosen` and memory-node
fixups.
diff --git a/common/protos/limine.c b/common/protos/limine.c
index ea07f461..b1a6b212 100644
--- a/common/protos/limine.c
+++ b/common/protos/limine.c
@@ -1183,6 +1183,13 @@ FEAT_START
void *dtb = get_device_tree_blob(config, 0);
if (dtb) {
+#if defined (UEFI)
+ // Measure the device tree as loaded, before applying our memory-node
+ // fixups below, so the resulting PCR is stable across boots.
+ tpm_measure(TPM_PCR_LOADED_IMAGES, TPM_EV_IPL,
+ dtb, fdt_totalsize(dtb), "Limine DTB");
+#endif
+
// Delete all /memory@... nodes.
// The executable must use the given UEFI memory map instead.
while (true) {
