summaryrefslogtreecommitdiffstats
path: root/common/fb_mmc.c
diff options
context:
space:
mode:
authorSteve Rae <srae@broadcom.com>2014-12-12 15:51:54 -0800
committerLukasz Majewski <l.majewski@samsung.com>2014-12-18 12:26:06 +0100
commit0ff7e585df83470139739533bdbf41114f395470 (patch)
tree7c50bcefd64e0a4a59d59e26a9f664f59143f9e7 /common/fb_mmc.c
parente1f6b0a02d3bf45737fcb2addf4125cebe0cbcf9 (diff)
downloadblackbird-obmc-uboot-0ff7e585df83470139739533bdbf41114f395470.tar.gz
blackbird-obmc-uboot-0ff7e585df83470139739533bdbf41114f395470.zip
fastboot: handle flash write to GPT partitions
Implement a feature to allow fastboot to write the downloaded image to the space reserved for the Protective MBR and the Primary GUID Partition Table. Additionally, prepare and write the Backup GUID Partition Table. Signed-off-by: Steve Rae <srae@broadcom.com> Tested-by: Lukasz Majewski <l.majewski@samsung.com> [Test HW: Exynos4412 - Trats2]
Diffstat (limited to 'common/fb_mmc.c')
-rw-r--r--common/fb_mmc.c26
1 files changed, 23 insertions, 3 deletions
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;
OpenPOWER on IntegriCloud