From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Haas Date: Wed, 23 Mar 2016 09:22:02 +0100 Subject: [U-Boot] [PATCH v2] sunxi: Fix gmac not working due to cpu_eth_init no longer being called In-Reply-To: <1458674652-12141-1-git-send-email-hdegoede@redhat.com> References: <1458674652-12141-1-git-send-email-hdegoede@redhat.com> Message-ID: <56F2522A.5080304@computerlinguist.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 03/22/2016 08:24 PM, Hans de Goede wrote: > 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 > Acked-by: Ian Campbell > Tested-by: Karsten Merker > --- > Changes in v2: > -Move enabling of phy power to board_init() > --- > 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(-) > > diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c > index e80785b..7653148 100644 > --- a/arch/arm/cpu/armv7/sunxi/board.c > +++ b/arch/arm/cpu/armv7/sunxi/board.c > @@ -152,6 +152,7 @@ void s_init(void) > timer_init(); > gpio_init(); > i2c_init_board(); > + eth_init_board(); > } > > #ifdef CONFIG_SPL_BUILD > @@ -259,30 +260,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 > diff --git a/arch/arm/include/asm/arch-sunxi/sys_proto.h b/arch/arm/include/asm/arch-sunxi/sys_proto.h > index 9df3744..a373319 100644 > --- 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 > diff --git a/board/sunxi/board.c b/board/sunxi/board.c > index 80eae9c..e16718f 100644 > --- 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(); > } > diff --git a/board/sunxi/gmac.c b/board/sunxi/gmac.c > index 4e222d8..69eb8ff 100644 > --- a/board/sunxi/gmac.c > +++ b/board/sunxi/gmac.c > @@ -6,7 +6,7 @@ > #include > #include > > -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 > } Tested-by: Michael Haas