diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c index 9fc695955f34..4ed805bf37e0 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c @@ -6992,6 +6992,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, resource_p->ipa_holb_monitor_max_cnt_usb; ipa3_ctx->uc_ctx.holb_monitor.max_cnt_11ad = resource_p->ipa_holb_monitor_max_cnt_11ad; + ipa3_ctx->ipa_wan_aggr_pkt_cnt = resource_p->ipa_wan_aggr_pkt_cnt; ipa3_ctx->stats.page_recycle_stats[0].total_replenished = 0; ipa3_ctx->stats.page_recycle_stats[0].tmp_alloc = 0; ipa3_ctx->stats.page_recycle_stats[1].total_replenished = 0; @@ -7786,6 +7787,7 @@ static int get_ipa_dts_configuration(struct platform_device *pdev, u32 ipa_holb_monitor_max_cnt_wlan; u32 ipa_holb_monitor_max_cnt_usb; u32 ipa_holb_monitor_max_cnt_11ad; + u32 ipa_wan_aggr_pkt_cnt; /* initialize ipa3_res */ ipa_drv_res->ipa_pipe_mem_start_ofst = IPA_PIPE_MEM_START_OFST; @@ -8329,6 +8331,19 @@ static int get_ipa_dts_configuration(struct platform_device *pdev, IPADBG(": secure-debug-check-action = %d\n", ipa_drv_res->secure_debug_check_action); + + result = of_property_read_u32( + pdev->dev.of_node, + "qcom,ipa-wan-aggr-pkt-cnt", + &ipa_wan_aggr_pkt_cnt); + if (result) { + ipa_wan_aggr_pkt_cnt = IPA_WAN_AGGR_PKT_CNT; + IPADBG("ipa wan aggr pkt cnt = %u\n", ipa_wan_aggr_pkt_cnt); + } else + IPADBG("ipa wan aggr pkt cnt = %u\n", ipa_wan_aggr_pkt_cnt); + + ipa_drv_res->ipa_wan_aggr_pkt_cnt = ipa_wan_aggr_pkt_cnt; + get_dts_tx_wrapper_cache_size(pdev, ipa_drv_res); return 0; diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index c696707f419c..dd341697d6ea 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -18,7 +18,6 @@ #include "ipahal_fltrt.h" #define IPA_GSI_EVENT_RP_SIZE 8 -#define IPA_WAN_AGGR_PKT_CNT 1 #define IPA_WAN_NAPI_MAX_FRAMES (NAPI_WEIGHT / IPA_WAN_AGGR_PKT_CNT) #define IPA_WAN_PAGE_ORDER 3 #define IPA_LAN_AGGR_PKT_CNT 1 @@ -5273,7 +5272,7 @@ int ipa3_rx_poll(u32 clnt_hdl, int weight) } wan_def_sys = ipa3_ctx->ep[ipa_ep_idx].sys; - remain_aggr_weight = weight / IPA_WAN_AGGR_PKT_CNT; + remain_aggr_weight = weight / ipa3_ctx->ipa_wan_aggr_pkt_cnt; if (remain_aggr_weight > IPA_WAN_NAPI_MAX_FRAMES) { IPAERR("NAPI weight is higher than expected\n"); IPAERR("expected %d got %d\n", @@ -5307,7 +5306,7 @@ start_poll: break; } } - cnt += weight - remain_aggr_weight * IPA_WAN_AGGR_PKT_CNT; + cnt += weight - remain_aggr_weight * ipa3_ctx->ipa_wan_aggr_pkt_cnt; /* call repl_hdlr before napi_reschedule / napi_complete */ ep->sys->repl_hdlr(ep->sys); /* When not able to replenish enough descriptors, keep in polling diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h index 5f8c47ada451..ac7d637b3962 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -81,6 +81,8 @@ #define NAPI_TX_WEIGHT 64 +#define IPA_WAN_AGGR_PKT_CNT 1 + #define IPADBG(fmt, args...) \ do { \ pr_debug(DRV_NAME " %s:%d " fmt, __func__, __LINE__, ## args);\ @@ -2134,6 +2136,7 @@ struct ipa3_context { char *gsi_fw_file_name; char *uc_fw_file_name; bool gsi_wdi_db_polling; + u32 ipa_wan_aggr_pkt_cnt; }; struct ipa3_plat_drv_res { @@ -2198,6 +2201,7 @@ struct ipa3_plat_drv_res { const char *uc_fw_file_name; u32 tx_wrapper_cache_max_size; bool gsi_wdi_db_polling; + u32 ipa_wan_aggr_pkt_cnt; }; /**