GMAC init code now exists in a glue layer driver under drivers/net,
instead of sunxi board initialization code. It has been cleaned up
to use macros for clock controls.

Signed-off-by: Chen-Yu Tsai <w...@csie.org>
---
 arch/arm/cpu/armv7/sunxi/board.c | 32 +---------------------------
 drivers/net/Makefile             |  1 +
 drivers/net/sunxi_gmac.c         | 45 ++++++++++++++++++++++++++++++++++++++++
 include/netdev.h                 |  1 +
 4 files changed, 48 insertions(+), 31 deletions(-)
 create mode 100644 drivers/net/sunxi_gmac.c

diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c
index 5d19a64..003570a 100644
--- a/arch/arm/cpu/armv7/sunxi/board.c
+++ b/arch/arm/cpu/armv7/sunxi/board.c
@@ -145,37 +145,7 @@ int cpu_eth_init(bd_t *bis)
 #ifdef CONFIG_SUNXI_EMAC
        sunxi_emac_initialize(bis);
 #else
-       int pin;
-       struct sunxi_ccm_reg *const ccm =
-               (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
-
-       /* Set up clock gating */
-       setbits_le32(&ccm->ahb_gate1, 0x1 << AHB_GATE_OFFSET_GMAC);
-
-       /* Set MII clock */
-#ifdef CONFIG_RGMII
-       setbits_le32(&ccm->gmac_clk_cfg, (0x1 << 2) | (0x2 << 0));
-#else
-       setbits_le32(&ccm->gmac_clk_cfg, 0);
-#endif
-
-       /* Configure pin mux settings for GMAC */
-       for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(16); pin++) {
-#ifdef CONFIG_RGMII
-               /* skip unused pins in RGMII mode */
-               if (pin == SUNXI_GPA(9) || pin == SUNXI_GPA(14))
-                   continue;
-#endif
-               sunxi_gpio_set_cfgpin(pin, 5);
-               sunxi_gpio_set_drv(pin, 3);
-       }
-
-#ifdef CONFIG_RGMII
-       designware_initialize(0, SUNXI_GMAC_BASE, 0x1, 
PHY_INTERFACE_MODE_RGMII);
-#else
-       designware_initialize(0, SUNXI_GMAC_BASE, 0x1, PHY_INTERFACE_MODE_MII);
-#endif
-
+       sunxi_gmac_initialize(bis);
 #endif
 
        return 0;
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index d905fef..136479d 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -51,6 +51,7 @@ obj-$(CONFIG_SH_ETHER) += sh_eth.o
 obj-$(CONFIG_SMC91111) += smc91111.o
 obj-$(CONFIG_SMC911X) += smc911x.o
 obj-$(CONFIG_SUNXI_EMAC) += sunxi_emac.o
+obj-$(CONFIG_SUNXI_GMAC) += sunxi_gmac.o
 obj-$(CONFIG_DRIVER_TI_EMAC) += davinci_emac.o
 obj-$(CONFIG_TSEC_ENET) += tsec.o fsl_mdio.o
 obj-$(CONFIG_DRIVER_TI_CPSW) += cpsw.o
diff --git a/drivers/net/sunxi_gmac.c b/drivers/net/sunxi_gmac.c
new file mode 100644
index 0000000..b8b9016
--- /dev/null
+++ b/drivers/net/sunxi_gmac.c
@@ -0,0 +1,45 @@
+#include <common.h>
+#include <netdev.h>
+#include <miiphy.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
+
+int sunxi_gmac_initialize(bd_t *bis)
+{
+       int pin;
+       struct sunxi_ccm_reg *const ccm =
+               (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
+
+       /* Set up clock gating */
+       setbits_le32(&ccm->ahb_gate1, 0x1 << AHB_GATE_OFFSET_GMAC);
+
+       /* Set MII clock */
+#ifdef CONFIG_RGMII
+       setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_INT_RGMII |
+               CCM_GMAC_CTRL_GPIT_RGMII);
+#else
+       setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_MII |
+               CCM_GMAC_CTRL_GPIT_MII);
+#endif
+
+       /* Configure pin mux settings for GMAC */
+       for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(16); pin++) {
+#ifdef CONFIG_RGMII
+               /* skip unused pins in RGMII mode */
+               if (pin == SUNXI_GPA(9) || pin == SUNXI_GPA(14))
+                   continue;
+#endif
+               sunxi_gpio_set_cfgpin(pin, 5);
+               sunxi_gpio_set_drv(pin, 3);
+       }
+
+#ifdef CONFIG_RGMII
+       designware_initialize(0, SUNXI_GMAC_BASE, 0x1, 
PHY_INTERFACE_MODE_RGMII);
+#else
+       designware_initialize(0, SUNXI_GMAC_BASE, 0x1, PHY_INTERFACE_MODE_MII);
+#endif
+
+       return 0;
+}
diff --git a/include/netdev.h b/include/netdev.h
index 16ee4ce..300664e 100644
--- a/include/netdev.h
+++ b/include/netdev.h
@@ -80,6 +80,7 @@ int skge_initialize(bd_t *bis);
 int smc91111_initialize(u8 dev_num, int base_addr);
 int smc911x_initialize(u8 dev_num, int base_addr);
 int sunxi_emac_initialize(bd_t *bis);
+int sunxi_gmac_initialize(bd_t *bis);
 int tsi108_eth_initialize(bd_t *bis);
 int uec_standard_init(bd_t *bis);
 int uli526x_initialize(bd_t *bis);
-- 
1.8.5.2

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to