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

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

Merge "slim-msm-ngd: Change the NGD interrupt to be an ISR"

parents a1a0fb73 3289743c
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -1432,7 +1432,7 @@ static int ngd_slim_probe(struct platform_device *pdev)
	init_completion(&dev->reconf);
	init_completion(&dev->ctrl_up);
	mutex_init(&dev->tx_lock);
	mutex_init(&dev->tx_buf_lock);
	spin_lock_init(&dev->tx_buf_lock);
	spin_lock_init(&dev->rx_lock);
	dev->ee = 1;
	dev->irq = irq->start;
@@ -1460,9 +1460,18 @@ static int ngd_slim_probe(struct platform_device *pdev)
	dev->ctrl.dev.of_node = pdev->dev.of_node;
	dev->state = MSM_CTRL_DOWN;

	ret = request_threaded_irq(dev->irq, NULL,
	/*
	 * As this does not perform expensive
	 * operations, it can execute in an
	 * interrupt context. This avoids
	 * context switches, provides
	 * extensive benifits and performance
	 * improvements.
	 */
	ret = request_irq(dev->irq,
			ngd_slim_interrupt,
			IRQF_TRIGGER_HIGH | IRQF_ONESHOT, "ngd_slim_irq", dev);
			IRQF_TRIGGER_HIGH,
			"ngd_slim_irq", dev);

	if (ret) {
		dev_err(&pdev->dev, "request IRQ failed\n");
+11 −9
Original line number Diff line number Diff line
@@ -503,17 +503,18 @@ u32 *msm_slim_manage_tx_msgq(struct msm_slim_ctrl *dev, bool getbuf,
	int ret = 0;
	int retries = 0;
	u32 *retbuf = NULL;
	unsigned long flags;

	mutex_lock(&dev->tx_buf_lock);
	spin_lock_irqsave(&dev->tx_buf_lock, flags);
	if (!getbuf) {
		msm_slim_tx_msg_return(dev, err);
		mutex_unlock(&dev->tx_buf_lock);
		spin_unlock_irqrestore(&dev->tx_buf_lock, flags);
		return NULL;
	}

	retbuf = msm_slim_modify_tx_buf(dev, comp);
	if (retbuf) {
		mutex_unlock(&dev->tx_buf_lock);
		spin_unlock_irqrestore(&dev->tx_buf_lock, flags);
		return retbuf;
	}

@@ -526,7 +527,7 @@ u32 *msm_slim_manage_tx_msgq(struct msm_slim_ctrl *dev, bool getbuf,
			if (retries > 0)
				SLIM_INFO(dev, "SLIM TX retrieved:%d retries",
							retries);
			mutex_unlock(&dev->tx_buf_lock);
			spin_unlock_irqrestore(&dev->tx_buf_lock, flags);
			return retbuf;
		}

@@ -534,14 +535,14 @@ u32 *msm_slim_manage_tx_msgq(struct msm_slim_ctrl *dev, bool getbuf,
		 * superframe size will vary based on clock gear
		 * 1 superframe will consume at least 1 message
		 * if HW is in good condition. With MX_RETRIES,
		 * make sure we wait for a [3, 10] superframes
		 * make sure we wait for ~2 superframes
		 * before deciding HW couldn't process descriptors
		 */
		usleep_range(100, 250);
		udelay(50);
		retries++;
	} while (ret && (retries < INIT_MX_RETRIES));

	mutex_unlock(&dev->tx_buf_lock);
	spin_unlock_irqrestore(&dev->tx_buf_lock, flags);
	return NULL;
}

@@ -690,6 +691,7 @@ int msm_slim_connect_endp(struct msm_slim_ctrl *dev,
	struct sps_register_event sps_error_event; /* SPS_ERROR */
	struct sps_register_event sps_descr_event; /* DESCR_DONE */
	struct sps_connect *config = &endpoint->config;
	unsigned long flags;

	ret = sps_connect(endpoint->sps, config);
	if (ret) {
@@ -743,12 +745,12 @@ int msm_slim_connect_endp(struct msm_slim_ctrl *dev,
		}
		dev->use_rx_msgqs = MSM_MSGQ_ENABLED;
	} else {
		mutex_lock(&dev->tx_buf_lock);
		spin_lock_irqsave(&dev->tx_buf_lock, flags);
		dev->tx_tail = 0;
		dev->tx_head = 0;
		for (i = 0; i < MSM_TX_BUFS; i++)
			dev->wr_comp[i] = NULL;
		mutex_unlock(&dev->tx_buf_lock);
		spin_unlock_irqrestore(&dev->tx_buf_lock, flags);
		dev->use_tx_msgqs = MSM_MSGQ_ENABLED;
	}

+1 −1
Original line number Diff line number Diff line
@@ -257,7 +257,7 @@ struct msm_slim_ctrl {
	struct clk		*rclk;
	struct clk		*hclk;
	struct mutex		tx_lock;
	struct mutex		tx_buf_lock;
	spinlock_t		tx_buf_lock;
	u8			pgdla;
	enum msm_slim_msgq	use_rx_msgqs;
	enum msm_slim_msgq	use_tx_msgqs;