mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 01:13:00 +02:00
In a hybrid MBR the conventional layout (used by gdisk and others) is: MBR[0] = 0xEE (GPT protective, covers whole disk) MBR[1..3] = user-selected GPT partitions with legacy type codes genimage currently appends the 0xEE entry after the data partitions, producing the opposite order. This is fine for most platforms, but breaks firmware that detects GPT by inspecting only MBR entry 0: seeing a non-0xEE type there it falls into pure-MBR mode and cannot look up GPT partitions by name. The TF-A partition driver (drivers/partition/partition.c) exhibits exactly this behaviour: load_mbr_header() copies entry[0] and checks type == 0xEE to select between MBR and GPT mode. The MediaTek MT7622 platform (BananaPi BPI-R64) is a concrete example where this matters. On the other hand, Raspberry Pi firmware scans all MBR slots for a bootable FAT32 partition. If slot 0 holds a 0xEE protective entry the firmware switches to GPT detection, looks for an EFI System Partition UUID, and reports "no bootable partitions" when none is found. Add an opt-in hdimage option `gpt-protective-first = true` that places the 0xEE entry at slot 0 and shifts data partitions to slots 1..3. The default (false) preserves the existing genimage behaviour so that platforms like Raspberry Pi continue to work without any changes. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>