All of lore.kernel.org
 help / color / mirror / Atom feed
* [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio
@ 2016-08-22 22:56 John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms John Stultz
                   ` (6 more replies)
  0 siblings, 7 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: John Stultz, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green

Just a resend of the k3dma fixes and cyclic mode patches
needed to support audio on HiKey.

No code changes this time, but I did add Zhangfei's Acked-by lines.

Let me know if there is any feedback or objections!

thanks
-john

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>

Andy Green (4):
  k3dma: Fix hisi burst clipping
  k3dma: Fix dma err offsets
  k3dma: Fix "nobody cared" message seen on any error
  k3dma: Add cyclic mode for audio

John Stultz (3):
  Kconfig: Allow k3dma driver to be selected for more then HISI3xx
    platforms
  k3dma: Fix occasional DMA ERR issue by using proper dma api
  k3dma: Fix memory handling in preparation for cyclic mode

 drivers/dma/Kconfig |   2 +-
 drivers/dma/k3dma.c | 215 +++++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 179 insertions(+), 38 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
@ 2016-08-22 22:56 ` John Stultz
  2016-08-23  4:23   ` kbuild test robot
  2016-08-22 22:56 ` [RESEND][PATCH 2/7 v4] k3dma: Fix hisi burst clipping John Stultz
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: John Stultz, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green

This allows the k3dma driver to be selected on HiKey via the ARCH_HISI
dependency.

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
v2:
* Use ARCH_HISI and COMPILE_TEST dependency, suggested by Mark Brown,
  instead of just removing all dependencies.
---
 drivers/dma/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
index 739f797..fe2dbb8 100644
--- a/drivers/dma/Kconfig
+++ b/drivers/dma/Kconfig
@@ -279,7 +279,7 @@ config INTEL_MIC_X100_DMA
 
 config K3_DMA
 	tristate "Hisilicon K3 DMA support"
-	depends on ARCH_HI3xxx
+	depends on ARCH_HI3xxx || ARCH_HISI || COMPILE_TEST
 	select DMA_ENGINE
 	select DMA_VIRTUAL_CHANNELS
 	help
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 2/7 v4] k3dma: Fix hisi burst clipping
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms John Stultz
@ 2016-08-22 22:56 ` John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 3/7 v4] k3dma: Fix dma err offsets John Stultz
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: Andy Green, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green, John Stultz

From: Andy Green <andy.green@linaro.org>

Max burst len is a 4-bit field, but at the moment it's clipped with
a 5-bit constant... reduce it to that which can be expressed

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: Andy Green <andy.green@linaro.org>
[jstultz: Forward ported to mainline]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 drivers/dma/k3dma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 39de898..3d51469 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -551,7 +551,7 @@ static int k3_dma_config(struct dma_chan *chan,
 	c->ccfg |= (val << 12) | (val << 16);
 
 	if ((maxburst == 0) || (maxburst > 16))
-		val = 16;
+		val = 15;
 	else
 		val = maxburst - 1;
 	c->ccfg |= (val << 20) | (val << 24);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 3/7 v4] k3dma: Fix dma err offsets
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 2/7 v4] k3dma: Fix hisi burst clipping John Stultz
@ 2016-08-22 22:56 ` John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 4/7 v4] k3dma: Fix "nobody cared" message seen on any error John Stultz
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: Andy Green, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green, John Stultz

From: Andy Green <andy.green@linaro.org>

The offsets for ERR1 and ERR2 are wrong actually.
That's why you can never clear an error.

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: Andy Green <andy.green@linaro.org>
[jstultz: Forward ported to mainline]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 drivers/dma/k3dma.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 3d51469..7dc7816 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -34,8 +34,8 @@
 #define INT_ERR1_MASK		0x20
 #define INT_ERR2_MASK		0x24
 #define INT_TC1_RAW		0x600
-#define INT_ERR1_RAW		0x608
-#define INT_ERR2_RAW		0x610
+#define INT_ERR1_RAW		0x610
+#define INT_ERR2_RAW		0x618
 #define CH_PRI			0x688
 #define CH_STAT			0x690
 #define CX_CUR_CNT		0x704
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 4/7 v4] k3dma: Fix "nobody cared" message seen on any error
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
                   ` (2 preceding siblings ...)
  2016-08-22 22:56 ` [RESEND][PATCH 3/7 v4] k3dma: Fix dma err offsets John Stultz
@ 2016-08-22 22:56 ` John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 5/7 v4] k3dma: Fix occasional DMA ERR issue by using proper dma api John Stultz
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: Andy Green, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green, John Stultz

From: Andy Green <andy.green@linaro.org>

As it was before, as soon as the DMAC IP felt there was an error
he would return IRQ_NONE since no actual transfer had completed.

After spinning on that for 100K interrupts, Linux yanks the IRQ with
a "nobody cared" error.

This patch lets it handle the interrupt and keep the IRQ alive.

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: Andy Green <andy.green@linaro.org>
[jstultz: Forward ported to mainline]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 drivers/dma/k3dma.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 7dc7816..f46b9b8 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -221,11 +221,13 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
 	writel_relaxed(err1, d->base + INT_ERR1_RAW);
 	writel_relaxed(err2, d->base + INT_ERR2_RAW);
 
-	if (irq_chan) {
+	if (irq_chan)
 		tasklet_schedule(&d->task);
+
+	if (irq_chan || err1 || err2)
 		return IRQ_HANDLED;
-	} else
-		return IRQ_NONE;
+
+	return IRQ_NONE;
 }
 
 static int k3_dma_start_txd(struct k3_dma_chan *c)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 5/7 v4] k3dma: Fix occasional DMA ERR issue by using proper dma api
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
                   ` (3 preceding siblings ...)
  2016-08-22 22:56 ` [RESEND][PATCH 4/7 v4] k3dma: Fix "nobody cared" message seen on any error John Stultz
@ 2016-08-22 22:56 ` John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 6/7 v4] k3dma: Fix memory handling in preparation for cyclic mode John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 7/7 v4] k3dma: Add cyclic mode for audio John Stultz
  6 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: John Stultz, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green

After lots of debugging on an occasional DMA ERR issue, I realized
that the desc structures which we point the dma hardware are being
allocated out of regular memory. This means when we fill the desc
structures, that data doesn't always get flushed out to memory by
the time we start the dma transfer, resulting in the dma engine getting
some null values, resulting in a DMA ERR on the first irq.

Thus, this patch adopts mechanism similar to the zx296702_dma of
allocating the desc structures from a dma pool, so the memory caching
rules are properly set to avoid this issue.

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: John Stutlz <john.stultz@linaro.org>
---
 drivers/dma/k3dma.c | 53 +++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 45 insertions(+), 8 deletions(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index f46b9b8..9d96c95 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -8,6 +8,8 @@
  */
 #include <linux/sched.h>
 #include <linux/device.h>
+#include <linux/dma-mapping.h>
+#include <linux/dmapool.h>
 #include <linux/dmaengine.h>
 #include <linux/init.h>
 #include <linux/interrupt.h>
@@ -25,6 +27,7 @@
 
 #define DRIVER_NAME		"k3-dma"
 #define DMA_MAX_SIZE		0x1ffc
+#define LLI_BLOCK_SIZE		(4 * PAGE_SIZE)
 
 #define INT_STAT		0x00
 #define INT_TC1			0x04
@@ -68,7 +71,7 @@ struct k3_dma_desc_sw {
 	dma_addr_t		desc_hw_lli;
 	size_t			desc_num;
 	size_t			size;
-	struct k3_desc_hw	desc_hw[0];
+	struct k3_desc_hw	*desc_hw;
 };
 
 struct k3_dma_phy;
@@ -100,6 +103,7 @@ struct k3_dma_dev {
 	struct k3_dma_phy	*phy;
 	struct k3_dma_chan	*chans;
 	struct clk		*clk;
+	struct dma_pool		*pool;
 	u32			dma_channels;
 	u32			dma_requests;
 	unsigned int		irq;
@@ -414,6 +418,35 @@ static void k3_dma_fill_desc(struct k3_dma_desc_sw *ds, dma_addr_t dst,
 	ds->desc_hw[num].config = ccfg;
 }
 
+static struct k3_dma_desc_sw *k3_dma_alloc_desc_resource(int num,
+							struct dma_chan *chan)
+{
+	struct k3_dma_chan *c = to_k3_chan(chan);
+	struct k3_dma_desc_sw *ds;
+	struct k3_dma_dev *d = to_k3_dma(chan->device);
+	int lli_limit = LLI_BLOCK_SIZE / sizeof(struct k3_desc_hw);
+
+	if (num > lli_limit) {
+		dev_dbg(chan->device->dev, "vch %p: sg num %d exceed max %d\n",
+			&c->vc, num, lli_limit);
+		return NULL;
+	}
+
+	ds = kzalloc(sizeof(*ds), GFP_NOWAIT);
+	if (!ds)
+		return NULL;
+
+	ds->desc_hw = dma_pool_alloc(d->pool, GFP_NOWAIT, &ds->desc_hw_lli);
+	if (!ds->desc_hw) {
+		dev_dbg(chan->device->dev, "vch %p: dma alloc fail\n", &c->vc);
+		kfree(ds);
+		return NULL;
+	}
+	memset(ds->desc_hw, 0, sizeof(struct k3_desc_hw) * num);
+	ds->desc_num = num;
+	return ds;
+}
+
 static struct dma_async_tx_descriptor *k3_dma_prep_memcpy(
 	struct dma_chan *chan,	dma_addr_t dst, dma_addr_t src,
 	size_t len, unsigned long flags)
@@ -427,13 +460,12 @@ static struct dma_async_tx_descriptor *k3_dma_prep_memcpy(
 		return NULL;
 
 	num = DIV_ROUND_UP(len, DMA_MAX_SIZE);
-	ds = kzalloc(sizeof(*ds) + num * sizeof(ds->desc_hw[0]), GFP_ATOMIC);
+
+	ds = k3_dma_alloc_desc_resource(num, chan);
 	if (!ds)
 		return NULL;
 
-	ds->desc_hw_lli = __virt_to_phys((unsigned long)&ds->desc_hw[0]);
 	ds->size = len;
-	ds->desc_num = num;
 	num = 0;
 
 	if (!c->ccfg) {
@@ -482,12 +514,9 @@ static struct dma_async_tx_descriptor *k3_dma_prep_slave_sg(
 			num += DIV_ROUND_UP(avail, DMA_MAX_SIZE) - 1;
 	}
 
-	ds = kzalloc(sizeof(*ds) + num * sizeof(ds->desc_hw[0]), GFP_ATOMIC);
+	ds = k3_dma_alloc_desc_resource(num, chan);
 	if (!ds)
 		return NULL;
-
-	ds->desc_hw_lli = __virt_to_phys((unsigned long)&ds->desc_hw[0]);
-	ds->desc_num = num;
 	num = 0;
 
 	for_each_sg(sgl, sg, sglen, i) {
@@ -645,7 +674,9 @@ static void k3_dma_free_desc(struct virt_dma_desc *vd)
 {
 	struct k3_dma_desc_sw *ds =
 		container_of(vd, struct k3_dma_desc_sw, vd);
+	struct k3_dma_dev *d = to_k3_dma(vd->tx.chan->device);
 
+	dma_pool_free(d->pool, ds->desc_hw, ds->desc_hw_lli);
 	kfree(ds);
 }
 
@@ -708,6 +739,12 @@ static int k3_dma_probe(struct platform_device *op)
 
 	d->irq = irq;
 
+	/* A DMA memory pool for LLIs, align on 32-byte boundary */
+	d->pool = dmam_pool_create(DRIVER_NAME, &op->dev,
+					LLI_BLOCK_SIZE, 32, 0);
+	if (!d->pool)
+		return -ENOMEM;
+
 	/* init phy channel */
 	d->phy = devm_kzalloc(&op->dev,
 		d->dma_channels * sizeof(struct k3_dma_phy), GFP_KERNEL);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 6/7 v4] k3dma: Fix memory handling in preparation for cyclic mode
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
                   ` (4 preceding siblings ...)
  2016-08-22 22:56 ` [RESEND][PATCH 5/7 v4] k3dma: Fix occasional DMA ERR issue by using proper dma api John Stultz
@ 2016-08-22 22:56 ` John Stultz
  2016-08-22 22:56 ` [RESEND][PATCH 7/7 v4] k3dma: Add cyclic mode for audio John Stultz
  6 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: John Stultz, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green

With cyclic mode, the shared virt-dma logic doesn't actually
manage the descriptor state, nor the calling of the descriptor
free callback. This results in leaking a desc structure every
time we start an audio transfer.

Thus we must manage it ourselves. The k3dma driver already keeps
track of the active and finished descriptors via ds_run and ds_done
pointers, so cleanup how we handle those two values, so when we
tear down everything in terminate_all, call free_desc on the ds_run
and ds_done pointers if they are not null.

NOTE: HiKey doesn't use the non-cyclic dma modes, so I'm not been
able to test those modes. But with this patch we no longer leak
the desc structures.

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
 drivers/dma/k3dma.c | 38 ++++++++++++++++++++++++--------------
 1 file changed, 24 insertions(+), 14 deletions(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 9d96c95..8108fa1 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -212,7 +212,9 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
 
 				spin_lock_irqsave(&c->vc.lock, flags);
 				vchan_cookie_complete(&p->ds_run->vd);
+				WARN_ON_ONCE(p->ds_done);
 				p->ds_done = p->ds_run;
+				p->ds_run = NULL;
 				spin_unlock_irqrestore(&c->vc.lock, flags);
 			}
 			irq_chan |= BIT(i);
@@ -253,14 +255,14 @@ static int k3_dma_start_txd(struct k3_dma_chan *c)
 		 * so vc->desc_issued only contains desc pending
 		 */
 		list_del(&ds->vd.node);
+
+		WARN_ON_ONCE(c->phy->ds_run);
+		WARN_ON_ONCE(c->phy->ds_done);
 		c->phy->ds_run = ds;
-		c->phy->ds_done = NULL;
 		/* start dma */
 		k3_dma_set_desc(c->phy, &ds->desc_hw[0]);
 		return 0;
 	}
-	c->phy->ds_done = NULL;
-	c->phy->ds_run = NULL;
 	return -EAGAIN;
 }
 
@@ -594,6 +596,16 @@ static int k3_dma_config(struct dma_chan *chan,
 	return 0;
 }
 
+static void k3_dma_free_desc(struct virt_dma_desc *vd)
+{
+	struct k3_dma_desc_sw *ds =
+		container_of(vd, struct k3_dma_desc_sw, vd);
+	struct k3_dma_dev *d = to_k3_dma(vd->tx.chan->device);
+
+	dma_pool_free(d->pool, ds->desc_hw, ds->desc_hw_lli);
+	kfree(ds);
+}
+
 static int k3_dma_terminate_all(struct dma_chan *chan)
 {
 	struct k3_dma_chan *c = to_k3_chan(chan);
@@ -617,7 +629,15 @@ static int k3_dma_terminate_all(struct dma_chan *chan)
 		k3_dma_terminate_chan(p, d);
 		c->phy = NULL;
 		p->vchan = NULL;
-		p->ds_run = p->ds_done = NULL;
+		if (p->ds_run) {
+			k3_dma_free_desc(&p->ds_run->vd);
+			p->ds_run = NULL;
+		}
+		if (p->ds_done) {
+			k3_dma_free_desc(&p->ds_done->vd);
+			p->ds_done = NULL;
+		}
+
 	}
 	spin_unlock_irqrestore(&c->vc.lock, flags);
 	vchan_dma_desc_free_list(&c->vc, &head);
@@ -670,16 +690,6 @@ static int k3_dma_transfer_resume(struct dma_chan *chan)
 	return 0;
 }
 
-static void k3_dma_free_desc(struct virt_dma_desc *vd)
-{
-	struct k3_dma_desc_sw *ds =
-		container_of(vd, struct k3_dma_desc_sw, vd);
-	struct k3_dma_dev *d = to_k3_dma(vd->tx.chan->device);
-
-	dma_pool_free(d->pool, ds->desc_hw, ds->desc_hw_lli);
-	kfree(ds);
-}
-
 static const struct of_device_id k3_pdma_dt_ids[] = {
 	{ .compatible = "hisilicon,k3-dma-1.0", },
 	{}
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RESEND][PATCH 7/7 v4] k3dma: Add cyclic mode for audio
  2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
                   ` (5 preceding siblings ...)
  2016-08-22 22:56 ` [RESEND][PATCH 6/7 v4] k3dma: Fix memory handling in preparation for cyclic mode John Stultz
@ 2016-08-22 22:56 ` John Stultz
  6 siblings, 0 replies; 11+ messages in thread
From: John Stultz @ 2016-08-22 22:56 UTC (permalink / raw)
  To: lkml
  Cc: Andy Green, Zhangfei Gao, Krzysztof Kozlowski, Maxime Ripard,
	Vinod Koul, Dan Williams, Mark Brown, Andy Green, John Stultz

From: Andy Green <andy.green@linaro.org>

Currently the k3dma driver doesn't offer the cyclic mode
necessary for handling audio.

This patch adds it.

Cc: Zhangfei Gao <zhangfei.gao@linaro.org>
Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Andy Green <andy@warmcat.com>
Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Signed-off-by: Andy Green <andy.green@linaro.org>
[jstultz: Forward ported to mainline, removed a few
 bits of logic that didn't seem to have much effect]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
v2:
* Changed pr_debug() -> dev_debug() suggested by Zhangfei
---
 drivers/dma/k3dma.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 103 insertions(+), 11 deletions(-)

diff --git a/drivers/dma/k3dma.c b/drivers/dma/k3dma.c
index 8108fa1..814e6e0 100644
--- a/drivers/dma/k3dma.c
+++ b/drivers/dma/k3dma.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Linaro Ltd.
+ * Copyright (c) 2013 - 2015 Linaro Ltd.
  * Copyright (c) 2013 Hisilicon Limited.
  *
  * This program is free software; you can redistribute it and/or modify
@@ -27,23 +27,28 @@
 
 #define DRIVER_NAME		"k3-dma"
 #define DMA_MAX_SIZE		0x1ffc
+#define DMA_CYCLIC_MAX_PERIOD	0x1000
 #define LLI_BLOCK_SIZE		(4 * PAGE_SIZE)
 
 #define INT_STAT		0x00
 #define INT_TC1			0x04
+#define INT_TC2			0x08
 #define INT_ERR1		0x0c
 #define INT_ERR2		0x10
 #define INT_TC1_MASK		0x18
+#define INT_TC2_MASK		0x1c
 #define INT_ERR1_MASK		0x20
 #define INT_ERR2_MASK		0x24
 #define INT_TC1_RAW		0x600
+#define INT_TC2_RAW		0x608
 #define INT_ERR1_RAW		0x610
 #define INT_ERR2_RAW		0x618
 #define CH_PRI			0x688
 #define CH_STAT			0x690
 #define CX_CUR_CNT		0x704
 #define CX_LLI			0x800
-#define CX_CNT			0x810
+#define CX_CNT1			0x80c
+#define CX_CNT0			0x810
 #define CX_SRC			0x814
 #define CX_DST			0x818
 #define CX_CFG			0x81c
@@ -52,6 +57,7 @@
 
 #define CX_LLI_CHAIN_EN		0x2
 #define CX_CFG_EN		0x1
+#define CX_CFG_NODEIRQ		BIT(1)
 #define CX_CFG_MEM2PER		(0x1 << 2)
 #define CX_CFG_PER2MEM		(0x2 << 2)
 #define CX_CFG_SRCINCR		(0x1 << 31)
@@ -84,6 +90,7 @@ struct k3_dma_chan {
 	enum dma_transfer_direction dir;
 	dma_addr_t		dev_addr;
 	enum dma_status		status;
+	bool			cyclic;
 };
 
 struct k3_dma_phy {
@@ -139,6 +146,7 @@ static void k3_dma_terminate_chan(struct k3_dma_phy *phy, struct k3_dma_dev *d)
 
 	val = 0x1 << phy->idx;
 	writel_relaxed(val, d->base + INT_TC1_RAW);
+	writel_relaxed(val, d->base + INT_TC2_RAW);
 	writel_relaxed(val, d->base + INT_ERR1_RAW);
 	writel_relaxed(val, d->base + INT_ERR2_RAW);
 }
@@ -146,7 +154,7 @@ static void k3_dma_terminate_chan(struct k3_dma_phy *phy, struct k3_dma_dev *d)
 static void k3_dma_set_desc(struct k3_dma_phy *phy, struct k3_desc_hw *hw)
 {
 	writel_relaxed(hw->lli, phy->base + CX_LLI);
-	writel_relaxed(hw->count, phy->base + CX_CNT);
+	writel_relaxed(hw->count, phy->base + CX_CNT0);
 	writel_relaxed(hw->saddr, phy->base + CX_SRC);
 	writel_relaxed(hw->daddr, phy->base + CX_DST);
 	writel_relaxed(AXI_CFG_DEFAULT, phy->base + AXI_CFG);
@@ -180,11 +188,13 @@ static void k3_dma_enable_dma(struct k3_dma_dev *d, bool on)
 
 		/* unmask irq */
 		writel_relaxed(0xffff, d->base + INT_TC1_MASK);
+		writel_relaxed(0xffff, d->base + INT_TC2_MASK);
 		writel_relaxed(0xffff, d->base + INT_ERR1_MASK);
 		writel_relaxed(0xffff, d->base + INT_ERR2_MASK);
 	} else {
 		/* mask irq */
 		writel_relaxed(0x0, d->base + INT_TC1_MASK);
+		writel_relaxed(0x0, d->base + INT_TC2_MASK);
 		writel_relaxed(0x0, d->base + INT_ERR1_MASK);
 		writel_relaxed(0x0, d->base + INT_ERR2_MASK);
 	}
@@ -197,19 +207,20 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
 	struct k3_dma_chan *c;
 	u32 stat = readl_relaxed(d->base + INT_STAT);
 	u32 tc1  = readl_relaxed(d->base + INT_TC1);
+	u32 tc2  = readl_relaxed(d->base + INT_TC2);
 	u32 err1 = readl_relaxed(d->base + INT_ERR1);
 	u32 err2 = readl_relaxed(d->base + INT_ERR2);
 	u32 i, irq_chan = 0;
 
 	while (stat) {
 		i = __ffs(stat);
-		stat &= (stat - 1);
-		if (likely(tc1 & BIT(i))) {
+		stat &= ~BIT(i);
+		if (likely(tc1 & BIT(i)) || (tc2 & BIT(i))) {
+			unsigned long flags;
+
 			p = &d->phy[i];
 			c = p->vchan;
-			if (c) {
-				unsigned long flags;
-
+			if (c && (tc1 & BIT(i))) {
 				spin_lock_irqsave(&c->vc.lock, flags);
 				vchan_cookie_complete(&p->ds_run->vd);
 				WARN_ON_ONCE(p->ds_done);
@@ -217,6 +228,12 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
 				p->ds_run = NULL;
 				spin_unlock_irqrestore(&c->vc.lock, flags);
 			}
+			if (c && (tc2 & BIT(i))) {
+				spin_lock_irqsave(&c->vc.lock, flags);
+				if (p->ds_run != NULL)
+					vchan_cyclic_callback(&p->ds_run->vd);
+				spin_unlock_irqrestore(&c->vc.lock, flags);
+			}
 			irq_chan |= BIT(i);
 		}
 		if (unlikely((err1 & BIT(i)) || (err2 & BIT(i))))
@@ -224,6 +241,7 @@ static irqreturn_t k3_dma_int_handler(int irq, void *dev_id)
 	}
 
 	writel_relaxed(irq_chan, d->base + INT_TC1_RAW);
+	writel_relaxed(irq_chan, d->base + INT_TC2_RAW);
 	writel_relaxed(err1, d->base + INT_ERR1_RAW);
 	writel_relaxed(err2, d->base + INT_ERR2_RAW);
 
@@ -359,7 +377,7 @@ static enum dma_status k3_dma_tx_status(struct dma_chan *chan,
 	 * its total size.
 	 */
 	vd = vchan_find_desc(&c->vc, cookie);
-	if (vd) {
+	if (vd && !c->cyclic) {
 		bytes = container_of(vd, struct k3_dma_desc_sw, vd)->size;
 	} else if ((!p) || (!p->ds_run)) {
 		bytes = 0;
@@ -369,7 +387,8 @@ static enum dma_status k3_dma_tx_status(struct dma_chan *chan,
 
 		bytes = k3_dma_get_curr_cnt(d, p);
 		clli = k3_dma_get_curr_lli(p);
-		index = (clli - ds->desc_hw_lli) / sizeof(struct k3_desc_hw);
+		index = ((clli - ds->desc_hw_lli) /
+				sizeof(struct k3_desc_hw)) + 1;
 		for (; index < ds->desc_num; index++) {
 			bytes += ds->desc_hw[index].count;
 			/* end of lli */
@@ -410,9 +429,10 @@ static void k3_dma_issue_pending(struct dma_chan *chan)
 static void k3_dma_fill_desc(struct k3_dma_desc_sw *ds, dma_addr_t dst,
 			dma_addr_t src, size_t len, u32 num, u32 ccfg)
 {
-	if ((num + 1) < ds->desc_num)
+	if (num != ds->desc_num - 1)
 		ds->desc_hw[num].lli = ds->desc_hw_lli + (num + 1) *
 			sizeof(struct k3_desc_hw);
+
 	ds->desc_hw[num].lli |= CX_LLI_CHAIN_EN;
 	ds->desc_hw[num].count = len;
 	ds->desc_hw[num].saddr = src;
@@ -467,6 +487,7 @@ static struct dma_async_tx_descriptor *k3_dma_prep_memcpy(
 	if (!ds)
 		return NULL;
 
+	c->cyclic = 0;
 	ds->size = len;
 	num = 0;
 
@@ -510,6 +531,8 @@ static struct dma_async_tx_descriptor *k3_dma_prep_slave_sg(
 	if (sgl == NULL)
 		return NULL;
 
+	c->cyclic = 0;
+
 	for_each_sg(sgl, sg, sglen, i) {
 		avail = sg_dma_len(sg);
 		if (avail > DMA_MAX_SIZE)
@@ -549,6 +572,73 @@ static struct dma_async_tx_descriptor *k3_dma_prep_slave_sg(
 	return vchan_tx_prep(&c->vc, &ds->vd, flags);
 }
 
+static struct dma_async_tx_descriptor *
+k3_dma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,
+		       size_t buf_len, size_t period_len,
+		       enum dma_transfer_direction dir,
+		       unsigned long flags)
+{
+	struct k3_dma_chan *c = to_k3_chan(chan);
+	struct k3_dma_desc_sw *ds;
+	size_t len, avail, total = 0;
+	dma_addr_t addr, src = 0, dst = 0;
+	int num = 1, since = 0;
+	size_t modulo = DMA_CYCLIC_MAX_PERIOD;
+	u32 en_tc2 = 0;
+
+	dev_dbg(chan->device->dev, "%s: buf %p, dst %p, buf len %d, period_len = %d, dir %d\n",
+	       __func__, (void *)buf_addr, (void *)to_k3_chan(chan)->dev_addr,
+	       (int)buf_len, (int)period_len, (int)dir);
+
+	avail = buf_len;
+	if (avail > modulo)
+		num += DIV_ROUND_UP(avail, modulo) - 1;
+
+	ds = k3_dma_alloc_desc_resource(num, chan);
+	if (!ds)
+		return NULL;
+
+	c->cyclic = 1;
+	addr = buf_addr;
+	avail = buf_len;
+	total = avail;
+	num = 0;
+
+	if (period_len < modulo)
+		modulo = period_len;
+
+	do {
+		len = min_t(size_t, avail, modulo);
+
+		if (dir == DMA_MEM_TO_DEV) {
+			src = addr;
+			dst = c->dev_addr;
+		} else if (dir == DMA_DEV_TO_MEM) {
+			src = c->dev_addr;
+			dst = addr;
+		}
+		since += len;
+		if (since >= period_len) {
+			/* descriptor asks for TC2 interrupt on completion */
+			en_tc2 = CX_CFG_NODEIRQ;
+			since -= period_len;
+		} else
+			en_tc2 = 0;
+
+		k3_dma_fill_desc(ds, dst, src, len, num++, c->ccfg | en_tc2);
+
+		addr += len;
+		avail -= len;
+	} while (avail);
+
+	/* "Cyclic" == end of link points back to start of link */
+	ds->desc_hw[num - 1].lli |= ds->desc_hw_lli;
+
+	ds->size = total;
+
+	return vchan_tx_prep(&c->vc, &ds->vd, flags);
+}
+
 static int k3_dma_config(struct dma_chan *chan,
 			 struct dma_slave_config *cfg)
 {
@@ -771,11 +861,13 @@ static int k3_dma_probe(struct platform_device *op)
 	INIT_LIST_HEAD(&d->slave.channels);
 	dma_cap_set(DMA_SLAVE, d->slave.cap_mask);
 	dma_cap_set(DMA_MEMCPY, d->slave.cap_mask);
+	dma_cap_set(DMA_CYCLIC, d->slave.cap_mask);
 	d->slave.dev = &op->dev;
 	d->slave.device_free_chan_resources = k3_dma_free_chan_resources;
 	d->slave.device_tx_status = k3_dma_tx_status;
 	d->slave.device_prep_dma_memcpy = k3_dma_prep_memcpy;
 	d->slave.device_prep_slave_sg = k3_dma_prep_slave_sg;
+	d->slave.device_prep_dma_cyclic = k3_dma_prep_dma_cyclic;
 	d->slave.device_issue_pending = k3_dma_issue_pending;
 	d->slave.device_config = k3_dma_config;
 	d->slave.device_pause = k3_dma_transfer_pause;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms
  2016-08-22 22:56 ` [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms John Stultz
@ 2016-08-23  4:23   ` kbuild test robot
  2016-08-23  4:24     ` John Stultz
  0 siblings, 1 reply; 11+ messages in thread
From: kbuild test robot @ 2016-08-23  4:23 UTC (permalink / raw)
  To: John Stultz
  Cc: kbuild-all, lkml, John Stultz, Zhangfei Gao, Krzysztof Kozlowski,
	Maxime Ripard, Vinod Koul, Dan Williams, Mark Brown, Andy Green

[-- Attachment #1: Type: text/plain, Size: 3419 bytes --]

Hi John,

[auto build test ERROR on linus/master]
[also build test ERROR on v4.8-rc3 next-20160822]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
[Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
[Check https://git-scm.com/docs/git-format-patch for more information]

url:    https://github.com/0day-ci/linux/commits/John-Stultz/K3DMA-fixes-for-HiKey-HDMI-audio/20160823-070749
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: the linux-review/John-Stultz/K3DMA-fixes-for-HiKey-HDMI-audio/20160823-070749 HEAD 1f1a623a69af65b192d7f6e2949d4a2dcf75d137 builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   drivers/dma/k3dma.c: In function 'k3_dma_prep_memcpy':
>> drivers/dma/k3dma.c:432:20: error: implicit declaration of function '__virt_to_phys' [-Werror=implicit-function-declaration]
     ds->desc_hw_lli = __virt_to_phys((unsigned long)&ds->desc_hw[0]);
                       ^~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/__virt_to_phys +432 drivers/dma/k3dma.c

8e6152bc Zhangfei Gao  2013-08-27  416  	struct dma_chan *chan,	dma_addr_t dst, dma_addr_t src,
8e6152bc Zhangfei Gao  2013-08-27  417  	size_t len, unsigned long flags)
8e6152bc Zhangfei Gao  2013-08-27  418  {
8e6152bc Zhangfei Gao  2013-08-27  419  	struct k3_dma_chan *c = to_k3_chan(chan);
8e6152bc Zhangfei Gao  2013-08-27  420  	struct k3_dma_desc_sw *ds;
8e6152bc Zhangfei Gao  2013-08-27  421  	size_t copy = 0;
8e6152bc Zhangfei Gao  2013-08-27  422  	int num = 0;
8e6152bc Zhangfei Gao  2013-08-27  423  
8e6152bc Zhangfei Gao  2013-08-27  424  	if (!len)
8e6152bc Zhangfei Gao  2013-08-27  425  		return NULL;
8e6152bc Zhangfei Gao  2013-08-27  426  
8e6152bc Zhangfei Gao  2013-08-27  427  	num = DIV_ROUND_UP(len, DMA_MAX_SIZE);
8e6152bc Zhangfei Gao  2013-08-27  428  	ds = kzalloc(sizeof(*ds) + num * sizeof(ds->desc_hw[0]), GFP_ATOMIC);
aef94fea Peter Griffin 2016-06-07  429  	if (!ds)
8e6152bc Zhangfei Gao  2013-08-27  430  		return NULL;
aef94fea Peter Griffin 2016-06-07  431  
8e6152bc Zhangfei Gao  2013-08-27 @432  	ds->desc_hw_lli = __virt_to_phys((unsigned long)&ds->desc_hw[0]);
8e6152bc Zhangfei Gao  2013-08-27  433  	ds->size = len;
8e6152bc Zhangfei Gao  2013-08-27  434  	ds->desc_num = num;
8e6152bc Zhangfei Gao  2013-08-27  435  	num = 0;
8e6152bc Zhangfei Gao  2013-08-27  436  
8e6152bc Zhangfei Gao  2013-08-27  437  	if (!c->ccfg) {
db08425e Maxime Ripard 2014-11-17  438  		/* default is memtomem, without calling device_config */
8e6152bc Zhangfei Gao  2013-08-27  439  		c->ccfg = CX_CFG_SRCINCR | CX_CFG_DSTINCR | CX_CFG_EN;
8e6152bc Zhangfei Gao  2013-08-27  440  		c->ccfg |= (0xf << 20) | (0xf << 24);	/* burst = 16 */

:::::: The code at line 432 was first introduced by commit
:::::: 8e6152bc660e69f526c6bf163ff0ebfdab90f6cf dmaengine: Add hisilicon k3 DMA engine driver

:::::: TO: Zhangfei Gao <zhangfei.gao@linaro.org>
:::::: CC: Vinod Koul <vinod.koul@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 55882 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms
  2016-08-23  4:23   ` kbuild test robot
@ 2016-08-23  4:24     ` John Stultz
  2016-08-29  8:15       ` Vinod Koul
  0 siblings, 1 reply; 11+ messages in thread
From: John Stultz @ 2016-08-23  4:24 UTC (permalink / raw)
  To: kbuild test robot
  Cc: kbuild-all, lkml, Zhangfei Gao, Krzysztof Kozlowski,
	Maxime Ripard, Vinod Koul, Dan Williams, Mark Brown, Andy Green

On Mon, Aug 22, 2016 at 9:23 PM, kbuild test robot <lkp@intel.com> wrote:
> Hi John,
>
> [auto build test ERROR on linus/master]
> [also build test ERROR on v4.8-rc3 next-20160822]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> [Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
> [Check https://git-scm.com/docs/git-format-patch for more information]
>
> url:    https://github.com/0day-ci/linux/commits/John-Stultz/K3DMA-fixes-for-HiKey-HDMI-audio/20160823-070749
> config: i386-allmodconfig (attached as .config)
> compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=i386
>
> Note: the linux-review/John-Stultz/K3DMA-fixes-for-HiKey-HDMI-audio/20160823-070749 HEAD 1f1a623a69af65b192d7f6e2949d4a2dcf75d137 builds fine.
>       It only hurts bisectibility.
>
> All errors (new ones prefixed by >>):
>
>    drivers/dma/k3dma.c: In function 'k3_dma_prep_memcpy':
>>> drivers/dma/k3dma.c:432:20: error: implicit declaration of function '__virt_to_phys' [-Werror=implicit-function-declaration]
>      ds->desc_hw_lli = __virt_to_phys((unsigned long)&ds->desc_hw[0]);
>                        ^~~~~~~~~~~~~~

Grumble.. Looks like this is due to COMPILE_TEST being enabled in the
i386 config and the Kconfig change happening before the fix to remove
__virt_to_phys from this driver.

Reordering so the Kconfig change is applied last would avoid this.

Vinod/Dan: Would you prefer I resend a new patchset with the fixed
order, or do you mind re-ordering the Kconfig change when you apply?

thanks
-john

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms
  2016-08-23  4:24     ` John Stultz
@ 2016-08-29  8:15       ` Vinod Koul
  0 siblings, 0 replies; 11+ messages in thread
From: Vinod Koul @ 2016-08-29  8:15 UTC (permalink / raw)
  To: John Stultz
  Cc: kbuild test robot, kbuild-all, lkml, Zhangfei Gao,
	Krzysztof Kozlowski, Maxime Ripard, Dan Williams, Mark Brown,
	Andy Green

On Mon, Aug 22, 2016 at 09:24:42PM -0700, John Stultz wrote:
> On Mon, Aug 22, 2016 at 9:23 PM, kbuild test robot <lkp@intel.com> wrote:
> > Hi John,
> >
> > [auto build test ERROR on linus/master]
> > [also build test ERROR on v4.8-rc3 next-20160822]
> > [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> > [Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on]
> > [Check https://git-scm.com/docs/git-format-patch for more information]
> >
> > url:    https://github.com/0day-ci/linux/commits/John-Stultz/K3DMA-fixes-for-HiKey-HDMI-audio/20160823-070749
> > config: i386-allmodconfig (attached as .config)
> > compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
> > reproduce:
> >         # save the attached .config to linux build tree
> >         make ARCH=i386
> >
> > Note: the linux-review/John-Stultz/K3DMA-fixes-for-HiKey-HDMI-audio/20160823-070749 HEAD 1f1a623a69af65b192d7f6e2949d4a2dcf75d137 builds fine.
> >       It only hurts bisectibility.
> >
> > All errors (new ones prefixed by >>):
> >
> >    drivers/dma/k3dma.c: In function 'k3_dma_prep_memcpy':
> >>> drivers/dma/k3dma.c:432:20: error: implicit declaration of function '__virt_to_phys' [-Werror=implicit-function-declaration]
> >      ds->desc_hw_lli = __virt_to_phys((unsigned long)&ds->desc_hw[0]);
> >                        ^~~~~~~~~~~~~~
> 
> Grumble.. Looks like this is due to COMPILE_TEST being enabled in the
> i386 config and the Kconfig change happening before the fix to remove
> __virt_to_phys from this driver.
> 
> Reordering so the Kconfig change is applied last would avoid this.
> 
> Vinod/Dan: Would you prefer I resend a new patchset with the fixed
> order, or do you mind re-ordering the Kconfig change when you apply?

Yes, prefer a new patchset ...

Thanks
-- 
~Vinod

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-08-29  8:07 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-22 22:56 [RESEND][PATCH 0/7 v4] K3DMA fixes for HiKey HDMI audio John Stultz
2016-08-22 22:56 ` [RESEND][PATCH 1/7 v4] Kconfig: Allow k3dma driver to be selected for more then HISI3xx platforms John Stultz
2016-08-23  4:23   ` kbuild test robot
2016-08-23  4:24     ` John Stultz
2016-08-29  8:15       ` Vinod Koul
2016-08-22 22:56 ` [RESEND][PATCH 2/7 v4] k3dma: Fix hisi burst clipping John Stultz
2016-08-22 22:56 ` [RESEND][PATCH 3/7 v4] k3dma: Fix dma err offsets John Stultz
2016-08-22 22:56 ` [RESEND][PATCH 4/7 v4] k3dma: Fix "nobody cared" message seen on any error John Stultz
2016-08-22 22:56 ` [RESEND][PATCH 5/7 v4] k3dma: Fix occasional DMA ERR issue by using proper dma api John Stultz
2016-08-22 22:56 ` [RESEND][PATCH 6/7 v4] k3dma: Fix memory handling in preparation for cyclic mode John Stultz
2016-08-22 22:56 ` [RESEND][PATCH 7/7 v4] k3dma: Add cyclic mode for audio John Stultz

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.