
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 add 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 SPL. The required
	  partition table types shold be enabled separately. This add a
	  small amount of size to SPL, 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 DISTRO_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 DISTRO_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 DISTRO_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 DISTRO_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

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

endmenu
