comment "FASTBOOT"

menuconfig FASTBOOT
	bool "Fastboot support"

if FASTBOOT

config USB_FUNCTION_FASTBOOT
	bool "Enable USB fastboot gadget"
	help
	  This enables the USB part of the fastboot gadget.

config CMD_FASTBOOT
	bool "Enable FASTBOOT command"
	help
	  This enables the command "fastboot" which enables the Android
	  fastboot mode for the platform's USB device. Fastboot is a USB
	  protocol for downloading images, flashing and device control
	  used on Android devices.

	  See doc/README.android-fastboot for more information.

config ANDROID_BOOT_IMAGE
	bool "Enable support for Android Boot Images"
	help
	  This enables support for booting images which use the Android
	  image format header.

if USB_FUNCTION_FASTBOOT

config FASTBOOT_BUF_ADDR
	hex "Define FASTBOOT buffer address"
	help
	  The fastboot protocol requires a large memory buffer for
	  downloads. Define this to the starting RAM address to use for
	  downloaded images.

config FASTBOOT_BUF_SIZE
	hex "Define FASTBOOT buffer size"
	help
	  The fastboot protocol requires a large memory buffer for
	  downloads. This buffer should be as large as possible for a
	  platform. Define this to the size available RAM for fastboot.

config FASTBOOT_USB_DEV
	int "USB controller number"
	default 0
	help
	  Some boards have USB OTG controller other than 0. Define this
	  option so it can be used in compiled environment (e.g. in
	  CONFIG_BOOTCOMMAND).

config FASTBOOT_FLASH
	bool "Enable FASTBOOT FLASH command"
	help
	  The fastboot protocol includes a "flash" command for writing
	  the downloaded image to a non-volatile storage device. Define
	  this to enable the "fastboot flash" command.

config FASTBOOT_FLASH_MMC_DEV
	int "Define FASTBOOT MMC FLASH default device"
	depends on FASTBOOT_FLASH
	help
	  The fastboot "flash" command requires additional information
	  regarding the non-volatile storage device. Define this to
	  the eMMC device that fastboot should use to store the image.

config FASTBOOT_GPT_NAME
	string "Target name for updating GPT"
	depends on FASTBOOT_FLASH
	default "gpt"
	help
	  The fastboot "flash" command supports writing the downloaded
	  image to the Protective MBR and the Primary GUID Partition
	  Table. (Additionally, this downloaded image is post-processed
	  to generate and write the Backup GUID Partition Table.)
	  This occurs when the specified "partition name" on the
	  "fastboot flash" command line matches the value defined here.
	  The default target name for updating GPT is "gpt".

config FASTBOOT_MBR_NAME
	string "Target name for updating MBR"
	depends on FASTBOOT_FLASH
	default "mbr"
	help
	  The fastboot "flash" command allows to write the downloaded image
	  to the Master Boot Record. This occurs when the "partition name"
	  specified on the "fastboot flash" command line matches the value
	  defined here. The default target name for updating MBR is "mbr".

endif # USB_FUNCTION_FASTBOOT

endif # FASTBOOT
