diff mbox

[U-Boot,v4,04/21] ehci-hcd: Add init_after_reset

Message ID 1459458754-29559-5-git-send-email-mateusz.kulikowski@gmail.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Mateusz Kulikowski March 31, 2016, 9:12 p.m. UTC
Some host controllers need addidional initialization after ehci_reset()
In non-dm implementation it is possible to use CONFIG_EHCI_HCD_INIT_AFTER_RESET.
This patch adds similar option to ehci drivers using dm.

Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
Acked-by: Marek Vasut <marex@denx.de>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
---

Changes in v4: None
Changes in v3: None
Changes in v2:
- Add Reviewed-by (sjg)

Changes in v1:
- No changes, just added Acked-by, Reviewed-by

 drivers/usb/host/ehci-hcd.c | 6 ++++++
 drivers/usb/host/ehci.h     | 1 +
 2 files changed, 7 insertions(+)

Comments

Tom Rini April 2, 2016, 2:01 a.m. UTC | #1
On Thu, Mar 31, 2016 at 11:12:17PM +0200, Mateusz Kulikowski wrote:

> Some host controllers need addidional initialization after ehci_reset()
> In non-dm implementation it is possible to use CONFIG_EHCI_HCD_INIT_AFTER_RESET.
> This patch adds similar option to ehci drivers using dm.
> 
> Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
> Acked-by: Marek Vasut <marex@denx.de>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Tested-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!
Bernhard Nortmann April 3, 2016, 10:58 a.m. UTC | #2
Commit 3f9f8a5b83f8aec40c9f4ee496046a695e333c45 breaks U-Boot on Banana 
Pi (tested using FEL mode):

--- snip ---
U-Boot SPL 2016.03-00612-g3f9f8a5 (Apr 03 2016 - 12:53:35)
DRAM: 1024 MiB
CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
Trying to boot from


U-Boot 2016.03-00612-g3f9f8a5 (Apr 03 2016 - 12:53:35 +0200) Allwinner 
Technoloy

CPU:   Allwinner A20 (SUN7I)
Model: LeMaker Banana Pi
I2C:   ready
DRAM:  1 GiB
MMC:   SUNXI SD/MMC: 0
Card did not respond to voltage select!
*** Warning - MMC init failed, using default environment

Setting up a 720x576i composite-pal console (overscan 32x20)
In:    serial
Out:   vga
Err:   vga
SCSI:  SATA link 0 timeout.
AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode
flags: ncq stag pm led clo only pmp pio slum part ccc apst
Net:   eth0: ethernet@01c50000
starting USB...
USB0:   undefined instruction
pc : [<00006004>]          lr : [<7ef8876c>]
reloc pc : [<cb0ac004>]    lr : [<4a02e76c>]
sp : 7af31660  ip : 00000000     fp : 7af3bb28
r10: 7af3be08  r9 : 7af39ee0     r8 : 01c14010
r7 : 01c14000  r6 : 00000000     r5 : 00000000  r4 : 7af3bc40
r3 : 00006000  r2 : 014af4dd     r1 : 01c20c00  r0 : 7af3bc40
Flags: nzCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

resetting ...
--- snip ---

Regards, B. Nortmann
Mateusz Kulikowski April 3, 2016, 11:40 a.m. UTC | #3
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 03.04.2016 12:58, Bernhard Nortmann wrote:
> Commit 3f9f8a5b83f8aec40c9f4ee496046a695e333c45 breaks U-Boot on Banana Pi (tested using FEL mode):

Fix posted - thanks :)

http://lists.denx.de/pipermail/u-boot/2016-April/250373.html

Regards,
Mateusz
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQEcBAEBCAAGBQJXAQEWAAoJELvtohmVtQzBz8cIAIxlJaxT7yu6MmcfH4wtHjf7
kMJSMxq7wFW1SAvdVpRFkj/E4nl5LQFUIND+r4/bh28sS14+ALYSXB9I9v9vsO/o
pLP6i1DjI2t+CyNeX/VeQTIur7QY1qC4KK4wocI84565E87+mLCRSR70+CvTAVJs
MdVHRzrjbS1/ZCJB6cXe58DPThXFnM3l6PucFNF2vF7scWVGkqrq72jVx+wlkRDr
yQ8GvduH5rE3o4rJTK3IjCs9VVW3PVG6IVdbHUxMLYES4FIakgqN1rhTlyKlSmvM
ESueg1aXT7PWQC/D89a9AtnnFunAJsHkgLlmSjKT3MYC1pRuWNdPXL1aMbw/gug=
=8y4d
-----END PGP SIGNATURE-----
diff mbox

Patch

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 0113c6c..598f444 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -1615,6 +1615,12 @@  int ehci_register(struct udevice *dev, struct ehci_hccr *hccr,
 	if (ret)
 		goto err;
 
+	if (ops->init_after_reset) {
+		ret = ops->init_after_reset(ctrl);
+		if (ret)
+			goto err;
+	}
+
 	ret = ehci_common_init(ctrl, tweaks);
 	if (ret)
 		goto err;
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index 826b3fe..734d7f0 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -240,6 +240,7 @@  struct ehci_ops {
 	void (*powerup_fixup)(struct ehci_ctrl *ctrl, uint32_t *status_reg,
 			      uint32_t *reg);
 	uint32_t *(*get_portsc_register)(struct ehci_ctrl *ctrl, int port);
+	int (*init_after_reset)(struct ehci_ctrl *ctrl);
 };
 
 struct ehci_ctrl {