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

Commit 8d506039 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Promotion of kernel.lnx.4.4-160907.

CRs      Change ID                                   Subject
--------------------------------------------------------------------------------------------------------------
1062195   I259da28050e5da0c96251cb99176386927b596f0   mmc: host: Add check for post tuning in HS400
1014159   Ifefb9f3ae88d890e64e7e123e0fcedc00aea719c   soc: qcom: rpm-smd: wait till all active set acks are cl
1030696 1049625   Ib4cc92b86f01991d8d8dbad54c68ee79cbaea44a   ASoC: wcd-mbhc: disable fake electrical interrupts
1061430   Ic983a524b6fa5bb079c6e61b8fe729974de78eea   ASoC: wcd934x: Update codec master clock configuration
1043239   Iaca520d92c4ee2d73f8e751699779e6cfc9ddb87   slim-msm: Differentiate SSR from Noise during power up
1060201   Id6d1c960dc720e8013eb9ba1f07af7662b576e37   msm: qdsp6v2: update CVD version
1059710   If68fea97d2f0b27432e61d73d6841a2b194bb63b   ASoC: wcd934x: Adjust DMIC clock based on sample rate
1060534   I35734cd41aee8bdd2764d6307f76bedcb916a07b   msm: ipa: fix skb recycle logic
1053735   I71bd8f11ff9faff9252129d84c1a80845fc2fe2a   ASoC: sound: soc: fix incorrect max value
1049012   I1dcdcb566f096bbddad286dc71c5bf980303e4c3   ASoC: wcd934x: Fix register default for MAD buffer inter
1033093   Ic55667df93c8bd51df06b48709bc420c082fbcf5   usb: gsi: Queue control notification on gsi_resume

Change-Id: I3ea4120f25d01e22c08900aa437eb95595ac5df7
CRs-Fixed: 1049625, 1033093, 1043239, 1030696, 1049012, 1053735, 1014159, 1059710, 1062195, 1060201, 1060534, 1061430
parents d8b2cee9 26745af0
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -2337,9 +2337,10 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
	switch (host->timing) {
	/* HS400 tuning is done in HS200 mode */
	case MMC_TIMING_MMC_HS400:
		if (!(mmc->caps2 & MMC_CAP2_HS400_POST_TUNING)) {
			err = -EINVAL;
			goto out_unlock;

		}
	case MMC_TIMING_MMC_HS200:
		/*
		 * Periodic re-tuning for HS400 is not expected to be needed, so
+2 −2
Original line number Diff line number Diff line
@@ -2397,7 +2397,7 @@ begin:
		if (skb->len < IPA_PKT_STATUS_SIZE) {
			WARN_ON(sys->prev_skb != NULL);
			IPADBG("status straddles buffer\n");
			sys->prev_skb = skb;
			sys->prev_skb = skb_copy(skb, GFP_KERNEL);
			sys->len_partial = skb->len;
			return rc;
		}
@@ -2482,7 +2482,7 @@ begin:
					!status->exception) {
				WARN_ON(sys->prev_skb != NULL);
				IPADBG("Ins header in next buffer\n");
				sys->prev_skb = skb;
				sys->prev_skb = skb_copy(skb, GFP_KERNEL);
				sys->len_partial =	 skb->len;
				return rc;
			}
+13 −5
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ static int ngd_qmi_available(struct notifier_block *n, unsigned long code,
	SLIM_INFO(dev, "Slimbus QMI NGD CB received event:%ld\n", code);
	switch (code) {
	case QMI_SERVER_ARRIVE:
		atomic_set(&dev->ssr_in_progress, 0);
		schedule_work(&dev->dsp.dom_up);
		break;
	default:
@@ -214,6 +215,8 @@ static int dsp_domr_notify_cb(struct notifier_block *n, unsigned long code,
	switch (code) {
	case SUBSYS_BEFORE_SHUTDOWN:
	case SERVREG_NOTIF_SERVICE_STATE_DOWN_V01:
		SLIM_INFO(dev, "SLIM DSP SSR notify cb:%lu\n", code);
		atomic_set(&dev->ssr_in_progress, 1);
		/* wait for current transaction */
		mutex_lock(&dev->tx_lock);
		/* make sure autosuspend is not called until ADSP comes up*/
@@ -866,7 +869,7 @@ static int ngd_bulk_wr(struct slim_controller *ctrl, u8 la, u8 mt, u8 mc,
	}
	if (dev->bulk.size > dev->bulk.buf_sz) {
		void *temp = krealloc(dev->bulk.base, dev->bulk.size,
				      GFP_KERNEL);
				      GFP_KERNEL | GFP_DMA);
		if (!temp) {
			ret = -ENOMEM;
			goto retpath;
@@ -1316,8 +1319,10 @@ hw_init_retry:
		if (ret) {
			SLIM_WARN(dev, "SLIM power req failed:%d, retry:%d\n",
					ret, retries);
			if (!atomic_read(&dev->ssr_in_progress))
				msm_slim_qmi_power_request(dev, false);
			if (retries < INIT_MX_RETRIES) {
			if (retries < INIT_MX_RETRIES &&
				!atomic_read(&dev->ssr_in_progress)) {
				retries++;
				goto hw_init_retry;
			}
@@ -1416,7 +1421,8 @@ capability_retry:
		SLIM_WARN(dev,
			  "slim capability time-out:%d, stat:0x%x,cfg:0x%x\n",
				retries, laddr, cfg);
		if (retries < INIT_MX_RETRIES) {
		if ((retries < INIT_MX_RETRIES) &&
				!atomic_read(&dev->ssr_in_progress)) {
			retries++;
			goto capability_retry;
		}
@@ -1683,7 +1689,7 @@ static int ngd_slim_probe(struct platform_device *pdev)

	/* typical txn numbers and size used in bulk operation */
	dev->bulk.buf_sz = SLIM_MAX_TXNS * 8;
	dev->bulk.base = kzalloc(dev->bulk.buf_sz, GFP_KERNEL);
	dev->bulk.base = kzalloc(dev->bulk.buf_sz, GFP_KERNEL | GFP_DMA);
	if (!dev->bulk.base) {
		ret = -ENOMEM;
		goto err_nobulk;
@@ -1780,6 +1786,7 @@ static int ngd_slim_probe(struct platform_device *pdev)
	dev->ee = 1;
	dev->irq = irq->start;
	dev->bam.irq = bam_irq->start;
	atomic_set(&dev->ssr_in_progress, 0);

	if (rxreg_access)
		dev->use_rx_msgqs = MSM_MSGQ_DISABLED;
@@ -1938,6 +1945,7 @@ static int ngd_slim_runtime_resume(struct device *device)
	struct platform_device *pdev = to_platform_device(device);
	struct msm_slim_ctrl *dev = platform_get_drvdata(pdev);
	int ret = 0;

	mutex_lock(&dev->tx_lock);
	if (dev->state >= MSM_CTRL_ASLEEP)
		ret = ngd_slim_power_up(dev, false);
+1 −0
Original line number Diff line number Diff line
@@ -314,6 +314,7 @@ struct msm_slim_ctrl {
	void (*rx_slim)(struct msm_slim_ctrl *dev, u8 *buf);
	u32			current_rx_buf[10];
	int			current_count;
	atomic_t		ssr_in_progress;
};

struct msm_sat_chan {
+4 −30
Original line number Diff line number Diff line
@@ -795,45 +795,23 @@ static int msm_rpm_read_sleep_ack(void)
{
	int ret;
	char buf[MAX_ERR_BUFFER_SIZE] = {0};
	uint32_t msg_id;

	if (glink_enabled)
		ret = msm_rpm_glink_rx_poll(glink_data->glink_handle);
	else {
		ret = msm_rpm_read_smd_data(buf);
		if (!ret) {
			/*
			 * Mimic Glink behavior to ensure that the
			 * data is read and the msg is removed from
			 * the wait list. We should have gotten here
			 * only when there are no drivers waiting on
			 * ACKs. msm_rpm_get_entry_from_msg_id()
			 * return non-NULL only then.
			 */
			msg_id = msm_rpm_get_msg_id_from_ack(buf);
			msm_rpm_process_ack(msg_id, 0);
		if (!ret)
			ret = smd_is_pkt_avail(msm_rpm_data.ch_info);
	}
	}
	return ret;
}

static void msm_rpm_flush_noack_messages(void)
{
	while (!list_empty(&msm_rpm_wait_list)) {
		if (!msm_rpm_read_sleep_ack())
			break;
	}
}

static int msm_rpm_flush_requests(bool print)
{
	struct rb_node *t;
	int ret;
	int count = 0;

	msm_rpm_flush_noack_messages();

	for (t = rb_first(&tr_root); t; t = rb_next(t)) {

		struct slp_buf *s = rb_entry(t, struct slp_buf, node);
@@ -1102,18 +1080,14 @@ static void msm_rpm_notify(void *data, unsigned event)

bool msm_rpm_waiting_for_ack(void)
{
	bool ret = false;
	bool ret;
	unsigned long flags;
	struct msm_rpm_wait_data *elem = NULL;

	spin_lock_irqsave(&msm_rpm_list_lock, flags);
	elem = list_first_entry_or_null(&msm_rpm_wait_list,
				struct msm_rpm_wait_data, list);
	if (elem)
		ret = !elem->delete_on_ack;
	ret = list_empty(&msm_rpm_wait_list);
	spin_unlock_irqrestore(&msm_rpm_list_lock, flags);

	return ret;
	return !ret;
}

static struct msm_rpm_wait_data *msm_rpm_get_entry_from_msg_id(uint32_t msg_id)
Loading