1 #include <common.h> 2 #include <netdev.h> 3 #include <miiphy.h> 4 #include <asm/gpio.h> 5 #include <asm/io.h> 6 #include <asm/arch/clock.h> 7 #include <asm/arch/gpio.h> 8 9 void eth_init_board(void) 10 { 11 int pin; 12 struct sunxi_ccm_reg *const ccm = 13 (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; 14 15 /* Set up clock gating */ 16 #ifdef CONFIG_SUNXI_GEN_SUN6I 17 setbits_le32(&ccm->ahb_reset0_cfg, 0x1 << AHB_RESET_OFFSET_GMAC); 18 setbits_le32(&ccm->ahb_gate0, 0x1 << AHB_GATE_OFFSET_GMAC); 19 #else 20 setbits_le32(&ccm->ahb_gate1, 0x1 << AHB_GATE_OFFSET_GMAC); 21 #endif 22 23 /* Set MII clock */ 24 #ifdef CONFIG_RGMII 25 setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_INT_RGMII | 26 CCM_GMAC_CTRL_GPIT_RGMII); 27 setbits_le32(&ccm->gmac_clk_cfg, 28 CCM_GMAC_CTRL_TX_CLK_DELAY(CONFIG_GMAC_TX_DELAY)); 29 #else 30 setbits_le32(&ccm->gmac_clk_cfg, CCM_GMAC_CTRL_TX_CLK_SRC_MII | 31 CCM_GMAC_CTRL_GPIT_MII); 32 #endif 33 34 #ifndef CONFIG_MACH_SUN6I 35 /* Configure pin mux settings for GMAC */ 36 #ifdef CONFIG_SUN7I_GMAC_FORCE_TXERR 37 for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(17); pin++) { 38 #else 39 for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(16); pin++) { 40 #endif 41 #ifdef CONFIG_RGMII 42 /* skip unused pins in RGMII mode */ 43 if (pin == SUNXI_GPA(9) || pin == SUNXI_GPA(14)) 44 continue; 45 #endif 46 sunxi_gpio_set_cfgpin(pin, SUN7I_GPA_GMAC); 47 sunxi_gpio_set_drv(pin, 3); 48 } 49 #elif defined CONFIG_RGMII 50 /* Configure sun6i RGMII mode pin mux settings */ 51 for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(3); pin++) { 52 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 53 sunxi_gpio_set_drv(pin, 3); 54 } 55 for (pin = SUNXI_GPA(9); pin <= SUNXI_GPA(14); pin++) { 56 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 57 sunxi_gpio_set_drv(pin, 3); 58 } 59 for (pin = SUNXI_GPA(19); pin <= SUNXI_GPA(20); pin++) { 60 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 61 sunxi_gpio_set_drv(pin, 3); 62 } 63 for (pin = SUNXI_GPA(25); pin <= SUNXI_GPA(27); pin++) { 64 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 65 sunxi_gpio_set_drv(pin, 3); 66 } 67 #elif defined CONFIG_GMII 68 /* Configure sun6i GMII mode pin mux settings */ 69 for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(27); pin++) { 70 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 71 sunxi_gpio_set_drv(pin, 2); 72 } 73 #else 74 /* Configure sun6i MII mode pin mux settings */ 75 for (pin = SUNXI_GPA(0); pin <= SUNXI_GPA(3); pin++) 76 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 77 for (pin = SUNXI_GPA(8); pin <= SUNXI_GPA(9); pin++) 78 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 79 for (pin = SUNXI_GPA(11); pin <= SUNXI_GPA(14); pin++) 80 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 81 for (pin = SUNXI_GPA(19); pin <= SUNXI_GPA(24); pin++) 82 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 83 for (pin = SUNXI_GPA(26); pin <= SUNXI_GPA(27); pin++) 84 sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC); 85 #endif 86 } 87