uboot: board: add rootdisk support from openwrt
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
#include <env.h>
|
||||
#include <init.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
#include <mtd.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
@@ -60,3 +62,54 @@ int board_nmbm_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MT7981_BOOT_NOR 0
|
||||
#define MT7981_BOOT_SPIM_NAND 1 /* ToDo: fallback to SD */
|
||||
#define MT7981_BOOT_EMMC 2
|
||||
#define MT7981_BOOT_SNFI_NAND 3 /* ToDo (treated as SD) */
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
const u32 *media_handle_p;
|
||||
int chosen, len, ret;
|
||||
const char *media;
|
||||
u32 media_handle;
|
||||
|
||||
switch ((readl(0x11d006f0) & 0xc0) >> 6) {
|
||||
case MT7981_BOOT_NOR:
|
||||
media = "rootdisk-nor";
|
||||
break
|
||||
;;
|
||||
case MT7981_BOOT_SPIM_NAND:
|
||||
media = "rootdisk-spim-nand";
|
||||
break
|
||||
;;
|
||||
case MT7981_BOOT_EMMC:
|
||||
media = "rootdisk-emmc";
|
||||
break
|
||||
;;
|
||||
case MT7981_BOOT_SNFI_NAND:
|
||||
media = "rootdisk-sd";
|
||||
break
|
||||
;;
|
||||
}
|
||||
|
||||
chosen = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen <= 0)
|
||||
return 0;
|
||||
|
||||
media_handle_p = fdt_getprop(blob, chosen, media, &len);
|
||||
if (media_handle_p <= 0 || len != 4)
|
||||
return 0;
|
||||
|
||||
media_handle = *media_handle_p;
|
||||
ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
|
||||
if (ret) {
|
||||
printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#include <env.h>
|
||||
#include <init.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
#include <mtd.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
@@ -62,3 +64,54 @@ int board_nmbm_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MT7986_BOOT_NOR 0
|
||||
#define MT7986_BOOT_SPIM_NAND 1
|
||||
#define MT7986_BOOT_EMMC 2
|
||||
#define MT7986_BOOT_SNFI_NAND 3
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
const u32 *media_handle_p;
|
||||
int chosen, len, ret;
|
||||
const char *media;
|
||||
u32 media_handle;
|
||||
|
||||
switch ((readl(0x1001f6f0) & 0x300) >> 8) {
|
||||
case MT7986_BOOT_NOR:
|
||||
media = "rootdisk-nor";
|
||||
break
|
||||
;;
|
||||
case MT7986_BOOT_SPIM_NAND:
|
||||
media = "rootdisk-spim-nand";
|
||||
break
|
||||
;;
|
||||
case MT7986_BOOT_EMMC:
|
||||
media = "rootdisk-emmc";
|
||||
break
|
||||
;;
|
||||
case MT7986_BOOT_SNFI_NAND:
|
||||
media = "rootdisk-sd";
|
||||
break
|
||||
;;
|
||||
}
|
||||
|
||||
chosen = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen <= 0)
|
||||
return 0;
|
||||
|
||||
media_handle_p = fdt_getprop(blob, chosen, media, &len);
|
||||
if (media_handle_p <= 0 || len != 4)
|
||||
return 0;
|
||||
|
||||
media_handle = *media_handle_p;
|
||||
ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
|
||||
if (ret) {
|
||||
printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#include <env.h>
|
||||
#include <init.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
#include <mtd.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
@@ -60,3 +62,54 @@ int board_nmbm_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MT7988_BOOT_NOR 0
|
||||
#define MT7988_BOOT_SPIM_NAND 1
|
||||
#define MT7988_BOOT_EMMC 2
|
||||
#define MT7988_BOOT_SNFI_NAND 3
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
const u32 *media_handle_p;
|
||||
int chosen, len, ret;
|
||||
const char *media;
|
||||
u32 media_handle;
|
||||
|
||||
switch ((readl(0x1001f6f0) & 0xc00) >> 10) {
|
||||
case MT7988_BOOT_NOR:
|
||||
media = "rootdisk-nor";
|
||||
break
|
||||
;;
|
||||
case MT7988_BOOT_SPIM_NAND:
|
||||
media = "rootdisk-spim-nand";
|
||||
break
|
||||
;;
|
||||
case MT7988_BOOT_EMMC:
|
||||
media = "rootdisk-emmc";
|
||||
break
|
||||
;;
|
||||
case MT7988_BOOT_SNFI_NAND:
|
||||
media = "rootdisk-sd";
|
||||
break
|
||||
;;
|
||||
}
|
||||
|
||||
chosen = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen <= 0)
|
||||
return 0;
|
||||
|
||||
media_handle_p = fdt_getprop(blob, chosen, media, &len);
|
||||
if (media_handle_p <= 0 || len != 4)
|
||||
return 0;
|
||||
|
||||
media_handle = *media_handle_p;
|
||||
ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
|
||||
if (ret) {
|
||||
printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,61 @@
|
||||
* Author: Sam Shih <sam.shih@mediatek.com>
|
||||
*/
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MT7981_BOOT_NOR 0
|
||||
#define MT7981_BOOT_SPIM_NAND 1 /* ToDo: fallback to SD */
|
||||
#define MT7981_BOOT_EMMC 2
|
||||
#define MT7981_BOOT_SNFI_NAND 3 /* ToDo (treated as SD) */
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
const u32 *media_handle_p;
|
||||
int chosen, len, ret;
|
||||
const char *media;
|
||||
u32 media_handle;
|
||||
|
||||
switch ((readl(0x11d006f0) & 0xc0) >> 6) {
|
||||
case MT7981_BOOT_NOR:
|
||||
media = "rootdisk-nor";
|
||||
break
|
||||
;;
|
||||
case MT7981_BOOT_SPIM_NAND:
|
||||
media = "rootdisk-spim-nand";
|
||||
break
|
||||
;;
|
||||
case MT7981_BOOT_EMMC:
|
||||
media = "rootdisk-emmc";
|
||||
break
|
||||
;;
|
||||
case MT7981_BOOT_SNFI_NAND:
|
||||
media = "rootdisk-sd";
|
||||
break
|
||||
;;
|
||||
}
|
||||
|
||||
chosen = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen <= 0)
|
||||
return 0;
|
||||
|
||||
media_handle_p = fdt_getprop(blob, chosen, media, &len);
|
||||
if (media_handle_p <= 0 || len != 4)
|
||||
return 0;
|
||||
|
||||
media_handle = *media_handle_p;
|
||||
ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
|
||||
if (ret) {
|
||||
printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,61 @@
|
||||
* Author: Sam Shih <sam.shih@mediatek.com>
|
||||
*/
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MT7986_BOOT_NOR 0
|
||||
#define MT7986_BOOT_SPIM_NAND 1
|
||||
#define MT7986_BOOT_EMMC 2
|
||||
#define MT7986_BOOT_SNFI_NAND 3
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
const u32 *media_handle_p;
|
||||
int chosen, len, ret;
|
||||
const char *media;
|
||||
u32 media_handle;
|
||||
|
||||
switch ((readl(0x1001f6f0) & 0x300) >> 8) {
|
||||
case MT7986_BOOT_NOR:
|
||||
media = "rootdisk-nor";
|
||||
break
|
||||
;;
|
||||
case MT7986_BOOT_SPIM_NAND:
|
||||
media = "rootdisk-spim-nand";
|
||||
break
|
||||
;;
|
||||
case MT7986_BOOT_EMMC:
|
||||
media = "rootdisk-emmc";
|
||||
break
|
||||
;;
|
||||
case MT7986_BOOT_SNFI_NAND:
|
||||
media = "rootdisk-sd";
|
||||
break
|
||||
;;
|
||||
}
|
||||
|
||||
chosen = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen <= 0)
|
||||
return 0;
|
||||
|
||||
media_handle_p = fdt_getprop(blob, chosen, media, &len);
|
||||
if (media_handle_p <= 0 || len != 4)
|
||||
return 0;
|
||||
|
||||
media_handle = *media_handle_p;
|
||||
ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
|
||||
if (ret) {
|
||||
printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,61 @@
|
||||
* Author: Sam Shih <sam.shih@mediatek.com>
|
||||
*/
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <linux/libfdt.h>
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MT7988_BOOT_NOR 0
|
||||
#define MT7988_BOOT_SPIM_NAND 1
|
||||
#define MT7988_BOOT_EMMC 2
|
||||
#define MT7988_BOOT_SNFI_NAND 3
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
const u32 *media_handle_p;
|
||||
int chosen, len, ret;
|
||||
const char *media;
|
||||
u32 media_handle;
|
||||
|
||||
switch ((readl(0x1001f6f0) & 0xc00) >> 10) {
|
||||
case MT7988_BOOT_NOR:
|
||||
media = "rootdisk-nor";
|
||||
break
|
||||
;;
|
||||
case MT7988_BOOT_SPIM_NAND:
|
||||
media = "rootdisk-spim-nand";
|
||||
break
|
||||
;;
|
||||
case MT7988_BOOT_EMMC:
|
||||
media = "rootdisk-emmc";
|
||||
break
|
||||
;;
|
||||
case MT7988_BOOT_SNFI_NAND:
|
||||
media = "rootdisk-sd";
|
||||
break
|
||||
;;
|
||||
}
|
||||
|
||||
chosen = fdt_path_offset(blob, "/chosen");
|
||||
if (chosen <= 0)
|
||||
return 0;
|
||||
|
||||
media_handle_p = fdt_getprop(blob, chosen, media, &len);
|
||||
if (media_handle_p <= 0 || len != 4)
|
||||
return 0;
|
||||
|
||||
media_handle = *media_handle_p;
|
||||
ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
|
||||
if (ret) {
|
||||
printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
|
||||
return ret;
|
||||
}
|
||||
|
||||
printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user