Module Name:    src
Committed By:   hkenken
Date:           Tue Nov 12 05:09:29 UTC 2019

Modified Files:
        src/sys/arch/arm/imx: if_enet.c if_enet_imx6.c if_enet_imx7.c
            if_enetreg.h if_enetvar.h
        src/sys/arch/arm/imx/fdt: if_enet_imx.c

Log Message:
IPG clock is used instead of ENET_PLL clock to set MII Speed Control Register.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/imx/if_enet.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/imx/if_enet_imx6.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/imx/if_enet_imx7.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/imx/if_enetreg.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/imx/if_enetvar.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/imx/fdt/if_enet_imx.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/imx/if_enet.c
diff -u src/sys/arch/arm/imx/if_enet.c:1.27 src/sys/arch/arm/imx/if_enet.c:1.28
--- src/sys/arch/arm/imx/if_enet.c:1.27	Fri Sep 20 08:48:55 2019
+++ src/sys/arch/arm/imx/if_enet.c	Tue Nov 12 05:09:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_enet.c,v 1.27 2019/09/20 08:48:55 maxv Exp $	*/
+/*	$NetBSD: if_enet.c,v 1.28 2019/11/12 05:09:29 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org>
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_enet.c,v 1.27 2019/09/20 08:48:55 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_enet.c,v 1.28 2019/11/12 05:09:29 hkenken Exp $");
 
 #include "vlan.h"
 
@@ -1769,9 +1769,9 @@ enet_init_regs(struct enet_softc *sc, in
 	ENET_REG_WRITE(sc, ENET_MIBC, ENET_MIBC_MIB_CLEAR);
 	ENET_REG_WRITE(sc, ENET_MIBC, 0);
 
-	/* MII speed setup. MDCclk(=2.5MHz) = ENET_PLL/((val+1)*2) */
-	val = ((sc->sc_pllclock) / 500000 - 1) / 10;
-	ENET_REG_WRITE(sc, ENET_MSCR, val << 1);
+	/* MII speed setup. MDCclk(=2.5MHz) = (internal module clock)/((val+1)*2) */
+	val = (sc->sc_clock + (5000000 - 1)) / 5000000 - 1;
+	ENET_REG_WRITE(sc, ENET_MSCR, __SHIFTIN(val, ENET_MSCR_MII_SPEED));
 
 	/* Opcode/Pause Duration */
 	ENET_REG_WRITE(sc, ENET_OPD, 0x00010020);

Index: src/sys/arch/arm/imx/if_enet_imx6.c
diff -u src/sys/arch/arm/imx/if_enet_imx6.c:1.6 src/sys/arch/arm/imx/if_enet_imx6.c:1.7
--- src/sys/arch/arm/imx/if_enet_imx6.c:1.6	Tue Jul 30 06:26:31 2019
+++ src/sys/arch/arm/imx/if_enet_imx6.c	Tue Nov 12 05:09:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_enet_imx6.c,v 1.6 2019/07/30 06:26:31 hkenken Exp $	*/
+/*	$NetBSD: if_enet_imx6.c,v 1.7 2019/11/12 05:09:29 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_enet_imx6.c,v 1.6 2019/07/30 06:26:31 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_enet_imx6.c,v 1.7 2019/11/12 05:09:29 hkenken Exp $");
 
 #include "locators.h"
 #include "imxccm.h"
@@ -131,6 +131,11 @@ enet_attach(device_t parent, device_t se
 		iomux_write(IMX6UL_IOMUX_GPR1, v);
 	}
 
+	sc->sc_clk_ipg = imx6_get_clock("enet");
+	if (sc->sc_clk_enet == NULL) {
+		aprint_error(": couldn't get clock ipg\n");
+		return;
+	}
 	sc->sc_clk_enet = imx6_get_clock("enet");
 	if (sc->sc_clk_enet == NULL) {
 		aprint_error(": couldn't get clock enet\n");
@@ -146,7 +151,7 @@ enet_attach(device_t parent, device_t se
 		return;
 	}
 
-	sc->sc_pllclock = clk_get_rate(sc->sc_clk_enet_ref);
+	sc->sc_clock = clk_get_rate(sc->sc_clk_ipg);
 
 	if (bus_space_map(sc->sc_iot, aa->aa_addr, aa->aa_size, 0,
 	    &sc->sc_ioh)) {
@@ -179,6 +184,11 @@ enet_init_clocks(struct enet_softc *sc)
 {
 	int error;
 
+	error = clk_enable(sc->sc_clk_ipg);
+	if (error) {
+		aprint_error_dev(sc->sc_dev, "couldn't enable ipg: %d\n", error);
+		return error;
+	}
 	error = clk_enable(sc->sc_clk_enet);
 	if (error) {
 		aprint_error_dev(sc->sc_dev, "couldn't enable enet: %d\n", error);

Index: src/sys/arch/arm/imx/if_enet_imx7.c
diff -u src/sys/arch/arm/imx/if_enet_imx7.c:1.4 src/sys/arch/arm/imx/if_enet_imx7.c:1.5
--- src/sys/arch/arm/imx/if_enet_imx7.c:1.4	Tue Jul 30 06:26:31 2019
+++ src/sys/arch/arm/imx/if_enet_imx7.c	Tue Nov 12 05:09:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_enet_imx7.c,v 1.4 2019/07/30 06:26:31 hkenken Exp $	*/
+/*	$NetBSD: if_enet_imx7.c,v 1.5 2019/11/12 05:09:29 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_enet_imx7.c,v 1.4 2019/07/30 06:26:31 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_enet_imx7.c,v 1.5 2019/11/12 05:09:29 hkenken Exp $");
 
 #include "locators.h"
 #include "imxccm.h"
@@ -103,9 +103,9 @@ enet_attach(device_t parent, device_t se
 		    "couldn't enable CCM_ANALOG_PLL_ENET\n");
 		return;
 	}
-	sc->sc_pllclock = imx7_get_clock(IMX7CLK_ENET_PLL);
+	sc->sc_clock = imx7_get_clock(IMX7CLK_IPG_CLK_ROOT);
 #else
-	sc->sc_pllclock = 1000000000;
+	sc->sc_clock = 66000000;
 #endif
 
 	if (bus_space_map(sc->sc_iot, aa->aa_addr, aa->aa_size, 0,

Index: src/sys/arch/arm/imx/if_enetreg.h
diff -u src/sys/arch/arm/imx/if_enetreg.h:1.3 src/sys/arch/arm/imx/if_enetreg.h:1.4
--- src/sys/arch/arm/imx/if_enetreg.h:1.3	Fri Jun  9 18:14:59 2017
+++ src/sys/arch/arm/imx/if_enetreg.h	Tue Nov 12 05:09:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_enetreg.h,v 1.3 2017/06/09 18:14:59 ryo Exp $	*/
+/*	$NetBSD: if_enetreg.h,v 1.4 2019/11/12 05:09:29 hkenken Exp $	*/
 
 /*-
  * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org>
@@ -93,16 +93,9 @@
 # define ENET_MMFR_PHY_REG(reg)		__SHIFTIN(reg, __BITS(22, 18))
 # define ENET_MMFR_DATAMASK		0x0000ffff
 #define ENET_MSCR			0x00000044
-# define ENET_MSCR_HOLDTIME_1CLK	0x00000000
-# define ENET_MSCR_HOLDTIME_2CLK	0x00000100
-# define ENET_MSCR_HOLDTIME_3CLK	0x00000200
-# define ENET_MSCR_HOLDTIME_8CLK	0x00000700
+# define ENET_MSCR_HOLDTIME		__BIT(10, 8)
 # define ENET_MSCR_DIS_PRE		__BIT(7)
-# define ENET_MSCR_MII_SPEED_25MHZ	__SHIFTIN(4, __BITS(6, 1))
-# define ENET_MSCR_MII_SPEED_33MHZ	__SHIFTIN(6, __BITS(6, 1))
-# define ENET_MSCR_MII_SPEED_40MHZ	__SHIFTIN(7, __BITS(6, 1))
-# define ENET_MSCR_MII_SPEED_50MHZ	__SHIFTIN(9, __BITS(6, 1))
-# define ENET_MSCR_MII_SPEED_66MHZ	__SHIFTIN(13, __BITS(6, 1))
+# define ENET_MSCR_MII_SPEED		__BITS(6, 1)
 
 #define ENET_MIBC			0x00000064
 # define ENET_MIBC_MIB_DIS		__BIT(31)

Index: src/sys/arch/arm/imx/if_enetvar.h
diff -u src/sys/arch/arm/imx/if_enetvar.h:1.5 src/sys/arch/arm/imx/if_enetvar.h:1.6
--- src/sys/arch/arm/imx/if_enetvar.h:1.5	Fri Sep 13 07:55:06 2019
+++ src/sys/arch/arm/imx/if_enetvar.h	Tue Nov 12 05:09:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_enetvar.h,v 1.5 2019/09/13 07:55:06 msaitoh Exp $	*/
+/*	$NetBSD: if_enetvar.h,v 1.6 2019/11/12 05:09:29 hkenken Exp $	*/
 
 /*
  * Copyright (c) 2014 Ryo Shimizu <r...@nerv.org>
@@ -58,8 +58,9 @@ struct enet_softc {
 	int sc_unit;
 	int sc_imxtype;
 	int sc_rgmii;
-	unsigned int sc_pllclock;
+	unsigned int sc_clock;
 
+	struct clk *sc_clk_ipg;
 	struct clk *sc_clk_enet;
 	struct clk *sc_clk_enet_ref;
 

Index: src/sys/arch/arm/imx/fdt/if_enet_imx.c
diff -u src/sys/arch/arm/imx/fdt/if_enet_imx.c:1.4 src/sys/arch/arm/imx/fdt/if_enet_imx.c:1.5
--- src/sys/arch/arm/imx/fdt/if_enet_imx.c:1.4	Fri Oct 18 12:53:08 2019
+++ src/sys/arch/arm/imx/fdt/if_enet_imx.c	Tue Nov 12 05:09:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_enet_imx.c,v 1.4 2019/10/18 12:53:08 hkenken Exp $	*/
+/*	$NetBSD: if_enet_imx.c,v 1.5 2019/11/12 05:09:29 hkenken Exp $	*/
 /*-
  * Copyright (c) 2019 Genetec Corporation.  All rights reserved.
  * Written by Hashimoto Kenichi for Genetec Corporation.
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_enet_imx.c,v 1.4 2019/10/18 12:53:08 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_enet_imx.c,v 1.5 2019/11/12 05:09:29 hkenken Exp $");
 
 #include "opt_fdt.h"
 
@@ -90,6 +90,11 @@ enet_attach(device_t parent, device_t se
 		return;
 	}
 
+	sc->sc_clk_ipg = fdtbus_clock_get(phandle, "ipg");
+	if (sc->sc_clk_enet == NULL) {
+		aprint_error(": couldn't get clock ipg\n");
+		goto failure;
+	}
 	sc->sc_clk_enet = fdtbus_clock_get(phandle, "ahb");
 	if (sc->sc_clk_enet == NULL) {
 		aprint_error(": couldn't get clock ahb\n");
@@ -149,7 +154,7 @@ enet_attach(device_t parent, device_t se
 	aprint_normal_dev(self, "interrupting on %s\n", intrstr);
 
 	enet_init_clocks(sc);
-	sc->sc_pllclock = clk_get_rate(sc->sc_clk_enet_ref);
+	sc->sc_clock = clk_get_rate(sc->sc_clk_ipg);
 
 	enet_phy_reset(efsc, phandle);
 
@@ -168,6 +173,11 @@ enet_init_clocks(struct enet_softc *sc)
 {
 	int error;
 
+	error = clk_enable(sc->sc_clk_ipg);
+	if (error) {
+		aprint_error_dev(sc->sc_dev, "couldn't enable ipg: %d\n", error);
+		return error;
+	}
 	error = clk_enable(sc->sc_clk_enet);
 	if (error) {
 		aprint_error_dev(sc->sc_dev, "couldn't enable enet: %d\n", error);

Reply via email to