summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/f_fastboot.c83
1 files changed, 71 insertions, 12 deletions
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 153d177..964448e 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -9,6 +9,7 @@
* Rob Herring <robh@kernel.org>
*
* Copyright (C) 2015-2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
*
* SPDX-License-Identifier: GPL-2.0+
*/
@@ -46,6 +47,10 @@
#define FASTBOOT_VERSION "0.4"
+#ifdef CONFIG_EFI_PARTITION
+#define ANDROID_GPT_OFFSET 0
+#define ANDROID_GPT_SIZE 0x100000
+#endif
#define FASTBOOT_INTERFACE_CLASS 0xff
#define FASTBOOT_INTERFACE_SUB_CLASS 0x42
#define FASTBOOT_INTERFACE_PROTOCOL 0x03
@@ -165,11 +170,20 @@ static struct usb_gadget_strings *fastboot_strings[] = {
#ifdef CONFIG_FSL_FASTBOOT
+#ifdef CONFIG_EFI_PARTITION
+#define ANDROID_BOOT_PARTITION_MMC 1
+#define ANDROID_RECOVERY_PARTITION_MMC 2
+#define ANDROID_SYSTEM_PARTITION_MMC 3
+#define ANDROID_CACHE_PARTITION_MMC 4
+#define ANDROID_MISC_PARTITION_MMC 6
+#define ANDROID_DATA_PARTITION_MMC 10
+#else
#define ANDROID_BOOT_PARTITION_MMC 1
#define ANDROID_SYSTEM_PARTITION_MMC 5
#define ANDROID_RECOVERY_PARTITION_MMC 2
#define ANDROID_CACHE_PARTITION_MMC 6
#define ANDROID_DATA_PARTITION_MMC 4
+#endif
#define ANDROID_MBR_OFFSET 0
#define ANDROID_MBR_SIZE 0x200
@@ -189,6 +203,24 @@ static struct usb_gadget_strings *fastboot_strings[] = {
/*pentry index internally*/
+#ifdef CONFIG_EFI_PARTITION
+enum {
+ PTN_GPT_INDEX = 0,
+ PTN_BOOTLOADER_INDEX,
+ PTN_BOOT_INDEX,
+ PTN_RECOVERY_INDEX,
+ PTN_SYSTEM_INDEX,
+ PTN_CACHE_INDEX,
+ PTN_DEVICE_INDEX,
+ PTN_MISC_INDEX,
+ PTN_DATAFOOTER_INDEX,
+ PTN_VBMETA_INDEX,
+ PTN_PRESISTDATA_INDEX,
+ PTN_DATA_INDEX,
+ PTN_FBMISC_INDEX,
+ PTN_NUM
+};
+#else
enum {
PTN_MBR_INDEX = 0,
PTN_BOOTLOADER_INDEX,
@@ -196,9 +228,10 @@ enum {
PTN_URAMDISK_INDEX,
PTN_SYSTEM_INDEX,
PTN_RECOVERY_INDEX,
- PTN_DATA_INDEX
+ PTN_DATA_INDEX,
+ PTN_NUM
};
-
+#endif /*CONFIG_EFI_PARTITION*/
static unsigned int download_bytes_unpadded;
static struct cmd_fastboot_interface interface = {
@@ -1145,19 +1178,23 @@ static int _fastboot_parts_add_ptable_entry(int ptable_index,
struct fastboot_ptentry *ptable)
{
disk_partition_t info;
- strcpy(ptable[ptable_index].name, name);
if (part_get_info(dev_desc,
mmc_dos_partition_index, &info)) {
printf("Bad partition index:%d for partition:%s\n",
mmc_dos_partition_index, name);
return -1;
- } else {
- ptable[ptable_index].start = info.start;
- ptable[ptable_index].length = info.size;
- ptable[ptable_index].partition_id = mmc_partition_index;
- ptable[ptable_index].partition_index = mmc_dos_partition_index;
}
+ ptable[ptable_index].start = info.start;
+ ptable[ptable_index].length = info.size;
+ ptable[ptable_index].partition_id = mmc_partition_index;
+ ptable[ptable_index].partition_index = mmc_dos_partition_index;
+#ifdef CONFIG_EFI_PARTITION
+ strcpy(ptable[ptable_index].name, (const char *)info.name);
+#else
+ strcpy(ptable[ptable_index].name, name);
+#endif
+
return 0;
}
@@ -1175,7 +1212,7 @@ static int _fastboot_parts_load_from_ptable(void)
struct mmc *mmc;
struct blk_desc *dev_desc;
- struct fastboot_ptentry ptable[PTN_DATA_INDEX + 1];
+ struct fastboot_ptentry ptable[PTN_NUM + 1];
/* sata case in env */
if (fastboot_devinfo.type == DEV_SATA) {
@@ -1222,12 +1259,20 @@ static int _fastboot_parts_load_from_ptable(void)
}
memset((char *)ptable, 0,
- sizeof(struct fastboot_ptentry) * (PTN_DATA_INDEX + 1));
+ sizeof(struct fastboot_ptentry) * (PTN_NUM + 1));
+#ifdef CONFIG_EFI_PARTITION
+ /* GPT */
+ strcpy(ptable[PTN_GPT_INDEX].name, "gpt");
+ ptable[PTN_GPT_INDEX].start = ANDROID_GPT_OFFSET / dev_desc->blksz;
+ ptable[PTN_GPT_INDEX].length = ANDROID_GPT_SIZE / dev_desc->blksz;
+ ptable[PTN_GPT_INDEX].partition_id = user_partition;
+#else
/* MBR */
strcpy(ptable[PTN_MBR_INDEX].name, "mbr");
ptable[PTN_MBR_INDEX].start = ANDROID_MBR_OFFSET / dev_desc->blksz;
ptable[PTN_MBR_INDEX].length = ANDROID_MBR_SIZE / dev_desc->blksz;
ptable[PTN_MBR_INDEX].partition_id = user_partition;
+#endif
/* Bootloader */
strcpy(ptable[PTN_BOOTLOADER_INDEX].name, FASTBOOT_PARTITION_BOOTLOADER);
ptable[PTN_BOOTLOADER_INDEX].start =
@@ -1236,6 +1281,7 @@ static int _fastboot_parts_load_from_ptable(void)
ANDROID_BOOTLOADER_SIZE / dev_desc->blksz;
ptable[PTN_BOOTLOADER_INDEX].partition_id = boot_partition;
+#ifndef CONFIG_EFI_PARTITION
_fastboot_parts_add_ptable_entry(PTN_KERNEL_INDEX,
ANDROID_BOOT_PARTITION_MMC,
user_partition,
@@ -1252,8 +1298,21 @@ static int _fastboot_parts_load_from_ptable(void)
ANDROID_DATA_PARTITION_MMC,
user_partition,
FASTBOOT_PARTITION_DATA, dev_desc, ptable);
-
- for (i = 0; i <= PTN_DATA_INDEX; i++)
+#else
+ int tbl_idx;
+ int part_idx = 1;
+ int ret;
+ for (tbl_idx = 2; tbl_idx < PTN_NUM; tbl_idx++) {
+ ret = _fastboot_parts_add_ptable_entry(tbl_idx,
+ part_idx++,
+ user_partition,
+ NULL,
+ dev_desc, ptable);
+ if (ret)
+ break;
+ }
+#endif /*CONFIG_EFI_PARTITION*/
+ for (i = 0; i <= PTN_NUM; i++)
fastboot_flash_add_ptn(&ptable[i]);
return 0;