libpayload: usb: dwc2: check device connect state before enable channel
If the device has already been disconnected then we shouldn't enable host channel to start any transfer, otherwise this channel goes into an odd state the channel is enabled but can not be disabled by set hcchar.chdis=1. So we need check the device connect status before enable channel. BRANCH=None BUG=chrome-os-partner:44534 TEST=None Change-Id: Ib3ecf486649ca11b302144f9c00a5e88424e90fa Signed-off-by: Yunzhi Li <lyz@rock-chips.com> Reviewed-on: https://chromium-review.googlesource.com/298402 Reviewed-by: Julius Werner <jwerner@chromium.org> Commit-Queue: Lin Huang <hl@rock-chips.com> Tested-by: Lin Huang <hl@rock-chips.com> (cherry picked from commit ea96f947b5304fdde2e0991d23febaeba209dde1) Reviewed-on: https://chromium-review.googlesource.com/298992 Reviewed-by: David Hendricks <dhendrix@chromium.org>
This commit is contained in:
parent
770717b433
commit
c39770e2f5
1 changed files with 3 additions and 0 deletions
|
|
@ -274,6 +274,9 @@ dwc2_do_xfer(endpoint_t *ep, int size, int pid, ep_dir_t dir,
|
|||
if (do_copy && (dir == EPDIR_OUT))
|
||||
memcpy(aligned_buf, data_buf, size);
|
||||
|
||||
if (dwc2_disconnected(ep->dev->controller))
|
||||
return -HCSTAT_DISCONNECTED;
|
||||
|
||||
writel(hctsiz.d32, ®->host.hchn[ch_num].hctsizn);
|
||||
writel((uint32_t)aligned_buf, ®->host.hchn[ch_num].hcdman);
|
||||
writel(hcchar.d32, ®->host.hchn[ch_num].hccharn);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue