Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit daa6a3c8 authored by Bojun Pan's avatar Bojun Pan Committed by Gerrit - the friendly Code Review server
Browse files

msm: IPA: differentiate WDI2 and WDI3 over GSI



WDI2 and WDI3 pipe configuration will be different, differentiation
is needed to support both cases.

Change-Id: I6b6b51faf0b3b098522f18e84f3f1d8706b65988
Signed-off-by: default avatarBojun Pan <bojunp@codeaurora.org>
parent b1d184d2
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ 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)
	if (ipa3_ctx->ipa_wdi3_over_gsi)
		out->is_over_gsi = true;
	else
		out->is_over_gsi = false;
@@ -248,7 +248,7 @@ 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)
	if (!ipa3_ctx->ipa_wdi3_over_gsi)
		tx_prop[0].dst_pipe = IPA_CLIENT_WLAN1_CONS;
	else
		tx_prop[0].dst_pipe = IPA_CLIENT_WLAN2_CONS;
@@ -258,7 +258,7 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in)
		sizeof(tx_prop[0].hdr_name));

	tx_prop[1].ip = IPA_IP_v6;
	if (!ipa3_ctx->ipa_wdi_over_gsi)
	if (!ipa3_ctx->ipa_wdi3_over_gsi)
		tx_prop[1].dst_pipe = IPA_CLIENT_WLAN1_CONS;
	else
		tx_prop[1].dst_pipe = IPA_CLIENT_WLAN2_CONS;
@@ -272,7 +272,7 @@ int ipa_wdi_reg_intf(struct ipa_wdi_reg_intf_in_params *in)
	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)
	if (!ipa3_ctx->ipa_wdi3_over_gsi)
		rx_prop[0].src_pipe = IPA_CLIENT_WLAN1_PROD;
	else
		rx_prop[0].src_pipe = IPA_CLIENT_WLAN2_PROD;
@@ -284,7 +284,7 @@ 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)
	if (!ipa3_ctx->ipa_wdi3_over_gsi)
		rx_prop[1].src_pipe = IPA_CLIENT_WLAN1_PROD;
	else
		rx_prop[1].src_pipe = IPA_CLIENT_WLAN2_PROD;
@@ -665,7 +665,7 @@ int ipa_wdi_disconn_pipes(void)
		}
	}

	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_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 {
@@ -726,7 +726,7 @@ int ipa_wdi_enable_pipes(void)
		return -EPERM;
	}

	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_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 {
@@ -792,7 +792,7 @@ int ipa_wdi_disable_pipes(void)
		return -EPERM;
	}

	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_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 {
+15 −6
Original line number Diff line number Diff line
@@ -5218,7 +5218,8 @@ 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_wdi_over_gsi = resource_p->ipa_wdi_over_gsi;
	ipa3_ctx->ipa_wdi2_over_gsi = resource_p->ipa_wdi2_over_gsi;
	ipa3_ctx->ipa_wdi3_over_gsi = resource_p->ipa_wdi3_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;
@@ -5803,7 +5804,8 @@ 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_wdi_over_gsi = false;
	ipa_drv_res->ipa_wdi2_over_gsi = false;
	ipa_drv_res->ipa_wdi3_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;
@@ -5895,11 +5897,18 @@ 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_wdi_over_gsi =
	ipa_drv_res->ipa_wdi2_over_gsi =
			of_property_read_bool(pdev->dev.of_node,
			"qcom,ipa-wdi-over-gsi");
	IPADBG(": WDI over gsi= %s\n",
			ipa_drv_res->ipa_wdi_over_gsi
			"qcom,ipa-wdi2_over_gsi");
	IPADBG(": WDI-2.0 over gsi= %s\n",
			ipa_drv_res->ipa_wdi2_over_gsi
			? "True" : "False");

	ipa_drv_res->ipa_wdi3_over_gsi =
			of_property_read_bool(pdev->dev.of_node,
			"qcom,ipa-wdi3-over-gsi");
	IPADBG(": WDI-3.0 over gsi= %s\n",
			ipa_drv_res->ipa_wdi3_over_gsi
			? "True" : "False");

	ipa_drv_res->ipa_wdi2 =
+4 −2
Original line number Diff line number Diff line
@@ -1599,7 +1599,8 @@ struct ipa3_context {
	bool use_ipa_teth_bridge;
	bool modem_cfg_emb_pipe_flt;
	bool ipa_wdi2;
	bool ipa_wdi_over_gsi;
	bool ipa_wdi2_over_gsi;
	bool ipa_wdi3_over_gsi;
	bool ipa_fltrt_not_hashable;
	bool use_64_bit_dma_mask;
	/* featurize if memory footprint becomes a concern */
@@ -1688,7 +1689,8 @@ struct ipa3_plat_drv_res {
	u32 ee;
	bool modem_cfg_emb_pipe_flt;
	bool ipa_wdi2;
	bool ipa_wdi_over_gsi;
	bool ipa_wdi2_over_gsi;
	bool ipa_wdi3_over_gsi;
	bool ipa_fltrt_not_hashable;
	bool use_64_bit_dma_mask;
	bool use_bw_vote;
+9 −9
Original line number Diff line number Diff line
@@ -1361,7 +1361,7 @@ int ipa3_connect_wdi_pipe(struct ipa_wdi_in_params *in,
		}
	}

	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_connect_gsi_wdi_pipe(in, out);

	result = ipa3_uc_state_check();
@@ -1898,7 +1898,7 @@ int ipa3_disconnect_wdi_pipe(u32 clnt_hdl)
		return -EINVAL;
	}

	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_disconnect_gsi_wdi_pipe(clnt_hdl);

	result = ipa3_uc_state_check();
@@ -2016,7 +2016,7 @@ int ipa3_disable_gsi_wdi_pipe(u32 clnt_hdl)
		memset(&ep_cfg_ctrl, 0, sizeof(struct ipa_ep_cfg_ctrl));
		ipa3_cfg_ep_ctrl(clnt_hdl, &ep_cfg_ctrl);

		cons_hdl = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_CONS);
		cons_hdl = ipa3_get_ep_mapping(IPA_CLIENT_WLAN1_CONS);
		if (cons_hdl == IPA_EP_NOT_ALLOCATED) {
			IPAERR("Client %u is not mapped\n",
				IPA_CLIENT_WLAN1_CONS);
@@ -2070,7 +2070,7 @@ int ipa3_enable_wdi_pipe(u32 clnt_hdl)
		return -EINVAL;
	}

	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_enable_gsi_wdi_pipe(clnt_hdl);

	result = ipa3_uc_state_check();
@@ -2135,7 +2135,7 @@ int ipa3_disable_wdi_pipe(u32 clnt_hdl)
		return -EINVAL;
	}

	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_disable_gsi_wdi_pipe(clnt_hdl);

	result = ipa3_uc_state_check();
@@ -2172,7 +2172,7 @@ int ipa3_disable_wdi_pipe(u32 clnt_hdl)
		memset(&ep_cfg_ctrl, 0, sizeof(struct ipa_ep_cfg_ctrl));
		ipa3_cfg_ep_ctrl(clnt_hdl, &ep_cfg_ctrl);

		cons_hdl = ipa3_get_ep_mapping(IPA_CLIENT_WLAN2_CONS);
		cons_hdl = ipa3_get_ep_mapping(IPA_CLIENT_WLAN1_CONS);
		if (cons_hdl == IPA_EP_NOT_ALLOCATED) {
			IPAERR("Client %u is not mapped\n",
				IPA_CLIENT_WLAN1_CONS);
@@ -2288,7 +2288,7 @@ int ipa3_resume_wdi_pipe(u32 clnt_hdl)
		return -EINVAL;
	}

	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_resume_gsi_wdi_pipe(clnt_hdl);

	result = ipa3_uc_state_check();
@@ -2442,7 +2442,7 @@ int ipa3_suspend_wdi_pipe(u32 clnt_hdl)
		return -EINVAL;
	}

	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_suspend_gsi_wdi_pipe(clnt_hdl);

	result = ipa3_uc_state_check();
@@ -2600,7 +2600,7 @@ int ipa3_write_qmapid_wdi_pipe(u32 clnt_hdl, u8 qmap_id)
		IPAERR_RL("bad parm, %d\n", clnt_hdl);
		return -EINVAL;
	}
	if (ipa3_ctx->ipa_wdi_over_gsi)
	if (ipa3_ctx->ipa_wdi2_over_gsi)
		return ipa3_write_qmapid_gsi_wdi_pipe(clnt_hdl, qmap_id);

	result = ipa3_uc_state_check();
+6 −6
Original line number Diff line number Diff line
@@ -290,7 +290,7 @@ int ipa3_conn_wdi3_pipes(struct ipa_wdi_conn_in_params *in,
	u32 evt_ring_db_addr_low, evt_ring_db_addr_high;

	/* wdi3 only support over gsi */
	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_over_gsi) {
		IPAERR("wdi3 over uc offload not supported");
		WARN_ON(1);
		return -EFAULT;
@@ -368,8 +368,8 @@ int ipa3_conn_wdi3_pipes(struct ipa_wdi_conn_in_params *in,
		goto fail;
	}

	IPADBG("ipa3_ctx->ipa_wdi_over_gsi %d\n",
		   ipa3_ctx->ipa_wdi_over_gsi);
	IPADBG("ipa3_ctx->ipa_wdi3_over_gsi %d\n",
		   ipa3_ctx->ipa_wdi3_over_gsi);
	/* setup RX gsi channel */
	if (ipa3_setup_wdi3_gsi_channel(in->is_smmu_enabled,
		&in->u_rx.rx, &in->u_rx.rx_smmu, IPA_WDI3_RX_DIR,
@@ -478,7 +478,7 @@ int ipa3_disconn_wdi3_pipes(int ipa_ep_idx_tx, int ipa_ep_idx_rx)
	int result = 0;

	/* wdi3 only support over gsi */
	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_over_gsi) {
		IPAERR("wdi3 over uc offload not supported");
		WARN_ON(1);
		return -EFAULT;
@@ -536,7 +536,7 @@ int ipa3_enable_wdi3_pipes(int ipa_ep_idx_tx, int ipa_ep_idx_rx)
	int result = 0;

	/* wdi3 only support over gsi */
	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_over_gsi) {
		IPAERR("wdi3 over uc offload not supported");
		WARN_ON(1);
		return -EFAULT;
@@ -594,7 +594,7 @@ int ipa3_disable_wdi3_pipes(int ipa_ep_idx_tx, int ipa_ep_idx_rx)
	struct ipahal_ep_cfg_ctrl_scnd ep_ctrl_scnd = { 0 };

	/* wdi3 only support over gsi */
	if (!ipa3_ctx->ipa_wdi_over_gsi) {
	if (!ipa3_ctx->ipa_wdi3_over_gsi) {
		IPAERR("wdi3 over uc offload not supported");
		WARN_ON(1);
		return -EFAULT;