All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth
@ 2019-10-22  3:29 Peng Fan
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk Peng Fan
                   ` (5 more replies)
  0 siblings, 6 replies; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:29 UTC (permalink / raw)
  To: u-boot

This patchset is based on imx/next.

Add imx8mm enet clk
Add fec_mxc more clks support for i.MX8M
Add board code to configure phy and gpr
Fix imx8mm boot

Peng Fan (6):
  clk: imx8mm: add enet clk
  clk: imx: imx8mm: add set_parent callback
  arm: dts: imx8mm: drop assigned clocks for clk node
  net: Kconfig: FEC: Add dependency on i.MX8M
  net: fec_mxc: support i.MX8M with CLK_CCF
  imx: imx8mm-evk: enable ethernet

 arch/arm/dts/imx8mm-evk-u-boot.dtsi     |  7 ++++
 board/freescale/imx8mm_evk/imx8mm_evk.c | 37 +++++++++++++++++
 configs/imx8mm_evk_defconfig            |  7 ++++
 drivers/clk/imx/clk-imx8mm.c            | 46 ++++++++++++++++++++
 drivers/net/Kconfig                     |  2 +-
 drivers/net/fec_mxc.c                   | 74 ++++++++++++++++++++++++++-------
 drivers/net/fec_mxc.h                   |  4 ++
 include/configs/imx8mm_evk.h            |  8 ++++
 8 files changed, 169 insertions(+), 16 deletions(-)

-- 
2.16.4

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk
  2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
@ 2019-10-22  3:29 ` Peng Fan
  2019-10-23 16:31   ` Schrempf Frieder
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 2/6] clk: imx: imx8mm: add set_parent callback Peng Fan
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:29 UTC (permalink / raw)
  To: u-boot

Add enet ref/timer/PHY_REF/root clk which are required to make enet
function well.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/clk/imx/clk-imx8mm.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
index f4913e70ab..4911345fd9 100644
--- a/drivers/clk/imx/clk-imx8mm.c
+++ b/drivers/clk/imx/clk-imx8mm.c
@@ -80,6 +80,17 @@ static const char *imx8mm_ahb_sels[] = {"osc_24m", "sys_pll1_133m", "sys_pll1_80
 static const char *imx8mm_enet_axi_sels[] = {"clock-osc-24m", "sys_pll1_266m", "sys_pll1_800m", "sys_pll2_250m",
 					     "sys_pll2_200m", "audio_pll1_out", "video_pll1_out", "sys_pll3_out", };
 
+#ifndef CONFIG_SPL_BUILD
+static const char *imx8mm_enet_ref_sels[] = {"clock-osc-24m", "sys_pll2_125m", "sys_pll2_50m", "sys_pll2_100m",
+					     "sys_pll1_160m", "audio_pll1_out", "video_pll1_out", "clk_ext4", };
+
+static const char *imx8mm_enet_timer_sels[] = {"clock-osc-24m", "sys_pll2_100m", "audio_pll1_out", "clk_ext1", "clk_ext2",
+					       "clk_ext3", "clk_ext4", "video_pll1_out", };
+
+static const char *imx8mm_enet_phy_sels[] = {"clock-osc-24m", "sys_pll2_50m", "sys_pll2_125m", "sys_pll2_200m",
+					     "sys_pll2_500m", "video_pll1_out", "audio_pll2_out", };
+#endif
+
 static const char *imx8mm_nand_usdhc_sels[] = {"clock-osc-24m", "sys_pll1_266m", "sys_pll1_800m", "sys_pll2_200m",
 					       "sys_pll1_133m", "sys_pll3_out", "sys_pll2_250m", "audio_pll1_out", };
 
@@ -363,6 +374,22 @@ static int imx8mm_clk_probe(struct udevice *dev)
 	clk_dm(IMX8MM_CLK_USDHC3_ROOT,
 	       imx_clk_gate4("usdhc3_root_clk", "usdhc3", base + 0x45e0, 0));
 
+	/* clks not needed in SPL stage */
+#ifndef CONFIG_SPL_BUILD
+	clk_dm(IMX8MM_CLK_ENET_REF,
+	       imx8m_clk_composite("enet_ref", imx8mm_enet_ref_sels,
+	       base + 0xa980));
+	clk_dm(IMX8MM_CLK_ENET_TIMER,
+	       imx8m_clk_composite("enet_timer", imx8mm_enet_timer_sels,
+	       base + 0xaa00));
+	clk_dm(IMX8MM_CLK_ENET_PHY_REF,
+	       imx8m_clk_composite("enet_phy", imx8mm_enet_phy_sels,
+	       base + 0xaa80));
+	clk_dm(IMX8MM_CLK_ENET1_ROOT,
+	       imx_clk_gate4("enet1_root_clk", "enet_axi",
+	       base + 0x40a0, 0));
+#endif
+
 #ifdef CONFIG_SPL_BUILD
 	struct clk *clkp, *clkp1;
 
-- 
2.16.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 2/6] clk: imx: imx8mm: add set_parent callback
  2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk Peng Fan
@ 2019-10-22  3:29 ` Peng Fan
  2019-10-23 16:31   ` Schrempf Frieder
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 3/6] arm: dts: imx8mm: drop assigned clocks for clk node Peng Fan
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:29 UTC (permalink / raw)
  To: u-boot

Add set_parent callback, then assigned-clock-parents in dts could
be work.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/clk/imx/clk-imx8mm.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
index 4911345fd9..091b092bbb 100644
--- a/drivers/clk/imx/clk-imx8mm.c
+++ b/drivers/clk/imx/clk-imx8mm.c
@@ -175,11 +175,30 @@ static int imx8mm_clk_enable(struct clk *clk)
 	return __imx8mm_clk_enable(clk, 1);
 }
 
+static int imx8mm_clk_set_parent(struct clk *clk, struct clk *parent)
+{
+	struct clk *c, *cp;
+	int ret;
+
+	debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
+
+	ret = clk_get_by_id(clk->id, &c);
+	if (ret)
+		return ret;
+
+	ret = clk_get_by_id(parent->id, &cp);
+	if (ret)
+		return ret;
+
+	return clk_set_parent(c, cp);
+}
+
 static struct clk_ops imx8mm_clk_ops = {
 	.set_rate = imx8mm_clk_set_rate,
 	.get_rate = imx8mm_clk_get_rate,
 	.enable = imx8mm_clk_enable,
 	.disable = imx8mm_clk_disable,
+	.set_parent = imx8mm_clk_set_parent,
 };
 
 static int imx8mm_clk_probe(struct udevice *dev)
-- 
2.16.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 3/6] arm: dts: imx8mm: drop assigned clocks for clk node
  2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk Peng Fan
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 2/6] clk: imx: imx8mm: add set_parent callback Peng Fan
@ 2019-10-22  3:29 ` Peng Fan
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 4/6] net: Kconfig: FEC: Add dependency on i.MX8M Peng Fan
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:29 UTC (permalink / raw)
  To: u-boot

Drop assigned clocks for clk node, this will break boot on i.MX8MM EVK
board.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 arch/arm/dts/imx8mm-evk-u-boot.dtsi | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/dts/imx8mm-evk-u-boot.dtsi b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
index 16093f2067..f62a7cf97d 100644
--- a/arch/arm/dts/imx8mm-evk-u-boot.dtsi
+++ b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
@@ -11,6 +11,9 @@
 &clk {
 	u-boot,dm-spl;
 	u-boot,dm-pre-reloc;
+	/delete-property/ assigned-clocks;
+	/delete-property/ assigned-clock-parents;
+	/delete-property/ assigned-clock-rates;
 };
 
 &osc_24m {
-- 
2.16.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 4/6] net: Kconfig: FEC: Add dependency on i.MX8M
  2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
                   ` (2 preceding siblings ...)
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 3/6] arm: dts: imx8mm: drop assigned clocks for clk node Peng Fan
@ 2019-10-22  3:29 ` Peng Fan
  2019-10-23 16:31   ` Schrempf Frieder
  2019-10-22  3:30 ` [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF Peng Fan
  2019-10-22  3:30 ` [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet Peng Fan
  5 siblings, 1 reply; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:29 UTC (permalink / raw)
  To: u-boot

Make FEC driver could be used by i.MX8M when CONFIG_FEC_MXC defined
in defconfig.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/net/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 2ce3092db0..08cdd95727 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -236,7 +236,7 @@ config FEC_MXC_MDIO_BASE
 
 config FEC_MXC
 	bool "FEC Ethernet controller"
-	depends on MX28 || MX5 || MX6 || MX7 || IMX8 || VF610
+	depends on MX28 || MX5 || MX6 || MX7 || IMX8 || IMX8M || VF610
 	help
 	  This driver supports the 10/100 Fast Ethernet controller for
 	  NXP i.MX processors.
-- 
2.16.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF
  2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
                   ` (3 preceding siblings ...)
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 4/6] net: Kconfig: FEC: Add dependency on i.MX8M Peng Fan
@ 2019-10-22  3:30 ` Peng Fan
  2019-10-23 16:31   ` Schrempf Frieder
  2019-10-22  3:30 ` [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet Peng Fan
  5 siblings, 1 reply; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:30 UTC (permalink / raw)
  To: u-boot

Add more clks for fec_mxc according to Linux Kernel 5.4.0-rc1
drivers/net/ethernet/freescale/fec_main.c.

Since i.MX8MQ not support CLK_CCF, so add a check to restrict
the code only effect when CONFIG_IMX8M and CONFIG_CLK_CCF both defined.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/net/fec_mxc.c | 74 ++++++++++++++++++++++++++++++++++++++++-----------
 drivers/net/fec_mxc.h |  4 +++
 2 files changed, 63 insertions(+), 15 deletions(-)

diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index 080dbcf7db..9362aa0d05 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -125,28 +125,29 @@ static int fec_mdio_read(struct ethernet_regs *eth, uint8_t phyaddr,
 
 static int fec_get_clk_rate(void *udev, int idx)
 {
-#if IS_ENABLED(CONFIG_IMX8)
 	struct fec_priv *fec;
 	struct udevice *dev;
 	int ret;
 
-	dev = udev;
-	if (!dev) {
-		ret = uclass_get_device(UCLASS_ETH, idx, &dev);
-		if (ret < 0) {
-			debug("Can't get FEC udev: %d\n", ret);
-			return ret;
+	if (IS_ENABLED(CONFIG_IMX8) ||
+	    (IS_ENABLED(CONFIG_IMX8M) && IS_ENABLED(CONFIG_CLK_CCF))) {
+		dev = udev;
+		if (!dev) {
+			ret = uclass_get_device(UCLASS_ETH, idx, &dev);
+			if (ret < 0) {
+				debug("Can't get FEC udev: %d\n", ret);
+				return ret;
+			}
 		}
-	}
 
-	fec = dev_get_priv(dev);
-	if (fec)
-		return fec->clk_rate;
+		fec = dev_get_priv(dev);
+		if (fec)
+			return fec->clk_rate;
 
-	return -EINVAL;
-#else
-	return imx_get_fecclk();
-#endif
+		return -EINVAL;
+	} else {
+		return imx_get_fecclk();
+	}
 }
 
 static void fec_mii_setspeed(struct ethernet_regs *eth)
@@ -1335,6 +1336,49 @@ static int fecmxc_probe(struct udevice *dev)
 			return ret;
 		}
 
+		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
+	} else if (IS_ENABLED(CONFIG_IMX8M) && IS_ENABLED(CONFIG_CLK_CCF)) {
+		ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk);
+		if (ret < 0) {
+			debug("Can't get FEC ipg clk: %d\n", ret);
+			return ret;
+		} else {
+			ret = clk_enable(&priv->ipg_clk);
+			if(ret)
+				return ret;
+		}
+
+		ret = clk_get_by_name(dev, "ipg", &priv->ahb_clk);
+		if (ret < 0) {
+			debug("Can't get FEC ahb clk: %d\n", ret);
+			return ret;
+		} else {
+			ret = clk_enable(&priv->ahb_clk);
+			if (ret)
+				return ret;
+		}
+
+		ret = clk_get_by_name(dev, "enet_out", &priv->clk_enet_out);
+		if (!ret) {
+			ret = clk_enable(&priv->clk_enet_out);
+			if (ret)
+				return ret;
+		}
+
+		ret = clk_get_by_name(dev, "enet_clk_ref", &priv->clk_ref);
+		if (!ret) {
+			ret = clk_enable(&priv->clk_ref);
+			if (ret)
+				return ret;
+		}
+
+		ret = clk_get_by_name(dev, "ptp", &priv->clk_ptp);
+		if (!ret) {
+			ret = clk_enable(&priv->clk_ptp);
+			if (ret)
+				return ret;
+		}
+
 		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
 	}
 
diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
index e5f2dd75c5..723b06a651 100644
--- a/drivers/net/fec_mxc.h
+++ b/drivers/net/fec_mxc.h
@@ -264,6 +264,10 @@ struct fec_priv {
 	u32 interface;
 #endif
 	struct clk ipg_clk;
+	struct clk ahb_clk;
+	struct clk clk_enet_out;
+	struct clk clk_ref;
+	struct clk clk_ptp;
 	u32 clk_rate;
 };
 
-- 
2.16.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet
  2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
                   ` (4 preceding siblings ...)
  2019-10-22  3:30 ` [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF Peng Fan
@ 2019-10-22  3:30 ` Peng Fan
  2019-10-22 12:24   ` Fabio Estevam
  5 siblings, 1 reply; 15+ messages in thread
From: Peng Fan @ 2019-10-22  3:30 UTC (permalink / raw)
  To: u-boot

add phy-reset-gpios to reset phy
Add board_phy_config to configure phy
Enable DM_ETH

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 arch/arm/dts/imx8mm-evk-u-boot.dtsi     |  4 ++++
 board/freescale/imx8mm_evk/imx8mm_evk.c | 37 +++++++++++++++++++++++++++++++++
 configs/imx8mm_evk_defconfig            |  7 +++++++
 include/configs/imx8mm_evk.h            |  8 +++++++
 4 files changed, 56 insertions(+)

diff --git a/arch/arm/dts/imx8mm-evk-u-boot.dtsi b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
index f62a7cf97d..3502602fbb 100644
--- a/arch/arm/dts/imx8mm-evk-u-boot.dtsi
+++ b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
@@ -113,3 +113,7 @@
 &pinctrl_pmic {
 	u-boot,dm-spl;
 };
+
+&fec1 {
+	phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
+};
diff --git a/board/freescale/imx8mm_evk/imx8mm_evk.c b/board/freescale/imx8mm_evk/imx8mm_evk.c
index e4742338e3..a0af550f5e 100644
--- a/board/freescale/imx8mm_evk/imx8mm_evk.c
+++ b/board/freescale/imx8mm_evk/imx8mm_evk.c
@@ -4,6 +4,11 @@
  */
 
 #include <common.h>
+#include <miiphy.h>
+#include <netdev.h>
+
+#include <asm/arch/clock.h>
+#include <asm/io.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -14,8 +19,40 @@ int dram_init(void)
 	return 0;
 }
 
+#if IS_ENABLED(CONFIG_FEC_MXC)
+static int setup_fec(void)
+{
+	struct iomuxc_gpr_base_regs *gpr =
+		(struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
+
+	/* Use 125M anatop REF_CLK1 for ENET1, not from external */
+	clrsetbits_le32(&gpr->gpr[1], 0x2000, 0);
+
+	return 0;
+}
+
+int board_phy_config(struct phy_device *phydev)
+{
+	/* enable rgmii rxc skew and phy mode select to RGMII copper */
+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f);
+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8);
+
+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x00);
+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x82ee);
+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
+	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
+
+	if (phydev->drv->config)
+		phydev->drv->config(phydev);
+	return 0;
+}
+#endif
+
 int board_init(void)
 {
+	if (IS_ENABLED(CONFIG_FEC_MXC))
+		setup_fec();
+
 	return 0;
 }
 
diff --git a/configs/imx8mm_evk_defconfig b/configs/imx8mm_evk_defconfig
index 4cbc62fd8f..9bf5c45a87 100644
--- a/configs/imx8mm_evk_defconfig
+++ b/configs/imx8mm_evk_defconfig
@@ -35,6 +35,9 @@ CONFIG_CMD_FUSE=y
 CONFIG_CMD_GPIO=y
 CONFIG_CMD_I2C=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
 CONFIG_CMD_CACHE=y
 CONFIG_CMD_REGULATOR=y
 CONFIG_CMD_EXT2=y
@@ -62,7 +65,11 @@ CONFIG_DM_MMC=y
 CONFIG_SUPPORT_EMMC_BOOT=y
 CONFIG_FSL_ESDHC_IMX=y
 CONFIG_PHYLIB=y
+CONFIG_PHY_ATHEROS=y
 CONFIG_DM_ETH=y
+CONFIG_PHY_GIGE=y
+CONFIG_FEC_MXC=y
+CONFIG_MII=y
 CONFIG_PINCTRL=y
 CONFIG_SPL_PINCTRL=y
 CONFIG_PINCTRL_IMX8M=y
diff --git a/include/configs/imx8mm_evk.h b/include/configs/imx8mm_evk.h
index a9d99ec8b7..e0c5f5a626 100644
--- a/include/configs/imx8mm_evk.h
+++ b/include/configs/imx8mm_evk.h
@@ -150,4 +150,12 @@
 
 #define CONFIG_SYS_I2C_SPEED		100000
 
+#define CONFIG_ETHPRIME                 "FEC"
+
+#define CONFIG_FEC_XCV_TYPE             RGMII
+#define CONFIG_FEC_MXC_PHYADDR          0
+#define FEC_QUIRK_ENET_MAC
+
+#define IMX_FEC_BASE			0x30BE0000
+
 #endif
-- 
2.16.4

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet
  2019-10-22  3:30 ` [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet Peng Fan
@ 2019-10-22 12:24   ` Fabio Estevam
  2019-10-23 13:35     ` Peng Fan
  0 siblings, 1 reply; 15+ messages in thread
From: Fabio Estevam @ 2019-10-22 12:24 UTC (permalink / raw)
  To: u-boot

Hi Peng,

On Tue, Oct 22, 2019 at 12:30 AM Peng Fan <peng.fan@nxp.com> wrote:
>
> add phy-reset-gpios to reset phy
> Add board_phy_config to configure phy
> Enable DM_ETH
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>  arch/arm/dts/imx8mm-evk-u-boot.dtsi     |  4 ++++
>  board/freescale/imx8mm_evk/imx8mm_evk.c | 37 +++++++++++++++++++++++++++++++++
>  configs/imx8mm_evk_defconfig            |  7 +++++++
>  include/configs/imx8mm_evk.h            |  8 +++++++
>  4 files changed, 56 insertions(+)
>
> diff --git a/arch/arm/dts/imx8mm-evk-u-boot.dtsi b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> index f62a7cf97d..3502602fbb 100644
> --- a/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> +++ b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> @@ -113,3 +113,7 @@
>  &pinctrl_pmic {
>         u-boot,dm-spl;
>  };
> +
> +&fec1 {
> +       phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;

This does not seem to be U-Boot specific information.

I would suggest adding this in the main dts instead.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet
  2019-10-22 12:24   ` Fabio Estevam
@ 2019-10-23 13:35     ` Peng Fan
  0 siblings, 0 replies; 15+ messages in thread
From: Peng Fan @ 2019-10-23 13:35 UTC (permalink / raw)
  To: u-boot

> Subject: Re: [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet
> 
> Hi Peng,
> 
> On Tue, Oct 22, 2019 at 12:30 AM Peng Fan <peng.fan@nxp.com> wrote:
> >
> > add phy-reset-gpios to reset phy
> > Add board_phy_config to configure phy
> > Enable DM_ETH
> >
> > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > ---
> >  arch/arm/dts/imx8mm-evk-u-boot.dtsi     |  4 ++++
> >  board/freescale/imx8mm_evk/imx8mm_evk.c | 37
> +++++++++++++++++++++++++++++++++
> >  configs/imx8mm_evk_defconfig            |  7 +++++++
> >  include/configs/imx8mm_evk.h            |  8 +++++++
> >  4 files changed, 56 insertions(+)
> >
> > diff --git a/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> > index f62a7cf97d..3502602fbb 100644
> > --- a/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> > +++ b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
> > @@ -113,3 +113,7 @@
> >  &pinctrl_pmic {
> >         u-boot,dm-spl;
> >  };
> > +
> > +&fec1 {
> > +       phy-reset-gpios = <&gpio4 22 GPIO_ACTIVE_LOW>;
> 
> This does not seem to be U-Boot specific information.
> 
> I would suggest adding this in the main dts instead.

I have sent patches to Linux community. When that got merged, we could sync
the dts and drop it from u-boot.dtsi. But for now, I prefer to add it in u-boot.dtsi,
because Linux dts not have that for now.

Thanks,
Peng.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk Peng Fan
@ 2019-10-23 16:31   ` Schrempf Frieder
  0 siblings, 0 replies; 15+ messages in thread
From: Schrempf Frieder @ 2019-10-23 16:31 UTC (permalink / raw)
  To: u-boot

On 22.10.19 05:29, Peng Fan wrote:
> Add enet ref/timer/PHY_REF/root clk which are required to make enet
> function well.
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>

Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>

> ---
>   drivers/clk/imx/clk-imx8mm.c | 27 +++++++++++++++++++++++++++
>   1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
> index f4913e70ab..4911345fd9 100644
> --- a/drivers/clk/imx/clk-imx8mm.c
> +++ b/drivers/clk/imx/clk-imx8mm.c
> @@ -80,6 +80,17 @@ static const char *imx8mm_ahb_sels[] = {"osc_24m", "sys_pll1_133m", "sys_pll1_80
>   static const char *imx8mm_enet_axi_sels[] = {"clock-osc-24m", "sys_pll1_266m", "sys_pll1_800m", "sys_pll2_250m",
>   					     "sys_pll2_200m", "audio_pll1_out", "video_pll1_out", "sys_pll3_out", };
>   
> +#ifndef CONFIG_SPL_BUILD
> +static const char *imx8mm_enet_ref_sels[] = {"clock-osc-24m", "sys_pll2_125m", "sys_pll2_50m", "sys_pll2_100m",
> +					     "sys_pll1_160m", "audio_pll1_out", "video_pll1_out", "clk_ext4", };
> +
> +static const char *imx8mm_enet_timer_sels[] = {"clock-osc-24m", "sys_pll2_100m", "audio_pll1_out", "clk_ext1", "clk_ext2",
> +					       "clk_ext3", "clk_ext4", "video_pll1_out", };
> +
> +static const char *imx8mm_enet_phy_sels[] = {"clock-osc-24m", "sys_pll2_50m", "sys_pll2_125m", "sys_pll2_200m",
> +					     "sys_pll2_500m", "video_pll1_out", "audio_pll2_out", };
> +#endif
> +
>   static const char *imx8mm_nand_usdhc_sels[] = {"clock-osc-24m", "sys_pll1_266m", "sys_pll1_800m", "sys_pll2_200m",
>   					       "sys_pll1_133m", "sys_pll3_out", "sys_pll2_250m", "audio_pll1_out", };
>   
> @@ -363,6 +374,22 @@ static int imx8mm_clk_probe(struct udevice *dev)
>   	clk_dm(IMX8MM_CLK_USDHC3_ROOT,
>   	       imx_clk_gate4("usdhc3_root_clk", "usdhc3", base + 0x45e0, 0));
>   
> +	/* clks not needed in SPL stage */
> +#ifndef CONFIG_SPL_BUILD
> +	clk_dm(IMX8MM_CLK_ENET_REF,
> +	       imx8m_clk_composite("enet_ref", imx8mm_enet_ref_sels,
> +	       base + 0xa980));
> +	clk_dm(IMX8MM_CLK_ENET_TIMER,
> +	       imx8m_clk_composite("enet_timer", imx8mm_enet_timer_sels,
> +	       base + 0xaa00));
> +	clk_dm(IMX8MM_CLK_ENET_PHY_REF,
> +	       imx8m_clk_composite("enet_phy", imx8mm_enet_phy_sels,
> +	       base + 0xaa80));
> +	clk_dm(IMX8MM_CLK_ENET1_ROOT,
> +	       imx_clk_gate4("enet1_root_clk", "enet_axi",
> +	       base + 0x40a0, 0));
> +#endif
> +
>   #ifdef CONFIG_SPL_BUILD
>   	struct clk *clkp, *clkp1;
>   
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 2/6] clk: imx: imx8mm: add set_parent callback
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 2/6] clk: imx: imx8mm: add set_parent callback Peng Fan
@ 2019-10-23 16:31   ` Schrempf Frieder
  0 siblings, 0 replies; 15+ messages in thread
From: Schrempf Frieder @ 2019-10-23 16:31 UTC (permalink / raw)
  To: u-boot

On 22.10.19 05:29, Peng Fan wrote:
> Add set_parent callback, then assigned-clock-parents in dts could
> be work.
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>

Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>

> ---
>   drivers/clk/imx/clk-imx8mm.c | 19 +++++++++++++++++++
>   1 file changed, 19 insertions(+)
> 
> diff --git a/drivers/clk/imx/clk-imx8mm.c b/drivers/clk/imx/clk-imx8mm.c
> index 4911345fd9..091b092bbb 100644
> --- a/drivers/clk/imx/clk-imx8mm.c
> +++ b/drivers/clk/imx/clk-imx8mm.c
> @@ -175,11 +175,30 @@ static int imx8mm_clk_enable(struct clk *clk)
>   	return __imx8mm_clk_enable(clk, 1);
>   }
>   
> +static int imx8mm_clk_set_parent(struct clk *clk, struct clk *parent)
> +{
> +	struct clk *c, *cp;
> +	int ret;
> +
> +	debug("%s(#%lu), parent: %lu\n", __func__, clk->id, parent->id);
> +
> +	ret = clk_get_by_id(clk->id, &c);
> +	if (ret)
> +		return ret;
> +
> +	ret = clk_get_by_id(parent->id, &cp);
> +	if (ret)
> +		return ret;
> +
> +	return clk_set_parent(c, cp);
> +}
> +
>   static struct clk_ops imx8mm_clk_ops = {
>   	.set_rate = imx8mm_clk_set_rate,
>   	.get_rate = imx8mm_clk_get_rate,
>   	.enable = imx8mm_clk_enable,
>   	.disable = imx8mm_clk_disable,
> +	.set_parent = imx8mm_clk_set_parent,
>   };
>   
>   static int imx8mm_clk_probe(struct udevice *dev)
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 4/6] net: Kconfig: FEC: Add dependency on i.MX8M
  2019-10-22  3:29 ` [U-Boot] [PATCH V1 4/6] net: Kconfig: FEC: Add dependency on i.MX8M Peng Fan
@ 2019-10-23 16:31   ` Schrempf Frieder
  0 siblings, 0 replies; 15+ messages in thread
From: Schrempf Frieder @ 2019-10-23 16:31 UTC (permalink / raw)
  To: u-boot

On 22.10.19 05:29, Peng Fan wrote:
> Make FEC driver could be used by i.MX8M when CONFIG_FEC_MXC defined
> in defconfig.
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>

Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de>

> ---
>   drivers/net/Kconfig | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 2ce3092db0..08cdd95727 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -236,7 +236,7 @@ config FEC_MXC_MDIO_BASE
>   
>   config FEC_MXC
>   	bool "FEC Ethernet controller"
> -	depends on MX28 || MX5 || MX6 || MX7 || IMX8 || VF610
> +	depends on MX28 || MX5 || MX6 || MX7 || IMX8 || IMX8M || VF610
>   	help
>   	  This driver supports the 10/100 Fast Ethernet controller for
>   	  NXP i.MX processors.
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF
  2019-10-22  3:30 ` [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF Peng Fan
@ 2019-10-23 16:31   ` Schrempf Frieder
  2019-10-24  1:09     ` Peng Fan
  0 siblings, 1 reply; 15+ messages in thread
From: Schrempf Frieder @ 2019-10-23 16:31 UTC (permalink / raw)
  To: u-boot

On 22.10.19 05:30, Peng Fan wrote:
> Add more clks for fec_mxc according to Linux Kernel 5.4.0-rc1
> drivers/net/ethernet/freescale/fec_main.c.
> 
> Since i.MX8MQ not support CLK_CCF, so add a check to restrict
> the code only effect when CONFIG_IMX8M and CONFIG_CLK_CCF both defined.
> 
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
>   drivers/net/fec_mxc.c | 74 ++++++++++++++++++++++++++++++++++++++++-----------
>   drivers/net/fec_mxc.h |  4 +++
>   2 files changed, 63 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
> index 080dbcf7db..9362aa0d05 100644
> --- a/drivers/net/fec_mxc.c
> +++ b/drivers/net/fec_mxc.c
> @@ -125,28 +125,29 @@ static int fec_mdio_read(struct ethernet_regs *eth, uint8_t phyaddr,
>   
>   static int fec_get_clk_rate(void *udev, int idx)
>   {
> -#if IS_ENABLED(CONFIG_IMX8)
>   	struct fec_priv *fec;
>   	struct udevice *dev;
>   	int ret;
>   
> -	dev = udev;
> -	if (!dev) {
> -		ret = uclass_get_device(UCLASS_ETH, idx, &dev);
> -		if (ret < 0) {
> -			debug("Can't get FEC udev: %d\n", ret);
> -			return ret;
> +	if (IS_ENABLED(CONFIG_IMX8) ||
> +	    (IS_ENABLED(CONFIG_IMX8M) && IS_ENABLED(CONFIG_CLK_CCF))) {

Can't we just drop the IS_ENABLED(CONFIG_IMX8M)? Otherwise we always 
need to touch this code when other SoCs will start using CCF.

Also can you use CONFIG_IS_ENABLED(CLK_CCF) instead of 
IS_ENABLED(CONFIG_CLK_CCF), so we can detect the config options for SPL 
and non-SPL separately?

> +		dev = udev;
> +		if (!dev) {
> +			ret = uclass_get_device(UCLASS_ETH, idx, &dev);
> +			if (ret < 0) {
> +				debug("Can't get FEC udev: %d\n", ret);
> +				return ret;
> +			}
>   		}
> -	}
>   
> -	fec = dev_get_priv(dev);
> -	if (fec)
> -		return fec->clk_rate;
> +		fec = dev_get_priv(dev);
> +		if (fec)
> +			return fec->clk_rate;
>   
> -	return -EINVAL;
> -#else
> -	return imx_get_fecclk();
> -#endif
> +		return -EINVAL;
> +	} else {
> +		return imx_get_fecclk();
> +	}
>   }
>   
>   static void fec_mii_setspeed(struct ethernet_regs *eth)
> @@ -1335,6 +1336,49 @@ static int fecmxc_probe(struct udevice *dev)
>   			return ret;
>   		}
>   
> +		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
> +	} else if (IS_ENABLED(CONFIG_IMX8M) && IS_ENABLED(CONFIG_CLK_CCF)) {

Same questions here as above.

> +		ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk);
> +		if (ret < 0) {
> +			debug("Can't get FEC ipg clk: %d\n", ret);
> +			return ret;
> +		} else {

You can drop the else branches here and below as the code returns before 
it will be evaluated.

> +			ret = clk_enable(&priv->ipg_clk);
> +			if(ret)
> +				return ret;
> +		}
> +
> +		ret = clk_get_by_name(dev, "ipg", &priv->ahb_clk);

This should be "ahb", not "ipg".

> +		if (ret < 0) {
> +			debug("Can't get FEC ahb clk: %d\n", ret);
> +			return ret;
> +		} else {
> +			ret = clk_enable(&priv->ahb_clk);
> +			if (ret)
> +				return ret;
> +		}
> +
> +		ret = clk_get_by_name(dev, "enet_out", &priv->clk_enet_out);
> +		if (!ret) {
> +			ret = clk_enable(&priv->clk_enet_out);
> +			if (ret)
> +				return ret;
> +		}
> +
> +		ret = clk_get_by_name(dev, "enet_clk_ref", &priv->clk_ref);
> +		if (!ret) {
> +			ret = clk_enable(&priv->clk_ref);
> +			if (ret)
> +				return ret;
> +		}
> +
> +		ret = clk_get_by_name(dev, "ptp", &priv->clk_ptp);
> +		if (!ret) {
> +			ret = clk_enable(&priv->clk_ptp);
> +			if (ret)
> +				return ret;
> +		}
> +
>   		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
>   	}
>   
> diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
> index e5f2dd75c5..723b06a651 100644
> --- a/drivers/net/fec_mxc.h
> +++ b/drivers/net/fec_mxc.h
> @@ -264,6 +264,10 @@ struct fec_priv {
>   	u32 interface;
>   #endif
>   	struct clk ipg_clk;
> +	struct clk ahb_clk;
> +	struct clk clk_enet_out;
> +	struct clk clk_ref;
> +	struct clk clk_ptp;
>   	u32 clk_rate;
>   };
>   
> 

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF
  2019-10-23 16:31   ` Schrempf Frieder
@ 2019-10-24  1:09     ` Peng Fan
  2019-10-24  7:53       ` Schrempf Frieder
  0 siblings, 1 reply; 15+ messages in thread
From: Peng Fan @ 2019-10-24  1:09 UTC (permalink / raw)
  To: u-boot

> Subject: Re: [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with
> CLK_CCF
> 
> On 22.10.19 05:30, Peng Fan wrote:
> > Add more clks for fec_mxc according to Linux Kernel 5.4.0-rc1
> > drivers/net/ethernet/freescale/fec_main.c.
> >
> > Since i.MX8MQ not support CLK_CCF, so add a check to restrict the code
> > only effect when CONFIG_IMX8M and CONFIG_CLK_CCF both defined.
> >
> > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > ---
> >   drivers/net/fec_mxc.c | 74
> ++++++++++++++++++++++++++++++++++++++++-----------
> >   drivers/net/fec_mxc.h |  4 +++
> >   2 files changed, 63 insertions(+), 15 deletions(-)
> >
> > diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index
> > 080dbcf7db..9362aa0d05 100644
> > --- a/drivers/net/fec_mxc.c
> > +++ b/drivers/net/fec_mxc.c
> > @@ -125,28 +125,29 @@ static int fec_mdio_read(struct ethernet_regs
> > *eth, uint8_t phyaddr,
> >
> >   static int fec_get_clk_rate(void *udev, int idx)
> >   {
> > -#if IS_ENABLED(CONFIG_IMX8)
> >   	struct fec_priv *fec;
> >   	struct udevice *dev;
> >   	int ret;
> >
> > -	dev = udev;
> > -	if (!dev) {
> > -		ret = uclass_get_device(UCLASS_ETH, idx, &dev);
> > -		if (ret < 0) {
> > -			debug("Can't get FEC udev: %d\n", ret);
> > -			return ret;
> > +	if (IS_ENABLED(CONFIG_IMX8) ||
> > +	    (IS_ENABLED(CONFIG_IMX8M) &&
> IS_ENABLED(CONFIG_CLK_CCF))) {
> 
> Can't we just drop the IS_ENABLED(CONFIG_IMX8M)? Otherwise we always
> need to touch this code when other SoCs will start using CCF.

ok. 

> 
> Also can you use CONFIG_IS_ENABLED(CLK_CCF) instead of
> IS_ENABLED(CONFIG_CLK_CCF), so we can detect the config options for SPL
> and non-SPL separately?

FEC will not be used in SPL stage, so I not use CONFIG_IS_ENABLED.
But it does not hurt using IS_ENABLED, change in v2.

Regards,
Peng.

> 
> > +		dev = udev;
> > +		if (!dev) {
> > +			ret = uclass_get_device(UCLASS_ETH, idx, &dev);
> > +			if (ret < 0) {
> > +				debug("Can't get FEC udev: %d\n", ret);
> > +				return ret;
> > +			}
> >   		}
> > -	}
> >
> > -	fec = dev_get_priv(dev);
> > -	if (fec)
> > -		return fec->clk_rate;
> > +		fec = dev_get_priv(dev);
> > +		if (fec)
> > +			return fec->clk_rate;
> >
> > -	return -EINVAL;
> > -#else
> > -	return imx_get_fecclk();
> > -#endif
> > +		return -EINVAL;
> > +	} else {
> > +		return imx_get_fecclk();
> > +	}
> >   }
> >
> >   static void fec_mii_setspeed(struct ethernet_regs *eth) @@ -1335,6
> > +1336,49 @@ static int fecmxc_probe(struct udevice *dev)
> >   			return ret;
> >   		}
> >
> > +		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
> > +	} else if (IS_ENABLED(CONFIG_IMX8M) &&
> IS_ENABLED(CONFIG_CLK_CCF)) {
> 
> Same questions here as above.
> 
> > +		ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk);
> > +		if (ret < 0) {
> > +			debug("Can't get FEC ipg clk: %d\n", ret);
> > +			return ret;
> > +		} else {
> 
> You can drop the else branches here and below as the code returns before it
> will be evaluated.
> 
> > +			ret = clk_enable(&priv->ipg_clk);
> > +			if(ret)
> > +				return ret;
> > +		}
> > +
> > +		ret = clk_get_by_name(dev, "ipg", &priv->ahb_clk);
> 
> This should be "ahb", not "ipg".
> 
> > +		if (ret < 0) {
> > +			debug("Can't get FEC ahb clk: %d\n", ret);
> > +			return ret;
> > +		} else {
> > +			ret = clk_enable(&priv->ahb_clk);
> > +			if (ret)
> > +				return ret;
> > +		}
> > +
> > +		ret = clk_get_by_name(dev, "enet_out", &priv->clk_enet_out);
> > +		if (!ret) {
> > +			ret = clk_enable(&priv->clk_enet_out);
> > +			if (ret)
> > +				return ret;
> > +		}
> > +
> > +		ret = clk_get_by_name(dev, "enet_clk_ref", &priv->clk_ref);
> > +		if (!ret) {
> > +			ret = clk_enable(&priv->clk_ref);
> > +			if (ret)
> > +				return ret;
> > +		}
> > +
> > +		ret = clk_get_by_name(dev, "ptp", &priv->clk_ptp);
> > +		if (!ret) {
> > +			ret = clk_enable(&priv->clk_ptp);
> > +			if (ret)
> > +				return ret;
> > +		}
> > +
> >   		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
> >   	}
> >
> > diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h index
> > e5f2dd75c5..723b06a651 100644
> > --- a/drivers/net/fec_mxc.h
> > +++ b/drivers/net/fec_mxc.h
> > @@ -264,6 +264,10 @@ struct fec_priv {
> >   	u32 interface;
> >   #endif
> >   	struct clk ipg_clk;
> > +	struct clk ahb_clk;
> > +	struct clk clk_enet_out;
> > +	struct clk clk_ref;
> > +	struct clk clk_ptp;
> >   	u32 clk_rate;
> >   };
> >
> >

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF
  2019-10-24  1:09     ` Peng Fan
@ 2019-10-24  7:53       ` Schrempf Frieder
  0 siblings, 0 replies; 15+ messages in thread
From: Schrempf Frieder @ 2019-10-24  7:53 UTC (permalink / raw)
  To: u-boot

On 24.10.19 03:09, Peng Fan wrote:
>> Subject: Re: [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with
>> CLK_CCF
>>
>> On 22.10.19 05:30, Peng Fan wrote:
>>> Add more clks for fec_mxc according to Linux Kernel 5.4.0-rc1
>>> drivers/net/ethernet/freescale/fec_main.c.
>>>
>>> Since i.MX8MQ not support CLK_CCF, so add a check to restrict the code
>>> only effect when CONFIG_IMX8M and CONFIG_CLK_CCF both defined.
>>>
>>> Signed-off-by: Peng Fan <peng.fan@nxp.com>
>>> ---
>>>    drivers/net/fec_mxc.c | 74
>> ++++++++++++++++++++++++++++++++++++++++-----------
>>>    drivers/net/fec_mxc.h |  4 +++
>>>    2 files changed, 63 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c index
>>> 080dbcf7db..9362aa0d05 100644
>>> --- a/drivers/net/fec_mxc.c
>>> +++ b/drivers/net/fec_mxc.c
>>> @@ -125,28 +125,29 @@ static int fec_mdio_read(struct ethernet_regs
>>> *eth, uint8_t phyaddr,
>>>
>>>    static int fec_get_clk_rate(void *udev, int idx)
>>>    {
>>> -#if IS_ENABLED(CONFIG_IMX8)
>>>    	struct fec_priv *fec;
>>>    	struct udevice *dev;
>>>    	int ret;
>>>
>>> -	dev = udev;
>>> -	if (!dev) {
>>> -		ret = uclass_get_device(UCLASS_ETH, idx, &dev);
>>> -		if (ret < 0) {
>>> -			debug("Can't get FEC udev: %d\n", ret);
>>> -			return ret;
>>> +	if (IS_ENABLED(CONFIG_IMX8) ||
>>> +	    (IS_ENABLED(CONFIG_IMX8M) &&
>> IS_ENABLED(CONFIG_CLK_CCF))) {
>>
>> Can't we just drop the IS_ENABLED(CONFIG_IMX8M)? Otherwise we always
>> need to touch this code when other SoCs will start using CCF.
> 
> ok.
> 
>>
>> Also can you use CONFIG_IS_ENABLED(CLK_CCF) instead of
>> IS_ENABLED(CONFIG_CLK_CCF), so we can detect the config options for SPL
>> and non-SPL separately?
> 
> FEC will not be used in SPL stage, so I not use CONFIG_IS_ENABLED.
> But it does not hurt using IS_ENABLED, change in v2.
> 
> Regards,
> Peng.
> 
>>
>>> +		dev = udev;
>>> +		if (!dev) {
>>> +			ret = uclass_get_device(UCLASS_ETH, idx, &dev);
>>> +			if (ret < 0) {
>>> +				debug("Can't get FEC udev: %d\n", ret);
>>> +				return ret;
>>> +			}
>>>    		}
>>> -	}
>>>
>>> -	fec = dev_get_priv(dev);
>>> -	if (fec)
>>> -		return fec->clk_rate;
>>> +		fec = dev_get_priv(dev);
>>> +		if (fec)
>>> +			return fec->clk_rate;
>>>
>>> -	return -EINVAL;
>>> -#else
>>> -	return imx_get_fecclk();
>>> -#endif
>>> +		return -EINVAL;
>>> +	} else {
>>> +		return imx_get_fecclk();
>>> +	}
>>>    }
>>>
>>>    static void fec_mii_setspeed(struct ethernet_regs *eth) @@ -1335,6
>>> +1336,49 @@ static int fecmxc_probe(struct udevice *dev)
>>>    			return ret;
>>>    		}
>>>
>>> +		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
>>> +	} else if (IS_ENABLED(CONFIG_IMX8M) &&
>> IS_ENABLED(CONFIG_CLK_CCF)) {
>>
>> Same questions here as above.
>>
>>> +		ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk);
>>> +		if (ret < 0) {
>>> +			debug("Can't get FEC ipg clk: %d\n", ret);
>>> +			return ret;
>>> +		} else {
>>
>> You can drop the else branches here and below as the code returns before it
>> will be evaluated.

I think you missed this comment for your v2.

>>
>>> +			ret = clk_enable(&priv->ipg_clk);
>>> +			if(ret)
>>> +				return ret;
>>> +		}
>>> +
>>> +		ret = clk_get_by_name(dev, "ipg", &priv->ahb_clk);
>>
>> This should be "ahb", not "ipg".

And this one, too.

>>
>>> +		if (ret < 0) {
>>> +			debug("Can't get FEC ahb clk: %d\n", ret);
>>> +			return ret;
>>> +		} else {
>>> +			ret = clk_enable(&priv->ahb_clk);
>>> +			if (ret)
>>> +				return ret;
>>> +		}
>>> +
>>> +		ret = clk_get_by_name(dev, "enet_out", &priv->clk_enet_out);
>>> +		if (!ret) {
>>> +			ret = clk_enable(&priv->clk_enet_out);
>>> +			if (ret)
>>> +				return ret;
>>> +		}
>>> +
>>> +		ret = clk_get_by_name(dev, "enet_clk_ref", &priv->clk_ref);
>>> +		if (!ret) {
>>> +			ret = clk_enable(&priv->clk_ref);
>>> +			if (ret)
>>> +				return ret;
>>> +		}
>>> +
>>> +		ret = clk_get_by_name(dev, "ptp", &priv->clk_ptp);
>>> +		if (!ret) {
>>> +			ret = clk_enable(&priv->clk_ptp);
>>> +			if (ret)
>>> +				return ret;
>>> +		}
>>> +
>>>    		priv->clk_rate = clk_get_rate(&priv->ipg_clk);
>>>    	}
>>>
>>> diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h index
>>> e5f2dd75c5..723b06a651 100644
>>> --- a/drivers/net/fec_mxc.h
>>> +++ b/drivers/net/fec_mxc.h
>>> @@ -264,6 +264,10 @@ struct fec_priv {
>>>    	u32 interface;
>>>    #endif
>>>    	struct clk ipg_clk;
>>> +	struct clk ahb_clk;
>>> +	struct clk clk_enet_out;
>>> +	struct clk clk_ref;
>>> +	struct clk clk_ptp;
>>>    	u32 clk_rate;
>>>    };
>>>
>>>

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2019-10-24  7:53 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-22  3:29 [U-Boot] [PATCH V1 0/6] imx: imx8mm-evk: support eth Peng Fan
2019-10-22  3:29 ` [U-Boot] [PATCH V1 1/6] clk: imx8mm: add enet clk Peng Fan
2019-10-23 16:31   ` Schrempf Frieder
2019-10-22  3:29 ` [U-Boot] [PATCH V1 2/6] clk: imx: imx8mm: add set_parent callback Peng Fan
2019-10-23 16:31   ` Schrempf Frieder
2019-10-22  3:29 ` [U-Boot] [PATCH V1 3/6] arm: dts: imx8mm: drop assigned clocks for clk node Peng Fan
2019-10-22  3:29 ` [U-Boot] [PATCH V1 4/6] net: Kconfig: FEC: Add dependency on i.MX8M Peng Fan
2019-10-23 16:31   ` Schrempf Frieder
2019-10-22  3:30 ` [U-Boot] [PATCH V1 5/6] net: fec_mxc: support i.MX8M with CLK_CCF Peng Fan
2019-10-23 16:31   ` Schrempf Frieder
2019-10-24  1:09     ` Peng Fan
2019-10-24  7:53       ` Schrempf Frieder
2019-10-22  3:30 ` [U-Boot] [PATCH V1 6/6] imx: imx8mm-evk: enable ethernet Peng Fan
2019-10-22 12:24   ` Fabio Estevam
2019-10-23 13:35     ` Peng Fan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.