From 26fe6caeb2acc6c82bac7e31975e067088d6093f Mon Sep 17 00:00:00 2001
From: Troy Kisky <troy.kisky@boundarydevices.com>
Date: Thu, 2 Aug 2018 19:01:03 -0700
Subject: [PATCH] nitrogen8m: use common ethernet support

Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
---
 board/boundary/nitrogen8m/nitrogen8m.c | 194 +++----------------------
 include/configs/nitrogen8m.h           |  15 ++
 2 files changed, 35 insertions(+), 174 deletions(-)

diff --git a/board/boundary/nitrogen8m/nitrogen8m.c b/board/boundary/nitrogen8m/nitrogen8m.c
index bf3d5b3d961..072f58e84f3 100644
--- a/board/boundary/nitrogen8m/nitrogen8m.c
+++ b/board/boundary/nitrogen8m/nitrogen8m.c
@@ -30,16 +30,11 @@
 #include <dm.h>
 #include <usb.h>
 #include <dwc3-uboot.h>
+#include "../common/padctrl.h"
+#include "../common/bd_common.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#define QSPI_PAD_CTRL	(PAD_CTL_DSE2 | PAD_CTL_HYS)
-
-#define UART_PAD_CTRL	(PAD_CTL_DSE6 | PAD_CTL_FSEL1)
-
-#define WDOG_PAD_CTRL	(PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
-#define WEAK_PULLUP	(PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
-
 static iomux_v3_cfg_t const init_pads[] = {
 #if 0
 	IMX8MQ_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
@@ -86,6 +81,21 @@ static iomux_v3_cfg_t const init_pads[] = {
 	IMX8MQ_PAD_NAND_CE1_B__GPIO3_IO2 | MUX_PAD_CTRL(0x61),
 #define GP_CSI2_MIPI_RESET		IMX_GPIO_NR(2, 19)
 	IMX8MQ_PAD_SD2_RESET_B__GPIO2_IO19 |MUX_PAD_CTRL(0x61),
+#ifdef CONFIG_FEC_MXC
+	/* PHY - AR8035 */
+	IOMUX_PAD_CTRL(ENET_MDIO__ENET_MDIO, PAD_CTRL_ENET_MDIO),
+	IOMUX_PAD_CTRL(ENET_MDC__ENET_MDC, PAD_CTRL_ENET_MDC),
+	IOMUX_PAD_CTRL(ENET_TX_CTL__ENET_RGMII_TX_CTL, PAD_CTRL_ENET_TX),
+	IOMUX_PAD_CTRL(ENET_TD0__ENET_RGMII_TD0, PAD_CTRL_ENET_TX),
+	IOMUX_PAD_CTRL(ENET_TD1__ENET_RGMII_TD1, PAD_CTRL_ENET_TX),
+	IOMUX_PAD_CTRL(ENET_TD2__ENET_RGMII_TD2, PAD_CTRL_ENET_TX),
+	IOMUX_PAD_CTRL(ENET_TD3__ENET_RGMII_TD3, PAD_CTRL_ENET_TX),
+	IOMUX_PAD_CTRL(ENET_TXC__ENET_RGMII_TXC, PAD_CTRL_ENET_TX),
+#endif
+#define GP_RGMII_PHY_RESET	IMX_GPIO_NR(1, 9)
+	IOMUX_PAD_CTRL(GPIO1_IO09__GPIO1_IO9, WEAK_PULLUP),
+#define GPIRQ_ENET_PHY		IMX_GPIO_NR(1, 2)
+	IOMUX_PAD_CTRL(GPIO1_IO11__GPIO1_IO11, WEAK_PULLUP),
 };
 
 int board_early_init_f(void)
@@ -135,171 +145,6 @@ int ft_board_setup(void *blob, bd_t *bd)
 }
 #endif
 
-#ifdef CONFIG_PHY_ATHEROS
-#define WEAK_PULLDN_OUTPUT	0x91
-#define WEAK_PULLUP_OUTPUT	0xd1
-
-#define PULL_GP(a, bit)		(((a >> bit) & 1) ? WEAK_PULLUP_OUTPUT : WEAK_PULLDN_OUTPUT)
-#define PULL_ENET(a, bit)	0x91
-
-#define GP_PHY_RX_CTL	IMX_GPIO_NR(1, 24)
-#define GP_PHY_RXC	IMX_GPIO_NR(1, 25)
-#define GP_PHY_RD0	IMX_GPIO_NR(1, 26)
-#define GP_PHY_RD1	IMX_GPIO_NR(1, 27)
-#define GP_PHY_RD2	IMX_GPIO_NR(1, 28)
-#define GP_PHY_RD3	IMX_GPIO_NR(1, 29)
-
-#ifndef STRAP_AR8035
-#define STRAP_AR8035	((0x28 | (CONFIG_FEC_MXC_PHYADDR & 3)) | ((0x28 | ((CONFIG_FEC_MXC_PHYADDR + 1) & 3)) << 6))
-#endif
-
-static const iomux_v3_cfg_t enet_ar8035_gpio_pads[] = {
-#define GP_RGMII_PHY_RESET	IMX_GPIO_NR(1, 9)
-	IOMUX_PAD_CTRL(GPIO1_IO09__GPIO1_IO9, PAD_CTL_DSE6),
-	IOMUX_PAD_CTRL(ENET_RD0__GPIO1_IO26, PULL_GP(STRAP_AR8035, 0)),
-	IOMUX_PAD_CTRL(ENET_RD1__GPIO1_IO27, PULL_GP(STRAP_AR8035, 1)),
-	IOMUX_PAD_CTRL(ENET_RD2__GPIO1_IO28, PULL_GP(STRAP_AR8035, 2)),
-	IOMUX_PAD_CTRL(ENET_RD3__GPIO1_IO29, PULL_GP(STRAP_AR8035, 3)),
-	IOMUX_PAD_CTRL(ENET_RX_CTL__GPIO1_IO24, PULL_GP(STRAP_AR8035, 4)),
-	/* 1.8V(1)/1.5V select(0) */
-	IOMUX_PAD_CTRL(ENET_RXC__GPIO1_IO25, PULL_GP(STRAP_AR8035, 5)),
-};
-
-static const iomux_v3_cfg_t enet_ar8035_pads[] = {
-	IOMUX_PAD_CTRL(ENET_RD0__ENET_RGMII_RD0, PULL_ENET(STRAP_AR8035, 0)),
-	IOMUX_PAD_CTRL(ENET_RD1__ENET_RGMII_RD1, PULL_ENET(STRAP_AR8035, 1)),
-	IOMUX_PAD_CTRL(ENET_RD2__ENET_RGMII_RD2, PULL_ENET(STRAP_AR8035, 2)),
-	IOMUX_PAD_CTRL(ENET_RD3__ENET_RGMII_RD3, PULL_ENET(STRAP_AR8035, 3)),
-	IOMUX_PAD_CTRL(ENET_RX_CTL__ENET_RGMII_RX_CTL, PULL_ENET(STRAP_AR8035, 4)),
-	IOMUX_PAD_CTRL(ENET_RXC__ENET_RGMII_RXC, PULL_ENET(STRAP_AR8035, 5)),
-};
-
-static unsigned char strap_gpios[] = {
-	GP_PHY_RD0,
-	GP_PHY_RD1,
-	GP_PHY_RD2,	/* 0 */
-	GP_PHY_RD3,	/* 1 */
-	GP_PHY_RX_CTL,	/* 0 */
-	GP_PHY_RXC,	/* 1  with LED_1000 pulled high, yields mode 0xc (RGMII, PLLOFF,INT) */
-};
-
-static void set_strap_pins(unsigned strap)
-{
-	int i = 0;
-
-	for (i = 0; i < ARRAY_SIZE(strap_gpios); i++) {
-		gpio_direction_output(strap_gpios[i], strap & 1);
-		strap >>= 1;
-	}
-}
-
-static void setup_gpio_ar8035(void)
-{
-	set_strap_pins(STRAP_AR8035);
-	SETUP_IOMUX_PADS(enet_ar8035_gpio_pads);
-}
-
-static void setup_enet_ar8035(void)
-{
-	SETUP_IOMUX_PADS(enet_ar8035_pads);
-}
-
-static void setup_iomux_enet(void)
-{
-	gpio_direction_output(GP_RGMII_PHY_RESET, 0); /* PHY rst */
-	setup_gpio_ar8035();
-
-	/* Need delay 10ms according to KSZ9021 spec */
-	/* 1 ms minimum reset pulse for ar8035 */
-	udelay(1000 * 10);
-	gpio_set_value(GP_RGMII_PHY_RESET, 1); /* PHY reset */
-
-	/* strap hold time for AR8035, 5 fails, 6 works, so 12 should be safe */
-	udelay(24);
-
-	setup_enet_ar8035();
-}
-
-static void phy_ar8031_config(struct phy_device *phydev)
-{
-	int val;
-
-	/* Select 125MHz clk from local PLL on CLK_25M */
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x0007);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
-	val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
-	val &= ~0x1c;
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, (val|0x0018));
-
-#if 0 //done in ar8031_config
-	/* introduce tx clock delay */
-	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
-	val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (val|0x0100));
-#endif
-}
-
-static void phy_ar8035_config(struct phy_device *phydev)
-{
-	int val;
-
-	/*
-	 * Ar803x phy SmartEEE feature cause link status generates glitch,
-	 * which cause ethernet link down/up issue, so disable SmartEEE
-	 */
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x3);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x805d);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4003);
-	val = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, val & ~(1 << 8));
-
-#if 0 //done in ar8035_config
-	/* rgmii tx clock delay enable */
-	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
-	val = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
-	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (val|0x0100));
-
-	phydev->supported = phydev->drv->features;
-#endif
-}
-
-#define PHY_ID_AR8031	0x004dd074
-#define PHY_ID_AR8035	0x004dd072
-
-int board_phy_config(struct phy_device *phydev)
-{
-	if (((phydev->drv->uid ^ PHY_ID_AR8031) & 0xffffffef) == 0)
-		phy_ar8031_config(phydev);
-	else if (((phydev->drv->uid ^ PHY_ID_AR8035) & 0xffffffef) == 0)
-		phy_ar8035_config(phydev);
-	if (phydev->drv->config)
-		phydev->drv->config(phydev);
-	return 0;
-}
-#endif
-
-#ifdef CONFIG_FEC_MXC
-
-#define IOMUXC_GPR1		(IOMUXC_GPR_BASE_ADDR + 0x04)
-
-static int setup_fec(void)
-{
-	gpio_request(GP_RGMII_PHY_RESET, "fec_rst");
-	gpio_request(GP_PHY_RD0, "fec_rd0");
-	gpio_request(GP_PHY_RD1, "fec_rd1");
-	gpio_request(GP_PHY_RD2, "fec_rd2");
-	gpio_request(GP_PHY_RD3, "fec_rd3");
-	gpio_request(GP_PHY_RX_CTL, "fec_rx_ctl");
-	gpio_request(GP_PHY_RXC, "fec_rxc");
-	setup_iomux_enet();
-
-	/* Use 125M anatop REF_CLK1 for ENET1, not from external */
-	clrsetbits_le32(IOMUXC_GPR1,
-			BIT(13) | BIT(17), 0);
-	return set_clk_enet(ENET_125MHZ);
-}
-#endif
 
 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_IMX8M)
 
@@ -446,8 +291,8 @@ int board_init(void)
 	gpio_request(GP_WATCHDOG, "watchdog");
 	gpio_direction_output(GP_GT911_RESET, 0);
 	gpio_direction_output(GP_WATCHDOG, 1);
-	#ifdef CONFIG_FEC_MXC
-	setup_fec();
+#ifdef CONFIG_DM_ETH
+	board_eth_init(gd->bd);
 #endif
 #ifdef CONFIG_CMD_FBPANEL
 	fbp_setup_display(displays, display_cnt);
@@ -512,6 +357,7 @@ void board_set_default_env(void)
 #ifdef CONFIG_CMD_FBPANEL
 	fbp_setup_env_cmds();
 #endif
+	board_eth_addresses();
 }
 
 int board_late_init(void)
diff --git a/include/configs/nitrogen8m.h b/include/configs/nitrogen8m.h
index c4d150664bb..b38bfd416f1 100644
--- a/include/configs/nitrogen8m.h
+++ b/include/configs/nitrogen8m.h
@@ -79,6 +79,7 @@
 #define CONFIG_FEC_XCV_TYPE		RGMII
 #define CONFIG_FEC_MXC_PHYADDR		4
 #define FEC_QUIRK_ENET_MAC
+#define GP_RGMII_PHY_RESET		IMX_GPIO_NR(1, 9)
 
 #define CONFIG_PHY_GIGE
 #define IMX_FEC_BASE			0x30BE0000
@@ -207,6 +208,12 @@
 #include <config_distro_bootcmd.h>
 #define CONFIG_CMD_FBPANEL
 
+#define BD_RAM_BASE	0x80000000
+#define BD_RAM_SCRIPT	"40008000"
+#define BD_RAM_KERNEL	"40800000"
+#define BD_RAM_RAMDISK	"42800000"
+#define BD_RAM_FDT	"43000000"
+
 #define CONFIG_EXTRA_ENV_SETTINGS \
 	"console=" BD_CONSOLE "\0" \
 	"env_dev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \
@@ -232,8 +239,16 @@
 		"else " \
 			"echo WARN: Cannot load the DT; " \
 		"fi;\0" \
+	"net_upgradeu=dhcp " BD_RAM_SCRIPT " net_upgradeu.scr && source " BD_RAM_SCRIPT "\0" \
+	"otg_upgradeu=run usbnetwork; tftp " BD_RAM_SCRIPT " net_upgradeu.scr && source " BD_RAM_SCRIPT "\0" \
 	"upgradeu=setenv boot_scripts upgrade.scr; boot;" \
 		"echo Upgrade failed!; setenv boot_scripts boot.scr\0" \
+	"usbnet_devaddr=00:19:b8:00:00:02\0" \
+	"usbnet_hostaddr=00:19:b8:00:00:01\0" \
+	"usbnetwork=setenv ethact usb_ether; " \
+		"setenv ipaddr 10.0.0.2; " \
+		"setenv netmask 255.255.255.0; " \
+		"setenv serverip 10.0.0.1;\0" \
 	BOOTENV
 
 #endif
-- 
GitLab