]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
disk: add TegraPT support
authorSvyatoslav Ryhel <clamor95@gmail.com>
Wed, 31 Jul 2024 08:22:54 +0000 (11:22 +0300)
committerSvyatoslav Ryhel <clamor95@gmail.com>
Sun, 13 Oct 2024 14:20:26 +0000 (17:20 +0300)
TegraPT is compatible with EFI part but it can't pass Protective MBR check.
Skip this check if CONFIG_TEGRA_PARTITION is enabled, storage uclass is MMC
and devnum is 0. Note, eMMC on supported devices MUST be aliased to mmc0.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
disk/Kconfig
disk/part_efi.c

index ffa835eb354beb75860b14338ef91385f88c3886..b0bd02539eeaed90f98e76c89b7093f82f55cbbc 100644 (file)
@@ -49,6 +49,16 @@ config SPL_MAC_PARTITION
        default y if MAC_PARTITION
        select SPL_PARTITIONS
 
+config TEGRA_PARTITION
+       bool "Enable Nvidia Tegra partition table"
+       select PARTITIONS
+       select EFI_PARTITION
+       help
+         Say Y here if you would like to use U-Boot on a device that
+         is using the Nvidia Tegra partition table and cannot alter it.
+
+         If unsure, say N.
+
 config DOS_PARTITION
        bool "Enable MS Dos partition table"
        default y if BOOT_DEFAULTS
index 580821a6ee9c6a5bd755d6b960574c989d1708e8..12f28aec92c5c792188041e748597c80d552aef1 100644 (file)
@@ -318,6 +318,19 @@ static int part_test_efi(struct blk_desc *desc)
        /* Read legacy MBR from block 0 and validate it */
        if ((blk_dread(desc, 0, 1, (ulong *)legacymbr) != 1)
                || (is_pmbr_valid(legacymbr) != 1)) {
+
+               /*
+                * TegraPT is compatible with EFI part, but it
+                * cannot pass the Protective MBR check. Skip it
+                * if CONFIG_TEGRA_PARTITION is enabled and the
+                * device in question is eMMC.
+                */
+               if (IS_ENABLED(CONFIG_TEGRA_PARTITION))
+                       if (!is_pmbr_valid(legacymbr) &&
+                           desc->uclass_id == UCLASS_MMC &&
+                           !desc->devnum)
+                               return 0;
+
                return -1;
        }
        return 0;