#include <net.h>
#include <usb.h>
#include <asm/io.h>
+#include "bootdev.h"
#include "fw.h"
#include "pmic.h"
#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,
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;
{
setup_serial();
setup_ethaddr();
- load_firmware();
+
+ if (bootdev_is_usb())
+ load_firmware_usb();
+ else
+ load_firmware_blk();
return 0;
}