[U-Boot] odroid-c2: Enable distro boot

Message ID 1478034714-8743-1-git-send-email-afaerber@suse.de
State Superseded
Delegated to: Minkyu Kang
Headers show

Commit Message

Andreas Färber Nov. 1, 2016, 9:11 p.m.
Use the generic "distro" boot framework to enable automatic DHCP boot.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 Kconfig                             |  2 +-
 configs/odroid-c2_defconfig         |  1 -
 include/configs/meson-gxbb-common.h | 13 +++++++++++++
 include/configs/odroid-c2.h         |  2 ++
 4 files changed, 16 insertions(+), 2 deletions(-)

Comments

Alexander Graf Nov. 1, 2016, 9:19 p.m. | #1
On 01/11/2016 22:11, Andreas Färber wrote:
> Use the generic "distro" boot framework to enable automatic DHCP boot.

Thanks :)

>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
> ---
>  Kconfig                             |  2 +-
>  configs/odroid-c2_defconfig         |  1 -
>  include/configs/meson-gxbb-common.h | 13 +++++++++++++
>  include/configs/odroid-c2.h         |  2 ++
>  4 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/Kconfig b/Kconfig
> index 1263d0b..3c085cf 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -55,7 +55,7 @@ config CC_OPTIMIZE_FOR_SIZE
>
>  config DISTRO_DEFAULTS
>  	bool "Select defaults suitable for booting general purpose Linux distributions"
> -	default y if ARCH_SUNXI
> +	default y if ARCH_MESON || ARCH_SUNXI
>  	default n
>  	select CMD_BOOTZ if ARM && !ARM64
>  	select CMD_BOOTI if ARM64
> diff --git a/configs/odroid-c2_defconfig b/configs/odroid-c2_defconfig
> index 9db718c..dfc19d9 100644
> --- a/configs/odroid-c2_defconfig
> +++ b/configs/odroid-c2_defconfig
> @@ -12,7 +12,6 @@ CONFIG_HUSH_PARSER=y
>  # CONFIG_CMD_IMLS is not set
>  # CONFIG_CMD_LOADS is not set
>  # CONFIG_CMD_FPGA is not set
> -# CONFIG_CMD_SOURCE is not set
>  # CONFIG_CMD_SETEXPR is not set
>  CONFIG_OF_CONTROL=y
>  CONFIG_NET_RANDOM_ETHADDR=y
> diff --git a/include/configs/meson-gxbb-common.h b/include/configs/meson-gxbb-common.h
> index 3bba2e6..0c467fe 100644
> --- a/include/configs/meson-gxbb-common.h
> +++ b/include/configs/meson-gxbb-common.h
> @@ -40,4 +40,17 @@
>
>  #include <config_distro_defaults.h>
>
> +#define BOOT_TARGET_DEVICES(func) \
> +	func(DHCP, dhcp, na)

Does the board have more common I/O available than Ethernet? MMC? SATA? 
If so, please add those too :).

> +#include <config_distro_bootcmd.h>
> +
> +#define CONFIG_EXTRA_ENV_SETTINGS \
> +	"fdt_addr_r=0x01000000\0" \

This puts the device tree at 16MB. I don't know how smart the kernel is 
these days about accessing

   a) critical memory below its own starting point
   b) memory that might collide with its own relocation point

so to be safe I think you're better off putting the device tree 
somewhere higher up. Maybe around 800MB?


Alex

> +	"scriptaddr=0x1f000000\0" \
> +	"kernel_addr_r=0x20000000\0" \
> +	"pxefile_addr_r=0x20000000\0" \
> +	"ramdisk_addr_r=0x28000000\0" \
> +	MESON_FDTFILE_SETTING \
> +	BOOTENV
> +
>  #endif /* __MESON_GXBB_COMMON_CONFIG_H */
> diff --git a/include/configs/odroid-c2.h b/include/configs/odroid-c2.h
> index 1d5b3d5..bf7e1af 100644
> --- a/include/configs/odroid-c2.h
> +++ b/include/configs/odroid-c2.h
> @@ -12,6 +12,8 @@
>  #define CONFIG_CONS_INDEX		0
>  #define CONFIG_BAUDRATE			115200
>
> +#define MESON_FDTFILE_SETTING "fdtfile=amlogic/meson-gxbb-odroidc2.dtb\0"
> +
>  #include <configs/meson-gxbb-common.h>
>
>  #endif /* __CONFIG_H */
>
Andreas Färber Nov. 1, 2016, 9:51 p.m. | #2
Hi Alex,

Am 01.11.2016 um 22:19 schrieb Alexander Graf:
> On 01/11/2016 22:11, Andreas Färber wrote:
>> diff --git a/include/configs/meson-gxbb-common.h
>> b/include/configs/meson-gxbb-common.h
>> index 3bba2e6..0c467fe 100644
>> --- a/include/configs/meson-gxbb-common.h
>> +++ b/include/configs/meson-gxbb-common.h
>> @@ -40,4 +40,17 @@
>>
>>  #include <config_distro_defaults.h>
>>
>> +#define BOOT_TARGET_DEVICES(func) \
>> +    func(DHCP, dhcp, na)
> 
> Does the board have more common I/O available than Ethernet? MMC? SATA?

The board yes, U-Boot no. :) That's why I needed to get PXE to work. ;)
Thanks for your help.

FTR I noticed that in v2016.11-rc3 `bootp; bootefi 0x01000000` leads to
an odd $net_{default,efinet0}_mac in GRUB. CONFIG_DISTRO_DEFAULTS
(pulling in CONFIG_CMD_DHCP) resolved this, even when not booting
through the distro framework as before.

BTW it was unclear to me why CONFIG_CMD_SOURCE was disabled in the
defconfig - the distro framework emits an error if missing when it first
tries to execute the PXE file as script, therefore restoring the default
of enabling.

> If so, please add those too :).
> 
>> +#include <config_distro_bootcmd.h>
>> +
>> +#define CONFIG_EXTRA_ENV_SETTINGS \
>> +    "fdt_addr_r=0x01000000\0" \
> 
> This puts the device tree at 16MB. I don't know how smart the kernel is
> these days about accessing
> 
>   a) critical memory below its own starting point
>   b) memory that might collide with its own relocation point
> 
> so to be safe I think you're better off putting the device tree
> somewhere higher up. Maybe around 800MB?

The fdt and kernel addresses were adopted from the vendor U-Boot and
they worked for my PXE GRUB setup. ramdisk_addr_r was chosen by me and
is untested.

That said, maybe the linux-amlogic people have some input here.

Cheers,
Andreas

>> +    "scriptaddr=0x1f000000\0" \
>> +    "kernel_addr_r=0x20000000\0" \
>> +    "pxefile_addr_r=0x20000000\0" \
>> +    "ramdisk_addr_r=0x28000000\0" \
>> +    MESON_FDTFILE_SETTING \
>> +    BOOTENV
>> +
>>  #endif /* __MESON_GXBB_COMMON_CONFIG_H */
[snip]

Patch

diff --git a/Kconfig b/Kconfig
index 1263d0b..3c085cf 100644
--- a/Kconfig
+++ b/Kconfig
@@ -55,7 +55,7 @@  config CC_OPTIMIZE_FOR_SIZE
 
 config DISTRO_DEFAULTS
 	bool "Select defaults suitable for booting general purpose Linux distributions"
-	default y if ARCH_SUNXI
+	default y if ARCH_MESON || ARCH_SUNXI
 	default n
 	select CMD_BOOTZ if ARM && !ARM64
 	select CMD_BOOTI if ARM64
diff --git a/configs/odroid-c2_defconfig b/configs/odroid-c2_defconfig
index 9db718c..dfc19d9 100644
--- a/configs/odroid-c2_defconfig
+++ b/configs/odroid-c2_defconfig
@@ -12,7 +12,6 @@  CONFIG_HUSH_PARSER=y
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_LOADS is not set
 # CONFIG_CMD_FPGA is not set
-# CONFIG_CMD_SOURCE is not set
 # CONFIG_CMD_SETEXPR is not set
 CONFIG_OF_CONTROL=y
 CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/include/configs/meson-gxbb-common.h b/include/configs/meson-gxbb-common.h
index 3bba2e6..0c467fe 100644
--- a/include/configs/meson-gxbb-common.h
+++ b/include/configs/meson-gxbb-common.h
@@ -40,4 +40,17 @@ 
 
 #include <config_distro_defaults.h>
 
+#define BOOT_TARGET_DEVICES(func) \
+	func(DHCP, dhcp, na)
+#include <config_distro_bootcmd.h>
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+	"fdt_addr_r=0x01000000\0" \
+	"scriptaddr=0x1f000000\0" \
+	"kernel_addr_r=0x20000000\0" \
+	"pxefile_addr_r=0x20000000\0" \
+	"ramdisk_addr_r=0x28000000\0" \
+	MESON_FDTFILE_SETTING \
+	BOOTENV
+
 #endif /* __MESON_GXBB_COMMON_CONFIG_H */
diff --git a/include/configs/odroid-c2.h b/include/configs/odroid-c2.h
index 1d5b3d5..bf7e1af 100644
--- a/include/configs/odroid-c2.h
+++ b/include/configs/odroid-c2.h
@@ -12,6 +12,8 @@ 
 #define CONFIG_CONS_INDEX		0
 #define CONFIG_BAUDRATE			115200
 
+#define MESON_FDTFILE_SETTING "fdtfile=amlogic/meson-gxbb-odroidc2.dtb\0"
+
 #include <configs/meson-gxbb-common.h>
 
 #endif /* __CONFIG_H */