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:
Yunzhi Li 2015-09-10 11:42:30 +08:00 committed by ChromeOS bot
commit c39770e2f5

View file

@ -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, &reg->host.hchn[ch_num].hctsizn);
writel((uint32_t)aligned_buf, &reg->host.hchn[ch_num].hcdman);
writel(hcchar.d32, &reg->host.hchn[ch_num].hccharn);