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

Commit 939b68da authored by Rama Krishna Phani A's avatar Rama Krishna Phani A Committed by Gerrit - the friendly Code Review server
Browse files

msm: mhi_dev: Update logic to support mhi interrupt



Update logic to support mhi interrupt. Enable channel
doorbell interrupts during restoring MHI mmio registers.

Change-Id: Ie9bda37ce4ce711dd2569e86dc510366280cf622
Signed-off-by: default avatarRama Krishna Phani A <rphani@codeaurora.org>
parent 39ef0c6b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ Optional property:
		between host and device.
  - qcom,mhi-config-iatu: If property is present map the control and data region
		between host and device using iatu.
  - qcom,mhi-interrupt: If property is present register for mhi interrupt.
  - qcom,mhi-local-pa-base: The physical base address on the device used by the
		MHI device driver to map the control and data region with the
		MHI driver on the host. This property is required if iatu
+7 −4
Original line number Diff line number Diff line
@@ -1139,7 +1139,7 @@ static void mhi_dev_scheduler(struct work_struct *work)

	mutex_unlock(&mhi_ctx->mhi_lock);

	if (mhi->config_iatu)
	if (mhi->config_iatu || mhi->mhi_int)
		enable_irq(mhi->mhi_irq);
	else
		ep_pcie_mask_irq_event(mhi->phandle,
@@ -1940,7 +1940,7 @@ static void mhi_dev_enable(struct work_struct *work)
		return;
	}

	if (mhi_ctx->config_iatu)
	if (mhi_ctx->config_iatu || mhi_ctx->mhi_int)
		enable_irq(mhi_ctx->mhi_irq);

	mhi_update_state_info(MHI_STATE_CONNECTED);
@@ -2072,7 +2072,10 @@ static int get_device_tree_data(struct platform_device *pdev)
		}
	}

	if (mhi->config_iatu) {
	mhi_ctx->mhi_int = of_property_read_bool((&pdev->dev)->of_node,
					"qcom,mhi-interrupt");

	if (mhi->config_iatu || mhi_ctx->mhi_int) {
		mhi->mhi_irq = platform_get_irq_byname(pdev, "mhi-device-inta");
		if (mhi->mhi_irq < 0) {
			pr_err("Invalid MHI device interrupt\n");
@@ -2249,7 +2252,7 @@ static int mhi_dev_resume_mmio_mhi_init(struct mhi_dev *mhi_ctx)
	/* All set, notify the host */
	mhi_dev_sm_set_ready();

	if (mhi_ctx->config_iatu) {
	if (mhi_ctx->config_iatu || mhi_ctx->mhi_int) {
		rc = devm_request_irq(&pdev->dev, mhi_ctx->mhi_irq, mhi_dev_isr,
			IRQF_TRIGGER_HIGH, "mhi_isr", mhi_ctx);
		if (rc) {
+3 −0
Original line number Diff line number Diff line
@@ -557,6 +557,9 @@ struct mhi_dev {

	/* MHI state info */
	enum mhi_ctrl_info		ctrl_info;

	/*Register for interrupt*/
	bool				mhi_int;
};

enum mhi_msg_level {
+3 −0
Original line number Diff line number Diff line
@@ -863,6 +863,9 @@ int mhi_dev_restore_mmio(struct mhi_dev *dev)
	mhi_dev_mmio_clear_interrupts(dev);
	mhi_dev_mmio_enable_ctrl_interrupt(dev);

	/*Enable chdb interrupt*/
	mhi_dev_mmio_enable_chdb_interrupts(dev);

	/* Mask and enable control interrupt */
	mb();