
menu "Partition Types"

config PARTITIONS
	bool
	help
	  Partition Labels (disklabels) Supported:
	  Zero or more of the following:
	  - CONFIG_MAC_PARTITION   Apple's MacOS partition table.
	  - CONFIG_DOS_PARTITION   MS Dos partition table, traditional on the
	                           Intel architecture, USB sticks, etc.
	  - CONFIG_ISO_PARTITION   ISO partition table, used on CDROM etc.
	  - CONFIG_EFI_PARTITION   GPT partition table, common when EFI is the
	                           bootloader.  Note 2TB partition limit; see
	                           disk/part_efi.c
	  - CONFIG_MTD_PARTITIONS  Memory Technology Device partition table.
	  If IDE or SCSI support is enabled (CONFIG_CMD_IDE or CONFIG_SCSI)
	  you must configure support for at least one non-MTD partition type
	  as well.

config SPL_PARTITIONS
	bool
	select SPL_SPRINTF
	select SPL_STRTO
	help
	  Enable this for base partition support in SPL. The required
	  partition table types shold be enabled separately. This adds a
	  small amount of size to SPL, typically 500 bytes.

config TPL_PARTITIONS
	bool
	select TPL_SPRINTF
	select TPL_STRTO
	help
	  Enable this for base partition support in TPL. The required
	  partition table types shold be enabled separately. This adds a
	  small amount of size to TPL, typically 500 bytes.

config MAC_PARTITION
	bool "Enable Apple's MacOS partition table"
	select PARTITIONS
	help
	  Say Y here if you would like to use device under U-Boot which
	  were partitioned on a Macintosh.

config SPL_MAC_PARTITION
	bool "Enable Apple's MacOS partition table for SPL"
	depends on SPL
	default y if MAC_PARTITION
	select SPL_PARTITIONS

config DOS_PARTITION
	bool "Enable MS Dos partition table"
	default y if BOOT_DEFAULTS
	default y if x86 || CMD_FAT || USB_STORAGE
	select PARTITIONS
	help
	  traditional on the Intel architecture, USB sticks, etc.

config SPL_DOS_PARTITION
	bool "Enable MS Dos partition table for SPL"
	depends on SPL
	default n if ARCH_MVEBU
	default n if ARCH_SUNXI
	default y if DOS_PARTITION
	select SPL_PARTITIONS

config ISO_PARTITION
	bool "Enable ISO partition table"
	default y if BOOT_DEFAULTS
	default y if MIPS || ARCH_TEGRA
	select PARTITIONS

config SPL_ISO_PARTITION
	bool "Enable ISO partition table for SPL"
	depends on SPL
	select SPL_PARTITIONS

config AMIGA_PARTITION
	bool "Enable AMIGA partition table"
	select PARTITIONS
	help
	  Say Y here if you would like to use device under U-Boot which
	  were partitioned under AmigaOS.

config SPL_AMIGA_PARTITION
	bool "Enable AMIGA partition table for SPL"
	depends on SPL
	default y if AMIGA_PARTITION
	select SPL_PARTITIONS

config EFI_PARTITION
	bool "Enable EFI GPT partition table"
	default y if BOOT_DEFAULTS
	default y if ARCH_TEGRA
	select PARTITIONS
	select LIB_UUID
	help
	  Say Y here if you would like to use device under U-Boot which
	  were partitioned using EFI GPT.
	  common when EFI is the bootloader.  Note 2TB partition limit;
	  see disk/part_efi.c

config EFI_PARTITION_ENTRIES_NUMBERS
	int "Number of the EFI partition entries"
	depends on EFI_PARTITION
	default 56 if ARCH_SUNXI
	default 128
	help
	  Specify the number of partition entries in the GPT. This is
	  meant to allow less than the standard specifies for devices
	  that might need to place their first-stage bootloader in the
	  middle of a regular GPT.

	  If unsure, leave at 128 entries, which is the standard
	  number.

config EFI_PARTITION_ENTRIES_OFF
	int "Offset (in bytes) of the EFI partition entries"
	depends on EFI_PARTITION
	default 0
	help
	  Specify an earliest location (in bytes) where the partition
	  entries may be located. This is meant to allow "punching a
	  hole into a device" to create a gap for an SPL, its payload
	  and the U-Boot environment.

	  If unsure, leave at 0 (which will locate the partition
	  entries at the first possible LBA following the GPT header).

config SPL_EFI_PARTITION
	bool "Enable EFI GPT partition table for SPL"
	depends on  SPL
	default n if ARCH_MVEBU
	default n if ARCH_SUNXI
	default y if EFI_PARTITION
	select SPL_PARTITIONS

config PARTITION_UUIDS
	bool "Enable support of UUID for partition"
	depends on PARTITIONS
	default y if BOOT_DEFAULTS
	default y if EFI_PARTITION
	select LIB_UUID
	help
	  Activate the configuration of UUID for partition

config SPL_PARTITION_UUIDS
	bool "Enable support of UUID for partition in SPL"
	depends on SPL_PARTITIONS
	default y if SPL_EFI_PARTITION
	select SPL_LIB_UUID

config PARTITION_TYPE_GUID
	bool "Enable support of GUID for partition type"
	depends on EFI_PARTITION
	help
	  Activate the configuration of GUID type
	  for EFI partition

config SPL_PARTITION_TYPE_GUID
	bool "Enable support of GUID for partition type (SPL)"
	depends on SPL_EFI_PARTITION
	help
	  Activate the configuration of GUID type
	  for EFI partition

endmenu
