diff options
| -rw-r--r-- | board/samsung/e850-96/e850-96.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/board/samsung/e850-96/e850-96.c b/board/samsung/e850-96/e850-96.c index 3cf98a01b70..3aa4992a36d 100644 --- a/board/samsung/e850-96/e850-96.c +++ b/board/samsung/e850-96/e850-96.c @@ -11,6 +11,7 @@ #include <net.h> #include <usb.h> #include <asm/io.h> +#include "bootdev.h" #include "fw.h" #include "pmic.h" @@ -31,6 +32,10 @@ #define EMMC_DEV_NUM 0 #define EMMC_ESP_PART 1 +/* Firmware size */ +#define LDFW_MAX_SIZE SZ_4M +#define SP_MAX_SIZE SZ_1M + struct efi_fw_image fw_images[] = { { .image_type_id = E850_96_FWBL1_IMAGE_GUID, @@ -127,11 +132,34 @@ static void setup_ethaddr(void) eth_env_set_enetaddr("ethaddr", mac_addr); } +static void load_firmware_usb(void) +{ + int err; + + printf("Loading LDFW firmware (over USB)...\n"); + err = load_image_usb(USB_DN_IMAGE_LDFW, LDFW_NWD_ADDR, LDFW_MAX_SIZE); + if (err) { + printf("ERROR: LDFW loading failed (%d)\n", err); + return; + } + + err = init_ldfw(LDFW_NWD_ADDR); + if (err) { + printf("ERROR: LDFW init failed (%d)\n", err); + /* Do not return, still need to download SP */ + } + + printf("Loading SP firmware (over USB)...\n"); + err = load_image_usb(USB_DN_IMAGE_SP, LDFW_NWD_ADDR, SP_MAX_SIZE); + if (err) + printf("ERROR: SP loading failed (%d)\n", err); +} + /* * Call this in board_late_init() to avoid probing block devices before * efi_init_early(). */ -void load_firmware(void) +static void load_firmware_blk(void) { const char *ifname; ulong dev, part; @@ -175,7 +203,11 @@ int board_late_init(void) { setup_serial(); setup_ethaddr(); - load_firmware(); + + if (bootdev_is_usb()) + load_firmware_usb(); + else + load_firmware_blk(); return 0; } |
