msm: ipa3: Send enable force clear only for producer pipe

Enable forceclear only supported for producer pipe so
avoid sending the force clear command to consumer pipes.

Signed-off-by: Ashok Vuyyuru <avuyyuru@codeaurora.org>
Change-Id: I850f360f18c6598af6914c9cd2c89cacad1ac4c9
This commit is contained in:
Ashok Vuyyuru
2020-10-12 11:24:41 +05:30
szülő 1022df8dfa
commit 79aca73c33
3 fájl változott, egészen pontosan 60 új sor hozzáadva és 51 régi sor törölve

Fájl megtekintése

@@ -2638,25 +2638,28 @@ int ipa3_suspend_gsi_wdi_pipe(u32 clnt_hdl)
return -EFAULT; return -EFAULT;
} }
if (ep->valid) { if (ep->valid) {
source_pipe_bitmask = ipahal_get_ep_bit(ipa_ep_idx); if (IPA_CLIENT_IS_PROD(ep->client)) {
source_pipe_reg_idx = ipahal_get_ep_reg_idx(ipa_ep_idx); source_pipe_bitmask = ipahal_get_ep_bit(ipa_ep_idx);
source_pipe_reg_idx = ipahal_get_ep_reg_idx(ipa_ep_idx);
IPADBG("suspended pipe %d\n", ipa_ep_idx); IPADBG("suspended pipe %d\n", ipa_ep_idx);
res = ipa3_enable_force_clear(clnt_hdl, res = ipa3_enable_force_clear(clnt_hdl,
false, source_pipe_bitmask, source_pipe_reg_idx); false, source_pipe_bitmask,
if (res) { source_pipe_reg_idx);
/* if (res) {
* assuming here modem SSR, AP can remove /*
* the delay in this case * assuming here modem SSR, AP can remove
*/ * the delay in this case
IPAERR("failed to force clear %d\n", res); */
IPAERR("remove delay from SCND reg\n"); IPAERR("failed to force clear %d\n", res);
ep_ctrl_scnd.endp_delay = false; IPAERR("remove delay from SCND reg\n");
ipahal_write_reg_n_fields( ep_ctrl_scnd.endp_delay = false;
ipahal_write_reg_n_fields(
IPA_ENDP_INIT_CTRL_SCND_n, clnt_hdl, IPA_ENDP_INIT_CTRL_SCND_n, clnt_hdl,
&ep_ctrl_scnd); &ep_ctrl_scnd);
} else { } else {
disable_force_clear = true; disable_force_clear = true;
}
} }
retry_gsi_stop: retry_gsi_stop:
res = ipa3_stop_gsi_channel(ipa_ep_idx); res = ipa3_stop_gsi_channel(ipa_ep_idx);

Fájl megtekintése

@@ -879,23 +879,26 @@ int ipa3_disable_wdi3_pipes(int ipa_ep_idx_tx, int ipa_ep_idx_rx)
* as IPA uC will fail to suspend the pipe otherwise. * as IPA uC will fail to suspend the pipe otherwise.
*/ */
ep = &ipa3_ctx->ep[ipa_ep_idx_rx]; ep = &ipa3_ctx->ep[ipa_ep_idx_rx];
source_pipe_bitmask = ipahal_get_ep_bit(ipa_ep_idx_rx); if (IPA_CLIENT_IS_PROD(ep->client)) {
source_pipe_reg_idx = ipahal_get_ep_reg_idx(ipa_ep_idx_rx); source_pipe_bitmask = ipahal_get_ep_bit(ipa_ep_idx_rx);
result = ipa3_enable_force_clear(ipa_ep_idx_rx, source_pipe_reg_idx = ipahal_get_ep_reg_idx(ipa_ep_idx_rx);
false, source_pipe_bitmask, source_pipe_reg_idx); result = ipa3_enable_force_clear(ipa_ep_idx_rx,
if (result) { false, source_pipe_bitmask,
/* source_pipe_reg_idx);
* assuming here modem SSR, AP can remove if (result) {
* the delay in this case /*
*/ * assuming here modem SSR, AP can remove
IPAERR("failed to force clear %d\n", result); * the delay in this case
IPAERR("remove delay from SCND reg\n"); */
ep_ctrl_scnd.endp_delay = false; IPAERR("failed to force clear %d\n", result);
ipahal_write_reg_n_fields( IPAERR("remove delay from SCND reg\n");
IPA_ENDP_INIT_CTRL_SCND_n, ipa_ep_idx_rx, ep_ctrl_scnd.endp_delay = false;
&ep_ctrl_scnd); ipahal_write_reg_n_fields(
} else { IPA_ENDP_INIT_CTRL_SCND_n, ipa_ep_idx_rx,
disable_force_clear = true; &ep_ctrl_scnd);
} else {
disable_force_clear = true;
}
} }
/* stop gsi rx channel */ /* stop gsi rx channel */

Fájl megtekintése

@@ -1809,23 +1809,26 @@ int ipa3_disable_wigig_pipe_i(enum ipa_client_type client)
} }
IPADBG("pipe %d\n", ipa_ep_idx); IPADBG("pipe %d\n", ipa_ep_idx);
source_pipe_bitmask = ipahal_get_ep_bit(ipa_ep_idx); if (IPA_CLIENT_IS_PROD(ep->client)) {
source_pipe_reg_idx = ipahal_get_ep_reg_idx(ipa_ep_idx); source_pipe_bitmask = ipahal_get_ep_bit(ipa_ep_idx);
res = ipa3_enable_force_clear(ipa_ep_idx, source_pipe_reg_idx = ipahal_get_ep_reg_idx(ipa_ep_idx);
false, source_pipe_bitmask, source_pipe_reg_idx); res = ipa3_enable_force_clear(ipa_ep_idx,
if (res) { false, source_pipe_bitmask,
/* source_pipe_reg_idx);
* assuming here modem SSR, AP can remove if (res) {
* the delay in this case /*
*/ * assuming here modem SSR, AP can remove
IPAERR("failed to force clear %d\n", res); * the delay in this case
IPAERR("remove delay from SCND reg\n"); */
ep_ctrl_scnd.endp_delay = false; IPAERR("failed to force clear %d\n", res);
ipahal_write_reg_n_fields( IPAERR("remove delay from SCND reg\n");
IPA_ENDP_INIT_CTRL_SCND_n, ipa_ep_idx, ep_ctrl_scnd.endp_delay = false;
&ep_ctrl_scnd); ipahal_write_reg_n_fields(
} else { IPA_ENDP_INIT_CTRL_SCND_n, ipa_ep_idx,
disable_force_clear = true; &ep_ctrl_scnd);
} else {
disable_force_clear = true;
}
} }
retry_gsi_stop: retry_gsi_stop:
res = ipa3_stop_gsi_channel(ipa_ep_idx); res = ipa3_stop_gsi_channel(ipa_ep_idx);