Patchwork [U-Boot,2/4] tegra: flesh out bootcmd

login
register
mail settings
Submitter Stephen Warren
Date May 15, 2012, 10:16 p.m.
Message ID <1337120173-3479-2-git-send-email-swarren@wwwdotorg.org>
Download mbox | patch
Permalink /patch/159463/
State Accepted
Commit bea2674ccde5a495710adef62ebd5a294752f59d
Headers show

Comments

Stephen Warren - May 15, 2012, 10:16 p.m.
From: Stephen Warren <swarren@nvidia.com>

This implements a useful bootcmd for Tegra. The boot order is:

* If USB enabled, USB storage
* Internal MMC (SD card or eMMC)
* If networking is enabled, BOOTP/TFTP

When booting from USB or MMC, the boot script is assumed to be in
partition 1 (although this may be overridden via the rootpart variable),
both ext2 and FAT filesystems are supported, the boot script may exist
in either / or /boot, and the boot script may be named boot.scr.uimg or
boot.scr.

When booting over the network, it is assumed that boot.scr.uimg exists
on the TFTP server. There is less flexibility here since those setting
up network booting are expected to need less hand-holding.

In all cases, it is expected that the initial file loaded is a U-Boot
image containing a script that will load the kernel, load any required
initrd, load any required DTB, and finally bootm the kernel.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 include/configs/harmony.h            |    3 +
 include/configs/medcom.h             |    2 +
 include/configs/paz00.h              |    3 +
 include/configs/plutux.h             |    2 +
 include/configs/seaboard.h           |    3 +
 include/configs/tegra2-common-post.h |  117 ++++++++++++++++++++++++++++++++++
 include/configs/tegra2-common.h      |    3 -
 include/configs/ventana.h            |    3 +
 include/configs/whistler.h           |    2 +
 9 files changed, 135 insertions(+), 3 deletions(-)
 create mode 100644 include/configs/tegra2-common-post.h
Simon Glass - May 31, 2012, 11:27 p.m.
On Tue, May 15, 2012 at 3:16 PM, Stephen Warren <swarren@wwwdotorg.org>wrote:

> From: Stephen Warren <swarren@nvidia.com>
>

Acked-by: Simon Glass <sjg@chromium.org>


>
> This implements a useful bootcmd for Tegra. The boot order is:
>
> * If USB enabled, USB storage
> * Internal MMC (SD card or eMMC)
> * If networking is enabled, BOOTP/TFTP
>
> When booting from USB or MMC, the boot script is assumed to be in
> partition 1 (although this may be overridden via the rootpart variable),
> both ext2 and FAT filesystems are supported, the boot script may exist
> in either / or /boot, and the boot script may be named boot.scr.uimg or
> boot.scr.
>
> When booting over the network, it is assumed that boot.scr.uimg exists
> on the TFTP server. There is less flexibility here since those setting
> up network booting are expected to need less hand-holding.
>
> In all cases, it is expected that the initial file loaded is a U-Boot
> image containing a script that will load the kernel, load any required
> initrd, load any required DTB, and finally bootm the kernel.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
>  include/configs/harmony.h            |    3 +
>  include/configs/medcom.h             |    2 +
>  include/configs/paz00.h              |    3 +
>  include/configs/plutux.h             |    2 +
>  include/configs/seaboard.h           |    3 +
>  include/configs/tegra2-common-post.h |  117
> ++++++++++++++++++++++++++++++++++
>  include/configs/tegra2-common.h      |    3 -
>  include/configs/ventana.h            |    3 +
>  include/configs/whistler.h           |    2 +
>  9 files changed, 135 insertions(+), 3 deletions(-)
>  create mode 100644 include/configs/tegra2-common-post.h
>
> diff --git a/include/configs/harmony.h b/include/configs/harmony.h
> index ce0ae9f..7336897 100644
> --- a/include/configs/harmony.h
> +++ b/include/configs/harmony.h
> @@ -61,4 +61,7 @@
>
>  /* Environment not stored */
>  #define CONFIG_ENV_IS_NOWHERE
> +
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> diff --git a/include/configs/medcom.h b/include/configs/medcom.h
> index 2dc3507..e2a99dc 100644
> --- a/include/configs/medcom.h
> +++ b/include/configs/medcom.h
> @@ -61,4 +61,6 @@
>        "ext2load mmc 0 0x17000000 /boot/uImage;"       \
>        "bootm"
>
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> diff --git a/include/configs/paz00.h b/include/configs/paz00.h
> index f53f20e..200a61d 100644
> --- a/include/configs/paz00.h
> +++ b/include/configs/paz00.h
> @@ -48,4 +48,7 @@
>
>  /* Environment not stored */
>  #define CONFIG_ENV_IS_NOWHERE
> +
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> diff --git a/include/configs/plutux.h b/include/configs/plutux.h
> index f869191..f6afb66 100644
> --- a/include/configs/plutux.h
> +++ b/include/configs/plutux.h
> @@ -61,4 +61,6 @@
>        "ext2load mmc 0 0x17000000 /boot/uImage;"       \
>        "bootm"
>
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h
> index 46d4228..c2ed686 100644
> --- a/include/configs/seaboard.h
> +++ b/include/configs/seaboard.h
> @@ -108,4 +108,7 @@
>  #define TEGRA2_DEVICE_SETTINGS "stdin=serial,tegra-kbc\0" \
>                                        "stdout=serial\0" \
>                                        "stderr=serial\0"
> +
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> diff --git a/include/configs/tegra2-common-post.h
> b/include/configs/tegra2-common-post.h
> new file mode 100644
> index 0000000..0484a52
> --- /dev/null
> +++ b/include/configs/tegra2-common-post.h
> @@ -0,0 +1,117 @@
> +/*
> + * (C) Copyright 2010-2012
> + * NVIDIA Corporation <www.nvidia.com>
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#ifndef __TEGRA2_COMMON_POST_H
> +#define __TEGRA2_COMMON_POST_H
> +
> +#ifdef CONFIG_BOOTCOMMAND
> +
> +#define BOOTCMDS_COMMON ""
> +
> +#else
> +
> +#ifdef CONFIG_CMD_EXT2
> +#define BOOTCMD_FS_EXT2 "ext2 "
> +#else
> +#define BOOTCMD_FS_EXT2 ""
> +#endif
> +
> +#ifdef CONFIG_CMD_FAT
> +#define BOOTCMD_FS_FAT "fat"
> +#else
> +#define BOOTCMD_FS_FAT ""
> +#endif
> +
> +#ifdef CONFIG_CMD_MMC
> +#define BOOTCMDS_MMC \
> +       "mmc_boot=" \
> +               "setenv devtype mmc; " \
> +               "if mmc dev ${devnum}; then " \
> +                       "run script_boot; " \
> +               "fi\0" \
> +       "mmc0_boot=setenv devnum 0; run mmc_boot;\0" \
> +       "mmc1_boot=setenv devnum 1; run mmc_boot;\0" \
> +       "bootcmd_mmc=run mmc1_boot; run mmc0_boot\0"
> +#define BOOTCMD_MMC "run bootcmd_mmc; "
> +#else
> +#define BOOTCMDS_MMC ""
> +#define BOOTCMD_MMC ""
> +#endif
> +
> +#ifdef CONFIG_CMD_USB
> +#define BOOTCMDS_USB \
> +       "usb_boot=" \
> +               "setenv devtype usb; " \
> +               "if usb dev ${devnum}; then " \
> +                       "run script_boot; " \
> +               "fi\0" \
> +       "usb0_boot=setenv devnum 0; run usb_boot;\0" \
> +       "bootcmd_usb=run usb0_boot\0"
> +#define BOOTCMD_USB "run bootcmd_usb; "
> +#define BOOTCMD_INIT_USB "usb start 0; "
> +#else
> +#define BOOTCMDS_USB ""
> +#define BOOTCMD_USB ""
> +#define BOOTCMD_INIT_USB ""
> +#endif
> +
> +#ifdef CONFIG_CMD_DHCP
> +#define BOOTCMDS_DHCP \
> +       "bootcmd_dhcp=" \
> +               "if dhcp ${scriptaddr} boot.scr.uimg; then "\
> +                       "source ${scriptaddr}; " \
> +               "fi\0"
> +#define BOOTCMD_DHCP "run bootcmd_dhcp; "
> +#else
> +#define BOOTCMDS_DHCP ""
> +#define BOOTCMD_DHCP ""
> +#endif
> +
> +#define BOOTCMDS_COMMON \
> +       "scriptaddr=0x400000\0" \
> +       "rootpart=1\0" \
> +       "script_boot="
>                                              \
> +               "for fs in " BOOTCMD_FS_EXT2 BOOTCMD_FS_FAT "; do "
>                                               \
> +                   "for prefix in / /boot/; do "
>                                               \
> +                       "for script in boot.scr.uimg boot.scr; do "
>                                               \
> +                           "echo Scanning ${devtype}
> ${devnum}:${rootpart} ${fs} ${prefix}${script} ...; "             \
> +                           "if ${fs}load ${devtype} ${devnum}:${rootpart}
> ${scriptaddr} ${prefix}${script}; then "     \
> +                               "echo ${script} found! Executing ...;"
>                                              \
> +                               "source ${scriptaddr};"
>                                               \
> +                           "fi; "
>                                              \
> +                       "done; "
>                                              \
> +                   "done; "
>                                              \
> +               "done;\0"
>                                               \
> +       BOOTCMDS_MMC \
> +       BOOTCMDS_USB \
> +       BOOTCMDS_DHCP
> +
> +#define CONFIG_BOOTCOMMAND BOOTCMD_INIT_USB BOOTCMD_USB BOOTCMD_MMC
> BOOTCMD_DHCP
> +
> +#endif
> +
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> +       TEGRA2_DEVICE_SETTINGS \
> +       BOOTCMDS_COMMON
> +
> +#endif /* __TEGRA2_COMMON_POST_H */
> diff --git a/include/configs/tegra2-common.h
> b/include/configs/tegra2-common.h
> index cdd3093..1931179 100644
> --- a/include/configs/tegra2-common.h
> +++ b/include/configs/tegra2-common.h
> @@ -139,9 +139,6 @@
>                                        "stdout=serial\0" \
>                                        "stderr=serial\0"
>
> -#define CONFIG_EXTRA_ENV_SETTINGS \
> -       TEGRA2_DEVICE_SETTINGS
> -
>  #define CONFIG_LOADADDR                0x408000        /* def. location
> for kernel */
>  #define CONFIG_BOOTDELAY       2               /* -1 to disable auto boot
> */
>
> diff --git a/include/configs/ventana.h b/include/configs/ventana.h
> index 3e55fe5..4dcd5db 100644
> --- a/include/configs/ventana.h
> +++ b/include/configs/ventana.h
> @@ -60,4 +60,7 @@
>
>  /* Environment not stored */
>  #define CONFIG_ENV_IS_NOWHERE
> +
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> diff --git a/include/configs/whistler.h b/include/configs/whistler.h
> index 6b9ef98..4eed7f6 100644
> --- a/include/configs/whistler.h
> +++ b/include/configs/whistler.h
> @@ -87,4 +87,6 @@
>  #define CONFIG_CMD_PING
>  #define CONFIG_CMD_DHCP
>
> +#include "tegra2-common-post.h"
> +
>  #endif /* __CONFIG_H */
> --
> 1.7.0.4
>
>

Patch

diff --git a/include/configs/harmony.h b/include/configs/harmony.h
index ce0ae9f..7336897 100644
--- a/include/configs/harmony.h
+++ b/include/configs/harmony.h
@@ -61,4 +61,7 @@ 
 
 /* Environment not stored */
 #define CONFIG_ENV_IS_NOWHERE
+
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/medcom.h b/include/configs/medcom.h
index 2dc3507..e2a99dc 100644
--- a/include/configs/medcom.h
+++ b/include/configs/medcom.h
@@ -61,4 +61,6 @@ 
 	"ext2load mmc 0 0x17000000 /boot/uImage;"	\
 	"bootm"
 
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/paz00.h b/include/configs/paz00.h
index f53f20e..200a61d 100644
--- a/include/configs/paz00.h
+++ b/include/configs/paz00.h
@@ -48,4 +48,7 @@ 
 
 /* Environment not stored */
 #define CONFIG_ENV_IS_NOWHERE
+
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/plutux.h b/include/configs/plutux.h
index f869191..f6afb66 100644
--- a/include/configs/plutux.h
+++ b/include/configs/plutux.h
@@ -61,4 +61,6 @@ 
 	"ext2load mmc 0 0x17000000 /boot/uImage;"	\
 	"bootm"
 
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h
index 46d4228..c2ed686 100644
--- a/include/configs/seaboard.h
+++ b/include/configs/seaboard.h
@@ -108,4 +108,7 @@ 
 #define TEGRA2_DEVICE_SETTINGS	"stdin=serial,tegra-kbc\0" \
 					"stdout=serial\0" \
 					"stderr=serial\0"
+
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/tegra2-common-post.h b/include/configs/tegra2-common-post.h
new file mode 100644
index 0000000..0484a52
--- /dev/null
+++ b/include/configs/tegra2-common-post.h
@@ -0,0 +1,117 @@ 
+/*
+ * (C) Copyright 2010-2012
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __TEGRA2_COMMON_POST_H
+#define __TEGRA2_COMMON_POST_H
+
+#ifdef CONFIG_BOOTCOMMAND
+
+#define BOOTCMDS_COMMON ""
+
+#else
+
+#ifdef CONFIG_CMD_EXT2
+#define BOOTCMD_FS_EXT2 "ext2 "
+#else
+#define BOOTCMD_FS_EXT2 ""
+#endif
+
+#ifdef CONFIG_CMD_FAT
+#define BOOTCMD_FS_FAT "fat"
+#else
+#define BOOTCMD_FS_FAT ""
+#endif
+
+#ifdef CONFIG_CMD_MMC
+#define BOOTCMDS_MMC \
+	"mmc_boot=" \
+		"setenv devtype mmc; " \
+		"if mmc dev ${devnum}; then " \
+			"run script_boot; " \
+		"fi\0" \
+	"mmc0_boot=setenv devnum 0; run mmc_boot;\0" \
+	"mmc1_boot=setenv devnum 1; run mmc_boot;\0" \
+	"bootcmd_mmc=run mmc1_boot; run mmc0_boot\0"
+#define BOOTCMD_MMC "run bootcmd_mmc; "
+#else
+#define BOOTCMDS_MMC ""
+#define BOOTCMD_MMC ""
+#endif
+
+#ifdef CONFIG_CMD_USB
+#define BOOTCMDS_USB \
+	"usb_boot=" \
+		"setenv devtype usb; " \
+		"if usb dev ${devnum}; then " \
+			"run script_boot; " \
+		"fi\0" \
+	"usb0_boot=setenv devnum 0; run usb_boot;\0" \
+	"bootcmd_usb=run usb0_boot\0"
+#define BOOTCMD_USB "run bootcmd_usb; "
+#define BOOTCMD_INIT_USB "usb start 0; "
+#else
+#define BOOTCMDS_USB ""
+#define BOOTCMD_USB ""
+#define BOOTCMD_INIT_USB ""
+#endif
+
+#ifdef CONFIG_CMD_DHCP
+#define BOOTCMDS_DHCP \
+	"bootcmd_dhcp=" \
+		"if dhcp ${scriptaddr} boot.scr.uimg; then "\
+			"source ${scriptaddr}; " \
+		"fi\0"
+#define BOOTCMD_DHCP "run bootcmd_dhcp; "
+#else
+#define BOOTCMDS_DHCP ""
+#define BOOTCMD_DHCP ""
+#endif
+
+#define BOOTCMDS_COMMON \
+	"scriptaddr=0x400000\0" \
+	"rootpart=1\0" \
+	"script_boot="													\
+		"for fs in " BOOTCMD_FS_EXT2 BOOTCMD_FS_FAT "; do "							\
+		    "for prefix in / /boot/; do "									\
+			"for script in boot.scr.uimg boot.scr; do "							\
+			    "echo Scanning ${devtype} ${devnum}:${rootpart} ${fs} ${prefix}${script} ...; "		\
+			    "if ${fs}load ${devtype} ${devnum}:${rootpart} ${scriptaddr} ${prefix}${script}; then "	\
+				"echo ${script} found! Executing ...;"							\
+				"source ${scriptaddr};"									\
+			    "fi; "											\
+			"done; "											\
+		    "done; "												\
+		"done;\0"												\
+	BOOTCMDS_MMC \
+	BOOTCMDS_USB \
+	BOOTCMDS_DHCP
+
+#define CONFIG_BOOTCOMMAND BOOTCMD_INIT_USB BOOTCMD_USB BOOTCMD_MMC BOOTCMD_DHCP
+
+#endif
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+	TEGRA2_DEVICE_SETTINGS \
+	BOOTCMDS_COMMON
+
+#endif /* __TEGRA2_COMMON_POST_H */
diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h
index cdd3093..1931179 100644
--- a/include/configs/tegra2-common.h
+++ b/include/configs/tegra2-common.h
@@ -139,9 +139,6 @@ 
 					"stdout=serial\0" \
 					"stderr=serial\0"
 
-#define CONFIG_EXTRA_ENV_SETTINGS \
-	TEGRA2_DEVICE_SETTINGS
-
 #define CONFIG_LOADADDR		0x408000	/* def. location for kernel */
 #define CONFIG_BOOTDELAY	2		/* -1 to disable auto boot */
 
diff --git a/include/configs/ventana.h b/include/configs/ventana.h
index 3e55fe5..4dcd5db 100644
--- a/include/configs/ventana.h
+++ b/include/configs/ventana.h
@@ -60,4 +60,7 @@ 
 
 /* Environment not stored */
 #define CONFIG_ENV_IS_NOWHERE
+
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/whistler.h b/include/configs/whistler.h
index 6b9ef98..4eed7f6 100644
--- a/include/configs/whistler.h
+++ b/include/configs/whistler.h
@@ -87,4 +87,6 @@ 
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_DHCP
 
+#include "tegra2-common-post.h"
+
 #endif /* __CONFIG_H */