xref: /rk3399_rockchip-uboot/board/sunxi/gmac.c (revision b5b84be8a7356d4c3618b6edcb501885e53569f5)
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 
eth_init_board(void)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