summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorTom Rini <trini@ti.com>2014-12-18 12:37:18 -0500
committerTom Rini <trini@ti.com>2014-12-18 12:37:18 -0500
commit7a7ffedabd29adde9cb6ebe6066256c4cf8b77af (patch)
tree6122c4c1e597e26b0c0a3ae706086cf9c2ba880e /common
parentd8bec60c1b0de7770f9b56ad092ab9be801d99af (diff)
parent0ff7e585df83470139739533bdbf41114f395470 (diff)
Merge branch 'master' of git://git.denx.de/u-boot-usb
Diffstat (limited to 'common')
-rw-r--r--common/cmd_dfu.c6
-rw-r--r--common/cmd_fastboot.c4
-rw-r--r--common/fb_mmc.c26
3 files changed, 30 insertions, 6 deletions
diff --git a/common/cmd_dfu.c b/common/cmd_dfu.c
index 9e020b40be..e975abebc9 100644
--- a/common/cmd_dfu.c
+++ b/common/cmd_dfu.c
@@ -38,10 +38,10 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int controller_index = simple_strtoul(usb_controller, NULL, 0);
board_usb_init(controller_index, USB_INIT_DEVICE);
- dfu_clear_detach();
+ g_dnl_clear_detach();
g_dnl_register("usb_dnl_dfu");
while (1) {
- if (dfu_detach()) {
+ if (g_dnl_detach()) {
/*
* Check if USB bus reset is performed after detach,
* which indicates that -R switch has been passed to
@@ -74,7 +74,7 @@ done:
if (dfu_reset)
run_command("reset", 0);
- dfu_clear_detach();
+ g_dnl_clear_detach();
return ret;
}
diff --git a/common/cmd_fastboot.c b/common/cmd_fastboot.c
index 909616dcb7..b72f4f310d 100644
--- a/common/cmd_fastboot.c
+++ b/common/cmd_fastboot.c
@@ -15,17 +15,21 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
int ret;
+ g_dnl_clear_detach();
ret = g_dnl_register("usb_dnl_fastboot");
if (ret)
return ret;
while (1) {
+ if (g_dnl_detach())
+ break;
if (ctrlc())
break;
usb_gadget_handle_interrupts();
}
g_dnl_unregister();
+ g_dnl_clear_detach();
return CMD_RET_SUCCESS;
}
diff --git a/common/fb_mmc.c b/common/fb_mmc.c
index fb06d8a557..6ea3938d83 100644
--- a/common/fb_mmc.c
+++ b/common/fb_mmc.c
@@ -4,12 +4,17 @@
* SPDX-License-Identifier: GPL-2.0+
*/
+#include <config.h>
#include <common.h>
#include <fb_mmc.h>
#include <part.h>
#include <aboot.h>
#include <sparse_format.h>
+#ifndef CONFIG_FASTBOOT_GPT_NAME
+#define CONFIG_FASTBOOT_GPT_NAME GPT_ENTRY_NAME
+#endif
+
/* The 64 defined bytes plus the '\0' */
#define RESPONSE_LEN (64 + 1)
@@ -62,7 +67,6 @@ static void write_raw_image(block_dev_desc_t *dev_desc, disk_partition_t *info,
void fb_mmc_flash_write(const char *cmd, void *download_buffer,
unsigned int download_bytes, char *response)
{
- int ret;
block_dev_desc_t *dev_desc;
disk_partition_t info;
@@ -76,8 +80,24 @@ void fb_mmc_flash_write(const char *cmd, void *download_buffer,
return;
}
- ret = get_partition_info_efi_by_name(dev_desc, cmd, &info);
- if (ret) {
+ if (strcmp(cmd, CONFIG_FASTBOOT_GPT_NAME) == 0) {
+ printf("%s: updating MBR, Primary and Backup GPT(s)\n",
+ __func__);
+ if (is_valid_gpt_buf(dev_desc, download_buffer)) {
+ printf("%s: invalid GPT - refusing to write to flash\n",
+ __func__);
+ fastboot_fail("invalid GPT partition");
+ return;
+ }
+ if (write_mbr_and_gpt_partitions(dev_desc, download_buffer)) {
+ printf("%s: writing GPT partitions failed\n", __func__);
+ fastboot_fail("writing GPT partitions failed");
+ return;
+ }
+ printf("........ success\n");
+ fastboot_okay("");
+ return;
+ } else if (get_partition_info_efi_by_name(dev_desc, cmd, &info)) {
error("cannot find partition: '%s'\n", cmd);
fastboot_fail("cannot find partition");
return;