summaryrefslogtreecommitdiff
path: root/board/Synology
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2021-03-05 23:05:11 +0300
committerStefan Roese <sr@denx.de>2021-04-08 09:50:41 +0300
commita770159f88214846a66c7d7b6ee894de428e8fae (patch)
tree73d2bcecf52871fae19d44f8693f8ae687f18cca /board/Synology
parente471ddf0f3472423e8cdf8cc7d06a0b8e2abfebc (diff)
downloadu-boot-a770159f88214846a66c7d7b6ee894de428e8fae.tar.xz
arm: mvebu: ds414: Auto-populate env if appropriate
Define a misc_init_r() which calls "syno populate_env" if the environment seems incomplete (or default), indicated by missing "ethaddr" variable. With this in place, no random MAC address fallback is needed anymore. Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'board/Synology')
-rw-r--r--board/Synology/ds414/cmd_syno.c9
-rw-r--r--board/Synology/ds414/cmd_syno.h17
-rw-r--r--board/Synology/ds414/ds414.c11
3 files changed, 31 insertions, 6 deletions
diff --git a/board/Synology/ds414/cmd_syno.c b/board/Synology/ds414/cmd_syno.c
index a120c3123f..a62658a2eb 100644
--- a/board/Synology/ds414/cmd_syno.c
+++ b/board/Synology/ds414/cmd_syno.c
@@ -17,12 +17,9 @@
#include <asm/io.h>
#include "../drivers/ddr/marvell/axp/ddr3_init.h"
-#define ETHADDR_MAX 4
-#define SYNO_SN_TAG "SN="
-#define SYNO_CHKSUM_TAG "CHK="
+#include "cmd_syno.h"
-
-static int do_syno_populate(int argc, char *const argv[])
+int do_syno_populate(int argc, char *const argv[])
{
unsigned int bus = CONFIG_SF_DEFAULT_BUS;
unsigned int cs = CONFIG_SF_DEFAULT_CS;
@@ -57,7 +54,7 @@ static int do_syno_populate(int argc, char *const argv[])
goto out_unmap;
}
- for (n = 0; n < ETHADDR_MAX; n++) {
+ for (n = 0; n < SYNO_ETHADDR_MAX; n++) {
char ethaddr[ETH_ALEN];
int i, sum = 0;
unsigned char csum = 0;
diff --git a/board/Synology/ds414/cmd_syno.h b/board/Synology/ds414/cmd_syno.h
new file mode 100644
index 0000000000..42e435c803
--- /dev/null
+++ b/board/Synology/ds414/cmd_syno.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Commands to deal with Synology specifics.
+ *
+ * Copyright (C) 2021 Phil Sutter <phil@nwl.cc>
+ */
+
+#ifndef _CMD_SYNO_H
+#define _CMD_SYNO_H
+
+#define SYNO_ETHADDR_MAX 4
+#define SYNO_SN_TAG "SN="
+#define SYNO_CHKSUM_TAG "CHK="
+
+int do_syno_populate(int argc, char *const argv[]);
+
+#endif /* _CMD_SYNO_H */
diff --git a/board/Synology/ds414/ds414.c b/board/Synology/ds414/ds414.c
index 9c4ce670dd..abe6f9eb5e 100644
--- a/board/Synology/ds414/ds414.c
+++ b/board/Synology/ds414/ds414.c
@@ -18,6 +18,8 @@
#include "../arch/arm/mach-mvebu/serdes/axp/high_speed_env_spec.h"
#include "../arch/arm/mach-mvebu/serdes/axp/board_env_spec.h"
+#include "cmd_syno.h"
+
DECLARE_GLOBAL_DATA_PTR;
/* GPP and MPP settings as found in mvBoardEnvSpec.c of Synology's U-Boot */
@@ -179,6 +181,15 @@ int board_init(void)
return 0;
}
+int misc_init_r(void)
+{
+ if (!env_get("ethaddr")) {
+ puts("Incomplete environment, populating from SPI flash\n");
+ do_syno_populate(0, NULL);
+ }
+ return 0;
+}
+
int checkboard(void)
{
puts("Board: DS414\n");