Loading drivers/platform/msm/gsi/gsi.c +88 −0 Original line number Diff line number Diff line Loading @@ -4156,6 +4156,94 @@ int gsi_map_virtual_ch_to_per_ep(u32 ee, u32 chan_num, u32 per_ep_index) } EXPORT_SYMBOL(gsi_map_virtual_ch_to_per_ep); void gsi_wdi3_write_evt_ring_db(unsigned long evt_ring_hdl, uint32_t db_addr_low, uint32_t db_addr_high) { if (!gsi_ctx) { pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__); return; } gsi_writel(db_addr_low, gsi_ctx->base + GSI_EE_n_EV_CH_k_CNTXT_12_OFFS(evt_ring_hdl, gsi_ctx->per.ee)); gsi_writel(db_addr_high, gsi_ctx->base + GSI_EE_n_EV_CH_k_CNTXT_13_OFFS(evt_ring_hdl, gsi_ctx->per.ee)); } EXPORT_SYMBOL(gsi_wdi3_write_evt_ring_db); void gsi_wdi3_dump_register(unsigned long chan_hdl) { uint32_t val; if (!gsi_ctx) { pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__); return; } GSIDBG("reg dump ch id %d\n", chan_hdl); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_0_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_0_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_1_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_1_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_2_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_2_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_3_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_3_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_4_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_4_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_5_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_5_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_6_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_6_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_7_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_7_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_RE_FETCH_READ_PTR_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_RE_FETCH_READ_PTR_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_RE_FETCH_WRITE_PTR_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_RE_FETCH_WRITE_PTR_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_QOS_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_QOS_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_0_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_0_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_1_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_1_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_2_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_2_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_3_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_3_OFFS 0x%x\n", val); } EXPORT_SYMBOL(gsi_wdi3_dump_register); static int msm_gsi_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; Loading drivers/platform/msm/ipa/ipa_api.c +1 −1 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ const char *ipa_clients_strings[IPA_CLIENT_MAX] = { __stringify(IPA_CLIENT_HSIC5_CONS), __stringify(IPA_CLIENT_WLAN1_PROD), __stringify(IPA_CLIENT_WLAN1_CONS), __stringify(IPA_CLIENT_A5_WLAN_AMPDU_PROD), __stringify(IPA_CLIENT_WLAN2_PROD), __stringify(IPA_CLIENT_WLAN2_CONS), __stringify(RESERVED_PROD_14), __stringify(IPA_CLIENT_WLAN3_CONS), Loading drivers/platform/msm/ipa/ipa_clients/ipa_wdi3.c +46 −13 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/string.h> #include "../ipa_common_i.h" #include "../ipa_v3/ipa_pm.h" #include "../ipa_v3/ipa_i.h" #define OFFLOAD_DRV_NAME "ipa_wdi" #define IPA_WDI_DBG(fmt, args...) \ Loading Loading @@ -120,6 +121,10 @@ int ipa_wdi_init(struct ipa_wdi_init_in_params *in, ipa_wdi_ctx->is_smmu_enabled = out->is_smmu_enabled; if (ipa3_ctx->ipa_wdi_over_gsi) out->is_over_gsi = true; else out->is_over_gsi = false; return 0; } EXPORT_SYMBOL(ipa_wdi_init); Loading Loading @@ -250,14 +255,20 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in) memset(tx_prop, 0, sizeof(tx_prop)); tx_prop[0].ip = IPA_IP_v4; if (!ipa3_ctx->ipa_wdi_over_gsi) tx_prop[0].dst_pipe = IPA_CLIENT_WLAN1_CONS; else tx_prop[0].dst_pipe = IPA_CLIENT_WLAN2_CONS; tx_prop[0].alt_dst_pipe = in->alt_dst_pipe; tx_prop[0].hdr_l2_type = in->hdr_info[0].hdr_type; strlcpy(tx_prop[0].hdr_name, hdr->hdr[IPA_IP_v4].name, sizeof(tx_prop[0].hdr_name)); tx_prop[1].ip = IPA_IP_v6; if (!ipa3_ctx->ipa_wdi_over_gsi) tx_prop[1].dst_pipe = IPA_CLIENT_WLAN1_CONS; else tx_prop[1].dst_pipe = IPA_CLIENT_WLAN2_CONS; tx_prop[1].alt_dst_pipe = in->alt_dst_pipe; tx_prop[1].hdr_l2_type = in->hdr_info[1].hdr_type; strlcpy(tx_prop[1].hdr_name, hdr->hdr[IPA_IP_v6].name, Loading @@ -266,10 +277,12 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in) /* populate rx prop */ rx.num_props = 2; rx.prop = rx_prop; memset(rx_prop, 0, sizeof(rx_prop)); rx_prop[0].ip = IPA_IP_v4; if (!ipa3_ctx->ipa_wdi_over_gsi) rx_prop[0].src_pipe = IPA_CLIENT_WLAN1_PROD; else rx_prop[0].src_pipe = IPA_CLIENT_WLAN2_PROD; rx_prop[0].hdr_l2_type = in->hdr_info[0].hdr_type; if (in->is_meta_data_valid) { rx_prop[0].attrib.attrib_mask |= IPA_FLT_META_DATA; Loading @@ -278,7 +291,10 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in) } rx_prop[1].ip = IPA_IP_v6; if (!ipa3_ctx->ipa_wdi_over_gsi) rx_prop[1].src_pipe = IPA_CLIENT_WLAN1_PROD; else rx_prop[1].src_pipe = IPA_CLIENT_WLAN2_PROD; rx_prop[1].hdr_l2_type = in->hdr_info[1].hdr_type; if (in->is_meta_data_valid) { rx_prop[1].attrib.attrib_mask |= IPA_FLT_META_DATA; Loading Loading @@ -656,8 +672,13 @@ int ipa_wdi_disconn_pipes(void) } } if (!ipa3_ctx->ipa_wdi_over_gsi) { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_CONS); } else { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_CONS); } if (ipa_wdi_ctx->wdi_version == IPA_WDI_3) { if (ipa_disconn_wdi_pipes(ipa_ep_idx_rx, ipa_ep_idx_tx)) { Loading Loading @@ -712,8 +733,13 @@ int ipa_wdi_enable_pipes(void) return -EPERM; } if (!ipa3_ctx->ipa_wdi_over_gsi) { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_CONS); } else { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_CONS); } if (ipa_wdi_ctx->wdi_version == IPA_WDI_3) { if (ipa_enable_wdi_pipes(ipa_ep_idx_tx, ipa_ep_idx_rx)) { Loading Loading @@ -773,8 +799,13 @@ int ipa_wdi_disable_pipes(void) return -EPERM; } if (!ipa3_ctx->ipa_wdi_over_gsi) { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_CONS); } else { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_CONS); } if (ipa_wdi_ctx->wdi_version == IPA_WDI_3) { if (ipa_disable_wdi_pipes(ipa_ep_idx_tx, ipa_ep_idx_rx)) { Loading Loading @@ -832,9 +863,11 @@ int ipa_wdi_set_perf_profile(struct ipa_wdi_perf_profile *profile) rm_profile.max_supported_bandwidth_mbps = profile->max_supported_bw_mbps; if (profile->client == IPA_CLIENT_WLAN1_PROD) { if (profile->client == IPA_CLIENT_WLAN1_PROD || profile->client == IPA_CLIENT_WLAN2_PROD) { resource_name = IPA_RM_RESOURCE_WLAN_PROD; } else if (profile->client == IPA_CLIENT_WLAN1_CONS) { } else if (profile->client == IPA_CLIENT_WLAN1_CONS || profile->client == IPA_CLIENT_WLAN2_CONS) { resource_name = IPA_RM_RESOURCE_WLAN_CONS; } else { IPA_WDI_ERR("not supported\n"); Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +6 −6 Original line number Diff line number Diff line Loading @@ -5291,7 +5291,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, ipa3_ctx->use_ipa_teth_bridge = resource_p->use_ipa_teth_bridge; ipa3_ctx->modem_cfg_emb_pipe_flt = resource_p->modem_cfg_emb_pipe_flt; ipa3_ctx->ipa_wdi2 = resource_p->ipa_wdi2; ipa3_ctx->ipa_wdi2_over_gsi = resource_p->ipa_wdi2_over_gsi; ipa3_ctx->ipa_wdi_over_gsi = resource_p->ipa_wdi_over_gsi; ipa3_ctx->ipa_fltrt_not_hashable = resource_p->ipa_fltrt_not_hashable; ipa3_ctx->use_64_bit_dma_mask = resource_p->use_64_bit_dma_mask; ipa3_ctx->wan_rx_ring_size = resource_p->wan_rx_ring_size; Loading Loading @@ -5898,7 +5898,7 @@ static int get_ipa_dts_configuration(struct platform_device *pdev, ipa_drv_res->platform_type = 0; ipa_drv_res->modem_cfg_emb_pipe_flt = false; ipa_drv_res->ipa_wdi2 = false; ipa_drv_res->ipa_wdi2_over_gsi = false; ipa_drv_res->ipa_wdi_over_gsi = false; ipa_drv_res->ipa_mhi_dynamic_config = false; ipa_drv_res->use_64_bit_dma_mask = false; ipa_drv_res->use_bw_vote = false; Loading Loading @@ -5990,11 +5990,11 @@ static int get_ipa_dts_configuration(struct platform_device *pdev, IPADBG(": modem configure embedded pipe filtering = %s\n", ipa_drv_res->modem_cfg_emb_pipe_flt ? "True" : "False"); ipa_drv_res->ipa_wdi2_over_gsi = ipa_drv_res->ipa_wdi_over_gsi = of_property_read_bool(pdev->dev.of_node, "qcom,ipa-wdi2_over_gsi"); IPADBG(": WDI-2.0 over gsi= %s\n", ipa_drv_res->ipa_wdi2_over_gsi "qcom,ipa-wdi-over-gsi"); IPADBG(": WDI over gsi= %s\n", ipa_drv_res->ipa_wdi_over_gsi ? "True" : "False"); ipa_drv_res->ipa_wdi2 = Loading drivers/platform/msm/ipa/ipa_v3/ipa_i.h +7 −2 Original line number Diff line number Diff line Loading @@ -1621,7 +1621,7 @@ struct ipa3_context { bool use_ipa_teth_bridge; bool modem_cfg_emb_pipe_flt; bool ipa_wdi2; bool ipa_wdi2_over_gsi; bool ipa_wdi_over_gsi; bool ipa_fltrt_not_hashable; bool use_64_bit_dma_mask; /* featurize if memory footprint becomes a concern */ Loading Loading @@ -1713,7 +1713,7 @@ struct ipa3_plat_drv_res { u32 ee; bool modem_cfg_emb_pipe_flt; bool ipa_wdi2; bool ipa_wdi2_over_gsi; bool ipa_wdi_over_gsi; bool ipa_fltrt_not_hashable; bool use_64_bit_dma_mask; bool use_bw_vote; Loading Loading @@ -2295,6 +2295,10 @@ int ipa_create_uc_smmu_mapping(int res_idx, bool wlan_smmu_en, phys_addr_t pa, struct sg_table *sgt, size_t len, bool device, unsigned long *iova); int ipa_create_gsi_smmu_mapping(int res_idx, bool wlan_smmu_en, phys_addr_t pa, struct sg_table *sgt, size_t len, bool device, unsigned long *iova); /* * Tethering bridge (Rmnet / MBIM) */ Loading Loading @@ -2532,6 +2536,7 @@ void ipa3_active_clients_unlock(void); int ipa3_wdi_init(void); int ipa3_write_qmapid_gsi_wdi_pipe(u32 clnt_hdl, u8 qmap_id); int ipa3_write_qmapid_wdi_pipe(u32 clnt_hdl, u8 qmap_id); int ipa3_write_qmapid_wdi3_gsi_pipe(u32 clnt_hdl, u8 qmap_id); int ipa3_tag_process(struct ipa3_desc *desc, int num_descs, unsigned long timeout); Loading Loading
drivers/platform/msm/gsi/gsi.c +88 −0 Original line number Diff line number Diff line Loading @@ -4156,6 +4156,94 @@ int gsi_map_virtual_ch_to_per_ep(u32 ee, u32 chan_num, u32 per_ep_index) } EXPORT_SYMBOL(gsi_map_virtual_ch_to_per_ep); void gsi_wdi3_write_evt_ring_db(unsigned long evt_ring_hdl, uint32_t db_addr_low, uint32_t db_addr_high) { if (!gsi_ctx) { pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__); return; } gsi_writel(db_addr_low, gsi_ctx->base + GSI_EE_n_EV_CH_k_CNTXT_12_OFFS(evt_ring_hdl, gsi_ctx->per.ee)); gsi_writel(db_addr_high, gsi_ctx->base + GSI_EE_n_EV_CH_k_CNTXT_13_OFFS(evt_ring_hdl, gsi_ctx->per.ee)); } EXPORT_SYMBOL(gsi_wdi3_write_evt_ring_db); void gsi_wdi3_dump_register(unsigned long chan_hdl) { uint32_t val; if (!gsi_ctx) { pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__); return; } GSIDBG("reg dump ch id %d\n", chan_hdl); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_0_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_0_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_1_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_1_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_2_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_2_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_3_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_3_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_4_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_4_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_5_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_5_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_6_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_6_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_CNTXT_7_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_CNTXT_7_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_RE_FETCH_READ_PTR_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_RE_FETCH_READ_PTR_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_RE_FETCH_WRITE_PTR_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_RE_FETCH_WRITE_PTR_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_QOS_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_QOS_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_0_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_0_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_1_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_1_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_2_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_2_OFFS 0x%x\n", val); val = gsi_readl(gsi_ctx->base + GSI_EE_n_GSI_CH_k_SCRATCH_3_OFFS(chan_hdl, gsi_ctx->per.ee)); GSIDBG("GSI_EE_n_GSI_CH_k_SCRATCH_3_OFFS 0x%x\n", val); } EXPORT_SYMBOL(gsi_wdi3_dump_register); static int msm_gsi_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; Loading
drivers/platform/msm/ipa/ipa_api.c +1 −1 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ const char *ipa_clients_strings[IPA_CLIENT_MAX] = { __stringify(IPA_CLIENT_HSIC5_CONS), __stringify(IPA_CLIENT_WLAN1_PROD), __stringify(IPA_CLIENT_WLAN1_CONS), __stringify(IPA_CLIENT_A5_WLAN_AMPDU_PROD), __stringify(IPA_CLIENT_WLAN2_PROD), __stringify(IPA_CLIENT_WLAN2_CONS), __stringify(RESERVED_PROD_14), __stringify(IPA_CLIENT_WLAN3_CONS), Loading
drivers/platform/msm/ipa/ipa_clients/ipa_wdi3.c +46 −13 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ #include <linux/string.h> #include "../ipa_common_i.h" #include "../ipa_v3/ipa_pm.h" #include "../ipa_v3/ipa_i.h" #define OFFLOAD_DRV_NAME "ipa_wdi" #define IPA_WDI_DBG(fmt, args...) \ Loading Loading @@ -120,6 +121,10 @@ int ipa_wdi_init(struct ipa_wdi_init_in_params *in, ipa_wdi_ctx->is_smmu_enabled = out->is_smmu_enabled; if (ipa3_ctx->ipa_wdi_over_gsi) out->is_over_gsi = true; else out->is_over_gsi = false; return 0; } EXPORT_SYMBOL(ipa_wdi_init); Loading Loading @@ -250,14 +255,20 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in) memset(tx_prop, 0, sizeof(tx_prop)); tx_prop[0].ip = IPA_IP_v4; if (!ipa3_ctx->ipa_wdi_over_gsi) tx_prop[0].dst_pipe = IPA_CLIENT_WLAN1_CONS; else tx_prop[0].dst_pipe = IPA_CLIENT_WLAN2_CONS; tx_prop[0].alt_dst_pipe = in->alt_dst_pipe; tx_prop[0].hdr_l2_type = in->hdr_info[0].hdr_type; strlcpy(tx_prop[0].hdr_name, hdr->hdr[IPA_IP_v4].name, sizeof(tx_prop[0].hdr_name)); tx_prop[1].ip = IPA_IP_v6; if (!ipa3_ctx->ipa_wdi_over_gsi) tx_prop[1].dst_pipe = IPA_CLIENT_WLAN1_CONS; else tx_prop[1].dst_pipe = IPA_CLIENT_WLAN2_CONS; tx_prop[1].alt_dst_pipe = in->alt_dst_pipe; tx_prop[1].hdr_l2_type = in->hdr_info[1].hdr_type; strlcpy(tx_prop[1].hdr_name, hdr->hdr[IPA_IP_v6].name, Loading @@ -266,10 +277,12 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in) /* populate rx prop */ rx.num_props = 2; rx.prop = rx_prop; memset(rx_prop, 0, sizeof(rx_prop)); rx_prop[0].ip = IPA_IP_v4; if (!ipa3_ctx->ipa_wdi_over_gsi) rx_prop[0].src_pipe = IPA_CLIENT_WLAN1_PROD; else rx_prop[0].src_pipe = IPA_CLIENT_WLAN2_PROD; rx_prop[0].hdr_l2_type = in->hdr_info[0].hdr_type; if (in->is_meta_data_valid) { rx_prop[0].attrib.attrib_mask |= IPA_FLT_META_DATA; Loading @@ -278,7 +291,10 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in) } rx_prop[1].ip = IPA_IP_v6; if (!ipa3_ctx->ipa_wdi_over_gsi) rx_prop[1].src_pipe = IPA_CLIENT_WLAN1_PROD; else rx_prop[1].src_pipe = IPA_CLIENT_WLAN2_PROD; rx_prop[1].hdr_l2_type = in->hdr_info[1].hdr_type; if (in->is_meta_data_valid) { rx_prop[1].attrib.attrib_mask |= IPA_FLT_META_DATA; Loading Loading @@ -656,8 +672,13 @@ int ipa_wdi_disconn_pipes(void) } } if (!ipa3_ctx->ipa_wdi_over_gsi) { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_CONS); } else { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_CONS); } if (ipa_wdi_ctx->wdi_version == IPA_WDI_3) { if (ipa_disconn_wdi_pipes(ipa_ep_idx_rx, ipa_ep_idx_tx)) { Loading Loading @@ -712,8 +733,13 @@ int ipa_wdi_enable_pipes(void) return -EPERM; } if (!ipa3_ctx->ipa_wdi_over_gsi) { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_CONS); } else { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_CONS); } if (ipa_wdi_ctx->wdi_version == IPA_WDI_3) { if (ipa_enable_wdi_pipes(ipa_ep_idx_tx, ipa_ep_idx_rx)) { Loading Loading @@ -773,8 +799,13 @@ int ipa_wdi_disable_pipes(void) return -EPERM; } if (!ipa3_ctx->ipa_wdi_over_gsi) { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN1_CONS); } else { ipa_ep_idx_rx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_PROD); ipa_ep_idx_tx = ipa_get_ep_mapping(IPA_CLIENT_WLAN2_CONS); } if (ipa_wdi_ctx->wdi_version == IPA_WDI_3) { if (ipa_disable_wdi_pipes(ipa_ep_idx_tx, ipa_ep_idx_rx)) { Loading Loading @@ -832,9 +863,11 @@ int ipa_wdi_set_perf_profile(struct ipa_wdi_perf_profile *profile) rm_profile.max_supported_bandwidth_mbps = profile->max_supported_bw_mbps; if (profile->client == IPA_CLIENT_WLAN1_PROD) { if (profile->client == IPA_CLIENT_WLAN1_PROD || profile->client == IPA_CLIENT_WLAN2_PROD) { resource_name = IPA_RM_RESOURCE_WLAN_PROD; } else if (profile->client == IPA_CLIENT_WLAN1_CONS) { } else if (profile->client == IPA_CLIENT_WLAN1_CONS || profile->client == IPA_CLIENT_WLAN2_CONS) { resource_name = IPA_RM_RESOURCE_WLAN_CONS; } else { IPA_WDI_ERR("not supported\n"); Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +6 −6 Original line number Diff line number Diff line Loading @@ -5291,7 +5291,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p, ipa3_ctx->use_ipa_teth_bridge = resource_p->use_ipa_teth_bridge; ipa3_ctx->modem_cfg_emb_pipe_flt = resource_p->modem_cfg_emb_pipe_flt; ipa3_ctx->ipa_wdi2 = resource_p->ipa_wdi2; ipa3_ctx->ipa_wdi2_over_gsi = resource_p->ipa_wdi2_over_gsi; ipa3_ctx->ipa_wdi_over_gsi = resource_p->ipa_wdi_over_gsi; ipa3_ctx->ipa_fltrt_not_hashable = resource_p->ipa_fltrt_not_hashable; ipa3_ctx->use_64_bit_dma_mask = resource_p->use_64_bit_dma_mask; ipa3_ctx->wan_rx_ring_size = resource_p->wan_rx_ring_size; Loading Loading @@ -5898,7 +5898,7 @@ static int get_ipa_dts_configuration(struct platform_device *pdev, ipa_drv_res->platform_type = 0; ipa_drv_res->modem_cfg_emb_pipe_flt = false; ipa_drv_res->ipa_wdi2 = false; ipa_drv_res->ipa_wdi2_over_gsi = false; ipa_drv_res->ipa_wdi_over_gsi = false; ipa_drv_res->ipa_mhi_dynamic_config = false; ipa_drv_res->use_64_bit_dma_mask = false; ipa_drv_res->use_bw_vote = false; Loading Loading @@ -5990,11 +5990,11 @@ static int get_ipa_dts_configuration(struct platform_device *pdev, IPADBG(": modem configure embedded pipe filtering = %s\n", ipa_drv_res->modem_cfg_emb_pipe_flt ? "True" : "False"); ipa_drv_res->ipa_wdi2_over_gsi = ipa_drv_res->ipa_wdi_over_gsi = of_property_read_bool(pdev->dev.of_node, "qcom,ipa-wdi2_over_gsi"); IPADBG(": WDI-2.0 over gsi= %s\n", ipa_drv_res->ipa_wdi2_over_gsi "qcom,ipa-wdi-over-gsi"); IPADBG(": WDI over gsi= %s\n", ipa_drv_res->ipa_wdi_over_gsi ? "True" : "False"); ipa_drv_res->ipa_wdi2 = Loading
drivers/platform/msm/ipa/ipa_v3/ipa_i.h +7 −2 Original line number Diff line number Diff line Loading @@ -1621,7 +1621,7 @@ struct ipa3_context { bool use_ipa_teth_bridge; bool modem_cfg_emb_pipe_flt; bool ipa_wdi2; bool ipa_wdi2_over_gsi; bool ipa_wdi_over_gsi; bool ipa_fltrt_not_hashable; bool use_64_bit_dma_mask; /* featurize if memory footprint becomes a concern */ Loading Loading @@ -1713,7 +1713,7 @@ struct ipa3_plat_drv_res { u32 ee; bool modem_cfg_emb_pipe_flt; bool ipa_wdi2; bool ipa_wdi2_over_gsi; bool ipa_wdi_over_gsi; bool ipa_fltrt_not_hashable; bool use_64_bit_dma_mask; bool use_bw_vote; Loading Loading @@ -2295,6 +2295,10 @@ int ipa_create_uc_smmu_mapping(int res_idx, bool wlan_smmu_en, phys_addr_t pa, struct sg_table *sgt, size_t len, bool device, unsigned long *iova); int ipa_create_gsi_smmu_mapping(int res_idx, bool wlan_smmu_en, phys_addr_t pa, struct sg_table *sgt, size_t len, bool device, unsigned long *iova); /* * Tethering bridge (Rmnet / MBIM) */ Loading Loading @@ -2532,6 +2536,7 @@ void ipa3_active_clients_unlock(void); int ipa3_wdi_init(void); int ipa3_write_qmapid_gsi_wdi_pipe(u32 clnt_hdl, u8 qmap_id); int ipa3_write_qmapid_wdi_pipe(u32 clnt_hdl, u8 qmap_id); int ipa3_write_qmapid_wdi3_gsi_pipe(u32 clnt_hdl, u8 qmap_id); int ipa3_tag_process(struct ipa3_desc *desc, int num_descs, unsigned long timeout); Loading