[U-Boot] [PATCH v3 6/9] sunxi: add gmac Ethernet support

Marek Vasut marex at denx.de
Sat Apr 26 20:41:09 CEST 2014


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 at csie.org>
> Signed-off-by: Jens Kuske <jenskuske at gmail.com>
> Signed-off-by: Ian Campbell <ijc at 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.


More information about the U-Boot mailing list