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