mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-04-09 07:51:31 +00:00
ARM: uniphier: support USB boot mode for ProXstream2 / PH1-LD6b SoC
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>
This commit is contained in:
parent
a89be270e7
commit
fec4816387
4 changed files with 22 additions and 2 deletions
arch/arm/mach-uniphier
|
@ -11,6 +11,8 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <../drivers/mtd/nand/denali.h>
|
#include <../drivers/mtd/nand/denali.h>
|
||||||
|
|
||||||
|
#include "boot-mode/boot-device.h"
|
||||||
|
|
||||||
static void nand_denali_wp_disable(void)
|
static void nand_denali_wp_disable(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_NAND_DENALI
|
#ifdef CONFIG_NAND_DENALI
|
||||||
|
@ -62,7 +64,7 @@ int board_late_init(void)
|
||||||
{
|
{
|
||||||
puts("MODE: ");
|
puts("MODE: ");
|
||||||
|
|
||||||
switch (spl_boot_device()) {
|
switch (spl_boot_device_raw()) {
|
||||||
case BOOT_DEVICE_MMC1:
|
case BOOT_DEVICE_MMC1:
|
||||||
printf("eMMC Boot\n");
|
printf("eMMC Boot\n");
|
||||||
setenv("bootmode", "emmcboot");
|
setenv("bootmode", "emmcboot");
|
||||||
|
@ -76,6 +78,10 @@ int board_late_init(void)
|
||||||
printf("NOR Boot\n");
|
printf("NOR Boot\n");
|
||||||
setenv("bootmode", "norboot");
|
setenv("bootmode", "norboot");
|
||||||
break;
|
break;
|
||||||
|
case BOOT_DEVICE_USB:
|
||||||
|
printf("USB Boot\n");
|
||||||
|
setenv("bootmode", "usbboot");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Unsupported Boot Mode\n");
|
printf("Unsupported Boot Mode\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -22,4 +22,6 @@ void ph1_ld4_boot_mode_show(void);
|
||||||
void ph1_pro5_boot_mode_show(void);
|
void ph1_pro5_boot_mode_show(void);
|
||||||
void proxstream2_boot_mode_show(void);
|
void proxstream2_boot_mode_show(void);
|
||||||
|
|
||||||
|
u32 spl_boot_device_raw(void);
|
||||||
|
|
||||||
#endif /* _ASM_BOOT_DEVICE_H_ */
|
#endif /* _ASM_BOOT_DEVICE_H_ */
|
||||||
|
|
|
@ -55,6 +55,9 @@ u32 proxstream2_boot_device(void)
|
||||||
{
|
{
|
||||||
int boot_mode;
|
int boot_mode;
|
||||||
|
|
||||||
|
if (readl(SG_PINMON0) & BIT(6))
|
||||||
|
return BOOT_DEVICE_USB;
|
||||||
|
|
||||||
boot_mode = get_boot_mode_sel();
|
boot_mode = get_boot_mode_sel();
|
||||||
|
|
||||||
return boot_device_table[boot_mode].type;
|
return boot_device_table[boot_mode].type;
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include "../soc-info.h"
|
#include "../soc-info.h"
|
||||||
#include "boot-device.h"
|
#include "boot-device.h"
|
||||||
|
|
||||||
u32 spl_boot_device(void)
|
u32 spl_boot_device_raw(void)
|
||||||
{
|
{
|
||||||
if (boot_is_swapped())
|
if (boot_is_swapped())
|
||||||
return BOOT_DEVICE_NOR;
|
return BOOT_DEVICE_NOR;
|
||||||
|
@ -43,3 +43,12 @@ u32 spl_boot_device(void)
|
||||||
return BOOT_DEVICE_NONE;
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue