svn commit: r285106 - head/sys/arm/allwinner

Luiz Otavio O Souza loos at FreeBSD.org
Fri Jul 3 18:39:26 UTC 2015


Author: loos
Date: Fri Jul  3 18:39:25 2015
New Revision: 285106
URL: https://svnweb.freebsd.org/changeset/base/285106

Log:
  Add the routines to activate the GMAC clock and setup the GMAC mode.
  
  Tested on Cubieboard 2 and Banana pi.

Modified:
  head/sys/arm/allwinner/a10_clk.c
  head/sys/arm/allwinner/a10_clk.h

Modified: head/sys/arm/allwinner/a10_clk.c
==============================================================================
--- head/sys/arm/allwinner/a10_clk.c	Fri Jul  3 17:54:41 2015	(r285105)
+++ head/sys/arm/allwinner/a10_clk.c	Fri Jul  3 18:39:25 2015	(r285106)
@@ -182,6 +182,38 @@ a10_clk_emac_activate(void)
 	return (0);
 }
 
+int
+a10_clk_gmac_activate(phandle_t node)
+{
+	char *phy_type;
+	struct a10_ccm_softc *sc;
+	uint32_t reg_value;
+
+	sc = a10_ccm_sc;
+	if (sc == NULL)
+		return (ENXIO);
+
+	/* Gating AHB clock for GMAC */
+	reg_value = ccm_read_4(sc, CCM_AHB_GATING1);
+	reg_value |= CCM_AHB_GATING_GMAC;
+	ccm_write_4(sc, CCM_AHB_GATING1, reg_value);
+
+	/* Set GMAC mode. */
+	reg_value = CCM_GMAC_CLK_MII;
+	if (OF_getprop_alloc(node, "phy-type", 1, (void **)&phy_type) > 0) {
+		if (strcasecmp(phy_type, "rgmii") == 0)
+			reg_value = CCM_GMAC_CLK_RGMII | CCM_GMAC_MODE_RGMII;
+		else if (strcasecmp(phy_type, "rgmii-bpi") == 0) {
+			reg_value = CCM_GMAC_CLK_RGMII | CCM_GMAC_MODE_RGMII;
+			reg_value |= (3 << CCM_GMAC_CLK_DELAY_SHIFT);
+		}
+		free(phy_type, M_OFWPROP);
+	}
+	ccm_write_4(sc, CCM_GMAC_CLK, reg_value);
+
+	return (0);
+}
+
 static void
 a10_clk_pll6_enable(void)
 {

Modified: head/sys/arm/allwinner/a10_clk.h
==============================================================================
--- head/sys/arm/allwinner/a10_clk.h	Fri Jul  3 17:54:41 2015	(r285105)
+++ head/sys/arm/allwinner/a10_clk.h	Fri Jul  3 18:39:25 2015	(r285106)
@@ -97,7 +97,16 @@
 #define	CCM_LVDS_CLK		0x014c
 #define	CCM_HDMI_CLK		0x0150
 #define	CCM_MALI400_CLK		0x0154
+#define	CCM_GMAC_CLK		0x0164
 
+#define	CCM_GMAC_CLK_DELAY_SHIFT	10
+#define	CCM_GMAC_CLK_MODE_MASK	0x7
+#define	CCM_GMAC_MODE_RGMII	(1 << 2)
+#define	CCM_GMAC_CLK_MII	0x0
+#define	CCM_GMAC_CLK_EXT_RGMII	0x1
+#define	CCM_GMAC_CLK_RGMII	0x2
+
+/* AHB_GATING_REG0 */
 #define	CCM_AHB_GATING_USB0	(1 << 0)
 #define	CCM_AHB_GATING_EHCI0	(1 << 1)
 #define	CCM_AHB_GATING_EHCI1	(1 << 3)
@@ -105,6 +114,9 @@
 #define	CCM_AHB_GATING_EMAC	(1 << 17)
 #define	CCM_AHB_GATING_SATA	(1 << 25)
 
+/* AHB_GATING_REG1 */
+#define	CCM_AHB_GATING_GMAC	(1 << 17)
+
 #define	CCM_USB_PHY		(1 << 8)
 #define	CCM_USB0_RESET		(1 << 0)
 #define	CCM_USB1_RESET		(1 << 1)
@@ -139,6 +151,7 @@
 int a10_clk_usb_activate(void);
 int a10_clk_usb_deactivate(void);
 int a10_clk_emac_activate(void);
+int a10_clk_gmac_activate(phandle_t);
 int a10_clk_ahci_activate(void);
 int a10_clk_mmc_activate(int);
 int a10_clk_mmc_cfg(int, int);


More information about the svn-src-head mailing list