Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
On 10/28/2013 04:15 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 3:20 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/28/2013 02:50 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 2:41 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/28/2013 02:34 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 1:59 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? The old code was similar, in that it had a space after the quote. We need the string to contain mmc0 mmc1 usb0 dhcp or perhaps mmc0 mmc1. I chose to add a space at the start of each string, but certainly we need a space somewhere, or we get mmc0mmc1usb0dhcp. Oh, I see. I thought the space was part of the += syntax, not the value. Perhaps to make that more obvious, you could allow: # No space added to value var+=value ... var += value1 value2 # One space included at start of addition to value var+= value1 value2 var+= value1 value2 var += value1 value2 var += value1 value2 I was deliberately trying to avoid using quotes, since then it is really hard when you actually mean 'quote'. Hmm. On the other hand, quoting is standard syntax in any scripting language. For example at present you can put this in an env script at present, but how would you do it if quotes are special? Just escape it; goes around the string and \ or within the string. This seems pretty common... Quoting quotes is currently needed for the header file. So how would my feature actually improve things? Between this and Wolfgang's \ at newline I am wondering if this feature will actually improve anything? It we are really going to insist on making the .env file like a C string then I'm not sure what we gain. I guess I don't really see much wrong with the current header file approach. The benefits this patch provide are the ability to use += and omit the \0. Maintaining a more typical and \ based quoting system seem fine though. I guess you could avoid the need for \ by using either shell-style here documents: var += ENDOFHERE data more data ENDOFHERE or Python-style triple-quotes: var += data more data either of which would degenerate to allowing the following when multi-line and leading/trailing spaces weren't required: var += value ... although I like the idea of requiring quotes, thus making that: var += value ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: #ifdef CONFIG_VIDEO_TEGRA #define STDOUT_LCD ,lcd #else #define STDOUT_LCD #endif ... #define TEGRA_DEVICE_SETTINGS \ stdout=serial STDOUT_LCD \0 \ ... The MEM_LAYOUT_ENV_SETTINGS variable is left in the header files, since it depends on the SOC type and we probably don't want to add .emv files for each board at this stage. I guess I'm fine with this as long as e.g. board/compulab/env/trimslice.env can contain: #include ../../../board/nvidia/env/common.env ... or perhaps the include path is set up to include board/nvidia/env already, so it could just contain: #include common-nvidia.env diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
Hi Stephen, On Mon, Oct 28, 2013 at 1:59 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: #ifdef CONFIG_VIDEO_TEGRA #define STDOUT_LCD ,lcd #else #define STDOUT_LCD #endif ... #define TEGRA_DEVICE_SETTINGS \ stdout=serial STDOUT_LCD \0 \ ... The MEM_LAYOUT_ENV_SETTINGS variable is left in the header files, since it depends on the SOC type and we probably don't want to add .emv files for each board at this stage. I guess I'm fine with this as long as e.g. board/compulab/env/trimslice.env can contain: #include ../../../board/nvidia/env/common.env ... or perhaps the include path is set up to include board/nvidia/env already, so it could just contain: #include common-nvidia.env diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? The old code was similar, in that it had a space after the quote. We need the string to contain mmc0 mmc1 usb0 dhcp or perhaps mmc0 mmc1. I chose to add a space at the start of each string, but certainly we need a space somewhere, or we get mmc0mmc1usb0dhcp. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
On 10/28/2013 02:34 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 1:59 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: #ifdef CONFIG_VIDEO_TEGRA #define STDOUT_LCD ,lcd #else #define STDOUT_LCD #endif ... #define TEGRA_DEVICE_SETTINGS \ stdout=serial STDOUT_LCD \0 \ ... The MEM_LAYOUT_ENV_SETTINGS variable is left in the header files, since it depends on the SOC type and we probably don't want to add .emv files for each board at this stage. I guess I'm fine with this as long as e.g. board/compulab/env/trimslice.env can contain: #include ../../../board/nvidia/env/common.env ... or perhaps the include path is set up to include board/nvidia/env already, so it could just contain: #include common-nvidia.env diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? The old code was similar, in that it had a space after the quote. We need the string to contain mmc0 mmc1 usb0 dhcp or perhaps mmc0 mmc1. I chose to add a space at the start of each string, but certainly we need a space somewhere, or we get mmc0mmc1usb0dhcp. Oh, I see. I thought the space was part of the += syntax, not the value. Perhaps to make that more obvious, you could allow: # No space added to value var+=value var+= value var +=value var += value var+=value1 value2 var+= value1 value2 var +=value1 value2 var += value1 value2 var+=value1 value2 var+= value1 value2 var +=value1 value2 var += value1 value2 # One space included at start of addition to value var+= value1 value2 var+= value1 value2 var += value1 value2 var += value1 value2 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
Hi Stephen, On Mon, Oct 28, 2013 at 2:41 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/28/2013 02:34 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 1:59 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: #ifdef CONFIG_VIDEO_TEGRA #define STDOUT_LCD ,lcd #else #define STDOUT_LCD #endif ... #define TEGRA_DEVICE_SETTINGS \ stdout=serial STDOUT_LCD \0 \ ... The MEM_LAYOUT_ENV_SETTINGS variable is left in the header files, since it depends on the SOC type and we probably don't want to add .emv files for each board at this stage. I guess I'm fine with this as long as e.g. board/compulab/env/trimslice.env can contain: #include ../../../board/nvidia/env/common.env ... or perhaps the include path is set up to include board/nvidia/env already, so it could just contain: #include common-nvidia.env diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? The old code was similar, in that it had a space after the quote. We need the string to contain mmc0 mmc1 usb0 dhcp or perhaps mmc0 mmc1. I chose to add a space at the start of each string, but certainly we need a space somewhere, or we get mmc0mmc1usb0dhcp. Oh, I see. I thought the space was part of the += syntax, not the value. Perhaps to make that more obvious, you could allow: # No space added to value var+=value var+= value var +=value var += value var+=value1 value2 var+= value1 value2 var +=value1 value2 var += value1 value2 var+=value1 value2 var+= value1 value2 var +=value1 value2 var += value1 value2 # One space included at start of addition to value var+= value1 value2 var+= value1 value2 var += value1 value2 var += value1 value2 I was deliberately trying to avoid using quotes, since then it is really hard when you actually mean 'quote'. For example at present you can put this in an env script at present, but how would you do it if quotes are special? echo This is a test; or it might not be Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
On 10/28/2013 02:50 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 2:41 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/28/2013 02:34 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 1:59 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? The old code was similar, in that it had a space after the quote. We need the string to contain mmc0 mmc1 usb0 dhcp or perhaps mmc0 mmc1. I chose to add a space at the start of each string, but certainly we need a space somewhere, or we get mmc0mmc1usb0dhcp. Oh, I see. I thought the space was part of the += syntax, not the value. Perhaps to make that more obvious, you could allow: # No space added to value var+=value ... var += value1 value2 # One space included at start of addition to value var+= value1 value2 var+= value1 value2 var += value1 value2 var += value1 value2 I was deliberately trying to avoid using quotes, since then it is really hard when you actually mean 'quote'. Hmm. On the other hand, quoting is standard syntax in any scripting language. For example at present you can put this in an env script at present, but how would you do it if quotes are special? Just escape it; goes around the string and \ or within the string. This seems pretty common... ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
Hi Stephen, On Mon, Oct 28, 2013 at 3:20 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/28/2013 02:50 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 2:41 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/28/2013 02:34 PM, Simon Glass wrote: Hi Stephen, On Mon, Oct 28, 2013 at 1:59 PM, Stephen Warren swar...@wwwdotorg.org wrote: On 10/25/2013 11:01 PM, Simon Glass wrote: This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 I still don't see why = needs no space before/after, but += needs no space before, but a space after. That simply looks like a typo to me, and I'd be inclined to fix it were I editing this file. If a sed script can't handle more flexible white-space, perhaps use Python or perhaps Perl instead? The old code was similar, in that it had a space after the quote. We need the string to contain mmc0 mmc1 usb0 dhcp or perhaps mmc0 mmc1. I chose to add a space at the start of each string, but certainly we need a space somewhere, or we get mmc0mmc1usb0dhcp. Oh, I see. I thought the space was part of the += syntax, not the value. Perhaps to make that more obvious, you could allow: # No space added to value var+=value ... var += value1 value2 # One space included at start of addition to value var+= value1 value2 var+= value1 value2 var += value1 value2 var += value1 value2 I was deliberately trying to avoid using quotes, since then it is really hard when you actually mean 'quote'. Hmm. On the other hand, quoting is standard syntax in any scripting language. For example at present you can put this in an env script at present, but how would you do it if quotes are special? Just escape it; goes around the string and \ or within the string. This seems pretty common... Quoting quotes is currently needed for the header file. So how would my feature actually improve things? Between this and Wolfgang's \ at newline I am wondering if this feature will actually improve anything? It we are really going to insist on making the .env file like a C string then I'm not sure what we gain. Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH v3 5/5] RFC: tegra: Convert to using environment files
This seems more intuitive that the current #define way of doing things. The resulting code is shorter, avoids the quoting and line continuation pain, and also improves the clumsy way that stdio variables are created: #ifdef CONFIG_VIDEO_TEGRA #define STDOUT_LCD ,lcd #else #define STDOUT_LCD #endif ... #define TEGRA_DEVICE_SETTINGS \ stdout=serial STDOUT_LCD \0 \ ... The MEM_LAYOUT_ENV_SETTINGS variable is left in the header files, since it depends on the SOC type and we probably don't want to add .emv files for each board at this stage. Signed-off-by: Simon Glass s...@chromium.org --- Changes in v3: None Changes in v2: - Add new patch to illustrate the impact on Tegra environment board/nvidia/env/common.env | 79 include/configs/tegra-common-post.h | 120 +--- 2 files changed, 80 insertions(+), 119 deletions(-) create mode 100644 board/nvidia/env/common.env diff --git a/board/nvidia/env/common.env b/board/nvidia/env/common.env new file mode 100644 index 000..aca36a5 --- /dev/null +++ b/board/nvidia/env/common.env @@ -0,0 +1,79 @@ +#ifndef CONFIG_BOOTCOMMAND +rootpart=1 +script_boot= + if load ${devtype} ${devnum}:${rootpart} + ${scriptaddr} ${prefix}${script}; then + echo ${script} found! Executing ... + source ${scriptaddr} + fi + +scan_boot= + echo Scanning ${devtype} ${devnum}... + for prefix in ${boot_prefixes}; do + for script in ${boot_scripts}; do + run script_boot + done + done + +boot_targets= +boot_prefixes=/ /boot/ +boot_scripts=boot.scr.uimg boot.scr + +#ifdef CONFIG_CMD_MMC +mmc_boot= + setenv devtype mmc + if mmc dev ${devnum}; then + run scan_boot + fi +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_booxt +boot_targets+= mmc1 mmc0 +#endif + +#ifdef CONFIG_CMD_USB +#define BOOTCMD_INIT_USB run usb_init +usb_init= + if ${usb_need_init}; then + set usb_need_init false + usb start 0 + fi +usb_boot= + setenv devtype usb + BOOTCMD_INIT_USB + if usb dev ${devnum}; then + run scan_boot + fi +bootcmd_usb0=setenv devnum 0; run usb_boot +boot_targets+= usb0 +#else +#define BOOTCMD_INIT_USB +#endif + +#ifdef CONFIG_CMD_DHCP +bootcmd_dhcp= + BOOTCMD_INIT_USB + if dhcp ${scriptaddr} boot.scr.uimg; then + source ${scriptaddr} + fi +boot_targets+= dhcp +#endif + +bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done +#endif + +/* Decide on values for stdio */ +stdin=serial +stdout=serial +stderr=serial + +#ifdef CONFIG_TEGRA_KEYBOARD +stdin+=,tegra-kbc +#endif + +#ifdef CONFIG_USB_KEYBOARD +stdin+=,usbkbd +#endif + +#ifdef CONFIG_VIDEO_TEGRA +stdout+=,lcd +#endif diff --git a/include/configs/tegra-common-post.h b/include/configs/tegra-common-post.h index a3242fe..8465a1e 100644 --- a/include/configs/tegra-common-post.h +++ b/include/configs/tegra-common-post.h @@ -8,131 +8,13 @@ #ifndef __TEGRA_COMMON_POST_H #define __TEGRA_COMMON_POST_H -#ifdef CONFIG_BOOTCOMMAND - -#define BOOTCMDS_COMMON - -#else - -#ifdef CONFIG_CMD_MMC -#define BOOTCMDS_MMC \ - mmc_boot= \ - setenv devtype mmc; \ - if mmc dev ${devnum}; then \ - run scan_boot; \ - fi\0 \ - bootcmd_mmc0=setenv devnum 0; run mmc_boot;\0 \ - bootcmd_mmc1=setenv devnum 1; run mmc_boot;\0 -#define BOOT_TARGETS_MMC mmc1 mmc0 -#else -#define BOOTCMDS_MMC -#define BOOT_TARGETS_MMC -#endif - -#ifdef CONFIG_CMD_USB -#define BOOTCMD_INIT_USB run usb_init; -#define BOOTCMDS_USB \ - usb_init= \ - if ${usb_need_init}; then \ - set usb_need_init false; \ - usb start 0; \ - fi\0 \ - \ - usb_boot= \ - setenv devtype usb; \ - BOOTCMD_INIT_USB \ - if usb dev ${devnum}; then \ - run scan_boot; \ - fi\0 \ - \ - bootcmd_usb0=setenv devnum 0; run usb_boot;\0 -#define BOOT_TARGETS_USB usb0 -#else -#define BOOTCMD_INIT_USB -#define BOOTCMDS_USB -#define BOOT_TARGETS_USB -#endif - -#ifdef CONFIG_CMD_DHCP -#define BOOTCMDS_DHCP \ - bootcmd_dhcp= \ - BOOTCMD_INIT_USB \ - if dhcp ${scriptaddr} boot.scr.uimg; then \ - source ${scriptaddr}; \ - fi\0 -#define BOOT_TARGETS_DHCP dhcp -#else -#define BOOTCMDS_DHCP -#define BOOT_TARGETS_DHCP -#endif - -#define BOOTCMDS_COMMON \ - rootpart=1\0 \ - \ - script_boot=\ - if load ${devtype} ${devnum}:${rootpart}\ -