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

Commit 9184244f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge changes Ie4c0b111,I2c167584,I29ab4011,I9314aed8 into msm-next

* changes:
  defconfig: sdm855: Enable MSM QMP
  mailbox: msm_qmp: Add interrupt register clear
  maibox: msm_qmp: Add timeout error handling
  mailbox: msm_qmp: Fix qmp shutdown logic
parents 837b44b1 98618248
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -346,6 +346,7 @@ CONFIG_MSM_CLK_RPMH=y
CONFIG_HWSPINLOCK=y
CONFIG_HWSPINLOCK_QCOM=y
CONFIG_QCOM_APCS_IPC=y
CONFIG_MSM_QMP=y
CONFIG_IOMMU_IO_PGTABLE_FAST=y
CONFIG_ARM_SMMU=y
CONFIG_IOMMU_DEBUG=y
+1 −0
Original line number Diff line number Diff line
@@ -358,6 +358,7 @@ CONFIG_MSM_CLK_RPMH=y
CONFIG_HWSPINLOCK=y
CONFIG_HWSPINLOCK_QCOM=y
CONFIG_QCOM_APCS_IPC=y
CONFIG_MSM_QMP=y
CONFIG_IOMMU_IO_PGTABLE_FAST=y
CONFIG_ARM_SMMU=y
CONFIG_IOMMU_DEBUG=y
+20 −5
Original line number Diff line number Diff line
@@ -203,6 +203,7 @@ static void send_irq(struct qmp_device *mdev)
	 */
	wmb();
	writel_relaxed(mdev->irq_mask, mdev->tx_irq_reg);
	writel_relaxed(0x0, mdev->tx_irq_reg);
	mdev->tx_irq_count++;
}

@@ -310,6 +311,7 @@ static void set_mcore_ch(struct qmp_mbox *mbox, u32 state)
static int qmp_startup(struct mbox_chan *chan)
{
	struct qmp_mbox *mbox = chan->con_priv;
	unsigned long ret;

	if (!mbox)
		return -EINVAL;
@@ -325,8 +327,11 @@ static int qmp_startup(struct mbox_chan *chan)
	mutex_unlock(&mbox->state_lock);

	send_irq(mbox->mdev);
	wait_for_completion_interruptible_timeout(&mbox->ch_complete,
	ret = wait_for_completion_timeout(&mbox->ch_complete,
					msecs_to_jiffies(QMP_TOUT_MS));
	if (!ret)
		return -ETIME;

	return 0;
}

@@ -391,12 +396,21 @@ static void qmp_shutdown(struct mbox_chan *chan)
	struct qmp_mbox *mbox = chan->con_priv;

	mutex_lock(&mbox->state_lock);
	mbox->num_shutdown++;
	if (mbox->num_shutdown < mbox->num_assigned) {
		mutex_unlock(&mbox->state_lock);
		return;
	if (mbox->local_state <= LINK_CONNECTED) {
		mbox->num_assigned--;
		goto out;
	}

	if (mbox->local_state == LOCAL_CONNECTING) {
		mbox->num_assigned--;
		mbox->local_state = LINK_CONNECTED;
		goto out;
	}

	mbox->num_shutdown++;
	if (mbox->num_shutdown < mbox->num_assigned)
		goto out;

	if (mbox->local_state != LINK_DISCONNECTED) {
		mbox->local_state = LOCAL_DISCONNECTING;
		set_mcore_ch(mbox, QMP_MBOX_CH_DISCONNECTED);
@@ -404,6 +418,7 @@ static void qmp_shutdown(struct mbox_chan *chan)
	}
	mbox->num_shutdown = 0;
	mbox->num_assigned = 0;
out:
	mutex_unlock(&mbox->state_lock);
}