diff mbox

[v2,2/8] dmaengine: dw: register IRQ and DMA pool with instance ID

Message ID 20170102100049.127155-3-andriy.shevchenko@linux.intel.com (mailing list archive)
State Changes Requested
Headers show

Commit Message

Andy Shevchenko Jan. 2, 2017, 10 a.m. UTC
It is really useful not only for debugging to have an IRQ line and DMA pool
labeled with driver and its instance ID. Do this for DesignWare DMA driver.

Simultaneously enhance all current users of this IP.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/ata/sata_dwc_460ex.c          | 1 +
 drivers/dma/dw/core.c                 | 7 +++++--
 drivers/dma/dw/pci.c                  | 1 +
 drivers/dma/dw/platform.c             | 1 +
 drivers/dma/dw/regs.h                 | 1 +
 drivers/tty/serial/8250/8250_lpss.c   | 1 +
 include/linux/dma/dw.h                | 2 ++
 sound/soc/intel/common/sst-firmware.c | 9 +++++----
 8 files changed, 17 insertions(+), 6 deletions(-)

Comments

Vinod Koul Jan. 10, 2017, 5:01 a.m. UTC | #1
On Mon, Jan 02, 2017 at 12:00:43PM +0200, Andy Shevchenko wrote:
> It is really useful not only for debugging to have an IRQ line and DMA pool
> labeled with driver and its instance ID. Do this for DesignWare DMA driver.
> 
> Simultaneously enhance all current users of this IP.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  drivers/ata/sata_dwc_460ex.c          | 1 +
>  drivers/dma/dw/core.c                 | 7 +++++--
>  drivers/dma/dw/pci.c                  | 1 +
>  drivers/dma/dw/platform.c             | 1 +
>  drivers/dma/dw/regs.h                 | 1 +
>  drivers/tty/serial/8250/8250_lpss.c   | 1 +
>  include/linux/dma/dw.h                | 2 ++
>  sound/soc/intel/common/sst-firmware.c | 9 +++++----

the non DMA parts should be different patches for obvious reasons and they
should be CCed to respective mailing lists. I wont merge those without the
ACKs..

>  8 files changed, 17 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
> index e0939bd5ea73..6e9b23c933ff 100644
> --- a/drivers/ata/sata_dwc_460ex.c
> +++ b/drivers/ata/sata_dwc_460ex.c
> @@ -248,6 +248,7 @@ static int sata_dwc_dma_init_old(struct platform_device *pdev,
>  		return -ENOMEM;
>  
>  	hsdev->dma->dev = &pdev->dev;
> +	hsdev->dma->id = pdev->id;
>  
>  	/* Get SATA DMA interrupt number */
>  	hsdev->dma->irq = irq_of_parse_and_map(np, 1);
> diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
> index 45bb608a1b7c..482ca979e573 100644
> --- a/drivers/dma/dw/core.c
> +++ b/drivers/dma/dw/core.c
> @@ -1502,8 +1502,11 @@ int dw_dma_probe(struct dw_dma_chip *chip)
>  	/* Force dma off, just in case */
>  	dw_dma_off(dw);
>  
> +	/* Device and instance ID for IRQ and DMA pool */
> +	snprintf(dw->name, sizeof(dw->name), "dw_dmac.%d", chip->id);
> +
>  	/* Create a pool of consistent memory blocks for hardware descriptors */
> -	dw->desc_pool = dmam_pool_create("dw_dmac_desc_pool", chip->dev,
> +	dw->desc_pool = dmam_pool_create(dw->name, chip->dev,
>  					 sizeof(struct dw_desc), 4, 0);
>  	if (!dw->desc_pool) {
>  		dev_err(chip->dev, "No memory for descriptors dma pool\n");
> @@ -1514,7 +1517,7 @@ int dw_dma_probe(struct dw_dma_chip *chip)
>  	tasklet_init(&dw->tasklet, dw_dma_tasklet, (unsigned long)dw);
>  
>  	err = request_irq(chip->irq, dw_dma_interrupt, IRQF_SHARED,
> -			  "dw_dmac", dw);
> +			  dw->name, dw);
>  	if (err)
>  		goto err_pdata;
>  
> diff --git a/drivers/dma/dw/pci.c b/drivers/dma/dw/pci.c
> index 0ae6c3b1d34e..456b6e6c9cca 100644
> --- a/drivers/dma/dw/pci.c
> +++ b/drivers/dma/dw/pci.c
> @@ -47,6 +47,7 @@ static int dw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid)
>  		return -ENOMEM;
>  
>  	chip->dev = &pdev->dev;
> +	chip->id = pdev->devfn;
>  	chip->regs = pcim_iomap_table(pdev)[0];
>  	chip->irq = pdev->irq;
>  	chip->pdata = pdata;
> diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c
> index b1655e40cfa2..c639c60b825a 100644
> --- a/drivers/dma/dw/platform.c
> +++ b/drivers/dma/dw/platform.c
> @@ -202,6 +202,7 @@ static int dw_probe(struct platform_device *pdev)
>  		pdata = dw_dma_parse_dt(pdev);
>  
>  	chip->dev = dev;
> +	chip->id = pdev->id;
>  	chip->pdata = pdata;
>  
>  	chip->clk = devm_clk_get(chip->dev, "hclk");
> diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h
> index 4e0128c62704..6087eba2c275 100644
> --- a/drivers/dma/dw/regs.h
> +++ b/drivers/dma/dw/regs.h
> @@ -270,6 +270,7 @@ static inline struct dw_dma_chan *to_dw_dma_chan(struct dma_chan *chan)
>  
>  struct dw_dma {
>  	struct dma_device	dma;
> +	char			name[20];
>  	void __iomem		*regs;
>  	struct dma_pool		*desc_pool;
>  	struct tasklet_struct	tasklet;
> diff --git a/drivers/tty/serial/8250/8250_lpss.c b/drivers/tty/serial/8250/8250_lpss.c
> index 58cbb30a9401..bc527171380c 100644
> --- a/drivers/tty/serial/8250/8250_lpss.c
> +++ b/drivers/tty/serial/8250/8250_lpss.c
> @@ -174,6 +174,7 @@ static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port)
>  	int ret;
>  
>  	chip->dev = &pdev->dev;
> +	chip->id = pdev->devfn;
>  	chip->irq = pci_irq_vector(pdev, 0);
>  	chip->regs = pci_ioremap_bar(pdev, 1);
>  	chip->pdata = &qrk_serial_dma_pdata;
> diff --git a/include/linux/dma/dw.h b/include/linux/dma/dw.h
> index ccfd0c3777df..b63b25814d77 100644
> --- a/include/linux/dma/dw.h
> +++ b/include/linux/dma/dw.h
> @@ -23,6 +23,7 @@ struct dw_dma;
>  /**
>   * struct dw_dma_chip - representation of DesignWare DMA controller hardware
>   * @dev:		struct device of the DMA controller
> + * @id:			instance ID
>   * @irq:		irq line
>   * @regs:		memory mapped I/O space
>   * @clk:		hclk clock
> @@ -31,6 +32,7 @@ struct dw_dma;
>   */
>  struct dw_dma_chip {
>  	struct device	*dev;
> +	int		id;
>  	int		irq;
>  	void __iomem	*regs;
>  	struct clk	*clk;
> diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
> index a086c35f91bb..1e11d84405f3 100644
> --- a/sound/soc/intel/common/sst-firmware.c
> +++ b/sound/soc/intel/common/sst-firmware.c
> @@ -182,8 +182,8 @@ static int block_list_prepare(struct sst_dsp *dsp,
>  	return ret;
>  }
>  
> -static struct dw_dma_chip *dw_probe(struct device *dev, struct resource *mem,
> -	int irq)
> +static struct dw_dma_chip *dw_probe(struct device *dev, int id,
> +	struct resource *mem, int irq)
>  {
>  	struct dw_dma_chip *chip;
>  	int err;
> @@ -192,7 +192,6 @@ static struct dw_dma_chip *dw_probe(struct device *dev, struct resource *mem,
>  	if (!chip)
>  		return ERR_PTR(-ENOMEM);
>  
> -	chip->irq = irq;
>  	chip->regs = devm_ioremap_resource(dev, mem);
>  	if (IS_ERR(chip->regs))
>  		return ERR_CAST(chip->regs);
> @@ -202,6 +201,8 @@ static struct dw_dma_chip *dw_probe(struct device *dev, struct resource *mem,
>  		return ERR_PTR(err);
>  
>  	chip->dev = dev;
> +	chip->id = id;
> +	chip->irq = irq;
>  
>  	err = dw_dma_probe(chip);
>  	if (err)
> @@ -306,7 +307,7 @@ int sst_dma_new(struct sst_dsp *sst)
>  	mem.flags = IORESOURCE_MEM;
>  
>  	/* now register DMA engine device */
> -	dma->chip = dw_probe(sst->dma_dev, &mem, sst_pdata->irq);
> +	dma->chip = dw_probe(sst->dma_dev, (int)sst->id, &mem, sst_pdata->irq);
>  	if (IS_ERR(dma->chip)) {
>  		dev_err(sst->dev, "error: DMA device register failed\n");
>  		ret = PTR_ERR(dma->chip);
> -- 
> 2.11.0
>
Andy Shevchenko Jan. 10, 2017, 1:16 p.m. UTC | #2
On Tue, 2017-01-10 at 10:31 +0530, Vinod Koul wrote:
> On Mon, Jan 02, 2017 at 12:00:43PM +0200, Andy Shevchenko wrote:
> > It is really useful not only for debugging to have an IRQ line and
> > DMA pool
> > labeled with driver and its instance ID. Do this for DesignWare DMA
> > driver.
> > 
> > Simultaneously enhance all current users of this IP.
> > 
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> > ---
> >  drivers/ata/sata_dwc_460ex.c          | 1 +
> >  drivers/dma/dw/core.c                 | 7 +++++--
> >  drivers/dma/dw/pci.c                  | 1 +
> >  drivers/dma/dw/platform.c             | 1 +
> >  drivers/dma/dw/regs.h                 | 1 +
> >  drivers/tty/serial/8250/8250_lpss.c   | 1 +
> >  include/linux/dma/dw.h                | 2 ++
> >  sound/soc/intel/common/sst-firmware.c | 9 +++++----
> 
> the non DMA parts should be different patches for obvious reasons and
> they
> should be CCed to respective mailing lists. I wont merge those without
> the
> ACKs..

Okay, I will drop it from this series and will send next cycle as
separate series.

Please, confirm if you are okay with current documentation on convert
burst size code.
diff mbox

Patch

diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
index e0939bd5ea73..6e9b23c933ff 100644
--- a/drivers/ata/sata_dwc_460ex.c
+++ b/drivers/ata/sata_dwc_460ex.c
@@ -248,6 +248,7 @@  static int sata_dwc_dma_init_old(struct platform_device *pdev,
 		return -ENOMEM;
 
 	hsdev->dma->dev = &pdev->dev;
+	hsdev->dma->id = pdev->id;
 
 	/* Get SATA DMA interrupt number */
 	hsdev->dma->irq = irq_of_parse_and_map(np, 1);
diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
index 45bb608a1b7c..482ca979e573 100644
--- a/drivers/dma/dw/core.c
+++ b/drivers/dma/dw/core.c
@@ -1502,8 +1502,11 @@  int dw_dma_probe(struct dw_dma_chip *chip)
 	/* Force dma off, just in case */
 	dw_dma_off(dw);
 
+	/* Device and instance ID for IRQ and DMA pool */
+	snprintf(dw->name, sizeof(dw->name), "dw_dmac.%d", chip->id);
+
 	/* Create a pool of consistent memory blocks for hardware descriptors */
-	dw->desc_pool = dmam_pool_create("dw_dmac_desc_pool", chip->dev,
+	dw->desc_pool = dmam_pool_create(dw->name, chip->dev,
 					 sizeof(struct dw_desc), 4, 0);
 	if (!dw->desc_pool) {
 		dev_err(chip->dev, "No memory for descriptors dma pool\n");
@@ -1514,7 +1517,7 @@  int dw_dma_probe(struct dw_dma_chip *chip)
 	tasklet_init(&dw->tasklet, dw_dma_tasklet, (unsigned long)dw);
 
 	err = request_irq(chip->irq, dw_dma_interrupt, IRQF_SHARED,
-			  "dw_dmac", dw);
+			  dw->name, dw);
 	if (err)
 		goto err_pdata;
 
diff --git a/drivers/dma/dw/pci.c b/drivers/dma/dw/pci.c
index 0ae6c3b1d34e..456b6e6c9cca 100644
--- a/drivers/dma/dw/pci.c
+++ b/drivers/dma/dw/pci.c
@@ -47,6 +47,7 @@  static int dw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pid)
 		return -ENOMEM;
 
 	chip->dev = &pdev->dev;
+	chip->id = pdev->devfn;
 	chip->regs = pcim_iomap_table(pdev)[0];
 	chip->irq = pdev->irq;
 	chip->pdata = pdata;
diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c
index b1655e40cfa2..c639c60b825a 100644
--- a/drivers/dma/dw/platform.c
+++ b/drivers/dma/dw/platform.c
@@ -202,6 +202,7 @@  static int dw_probe(struct platform_device *pdev)
 		pdata = dw_dma_parse_dt(pdev);
 
 	chip->dev = dev;
+	chip->id = pdev->id;
 	chip->pdata = pdata;
 
 	chip->clk = devm_clk_get(chip->dev, "hclk");
diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h
index 4e0128c62704..6087eba2c275 100644
--- a/drivers/dma/dw/regs.h
+++ b/drivers/dma/dw/regs.h
@@ -270,6 +270,7 @@  static inline struct dw_dma_chan *to_dw_dma_chan(struct dma_chan *chan)
 
 struct dw_dma {
 	struct dma_device	dma;
+	char			name[20];
 	void __iomem		*regs;
 	struct dma_pool		*desc_pool;
 	struct tasklet_struct	tasklet;
diff --git a/drivers/tty/serial/8250/8250_lpss.c b/drivers/tty/serial/8250/8250_lpss.c
index 58cbb30a9401..bc527171380c 100644
--- a/drivers/tty/serial/8250/8250_lpss.c
+++ b/drivers/tty/serial/8250/8250_lpss.c
@@ -174,6 +174,7 @@  static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port)
 	int ret;
 
 	chip->dev = &pdev->dev;
+	chip->id = pdev->devfn;
 	chip->irq = pci_irq_vector(pdev, 0);
 	chip->regs = pci_ioremap_bar(pdev, 1);
 	chip->pdata = &qrk_serial_dma_pdata;
diff --git a/include/linux/dma/dw.h b/include/linux/dma/dw.h
index ccfd0c3777df..b63b25814d77 100644
--- a/include/linux/dma/dw.h
+++ b/include/linux/dma/dw.h
@@ -23,6 +23,7 @@  struct dw_dma;
 /**
  * struct dw_dma_chip - representation of DesignWare DMA controller hardware
  * @dev:		struct device of the DMA controller
+ * @id:			instance ID
  * @irq:		irq line
  * @regs:		memory mapped I/O space
  * @clk:		hclk clock
@@ -31,6 +32,7 @@  struct dw_dma;
  */
 struct dw_dma_chip {
 	struct device	*dev;
+	int		id;
 	int		irq;
 	void __iomem	*regs;
 	struct clk	*clk;
diff --git a/sound/soc/intel/common/sst-firmware.c b/sound/soc/intel/common/sst-firmware.c
index a086c35f91bb..1e11d84405f3 100644
--- a/sound/soc/intel/common/sst-firmware.c
+++ b/sound/soc/intel/common/sst-firmware.c
@@ -182,8 +182,8 @@  static int block_list_prepare(struct sst_dsp *dsp,
 	return ret;
 }
 
-static struct dw_dma_chip *dw_probe(struct device *dev, struct resource *mem,
-	int irq)
+static struct dw_dma_chip *dw_probe(struct device *dev, int id,
+	struct resource *mem, int irq)
 {
 	struct dw_dma_chip *chip;
 	int err;
@@ -192,7 +192,6 @@  static struct dw_dma_chip *dw_probe(struct device *dev, struct resource *mem,
 	if (!chip)
 		return ERR_PTR(-ENOMEM);
 
-	chip->irq = irq;
 	chip->regs = devm_ioremap_resource(dev, mem);
 	if (IS_ERR(chip->regs))
 		return ERR_CAST(chip->regs);
@@ -202,6 +201,8 @@  static struct dw_dma_chip *dw_probe(struct device *dev, struct resource *mem,
 		return ERR_PTR(err);
 
 	chip->dev = dev;
+	chip->id = id;
+	chip->irq = irq;
 
 	err = dw_dma_probe(chip);
 	if (err)
@@ -306,7 +307,7 @@  int sst_dma_new(struct sst_dsp *sst)
 	mem.flags = IORESOURCE_MEM;
 
 	/* now register DMA engine device */
-	dma->chip = dw_probe(sst->dma_dev, &mem, sst_pdata->irq);
+	dma->chip = dw_probe(sst->dma_dev, (int)sst->id, &mem, sst_pdata->irq);
 	if (IS_ERR(dma->chip)) {
 		dev_err(sst->dev, "error: DMA device register failed\n");
 		ret = PTR_ERR(dma->chip);