15835823dSIan Campbell #include <common.h> 25835823dSIan Campbell #include <netdev.h> 35835823dSIan Campbell #include <miiphy.h> 45835823dSIan Campbell #include <asm/gpio.h> 55835823dSIan Campbell #include <asm/io.h> 65835823dSIan Campbell #include <asm/arch/clock.h> 75835823dSIan Campbell #include <asm/arch/gpio.h> 85835823dSIan Campbell 9*fc8991c6SHans de Goede void eth_init_board(void) 105835823dSIan Campbell { 115835823dSIan Campbell int pin; 125835823dSIan Campbell struct sunxi_ccm_reg *const ccm = 135835823dSIan Campbell (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; 145835823dSIan Campbell 155835823dSIan Campbell /* Set up clock gating */ 1644d8ae5bSHans de Goede #ifdef CONFIG_SUNXI_GEN_SUN6I 17eafec320SHans de Goede setbits_le32(&ccm->ahb_reset0_cfg, 0x1 << AHB_RESET_OFFSET_GMAC); 18eafec320SHans de Goede setbits_le32(&ccm->ahb_gate0, 0x1 << AHB_GATE_OFFSET_GMAC); 1944d8ae5bSHans de Goede #else 2044d8ae5bSHans de Goede setbits_le32(&ccm->ahb_gate1, 0x1 << AHB_GATE_OFFSET_GMAC); 21eafec320SHans de Goede #endif 225835823dSIan Campbell 235835823dSIan Campbell /* Set MII clock */ 24ef7e723bSChen-Yu Tsai #ifdef CONFIG_RGMII 255835823dSIan Campbell setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_INT_RGMII | 265835823dSIan Campbell CCM_GMAC_CTRL_GPIT_RGMII); 27c13f60d9SHans de Goede setbits_le32(&ccm->gmac_clk_cfg, 28c13f60d9SHans de Goede CCM_GMAC_CTRL_TX_CLK_DELAY(CONFIG_GMAC_TX_DELAY)); 29ef7e723bSChen-Yu Tsai #else 30ef7e723bSChen-Yu Tsai setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_MII | 31ef7e723bSChen-Yu Tsai CCM_GMAC_CTRL_GPIT_MII); 32ef7e723bSChen-Yu Tsai #endif 335835823dSIan Campbell 34eafec320SHans de Goede #ifndef CONFIG_MACH_SUN6I 355835823dSIan Campbell /* Configure pin mux settings for GMAC */ 365835823dSIan Campbell for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(16); pin++) { 37ef7e723bSChen-Yu Tsai #ifdef CONFIG_RGMII 385835823dSIan Campbell /* skip unused pins in RGMII mode */ 395835823dSIan Campbell if (pin == SUNXI_GPA(9) || pin == SUNXI_GPA(14)) 405835823dSIan Campbell continue; 41ef7e723bSChen-Yu Tsai #endif 42487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN7I_GPA_GMAC); 435835823dSIan Campbell sunxi_gpio_set_drv(pin, 3); 445835823dSIan Campbell } 45eafec320SHans de Goede #elif defined CONFIG_RGMII 46eafec320SHans de Goede /* Configure sun6i RGMII mode pin mux settings */ 47eafec320SHans de Goede for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(3); pin++) { 48487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 49eafec320SHans de Goede sunxi_gpio_set_drv(pin, 3); 50eafec320SHans de Goede } 51eafec320SHans de Goede for (pin = SUNXI_GPA(9); pin <= SUNXI_GPA(14); pin++) { 52487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 53eafec320SHans de Goede sunxi_gpio_set_drv(pin, 3); 54eafec320SHans de Goede } 55eafec320SHans de Goede for (pin = SUNXI_GPA(19); pin <= SUNXI_GPA(20); pin++) { 56487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 57eafec320SHans de Goede sunxi_gpio_set_drv(pin, 3); 58eafec320SHans de Goede } 59eafec320SHans de Goede for (pin = SUNXI_GPA(25); pin <= SUNXI_GPA(27); pin++) { 60487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 61eafec320SHans de Goede sunxi_gpio_set_drv(pin, 3); 62eafec320SHans de Goede } 63eafec320SHans de Goede #elif defined CONFIG_GMII 64eafec320SHans de Goede /* Configure sun6i GMII mode pin mux settings */ 65eafec320SHans de Goede for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(27); pin++) { 66487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 67eafec320SHans de Goede sunxi_gpio_set_drv(pin, 2); 68eafec320SHans de Goede } 69eafec320SHans de Goede #else 70eafec320SHans de Goede /* Configure sun6i MII mode pin mux settings */ 71eafec320SHans de Goede for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(3); pin++) 72487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 73eafec320SHans de Goede for (pin = SUNXI_GPA(8); pin <= SUNXI_GPA(9); pin++) 74487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 75eafec320SHans de Goede for (pin = SUNXI_GPA(11); pin <= SUNXI_GPA(14); pin++) 76487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 77eafec320SHans de Goede for (pin = SUNXI_GPA(19); pin <= SUNXI_GPA(24); pin++) 78487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 79eafec320SHans de Goede for (pin = SUNXI_GPA(26); pin <= SUNXI_GPA(27); pin++) 80487b3277SPaul Kocialkowski sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 81eafec320SHans de Goede #endif 825835823dSIan Campbell } 83