Loading Documentation/devicetree/bindings/platform/msm/rmnet_ipa.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ Required properties: Optional: - qcom,rmnet-ipa-ssr: determine if modem SSR is supported - qcom,ipa-loaduC: indicate that ipa uC should be loaded Example: qcom,rmnet-ipa { Loading arch/arm/boot/dts/qcom/msm8994.dtsi +1 −0 Original line number Diff line number Diff line Loading @@ -631,6 +631,7 @@ qcom,rmnet-ipa { compatible = "qcom,rmnet-ipa"; qcom,rmnet-ipa-ssr; qcom,ipa-loaduC; }; qcom,ipc-spinlock@fd484000 { Loading drivers/platform/msm/ipa/ipa_qmi_service.c +5 −3 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ static void *curr_conn; static bool qmi_modem_init_fin, qmi_indication_fin; static struct work_struct ipa_qmi_service_init_work; static bool is_load_uc; static uint32_t ipa_wan_platform; /* QMI A5 service */ Loading Loading @@ -336,7 +337,7 @@ static int qmi_init_modem_send_sync_msg(void) memset(&req, 0, sizeof(struct ipa_init_modem_driver_req_msg_v01)); memset(&resp, 0, sizeof(struct ipa_init_modem_driver_resp_msg_v01)); req.platform_type_valid = true; req.platform_type = QMI_IPA_PLATFORM_TYPE_LE_V01; req.platform_type = ipa_wan_platform; req.hdr_tbl_info_valid = true; req.hdr_tbl_info.modem_offset_start = IPA_v2_RAM_MODEM_HDR_OFST + 256; req.hdr_tbl_info.modem_offset_end = IPA_v2_RAM_MODEM_HDR_OFST + 256 Loading Loading @@ -454,7 +455,7 @@ int qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01 *req) /* check if the filter rules from IPACM is valid */ if (req->filter_index_list_len == 0) { IPAERR(" delete UL filter rule for pipe %d\n", IPAWANERR(" delete UL filter rule for pipe %d\n", req->source_pipe_index); return -EINVAL; } Loading Loading @@ -651,8 +652,9 @@ static void ipa_qmi_service_init_worker(struct work_struct *work) return; } int ipa_qmi_service_init(bool load_uc) int ipa_qmi_service_init(bool load_uc, uint32_t wan_platform_type) { ipa_wan_platform = wan_platform_type; is_load_uc = load_uc; if (!ipa_svc_handle) { INIT_WORK(&ipa_qmi_service_init_work, Loading drivers/platform/msm/ipa/ipa_qmi_service.h +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ struct rmnet_mux_val { bool mux_hdr_set; }; int ipa_qmi_service_init(bool load_uc); int ipa_qmi_service_init(bool load_uc, uint32_t wan_platform_type); void ipa_qmi_service_exit(void); /* sending filter-install-request to modem*/ Loading drivers/platform/msm/ipa/rmnet_ipa.c +24 −9 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ enum wwan_device_status { struct ipa_rmnet_plat_drv_res { bool ipa_rmnet_ssr; bool ipa_loaduC; }; /** Loading Loading @@ -768,6 +769,8 @@ int wwan_update_mux_channel_prop(void) i); return -ENODEV; } IPAWANERR("dev(%s) has registered to IPA\n", mux_channel[i].vchannel_name); mux_channel[i].ul_flt_reg = true; } return ret; Loading Loading @@ -1194,7 +1197,7 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) mux_channel[rmnet_index].mux_channel_set = true; mux_channel[rmnet_index].ul_flt_reg = true; } else { IPAWANERR("dev(%s) not register to IPA\n", IPAWANDBG("dev(%s) haven't registered to IPA\n", extend_ioctl_data.u. rmnet_mux_val.vchannel_name); mux_channel[rmnet_index].mux_channel_set = true; Loading Loading @@ -1379,7 +1382,7 @@ static void q6_prod_rm_request_resource(struct work_struct *work) ret = ipa_rm_request_resource(IPA_RM_RESOURCE_Q6_PROD); if (ret < 0 && ret != -EINPROGRESS) { IPAERR("%s: ipa_rm_request_resource failed %d\n", __func__, IPAWANERR("%s: ipa_rm_request_resource failed %d\n", __func__, ret); return; } Loading @@ -1397,7 +1400,7 @@ static void q6_prod_rm_release_resource(struct work_struct *work) int ret = 0; ret = ipa_rm_release_resource(IPA_RM_RESOURCE_Q6_PROD); if (ret < 0 && ret != -EINPROGRESS) { IPAERR("%s: ipa_rm_release_resource failed %d\n", __func__, IPAWANERR("%s: ipa_rm_release_resource failed %d\n", __func__, ret); return; } Loading @@ -1418,10 +1421,10 @@ static void q6_rm_notify_cb(void *user_data, { switch (event) { case IPA_RM_RESOURCE_GRANTED: IPADBG("%s: Q6_PROD GRANTED CB\n", __func__); IPAWANDBG("%s: Q6_PROD GRANTED CB\n", __func__); break; case IPA_RM_RESOURCE_RELEASED: IPADBG("%s: Q6_PROD RELEASED CB\n", __func__); IPAWANDBG("%s: Q6_PROD RELEASED CB\n", __func__); break; default: return; Loading Loading @@ -1579,8 +1582,13 @@ static int get_ipa_rmnet_dts_configuration(struct platform_device *pdev, ipa_rmnet_drv_res->ipa_rmnet_ssr = of_property_read_bool(pdev->dev.of_node, "qcom,rmnet-ipa-ssr"); IPADBG(": IPA SSR support = %s", IPAWANERR(": IPA SSR support = %s", ipa_rmnet_drv_res->ipa_rmnet_ssr ? "True" : "False"); ipa_rmnet_drv_res->ipa_loaduC = of_property_read_bool(pdev->dev.of_node, "qcom,ipa-loaduC"); IPAWANERR(": IPA ipa-loaduC = %s", ipa_rmnet_drv_res->ipa_loaduC ? "True" : "False"); return 0; } Loading Loading @@ -1622,8 +1630,15 @@ static int ipa_wwan_probe(struct platform_device *pdev) } /* start A7 QMI service/client */ ipa_qmi_service_init(atomic_read(&is_ssr) ? false : true); if (ipa_rmnet_res.ipa_loaduC) { /* Android platform loads uC */ ipa_qmi_service_init(atomic_read(&is_ssr) ? false : true, QMI_IPA_PLATFORM_TYPE_MSM_ANDROID_V01); } else { /* LE platform not loads uC */ ipa_qmi_service_init(atomic_read(&is_ssr) ? false : true, QMI_IPA_PLATFORM_TYPE_LE_V01); } /* construct default WAN RT tbl for IPACM */ ret = ipa_setup_a7_qmap_hdr(); if (ret) Loading Loading @@ -1673,7 +1688,7 @@ static int ipa_wwan_probe(struct platform_device *pdev) /* IPA_RM configuration starts */ ret = q6_initialize_rm(); if (ret) { IPAERR("%s: q6_initialize_rm failed, ret: %d\n", IPAWANERR("%s: q6_initialize_rm failed, ret: %d\n", __func__, ret); goto q6_init_err; } Loading Loading
Documentation/devicetree/bindings/platform/msm/rmnet_ipa.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ Required properties: Optional: - qcom,rmnet-ipa-ssr: determine if modem SSR is supported - qcom,ipa-loaduC: indicate that ipa uC should be loaded Example: qcom,rmnet-ipa { Loading
arch/arm/boot/dts/qcom/msm8994.dtsi +1 −0 Original line number Diff line number Diff line Loading @@ -631,6 +631,7 @@ qcom,rmnet-ipa { compatible = "qcom,rmnet-ipa"; qcom,rmnet-ipa-ssr; qcom,ipa-loaduC; }; qcom,ipc-spinlock@fd484000 { Loading
drivers/platform/msm/ipa/ipa_qmi_service.c +5 −3 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ static void *curr_conn; static bool qmi_modem_init_fin, qmi_indication_fin; static struct work_struct ipa_qmi_service_init_work; static bool is_load_uc; static uint32_t ipa_wan_platform; /* QMI A5 service */ Loading Loading @@ -336,7 +337,7 @@ static int qmi_init_modem_send_sync_msg(void) memset(&req, 0, sizeof(struct ipa_init_modem_driver_req_msg_v01)); memset(&resp, 0, sizeof(struct ipa_init_modem_driver_resp_msg_v01)); req.platform_type_valid = true; req.platform_type = QMI_IPA_PLATFORM_TYPE_LE_V01; req.platform_type = ipa_wan_platform; req.hdr_tbl_info_valid = true; req.hdr_tbl_info.modem_offset_start = IPA_v2_RAM_MODEM_HDR_OFST + 256; req.hdr_tbl_info.modem_offset_end = IPA_v2_RAM_MODEM_HDR_OFST + 256 Loading Loading @@ -454,7 +455,7 @@ int qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01 *req) /* check if the filter rules from IPACM is valid */ if (req->filter_index_list_len == 0) { IPAERR(" delete UL filter rule for pipe %d\n", IPAWANERR(" delete UL filter rule for pipe %d\n", req->source_pipe_index); return -EINVAL; } Loading Loading @@ -651,8 +652,9 @@ static void ipa_qmi_service_init_worker(struct work_struct *work) return; } int ipa_qmi_service_init(bool load_uc) int ipa_qmi_service_init(bool load_uc, uint32_t wan_platform_type) { ipa_wan_platform = wan_platform_type; is_load_uc = load_uc; if (!ipa_svc_handle) { INIT_WORK(&ipa_qmi_service_init_work, Loading
drivers/platform/msm/ipa/ipa_qmi_service.h +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ struct rmnet_mux_val { bool mux_hdr_set; }; int ipa_qmi_service_init(bool load_uc); int ipa_qmi_service_init(bool load_uc, uint32_t wan_platform_type); void ipa_qmi_service_exit(void); /* sending filter-install-request to modem*/ Loading
drivers/platform/msm/ipa/rmnet_ipa.c +24 −9 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ enum wwan_device_status { struct ipa_rmnet_plat_drv_res { bool ipa_rmnet_ssr; bool ipa_loaduC; }; /** Loading Loading @@ -768,6 +769,8 @@ int wwan_update_mux_channel_prop(void) i); return -ENODEV; } IPAWANERR("dev(%s) has registered to IPA\n", mux_channel[i].vchannel_name); mux_channel[i].ul_flt_reg = true; } return ret; Loading Loading @@ -1194,7 +1197,7 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) mux_channel[rmnet_index].mux_channel_set = true; mux_channel[rmnet_index].ul_flt_reg = true; } else { IPAWANERR("dev(%s) not register to IPA\n", IPAWANDBG("dev(%s) haven't registered to IPA\n", extend_ioctl_data.u. rmnet_mux_val.vchannel_name); mux_channel[rmnet_index].mux_channel_set = true; Loading Loading @@ -1379,7 +1382,7 @@ static void q6_prod_rm_request_resource(struct work_struct *work) ret = ipa_rm_request_resource(IPA_RM_RESOURCE_Q6_PROD); if (ret < 0 && ret != -EINPROGRESS) { IPAERR("%s: ipa_rm_request_resource failed %d\n", __func__, IPAWANERR("%s: ipa_rm_request_resource failed %d\n", __func__, ret); return; } Loading @@ -1397,7 +1400,7 @@ static void q6_prod_rm_release_resource(struct work_struct *work) int ret = 0; ret = ipa_rm_release_resource(IPA_RM_RESOURCE_Q6_PROD); if (ret < 0 && ret != -EINPROGRESS) { IPAERR("%s: ipa_rm_release_resource failed %d\n", __func__, IPAWANERR("%s: ipa_rm_release_resource failed %d\n", __func__, ret); return; } Loading @@ -1418,10 +1421,10 @@ static void q6_rm_notify_cb(void *user_data, { switch (event) { case IPA_RM_RESOURCE_GRANTED: IPADBG("%s: Q6_PROD GRANTED CB\n", __func__); IPAWANDBG("%s: Q6_PROD GRANTED CB\n", __func__); break; case IPA_RM_RESOURCE_RELEASED: IPADBG("%s: Q6_PROD RELEASED CB\n", __func__); IPAWANDBG("%s: Q6_PROD RELEASED CB\n", __func__); break; default: return; Loading Loading @@ -1579,8 +1582,13 @@ static int get_ipa_rmnet_dts_configuration(struct platform_device *pdev, ipa_rmnet_drv_res->ipa_rmnet_ssr = of_property_read_bool(pdev->dev.of_node, "qcom,rmnet-ipa-ssr"); IPADBG(": IPA SSR support = %s", IPAWANERR(": IPA SSR support = %s", ipa_rmnet_drv_res->ipa_rmnet_ssr ? "True" : "False"); ipa_rmnet_drv_res->ipa_loaduC = of_property_read_bool(pdev->dev.of_node, "qcom,ipa-loaduC"); IPAWANERR(": IPA ipa-loaduC = %s", ipa_rmnet_drv_res->ipa_loaduC ? "True" : "False"); return 0; } Loading Loading @@ -1622,8 +1630,15 @@ static int ipa_wwan_probe(struct platform_device *pdev) } /* start A7 QMI service/client */ ipa_qmi_service_init(atomic_read(&is_ssr) ? false : true); if (ipa_rmnet_res.ipa_loaduC) { /* Android platform loads uC */ ipa_qmi_service_init(atomic_read(&is_ssr) ? false : true, QMI_IPA_PLATFORM_TYPE_MSM_ANDROID_V01); } else { /* LE platform not loads uC */ ipa_qmi_service_init(atomic_read(&is_ssr) ? false : true, QMI_IPA_PLATFORM_TYPE_LE_V01); } /* construct default WAN RT tbl for IPACM */ ret = ipa_setup_a7_qmap_hdr(); if (ret) Loading Loading @@ -1673,7 +1688,7 @@ static int ipa_wwan_probe(struct platform_device *pdev) /* IPA_RM configuration starts */ ret = q6_initialize_rm(); if (ret) { IPAERR("%s: q6_initialize_rm failed, ret: %d\n", IPAWANERR("%s: q6_initialize_rm failed, ret: %d\n", __func__, ret); goto q6_init_err; } Loading