123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- From fc8991c61c393ce6a9d3dfc97cb56dbbd9e8cbba Mon Sep 17 00:00:00 2001
- From: Hans de Goede <hdegoede@redhat.com>
- Date: Thu, 17 Mar 2016 13:53:03 +0100
- Subject: [PATCH] sunxi: Fix gmac not working due to cpu_eth_init no longer
- being called
- cpu_eth_init is no longer called for dm enabled eth drivers, this
- was causing the sunxi gmac eth controller to no longer work in u-boot.
- This commit fixes this by calling the clock, reset and pinmux setup
- function from s_init() and enabling the phy power pin (if any) from
- board_init().
- The enabling of phy power cannot be done from s_init because it uses dm
- and dm is not ready yet at this point.
- Note that the mdelay is dropped as the phy gets enabled much earlier
- now, so it is no longer needed.
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
- Acked-by: Ian Campbell <ijc@hellion.org.uk>
- Tested-by: Karsten Merker <merker@debian.org>
- Tested-by: Michael Haas <haas@computerlinguist.org>
- ---
- arch/arm/cpu/armv7/sunxi/board.c | 28 +---------------------------
- arch/arm/include/asm/arch-sunxi/sys_proto.h | 6 +++++-
- board/sunxi/board.c | 5 +++++
- board/sunxi/gmac.c | 14 +-------------
- 4 files changed, 12 insertions(+), 41 deletions(-)
- --- a/arch/arm/cpu/armv7/sunxi/board.c
- +++ b/arch/arm/cpu/armv7/sunxi/board.c
- @@ -136,6 +136,7 @@ void s_init(void)
- timer_init();
- gpio_init();
- i2c_init_board();
- + eth_init_board();
- }
-
- #ifdef CONFIG_SPL_BUILD
- @@ -243,30 +244,3 @@ void enable_caches(void)
- dcache_enable();
- }
- #endif
- -
- -#ifdef CONFIG_CMD_NET
- -/*
- - * Initializes on-chip ethernet controllers.
- - * to override, implement board_eth_init()
- - */
- -int cpu_eth_init(bd_t *bis)
- -{
- - __maybe_unused int rc;
- -
- -#ifdef CONFIG_MACPWR
- - gpio_request(CONFIG_MACPWR, "macpwr");
- - gpio_direction_output(CONFIG_MACPWR, 1);
- - mdelay(200);
- -#endif
- -
- -#ifdef CONFIG_SUNXI_GMAC
- - rc = sunxi_gmac_initialize(bis);
- - if (rc < 0) {
- - printf("sunxi: failed to initialize gmac\n");
- - return rc;
- - }
- -#endif
- -
- - return 0;
- -}
- -#endif
- --- a/arch/arm/include/asm/arch-sunxi/sys_proto.h
- +++ b/arch/arm/include/asm/arch-sunxi/sys_proto.h
- @@ -24,6 +24,10 @@ void sdelay(unsigned long);
- void return_to_fel(uint32_t lr, uint32_t sp);
-
- /* Board / SoC level designware gmac init */
- -int sunxi_gmac_initialize(bd_t *bis);
- +#if !defined CONFIG_SPL_BUILD && defined CONFIG_SUNXI_GMAC
- +void eth_init_board(void);
- +#else
- +static inline void eth_init_board(void) {}
- +#endif
-
- #endif
- --- a/board/sunxi/board.c
- +++ b/board/sunxi/board.c
- @@ -90,6 +90,11 @@ int board_init(void)
- if (ret)
- return ret;
-
- +#ifdef CONFIG_MACPWR
- + gpio_request(CONFIG_MACPWR, "macpwr");
- + gpio_direction_output(CONFIG_MACPWR, 1);
- +#endif
- +
- /* Uses dm gpio code so do this here and not in i2c_init_board() */
- return soft_i2c_board_init();
- }
- --- a/board/sunxi/gmac.c
- +++ b/board/sunxi/gmac.c
- @@ -6,7 +6,7 @@
- #include <asm/arch/clock.h>
- #include <asm/arch/gpio.h>
-
- -int sunxi_gmac_initialize(bd_t *bis)
- +void eth_init_board(void)
- {
- int pin;
- struct sunxi_ccm_reg *const ccm =
- @@ -79,16 +79,4 @@ int sunxi_gmac_initialize(bd_t *bis)
- for (pin = SUNXI_GPA(26); pin <= SUNXI_GPA(27); pin++)
- sunxi_gpio_set_cfgpin(pin, SUN6I_GPA_GMAC);
- #endif
- -
- -#ifdef CONFIG_DM_ETH
- - return 0;
- -#else
- -# ifdef CONFIG_RGMII
- - return designware_initialize(SUNXI_GMAC_BASE, PHY_INTERFACE_MODE_RGMII);
- -# elif defined CONFIG_GMII
- - return designware_initialize(SUNXI_GMAC_BASE, PHY_INTERFACE_MODE_GMII);
- -# else
- - return designware_initialize(SUNXI_GMAC_BASE, PHY_INTERFACE_MODE_MII);
- -# endif
- -#endif
- }
|