Merge c6ba8c1111 on remote branch

Change-Id: I60b460e03ba805dcc9696269a6098b4048fd9463
This commit is contained in:
Linux Build Service Account 2021-08-11 00:32:31 -07:00
commit 08beb6a63b
7 changed files with 47 additions and 13 deletions

View file

@ -6025,6 +6025,13 @@ static int ipa3_panic_notifier(struct notifier_block *this,
int res;
struct ipa_active_client_logging_info log_info;
if (ipa3_ctx != NULL)
{
if (ipa3_ctx->is_device_crashed)
return NOTIFY_DONE;
ipa3_ctx->is_device_crashed = true;
}
ipa3_freeze_clock_vote_and_notify_modem();
IPADBG("Calling uC panic handler\n");
@ -7126,6 +7133,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
ipa3_ctx->gsi_ch20_wa = resource_p->gsi_ch20_wa;
ipa3_ctx->wdi_over_pcie = resource_p->wdi_over_pcie;
ipa3_ctx->ipa3_active_clients_logging.log_rdy = false;
ipa3_ctx->is_device_crashed = false;
ipa3_ctx->mhi_evid_limits[0] = resource_p->mhi_evid_limits[0];
ipa3_ctx->mhi_evid_limits[1] = resource_p->mhi_evid_limits[1];
ipa3_ctx->entire_ipa_block_size = resource_p->entire_ipa_block_size;

View file

@ -1078,7 +1078,7 @@ static int __ipa_del_flt_rule(u32 rule_hdl)
list_del(&entry->link);
entry->tbl->rule_cnt--;
if (entry->rt_tbl)
if (entry->rt_tbl && !ipa3_check_idr_if_freed(entry->rt_tbl))
entry->rt_tbl->ref_cnt--;
IPADBG("del flt rule rule_cnt=%d rule_id=%d\n",
entry->tbl->rule_cnt, entry->rule_id);

View file

@ -1533,6 +1533,9 @@ int ipa_drop_stats_init(void)
/* Always enable drop stats for USB DPL Pipe. */
pipe_bitmask |= IPA_CLIENT_BIT_32(IPA_CLIENT_USB_DPL_CONS);
/* Always enable drop stats for ODL DPL Pipe. */
pipe_bitmask |= IPA_CLIENT_BIT_32(IPA_CLIENT_ODL_DPL_CONS);
/* Currently we have option to enable drop stats using debugfs.
* To enable drop stats for a different pipe, first user needs
* to query drop stats to get the current stats and enable.

View file

@ -2154,6 +2154,7 @@ struct ipa3_context {
bool is_bw_monitor_supported;
bool modem_load_ipa_fw;
bool fnr_stats_not_supported;
bool is_device_crashed;
};
struct ipa3_plat_drv_res {

View file

@ -893,7 +893,10 @@ int ipa3_qmi_add_offload_request_send(
}
/* check if the filter rules from IPACM is valid */
if (req->filter_spec_ex2_list_len == 0) {
if (req->filter_spec_ex2_list_len < 0) {
IPAWANERR("IPACM pass invalid num of rules\n");
return -EINVAL;
} else if (req->filter_spec_ex2_list_len == 0) {
IPAWANDBG("IPACM pass zero rules to Q6\n");
} else {
IPAWANDBG("IPACM pass %u rules to Q6\n",
@ -901,9 +904,10 @@ int ipa3_qmi_add_offload_request_send(
}
/* currently set total max to 64 */
if (req->filter_spec_ex2_list_len +
ipa3_qmi_ctx->num_ipa_offload_connection
>= QMI_IPA_MAX_FILTERS_V01) {
if ((ipa3_qmi_ctx->num_ipa_offload_connection < 0) ||
(req->filter_spec_ex2_list_len >=
(QMI_IPA_MAX_FILTERS_V01 -
ipa3_qmi_ctx->num_ipa_offload_connection))) {
IPAWANDBG(
"cur(%d), req(%d), exceed limit (%d)\n",
ipa3_qmi_ctx->num_ipa_offload_connection,

View file

@ -8784,6 +8784,8 @@ void ipa3_force_close_coal(void)
int ipa3_suspend_apps_pipes(bool suspend)
{
int res;
struct ipa_ep_cfg_holb holb_cfg;
int odl_ep_idx;
/* As per HPG first need start/stop coalescing channel
* then default one. Coalescing client number was greater then
@ -8805,6 +8807,24 @@ int ipa3_suspend_apps_pipes(bool suspend)
if (res == -EAGAIN)
goto undo_odl_cons;
odl_ep_idx = ipa3_get_ep_mapping(IPA_CLIENT_ODL_DPL_CONS);
if (odl_ep_idx != IPA_EP_NOT_ALLOCATED && ipa3_ctx->ep[odl_ep_idx].valid) {
memset(&holb_cfg, 0, sizeof(holb_cfg));
if (suspend)
holb_cfg.en = 0;
else
holb_cfg.en = 1;
ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n,
odl_ep_idx, &holb_cfg);
/* IPA4.5 issue requires HOLB_EN to be written twice */
if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5 && holb_cfg.en)
ipahal_write_reg_n_fields(
IPA_ENDP_INIT_HOL_BLOCK_EN_n,
odl_ep_idx, &holb_cfg);
}
res = _ipa_suspend_resume_pipe(IPA_CLIENT_APPS_WAN_LOW_LAT_CONS,
suspend);
if (res == -EAGAIN)

View file

@ -2237,16 +2237,14 @@ static int rmnet_ipa_send_coalesce_notification(uint8_t qmap_id,
if (!coalesce_info)
return -ENOMEM;
if (enable) {
coalesce_info->qmap_id = qmap_id;
coalesce_info->tcp_enable = tcp;
coalesce_info->udp_enable = udp;
coalesce_info->qmap_id = qmap_id;
coalesce_info->tcp_enable = tcp;
coalesce_info->udp_enable = udp;
msg_meta.msg_len = sizeof(struct ipa_coalesce_info);
if (enable)
msg_meta.msg_type = IPA_COALESCE_ENABLE;
msg_meta.msg_len = sizeof(struct ipa_coalesce_info);
} else {
else
msg_meta.msg_type = IPA_COALESCE_DISABLE;
msg_meta.msg_len = sizeof(struct ipa_coalesce_info);
}
rc = ipa_send_msg(&msg_meta, coalesce_info, ipa3_wwan_msg_free_cb);
if (rc) {
IPAWANERR("ipa_send_msg failed: %d\n", rc);