[U-Boot] [PATCH 0/5] davinci: omapl138_lcdk: patch DT with MAC Address

This patch series adds support for loading the DT from EMMC when mmc boot is used. The DT is patched with the MAC address read on the EEPROM before booting the kernel. This allow to not get a new mac address assigned randomly by the kernel on every boot.
This patch series can be applied independently of [1] and [2], but the mac address in Linux will be random until both patches are merged.
[1]: http://lists.denx.de/pipermail/u-boot/2016-November/273946.html [2]: http://lists.infradead.org/pipermail/linux-arm-kernel/2016-November/470140.h...
Fabien Parent (5): davinci: omapl138_lcdk: fixup mac address in dtb davinci: omapl138_lcdk: improve readability of boot command davinci: omapl138_lcdk: add DT support for EMMC boot davinci: omapl138_lcdk: do fdt systemsetup when loading DT davinci: omapl138_lcdk: enable OF_SYSTEM_SETUP in defconfig
board/davinci/da8xxevm/omapl138_lcdk.c | 10 ++++++++++ configs/omapl138_lcdk_defconfig | 1 + include/configs/omapl138_lcdk.h | 32 +++++++++++++++++++++++++++++++- 3 files changed, 42 insertions(+), 1 deletion(-)

In order to avoid having a random mac address assigned by Linux, let's fixup the dtb with the mac address that was programmed in the EEPROM.
Signed-off-by: Fabien Parent fparent@baylibre.com --- board/davinci/da8xxevm/omapl138_lcdk.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 9c1a483..8a29748 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -10,6 +10,7 @@ */
#include <common.h> +#include <fdt_support.h> #include <i2c.h> #include <net.h> #include <netdev.h> @@ -371,3 +372,12 @@ int board_mmc_init(bd_t *bis) return davinci_mmc_init(bis, &mmc_sd0); } #endif + +#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_SYSTEM_SETUP) +int ft_system_setup(void *blob, bd_t *bd) +{ + fdt_fixup_ethernet(blob); + + return 0; +} +#endif

On Fri, Nov 25, 2016 at 11:11:23AM +0100, Fabien Parent wrote:
In order to avoid having a random mac address assigned by Linux, let's fixup the dtb with the mac address that was programmed in the EEPROM.
Signed-off-by: Fabien Parent fparent@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 9c1a483..8a29748 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -10,6 +10,7 @@ */
#include <common.h> +#include <fdt_support.h> #include <i2c.h> #include <net.h> #include <netdev.h> @@ -371,3 +372,12 @@ int board_mmc_init(bd_t *bis) return davinci_mmc_init(bis, &mmc_sd0); } #endif
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_SYSTEM_SETUP) +int ft_system_setup(void *blob, bd_t *bd) +{
- fdt_fixup_ethernet(blob);
- return 0;
+} +#endif
I don't understand why this is needed. CONFIG_LMB should be set so image_setup_linux will be called which will call image_setup_libfdt which will call fdt_fixup_ethernet along with other stuff we'd want done as well. I suspect we have some bug somewhere along the line with regards to pre ARMv7 platforms and FDT where some knob or another that should be set, is not set.

On Mon, Nov 28, 2016 at 5:56 PM, Tom Rini trini@konsulko.com wrote:
On Fri, Nov 25, 2016 at 11:11:23AM +0100, Fabien Parent wrote:
In order to avoid having a random mac address assigned by Linux, let's fixup the dtb with the mac address that was programmed in the EEPROM.
Signed-off-by: Fabien Parent fparent@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 9c1a483..8a29748 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -10,6 +10,7 @@ */
#include <common.h> +#include <fdt_support.h> #include <i2c.h> #include <net.h> #include <netdev.h> @@ -371,3 +372,12 @@ int board_mmc_init(bd_t *bis) return davinci_mmc_init(bis, &mmc_sd0); } #endif
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_SYSTEM_SETUP) +int ft_system_setup(void *blob, bd_t *bd) +{
fdt_fixup_ethernet(blob);
return 0;
+} +#endif
I don't understand why this is needed. CONFIG_LMB should be set so image_setup_linux will be called which will call image_setup_libfdt which will call fdt_fixup_ethernet along with other stuff we'd want done as well. I suspect we have some bug somewhere along the line with regards to pre ARMv7 platforms and FDT where some knob or another that should be set, is not set.
Indeed, this was not necessary to make it work. I misread the code and thought this was necessary. Just applying PATCH 2 & 3 is enough and the other patches from the series can be dropped. Do you want me to send a series again that includes only PATCH 2 & 3?
-- Tom

On Tue, Nov 29, 2016 at 11:31:09AM +0100, Fabien Parent wrote:
On Mon, Nov 28, 2016 at 5:56 PM, Tom Rini trini@konsulko.com wrote:
On Fri, Nov 25, 2016 at 11:11:23AM +0100, Fabien Parent wrote:
In order to avoid having a random mac address assigned by Linux, let's fixup the dtb with the mac address that was programmed in the EEPROM.
Signed-off-by: Fabien Parent fparent@baylibre.com
board/davinci/da8xxevm/omapl138_lcdk.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index 9c1a483..8a29748 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -10,6 +10,7 @@ */
#include <common.h> +#include <fdt_support.h> #include <i2c.h> #include <net.h> #include <netdev.h> @@ -371,3 +372,12 @@ int board_mmc_init(bd_t *bis) return davinci_mmc_init(bis, &mmc_sd0); } #endif
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_SYSTEM_SETUP) +int ft_system_setup(void *blob, bd_t *bd) +{
fdt_fixup_ethernet(blob);
return 0;
+} +#endif
I don't understand why this is needed. CONFIG_LMB should be set so image_setup_linux will be called which will call image_setup_libfdt which will call fdt_fixup_ethernet along with other stuff we'd want done as well. I suspect we have some bug somewhere along the line with regards to pre ARMv7 platforms and FDT where some knob or another that should be set, is not set.
Indeed, this was not necessary to make it work. I misread the code and thought this was necessary. Just applying PATCH 2 & 3 is enough and the other patches from the series can be dropped. Do you want me to send a series again that includes only PATCH 2 & 3?
Yeah, retest with just 2 and 3 and re-send, thanks!

Improve the readability of the boot command. This will help a later commit that adds support for dtb and system setup.
Signed-off-by: Fabien Parent fparent@baylibre.com --- include/configs/omapl138_lcdk.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/include/configs/omapl138_lcdk.h b/include/configs/omapl138_lcdk.h index 854fc47..c896638 100644 --- a/include/configs/omapl138_lcdk.h +++ b/include/configs/omapl138_lcdk.h @@ -200,7 +200,24 @@ #define CONFIG_REVISION_TAG #define CONFIG_SETUP_MEMORY_TAGS #define CONFIG_BOOTARGS "console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait ip=off" -#define CONFIG_BOOTCOMMAND "if mmc rescan; then if fatload mmc 0 0xc0600000 boot.scr; then source 0xc0600000; else fatload mmc 0 0xc0700000 uImage; bootm c0700000; fi; else sf probe 0; sf read 0xc0700000 0x80000 0x220000; bootm 0xc0700000; fi" +#define CONFIG_BOOTCOMMAND \ + "if mmc rescan; then " \ + "run mmcboot; " \ + "else " \ + "run spiboot; " \ + "fi" +#define CONFIG_EXTRA_ENV_SETTINGS \ + "mmcboot=" \ + "if fatload mmc 0 0xc0600000 boot.scr; then " \ + "source 0xc0600000; " \ + "else " \ + "fatload mmc 0 0xc0700000 uImage; " \ + "bootm 0xc0700000; " \ + "fi;\0" \ + "spiboot=" \ + "sf probe 0; " \ + "sf read 0xc0700000 0x80000 0x220000; " \ + "bootm 0xc0700000;\0"
/* * U-Boot commands

On Fri, Nov 25, 2016 at 11:11:24AM +0100, Fabien Parent wrote:
Improve the readability of the boot command. This will help a later commit that adds support for dtb and system setup.
Signed-off-by: Fabien Parent fparent@baylibre.com
Reviewed-by: Tom Rini trini@konsulko.com

When booting from EMMC, load the DTB and pass it to the kernel.
Signed-off-by: Fabien Parent fparent@baylibre.com --- include/configs/omapl138_lcdk.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/include/configs/omapl138_lcdk.h b/include/configs/omapl138_lcdk.h index c896638..fe9f94d 100644 --- a/include/configs/omapl138_lcdk.h +++ b/include/configs/omapl138_lcdk.h @@ -207,12 +207,16 @@ "run spiboot; " \ "fi" #define CONFIG_EXTRA_ENV_SETTINGS \ + "fdtaddr=0xc0600000\0" \ + "fdtfile=da850-lcdk.dtb\0" \ + "fdtboot=bootm 0xc0700000 - ${fdtaddr};\0" \ "mmcboot=" \ "if fatload mmc 0 0xc0600000 boot.scr; then " \ "source 0xc0600000; " \ "else " \ "fatload mmc 0 0xc0700000 uImage; " \ - "bootm 0xc0700000; " \ + "fatload mmc 0 ${fdtaddr} ${fdtfile}; " \ + "run fdtboot; " \ "fi;\0" \ "spiboot=" \ "sf probe 0; " \

On Fri, Nov 25, 2016 at 11:11:25AM +0100, Fabien Parent wrote:
When booting from EMMC, load the DTB and pass it to the kernel.
Signed-off-by: Fabien Parent fparent@baylibre.com
Reviewed-by: Tom Rini trini@konsulko.com

When loading the DTB, let's also do the systemsetup in order to patch the DT with the mac address.
Signed-off-by: Fabien Parent fparent@baylibre.com --- include/configs/omapl138_lcdk.h | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/include/configs/omapl138_lcdk.h b/include/configs/omapl138_lcdk.h index fe9f94d..29d061e 100644 --- a/include/configs/omapl138_lcdk.h +++ b/include/configs/omapl138_lcdk.h @@ -206,16 +206,25 @@ "else " \ "run spiboot; " \ "fi" +#if defined(CONFIG_OF_SYSTEM_SETUP) +#define FDTSETUP "fdtsetup=fdt addr ${fdtaddr}; fdt systemsetup;\0" +#else +#define FDTSETUP +#endif + #define CONFIG_EXTRA_ENV_SETTINGS \ + FDTSETUP \ "fdtaddr=0xc0600000\0" \ "fdtfile=da850-lcdk.dtb\0" \ "fdtboot=bootm 0xc0700000 - ${fdtaddr};\0" \ + "fdtsetup=fdt addr ${fdtaddr}; fdt systemsetup;\0" \ "mmcboot=" \ "if fatload mmc 0 0xc0600000 boot.scr; then " \ "source 0xc0600000; " \ "else " \ "fatload mmc 0 0xc0700000 uImage; " \ "fatload mmc 0 ${fdtaddr} ${fdtfile}; " \ + "run fdtsetup;" \ "run fdtboot; " \ "fi;\0" \ "spiboot=" \

On Fri, Nov 25, 2016 at 11:11:26AM +0100, Fabien Parent wrote:
When loading the DTB, let's also do the systemsetup in order to patch the DT with the mac address.
Signed-off-by: Fabien Parent fparent@baylibre.com
Like the first patch, we shouldn't need to do this, something deeper must be wrong...

Enable OF_SYSTEM_SETUP in order to patch the DT with the mac address read into the EEPROM.
Signed-off-by: Fabien Parent fparent@baylibre.com --- configs/omapl138_lcdk_defconfig | 1 + 1 file changed, 1 insertion(+)
diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index bcd1acb..db7a1d9 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -4,6 +4,7 @@ CONFIG_TARGET_OMAPL138_LCDK=y CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SPL_SERIAL_SUPPORT=y +CONFIG_OF_SYSTEM_SETUP=y CONFIG_BOOTDELAY=3 CONFIG_VERSION_VARIABLE=y # CONFIG_DISPLAY_CPUINFO is not set
participants (2)
-
Fabien Parent
-
Tom Rini