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

Commit 5b981860 authored by Ashok Vuyyuru's avatar Ashok Vuyyuru
Browse files

msm: ipa3: Changes to call uC setup event ring in connect WDI pipes



In some scenario before enabling the WDI pipe setup QUOTA monitor
command sending to uC which leading to NULL pointer access.
So adding changes to setup uC event from connect wdi API and sending
set QUOTA monitor and BW monitor commands to if uC setup event
ring completed.

Change-Id: I82e27d58b0ba153e5139cf9b4d849edafd979bc4
Signed-off-by: default avatarAshok Vuyyuru <avuyyuru@codeaurora.org>
parent 9a4b400a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1579,6 +1579,11 @@ int ipa3_uc_quota_monitor(uint64_t quota)
	struct IpaQuotaMonitoring_t *quota_info;

	IPADBG("Enter\n");
	if (!ipa3_ctx->uc_ctx.uc_event_ring_valid) {
		IPADBG("uC event ring not initialized\n");
		return res;
	}

	cmd.size = sizeof(*quota_info);
	cmd.base = dma_alloc_coherent(ipa3_ctx->uc_pdev, cmd.size,
		&cmd.phys_base, GFP_KERNEL);
@@ -1655,6 +1660,11 @@ int ipa3_uc_bw_monitor(struct ipa_wdi_bw_info *info)
	if (!info)
		return -EINVAL;

	if (!ipa3_ctx->uc_ctx.uc_event_ring_valid) {
		IPADBG("uC event ring not initialized\n");
		return res;
	}

	/* check max entry */
	if (info->num > BW_MONITORING_MAX_THRESHOLD) {
		IPAERR("%d, support max %d bw monitor\n", info->num,
+16 −16
Original line number Diff line number Diff line
@@ -569,6 +569,22 @@ int ipa3_conn_wdi3_pipes(struct ipa_wdi_conn_in_params *in,
		IPADBG("wdi_notify is null\n");
#endif

	/* start uC event ring */
	if ((ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5 &&
		ipa3_ctx->ipa_hw_type != IPA_HW_v4_11) ||
		ipa3_ctx->is_bw_monitor_supported) {
		if (ipa3_ctx->uc_ctx.uc_loaded &&
			!ipa3_ctx->uc_ctx.uc_event_ring_valid) {
			if (ipa3_uc_setup_event_ring())	{
				IPAERR("failed to set uc_event ring\n");
				return -EFAULT;
			}
		} else
			IPAERR("uc-loaded %d, ring-valid %d\n",
			ipa3_ctx->uc_ctx.uc_loaded,
			ipa3_ctx->uc_ctx.uc_event_ring_valid);
	}

	/* setup rx ep cfg */
	ep_rx->valid = 1;
	ep_rx->client = rx_client;
@@ -848,22 +864,6 @@ int ipa3_enable_wdi3_pipes(int ipa_ep_idx_tx, int ipa_ep_idx_rx)

	IPA_ACTIVE_CLIENTS_INC_EP(ipa3_get_client_mapping(ipa_ep_idx_tx));

	/* start uC event ring */
	if ((ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5 &&
		ipa3_ctx->ipa_hw_type != IPA_HW_v4_11) ||
		ipa3_ctx->is_bw_monitor_supported) {
		if (ipa3_ctx->uc_ctx.uc_loaded &&
			!ipa3_ctx->uc_ctx.uc_event_ring_valid) {
			if (ipa3_uc_setup_event_ring())	{
				IPAERR("failed to set uc_event ring\n");
				return -EFAULT;
			}
		} else
			IPAERR("uc-loaded %d, ring-valid %d\n",
			ipa3_ctx->uc_ctx.uc_loaded,
			ipa3_ctx->uc_ctx.uc_event_ring_valid);
	}

	/* enable data path */
	result = ipa3_enable_data_path(ipa_ep_idx_rx);
	if (result) {