Re: [PATCH 4/6] dmaengine: pl330: add new items for pl330 private data
On Mon, Jan 4, 2016 at 7:31 AM, Wang Hongcheng wrote: > mcbuf_sz means bytes to allocate for MicroCode buffer. > flags is for irq sharing, default is non-shared, in AMD > Carrizo, pl330 shares IRQ with its corresponding UART device. > > Signed-off-by: Wang Hongcheng > --- > drivers/acpi/acpi_apd.c| 17 + > drivers/dma/pl330.c| 9 - > include/linux/amba/pl330.h | 2 ++ > 3 files changed, 27 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c > index 9520daf..4d71a65 100644 > --- a/drivers/acpi/acpi_apd.c > +++ b/drivers/acpi/acpi_apd.c > @@ -20,6 +20,9 @@ > #include > #include > #include > +#include > +#include > +#include > > #include "internal.h" > > @@ -33,6 +36,14 @@ struct apd_private_data; > #define ACPI_APD_SYSFS BIT(0) > #define ACPI_APD_PMBIT(1) > > +static u8 peri_id[2] = { 0, 1 }; > + > +static struct dma_pl330_platdata amd_pl330 = { > + .nr_valid_peri = 2, > + .peri_id = peri_id, > + .mcbuf_sz = 0, > + .flags = IRQF_SHARED, > +}; > /** > * struct apd_device_desc - a descriptor for apd device > * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM > @@ -150,6 +161,12 @@ static int acpi_apd_setup_quirks(struct apd_private_data > *pdata) > goto amba_register_err; > > kfree(resource); > + > + dma_cap_set(DMA_MEMCPY, amd_pl330.cap_mask); > + dma_cap_set(DMA_SLAVE, amd_pl330.cap_mask); > + dma_cap_set(DMA_CYCLIC, amd_pl330.cap_mask); > + dma_cap_set(DMA_PRIVATE, amd_pl330.cap_mask); > + > return 0; > > amba_register_err: > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > index 17ee758..5e5fb46 100644 > --- a/drivers/dma/pl330.c > +++ b/drivers/dma/pl330.c > @@ -26,6 +26,8 @@ > #include > #include > #include > +#include > +#include > #include > #include > > @@ -488,6 +490,9 @@ struct pl330_dmac { > /* Peripheral channels connected to this DMAC */ > unsigned int num_peripherals; > struct dma_pl330_chan *peripherals; /* keep at end */ > + > + /*IRQ register flags */ +Space '/* ' > + unsigned int flags; irq_flags > }; > > struct dma_pl330_desc { > @@ -2800,6 +2805,8 @@ pl330_probe(struct amba_device *adev, const struct > amba_id *id) > > pl330->mcbufsz = pdat ? pdat->mcbuf_sz : 0; > > + pl330->flags = pdat ? pdat->flags : IRQF_TRIGGER_NONE; > + > res = &adev->res; > pl330->base = devm_ioremap_resource(&adev->dev, res); > if (IS_ERR(pl330->base)) > @@ -2811,7 +2818,7 @@ pl330_probe(struct amba_device *adev, const struct > amba_id *id) > irq = adev->irq[i]; > if (irq) { > ret = devm_request_irq(&adev->dev, irq, > - pl330_irq_handler, 0, > + pl330_irq_handler, > pl330->flags, >dev_name(&adev->dev), pl330); > if (ret) > return ret; > diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h > index fe93758..cdc80f0 100644 > --- a/include/linux/amba/pl330.h > +++ b/include/linux/amba/pl330.h > @@ -29,6 +29,8 @@ struct dma_pl330_platdata { > dma_cap_mask_t cap_mask; > /* Bytes to allocate for MC buffer */ > unsigned mcbuf_sz; > + /*flags for irq sharing, default is non-shared*/ Spaces '/* */' > + unsigned flags; irq_flags > }; > > extern bool pl330_filter(struct dma_chan *chan, void *param); > -- > 1.9.1 > -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 4/6] dmaengine: pl330: add new items for pl330 private data
Hi Wang, [auto build test WARNING on v4.4-rc8] [cannot apply to tty/tty-testing pm/linux-next next-20151231] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Wang-Hongcheng/8250-AMD-Carrizo-UART-PL300-DMA-enablement/20160104-133639 config: x86_64-randconfig-x013-01040119 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All warnings (new ones prefixed by >>): >> drivers/acpi/acpi_apd.c:41:34: warning: 'amd_pl330' defined but not used >> [-Wunused-variable] static struct dma_pl330_platdata amd_pl330 = { ^ vim +/amd_pl330 +41 drivers/acpi/acpi_apd.c 25 #include 26 27 #include "internal.h" 28 29 ACPI_MODULE_NAME("acpi_apd"); 30 struct apd_private_data; 31 32 /** 33 * ACPI_APD_SYSFS : add device attributes in sysfs 34 * ACPI_APD_PM : attach power domain to device 35 */ 36 #define ACPI_APD_SYSFS BIT(0) 37 #define ACPI_APD_PM BIT(1) 38 39 static u8 peri_id[2] = { 0, 1 }; 40 > 41 static struct dma_pl330_platdata amd_pl330 = { 42 .nr_valid_peri = 2, 43 .peri_id = peri_id, 44 .mcbuf_sz = 0, 45 .flags = IRQF_SHARED, 46 }; 47 /** 48 * struct apd_device_desc - a descriptor for apd device 49 * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
[PATCH 4/6] dmaengine: pl330: add new items for pl330 private data
mcbuf_sz means bytes to allocate for MicroCode buffer. flags is for irq sharing, default is non-shared, in AMD Carrizo, pl330 shares IRQ with its corresponding UART device. Signed-off-by: Wang Hongcheng --- drivers/acpi/acpi_apd.c| 17 + drivers/dma/pl330.c| 9 - include/linux/amba/pl330.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c index 9520daf..4d71a65 100644 --- a/drivers/acpi/acpi_apd.c +++ b/drivers/acpi/acpi_apd.c @@ -20,6 +20,9 @@ #include #include #include +#include +#include +#include #include "internal.h" @@ -33,6 +36,14 @@ struct apd_private_data; #define ACPI_APD_SYSFS BIT(0) #define ACPI_APD_PMBIT(1) +static u8 peri_id[2] = { 0, 1 }; + +static struct dma_pl330_platdata amd_pl330 = { + .nr_valid_peri = 2, + .peri_id = peri_id, + .mcbuf_sz = 0, + .flags = IRQF_SHARED, +}; /** * struct apd_device_desc - a descriptor for apd device * @flags: device flags like %ACPI_APD_SYSFS, %ACPI_APD_PM @@ -150,6 +161,12 @@ static int acpi_apd_setup_quirks(struct apd_private_data *pdata) goto amba_register_err; kfree(resource); + + dma_cap_set(DMA_MEMCPY, amd_pl330.cap_mask); + dma_cap_set(DMA_SLAVE, amd_pl330.cap_mask); + dma_cap_set(DMA_CYCLIC, amd_pl330.cap_mask); + dma_cap_set(DMA_PRIVATE, amd_pl330.cap_mask); + return 0; amba_register_err: diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 17ee758..5e5fb46 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -26,6 +26,8 @@ #include #include #include +#include +#include #include #include @@ -488,6 +490,9 @@ struct pl330_dmac { /* Peripheral channels connected to this DMAC */ unsigned int num_peripherals; struct dma_pl330_chan *peripherals; /* keep at end */ + + /*IRQ register flags */ + unsigned int flags; }; struct dma_pl330_desc { @@ -2800,6 +2805,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) pl330->mcbufsz = pdat ? pdat->mcbuf_sz : 0; + pl330->flags = pdat ? pdat->flags : IRQF_TRIGGER_NONE; + res = &adev->res; pl330->base = devm_ioremap_resource(&adev->dev, res); if (IS_ERR(pl330->base)) @@ -2811,7 +2818,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) irq = adev->irq[i]; if (irq) { ret = devm_request_irq(&adev->dev, irq, - pl330_irq_handler, 0, + pl330_irq_handler, pl330->flags, dev_name(&adev->dev), pl330); if (ret) return ret; diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h index fe93758..cdc80f0 100644 --- a/include/linux/amba/pl330.h +++ b/include/linux/amba/pl330.h @@ -29,6 +29,8 @@ struct dma_pl330_platdata { dma_cap_mask_t cap_mask; /* Bytes to allocate for MC buffer */ unsigned mcbuf_sz; + /*flags for irq sharing, default is non-shared*/ + unsigned flags; }; extern bool pl330_filter(struct dma_chan *chan, void *param); -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/