
On Friday, April 18, 2014 at 08:05:47 PM, Ian Campbell wrote:
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
v3: Based on c89867dca2e9 "sunxi: clocks: clock_get_pll5 prototype and coding style".
v2: Based on u-boot-sunxi.git#sunxi d9aa5dd3d15c "sunxi: mmc: checkpatch whitespace fixes" with v2014.04-rc2 merged in: - drop accidentally doubled hunk - use gpio setup functions - moved before mmc patches
v1: Based on u-boot-sunxi.git#sunxi commit d854c4de2f57 "arm: Handle .gnu.hash section in ldscripts" vs v2014.01.
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)
This is something line ifdef CONFIG_CMD_NET
+/*
- Initializes on-chip ethernet controllers.
- to override, implement board_eth_init()
- */
+int cpu_eth_init(bd_t *bis) +{
- sunxi_gmac_initialize(bis);
And this is CONFIG_SUNXI_GMAC ... what if I wanted to enable USB ethernet or such ?
- return 0;
Handle possible failures of sunxi_gmac_initialize() and propagate the return value please.
[...]
+int sunxi_gmac_initialize(bd_t *bis)
Stick this into arch/arm/sunxi/... , there's no need to keep it in drivers/net/ as it's no real driver, but just a glue.
+{
- 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;
DTTO here, designware_initialize() might fail ...
+} 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
Do you really need this ?
+#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
Just delete this BOOTP nonsense.