]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: mvebu: Espressobin: Set default value for $ethNaddr env variable
authorPali Rohár <pali@kernel.org>
Wed, 23 Dec 2020 11:21:30 +0000 (12:21 +0100)
committerStefan Roese <sr@denx.de>
Mon, 8 Feb 2021 07:53:08 +0000 (08:53 +0100)
On Espressobin board are MAC addresses stored in U-Boot env area. Therefore
they are not present in default_environment[] array constructed at compile
time.

This change puts permanent MAC addresses into default_environment[] array
at board runtime. Espressobin board has enabled DEFAULT_ENV_IS_RW option
and therefore can modify this array.

This change ensure that 'env default -a' does not delete permanent MAC
addresses from Espressobin env storage area.

Signed-off-by: Pali Rohár <pali@kernel.org>
Acked-by: Andre Heider <a.heider@gmail.com>
board/Marvell/mvebu_armada-37xx/board.c
include/configs/mvebu_armada-37xx.h

index 7c9cc358dd0cfee08be8e9fc35909fd747be7341..636bdece400ec415db6e4295dc3080582b79a89e 100644 (file)
@@ -90,6 +90,9 @@ int board_late_init(void)
        struct udevice *dev;
        struct mmc *mmc_dev;
        bool ddr4, emmc;
+       const char *mac;
+       char eth[10];
+       int i;
 
        if (!of_machine_is_compatible("globalscale,espressobin"))
                return 0;
@@ -98,6 +101,22 @@ int board_late_init(void)
        while (*ptr != '\0' && *(ptr+1) != '\0') ptr++;
        ptr += 2;
 
+       /*
+        * Ensure that 'env default -a' does not erase permanent MAC addresses
+        * stored in env variables: $ethaddr, $eth1addr, $eth2addr and $eth3addr
+        */
+
+       mac = env_get("ethaddr");
+       if (mac && strlen(mac) <= 17)
+               ptr += sprintf(ptr, "ethaddr=%s", mac) + 1;
+
+       for (i = 1; i <= 3; i++) {
+               sprintf(eth, "eth%daddr", i);
+               mac = env_get(eth);
+               if (mac && strlen(mac) <= 17)
+                       ptr += sprintf(ptr, "%s=%s", eth, mac) + 1;
+       }
+
        /* If the memory controller has been configured for DDR4, we're running on v7 */
        ddr4 = ((readl(A3700_CH0_MC_CTRL2_REG) >> A3700_MC_CTRL2_SDRAM_TYPE_OFFS)
                & A3700_MC_CTRL2_SDRAM_TYPE_MASK) == A3700_MC_CTRL2_SDRAM_TYPE_DDR4;
index 6df702367c343667ad6699865d80605a22a8f898..2ad4325eaf54b0861a7e0d9b168c3a53d0db8b9b 100644 (file)
 
 /* filler for default values filled by board_early_init_f() */
 #define ENV_RW_FILLER \
+       "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" /* for ethaddr= */ \
+       "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" /* for eth1addr= */ \
+       "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" /* for eth2addr= */ \
+       "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" /* for eth3addr= */ \
        "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" /* for fdtfile= */ \
        ""