mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
usb: ehci: handshake CMD_RUN instead of STS_HALT
For Aspeed, HCHalted status depends on not only Run/Stop but also ASS/PSS status. Handshake CMD_RUN on startup instead. Tested-by: Tao Ren <rentao.bupt@gmail.com> Reviewed-by: Tao Ren <rentao.bupt@gmail.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Neal Liu <neal_liu@aspeedtech.com> Link: https://lore.kernel.org/r/20210910073619.26095-1-neal_liu@aspeedtech.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
18d6b39ee8
commit
7f2d73788d
3 changed files with 17 additions and 1 deletions
|
@ -634,7 +634,16 @@ static int ehci_run (struct usb_hcd *hcd)
|
|||
/* Wait until HC become operational */
|
||||
ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
|
||||
msleep(5);
|
||||
rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT, 0, 100 * 1000);
|
||||
|
||||
/* For Aspeed, STS_HALT also depends on ASS/PSS status.
|
||||
* Check CMD_RUN instead.
|
||||
*/
|
||||
if (ehci->is_aspeed)
|
||||
rc = ehci_handshake(ehci, &ehci->regs->command, CMD_RUN,
|
||||
1, 100 * 1000);
|
||||
else
|
||||
rc = ehci_handshake(ehci, &ehci->regs->status, STS_HALT,
|
||||
0, 100 * 1000);
|
||||
|
||||
up_write(&ehci_cf_port_reset_rwsem);
|
||||
|
||||
|
|
|
@ -297,6 +297,12 @@ static int ehci_platform_probe(struct platform_device *dev)
|
|||
"has-transaction-translator"))
|
||||
hcd->has_tt = 1;
|
||||
|
||||
if (of_device_is_compatible(dev->dev.of_node,
|
||||
"aspeed,ast2500-ehci") ||
|
||||
of_device_is_compatible(dev->dev.of_node,
|
||||
"aspeed,ast2600-ehci"))
|
||||
ehci->is_aspeed = 1;
|
||||
|
||||
if (soc_device_match(quirk_poll_match))
|
||||
priv->quirk_poll = true;
|
||||
|
||||
|
|
|
@ -219,6 +219,7 @@ struct ehci_hcd { /* one per controller */
|
|||
unsigned need_oc_pp_cycle:1; /* MPC834X port power */
|
||||
unsigned imx28_write_fix:1; /* For Freescale i.MX28 */
|
||||
unsigned spurious_oc:1;
|
||||
unsigned is_aspeed:1;
|
||||
|
||||
/* required for usb32 quirk */
|
||||
#define OHCI_CTRL_HCFS (3 << 6)
|
||||
|
|
Loading…
Reference in a new issue