Loading drivers/usb/host/whci/asl.c +7 −2 Original line number Diff line number Diff line Loading @@ -170,12 +170,17 @@ void asl_stop(struct whc *whc) void asl_update(struct whc *whc, uint32_t wusbcmd) { struct wusbhc *wusbhc = &whc->wusbhc; long t; mutex_lock(&wusbhc->mutex); if (wusbhc->active) { whc_write_wusbcmd(whc, wusbcmd, wusbcmd); wait_event(whc->async_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_ASYNC_UPDATED) == 0); t = wait_event_timeout( whc->async_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_ASYNC_UPDATED) == 0, msecs_to_jiffies(1000)); if (t == 0) whc_hw_error(whc, "ASL update timeout"); } mutex_unlock(&wusbhc->mutex); } Loading drivers/usb/host/whci/hw.c +15 −0 Original line number Diff line number Diff line Loading @@ -87,3 +87,18 @@ out: return ret; } /** * whc_hw_error - recover from a hardware error * @whc: the WHCI HC that broke. * @reason: a description of the failure. * * Recover from broken hardware with a full reset. */ void whc_hw_error(struct whc *whc, const char *reason) { struct wusbhc *wusbhc = &whc->wusbhc; dev_err(&whc->umc->dev, "hardware error: %s\n", reason); wusbhc_reset_all(wusbhc); } drivers/usb/host/whci/pzl.c +7 −2 Original line number Diff line number Diff line Loading @@ -183,12 +183,17 @@ void pzl_stop(struct whc *whc) void pzl_update(struct whc *whc, uint32_t wusbcmd) { struct wusbhc *wusbhc = &whc->wusbhc; long t; mutex_lock(&wusbhc->mutex); if (wusbhc->active) { whc_write_wusbcmd(whc, wusbcmd, wusbcmd); wait_event(whc->periodic_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_PERIODIC_UPDATED) == 0); t = wait_event_timeout( whc->periodic_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_PERIODIC_UPDATED) == 0, msecs_to_jiffies(1000)); if (t == 0) whc_hw_error(whc, "PZL update timeout"); } mutex_unlock(&wusbhc->mutex); } Loading drivers/usb/host/whci/whcd.h +1 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,7 @@ void whc_clean_up(struct whc *whc); /* hw.c */ void whc_write_wusbcmd(struct whc *whc, u32 mask, u32 val); int whc_do_gencmd(struct whc *whc, u32 cmd, u32 params, void *addr, size_t len); void whc_hw_error(struct whc *whc, const char *reason); /* wusb.c */ int whc_wusbhc_start(struct wusbhc *wusbhc); Loading Loading
drivers/usb/host/whci/asl.c +7 −2 Original line number Diff line number Diff line Loading @@ -170,12 +170,17 @@ void asl_stop(struct whc *whc) void asl_update(struct whc *whc, uint32_t wusbcmd) { struct wusbhc *wusbhc = &whc->wusbhc; long t; mutex_lock(&wusbhc->mutex); if (wusbhc->active) { whc_write_wusbcmd(whc, wusbcmd, wusbcmd); wait_event(whc->async_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_ASYNC_UPDATED) == 0); t = wait_event_timeout( whc->async_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_ASYNC_UPDATED) == 0, msecs_to_jiffies(1000)); if (t == 0) whc_hw_error(whc, "ASL update timeout"); } mutex_unlock(&wusbhc->mutex); } Loading
drivers/usb/host/whci/hw.c +15 −0 Original line number Diff line number Diff line Loading @@ -87,3 +87,18 @@ out: return ret; } /** * whc_hw_error - recover from a hardware error * @whc: the WHCI HC that broke. * @reason: a description of the failure. * * Recover from broken hardware with a full reset. */ void whc_hw_error(struct whc *whc, const char *reason) { struct wusbhc *wusbhc = &whc->wusbhc; dev_err(&whc->umc->dev, "hardware error: %s\n", reason); wusbhc_reset_all(wusbhc); }
drivers/usb/host/whci/pzl.c +7 −2 Original line number Diff line number Diff line Loading @@ -183,12 +183,17 @@ void pzl_stop(struct whc *whc) void pzl_update(struct whc *whc, uint32_t wusbcmd) { struct wusbhc *wusbhc = &whc->wusbhc; long t; mutex_lock(&wusbhc->mutex); if (wusbhc->active) { whc_write_wusbcmd(whc, wusbcmd, wusbcmd); wait_event(whc->periodic_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_PERIODIC_UPDATED) == 0); t = wait_event_timeout( whc->periodic_list_wq, (le_readl(whc->base + WUSBCMD) & WUSBCMD_PERIODIC_UPDATED) == 0, msecs_to_jiffies(1000)); if (t == 0) whc_hw_error(whc, "PZL update timeout"); } mutex_unlock(&wusbhc->mutex); } Loading
drivers/usb/host/whci/whcd.h +1 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,7 @@ void whc_clean_up(struct whc *whc); /* hw.c */ void whc_write_wusbcmd(struct whc *whc, u32 mask, u32 val); int whc_do_gencmd(struct whc *whc, u32 cmd, u32 params, void *addr, size_t len); void whc_hw_error(struct whc *whc, const char *reason); /* wusb.c */ int whc_wusbhc_start(struct wusbhc *wusbhc); Loading