diff options
| author | Bo Shen <voice.shen@atmel.com> | 2013-06-26 10:11:06 +0800 | 
|---|---|---|
| committer | Andreas Bießmann <andreas.devel@googlemail.com> | 2013-08-22 16:49:54 +0200 | 
| commit | e08d6f3aaf11e4138de1ed04acccbcf38d04f1b6 (patch) | |
| tree | 0f03aefc80c95007965845c7364da5e56ac4eb50 | |
| parent | 8314ccd8d4fe36abab034260ee66cd8c2b6de39b (diff) | |
| download | olio-uboot-2014.01-e08d6f3aaf11e4138de1ed04acccbcf38d04f1b6.tar.xz olio-uboot-2014.01-e08d6f3aaf11e4138de1ed04acccbcf38d04f1b6.zip | |
arm: atmel: add gmac support for sama5d3xek board
add gmac support for sama5d3xek board, the gmac embedded in:
  - sama5d33, sama5d34, sama5d35
Signed-off-by: Bo Shen <voice.shen@atmel.com>
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
| -rw-r--r-- | arch/arm/cpu/armv7/at91/sama5d3_devices.c | 24 | ||||
| -rw-r--r-- | arch/arm/include/asm/arch-at91/at91_common.h | 1 | ||||
| -rw-r--r-- | board/atmel/sama5d3xek/sama5d3xek.c | 20 | ||||
| -rw-r--r-- | include/configs/sama5d3xek.h | 5 | 
4 files changed, 50 insertions, 0 deletions
| diff --git a/arch/arm/cpu/armv7/at91/sama5d3_devices.c b/arch/arm/cpu/armv7/at91/sama5d3_devices.c index 4a3fca56a..e55e1c660 100644 --- a/arch/arm/cpu/armv7/at91/sama5d3_devices.c +++ b/arch/arm/cpu/armv7/at91/sama5d3_devices.c @@ -144,6 +144,30 @@ void at91_macb_hw_init(void)  	/* Enable clock */  	at91_periph_clk_enable(ATMEL_ID_EMAC);  } + +void at91_gmac_hw_init(void) +{ +	at91_set_a_periph(AT91_PIO_PORTB, 0, 0);	/* GTX0 */ +	at91_set_a_periph(AT91_PIO_PORTB, 1, 0);	/* GTX1 */ +	at91_set_a_periph(AT91_PIO_PORTB, 2, 0);	/* GTX2 */ +	at91_set_a_periph(AT91_PIO_PORTB, 3, 0);	/* GTX3 */ +	at91_set_a_periph(AT91_PIO_PORTB, 4, 0);	/* GRX0 */ +	at91_set_a_periph(AT91_PIO_PORTB, 5, 0);	/* GRX1 */ +	at91_set_a_periph(AT91_PIO_PORTB, 6, 0);	/* GRX2 */ +	at91_set_a_periph(AT91_PIO_PORTB, 7, 0);	/* GRX3 */ +	at91_set_a_periph(AT91_PIO_PORTB, 8, 0);	/* GTXCK */ +	at91_set_a_periph(AT91_PIO_PORTB, 9, 0);	/* GTXEN */ + +	at91_set_a_periph(AT91_PIO_PORTB, 11, 0);	/* GRXCK */ +	at91_set_a_periph(AT91_PIO_PORTB, 13, 0);	/* GRXER */ + +	at91_set_a_periph(AT91_PIO_PORTB, 16, 0);	/* GMDC */ +	at91_set_a_periph(AT91_PIO_PORTB, 17, 0);	/* GMDIO */ +	at91_set_a_periph(AT91_PIO_PORTB, 18, 0);	/* G125CK */ + +	/* Enable clock */ +	at91_periph_clk_enable(ATMEL_ID_GMAC); +}  #endif  #ifdef CONFIG_LCD diff --git a/arch/arm/include/asm/arch-at91/at91_common.h b/arch/arm/include/asm/arch-at91/at91_common.h index d6597023c..9f54fddce 100644 --- a/arch/arm/include/asm/arch-at91/at91_common.h +++ b/arch/arm/include/asm/arch-at91/at91_common.h @@ -10,6 +10,7 @@  #define AT91_COMMON_H  void at91_can_hw_init(void); +void at91_gmac_hw_init(void);  void at91_macb_hw_init(void);  void at91_mci_hw_init(void);  void at91_serial0_hw_init(void); diff --git a/board/atmel/sama5d3xek/sama5d3xek.c b/board/atmel/sama5d3xek/sama5d3xek.c index 4a309ad17..97caf64d4 100644 --- a/board/atmel/sama5d3xek/sama5d3xek.c +++ b/board/atmel/sama5d3xek/sama5d3xek.c @@ -17,6 +17,7 @@  #include <lcd.h>  #include <atmel_lcdc.h>  #include <atmel_mci.h> +#include <micrel.h>  #include <net.h>  #include <netdev.h> @@ -178,6 +179,8 @@ int board_init(void)  #ifdef CONFIG_MACB  	if (has_emac())  		at91_macb_hw_init(); +	if (has_gmac()) +		at91_gmac_hw_init();  #endif  #ifdef CONFIG_LCD  	if (has_lcdc()) @@ -193,6 +196,21 @@ int dram_init(void)  	return 0;  } +int board_phy_config(struct phy_device *phydev) +{ +	/* rx data delay */ +	ksz9021_phy_extended_write(phydev, +				   MII_KSZ9021_EXT_RGMII_RX_DATA_SKEW, 0x2222); +	/* tx data delay */ +	ksz9021_phy_extended_write(phydev, +				   MII_KSZ9021_EXT_RGMII_TX_DATA_SKEW, 0x2222); +	/* rx/tx clock delay */ +	ksz9021_phy_extended_write(phydev, +				   MII_KSZ9021_EXT_RGMII_CLOCK_SKEW, 0xf2f4); + +	return 0; +} +  int board_eth_init(bd_t *bis)  {  	int rc = 0; @@ -200,6 +218,8 @@ int board_eth_init(bd_t *bis)  #ifdef CONFIG_MACB  	if (has_emac())  		rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC, 0x00); +	if (has_gmac()) +		rc = macb_eth_initialize(0, (void *)ATMEL_BASE_GMAC, 0x00);  #endif  	return rc; diff --git a/include/configs/sama5d3xek.h b/include/configs/sama5d3xek.h index 10697d627..3dcf012dd 100644 --- a/include/configs/sama5d3xek.h +++ b/include/configs/sama5d3xek.h @@ -136,6 +136,11 @@  #define CONFIG_NET_MULTI  #define CONFIG_NET_RETRY_COUNT		20  #define CONFIG_MACB_SEARCH_PHY +#define CONFIG_RGMII +#define CONFIG_CMD_MII +#define CONFIG_PHYLIB +#define CONFIG_PHY_MICREL +#define CONFIG_PHY_MICREL_KSZ9021  /* MMC */  #define CONFIG_CMD_MMC |