* [U-Boot] [PATCH v2] sunxi: Fix gmac not working due to cpu_eth_init no longer being called
@ 2016-03-22 19:24 Hans de Goede
2016-03-23 8:22 ` Michael Haas
0 siblings, 1 reply; 2+ messages in thread
From: Hans de Goede @ 2016-03-22 19:24 UTC (permalink / raw)
To: u-boot
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>
---
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 <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
}
--
2.7.3
^ permalink raw reply related [flat|nested] 2+ messages in thread* [U-Boot] [PATCH v2] sunxi: Fix gmac not working due to cpu_eth_init no longer being called
2016-03-22 19:24 [U-Boot] [PATCH v2] sunxi: Fix gmac not working due to cpu_eth_init no longer being called Hans de Goede
@ 2016-03-23 8:22 ` Michael Haas
0 siblings, 0 replies; 2+ messages in thread
From: Michael Haas @ 2016-03-23 8:22 UTC (permalink / raw)
To: u-boot
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 <hdegoede@redhat.com>
> Acked-by: Ian Campbell <ijc@hellion.org.uk>
> Tested-by: Karsten Merker <merker@debian.org>
> ---
> 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 <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
> }
Tested-by: Michael Haas <haas@computerlinguist.org>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-03-23 8:22 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-22 19:24 [U-Boot] [PATCH v2] sunxi: Fix gmac not working due to cpu_eth_init no longer being called Hans de Goede
2016-03-23 8:22 ` Michael Haas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox