169 lines
6.9 KiB
Diff
169 lines
6.9 KiB
Diff
From 4b39387594767ac865caa8710d1be39e869926e3 Mon Sep 17 00:00:00 2001
|
|
From: Ian Campbell <ijc@hellion.org.uk>
|
|
Date: Fri, 18 Apr 2014 19:05:47 +0100
|
|
Subject: [PATCH 23/36] sunxi: add gmac Ethernet support
|
|
|
|
Add support for the GMAC Ethernet controller on Allwinner A20 (sun7i)
|
|
processors. Enable for the Cubietruck.
|
|
|
|
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
|
|
Signed-off-by: Jens Kuske <jenskuske@gmail.com>
|
|
Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
|
|
---
|
|
arch/arm/cpu/armv7/sunxi/board.c | 15 +++++++++++++++
|
|
boards.cfg | 2 +-
|
|
drivers/net/Makefile | 1 +
|
|
drivers/net/sunxi_gmac.c | 34 ++++++++++++++++++++++++++++++++++
|
|
include/configs/sunxi-common.h | 26 ++++++++++++++++++++++++++
|
|
include/netdev.h | 1 +
|
|
6 files changed, 78 insertions(+), 1 deletion(-)
|
|
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 b5c0cb7..9755320 100644
|
|
--- a/arch/arm/cpu/armv7/sunxi/board.c
|
|
+++ b/arch/arm/cpu/armv7/sunxi/board.c
|
|
@@ -11,6 +11,8 @@
|
|
*/
|
|
|
|
#include <common.h>
|
|
+#include <netdev.h>
|
|
+#include <miiphy.h>
|
|
#include <serial.h>
|
|
#ifdef CONFIG_SPL_BUILD
|
|
#include <spl.h>
|
|
@@ -86,3 +88,16 @@ void enable_caches(void)
|
|
dcache_enable();
|
|
}
|
|
#endif
|
|
+
|
|
+#if defined(CONFIG_SUNXI_GMAC)
|
|
+/*
|
|
+ * Initializes on-chip ethernet controllers.
|
|
+ * to override, implement board_eth_init()
|
|
+ */
|
|
+int cpu_eth_init(bd_t *bis)
|
|
+{
|
|
+ sunxi_gmac_initialize(bis);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+#endif
|
|
diff --git a/boards.cfg b/boards.cfg
|
|
index 306f891..ddc3c86 100644
|
|
--- a/boards.cfg
|
|
+++ b/boards.cfg
|
|
@@ -372,7 +372,7 @@ Active arm armv7 rmobile renesas lager
|
|
Active arm armv7 s5pc1xx samsung goni s5p_goni - Mateusz Zalega <m.zalega@samsung.com>
|
|
Active arm armv7 s5pc1xx samsung smdkc100 smdkc100 - Minkyu Kang <mk7.kang@samsung.com>
|
|
Active arm armv7 socfpga altera socfpga socfpga_cyclone5 - -
|
|
-Active arm armv7 sunxi - sunxi Cubietruck_FEL sun7i:CUBIETRUCK,SPL_FEL -
|
|
+Active arm armv7 sunxi - sunxi Cubietruck_FEL sun7i:CUBIETRUCK,SPL_FEL,SUNXI_GMAC,RGMII -
|
|
Active arm armv7 u8500 st-ericsson snowball snowball - Mathieu Poirier <mathieu.poirier@linaro.org>
|
|
Active arm armv7 u8500 st-ericsson u8500 u8500_href - -
|
|
Active arm armv7 vf610 freescale vf610twr vf610twr vf610twr:IMX_CONFIG=board/freescale/vf610twr/imximage.cfg Alison Wang <b18965@freescale.com>
|
|
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
|
|
index 7f9ce90..2300c00 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_WEMAC) += sunxi_wemac.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..15cd1fb
|
|
--- /dev/null
|
|
+++ b/drivers/net/sunxi_gmac.c
|
|
@@ -0,0 +1,34 @@
|
|
+#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 */
|
|
+ setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_INT_RGMII |
|
|
+ CCM_GMAC_CTRL_GPIT_RGMII);
|
|
+
|
|
+ /* Configure pin mux settings for GMAC */
|
|
+ for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(16); pin++) {
|
|
+ /* skip unused pins in RGMII mode */
|
|
+ if (pin == SUNXI_GPA(9) || pin == SUNXI_GPA(14))
|
|
+ continue;
|
|
+ sunxi_gpio_set_cfgpin(pin, SUN7I_GPA0_GMAC);
|
|
+ sunxi_gpio_set_drv(pin, 3);
|
|
+ }
|
|
+
|
|
+ designware_initialize(SUNXI_GMAC_BASE, PHY_INTERFACE_MODE_RGMII);
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h
|
|
index 3f7e314..b76c3b0 100644
|
|
--- a/include/configs/sunxi-common.h
|
|
+++ b/include/configs/sunxi-common.h
|
|
@@ -127,6 +127,32 @@
|
|
|
|
#define CONFIG_CONS_INDEX 1 /* UART0 */
|
|
|
|
+#ifdef CONFIG_SUNXI_GMAC
|
|
+#define CONFIG_DESIGNWARE_ETH /* GMAC can use designware driver */
|
|
+#define CONFIG_DW_AUTONEG
|
|
+#define CONFIG_PHY_GIGE /* GMAC can use gigabit PHY */
|
|
+#define CONFIG_PHY_ADDR 1
|
|
+#define CONFIG_MII /* MII PHY management */
|
|
+#define CONFIG_PHYLIB
|
|
+#endif
|
|
+
|
|
+#ifdef CONFIG_CMD_NET
|
|
+#define CONFIG_CMD_NFS
|
|
+#define CONFIG_CMD_SNTP
|
|
+#define CONFIG_TIMESTAMP /* Needed by SNTP */
|
|
+#define CONFIG_CMD_DNS
|
|
+#define CONFIG_NETCONSOLE
|
|
+#define CONFIG_BOOTP_NISDOMAIN
|
|
+#define CONFIG_BOOTP_BOOTFILESIZE
|
|
+#define CONFIG_BOOTP_DNS2
|
|
+#define CONFIG_BOOTP_SEND_HOSTNAME
|
|
+#define CONFIG_BOOTP_NTPSERVER
|
|
+#define CONFIG_BOOTP_TIMEOFFSET
|
|
+#define CONFIG_BOOTP_MAY_FAIL
|
|
+#define CONFIG_BOOTP_SERVERIP
|
|
+#define CONFIG_BOOTP_DHCP_REQUEST_DELAY 50000
|
|
+#endif
|
|
+
|
|
#if !defined CONFIG_ENV_IS_IN_MMC && \
|
|
!defined CONFIG_ENV_IS_IN_NAND && \
|
|
!defined CONFIG_ENV_IS_IN_FAT && \
|
|
diff --git a/include/netdev.h b/include/netdev.h
|
|
index 32b5073..fc4a2f8 100644
|
|
--- a/include/netdev.h
|
|
+++ b/include/netdev.h
|
|
@@ -79,6 +79,7 @@ int sh_eth_initialize(bd_t *bis);
|
|
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_gmac_initialize(bd_t *bis);
|
|
int sunxi_wemac_initialize(bd_t *bis);
|
|
int tsi108_eth_initialize(bd_t *bis);
|
|
int uec_standard_init(bd_t *bis);
|
|
--
|
|
1.9.0
|
|
|