summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarren Huang <darren.huang@advantech.com.tw>2020-12-31 10:37:44 +0800
committerDarren Huang <darren.huang@advantech.com.tw>2020-12-31 16:14:45 +0800
commit8ac6298233c59d36f389421d0b2550c218b593cf (patch)
treedfb130fae8be89fed19850c7cdd585f4157ed2b0
parent1b40bb1100839ef4fd6c060e7ed3d388c7528224 (diff)
[All] Add the method that reading eth0 and eth1 MAC address from spi
-rw-r--r--common/board_r.c161
1 files changed, 161 insertions, 0 deletions
diff --git a/common/board_r.c b/common/board_r.c
index 8b8d490d6c..7ec5d3eb99 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -67,6 +67,21 @@
#ifdef CONFIG_FSL_FASTBOOT
#include <fb_fsl.h>
#endif
+#if defined(CONFIG_ADVANTECH) || defined(CONFIG_ADVANTECH_MX8)
+#include <version.h>
+#include <spi_flash.h>
+
+#define CONFIG_SPI_ENV_OFFSET (768 * 1024)
+#define CONFIG_SPI_ENV_SIZE (8 * 1024)
+
+struct boardcfg_t {
+ unsigned char mac[6];
+ unsigned char sn[10];
+ unsigned char Manufacturing_Time[14];
+};
+
+static struct spi_flash *flash;
+#endif /* (CONFIG_ADVANTECH) || defined(CONFIG_ADVANTECH_MX8) */
DECLARE_GLOBAL_DATA_PTR;
@@ -554,6 +569,149 @@ static int initr_ethaddr(void)
#endif
return 0;
}
+
+#if defined(CONFIG_ADVANTECH) || defined(CONFIG_ADVANTECH_MX8)
+#define XMK_STR(x) #x
+#define MK_STR(x) XMK_STR(x)
+
+static int get_eth0_mac(void)
+{
+ int rc = 0;
+ struct boardcfg_t boardcfg;
+ char print_buf[32];
+ uint64_t macaddr = 0;
+
+ if(spi_flash_read(flash, CONFIG_SPI_ENV_OFFSET + 8*CONFIG_SPI_ENV_SIZE, sizeof(boardcfg), &boardcfg)==0) {
+
+ /*printf("offset=%d\n", CONFIG_SPI_ENV_OFFSET+ 8*CONFIG_SPI_ENV_SIZE);*/
+
+ /*printf("0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X\n",
+ boardcfg.mac[0],
+ boardcfg.mac[1],
+ boardcfg.mac[2],
+ boardcfg.mac[3],
+ boardcfg.mac[4],
+ boardcfg.mac[5]);*/
+
+
+ macaddr = ((uint64_t)boardcfg.mac[0] << 40)
+ + ((uint64_t)boardcfg.mac[1] << 32)
+ + ((uint64_t)boardcfg.mac[2] << 24)
+ + ((uint64_t)boardcfg.mac[3] << 16)
+ + ((uint64_t)boardcfg.mac[4] << 8)
+ + boardcfg.mac[5];
+ /* printf ("MAC addr =%012llX\n", macaddr); */
+
+ if( (macaddr==0) || (macaddr==0xFFFFFFFFFFFFull) ) {
+ printf("eth0 MAC address is invailed !!\n");
+ sprintf(print_buf,"0x00:0x04:0x9F:0x01:0x30:0xE0");
+ printf("Use default MAC adderss:%s\n",print_buf);
+ env_set("ethaddr",print_buf);
+ return rc;
+ }
+ } else {
+ printf("SPI Read fail!!\n");
+ rc = -1;
+ }
+
+ if (rc==0) {
+ sprintf(print_buf, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X",
+ boardcfg.mac[0],
+ boardcfg.mac[1],
+ boardcfg.mac[2],
+ boardcfg.mac[3],
+ boardcfg.mac[4],
+ boardcfg.mac[5]);
+ printf ("eth0 MAC addr = %s\n", print_buf);
+
+ if( (env_get("ethaddr") == NULL) ||
+ (strcmp (env_get("ethaddr"),print_buf) != 0) ||
+ (strcmp (env_get("ethaddr"),MK_STR(CONFIG_ETHADDR)) == 0) ) {
+ env_set("ethaddr", print_buf);
+ }
+ }
+
+ return rc;
+}
+
+#ifdef CONFIG_HAS_ETH1
+static int get_eth1_mac(void)
+{
+ int rc = 0;
+ struct boardcfg_t boardcfg;
+ char print_buf[32];
+ uint64_t macaddr = 0;
+
+ if(spi_flash_read(flash, CONFIG_SPI_ENV_OFFSET + 8*CONFIG_SPI_ENV_SIZE + 1024, sizeof(boardcfg), &boardcfg)==0) {
+
+ /*printf("offset=%d\n", CONFIG_SPI_ENV_OFFSET+ 8*CONFIG_SPI_ENV_SIZE);*/
+
+ /*printf("0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X\n",
+ boardcfg.mac[0],
+ boardcfg.mac[1],
+ boardcfg.mac[2],
+ boardcfg.mac[3],
+ boardcfg.mac[4],
+ boardcfg.mac[5]);*/
+
+
+ macaddr = ((uint64_t)boardcfg.mac[0] << 40)
+ + ((uint64_t)boardcfg.mac[1] << 32)
+ + ((uint64_t)boardcfg.mac[2] << 24)
+ + ((uint64_t)boardcfg.mac[3] << 16)
+ + ((uint64_t)boardcfg.mac[4] << 8)
+ + boardcfg.mac[5];
+ /* printf ("MAC addr =%012llX\n", macaddr); */
+
+ if( (macaddr==0) || (macaddr==0xFFFFFFFFFFFFull) ) {
+ printf("eth1 MAC address is invailed !!\n");
+ sprintf(print_buf,"0x00:0x04:0x9F:0x01:0x30:0xE0");
+ printf("Use default MAC adderss:%s\n",print_buf);
+ env_set("eth1addr",print_buf);
+ return rc;
+ }
+ } else {
+ printf("SPI Read fail!!\n");
+ rc = -1;
+ }
+
+ if (rc==0) {
+ sprintf(print_buf, "0x%02X:0x%02X:0x%02X:0x%02X:0x%02X:0x%02X",
+ boardcfg.mac[0],
+ boardcfg.mac[1],
+ boardcfg.mac[2],
+ boardcfg.mac[3],
+ boardcfg.mac[4],
+ boardcfg.mac[5]);
+ printf ("eth1 MAC addr = %s\n", print_buf);
+
+ if( (env_get("eth1addr") == NULL) ||
+ (strcmp (env_get("eth1addr"),print_buf) != 0) ||
+ (strcmp (env_get("eth1addr"),MK_STR(CONFIG_ETH1ADDR)) == 0) ) {
+ env_set("eth1addr", print_buf);
+ }
+ }
+
+ return rc;
+}
+#endif
+
+int boardcfg_get_mac(void)
+{
+ int rc = 0;
+ flash = spi_flash_probe(CONFIG_SF_DEFAULT_BUS, CONFIG_SF_DEFAULT_CS,
+ CONFIG_SF_DEFAULT_SPEED, CONFIG_SF_DEFAULT_MODE);
+ if (!flash)
+ return -1;
+
+ rc = get_eth0_mac();
+#ifdef CONFIG_HAS_ETH1
+ rc = get_eth1_mac();
+#endif
+
+ return rc;
+}
+#endif /* (CONFIG_ADVANTECH) || defined(CONFIG_ADVANTECH_MX8) */
#endif /* CONFIG_CMD_NET */
#ifdef CONFIG_CMD_KGDB
@@ -868,6 +1026,9 @@ static init_fnc_t init_sequence_r[] = {
/* PPC has a udelay(20) here dating from 2002. Why? */
#ifdef CONFIG_CMD_NET
initr_ethaddr,
+#if defined(CONFIG_ADVANTECH) || defined(CONFIG_ADVANTECH_MX8)
+ boardcfg_get_mac, /* Get MAC address from SPI */
+#endif
#endif
#if defined(CONFIG_GPIO_HOG)
gpio_hog_probe_all,