The USB boot code is too fat and complicated to be included in SPL
(at least for now).  So, it was implemented as a separate project
(what we call USB-loader).
The expected boot sequence is as follows:
  Boot ROM -> USB-loader -> SPL -> U-Boot proper
The USB-loader loads the SPL and U-Boot proper from a USB memory
onto the locked L2 cache.  Then, SPL needs to copy the U-Boot proper
to DRAM, so this mode looks like a NOR boot from the view of SPL.
However, we want to distinguish between (genuine) NOR boot and USB
boot in some places.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
 #include <linux/io.h>
 #include <../drivers/mtd/nand/denali.h>
 
+#include "boot-mode/boot-device.h"
+
 static void nand_denali_wp_disable(void)
 {
 #ifdef CONFIG_NAND_DENALI
 {
        puts("MODE:  ");
 
-       switch (spl_boot_device()) {
+       switch (spl_boot_device_raw()) {
        case BOOT_DEVICE_MMC1:
                printf("eMMC Boot\n");
                setenv("bootmode", "emmcboot");
                printf("NOR Boot\n");
                setenv("bootmode", "norboot");
                break;
+       case BOOT_DEVICE_USB:
+               printf("USB Boot\n");
+               setenv("bootmode", "usbboot");
+               break;
        default:
                printf("Unsupported Boot Mode\n");
                return -1;
 
 void ph1_pro5_boot_mode_show(void);
 void proxstream2_boot_mode_show(void);
 
+u32 spl_boot_device_raw(void);
+
 #endif /* _ASM_BOOT_DEVICE_H_ */
 
 {
        int boot_mode;
 
+       if (readl(SG_PINMON0) & BIT(6))
+               return BOOT_DEVICE_USB;
+
        boot_mode = get_boot_mode_sel();
 
        return boot_device_table[boot_mode].type;
 
 #include "../soc-info.h"
 #include "boot-device.h"
 
-u32 spl_boot_device(void)
+u32 spl_boot_device_raw(void)
 {
        if (boot_is_swapped())
                return BOOT_DEVICE_NOR;
                return BOOT_DEVICE_NONE;
        }
 }
+
+u32 spl_boot_device(void)
+{
+       u32 ret;
+
+       ret = spl_boot_device_raw();
+
+       return ret == BOOT_DEVICE_USB ? BOOT_DEVICE_NOR : ret;
+}