mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-09 16:26:55 +00:00
7a58972680
The current uboot default config for the A13 SOM erroneously enables support for the AXP209 power regulator IC which is not present on the board. This superfluous support module sets an incorrect initial clock frequency and confuses the kernel, ultimately leading to a boot failure later on. Properly disable the PMIC support and enable the EHCI support by translating the deprecated SYS_EXTRA_OPTIONS values into proper SUNXI_NO_PMIC and USB_EHCI_HCD symbols respectively. Also rename 002-add-olimex-a13-som.diff to 002-add-olimex-a13-som.patch and refresh the remaining patches of the series while we're at it. Reported-by: Mario Fischer <mario-fischer@web.de> Signed-off-by: Jo-Philipp Wich <jo@mein.io>
128 lines
3.5 KiB
Diff
128 lines
3.5 KiB
Diff
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
|
|
}
|