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

Commit 76f1d7b3 authored by Ashok Vuyyuru's avatar Ashok Vuyyuru
Browse files

msm: ipa4: Fix to mask the global interrupt INT1



Receiving the global interrupt INT1 without sending any
generic commands. So disabling interrupt by default.
Enabling the interrupt only before sending the generic command.

Change-Id: I55011933d92d29e19cc478ed1dbea9d08b95d239
Signed-off-by: default avatarAshok Vuyyuru <avuyyuru@codeaurora.org>
parent f8b00cea
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -1258,6 +1258,11 @@ int gsi_register_device(struct gsi_per_props *props, unsigned long *dev_hdl)
	__gsi_config_gen_irq(props->ee, ~0,
		~GSI_EE_n_CNTXT_GSI_IRQ_CLR_GSI_BREAK_POINT_BMSK);

	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_5
		|| gsi_ctx->per.ver == GSI_VER_2_7)
		__gsi_config_glob_irq(props->ee,
				GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);

	gsi_writel(props->intr, gsi_ctx->base +
			GSI_EE_n_CNTXT_INTSET_OFFS(gsi_ctx->per.ee));
	/* set GSI_TOP_EE_n_CNTXT_MSI_BASE_LSB/MSB to 0 */
@@ -4147,6 +4152,10 @@ int gsi_halt_channel_ee(unsigned int chan_idx, unsigned int ee, int *code)
	}

	mutex_lock(&gsi_ctx->mlock);
	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
		|| gsi_ctx->per.ver == GSI_VER_2_5)
		__gsi_config_glob_irq(gsi_ctx->per.ee,
			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, ~0);
	reinit_completion(&gsi_ctx->gen_ee_cmd_compl);

	/* invalidate the response */
@@ -4192,6 +4201,10 @@ int gsi_halt_channel_ee(unsigned int chan_idx, unsigned int ee, int *code)
	res = GSI_STATUS_SUCCESS;
	*code = gsi_ctx->scratch.word0.s.generic_ee_cmd_return_code;
free_lock:
	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
		|| gsi_ctx->per.ver == GSI_VER_2_5)
		__gsi_config_glob_irq(gsi_ctx->per.ee,
			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
	mutex_unlock(&gsi_ctx->mlock);

	return res;
@@ -4214,6 +4227,10 @@ int gsi_alloc_channel_ee(unsigned int chan_idx, unsigned int ee, int *code)
		return gsi_alloc_ap_channel(chan_idx);

	mutex_lock(&gsi_ctx->mlock);
	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
		|| gsi_ctx->per.ver == GSI_VER_2_5)
		__gsi_config_glob_irq(gsi_ctx->per.ee,
			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, ~0);
	reinit_completion(&gsi_ctx->gen_ee_cmd_compl);

	/* invalidate the response */
@@ -4261,6 +4278,10 @@ int gsi_alloc_channel_ee(unsigned int chan_idx, unsigned int ee, int *code)
	res = GSI_STATUS_SUCCESS;
	*code = gsi_ctx->scratch.word0.s.generic_ee_cmd_return_code;
free_lock:
	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
		|| gsi_ctx->per.ver == GSI_VER_2_5)
		__gsi_config_glob_irq(gsi_ctx->per.ee,
			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
	mutex_unlock(&gsi_ctx->mlock);

	return res;
@@ -4286,6 +4307,10 @@ int gsi_enable_flow_control_ee(unsigned int chan_idx, unsigned int ee,
	}

	mutex_lock(&gsi_ctx->mlock);
	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
		|| gsi_ctx->per.ver == GSI_VER_2_5)
		__gsi_config_glob_irq(gsi_ctx->per.ee,
			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, ~0);
	reinit_completion(&gsi_ctx->gen_ee_cmd_compl);

	/* invalidate the response */
@@ -4352,6 +4377,10 @@ int gsi_enable_flow_control_ee(unsigned int chan_idx, unsigned int ee,
	}
	*code = gsi_ctx->scratch.word0.s.generic_ee_cmd_return_code;
free_lock:
	if (gsi_ctx->per.ver == GSI_VER_2_2 || gsi_ctx->per.ver == GSI_VER_2_7
		|| gsi_ctx->per.ver == GSI_VER_2_5)
		__gsi_config_glob_irq(gsi_ctx->per.ee,
			GSI_EE_n_CNTXT_GLOB_IRQ_EN_GP_INT1_BMSK, 0);
	mutex_unlock(&gsi_ctx->mlock);

	return res;