arm: mvebu: Espressobin: Set default value for $ethNaddr env variable

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>
This commit is contained in:
Pali Rohár 2020-12-23 12:21:30 +01:00 committed by Stefan Roese
parent c4df0f6f31
commit 44be835d25
2 changed files with 23 additions and 0 deletions

View 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;

View File

@ -94,6 +94,10 @@
/* 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= */ \
""