mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2024-12-09 08:20:39 +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>
79 lines
2.7 KiB
Diff
79 lines
2.7 KiB
Diff
From 948603d4d637a0e04a3214253b911cfc4ed11220 Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Mon, 21 Mar 2016 14:44:35 +0100
|
|
Subject: [PATCH] sunxi: Fix 2nd usb controller on sun4i/sun7i no longer
|
|
working
|
|
|
|
The 2nd usb controller on sun4i/sun7i has its base address 0x8000
|
|
bytes from the 1st one, rather then 0x1000. Also the ahb clk gates
|
|
are interleaved with the ohci clk-gates introducing a hole between
|
|
the clks for usb1 and usb2.
|
|
|
|
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
Acked-by: Ian Campbell <ijc@hellion.org.uk>
|
|
---
|
|
drivers/usb/host/ehci-sunxi.c | 13 +++++++++++--
|
|
drivers/usb/host/ohci-sunxi.c | 15 ++++++++++++---
|
|
2 files changed, 23 insertions(+), 5 deletions(-)
|
|
|
|
--- a/drivers/usb/host/ehci-sunxi.c
|
|
+++ b/drivers/usb/host/ehci-sunxi.c
|
|
@@ -17,6 +17,14 @@
|
|
#include <dm.h>
|
|
#include "ehci.h"
|
|
|
|
+#ifdef CONFIG_SUNXI_GEN_SUN4I
|
|
+#define BASE_DIST 0x8000
|
|
+#define AHB_CLK_DIST 2
|
|
+#else
|
|
+#define BASE_DIST 0x1000
|
|
+#define AHB_CLK_DIST 1
|
|
+#endif
|
|
+
|
|
struct ehci_sunxi_priv {
|
|
struct ehci_ctrl ehci;
|
|
int ahb_gate_mask; /* Mask of ahb_gate0 clk gate bits for this hcd */
|
|
@@ -39,8 +47,9 @@ static int ehci_usb_probe(struct udevice
|
|
#ifdef CONFIG_MACH_SUN8I_H3
|
|
priv->ahb_gate_mask |= 1 << AHB_GATE_OFFSET_USB_OHCI0;
|
|
#endif
|
|
- priv->phy_index = ((u32)hccr - SUNXI_USB1_BASE) / 0x1000 + 1;
|
|
- priv->ahb_gate_mask <<= priv->phy_index - 1;
|
|
+ priv->phy_index = ((u32)hccr - SUNXI_USB1_BASE) / BASE_DIST;
|
|
+ priv->ahb_gate_mask <<= priv->phy_index * AHB_CLK_DIST;
|
|
+ priv->phy_index++; /* Non otg phys start at 1 */
|
|
|
|
setbits_le32(&ccm->ahb_gate0, priv->ahb_gate_mask);
|
|
#ifdef CONFIG_SUNXI_GEN_SUN6I
|
|
--- a/drivers/usb/host/ohci-sunxi.c
|
|
+++ b/drivers/usb/host/ohci-sunxi.c
|
|
@@ -17,6 +17,14 @@
|
|
#include <usb.h>
|
|
#include "ohci.h"
|
|
|
|
+#ifdef CONFIG_SUNXI_GEN_SUN4I
|
|
+#define BASE_DIST 0x8000
|
|
+#define AHB_CLK_DIST 2
|
|
+#else
|
|
+#define BASE_DIST 0x1000
|
|
+#define AHB_CLK_DIST 1
|
|
+#endif
|
|
+
|
|
struct ohci_sunxi_priv {
|
|
ohci_t ohci;
|
|
int ahb_gate_mask; /* Mask of ahb_gate0 clk gate bits for this hcd */
|
|
@@ -42,9 +50,10 @@ static int ohci_usb_probe(struct udevice
|
|
priv->ahb_gate_mask |= 1 << AHB_GATE_OFFSET_USB_EHCI0;
|
|
#endif
|
|
priv->usb_gate_mask = CCM_USB_CTRL_OHCI0_CLK;
|
|
- priv->phy_index = ((u32)regs - (SUNXI_USB1_BASE + 0x400)) / 0x1000 + 1;
|
|
- priv->ahb_gate_mask <<= priv->phy_index - 1;
|
|
- priv->usb_gate_mask <<= priv->phy_index - 1;
|
|
+ priv->phy_index = ((u32)regs - (SUNXI_USB1_BASE + 0x400)) / BASE_DIST;
|
|
+ priv->ahb_gate_mask <<= priv->phy_index * AHB_CLK_DIST;
|
|
+ priv->usb_gate_mask <<= priv->phy_index;
|
|
+ priv->phy_index++; /* Non otg phys start at 1 */
|
|
|
|
setbits_le32(&ccm->ahb_gate0, priv->ahb_gate_mask);
|
|
setbits_le32(&ccm->usb_clk_cfg, priv->usb_gate_mask);
|