[U-Boot] [PATCH 7/9] mx53loco: Add support to dynamically choose between ftd use or not
Otavio Salvador
otavio at ossystems.com.br
Thu Dec 27 22:22:07 CET 2012
On Thu, Dec 27, 2012 at 7:44 AM, Stefano Babic <sbabic at denx.de> wrote:
> On 26/12/2012 19:23, Otavio Salvador wrote:
>> On Wed, Dec 26, 2012 at 10:14 AM, Fabio Estevam <festevam at gmail.com> wrote:
>>> On Wed, Dec 26, 2012 at 9:31 AM, Stefano Babic <sbabic at denx.de> wrote:
>>>
>>>> Only to remark that this is the correct behavior. The kernel with fdt is
>>>> booted independently if this is wanted or not, but if the fdt file is
>>>> loaded successfully from MMC or network. This can have some drawback
>>>> effects if, for example, the fdt is simply stored on the TFTP server,
>>>> but we want to boot a kernel without DT. For example, when someone wants
>>>> to test both kernels or there are multiple instances of the same board
>>>> type (mx53loco in this case) loading from the same TFTP server.
>>>>
>>>> In your patch, the behavior depends if the fdt is simply present on the
>>>> media, but this does not always mean that the file must be loaded.
>>>> Should be not better to set variable as flag to force the desired
>>>> behavior and to be sure that the system does not boot in a different way
>>>> as the user thinks ?
>>>>
>>>> In other words, something like :
>>>>
>>>> "if boot_fdt; then " \
>>>> "if dhcp ${ftd_addr} ${ftd_file}; then " \
>>>> "bootm ${loadaddr} - ${ftd_addr}; " \
>>>> "else " \
>>>> "echo Error: I cannot boot a DT kernel; \"
>>>> "fi; \"
>>>> " else bootm; fi;\0"
>>>
>>>
>>> Yes, I think this is a good idea and would allow us to easily switch
>>> from dt to non-dt kernel during tests.
>>
>> I like the idea but maybe we could have three states?
>>
>> boot_fdt=yes
>>
>> It'd imply force fdt and would behave as you said above;
>>
>> boot_fdt=no
>>
>> Would ignore the fdt completely
>>
>> boot_fdt=auto
>>
>> The current code, which try to load fdt and do not fail otherwise.
>>
>> Comments?
>
> Reading again your environment, it seems to me that you strictly bind
> the network configuration with fdt. But they are two distinct setup.
> Let's say, if I desire to start a fdt kernel but I have a static ip
> address. In this case, I should load with "tftp" instead using "dhcp".
> So the necessity to have a three state is due to the fact you are
> setting more as one state in one shot: fdt or not, and dhcp or not. IMHO
> you need two variables to manage them independently. I think I did
> something like this in another board, but I do not remember which one ;-(.
>
> So you can have:
> boot_fdt
> ip_dyn
>
> to discriminate what the script should do.
>
> "if boot_fdt; then " \
> "if ip_dyn;then" \
> "if dhcp ${ftd_addr} ${ftd_file}; then " \
> "bootm ${loadaddr} - ${ftd_addr}; " \
> "else " \
> "echo Error: I cannot boot a DT kernel; \"
> "fi;" \
> "else tftp ${ftd_addr} ${ftd_file}
> .....
Right; I have did the bellow changes:
diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h
index ac9522f..45ac072 100644
--- a/include/configs/mx28evk.h
+++ b/include/configs/mx28evk.h
@@ -290,6 +290,10 @@
"uimage=uImage\0" \
"console_fsl=ttyAM0\0" \
"console_mainline=ttyAMA0\0" \
+ "ftd_file=imx28-evk.dtb\0" \
+ "ftd_addr=0x41000000\0" \
+ "boot_fdt=auto\0" \
+ "ip_dyn=yes\0" \
"mmcdev=0\0" \
"mmcpart=2\0" \
"mmcroot=/dev/mmcblk0p3 rw rootwait\0" \
@@ -302,13 +306,43 @@
"loaduimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}\0" \
"mmcboot=echo Booting from mmc ...; " \
"run mmcargs; " \
- "bootm\0" \
+ "if test ${boot_fdt} = no; then " \
+ "bootm; " \
+ "else " \
+ "if fatload mmc ${mmcdev}:${mmcpart} ${ftd_addr}
${ftd_file}; then " \
+ "bootm ${loadaddr} - ${ftd_addr}; " \
+ "else " \
+ "if test ${boot_fdt} = auto; then " \
+ "bootm; " \
+ "else " \
+ "echo ERROR: Cannot load the DT, aborting...; " \
+ "fi;\0" \
+ "fi;\0" \
+ "fi;\0" \
"netargs=setenv bootargs console=${console_mainline},${baudrate} " \
"root=/dev/nfs " \
"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
"netboot=echo Booting from net ...; " \
"run netargs; " \
- "dhcp ${uimage}; bootm\0"
+ "if test ${ip_dyn} = yes; then " \
+ "setenv get_cmd dhcp; " \
+ "else " \
+ "setenv get_cmd tftp; " \
+ "fi;\0" \
+ ${get_cmd} ${uimage}; " \
+ "if test ${boot_fdt} = no; then " \
+ "bootm; " \
+ "else " \
+ "if ${get_cmd} ${ftd_addr} ${ftd_file}; then " \
+ "bootm ${loadaddr} - ${ftd_addr}; " \
+ "else " \
+ "if test ${boot_fdt} = auto; then " \
+ "bootm; " \
+ "else " \
+ "echo ERROR: Cannot load the DT, aborting...; " \
+ "fi;\0" \
+ "fi;\0" \
+ "fi;\0"
#define CONFIG_BOOTCOMMAND \
"mmc dev ${mmcdev}; if mmc rescan; then " \
What do you think? I don't have the board to test but except by the
get_cmd command, the rest should be fine.
--
Otavio Salvador O.S. Systems
E-mail: otavio at ossystems.com.br http://www.ossystems.com.br
Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br
More information about the U-Boot
mailing list