On Thu, Dec 27, 2012 at 7:44 AM, Stefano Babic <sba...@denx.de> wrote: > On 26/12/2012 19:23, Otavio Salvador wrote: >> On Wed, Dec 26, 2012 at 10:14 AM, Fabio Estevam <feste...@gmail.com> wrote: >>> On Wed, Dec 26, 2012 at 9:31 AM, Stefano Babic <sba...@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: ota...@ossystems.com.br http://www.ossystems.com.br Mobile: +55 53 9981-7854 http://projetos.ossystems.com.br _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot