[U-Boot] [PATCH] nitrogen6x : Use generic distro configuration

In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk --- configs/mx6qsabrelite_defconfig | 1 + configs/nitrogen6dl2g_defconfig | 1 + configs/nitrogen6dl_defconfig | 1 + configs/nitrogen6q2g_defconfig | 1 + configs/nitrogen6q_defconfig | 1 + configs/nitrogen6s1g_defconfig | 1 + configs/nitrogen6s_defconfig | 1 + doc/README.imx6 | 47 +++++++++++ include/configs/mx6_common.h | 28 +++++++ include/configs/nitrogen6x.h | 169 ++++------------------------------------ 10 files changed, 97 insertions(+), 154 deletions(-)
diff --git a/configs/mx6qsabrelite_defconfig b/configs/mx6qsabrelite_defconfig index fa6139a..27b64c4 100644 --- a/configs/mx6qsabrelite_defconfig +++ b/configs/mx6qsabrelite_defconfig @@ -36,3 +36,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl2g_defconfig b/configs/nitrogen6dl2g_defconfig index 02b2462..b1344c6 100644 --- a/configs/nitrogen6dl2g_defconfig +++ b/configs/nitrogen6dl2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl_defconfig b/configs/nitrogen6dl_defconfig index 52553f6..f794c08 100644 --- a/configs/nitrogen6dl_defconfig +++ b/configs/nitrogen6dl_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q2g_defconfig b/configs/nitrogen6q2g_defconfig index 11188b7..56cebe0 100644 --- a/configs/nitrogen6q2g_defconfig +++ b/configs/nitrogen6q2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q_defconfig b/configs/nitrogen6q_defconfig index 05bf140..c150b97 100644 --- a/configs/nitrogen6q_defconfig +++ b/configs/nitrogen6q_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s1g_defconfig b/configs/nitrogen6s1g_defconfig index bb081a2..dfd096d 100644 --- a/configs/nitrogen6s1g_defconfig +++ b/configs/nitrogen6s1g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s_defconfig b/configs/nitrogen6s_defconfig index 08e91c9..5e2e693 100644 --- a/configs/nitrogen6s_defconfig +++ b/configs/nitrogen6s_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/doc/README.imx6 b/doc/README.imx6 index 1823fb2..36452f6 100644 --- a/doc/README.imx6 +++ b/doc/README.imx6 @@ -138,3 +138,50 @@ c The last "c" command tells kermit (from ckermit package in most distros) to switch from command line mode to communication mode, and when the script is finished, the U-Boot prompt is shown in the same shell. + +3. Using generic distro configuration +------------------------------------- + +In order to simplify the use of various images on various media +for imx6 boards, the configuration of the board must follow the +generic distro configuration (doc/README.distro). + +3.1. Setup uboot configuration for your board +--------------------------------------------- + +First, you have to set 'CONFIG_DISTRO_DEFAULTS=y' in your board defconfig + +Some mandatory variable are set in mx6_common.h but can be overwritten like: + - fdtfile with CONFIG_FDTFILE + - fdt_addr_r and fdt_addr with CONFIG_FDTADDR + - ramdisk_addr_r, ramdiskaddr CONFIG_RAMDISKADDR + +You also have to define BOOT_TARGET_DEVICES with available media. +For example added in include/configs/nitrogen6x.h: +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 0) \ + func(MMC, mmc, 1) \ + func(SATA, sata, 0) \ + func(USB, usb, 0) \ + func(PXE, pxe, na) \ + func(DHCP, dhcp, na) + +All this configuration should be done before '#include "mx6_common.h"' + +3.2. Setup your distribution +---------------------------- + +Set the partition containing /boot/ bootable. +Copy your kernel and device tree in /boot. +Create /boot/extlinux/extlinux.conf on your rootfs and fill it according to specification +at http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/ + +For example: + +default Buildroot + +label Buildroot + kernel /boot/zImage + append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw + fdtdir /boot + diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..75cbc84 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000 +#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif
/* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,26 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP
+#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h> + +#ifndef CONFIG_FDTFILE +#define CONFIG_FDTFILE "undefined" +#endif + +#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "fdtfile=" CONFIG_FDTFILE "\0" \ + "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \ + "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \ + "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ + "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ + "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \ + "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \ + "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \ + BOOTENV + +#endif + #endif diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..33658b0 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H
-#include "mx6_common.h" - #define CONFIG_MACH_TYPE 3769
/* Size of malloc() pool */ @@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID
@@ -113,159 +111,22 @@
#define CONFIG_PREBOOT ""
-#ifdef CONFIG_CMD_SATA -#define CONFIG_DRIVE_SATA "sata " -#else -#define CONFIG_DRIVE_SATA -#endif - -#ifdef CONFIG_CMD_MMC -#define CONFIG_DRIVE_MMC "mmc " -#else -#define CONFIG_DRIVE_MMC -#endif - -#ifdef CONFIG_USB_STORAGE -#define CONFIG_DRIVE_USB "usb " +#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" #else -#define CONFIG_DRIVE_USB +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" #endif
-#define CONFIG_DRIVE_TYPES CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC CONFIG_DRIVE_USB -#define CONFIG_UMSDEVS CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC - -#if defined(CONFIG_SABRELITE) -#define CONFIG_EXTRA_ENV_SETTINGS \ - "script=boot.scr\0" \ - "uimage=uImage\0" \ - "console=ttymxc1\0" \ - "fdt_high=0xffffffff\0" \ - "initrd_high=0xffffffff\0" \ - "fdt_file=imx6q-sabrelite.dtb\0" \ - "fdt_addr=0x18000000\0" \ - "boot_fdt=try\0" \ - "ip_dyn=yes\0" \ - "mmcdevs=0 1\0" \ - "mmcpart=1\0" \ - "mmcroot=/dev/mmcblk0p2 rootwait rw\0" \ - "mmcargs=setenv bootargs console=${console},${baudrate} " \ - "root=${mmcroot}\0" \ - "loadbootscript=" \ - "load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};\0" \ - "bootscript=echo Running bootscript from mmc ...; " \ - "source\0" \ - "loaduimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}\0" \ - "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ - "mmcboot=echo Booting from mmc ...; " \ - "run mmcargs; " \ - "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ - "if run loadfdt; then " \ - "bootm ${loadaddr} - ${fdt_addr}; " \ - "else " \ - "if test ${boot_fdt} = try; then " \ - "bootm; " \ - "else " \ - "echo WARN: Cannot load the DT; " \ - "fi; " \ - "fi; " \ - "else " \ - "bootm; " \ - "fi;\0" \ - "netargs=setenv bootargs console=${console},${baudrate} " \ - "root=/dev/nfs " \ - "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \ - "netboot=echo Booting from net ...; " \ - "run netargs; " \ - "if test ${ip_dyn} = yes; then " \ - "setenv get_cmd dhcp; " \ - "else " \ - "setenv get_cmd tftp; " \ - "fi; " \ - "${get_cmd} ${uimage}; " \ - "if test ${boot_fdt} = yes || test ${boot_fdt} = try; then " \ - "if ${get_cmd} ${fdt_addr} ${fdt_file}; then " \ - "bootm ${loadaddr} - ${fdt_addr}; " \ - "else " \ - "if test ${boot_fdt} = try; then " \ - "bootm; " \ - "else " \ - "echo WARN: Cannot load the DT; " \ - "fi; " \ - "fi; " \ - "else " \ - "bootm; " \ - "fi;\0" +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 0) \ + func(MMC, mmc, 1) \ + func(SATA, sata, 0) \ + func(USB, usb, 0) \ + func(PXE, pxe, na) \ + func(DHCP, dhcp, na)
-#define CONFIG_BOOTCOMMAND \ - "for mmcdev in ${mmcdevs}; do " \ - "mmc dev ${mmcdev}; " \ - "if mmc rescan; then " \ - "if run loadbootscript; then " \ - "run bootscript; " \ - "else " \ - "if run loaduimage; then " \ - "run mmcboot; " \ - "fi; " \ - "fi; " \ - "fi; " \ - "done; " \ - "run netboot; " -#else -#define CONFIG_EXTRA_ENV_SETTINGS \ - "bootdevs=" CONFIG_DRIVE_TYPES "\0" \ - "umsdevs=" CONFIG_UMSDEVS "\0" \ - "console=ttymxc1\0" \ - "clearenv=if sf probe || sf probe || sf probe 1 ; then " \ - "sf erase 0xc0000 0x2000 && " \ - "echo restored environment to factory default ; fi\0" \ - "bootcmd=for dtype in ${bootdevs}" \ - "; do " \ - "if itest.s "xusb" == "x${dtype}" ; then " \ - "usb start ;" \ - "fi; " \ - "for disk in 0 1 ; do ${dtype} dev ${disk} ;" \ - "load " \ - "${dtype} ${disk}:1 " \ - "10008000 " \ - "/6x_bootscript" \ - "&& source 10008000 ; " \ - "done ; " \ - "done; " \ - "setenv stdout serial,vga ; " \ - "echo ; echo 6x_bootscript not found ; " \ - "echo ; echo serial console at 115200, 8N1 ; echo ; " \ - "echo details at http://boundarydevices.com/6q_bootscript ; " \ - "setenv stdout serial;" \ - "setenv stdin serial,usbkbd;" \ - "for dtype in ${umsdevs} ; do " \ - "if itest.s sata == ${dtype}; then " \ - "initcmd='sata init' ;" \ - "else " \ - "initcmd='mmc rescan' ;" \ - "fi; " \ - "for disk in 0 1 ; do " \ - "if $initcmd && $dtype dev $disk ; then " \ - "setenv stdout serial,vga; " \ - "echo expose ${dtype} ${disk} " \ - "over USB; " \ - "ums 0 $dtype $disk ;" \ - "fi; " \ - " done; " \ - "done ;" \ - "setenv stdout serial,vga; " \ - "echo no block devices found;" \ - "\0" \ - "initrd_high=0xffffffff\0" \ - "upgradeu=for dtype in ${bootdevs}" \ - "; do " \ - "for disk in 0 1 ; do ${dtype} dev ${disk} ;" \ - "load ${dtype} ${disk}:1 10008000 " \ - "/6x_upgrade " \ - "&& source 10008000 ; " \ - "done ; " \ - "done\0" \ +#include "mx6_common.h"
-#endif /* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x10000000 #define CONFIG_SYS_MEMTEST_END 0x10010000 @@ -327,4 +188,4 @@ #define CONFIG_FASTBOOT_BUF_ADDR CONFIG_SYS_LOAD_ADDR #define CONFIG_FASTBOOT_BUF_SIZE 0x07000000
-#endif /* __CONFIG_H */ +#endif /* __CONFIG_H */

On 6/24/2016 8:59 AM, Fabien Lahoudere wrote:
In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk
...
diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..75cbc84 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h +#define CONFIG_EXTRA_ENV_SETTINGS \
- "fdtfile=" CONFIG_FDTFILE "\0" \
- "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \
- "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \
- "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
- "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- BOOTENV
+#endif
This should probably be called something like CONFIG_EXTRA_DEFAULT_ENV_SETTINGS and the board files could contain
#define CONFIG_EXTRA_ENV_SETTINGS CONFIG_EXTRA_DEFAULT_ENV_SETTINGS \ "extra=more stuff\0" \
I would not remove any environment variables in this patch except for redundant things.

On 27/06/16 20:51, Troy Kisky wrote:
On 6/24/2016 8:59 AM, Fabien Lahoudere wrote:
In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk
...
diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..75cbc84 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h +#define CONFIG_EXTRA_ENV_SETTINGS \
- "fdtfile=" CONFIG_FDTFILE "\0" \
- "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \
- "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \
- "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
- "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- BOOTENV
+#endif
This should probably be called something like CONFIG_EXTRA_DEFAULT_ENV_SETTINGS and the board files could contain
#define CONFIG_EXTRA_ENV_SETTINGS CONFIG_EXTRA_DEFAULT_ENV_SETTINGS \ "extra=more stuff\0" \
I would not remove any environment variables in this patch except for redundant things.
Hello Troy
Thank you for your reply. I think that all variables defined in CONFIG_EXTRA_ENV_SETTINGS are redundant with the generic distro configuration feature (except for ums). That's why I thought to replace this variable.
Advantages of this feature is: - to boot any distro on any media - have more common code between imx6 boards - manage more media than current settings - use more generic configuration (extlinux.conf)
I will prepare a new patch in order to keep current settings and set generic distro only if CONFIG_DISTRO_DEFAULTS=y
Is it ok for you?
Thanks
Fabien

In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk --- Changes for V2: - reintegration of deleted env - changes are applied only if CONFIG_DISTRO_DEFAULTS=y
configs/mx6qsabrelite_defconfig | 1 + configs/nitrogen6dl2g_defconfig | 1 + configs/nitrogen6dl_defconfig | 1 + configs/nitrogen6q2g_defconfig | 1 + configs/nitrogen6q_defconfig | 1 + configs/nitrogen6s1g_defconfig | 1 + configs/nitrogen6s_defconfig | 1 + doc/README.imx6 | 47 +++++++++++++++++++++++++++++++++++++++++ include/configs/mx6_common.h | 28 ++++++++++++++++++++++++ include/configs/nitrogen6x.h | 35 ++++++++++++++++++++++++------ 10 files changed, 111 insertions(+), 6 deletions(-)
diff --git a/configs/mx6qsabrelite_defconfig b/configs/mx6qsabrelite_defconfig index fa6139a..27b64c4 100644 --- a/configs/mx6qsabrelite_defconfig +++ b/configs/mx6qsabrelite_defconfig @@ -36,3 +36,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl2g_defconfig b/configs/nitrogen6dl2g_defconfig index 02b2462..b1344c6 100644 --- a/configs/nitrogen6dl2g_defconfig +++ b/configs/nitrogen6dl2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl_defconfig b/configs/nitrogen6dl_defconfig index 52553f6..f794c08 100644 --- a/configs/nitrogen6dl_defconfig +++ b/configs/nitrogen6dl_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q2g_defconfig b/configs/nitrogen6q2g_defconfig index 11188b7..56cebe0 100644 --- a/configs/nitrogen6q2g_defconfig +++ b/configs/nitrogen6q2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q_defconfig b/configs/nitrogen6q_defconfig index 05bf140..c150b97 100644 --- a/configs/nitrogen6q_defconfig +++ b/configs/nitrogen6q_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s1g_defconfig b/configs/nitrogen6s1g_defconfig index bb081a2..dfd096d 100644 --- a/configs/nitrogen6s1g_defconfig +++ b/configs/nitrogen6s1g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s_defconfig b/configs/nitrogen6s_defconfig index 08e91c9..5e2e693 100644 --- a/configs/nitrogen6s_defconfig +++ b/configs/nitrogen6s_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/doc/README.imx6 b/doc/README.imx6 index 1823fb2..36452f6 100644 --- a/doc/README.imx6 +++ b/doc/README.imx6 @@ -138,3 +138,50 @@ c The last "c" command tells kermit (from ckermit package in most distros) to switch from command line mode to communication mode, and when the script is finished, the U-Boot prompt is shown in the same shell. + +3. Using generic distro configuration +------------------------------------- + +In order to simplify the use of various images on various media +for imx6 boards, the configuration of the board must follow the +generic distro configuration (doc/README.distro). + +3.1. Setup uboot configuration for your board +--------------------------------------------- + +First, you have to set 'CONFIG_DISTRO_DEFAULTS=y' in your board defconfig + +Some mandatory variable are set in mx6_common.h but can be overwritten like: + - fdtfile with CONFIG_FDTFILE + - fdt_addr_r and fdt_addr with CONFIG_FDTADDR + - ramdisk_addr_r, ramdiskaddr CONFIG_RAMDISKADDR + +You also have to define BOOT_TARGET_DEVICES with available media. +For example added in include/configs/nitrogen6x.h: +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 0) \ + func(MMC, mmc, 1) \ + func(SATA, sata, 0) \ + func(USB, usb, 0) \ + func(PXE, pxe, na) \ + func(DHCP, dhcp, na) + +All this configuration should be done before '#include "mx6_common.h"' + +3.2. Setup your distribution +---------------------------- + +Set the partition containing /boot/ bootable. +Copy your kernel and device tree in /boot. +Create /boot/extlinux/extlinux.conf on your rootfs and fill it according to specification +at http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/ + +For example: + +default Buildroot + +label Buildroot + kernel /boot/zImage + append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw + fdtdir /boot + diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..d65bd8e 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000 +#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif
/* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,26 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP
+#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h> + +#ifndef CONFIG_FDTFILE +#define CONFIG_FDTFILE "undefined" +#endif + +#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_DEFAULT_ENV_SETTINGS \ + "fdtfile=" CONFIG_FDTFILE "\0" \ + "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \ + "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \ + "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ + "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ + "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \ + "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \ + "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \ + BOOTENV + +#endif + #endif diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..528e5e1 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H
-#include "mx6_common.h" - #define CONFIG_MACH_TYPE 3769
/* Size of malloc() pool */ @@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID
@@ -113,6 +111,8 @@
#define CONFIG_PREBOOT ""
+#ifndef CONFIG_DISTRO_DEFAULTS + #ifdef CONFIG_CMD_SATA #define CONFIG_DRIVE_SATA "sata " #else @@ -266,6 +266,29 @@ "done\0" \
#endif + +#else +#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" +#else +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" +#endif + +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 0) \ + func(MMC, mmc, 1) \ + func(SATA, sata, 0) \ + func(USB, usb, 0) \ + func(PXE, pxe, na) \ + func(DHCP, dhcp, na) + +#define CONFIG_EXTRA_ENV_SETTINGS \ + CONFIG_EXTRA_DEFAULT_ENV_SETTINGS + +#endif + +#include "mx6_common.h" + /* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x10000000 #define CONFIG_SYS_MEMTEST_END 0x10010000 @@ -327,4 +350,4 @@ #define CONFIG_FASTBOOT_BUF_ADDR CONFIG_SYS_LOAD_ADDR #define CONFIG_FASTBOOT_BUF_SIZE 0x07000000
-#endif /* __CONFIG_H */ +#endif /* __CONFIG_H */

On Fri, 2016-06-24 at 17:59 +0200, Fabien Lahoudere wrote:
In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk
diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..75cbc84 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000 +#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif /* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,26 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP +#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h>
Why a configure option for using the default distro options rather then just always using them?
Note that you can use the defaults without enforcing distro_bootcmd usage. (Though it would be good to get some consistent boot setup on all the mx6 devices ofcourse)
+#ifndef CONFIG_FDTFILE +#define CONFIG_FDTFILE "undefined" +#endif
Not having an fdt is bad when using distro boot commands, probably better to error here.
+#include <config_distro_bootcmd.h>
+#define CONFIG_EXTRA_ENV_SETTINGS \
- "fdtfile=" CONFIG_FDTFILE "\0" \
- "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \
- "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \
- "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
- "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- BOOTENV
+#endif
#endif diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..33658b0 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H -#include "mx6_common.h"
#define CONFIG_MACH_TYPE 3769 /* Size of malloc() pool */ @@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID @@ -113,159 +111,22 @@ #define CONFIG_PREBOOT "" -#ifdef CONFIG_CMD_SATA -#define CONFIG_DRIVE_SATA "sata " -#else -#define CONFIG_DRIVE_SATA -#endif
-#ifdef CONFIG_CMD_MMC -#define CONFIG_DRIVE_MMC "mmc " -#else -#define CONFIG_DRIVE_MMC -#endif
-#ifdef CONFIG_USB_STORAGE -#define CONFIG_DRIVE_USB "usb " +#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" #else -#define CONFIG_DRIVE_USB +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" #endif -#define CONFIG_DRIVE_TYPES CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC CONFIG_DRIVE_USB -#define CONFIG_UMSDEVS CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC
-#if defined(CONFIG_SABRELITE) -#define CONFIG_EXTRA_ENV_SETTINGS \
- "script=boot.scr\0" \
- "uimage=uImage\0" \
- "console=ttymxc1\0" \
- "fdt_high=0xffffffff\0" \
- "initrd_high=0xffffffff\0" \
- "fdt_file=imx6q-sabrelite.dtb\0" \
- "fdt_addr=0x18000000\0" \
- "boot_fdt=try\0" \
- "ip_dyn=yes\0" \
- "mmcdevs=0 1\0" \
- "mmcpart=1\0" \
- "mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
- "mmcargs=setenv bootargs console=${console},${baudrate} " \
"root=${mmcroot}\0" \
- "loadbootscript=" \
"load mmc ${mmcdev}:${mmcpart} ${loadaddr}
${script};\0" \
- "bootscript=echo Running bootscript from mmc ...; " \
"source\0" \
- "loaduimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr}
${uimage}\0" \
- "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr}
${fdt_file}\0" \
- "mmcboot=echo Booting from mmc ...; " \
"run mmcargs; " \
"if test ${boot_fdt} = yes || test ${boot_fdt} =
try; then " \
"if run loadfdt; then " \
"bootm ${loadaddr} - ${fdt_addr}; "
\
"else " \
"if test ${boot_fdt} = try; then " \
"bootm; " \
"else " \
"echo WARN: Cannot load the
DT; " \
"fi; " \
"fi; " \
"else " \
"bootm; " \
"fi;\0" \
- "netargs=setenv bootargs console=${console},${baudrate} " \
"root=/dev/nfs " \
- "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
"netboot=echo Booting from net ...; " \
"run netargs; " \
"if test ${ip_dyn} = yes; then " \
"setenv get_cmd dhcp; " \
"else " \
"setenv get_cmd tftp; " \
"fi; " \
"${get_cmd} ${uimage}; " \
"if test ${boot_fdt} = yes || test ${boot_fdt} =
try; then " \
"if ${get_cmd} ${fdt_addr} ${fdt_file}; then
" \
"bootm ${loadaddr} - ${fdt_addr}; "
\
"else " \
"if test ${boot_fdt} = try; then " \
"bootm; " \
"else " \
"echo WARN: Cannot load the
DT; " \
"fi; " \
"fi; " \
"else " \
"bootm; " \
"fi;\0"
+#define BOOT_TARGET_DEVICES(func) \
- func(MMC, mmc, 0) \
- func(MMC, mmc, 1) \
- func(SATA, sata, 0) \
- func(USB, usb, 0) \
- func(PXE, pxe, na) \
- func(DHCP, dhcp, na)
You probably don't want to toss out all the legacy boot stuff. See commit bc3199fd1875f89e9e1fb2af45665c4a718217b9 for an example of how to integrate older hardcoded boot commands with the distro boot commands.
Do take special care about the ordering, It's probably undesirable to have attempts for network booting happening before e.g. trying to do an upgrade.

On 28/06/16 12:58, Sjoerd Simons wrote:
On Fri, 2016-06-24 at 17:59 +0200, Fabien Lahoudere wrote:
In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk
diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..75cbc84 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000 +#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif
/* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,26 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP
+#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h>
Why a configure option for using the default distro options rather then just always using them?
Note that you can use the defaults without enforcing distro_bootcmd usage. (Though it would be good to get some consistent boot setup on all the mx6 devices ofcourse)
Because #include <config_distro_defaults.h> need CONFIG_DISTRO_DEFAULTS=y else it does not compile.
And keeping this configure option will let the end user chose u-boot behaviour without having an heavy env.
+#ifndef CONFIG_FDTFILE +#define CONFIG_FDTFILE "undefined" +#endif
Not having an fdt is bad when using distro boot commands, probably better to error here.
Ok. I agree and I will fix this.
+#include <config_distro_bootcmd.h>
+#define CONFIG_EXTRA_ENV_SETTINGS \
- "fdtfile=" CONFIG_FDTFILE "\0" \
- "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \
- "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \
- "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
- "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- BOOTENV
+#endif
#endif diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..33658b0 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H
-#include "mx6_common.h"
#define CONFIG_MACH_TYPE 3769
/* Size of malloc() pool */ @@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID
@@ -113,159 +111,22 @@
#define CONFIG_PREBOOT ""
-#ifdef CONFIG_CMD_SATA -#define CONFIG_DRIVE_SATA "sata " -#else -#define CONFIG_DRIVE_SATA -#endif
-#ifdef CONFIG_CMD_MMC -#define CONFIG_DRIVE_MMC "mmc " -#else -#define CONFIG_DRIVE_MMC -#endif
-#ifdef CONFIG_USB_STORAGE -#define CONFIG_DRIVE_USB "usb " +#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" #else -#define CONFIG_DRIVE_USB +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" #endif
-#define CONFIG_DRIVE_TYPES CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC CONFIG_DRIVE_USB -#define CONFIG_UMSDEVS CONFIG_DRIVE_SATA CONFIG_DRIVE_MMC
-#if defined(CONFIG_SABRELITE) -#define CONFIG_EXTRA_ENV_SETTINGS \
- "script=boot.scr\0" \
- "uimage=uImage\0" \
- "console=ttymxc1\0" \
- "fdt_high=0xffffffff\0" \
- "initrd_high=0xffffffff\0" \
- "fdt_file=imx6q-sabrelite.dtb\0" \
- "fdt_addr=0x18000000\0" \
- "boot_fdt=try\0" \
- "ip_dyn=yes\0" \
- "mmcdevs=0 1\0" \
- "mmcpart=1\0" \
- "mmcroot=/dev/mmcblk0p2 rootwait rw\0" \
- "mmcargs=setenv bootargs console=${console},${baudrate} " \
"root=${mmcroot}\0" \
- "loadbootscript=" \
"load mmc ${mmcdev}:${mmcpart} ${loadaddr}
${script};\0" \
- "bootscript=echo Running bootscript from mmc ...; " \
"source\0" \
- "loaduimage=load mmc ${mmcdev}:${mmcpart} ${loadaddr}
${uimage}\0" \
- "loadfdt=load mmc ${mmcdev}:${mmcpart} ${fdt_addr}
${fdt_file}\0" \
- "mmcboot=echo Booting from mmc ...; " \
"run mmcargs; " \
"if test ${boot_fdt} = yes || test ${boot_fdt} =
try; then " \
"if run loadfdt; then " \
"bootm ${loadaddr} - ${fdt_addr}; "
\
"else " \
"if test ${boot_fdt} = try; then " \
"bootm; " \
"else " \
"echo WARN: Cannot load the
DT; " \
"fi; " \
"fi; " \
"else " \
"bootm; " \
"fi;\0" \
- "netargs=setenv bootargs console=${console},${baudrate} " \
"root=/dev/nfs " \
- "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
"netboot=echo Booting from net ...; " \
"run netargs; " \
"if test ${ip_dyn} = yes; then " \
"setenv get_cmd dhcp; " \
"else " \
"setenv get_cmd tftp; " \
"fi; " \
"${get_cmd} ${uimage}; " \
"if test ${boot_fdt} = yes || test ${boot_fdt} =
try; then " \
"if ${get_cmd} ${fdt_addr} ${fdt_file}; then
" \
"bootm ${loadaddr} - ${fdt_addr}; "
\
"else " \
"if test ${boot_fdt} = try; then " \
"bootm; " \
"else " \
"echo WARN: Cannot load the
DT; " \
"fi; " \
"fi; " \
"else " \
"bootm; " \
"fi;\0"
+#define BOOT_TARGET_DEVICES(func) \
- func(MMC, mmc, 0) \
- func(MMC, mmc, 1) \
- func(SATA, sata, 0) \
- func(USB, usb, 0) \
- func(PXE, pxe, na) \
- func(DHCP, dhcp, na)
You probably don't want to toss out all the legacy boot stuff. See commit bc3199fd1875f89e9e1fb2af45665c4a718217b9 for an example of how to integrate older hardcoded boot commands with the distro boot commands.
Do take special care about the ordering, It's probably undesirable to have attempts for network booting happening before e.g. trying to do an upgrade.
Yes I see the commit but the problem with the nitrogen6x.h is that there is two different env. So if we add LEGACY_MMC, we need to redefine mmcboot depending on what board is used. The goal is to simplify so I prefer not to add this legacy stuff. I you think it is mandatory, I can add it and redefine mmcboot if necessary.

In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk --- Changes for V2: - reintegration of deleted env - changes are applied only if CONFIG_DISTRO_DEFAULTS=y
Changes for V3: - remove undefined device tree configs/mx6qsabrelite_defconfig | 1 + configs/nitrogen6dl2g_defconfig | 1 + configs/nitrogen6dl_defconfig | 1 + configs/nitrogen6q2g_defconfig | 1 + configs/nitrogen6q_defconfig | 1 + configs/nitrogen6s1g_defconfig | 1 + configs/nitrogen6s_defconfig | 1 + doc/README.imx6 | 47 +++++++++++++++++++++++++++++++++++++++++ include/configs/mx6_common.h | 24 +++++++++++++++++++++ include/configs/nitrogen6x.h | 36 +++++++++++++++++++++++++------ 10 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/configs/mx6qsabrelite_defconfig b/configs/mx6qsabrelite_defconfig index fa6139a..27b64c4 100644 --- a/configs/mx6qsabrelite_defconfig +++ b/configs/mx6qsabrelite_defconfig @@ -36,3 +36,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl2g_defconfig b/configs/nitrogen6dl2g_defconfig index 02b2462..b1344c6 100644 --- a/configs/nitrogen6dl2g_defconfig +++ b/configs/nitrogen6dl2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl_defconfig b/configs/nitrogen6dl_defconfig index 52553f6..f794c08 100644 --- a/configs/nitrogen6dl_defconfig +++ b/configs/nitrogen6dl_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q2g_defconfig b/configs/nitrogen6q2g_defconfig index 11188b7..56cebe0 100644 --- a/configs/nitrogen6q2g_defconfig +++ b/configs/nitrogen6q2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q_defconfig b/configs/nitrogen6q_defconfig index 05bf140..c150b97 100644 --- a/configs/nitrogen6q_defconfig +++ b/configs/nitrogen6q_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s1g_defconfig b/configs/nitrogen6s1g_defconfig index bb081a2..dfd096d 100644 --- a/configs/nitrogen6s1g_defconfig +++ b/configs/nitrogen6s1g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s_defconfig b/configs/nitrogen6s_defconfig index 08e91c9..5e2e693 100644 --- a/configs/nitrogen6s_defconfig +++ b/configs/nitrogen6s_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/doc/README.imx6 b/doc/README.imx6 index 1823fb2..36452f6 100644 --- a/doc/README.imx6 +++ b/doc/README.imx6 @@ -138,3 +138,50 @@ c The last "c" command tells kermit (from ckermit package in most distros) to switch from command line mode to communication mode, and when the script is finished, the U-Boot prompt is shown in the same shell. + +3. Using generic distro configuration +------------------------------------- + +In order to simplify the use of various images on various media +for imx6 boards, the configuration of the board must follow the +generic distro configuration (doc/README.distro). + +3.1. Setup uboot configuration for your board +--------------------------------------------- + +First, you have to set 'CONFIG_DISTRO_DEFAULTS=y' in your board defconfig + +Some mandatory variable are set in mx6_common.h but can be overwritten like: + - fdtfile with CONFIG_FDTFILE + - fdt_addr_r and fdt_addr with CONFIG_FDTADDR + - ramdisk_addr_r, ramdiskaddr CONFIG_RAMDISKADDR + +You also have to define BOOT_TARGET_DEVICES with available media. +For example added in include/configs/nitrogen6x.h: +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 0) \ + func(MMC, mmc, 1) \ + func(SATA, sata, 0) \ + func(USB, usb, 0) \ + func(PXE, pxe, na) \ + func(DHCP, dhcp, na) + +All this configuration should be done before '#include "mx6_common.h"' + +3.2. Setup your distribution +---------------------------- + +Set the partition containing /boot/ bootable. +Copy your kernel and device tree in /boot. +Create /boot/extlinux/extlinux.conf on your rootfs and fill it according to specification +at http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/ + +For example: + +default Buildroot + +label Buildroot + kernel /boot/zImage + append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw + fdtdir /boot + diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..4a665d2 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000 +#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif
/* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,22 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP
+#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h> + +#include <config_distro_bootcmd.h> + +#define CONFIG_EXTRA_DEFAULT_ENV_SETTINGS \ + "fdtfile=" CONFIG_FDTFILE "\0" \ + "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \ + "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \ + "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ + "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \ + "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \ + "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \ + "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \ + BOOTENV + +#endif + #endif diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..c1a3a47 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H
-#include "mx6_common.h" - #define CONFIG_MACH_TYPE 3769
/* Size of malloc() pool */ @@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID
@@ -113,6 +111,8 @@
#define CONFIG_PREBOOT ""
+#ifndef CONFIG_DISTRO_DEFAULTS + #ifdef CONFIG_CMD_SATA #define CONFIG_DRIVE_SATA "sata " #else @@ -266,6 +266,30 @@ "done\0" \
#endif + +#else + +#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" +#else +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" +#endif + +#define BOOT_TARGET_DEVICES(func) \ + func(MMC, mmc, 0) \ + func(MMC, mmc, 1) \ + func(SATA, sata, 0) \ + func(USB, usb, 0) \ + func(PXE, pxe, na) \ + func(DHCP, dhcp, na) + +#define CONFIG_EXTRA_ENV_SETTINGS \ + CONFIG_EXTRA_DEFAULT_ENV_SETTINGS + +#endif + +#include "mx6_common.h" + /* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x10000000 #define CONFIG_SYS_MEMTEST_END 0x10010000 @@ -327,4 +351,4 @@ #define CONFIG_FASTBOOT_BUF_ADDR CONFIG_SYS_LOAD_ADDR #define CONFIG_FASTBOOT_BUF_SIZE 0x07000000
-#endif /* __CONFIG_H */ +#endif /* __CONFIG_H */

Hi Fabien,
On 29/06/2016 09:05, Fabien Lahoudere wrote:
In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk
Changes for V2:
- reintegration of deleted env
- changes are applied only if CONFIG_DISTRO_DEFAULTS=y
Changes for V3:
- remove undefined device tree
configs/mx6qsabrelite_defconfig | 1 + configs/nitrogen6dl2g_defconfig | 1 + configs/nitrogen6dl_defconfig | 1 + configs/nitrogen6q2g_defconfig | 1 + configs/nitrogen6q_defconfig | 1 + configs/nitrogen6s1g_defconfig | 1 + configs/nitrogen6s_defconfig | 1 + doc/README.imx6 | 47 +++++++++++++++++++++++++++++++++++++++++ include/configs/mx6_common.h | 24 +++++++++++++++++++++ include/configs/nitrogen6x.h | 36 +++++++++++++++++++++++++------ 10 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/configs/mx6qsabrelite_defconfig b/configs/mx6qsabrelite_defconfig index fa6139a..27b64c4 100644 --- a/configs/mx6qsabrelite_defconfig +++ b/configs/mx6qsabrelite_defconfig @@ -36,3 +36,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl2g_defconfig b/configs/nitrogen6dl2g_defconfig index 02b2462..b1344c6 100644 --- a/configs/nitrogen6dl2g_defconfig +++ b/configs/nitrogen6dl2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl_defconfig b/configs/nitrogen6dl_defconfig index 52553f6..f794c08 100644 --- a/configs/nitrogen6dl_defconfig +++ b/configs/nitrogen6dl_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q2g_defconfig b/configs/nitrogen6q2g_defconfig index 11188b7..56cebe0 100644 --- a/configs/nitrogen6q2g_defconfig +++ b/configs/nitrogen6q2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q_defconfig b/configs/nitrogen6q_defconfig index 05bf140..c150b97 100644 --- a/configs/nitrogen6q_defconfig +++ b/configs/nitrogen6q_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s1g_defconfig b/configs/nitrogen6s1g_defconfig index bb081a2..dfd096d 100644 --- a/configs/nitrogen6s1g_defconfig +++ b/configs/nitrogen6s1g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s_defconfig b/configs/nitrogen6s_defconfig index 08e91c9..5e2e693 100644 --- a/configs/nitrogen6s_defconfig +++ b/configs/nitrogen6s_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/doc/README.imx6 b/doc/README.imx6 index 1823fb2..36452f6 100644 --- a/doc/README.imx6 +++ b/doc/README.imx6 @@ -138,3 +138,50 @@ c The last "c" command tells kermit (from ckermit package in most distros) to switch from command line mode to communication mode, and when the script is finished, the U-Boot prompt is shown in the same shell.
+3. Using generic distro configuration +-------------------------------------
+In order to simplify the use of various images on various media +for imx6 boards, the configuration of the board must follow the +generic distro configuration (doc/README.distro).
+3.1. Setup uboot configuration for your board +---------------------------------------------
+First, you have to set 'CONFIG_DISTRO_DEFAULTS=y' in your board defconfig
+Some mandatory variable are set in mx6_common.h but can be overwritten like:
- fdtfile with CONFIG_FDTFILE
- fdt_addr_r and fdt_addr with CONFIG_FDTADDR
- ramdisk_addr_r, ramdiskaddr CONFIG_RAMDISKADDR
+You also have to define BOOT_TARGET_DEVICES with available media. +For example added in include/configs/nitrogen6x.h: +#define BOOT_TARGET_DEVICES(func) \
- func(MMC, mmc, 0) \
- func(MMC, mmc, 1) \
- func(SATA, sata, 0) \
- func(USB, usb, 0) \
- func(PXE, pxe, na) \
- func(DHCP, dhcp, na)
+All this configuration should be done before '#include "mx6_common.h"'
+3.2. Setup your distribution +----------------------------
+Set the partition containing /boot/ bootable. +Copy your kernel and device tree in /boot. +Create /boot/extlinux/extlinux.conf on your rootfs and fill it according to specification +at http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/
+For example:
+default Buildroot
+label Buildroot
- kernel /boot/zImage
- append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw
- fdtdir /boot
diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..4a665d2 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000
I am afraid that this can be a problem. I am not sure that all boards can share the same address.
On most boards, mx6_common is included at the beginning of the configuration file. This means that CONFIG_FDTADDR is surely not set, and it will be set to 0x18000000.
For some boards this could be flawless: for example, I see the "aristainetos" board, it uses as address 0x14000000. But it is set later. It remains just confusing that a CONFIG_FDTADDR is set to a different address as used.
But for other boards I am quite unsure - it could generate some problems.
+#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif
/* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,22 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP
+#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h>
+#include <config_distro_bootcmd.h>
+#define CONFIG_EXTRA_DEFAULT_ENV_SETTINGS \
- "fdtfile=" CONFIG_FDTFILE "\0" \
- "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \
- "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \
- "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
- "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- BOOTENV
+#endif
#endif diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..c1a3a47 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H
-#include "mx6_common.h"
#define CONFIG_MACH_TYPE 3769
/* Size of malloc() pool */ @@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID
@@ -113,6 +111,8 @@
#define CONFIG_PREBOOT ""
+#ifndef CONFIG_DISTRO_DEFAULTS
#ifdef CONFIG_CMD_SATA #define CONFIG_DRIVE_SATA "sata " #else @@ -266,6 +266,30 @@ "done\0" \
#endif
+#else
+#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" +#else +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" +#endif
+#define BOOT_TARGET_DEVICES(func) \
- func(MMC, mmc, 0) \
- func(MMC, mmc, 1) \
- func(SATA, sata, 0) \
- func(USB, usb, 0) \
- func(PXE, pxe, na) \
- func(DHCP, dhcp, na)
+#define CONFIG_EXTRA_ENV_SETTINGS \
- CONFIG_EXTRA_DEFAULT_ENV_SETTINGS
+#endif
+#include "mx6_common.h"
/* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x10000000 #define CONFIG_SYS_MEMTEST_END 0x10010000 @@ -327,4 +351,4 @@ #define CONFIG_FASTBOOT_BUF_ADDR CONFIG_SYS_LOAD_ADDR #define CONFIG_FASTBOOT_BUF_SIZE 0x07000000
-#endif /* __CONFIG_H */ +#endif /* __CONFIG_H */
Best regards, Stefano Babic

Hi Stefano,
Thank you for your comments.
On 13/07/2016 16:28, Stefano Babic wrote:
Hi Fabien,
On 29/06/2016 09:05, Fabien Lahoudere wrote:
In order to simplify the use of various images on various media for nitrogen6x, the configuration of the board must follow the generic distro configuration (doc/README.distro).
In order to boot your old rootfs, move your kernel and your device tree in /boot/. Then create /boot/extlinux/extlinux.conf with for example:
default Buildroot
label Buildroot kernel /boot/zImage append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw fdtdir /boot
Signed-off-by: Fabien Lahoudere fabien.lahoudere@collabora.co.uk
Changes for V2:
- reintegration of deleted env
- changes are applied only if CONFIG_DISTRO_DEFAULTS=y
Changes for V3:
- remove undefined device tree
configs/mx6qsabrelite_defconfig | 1 + configs/nitrogen6dl2g_defconfig | 1 + configs/nitrogen6dl_defconfig | 1 + configs/nitrogen6q2g_defconfig | 1 + configs/nitrogen6q_defconfig | 1 + configs/nitrogen6s1g_defconfig | 1 + configs/nitrogen6s_defconfig | 1 + doc/README.imx6 | 47 +++++++++++++++++++++++++++++++++++++++++ include/configs/mx6_common.h | 24 +++++++++++++++++++++ include/configs/nitrogen6x.h | 36 +++++++++++++++++++++++++------ 10 files changed, 108 insertions(+), 6 deletions(-)
diff --git a/configs/mx6qsabrelite_defconfig b/configs/mx6qsabrelite_defconfig index fa6139a..27b64c4 100644 --- a/configs/mx6qsabrelite_defconfig +++ b/configs/mx6qsabrelite_defconfig @@ -36,3 +36,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl2g_defconfig b/configs/nitrogen6dl2g_defconfig index 02b2462..b1344c6 100644 --- a/configs/nitrogen6dl2g_defconfig +++ b/configs/nitrogen6dl2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6dl_defconfig b/configs/nitrogen6dl_defconfig index 52553f6..f794c08 100644 --- a/configs/nitrogen6dl_defconfig +++ b/configs/nitrogen6dl_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q2g_defconfig b/configs/nitrogen6q2g_defconfig index 11188b7..56cebe0 100644 --- a/configs/nitrogen6q2g_defconfig +++ b/configs/nitrogen6q2g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6q_defconfig b/configs/nitrogen6q_defconfig index 05bf140..c150b97 100644 --- a/configs/nitrogen6q_defconfig +++ b/configs/nitrogen6q_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s1g_defconfig b/configs/nitrogen6s1g_defconfig index bb081a2..dfd096d 100644 --- a/configs/nitrogen6s1g_defconfig +++ b/configs/nitrogen6s1g_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/configs/nitrogen6s_defconfig b/configs/nitrogen6s_defconfig index 08e91c9..5e2e693 100644 --- a/configs/nitrogen6s_defconfig +++ b/configs/nitrogen6s_defconfig @@ -34,3 +34,4 @@ CONFIG_G_DNL_MANUFACTURER="Boundary" CONFIG_G_DNL_VENDOR_NUM=0x0525 CONFIG_G_DNL_PRODUCT_NUM=0xa4a5 CONFIG_OF_LIBFDT=y +CONFIG_DISTRO_DEFAULTS=y \ No newline at end of file diff --git a/doc/README.imx6 b/doc/README.imx6 index 1823fb2..36452f6 100644 --- a/doc/README.imx6 +++ b/doc/README.imx6 @@ -138,3 +138,50 @@ c The last "c" command tells kermit (from ckermit package in most distros) to switch from command line mode to communication mode, and when the script is finished, the U-Boot prompt is shown in the same shell.
+3. Using generic distro configuration +-------------------------------------
+In order to simplify the use of various images on various media +for imx6 boards, the configuration of the board must follow the +generic distro configuration (doc/README.distro).
+3.1. Setup uboot configuration for your board +---------------------------------------------
+First, you have to set 'CONFIG_DISTRO_DEFAULTS=y' in your board defconfig
+Some mandatory variable are set in mx6_common.h but can be overwritten like:
- fdtfile with CONFIG_FDTFILE
- fdt_addr_r and fdt_addr with CONFIG_FDTADDR
- ramdisk_addr_r, ramdiskaddr CONFIG_RAMDISKADDR
+You also have to define BOOT_TARGET_DEVICES with available media. +For example added in include/configs/nitrogen6x.h: +#define BOOT_TARGET_DEVICES(func) \
- func(MMC, mmc, 0) \
- func(MMC, mmc, 1) \
- func(SATA, sata, 0) \
- func(USB, usb, 0) \
- func(PXE, pxe, na) \
- func(DHCP, dhcp, na)
+All this configuration should be done before '#include "mx6_common.h"'
+3.2. Setup your distribution +----------------------------
+Set the partition containing /boot/ bootable. +Copy your kernel and device tree in /boot. +Create /boot/extlinux/extlinux.conf on your rootfs and fill it according to specification +at http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/
+For example:
+default Buildroot
+label Buildroot
- kernel /boot/zImage
- append console=ttymxc1,115200 root=/dev/mmcblk0p1 rootwait rw
- fdtdir /boot
diff --git a/include/configs/mx6_common.h b/include/configs/mx6_common.h index fb49322..4a665d2 100644 --- a/include/configs/mx6_common.h +++ b/include/configs/mx6_common.h @@ -58,6 +58,12 @@ #endif #endif #define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR +#ifndef CONFIG_FDTADDR +#define CONFIG_FDTADDR 0x18000000
I am afraid that this can be a problem. I am not sure that all boards can share the same address.
On most boards, mx6_common is included at the beginning of the configuration file. This means that CONFIG_FDTADDR is surely not set, and it will be set to 0x18000000.
For some boards this could be flawless: for example, I see the "aristainetos" board, it uses as address 0x14000000. But it is set later. It remains just confusing that a CONFIG_FDTADDR is set to a different address as used.
But for other boards I am quite unsure - it could generate some problems.
I will remove those lines that just lead to a compilation error only if we forgot to set CONFIG_FDTADDR when CONFIG_DISTRO_DEFAULTS=y. Is this change acceptable for you?
+#endif +#ifndef CONFIG_RAMDISKADDR +#define CONFIG_RAMDISKADDR 0x13000000 +#endif
/* allow to overwrite serial and ethaddr */ #define CONFIG_ENV_OVERWRITE @@ -93,4 +99,22 @@ #define CONFIG_CMD_FUSE #define CONFIG_MXC_OCOTP
+#ifdef CONFIG_DISTRO_DEFAULTS +#include <config_distro_defaults.h>
+#include <config_distro_bootcmd.h>
+#define CONFIG_EXTRA_DEFAULT_ENV_SETTINGS \
- "fdtfile=" CONFIG_FDTFILE "\0" \
- "fdt_addr_r=" __stringify(CONFIG_FDTADDR) "\0" \
- "fdt_addr=" __stringify(CONFIG_FDTADDR) "\0" \
- "kernel_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "pxefile_addr_r=" __stringify(CONFIG_LOADADDR) "\0" \
- "scriptaddr=" __stringify(CONFIG_LOADADDR) "\0" \
- "ramdisk_addr_r=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- "ramdiskaddr=" __stringify(CONFIG_RAMDISKADDR) "\0" \
- BOOTENV
+#endif
- #endif
diff --git a/include/configs/nitrogen6x.h b/include/configs/nitrogen6x.h index b651eb3..c1a3a47 100644 --- a/include/configs/nitrogen6x.h +++ b/include/configs/nitrogen6x.h @@ -10,8 +10,6 @@ #ifndef __CONFIG_H #define __CONFIG_H
-#include "mx6_common.h"
#define CONFIG_MACH_TYPE 3769
/* Size of malloc() pool */
@@ -38,9 +36,9 @@ /* I2C Configs */ #define CONFIG_SYS_I2C #define CONFIG_SYS_I2C_MXC -#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ -#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ -#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ #define CONFIG_SYS_I2C_SPEED 100000 #define CONFIG_I2C_EDID
@@ -113,6 +111,8 @@
#define CONFIG_PREBOOT ""
+#ifndef CONFIG_DISTRO_DEFAULTS
- #ifdef CONFIG_CMD_SATA #define CONFIG_DRIVE_SATA "sata " #else
@@ -266,6 +266,30 @@ "done\0" \
#endif
+#else
+#if defined(CONFIG_SABRELITE) +#define CONFIG_FDTFILE "imx6q-sabrelite.dtb" +#else +#define CONFIG_FDTFILE "imx6q-nitrogen6x.dtb" +#endif
+#define BOOT_TARGET_DEVICES(func) \
- func(MMC, mmc, 0) \
- func(MMC, mmc, 1) \
- func(SATA, sata, 0) \
- func(USB, usb, 0) \
- func(PXE, pxe, na) \
- func(DHCP, dhcp, na)
+#define CONFIG_EXTRA_ENV_SETTINGS \
- CONFIG_EXTRA_DEFAULT_ENV_SETTINGS
+#endif
+#include "mx6_common.h"
- /* Miscellaneous configurable options */ #define CONFIG_SYS_MEMTEST_START 0x10000000 #define CONFIG_SYS_MEMTEST_END 0x10010000
@@ -327,4 +351,4 @@ #define CONFIG_FASTBOOT_BUF_ADDR CONFIG_SYS_LOAD_ADDR #define CONFIG_FASTBOOT_BUF_SIZE 0x07000000
-#endif /* __CONFIG_H */ +#endif /* __CONFIG_H */
Best regards, Stefano Babic

Hi Fabien,
On 20/07/2016 10:07, Fabien Lahoudere wrote:
On most boards, mx6_common is included at the beginning of the configuration file. This means that CONFIG_FDTADDR is surely not set, and it will be set to 0x18000000.
For some boards this could be flawless: for example, I see the "aristainetos" board, it uses as address 0x14000000. But it is set later. It remains just confusing that a CONFIG_FDTADDR is set to a different address as used.
But for other boards I am quite unsure - it could generate some problems.
I will remove those lines that just lead to a compilation error only if we forgot to set CONFIG_FDTADDR when CONFIG_DISTRO_DEFAULTS=y. Is this change acceptable for you?
I agree - this lets boards that do not use CONFIG_DISTRO unchanged.
Best regards, Stefano Babic
participants (4)
-
Fabien Lahoudere
-
Sjoerd Simons
-
Stefano Babic
-
Troy Kisky