Message ID | 8b0e3c36-850c-4211-b647-b03143be67f7@rwthex-w2-a.rwth-ad.de |
---|---|
State | New |
Headers | show |
Series | [v3,01/10] dmaengine: sun6i: Correct setting of clock autogating register for A83T/H3 | expand |
Hi Stefan, [auto build test ERROR on next-20170926] [also build test ERROR on v4.14-rc2] [cannot apply to linus/master robh/for-next v4.14-rc2 v4.14-rc1 v4.13] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Stefan-Br-ns/dmaengine-sun6i-Correct-setting-of-clock-autogating-register-for-A83T-H3/20170927-021533 config: xtensa-allmodconfig (attached as .config) compiler: xtensa-linux-gcc (GCC) 4.9.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=xtensa All errors (new ones prefixed by >>): >> drivers//dma/sun6i-dma.c:117:2: error: function declaration isn't a prototype [-Werror=strict-prototypes] void (*clock_autogate_enable)(); ^ >> drivers//dma/sun6i-dma.c:1036:58: error: expected '}' before ';' token .clock_autogate_enable = sun6i_enable_clock_autogate_a23; ^ drivers//dma/sun6i-dma.c:1043:58: error: expected '}' before ';' token .clock_autogate_enable = sun6i_enable_clock_autogate_a23; ^ drivers//dma/sun6i-dma.c:1057:57: error: expected '}' before ';' token .clock_autogate_enable = sun6i_enable_clock_autogate_h3; ^ drivers//dma/sun6i-dma.c:1069:58: error: expected '}' before ';' token .clock_autogate_enable = sun6i_enable_clock_autogate_a23; ^ cc1: some warnings being treated as errors vim +117 drivers//dma/sun6i-dma.c 95 96 /* 97 * Hardware channels / ports representation 98 * 99 * The hardware is used in several SoCs, with differing numbers 100 * of channels and endpoints. This structure ties those numbers 101 * to a certain compatible string. 102 */ 103 struct sun6i_dma_config { 104 u32 nr_max_channels; 105 u32 nr_max_requests; 106 u32 nr_max_vchans; 107 /* 108 * In the datasheets/user manuals of newer Allwinner SoCs, a special 109 * bit (bit 2 at register 0x20) is present. 110 * It's named "DMA MCLK interface circuit auto gating bit" in the 111 * documents, and the footnote of this register says that this bit 112 * should be set up when initializing the DMA controller. 113 * Allwinner A23/A33 user manuals do not have this bit documented, 114 * however these SoCs really have and need this bit, as seen in the 115 * BSP kernel source code. 116 */ > 117 void (*clock_autogate_enable)(); 118 }; 119 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index bcd496edc70f..b4a29d1a100d 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -48,6 +48,9 @@ #define SUN8I_DMA_GATE 0x20 #define SUN8I_DMA_GATE_ENABLE 0x4 +#define SUNXI_H3_SECURE_REG 0x20 +#define SUNXI_H3_DMA_GATE 0x28 +#define SUNXI_H3_DMA_GATE_ENABLE 0x4 /* * Channels specific registers */ @@ -111,7 +114,7 @@ struct sun6i_dma_config { * however these SoCs really have and need this bit, as seen in the * BSP kernel source code. */ - bool gate_needed; + void (*clock_autogate_enable)(); }; /* @@ -267,6 +270,16 @@ static inline s8 convert_buswidth(enum dma_slave_buswidth addr_width) return addr_width >> 1; } +static void sun6i_enable_clock_autogate_a23(struct sun6i_dma_dev *sdev) +{ + writel(SUN8I_DMA_GATE_ENABLE, sdev->base + SUN8I_DMA_GATE); +} + +static void sun6i_enable_clock_autogate_h3(struct sun6i_dma_dev *sdev) +{ + writel(SUNXI_H3_DMA_GATE_ENABLE, sdev->base + SUNXI_H3_DMA_GATE); +} + static size_t sun6i_get_chan_size(struct sun6i_pchan *pchan) { struct sun6i_desc *txd = pchan->desc; @@ -1020,24 +1033,28 @@ static struct sun6i_dma_config sun8i_a23_dma_cfg = { .nr_max_channels = 8, .nr_max_requests = 24, .nr_max_vchans = 37, - .gate_needed = true, + .clock_autogate_enable = sun6i_enable_clock_autogate_a23; }; static struct sun6i_dma_config sun8i_a83t_dma_cfg = { .nr_max_channels = 8, .nr_max_requests = 28, .nr_max_vchans = 39, + .clock_autogate_enable = sun6i_enable_clock_autogate_a23; }; /* * The H3 has 12 physical channels, a maximum DRQ port id of 27, * and a total of 34 usable source and destination endpoints. + * It also supports additional burst lengths and bus widths, + * and the burst length fields have different offsets. */ static struct sun6i_dma_config sun8i_h3_dma_cfg = { .nr_max_channels = 12, .nr_max_requests = 27, .nr_max_vchans = 34, + .clock_autogate_enable = sun6i_enable_clock_autogate_h3; }; /* @@ -1049,7 +1066,7 @@ static struct sun6i_dma_config sun8i_v3s_dma_cfg = { .nr_max_channels = 8, .nr_max_requests = 23, .nr_max_vchans = 24, - .gate_needed = true, + .clock_autogate_enable = sun6i_enable_clock_autogate_a23; }; static const struct of_device_id sun6i_dma_match[] = { @@ -1199,8 +1216,8 @@ static int sun6i_dma_probe(struct platform_device *pdev) goto err_dma_unregister; } - if (sdc->cfg->gate_needed) - writel(SUN8I_DMA_GATE_ENABLE, sdc->base + SUN8I_DMA_GATE); + if (sdc->cfg->clock_autogate_enable) + sdc->cfg->clock_autogate_enable(); return 0;