Browse Source

Merge branch 'CR_6370_nvme_sd_boot_samin.guo' into 'vf2-devel'

CR6370: riscv: starfive: vf2: Optimize boot logic(sd/nvme)

See merge request sbc/u-boot!61
andy.hu 9 months ago
parent
commit
7f96b15e26
2 changed files with 119 additions and 109 deletions
  1. 3 3
      configs/starfive_visionfive2_defconfig
  2. 116 106
      include/configs/starfive-visionfive2.h

+ 3 - 3
configs/starfive_visionfive2_defconfig

@@ -29,10 +29,10 @@ CONFIG_SPI_BOOT=y
 CONFIG_USE_BOOTARGS=y
 CONFIG_BOOTARGS="console=tty1 console=ttyS0,115200  debug rootwait  earlycon=sbi"
 CONFIG_USE_BOOTCOMMAND=y
-CONFIG_BOOTCOMMAND="run load_vf2_env;run importbootenv;run boot2; run scan_boot_dev; run load_distro_uenv;run distro_bootcmd"
+CONFIG_BOOTCOMMAND="run sdk_boot_env; run distro_boot_env"
 CONFIG_USE_PREBOOT=y
-CONFIG_PREBOOT="run chipa_set_uboot;run mmcbootenv"
-CONFIG_DEFAULT_FDT_FILE="starfive/starfive_visionfive2.dtb"
+CONFIG_PREBOOT="run chipa_set_uboot;"
+CONFIG_DEFAULT_FDT_FILE="starfive/jh7110-visionfive-v2.dtb"
 CONFIG_LOG_MAX_LEVEL=4
 CONFIG_SPL_LOG=y
 CONFIG_DISPLAY_CPUINFO=y

+ 116 - 106
include/configs/starfive-visionfive2.h

@@ -164,56 +164,6 @@
 		"run cma_ddr8g_set;"				\
 	"fi; \0 "
 
-
-#define VF2_DISTRO_BOOTENV \
-	"fatbootpart=1:3\0"	\
-	"bootdev=mmc\0" \
-	"scan_boot_dev="                                        	\
-	"if test ${bootmode} = flash; then "                    	\
-		"if pci enum; then "                            	\
-			"nvme scan; "                           	\
-			"echo pci enum ...;"                    	\
-		"fi; "                                          	\
-		"if nvme dev; then "                            	\
-			"setenv fatbootpart ${devnvme}:${nvmepart};" 	\
-			"setenv devnum ${devnvme};" 			\
-			"setenv bootdev nvme;"   			\
-		"else "                                         	\
-			"if mmc dev ${devnum}; then "                   \
-				"echo found device ${devnum};"          \
-			"else "                                         \
-				"setenv devnum 0;"                      \
-				"mmc dev 0;"                            \
-			"fi; "                                          \
-		"fi; "                                                  \
-	"fi; \0"							\
-	"load_distro_uenv="						\
-	"fatload ${bootdev} ${devnum}:3 ${loadaddr} /${bootenv}; " \
-	"setenv fatbootpart ${devnum}:3; " \
-	"env import ${loadaddr} 200; \0" \
-	"fdt_loaddtb="	\
-	"fatload ${bootdev} ${fatbootpart} ${fdt_addr_r} /dtbs/${fdtfile}; fdt addr ${fdt_addr_r}; \0" \
-	"fdt_sizecheck="	\
-	"fatsize ${bootdev} ${fatbootpart} /dtbs/${fdtfile}; \0"	\
-	"set_fdt_distro="	\
-	"if test ${chip_vision} = A; then " \
-		"if test ${memory_size} = 200000000; then " \
-			"run chipa_gmac_set;" \
-			"run visionfive2_mem_set;" \
-			"fatwrite ${bootdev} ${fatbootpart} ${fdt_addr_r} /dtbs/${fdtfile} ${filesize};" \
-		"else " \
-			"run chipa_gmac_set;" \
-			"run visionfive2_mem_set;"	\
-			"fatwrite ${bootdev} ${fatbootpart} ${fdt_addr_r} /dtbs/${fdtfile} ${filesize};"	\
-		"fi;" \
-	"else "	\
-                "run visionfive2_mem_set;" \
-		"run cpu_vol_set;" \
-                "fatwrite ${bootdev} ${fatbootpart} ${fdt_addr_r} /dtbs/${fdtfile} ${filesize};" \
-	"fi; \0"	\
-	"bootcmd_distro=" 	\
-	"run fdt_loaddtb; run fdt_sizecheck; run set_fdt_distro; sysboot ${bootdev} ${fatbootpart} fat ${scriptaddr} /${boot_syslinux_conf}; \0"	\
-
 #define PARTS_DEFAULT							\
 	"name=loader1,start=17K,size=1M,type=${type_guid_gpt_loader1};" \
 	"name=loader2,size=4MB,type=${type_guid_gpt_loader2};"		\
@@ -248,63 +198,124 @@
 	"run visionfive2_mem_set;"		\
 	"run chipa_set;\0"
 
-#define CHIPA_SET_FORCE	\
-	"chipa_set_uboot_force="		\
-	"fdt addr ${uboot_fdt_addr};"		\
-	"run chipa_gmac_set; \0"		\
-	"chipa_set_linux_force="		\
-	"fdt addr ${fdt_addr_r};"		\
-	"run visionfive2_mem_set;"		\
-	"run chipa_gmac_set; \0"		\
-
-#define VISIONFIVE2_BOOTENV_NVME	\
-	"nvmepart=3\0"			\
-	"devnvme=0\0"			\
-	"nvme_env=vf2_nvme_uEnv.txt\0"	\
-
-#define VISIONFIVE2_BOOTENV		\
+#define VF2_SDK_BOOTENV			\
 	"bootenv=uEnv.txt\0"		\
-	"testenv=vf2_uEnv.txt\0"	\
+	"bootenv_sdk=vf2_uEnv.txt\0"	\
+	"boot_devs=mmc nvme\0"		\
+	"emmc_devnum=0\0" 		\
+	"sd_devnum=1\0"			\
+	"mmc_devnum_l=1 0\0"		\
+	"nvme_devnum_l=0 0\0"
+
+#define JH7110_SDK_BOOTENV		\
 	"bootdir=/boot\0"		\
-	"mmcpart=3\0"			\
-	"load_vf2_env=fatload mmc ${bootpart} ${loadaddr} ${testenv}\0"	\
-	"loadbootenv=fatload mmc ${bootpart} ${loadaddr} ${bootenv}\0"	\
-	"ext4bootenv="			\
-		"ext4load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootenv}\0"\
-	"importbootenv="		\
-		"echo Importing environment from ${devnum}/${devnvme} ...; "\
-		"env import -t ${loadaddr} ${filesize}\0"	\
-	"scan_mmc_dev="						\
-	"if test ${bootmode} = flash; then "			\
-		"if pci enum; then "				\
-			"nvme scan; "				\
-			"echo pci enum ...;"			\
+	"bootpart=3\0"			\
+	"rootpart=4\0"			\
+	"load_sdk_uenv="		\
+		"fatload ${bootdev} ${devnum}:${bootpart} ${loadaddr} ${bootenv_sdk};"	\
+		"env import -t ${loadaddr} ${filesize}; \0"				\
+	"mmc_test_and_boot="				\
+		"if mmc dev ${devnum}; then "	\
+			"echo Try booting from MMC${devnum} ...; "	\
+			"setenv sdev_blk mmcblk${devnum}p${rootpart};"	\
+			"run load_sdk_uenv; run boot2;"	\
+		"fi;\0"							\
+	"bootenv_mmc="					\
+		"setenv bootdev mmc;"			\
+		"if test ${bootmode} = flash; then "	\
+			"for mmc_devnum in ${mmc_devnum_l}; do " \
+				"setenv devnum ${mmc_devnum}; " \
+				"run mmc_test_and_boot;"	\
+			"done;"					\
 		"fi; "						\
-		"if nvme dev; then "				\
-			"setenv btpart ${devnvme}:${nvmepart};" \
-			"setenv load_vf2_env fatload nvme ${btpart} ${loadaddr} ${nvme_env};"	\
-		"else "						\
-			"if mmc dev ${devnum}; then "			\
-				"echo found device ${devnum};"		\
-			"else "						\
-				"setenv devnum 0;"			\
-				"mmc dev 0;"				\
-			"fi; "						\
-			"if mmc rescan; then " 				\
-				"run loadbootenv && run importbootenv; "\
-				"run ext4bootenv && run importbootenv; "\
-				"if test -n $uenvcmd; then "		\
-					"echo Running uenvcmd ...; "	\
-					"run uenvcmd; "			\
-				"fi; "					\
-			"fi; "						\
-		"fi; "							\
-	"fi; "								\
-	"echo bootmode ${bootmode} device ${devnum}/${devnvme};\0"	\
-	"mmcbootenv=run scan_mmc_dev; "				\
-	"setenv bootpart ${devnum}:${mmcpart};\0" 		\
+		"if test ${bootmode} = sd; then "	\
+			"setenv devnum ${sd_devnum};" 	\
+			"run mmc_test_and_boot;"	\
+		"fi; " 					\
+		"if test ${bootmode} = emmc; then "	\
+			"setenv devnum  ${emmc_devnum};"\
+			"run mmc_test_and_boot;"	\
+		"fi; \0"				\
+	"bootenv_nvme="					\
+		"if test ${bootmode} = flash; then "	\
+			"for nvme_devnum in ${nvme_devnum_l}; do " \
+				"setenv devnum ${nvme_devnum};" \
+				"if pci enum; then "		\
+					"nvme scan; "		\
+				"fi; "				\
+				"if nvme dev ${devnum}; then "	\
+					"echo Try booting from NVME${devnum} ...; "	\
+					"setenv bootdev nvme;"	\
+					"setenv sdev_blk nvme${devnum}n1p${rootpart};"	\
+					"run load_sdk_uenv; run boot2;"	\
+				"fi; "				\
+			"done; "				\
+		"fi; \0"					\
+	"sdk_boot_env="			\
+		"for bootdev_s in ${boot_devs}; do "	\
+		"run bootenv_${bootdev_s}; "		\
+		"done;\0"				\
 	"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0"
 
+#define JH7110_DISTRO_BOOTENV	\
+	"bootdir=/boot\0"	\
+	"bootpart=3\0"		\
+	"rootpart=4\0"		\
+	"load_distro_uenv="						\
+		"fatload ${bootdev} ${devnum}:${bootpart} ${loadaddr} /${bootenv}; " \
+		"env import ${loadaddr} ${filesize}; \0" \
+	"fdt_loaddtb="		\
+		"fatload ${bootdev} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile}; fdt addr ${fdt_addr_r}; \0" \
+	"fdt_sizecheck="	\
+		"fatsize ${bootdev} ${devnum}:${bootpart} /dtbs/${fdtfile}; \0" \
+	"set_fdt_distro="	\
+		"run chipa_set_linux; run cpu_vol_set;" \
+		"fatwrite ${bootdev} ${devnum}:${bootpart} ${fdt_addr_r} /dtbs/${fdtfile} ${filesize}; \0" \
+	"bootcmd_distro="	\
+		"run load_distro_uenv; " \
+		"run fdt_loaddtb; run fdt_sizecheck; run set_fdt_distro; "	\
+		"sysboot ${bootdev} ${devnum}:${bootpart} fat ${scriptaddr} /${boot_syslinux_conf}; \0" \
+	"distro_mmc_test_and_boot="					\
+		"if mmc dev ${devnum}; then "				\
+			"echo Try booting from MMC${devnum} ...; "	\
+			"run bootcmd_distro;"				\
+		"fi;\0" 						\
+	"distro_bootenv_mmc="					\
+		"setenv bootdev mmc;"			\
+		"if test ${bootmode} = flash; then "	\
+			"for mmc_devnum in ${mmc_devnum_l}; do "\
+				"setenv devnum ${mmc_devnum}; " \
+				"run distro_mmc_test_and_boot;" \
+			"done;" 				\
+		"fi; "						\
+		"if test ${bootmode} = sd; then "	\
+			"setenv devnum ${sd_devnum};"	\
+			"run distro_mmc_test_and_boot;" \
+		"fi; "					\
+		"if test ${bootmode} = emmc; then "	\
+			"setenv devnum	${emmc_devnum};"\
+			"run distro_mmc_test_and_boot;" \
+		"fi; \0"				\
+	"distro_bootenv_nvme="				\
+		"if test ${bootmode} = flash; then "	\
+			"for nvme_devnum in ${nvme_devnum_l}; do " \
+				"setenv devnum ${nvme_devnum};" \
+				"if pci enum; then "		\
+					"nvme scan; "		\
+				"fi; "				\
+				"if nvme dev ${devnum}; then "	\
+					"echo Try booting from NVME${devnum} ...; "	\
+					"setenv bootdev nvme;"	\
+					"run bootcmd_distro; "	\
+				"fi; "				\
+			"done; "				\
+		"fi; \0"					\
+	"distro_boot_env="		\
+		"echo Tring booting distro ...;"		\
+		"for bootdev_s in ${boot_devs}; do "		\
+			"run distro_bootenv_${bootdev_s}; "	\
+		"done; \0"
+
 #define CONFIG_EXTRA_ENV_SETTINGS			\
 	"fdt_high=0xffffffffffffffff\0"			\
 	"initrd_high=0xffffffffffffffff\0"		\
@@ -319,9 +330,9 @@
 	"ramdisk_addr_r=0x46100000\0"			\
 	"fdtoverlay_addr_r=0x4f000000\0"		\
 	"loadaddr=0x60000000\0"				\
-	VF2_DISTRO_BOOTENV				\
-	VISIONFIVE2_BOOTENV_NVME			\
-	VISIONFIVE2_BOOTENV				\
+	VF2_SDK_BOOTENV					\
+	JH7110_SDK_BOOTENV				\
+	JH7110_DISTRO_BOOTENV				\
 	CHIPA_GMAC_SET					\
 	CHIPA_SET					\
 	CPU_VOL_1020_SET				\
@@ -331,7 +342,6 @@
 	CPU_SPEED_1500_SET				\
 	CPU_FREQ_VOL_SET				\
 	CMA_SIZE_SET					\
-	CHIPA_SET_FORCE					\
 	VISIONFIVE2_MEM_SET				\
 	"type_guid_gpt_loader1=" TYPE_GUID_LOADER1 "\0" \
 	"type_guid_gpt_loader2=" TYPE_GUID_LOADER2 "\0" \