summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-08-12 21:39:15 -0400
committerTom Rini <trini@konsulko.com>2022-08-12 21:41:07 -0400
commit8f9eee8275cf475f6d9435e85aa2d04b61b3cd75 (patch)
tree1e09bcb44c8e3bc72f3a8315616ec49057e3e49d /board
parent6fc212779c990ff27a430e370bfb8fac01ddde7f (diff)
parentecf1d2741d95f5f84e31dc1d0bef149d8ff1f0a3 (diff)
Merge branch '2022-08-12-assorted-updates'
- Clean up some code with the DH electronics boards, remove a few boards that have had their removal ack'd, update Azure CI hosts for macOS and Ubuntu, and migrate a few more symbols to Kconfig.
Diffstat (limited to 'board')
-rw-r--r--board/armltd/integrator/integrator.c3
-rw-r--r--board/armltd/vexpress64/vexpress64.c3
-rw-r--r--board/bluewater/snapper9260/Kconfig12
-rw-r--r--board/bluewater/snapper9260/MAINTAINERS7
-rw-r--r--board/bluewater/snapper9260/Makefile9
-rw-r--r--board/bluewater/snapper9260/snapper9260.c154
-rw-r--r--board/dhelectronics/common/Makefile10
-rw-r--r--board/dhelectronics/common/dh_common.c65
-rw-r--r--board/dhelectronics/common/dh_common.h28
-rw-r--r--board/dhelectronics/common/dh_imx.c24
-rw-r--r--board/dhelectronics/common/dh_imx.h12
-rw-r--r--board/dhelectronics/dh_imx6/dh_imx6.c47
-rw-r--r--board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c121
-rw-r--r--board/dhelectronics/dh_stm32mp1/board.c102
-rw-r--r--board/ids/ids8313/Kconfig12
-rw-r--r--board/ids/ids8313/MAINTAINERS6
-rw-r--r--board/ids/ids8313/Makefile9
-rw-r--r--board/ids/ids8313/ids8313.c216
18 files changed, 246 insertions, 594 deletions
diff --git a/board/armltd/integrator/integrator.c b/board/armltd/integrator/integrator.c
index e734ceae88..4959a7fd6d 100644
--- a/board/armltd/integrator/integrator.c
+++ b/board/armltd/integrator/integrator.c
@@ -179,9 +179,6 @@ extern void dram_query(void);
int board_eth_init(struct bd_info *bis)
{
int rc = 0;
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
return rc;
}
#endif
diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
index 709ebf3fb0..05a7a25c32 100644
--- a/board/armltd/vexpress64/vexpress64.c
+++ b/board/armltd/vexpress64/vexpress64.c
@@ -200,9 +200,6 @@ int board_eth_init(struct bd_info *bis)
{
int rc = 0;
#ifndef CONFIG_DM_ETH
-#ifdef CONFIG_SMC91111
- rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-#endif
#ifdef CONFIG_SMC911X
rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
#endif
diff --git a/board/bluewater/snapper9260/Kconfig b/board/bluewater/snapper9260/Kconfig
deleted file mode 100644
index b8e9cbc585..0000000000
--- a/board/bluewater/snapper9260/Kconfig
+++ /dev/null
@@ -1,12 +0,0 @@
-if TARGET_SNAPPER9260
-
-config SYS_BOARD
- default "snapper9260"
-
-config SYS_VENDOR
- default "bluewater"
-
-config SYS_CONFIG_NAME
- default "snapper9260"
-
-endif
diff --git a/board/bluewater/snapper9260/MAINTAINERS b/board/bluewater/snapper9260/MAINTAINERS
deleted file mode 100644
index 1f8f4d6988..0000000000
--- a/board/bluewater/snapper9260/MAINTAINERS
+++ /dev/null
@@ -1,7 +0,0 @@
-SNAPPER9260 BOARD
-M: Simon Glass <sjg@chromium.org>
-S: Maintained
-F: board/bluewater/snapper9260/
-F: include/configs/snapper9260.h
-F: configs/snapper9260_defconfig
-F: configs/snapper9g20_defconfig
diff --git a/board/bluewater/snapper9260/Makefile b/board/bluewater/snapper9260/Makefile
deleted file mode 100644
index 842abf4eee..0000000000
--- a/board/bluewater/snapper9260/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-#
-# (C) Copyright 2003-2008
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-#
-# (C) Copyright 2011 Bluewater Systems
-# Ryan Mallon <ryan@bluewatersys.com>
-
-obj-y += snapper9260.o
diff --git a/board/bluewater/snapper9260/snapper9260.c b/board/bluewater/snapper9260/snapper9260.c
deleted file mode 100644
index df53a651c3..0000000000
--- a/board/bluewater/snapper9260/snapper9260.c
+++ /dev/null
@@ -1,154 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Bluewater Systems Snapper 9260/9G20 modules
- *
- * (C) Copyright 2011 Bluewater Systems
- * Author: Andre Renaud <andre@bluewatersys.com>
- * Author: Ryan Mallon <ryan@bluewatersys.com>
- */
-
-#include <common.h>
-#include <dm.h>
-#include <init.h>
-#include <asm/global_data.h>
-#include <asm/io.h>
-#include <asm/gpio.h>
-#include <asm/mach-types.h>
-#include <asm/arch/at91sam9260_matrix.h>
-#include <asm/arch/at91sam9_smc.h>
-#include <asm/arch/at91_common.h>
-#include <asm/arch/clk.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/atmel_serial.h>
-#include <net.h>
-#include <netdev.h>
-#include <i2c.h>
-#include <pca953x.h>
-#include <linux/delay.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-/* IO Expander pins */
-#define IO_EXP_ETH_RESET (0 << 1)
-#define IO_EXP_ETH_POWER (1 << 1)
-
-static void macb_hw_init(void)
-{
- struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA;
-
- at91_periph_clk_enable(ATMEL_ID_EMAC0);
-
- /* Disable pull-ups to prevent PHY going into test mode */
- writel(pin_to_mask(AT91_PIN_PA14) |
- pin_to_mask(AT91_PIN_PA15) |
- pin_to_mask(AT91_PIN_PA18),
- &pioa->pudr);
-
- /* Power down ethernet */
- pca953x_set_dir(0x28, IO_EXP_ETH_POWER, PCA953X_DIR_OUT);
- pca953x_set_val(0x28, IO_EXP_ETH_POWER, 1);
-
- /* Hold ethernet in reset */
- pca953x_set_dir(0x28, IO_EXP_ETH_RESET, PCA953X_DIR_OUT);
- pca953x_set_val(0x28, IO_EXP_ETH_RESET, 0);
-
- /* Enable ethernet power */
- pca953x_set_val(0x28, IO_EXP_ETH_POWER, 0);
-
- at91_phy_reset();
-
- /* Bring the ethernet out of reset */
- pca953x_set_val(0x28, IO_EXP_ETH_RESET, 1);
-
- /* The phy internal reset take 21ms */
- udelay(21 * 1000);
-
- /* Re-enable pull-up */
- writel(pin_to_mask(AT91_PIN_PA14) |
- pin_to_mask(AT91_PIN_PA15) |
- pin_to_mask(AT91_PIN_PA18),
- &pioa->puer);
-
- at91_macb_hw_init();
-}
-
-static void nand_hw_init(void)
-{
- struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC;
- struct at91_matrix *matrix = (struct at91_matrix *)ATMEL_BASE_MATRIX;
- unsigned long csa;
-
- /* Enable CS3 as NAND/SmartMedia */
- csa = readl(&matrix->ebicsa);
- csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA;
- writel(csa, &matrix->ebicsa);
-
- /* Configure SMC CS3 for NAND/SmartMedia */
- writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(0) |
- AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0),
- &smc->cs[3].setup);
- writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(4) |
- AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(4),
- &smc->cs[3].pulse);
- writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(7),
- &smc->cs[3].cycle);
- writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
- AT91_SMC_MODE_EXNW_DISABLE |
- AT91_SMC_MODE_DBW_8 |
- AT91_SMC_MODE_TDF_CYCLE(3),
- &smc->cs[3].mode);
-
- /* Configure RDY/BSY */
- gpio_request(CONFIG_SYS_NAND_READY_PIN, "nand_rdy");
- gpio_direction_input(CONFIG_SYS_NAND_READY_PIN);
-
- /* Enable NandFlash */
- gpio_request(CONFIG_SYS_NAND_ENABLE_PIN, "nand_ce");
- gpio_direction_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
-}
-
-int board_init(void)
-{
- at91_periph_clk_enable(ATMEL_ID_PIOA);
- at91_periph_clk_enable(ATMEL_ID_PIOB);
- at91_periph_clk_enable(ATMEL_ID_PIOC);
-
- /* The mach-type is the same for both Snapper 9260 and 9G20 */
- gd->bd->bi_arch_number = MACH_TYPE_SNAPPER_9260;
-
- /* Address of boot parameters */
- gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
-
- /* Initialise peripherals */
- at91_seriald_hw_init();
- i2c_set_bus_num(0);
- nand_hw_init();
- macb_hw_init();
-
- return 0;
-}
-
-int board_eth_init(struct bd_info *bis)
-{
- return macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x1f);
-}
-
-int dram_init(void)
-{
- gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
- CONFIG_SYS_SDRAM_SIZE);
- return 0;
-}
-
-void reset_phy(void)
-{
-}
-
-static struct atmel_serial_plat at91sam9260_serial_plat = {
- .base_addr = ATMEL_BASE_DBGU,
-};
-
-U_BOOT_DRVINFO(at91sam9260_serial) = {
- .name = "serial_atmel",
- .plat = &at91sam9260_serial_plat,
-};
diff --git a/board/dhelectronics/common/Makefile b/board/dhelectronics/common/Makefile
new file mode 100644
index 0000000000..a472ea8d51
--- /dev/null
+++ b/board/dhelectronics/common/Makefile
@@ -0,0 +1,10 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright 2022 DENX Software Engineering GmbH, Philip Oberfichtner <pro@denx.de>
+#
+
+obj-y += dh_common.o
+
+ifneq (,$(CONFIG_ARCH_MX6)$(CONFIG_ARCH_IMX8M))
+obj-y += dh_imx.o
+endif
diff --git a/board/dhelectronics/common/dh_common.c b/board/dhelectronics/common/dh_common.c
new file mode 100644
index 0000000000..67e3d59b1f
--- /dev/null
+++ b/board/dhelectronics/common/dh_common.c
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2022 Marek Vasut <marex@denx.de>
+ * Copyright 2022 DENX Software Engineering GmbH, Philip Oberfichtner <pro@denx.de>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <i2c_eeprom.h>
+#include <net.h>
+
+#include "dh_common.h"
+
+bool dh_mac_is_in_env(const char *env)
+{
+ unsigned char enetaddr[6];
+
+ return eth_env_get_enetaddr(env, enetaddr);
+}
+
+int dh_get_mac_from_eeprom(unsigned char *enetaddr, const char *alias)
+{
+ struct udevice *dev;
+ int ret;
+ ofnode node;
+
+ node = ofnode_path(alias);
+ if (!ofnode_valid(node)) {
+ printf("%s: ofnode for %s not found!", __func__, alias);
+ return -ENOENT;
+ }
+
+ ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, node, &dev);
+ if (ret) {
+ printf("%s: Cannot find EEPROM! ret = %d\n", __func__, ret);
+ return ret;
+ }
+
+ ret = i2c_eeprom_read(dev, 0xfa, enetaddr, 0x6);
+ if (ret) {
+ printf("%s: Error reading EEPROM! ret = %d\n", __func__, ret);
+ return ret;
+ }
+
+ if (!is_valid_ethaddr(enetaddr)) {
+ printf("%s: Address read from EEPROM is invalid!\n", __func__);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+__weak int dh_setup_mac_address(void)
+{
+ unsigned char enetaddr[6];
+
+ if (dh_mac_is_in_env("ethaddr"))
+ return 0;
+
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
+ return eth_env_set_enetaddr("ethaddr", enetaddr);
+
+ printf("%s: Unable to set mac address!\n", __func__);
+ return -ENXIO;
+}
diff --git a/board/dhelectronics/common/dh_common.h b/board/dhelectronics/common/dh_common.h
new file mode 100644
index 0000000000..2b24637d96
--- /dev/null
+++ b/board/dhelectronics/common/dh_common.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * Copyright 2022 DENX Software Engineering GmbH, Philip Oberfichtner <pro@denx.de>
+ */
+
+/*
+ * dh_mac_is_in_env - Check if MAC address is already set
+ *
+ * @env: name of environment variable
+ * Return: true if MAC is set, false otherwise
+ */
+bool dh_mac_is_in_env(const char *env);
+
+/*
+ * dh_get_mac_from_eeprom - Get MAC address from eeprom and write it to enetaddr
+ *
+ * @enetaddr: buffer where address is to be stored
+ * @alias: alias for EEPROM device tree node
+ * Return: 0 if OK, other value on error
+ */
+int dh_get_mac_from_eeprom(unsigned char *enetaddr, const char *alias);
+
+/*
+ * dh_setup_mac_address - Try to get MAC address from various locations and write it to env
+ *
+ * Return: 0 if OK, other value on error
+ */
+int dh_setup_mac_address(void);
diff --git a/board/dhelectronics/common/dh_imx.c b/board/dhelectronics/common/dh_imx.c
new file mode 100644
index 0000000000..7f451bad59
--- /dev/null
+++ b/board/dhelectronics/common/dh_imx.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2022 Marek Vasut <marex@denx.de>
+ * Copyright 2022 DENX Software Engineering GmbH, Philip Oberfichtner <pro@denx.de>
+ */
+
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+#include <common.h>
+#include <net.h>
+#include "dh_imx.h"
+
+int dh_imx_get_mac_from_fuse(unsigned char *enetaddr)
+{
+ /*
+ * If IIM fuses contain valid MAC address, use it.
+ * The IIM MAC address fuses are NOT programmed by default.
+ */
+ imx_get_mac_from_fuse(0, enetaddr);
+ if (!is_valid_ethaddr(enetaddr))
+ return -EINVAL;
+
+ return 0;
+}
diff --git a/board/dhelectronics/common/dh_imx.h b/board/dhelectronics/common/dh_imx.h
new file mode 100644
index 0000000000..284f8637fb
--- /dev/null
+++ b/board/dhelectronics/common/dh_imx.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * Copyright 2022 DENX Software Engineering GmbH, Philip Oberfichtner <pro@denx.de>
+ */
+
+/*
+ * dh_imx_get_mac_from_fuse - Get MAC address from fuse and write it to env
+ *
+ * @enetaddr: buffer where address is to be stored
+ * Return: 0 if OK, other value on error
+ */
+int dh_imx_get_mac_from_fuse(unsigned char *enetaddr);
diff --git a/board/dhelectronics/dh_imx6/dh_imx6.c b/board/dhelectronics/dh_imx6/dh_imx6.c
index e8aba83e1a..07fc9b1fe6 100644
--- a/board/dhelectronics/dh_imx6/dh_imx6.c
+++ b/board/dhelectronics/dh_imx6/dh_imx6.c
@@ -36,6 +36,9 @@
#include <linux/delay.h>
#include <usb/ehci-ci.h>
+#include "../common/dh_common.h"
+#include "../common/dh_imx.h"
+
DECLARE_GLOBAL_DATA_PTR;
int dram_init(void)
@@ -82,46 +85,24 @@ int board_usb_phy_mode(int port)
}
#endif
-static int setup_dhcom_mac_from_fuse(void)
+int dh_setup_mac_address(void)
{
- struct udevice *dev;
- ofnode eeprom;
unsigned char enetaddr[6];
- int ret;
- ret = eth_env_get_enetaddr("ethaddr", enetaddr);
- if (ret) /* ethaddr is already set */
+ if (dh_mac_is_in_env("ethaddr"))
return 0;
- imx_get_mac_from_fuse(0, enetaddr);
-
- if (is_valid_ethaddr(enetaddr)) {
- eth_env_set_enetaddr("ethaddr", enetaddr);
- return 0;
- }
-
- eeprom = ofnode_get_aliases_node("eeprom0");
- if (!ofnode_valid(eeprom)) {
- printf("Can't find eeprom0 alias!\n");
- return -ENODEV;
- }
+ if (!dh_imx_get_mac_from_fuse(enetaddr))
+ goto out;
- ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, eeprom, &dev);
- if (ret) {
- printf("Cannot find EEPROM!\n");
- return ret;
- }
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
+ goto out;
- ret = i2c_eeprom_read(dev, 0xfa, enetaddr, 0x6);
- if (ret) {
- printf("Error reading configuration EEPROM!\n");
- return ret;
- }
+ printf("%s: Unable to get MAC address!\n", __func__);
+ return -ENXIO;
- if (is_valid_ethaddr(enetaddr))
- eth_env_set_enetaddr("ethaddr", enetaddr);
-
- return 0;
+out:
+ return eth_env_set_enetaddr("ethaddr", enetaddr);
}
int board_early_init_f(void)
@@ -188,7 +169,7 @@ int board_late_init(void)
u32 hw_code;
char buf[16];
- setup_dhcom_mac_from_fuse();
+ dh_setup_mac_address();
hw_code = board_get_hwcode();
diff --git a/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c b/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
index 8676c44d0d..6f06daf86f 100644
--- a/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
+++ b/board/dhelectronics/dh_imx8mp/imx8mp_dhcom_pdk2.c
@@ -16,6 +16,8 @@
#include <miiphy.h>
#include "lpddr4_timing.h"
+#include "../common/dh_common.h"
+#include "../common/dh_imx.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -75,95 +77,68 @@ static void setup_fec(void)
set_clk_enet(ENET_125MHZ);
}
-static int setup_mac_address_from_eeprom(char *alias, char *env, bool odd)
+static int dh_imx8_setup_ethaddr(void)
{
unsigned char enetaddr[6];
- struct udevice *dev;
- int ret, offset;
-
- offset = fdt_path_offset(gd->fdt_blob, alias);
- if (offset < 0) {
- printf("%s: No eeprom0 path offset\n", __func__);
- return offset;
- }
-
- ret = uclass_get_device_by_of_offset(UCLASS_I2C_EEPROM, offset, &dev);
- if (ret) {
- printf("Cannot find EEPROM!\n");
- return ret;
- }
-
- ret = i2c_eeprom_read(dev, 0xfa, enetaddr, 0x6);
- if (ret) {
- printf("Error reading configuration EEPROM!\n");
- return ret;
- }
+
+ if (dh_mac_is_in_env("ethaddr"))
+ return 0;
+
+ if (!dh_imx_get_mac_from_fuse(enetaddr))
+ goto out;
+
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
+ goto out;
+
+ return -ENXIO;
+
+out:
+ return eth_env_set_enetaddr("ethaddr", enetaddr);
+}
+
+static int dh_imx8_setup_eth1addr(void)
+{
+ unsigned char enetaddr[6];
+
+ if (dh_mac_is_in_env("eth1addr"))
+ return 0;
+
+ if (!dh_imx_get_mac_from_fuse(enetaddr))
+ goto increment_out;
+
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom1"))
+ goto out;
/*
* Populate second ethernet MAC from first ethernet EEPROM with MAC
* address LSByte incremented by 1. This is only used on SoMs without
* second ethernet EEPROM, i.e. early prototypes.
*/
- if (odd)
- enetaddr[5]++;
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
+ goto increment_out;
- eth_env_set_enetaddr(env, enetaddr);
+ return -ENXIO;
- return 0;
+increment_out:
+ enetaddr[5]++;
+
+out:
+ return eth_env_set_enetaddr("eth1addr", enetaddr);
}
-static void setup_mac_address(void)
+int dh_setup_mac_address(void)
{
- unsigned char enetaddr[6];
- bool skip_eth0 = false;
- bool skip_eth1 = false;
int ret;
- ret = eth_env_get_enetaddr("ethaddr", enetaddr);
- if (ret) /* ethaddr is already set */
- skip_eth0 = true;
-
- ret = eth_env_get_enetaddr("eth1addr", enetaddr);
- if (ret) /* eth1addr is already set */
- skip_eth1 = true;
+ ret = dh_imx8_setup_ethaddr();
+ if (ret)
+ printf("%s: Unable to setup ethaddr! ret = %d\n", __func__, ret);
- /* Both MAC addresses are already set in U-Boot environment. */
- if (skip_eth0 && skip_eth1)
- return;
+ ret = dh_imx8_setup_eth1addr();
+ if (ret)
+ printf("%s: Unable to setup eth1addr! ret = %d\n", __func__, ret);
- /*
- * If IIM fuses contain valid MAC address, use it.
- * The IIM MAC address fuses are NOT programmed by default.
- */
- imx_get_mac_from_fuse(0, enetaddr);
- if (is_valid_ethaddr(enetaddr)) {
- if (!skip_eth0)
- eth_env_set_enetaddr("ethaddr", enetaddr);
- /*
- * The LSbit of MAC address in fuses is always 0, use the
- * next consecutive MAC address for the second ethernet.
- */
- enetaddr[5]++;
- if (!skip_eth1)
- eth_env_set_enetaddr("eth1addr", enetaddr);
- return;
- }
-
- /* Use on-SoM EEPROMs with pre-programmed MAC address. */
- if (!skip_eth0) {
- /* We cannot do much more if this returns -ve . */
- setup_mac_address_from_eeprom("eeprom0", "ethaddr", false);
- }
-
- if (!skip_eth1) {
- ret = setup_mac_address_from_eeprom("eeprom1", "eth1addr",
- false);
- if (ret) { /* Second EEPROM might not be populated. */
- /* We cannot do much more if this returns -ve . */
- setup_mac_address_from_eeprom("eeprom0", "eth1addr",
- true);
- }
- }
+ return ret;
}
int board_init(void)
@@ -176,7 +151,7 @@ int board_init(void)
int board_late_init(void)
{
- setup_mac_address();
+ dh_setup_mac_address();
return 0;
}
diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
index 7a4c08cb7f..e3c7ed1049 100644
--- a/board/dhelectronics/dh_stm32mp1/board.c
+++ b/board/dhelectronics/dh_stm32mp1/board.c
@@ -42,6 +42,7 @@
#include <usb/dwc2_udc.h>
#include <watchdog.h>
#include <dm/ofnode.h>
+#include "../common/dh_common.h"
#include "../../st/common/stpmic1.h"
/* SYSCFG registers */
@@ -84,36 +85,17 @@
#define KS_CIDER 0xC0
#define CIDER_ID 0x8870
-int setup_mac_address(void)
+static bool dh_stm32_mac_is_in_ks8851(void)
{
- unsigned char enetaddr[6];
- bool skip_eth0 = false;
- bool skip_eth1 = false;
- struct udevice *dev;
- int ret;
ofnode node;
-
- ret = eth_env_get_enetaddr("ethaddr", enetaddr);
- if (ret) /* ethaddr is already set */
- skip_eth0 = true;
+ u32 reg, cider, ccr;
node = ofnode_path("ethernet1");
- if (!ofnode_valid(node)) {
- /* ethernet1 is not present in the system */
- skip_eth1 = true;
- goto out_set_ethaddr;
- }
+ if (!ofnode_valid(node))
+ return false;
- ret = eth_env_get_enetaddr("eth1addr", enetaddr);
- if (ret) {
- /* eth1addr is already set */
- skip_eth1 = true;
- goto out_set_ethaddr;
- }
-
- ret = ofnode_device_is_compatible(node, "micrel,ks8851-mll");
- if (ret)
- goto out_set_ethaddr;
+ if (ofnode_device_is_compatible(node, "micrel,ks8851-mll"))
+ return false;
/*
* KS8851 with EEPROM may use custom MAC from EEPROM, read
@@ -121,56 +103,62 @@ int setup_mac_address(void)
* is present. If EEPROM is present, it must contain valid
* MAC address.
*/
- u32 reg, cider, ccr;
reg = ofnode_get_addr(node);
if (!reg)
- goto out_set_ethaddr;
+ return false;
writew(KS_BE0 | KS_BE1 | KS_CIDER, reg + 2);
cider = readw(reg);
- if ((cider & 0xfff0) != CIDER_ID) {
- skip_eth1 = true;
- goto out_set_ethaddr;
- }
+ if ((cider & 0xfff0) != CIDER_ID)
+ return true;
writew(KS_BE0 | KS_BE1 | KS_CCR, reg + 2);
ccr = readw(reg);
- if (ccr & KS_CCR_EEPROM) {
- skip_eth1 = true;
- goto out_set_ethaddr;
- }
+ if (ccr & KS_CCR_EEPROM)
+ return true;
+
+ return false;
+}
-out_set_ethaddr:
- if (skip_eth0 && skip_eth1)
+static int dh_stm32_setup_ethaddr(void)
+{
+ unsigned char enetaddr[6];
+
+ if (dh_mac_is_in_env("ethaddr"))
return 0;
- node = ofnode_path("eeprom0");
- if (!ofnode_valid(node)) {
- printf("%s: No eeprom0 path offset\n", __func__);
- return -ENOENT;
- }
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0"))
+ return eth_env_set_enetaddr("ethaddr", enetaddr);
- ret = uclass_get_device_by_ofnode(UCLASS_I2C_EEPROM, node, &dev);
- if (ret) {
- printf("Cannot find EEPROM!\n");
- return ret;
- }
+ return -ENXIO;
+}
- ret = i2c_eeprom_read(dev, 0xfa, enetaddr, 0x6);
- if (ret) {
- printf("Error reading configuration EEPROM!\n");
- return ret;
- }
+static int dh_stm32_setup_eth1addr(void)
+{
+ unsigned char enetaddr[6];
- if (is_valid_ethaddr(enetaddr)) {
- if (!skip_eth0)
- eth_env_set_enetaddr("ethaddr", enetaddr);
+ if (dh_mac_is_in_env("eth1addr"))
+ return 0;
+ if (dh_stm32_mac_is_in_ks8851())
+ return 0;
+
+ if (!dh_get_mac_from_eeprom(enetaddr, "eeprom0")) {
enetaddr[5]++;
- if (!skip_eth1)
- eth_env_set_enetaddr("eth1addr", enetaddr);
+ return eth_env_set_enetaddr("eth1addr", enetaddr);
}
+ return -ENXIO;
+}
+
+int setup_mac_address(void)
+{
+ if (dh_stm32_setup_ethaddr())
+ log_err("%s: Unable to setup ethaddr!\n", __func__);
+
+ if (dh_stm32_setup_eth1addr())
+ log_err("%s: Unable to setup eth1addr!\n", __func__);
+
return 0;
}
diff --git a/board/ids/ids8313/Kconfig b/board/ids/ids8313/Kconfig
deleted file mode 100644
index d165b4be7a..0000000000
--- a/board/ids/ids8313/Kconfig
+++ /dev/null
@@ -1,12 +0,0 @@
-if TARGET_IDS8313
-
-config SYS_BOARD
- default "ids8313"
-
-config SYS_VENDOR
- default "ids"
-
-config SYS_CONFIG_NAME
- default "ids8313"
-
-endif
diff --git a/board/ids/ids8313/MAINTAINERS b/board/ids/ids8313/MAINTAINERS
deleted file mode 100644
index c5b2f9ed0a..0000000000
--- a/board/ids/ids8313/MAINTAINERS
+++ /dev/null
@@ -1,6 +0,0 @@
-IDS8313 BOARD
-M: Heiko Schocher <hs@denx.de>
-S: Maintained
-F: board/ids/ids8313/
-F: include/configs/ids8313.h
-F: configs/ids8313_defconfig
diff --git a/board/ids/ids8313/Makefile b/board/ids/ids8313/Makefile
deleted file mode 100644
index 91e4ad6f12..0000000000
--- a/board/ids/ids8313/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0+
-#
-# (C) Copyright 2006
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-#
-# (C) Copyright 2013
-# Heiko Schocher, DENX Software Engineering, <hs@denx.de>
-
-obj-y = ids8313.o
diff --git a/board/ids/ids8313/ids8313.c b/board/ids/ids8313/ids8313.c
deleted file mode 100644
index 48aea71be6..0000000000
--- a/board/ids/ids8313/ids8313.c
+++ /dev/null
@@ -1,216 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * (C) Copyright 2013
- * Heiko Schocher, DENX Software Engineering, hs@denx.de.
- *
- * Based on:
- * Copyright (c) 2011 IDS GmbH, Germany
- * ids8313.c - ids8313 board support.
- *
- * Sergej Stepanov <ste@ids.de>
- * Based on board/freescale/mpc8313erdb/mpc8313erdb.c
- */
-
-#include <common.h>
-#include <fdt_support.h>
-#include <init.h>
-#include <mpc83xx.h>
-#include <spi.h>
-#include <asm/bitops.h>
-#include <asm/global_data.h>
-#include <linux/delay.h>
-#include <linux/libfdt.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-/** CPLD contains the info about:
- * - board type: *pCpld & 0xF0
- * - hw-revision: *pCpld & 0x0F
- * - cpld-revision: *pCpld+1
- */
-int checkboard(void)
-{
- char *pcpld = (char *)CONFIG_SYS_CPLD_BASE;
- u8 u8Vers = readb(pcpld);
- u8 u8Revs = readb(pcpld + 1);
-
- printf("Board: ");
- switch (u8Vers & 0xF0) {
- case '\x40':
- printf("CU73X");
- break;
- case '\x50':
- printf("CC73X");
- break;
- default:
- printf("unknown(0x%02X, 0x%02X)\n", u8Vers, u8Revs);
- return 0;
- }
- printf("\nInfo: HW-Rev: %i, CPLD-Rev: %i\n",
- u8Vers & 0x0F, u8Revs & 0xFF);
- return 0;
-}
-
-/*
- * fixed sdram init
- */
-int fixed_sdram(unsigned long config)
-{
- immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
- u32 msize = CONFIG_SYS_SDRAM_SIZE;
-
-#ifndef CONFIG_SYS_RAMBOOT
- u32 msize_log2 = __ilog2(msize);
-
- out_be32(&im->sysconf.ddrlaw[0].bar,
- (CONFIG_SYS_SDRAM_BASE & 0xfffff000));
- out_be32(&im->sysconf.ddrlaw[0].ar, LBLAWAR_EN | (msize_log2 - 1));
- out_be32(&im->sysconf.ddrcdr, CONFIG_SYS_DDRCDR_VALUE);
- sync();
-
- /*
- * Erratum DDR3 requires a 50ms delay after clearing DDRCDR[DDR_cfg],
- * or the DDR2 controller may fail to initialize correctly.
- */
- udelay(50000);
-
- out_be32(&im->ddr.csbnds[0].csbnds, (msize - 1) >> 24);
- out_be32(&im->ddr.cs_config[0], config);
-
- /* currently we use only one CS, so disable the other banks */
- out_be32(&im->ddr.cs_config[1], 0);
- out_be32(&im->ddr.cs_config[2], 0);
- out_be32(&im->ddr.cs_config[3], 0);
-
- out_be32(&im->ddr.timing_cfg_3, CONFIG_SYS_DDR_TIMING_3);
- out_be32(&im->ddr.timing_cfg_1, CONFIG_SYS_DDR_TIMING_1);
- out_be32(&im->ddr.timing_cfg_2, CONFIG_SYS_DDR_TIMING_2);
- out_be32(&im->ddr.timing_cfg_0, CONFIG_SYS_DDR_TIMING_0);
-
- out_be32(&im->ddr.sdram_cfg, CONFIG_SYS_SDRAM_CFG);
- out_be32(&im->ddr.sdram_cfg2, CONFIG_SYS_SDRAM_CFG2);
-
- out_be32(&im->ddr.sdram_mode, CONFIG_SYS_DDR_MODE);
- out_be32(&im->ddr.sdram_mode2, CONFIG_SYS_DDR_MODE_2);
-
- out_be32(&im->ddr.sdram_interval, CONFIG_SYS_DDR_INTERVAL);
- out_be32(&im->ddr.sdram_clk_cntl, CONFIG_SYS_DDR_CLK_CNTL);
- sync();
- udelay(300);
-
- /* enable DDR controller */
- setbits_be32(&im->ddr.sdram_cfg, SDRAM_CFG_MEM_EN);
- /* now check the real size */
- disable_addr_trans();
- msize = get_ram_size(CONFIG_SYS_SDRAM_BASE, msize);
- enable_addr_trans();
-#endif
- return msize;
-}
-
-static int setup_sdram(void)
-{
- u32 msize = CONFIG_SYS_SDRAM_SIZE;
- long int size_01, size_02;
-
- size_01 = fixed_sdram(CONFIG_SYS_DDR_CONFIG);
- size_02 = fixed_sdram(CONFIG_SYS_DDR_CONFIG_256);
-
- if (size_01 > size_02)
- msize = fixed_sdram(CONFIG_SYS_DDR_CONFIG);
- else
- msize = size_02;
-
- return msize;
-}
-
-int dram_init(void)
-{
- immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
- fsl_lbc_t *lbc = &im->im_lbc;
- u32 msize = 0;
-
- if ((in_be32(&im->sysconf.immrbar) & IMMRBAR_BASE_ADDR) != (u32)im)
- return -ENXIO;
-
- msize = setup_sdram();
-
- out_be32(&lbc->lbcr, (0x00040000 | (0xFF << LBCR_BMT_SHIFT) | 0xF));
- out_be32(&lbc->mrtpr, 0x20000000);
- sync();
-
- gd->ram_size = msize;
-
- return 0;
-}
-
-#if defined(CONFIG_OF_BOARD_SETUP)
-int ft_board_setup(void *blob, struct bd_info *bd)
-{
- ft_cpu_setup(blob, bd);
-
- return 0;
-}
-#endif
-
-/* gpio mask for spi_cs */
-#define IDSCPLD_SPI_CS_MASK 0x00000001
-/* spi_cs multiplexed through cpld */
-#define IDSCPLD_SPI_CS_BASE (CONFIG_SYS_CPLD_BASE + 0xf)
-
-#if defined(CONFIG_MISC_INIT_R)
-/* srp umcr mask for rts */
-#define IDSUMCR_RTS_MASK 0x04
-int misc_init_r(void)
-{
- /*srp*/
- duart83xx_t *uart1 = &((immap_t *)CONFIG_SYS_IMMR)->duart[0];
- duart83xx_t *uart2 = &((immap_t *)CONFIG_SYS_IMMR)->duart[1];
-
- gpio83xx_t *iopd = &((immap_t *)CONFIG_SYS_IMMR)->gpio[0];
- u8 *spi_base = (u8 *)IDSCPLD_SPI_CS_BASE;
-
- /* deactivate spi_cs channels */
- out_8(spi_base, 0);
- /* deactivate the spi_cs */
- setbits_be32(&iopd->dir, IDSCPLD_SPI_CS_MASK);
- /*srp - deactivate rts*/
- out_8(&uart1->umcr, IDSUMCR_RTS_MASK);
- out_8(&uart2->umcr, IDSUMCR_RTS_MASK);
-
-
- gd->fdt_blob = (void *)CONFIG_SYS_FLASH_BASE;
- return 0;
-}
-#endif
-
-#ifdef CONFIG_MPC8XXX_SPI
-/*
- * The following are used to control the SPI chip selects
- */
-int spi_cs_is_valid(unsigned int bus, unsigned int cs)
-{
- return bus == 0 && ((cs >= 0) && (cs <= 2));
-}
-
-void spi_cs_activate(struct spi_slave *slave)
-{
- gpio83xx_t *iopd = &((immap_t *)CONFIG_SYS_IMMR)->gpio[0];
- u8 *spi_base = (u8 *)IDSCPLD_SPI_CS_BASE;
-
- /* select the spi_cs channel */
- out_8(spi_base, 1 << slave->cs);
- /* activate the spi_cs */
- clrbits_be32(&iopd->dat, IDSCPLD_SPI_CS_MASK);
-}
-
-void spi_cs_deactivate(struct spi_slave *slave)
-{
- gpio83xx_t *iopd = &((immap_t *)CONFIG_SYS_IMMR)->gpio[0];
- u8 *spi_base = (u8 *)IDSCPLD_SPI_CS_BASE;
-
- /* select the spi_cs channel */
- out_8(spi_base, 1 << slave->cs);
- /* deactivate the spi_cs */
- setbits_be32(&iopd->dat, IDSCPLD_SPI_CS_MASK);
-}
-#endif