Loading drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +12 −1 Original line number Diff line number Diff line Loading @@ -1373,6 +1373,7 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl) struct ipa3_ep_context *ep; int empty; int result; int i; if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || ipa3_ctx->ep[clnt_hdl].valid == 0) { Loading Loading @@ -1403,7 +1404,17 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl) cancel_delayed_work_sync(&ep->sys->replenish_rx_work); flush_workqueue(ep->sys->wq); if (ipa3_ctx->transport_prototype == IPA_TRANSPORT_TYPE_GSI) { /* channel stop might fail on timeout if IPA is busy */ for (i = 0; i < IPA_GSI_CHANNEL_STOP_MAX_RETRY; i++) { result = ipa3_stop_gsi_channel(clnt_hdl); if (result == GSI_STATUS_SUCCESS) break; if (result != -GSI_STATUS_AGAIN && result != -GSI_STATUS_TIMED_OUT) break; } if (result != GSI_STATUS_SUCCESS) { IPAERR("GSI stop chan err: %d.\n", result); BUG(); Loading drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +19 −10 Original line number Diff line number Diff line Loading @@ -6122,14 +6122,24 @@ int ipa3_stop_gsi_channel(u32 clnt_hdl) memset(&mem, 0, sizeof(mem)); if (IPA_CLIENT_IS_PROD(ep->client)) { IPADBG("Calling gsi_stop_channel ch:%lu\n", ep->gsi_chan_hdl); res = gsi_stop_channel(ep->gsi_chan_hdl); IPADBG("gsi_stop_channel ch: %lu returned %d\n", ep->gsi_chan_hdl, res); goto end_sequence; } for (i = 0; i < IPA_GSI_CHANNEL_STOP_MAX_RETRY; i++) { IPADBG("Calling gsi_stop_channel\n"); IPADBG("Calling gsi_stop_channel ch:%lu\n", ep->gsi_chan_hdl); res = gsi_stop_channel(ep->gsi_chan_hdl); IPADBG("gsi_stop_channel returned %d\n", res); IPADBG("gsi_stop_channel ch: %lu returned %d\n", ep->gsi_chan_hdl, res); if (res != -GSI_STATUS_AGAIN && res != -GSI_STATUS_TIMED_OUT) goto end_sequence; if (IPA_CLIENT_IS_CONS(ep->client)) { IPADBG("Inject a DMA_TASK with 1B packet to IPA\n"); /* Send a 1B packet DMA_TASK to IPA and try again */ res = ipa3_inject_dma_task_for_gsi(); Loading @@ -6137,7 +6147,6 @@ int ipa3_stop_gsi_channel(u32 clnt_hdl) IPAERR("Failed to inject DMA TASk for GSI\n"); goto end_sequence; } } /* sleep for short period to flush IPA */ usleep_range(IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC, Loading Loading
drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +12 −1 Original line number Diff line number Diff line Loading @@ -1373,6 +1373,7 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl) struct ipa3_ep_context *ep; int empty; int result; int i; if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || ipa3_ctx->ep[clnt_hdl].valid == 0) { Loading Loading @@ -1403,7 +1404,17 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl) cancel_delayed_work_sync(&ep->sys->replenish_rx_work); flush_workqueue(ep->sys->wq); if (ipa3_ctx->transport_prototype == IPA_TRANSPORT_TYPE_GSI) { /* channel stop might fail on timeout if IPA is busy */ for (i = 0; i < IPA_GSI_CHANNEL_STOP_MAX_RETRY; i++) { result = ipa3_stop_gsi_channel(clnt_hdl); if (result == GSI_STATUS_SUCCESS) break; if (result != -GSI_STATUS_AGAIN && result != -GSI_STATUS_TIMED_OUT) break; } if (result != GSI_STATUS_SUCCESS) { IPAERR("GSI stop chan err: %d.\n", result); BUG(); Loading
drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +19 −10 Original line number Diff line number Diff line Loading @@ -6122,14 +6122,24 @@ int ipa3_stop_gsi_channel(u32 clnt_hdl) memset(&mem, 0, sizeof(mem)); if (IPA_CLIENT_IS_PROD(ep->client)) { IPADBG("Calling gsi_stop_channel ch:%lu\n", ep->gsi_chan_hdl); res = gsi_stop_channel(ep->gsi_chan_hdl); IPADBG("gsi_stop_channel ch: %lu returned %d\n", ep->gsi_chan_hdl, res); goto end_sequence; } for (i = 0; i < IPA_GSI_CHANNEL_STOP_MAX_RETRY; i++) { IPADBG("Calling gsi_stop_channel\n"); IPADBG("Calling gsi_stop_channel ch:%lu\n", ep->gsi_chan_hdl); res = gsi_stop_channel(ep->gsi_chan_hdl); IPADBG("gsi_stop_channel returned %d\n", res); IPADBG("gsi_stop_channel ch: %lu returned %d\n", ep->gsi_chan_hdl, res); if (res != -GSI_STATUS_AGAIN && res != -GSI_STATUS_TIMED_OUT) goto end_sequence; if (IPA_CLIENT_IS_CONS(ep->client)) { IPADBG("Inject a DMA_TASK with 1B packet to IPA\n"); /* Send a 1B packet DMA_TASK to IPA and try again */ res = ipa3_inject_dma_task_for_gsi(); Loading @@ -6137,7 +6147,6 @@ int ipa3_stop_gsi_channel(u32 clnt_hdl) IPAERR("Failed to inject DMA TASk for GSI\n"); goto end_sequence; } } /* sleep for short period to flush IPA */ usleep_range(IPA_GSI_CHANNEL_STOP_SLEEP_MIN_USEC, Loading