On 5 July 2018 at 23:56, Paul Cercueil <paul@xxxxxxxxxxxxxxx> wrote: > Hi PrasannaKumar, > > >> Hi Paul, >> >> On 3 July 2018 at 18:02, Paul Cercueil <paul@xxxxxxxxxxxxxxx> wrote: >>> >>> As part of the work to support various other Ingenic JZ47xx SoC >>> versions, >>> which don't feature the same number of DMA channels per core, we now >>> deduce the number of DMA channels available from the devicetree >>> compatible string. >>> >>> Signed-off-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx> >>> --- >>> drivers/dma/dma-jz4780.c | 53 +++++++++++++++++++++++++++++----------- >>> 1 file changed, 39 insertions(+), 14 deletions(-) >>> >>> diff --git a/drivers/dma/dma-jz4780.c b/drivers/dma/dma-jz4780.c >>> index 85820a2d69d4..b40f491f0367 100644 >>> --- a/drivers/dma/dma-jz4780.c >>> +++ b/drivers/dma/dma-jz4780.c >>> @@ -16,6 +16,7 @@ >>> #include <linux/interrupt.h> >>> #include <linux/module.h> >>> #include <linux/of.h> >>> +#include <linux/of_device.h> >>> #include <linux/of_dma.h> >>> #include <linux/platform_device.h> >>> #include <linux/slab.h> >>> @@ -23,8 +24,6 @@ >>> #include "dmaengine.h" >>> #include "virt-dma.h" >>> >>> -#define JZ_DMA_NR_CHANNELS 32 >>> - >>> /* Global registers. */ >>> #define JZ_DMA_REG_DMAC 0x1000 >>> #define JZ_DMA_REG_DIRQP 0x1004 >>> @@ -135,14 +134,20 @@ struct jz4780_dma_chan { >>> unsigned int curr_hwdesc; >>> }; >>> >>> +enum jz_version { >>> + ID_JZ4780, >>> +}; >>> + >>> struct jz4780_dma_dev { >>> struct dma_device dma_device; >>> void __iomem *base; >>> struct clk *clk; >>> unsigned int irq; >>> + unsigned int nb_channels; >>> + enum jz_version version; >>> >>> uint32_t chan_reserved; >>> - struct jz4780_dma_chan chan[JZ_DMA_NR_CHANNELS]; >>> + struct jz4780_dma_chan chan[]; >> >> >> Looks like a variable length array in struct. I think there is some >> effort to remove the usage of VLA. Can you revisit this? I may be >> wrong, please feel free to correct. > > > Are you sure? It's the first time I hear about it. > Could anybody confirm? Please see [1] for info. Variable Length Arrays in struct is expressly forbidden in C99, C11. Clang does not support it. To make kernel compile with Clang few people are trying to remove/reduce VLAIS usage. 1. https://blog.linuxplumbersconf.org/2013/ocw/system/presentations/1221/original/VLAIS.pdf -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html