All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk,
	Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>,
	Vinod Koul <vinod.koul@intel.com>,
	Tomoya MORINAGA <tomoya.rohm@gmail.com>
Subject: [ 48/59] pch_dma: fix DMA issue(ch8-ch11)
Date: Thu, 19 Apr 2012 14:06:59 -0700	[thread overview]
Message-ID: <20120419210615.232963710@linuxfoundation.org> (raw)
In-Reply-To: <20120419210623.GA12156@kroah.com>

3.0-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>

commit c3d4913cd4cd469cbf29d411293e937729e83f3a upstream.

ISSUE: In case PCH_DMA with I2S communications with ch8~ch11, sometimes I2S data
is not send correctly.
CAUSE: The following patch I submitted before was not enough modification for
supporting DMA ch8~ch11. The modification for status register of ch8~11 was not
enough.

pch_dma: Support I2S for ML7213 IOH
author	Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
	Mon, 9 May 2011 07:09:38 +0000 (16:09 +0900)
committer	Vinod Koul <vinod.koul@intel.com>
	Mon, 9 May 2011 11:42:23 +0000 (16:42 +0530)
commit	194f5f2706c7472f9c6bb2d17fa788993606581f
tree	c9d4903ea02b18939a4f390956a48be1a3734517
parent	60092d0bde4c8741198da4a69b693d3709385bf1

This patch fixes the issue.
We can confirm PCH_DMA with I2S communications with ch8~ch11 works well.

Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/dma/pch_dma.c |   71 +++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 56 insertions(+), 15 deletions(-)

--- a/drivers/dma/pch_dma.c
+++ b/drivers/dma/pch_dma.c
@@ -45,7 +45,8 @@
 #define DMA_STATUS_MASK_BITS		0x3
 #define DMA_STATUS_SHIFT_BITS		16
 #define DMA_STATUS_IRQ(x)		(0x1 << (x))
-#define DMA_STATUS_ERR(x)		(0x1 << ((x) + 8))
+#define DMA_STATUS0_ERR(x)		(0x1 << ((x) + 8))
+#define DMA_STATUS2_ERR(x)		(0x1 << (x))
 
 #define DMA_DESC_WIDTH_SHIFT_BITS	12
 #define DMA_DESC_WIDTH_1_BYTE		(0x3 << DMA_DESC_WIDTH_SHIFT_BITS)
@@ -133,6 +134,7 @@ struct pch_dma {
 #define PCH_DMA_CTL3	0x0C
 #define PCH_DMA_STS0	0x10
 #define PCH_DMA_STS1	0x14
+#define PCH_DMA_STS2	0x18
 
 #define dma_readl(pd, name) \
 	readl((pd)->membase + PCH_DMA_##name)
@@ -183,13 +185,19 @@ static void pdc_enable_irq(struct dma_ch
 {
 	struct pch_dma *pd = to_pd(chan->device);
 	u32 val;
+	int pos;
+
+	if (chan->chan_id < 8)
+		pos = chan->chan_id;
+	else
+		pos = chan->chan_id + 8;
 
 	val = dma_readl(pd, CTL2);
 
 	if (enable)
-		val |= 0x1 << chan->chan_id;
+		val |= 0x1 << pos;
 	else
-		val &= ~(0x1 << chan->chan_id);
+		val &= ~(0x1 << pos);
 
 	dma_writel(pd, CTL2, val);
 
@@ -262,7 +270,7 @@ static void pdc_set_mode(struct dma_chan
 		chan->chan_id, val);
 }
 
-static u32 pdc_get_status(struct pch_dma_chan *pd_chan)
+static u32 pdc_get_status0(struct pch_dma_chan *pd_chan)
 {
 	struct pch_dma *pd = to_pd(pd_chan->chan.device);
 	u32 val;
@@ -272,9 +280,27 @@ static u32 pdc_get_status(struct pch_dma
 			DMA_STATUS_BITS_PER_CH * pd_chan->chan.chan_id));
 }
 
+static u32 pdc_get_status2(struct pch_dma_chan *pd_chan)
+{
+	struct pch_dma *pd = to_pd(pd_chan->chan.device);
+	u32 val;
+
+	val = dma_readl(pd, STS2);
+	return DMA_STATUS_MASK_BITS & (val >> (DMA_STATUS_SHIFT_BITS +
+			DMA_STATUS_BITS_PER_CH * (pd_chan->chan.chan_id - 8)));
+}
+
 static bool pdc_is_idle(struct pch_dma_chan *pd_chan)
 {
-	if (pdc_get_status(pd_chan) == DMA_STATUS_IDLE)
+	u32 sts;
+
+	if (pd_chan->chan.chan_id < 8)
+		sts = pdc_get_status0(pd_chan);
+	else
+		sts = pdc_get_status2(pd_chan);
+
+
+	if (sts == DMA_STATUS_IDLE)
 		return true;
 	else
 		return false;
@@ -693,30 +719,45 @@ static irqreturn_t pd_irq(int irq, void
 	struct pch_dma *pd = (struct pch_dma *)devid;
 	struct pch_dma_chan *pd_chan;
 	u32 sts0;
+	u32 sts2;
 	int i;
-	int ret = IRQ_NONE;
+	int ret0 = IRQ_NONE;
+	int ret2 = IRQ_NONE;
 
 	sts0 = dma_readl(pd, STS0);
+	sts2 = dma_readl(pd, STS2);
 
 	dev_dbg(pd->dma.dev, "pd_irq sts0: %x\n", sts0);
 
 	for (i = 0; i < pd->dma.chancnt; i++) {
 		pd_chan = &pd->channels[i];
 
-		if (sts0 & DMA_STATUS_IRQ(i)) {
-			if (sts0 & DMA_STATUS_ERR(i))
-				set_bit(0, &pd_chan->err_status);
-
-			tasklet_schedule(&pd_chan->tasklet);
-			ret = IRQ_HANDLED;
+		if (i < 8) {
+			if (sts0 & DMA_STATUS_IRQ(i)) {
+				if (sts0 & DMA_STATUS0_ERR(i))
+					set_bit(0, &pd_chan->err_status);
+
+				tasklet_schedule(&pd_chan->tasklet);
+				ret0 = IRQ_HANDLED;
+			}
+		} else {
+			if (sts2 & DMA_STATUS_IRQ(i - 8)) {
+				if (sts2 & DMA_STATUS2_ERR(i))
+					set_bit(0, &pd_chan->err_status);
+
+				tasklet_schedule(&pd_chan->tasklet);
+				ret2 = IRQ_HANDLED;
+			}
 		}
-
 	}
 
 	/* clear interrupt bits in status register */
-	dma_writel(pd, STS0, sts0);
+	if (ret0)
+		dma_writel(pd, STS0, sts0);
+	if (ret2)
+		dma_writel(pd, STS2, sts2);
 
-	return ret;
+	return ret0 | ret2;
 }
 
 #ifdef	CONFIG_PM



  parent reply	other threads:[~2012-04-19 21:14 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-19 21:06 [ 00/59] 3.0.29-stable review Greg KH
2012-04-19 21:06 ` [ 01/59] drm/i915/ringbuffer: Exclude last 2 cachlines of ring on 845g Greg KH
2012-04-19 21:06 ` [ 02/59] drm/radeon: only add the mm i2c bus if the hw_i2c module param is set Greg KH
2012-04-19 21:06 ` [ 03/59] rtlwifi: Add missing DMA buffer unmapping for PCI drivers Greg KH
2012-04-19 21:06 ` [ 04/59] ARM: 7384/1: ThumbEE: Disable userspace TEEHBR access for !CONFIG_ARM_THUMBEE Greg KH
2012-04-19 21:06 ` [ 05/59] [PATCH] Bluetooth: uart-ldisc: Fix memory leak Greg KH
2012-04-19 21:06 ` [ 06/59] Bluetooth: hci_ldisc: fix NULL-pointer dereference on tty_close Greg KH
2012-04-19 21:06 ` [ 07/59] ia64: fix futex_atomic_cmpxchg_inatomic() Greg KH
2012-04-19 21:06 ` [ 08/59] drivers/rtc/rtc-pl031.c: enable clock on all ST variants Greg KH
2012-04-19 21:06 ` [ 09/59] hugetlb: fix race condition in hugetlb_fault() Greg KH
2012-04-19 21:06 ` [ 10/59] staging: iio: hmc5843: Fix crash in probe function Greg KH
2012-04-19 21:06 ` [ 11/59] tty: serial: altera_uart: Check for NULL platform_data in probe Greg KH
2012-04-19 21:06 ` [ 12/59] sparc64: Eliminate obsolete __handle_softirq() function Greg KH
2012-04-19 21:06 ` [ 13/59] sparc64: Fix bootup crash on sun4v Greg KH
2012-04-19 21:06 ` [ 14/59] cciss: Initialize scsi host max_sectors for tape drive support Greg KH
2012-04-19 21:06 ` [ 15/59] cciss: Fix scsi tape io with more than 255 scatter gather elements Greg KH
2012-04-19 21:06 ` [ 16/59] perf hists: Catch and handle out-of-date hist entry maps Greg KH
2012-04-19 21:06 ` [ 17/59] video:uvesafb: Fix oops that uvesafb try to execute NX-protected page Greg KH
2012-04-19 21:06 ` [ 18/59] nohz: Fix stale jiffies update in tick_nohz_restart() Greg KH
2012-04-19 21:06 ` [ 19/59] USB: serial: fix race between probe and open Greg KH
2012-04-19 21:06 ` [ 20/59] USB: pl2303: fix DTR/RTS being raised on baud rate change Greg KH
2012-04-19 21:06 ` [ 21/59] USB: option: re-add NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED to option_id array Greg KH
2012-04-19 21:06 ` [ 22/59] USB: sierra: add support for Sierra Wireless MC7710 Greg KH
2012-04-19 21:06 ` [ 23/59] USB: dont clear urb->dev in scatter-gather library Greg KH
2012-04-19 21:06 ` [ 24/59] xhci: dont re-enable IE constantly Greg KH
2012-04-19 21:06 ` [ 25/59] xhci: Dont write zeroed pointers to xHC registers Greg KH
2012-04-19 21:06 ` [ 26/59] xhci: Restore event ring dequeue pointer on resume Greg KH
2012-04-19 21:06 ` [ 27/59] xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI Greg KH
2012-04-19 21:06 ` [ 28/59] xHCI: add XHCI_RESET_ON_RESUME quirk for VIA xHCI host Greg KH
2012-04-19 21:06 ` [ 29/59] serial: PL011: clear pending interrupts Greg KH
2012-04-19 21:06 ` [ 30/59] serial: PL011: move interrupt clearing Greg KH
2012-04-19 21:06 ` [ 31/59] fcaps: clear the same personality flags as suid when fcaps are used Greg KH
2012-04-19 21:06 ` [ 32/59] [PATCH] ath9k: fix max noise floor threshold Greg KH
2012-04-19 21:06 ` [ 33/59] xhci: Fix register save/restore order Greg KH
2012-04-19 21:06 ` [ 34/59] Bluetooth: hci_core: fix NULL-pointer dereference at unregister Greg KH
2012-04-19 21:06 ` [ 35/59] pch_phub: Fix register miss-setting issue Greg KH
2012-04-19 21:06 ` [ 36/59] pch_phub: Care FUNCSEL register in PM Greg KH
2012-04-19 21:06 ` [ 37/59] pch_phub: Improve ADE(Address Decode Enable) control Greg KH
2012-04-19 21:06 ` [ 38/59] usb: gadget: pch_udc: Fix disconnect issue Greg KH
2012-04-19 21:06 ` [ 39/59] usb: gadget: pch_udc: Fix wrong return value Greg KH
2012-04-19 21:06 ` [ 40/59] usb: gadget: pch_udc: Fix USB suspend issue Greg KH
2012-04-19 21:06 ` [ 41/59] usb: gadget: pch_udc: Fix usb/gadget/pch_udc: Fix ether gadget connect/disconnect issue Greg KH
2012-04-19 21:06 ` [ 42/59] usb: gadget: pch_udc: Reduce redundant interrupt Greg KH
2012-04-19 21:06 ` [ 43/59] USB: pch_udc: Support new device LAPIS Semiconductor ML7831 IOH Greg KH
2012-04-19 21:06 ` [ 44/59] ACPICA: Fix to allow region arguments to reference other scopes Greg KH
2012-04-19 21:06 ` [ 45/59] security: fix compile error in commoncap.c Greg KH
2012-04-19 21:06 ` [ 46/59] pch_uart: Set PCIe bus number using probe parameter Greg KH
2012-04-19 21:06 ` [ 47/59] 8250_pci: Fix kernel panic when pch_uart is disabled Greg KH
2012-04-19 21:06 ` Greg KH [this message]
2012-04-19 21:07 ` [ 49/59] pch_dma: Fix channel locking Greg KH
2012-04-19 21:07 ` [ 50/59] pch_dma: Fix CTL register access issue Greg KH
2012-04-19 21:07 ` [ 51/59] pch_dma: Fix suspend issue Greg KH
2012-04-19 21:07 ` [ 52/59] pch_dma: Support new device LAPIS Semiconductor ML7831 IOH Greg KH
2012-04-19 21:07 ` [ 53/59] md/bitmap: prevent bitmap_daemon_work running while initialising bitmap Greg KH
2012-04-19 21:07 ` [ 54/59] Bluetooth: Adding USB device 13d3:3375 as an Atheros AR3012 Greg KH
2012-04-19 21:07 ` [ 55/59] Bluetooth: Add Atheros maryann PIDVID support Greg KH
2012-04-19 21:07 ` [ 56/59] futex: Do not leak robust list to unprivileged process Greg KH
2012-04-19 21:07 ` [ 57/59] drm/radeon/kms: fix the regression of DVI connector check Greg KH
2012-04-19 21:07 ` [ 58/59] drm/radeon: disable MSI on RV515 Greg KH
2012-04-19 21:07 ` [ 59/59] drm/radeon: fix load detect on rn50 with hardcoded EDIDs Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120419210615.232963710@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=tomoya-linux@dsn.okisemi.com \
    --cc=tomoya.rohm@gmail.com \
    --cc=torvalds@linux-foundation.org \
    --cc=vinod.koul@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.