]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
dmaengine: sun6i: Fix impossible settings of burst and bus width
authorJean-Francois Moine <moinejf@free.fr>
Fri, 22 Apr 2016 06:17:14 +0000 (08:17 +0200)
committerVinod Koul <vinod.koul@intel.com>
Tue, 26 Apr 2016 03:39:28 +0000 (09:09 +0530)
In the commit 1f9cd915b64bb95f ("dmaengine: sun6i: Fix memcpy operation"),
the signed values returned by convert_burst() and convert_buswidth()
were stored in an unsigned value.
Then, these values were considered as errors when non null.

As a result, DMA transfers were rejected when the burst or buswidth
had values different from 1, as 8 for the burst or 4 for the bus width.

Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/sun6i-dma.c

index 2ec320dc68b3df3f991c5a7f5e5eb6514ab9b203..3579ee74132926a0b64f423a5ed23bbb9cf04141 100644 (file)
@@ -281,25 +281,25 @@ static inline int sun6i_dma_cfg_lli(struct sun6i_dma_lli *lli,
                                    dma_addr_t dst, u32 len,
                                    struct dma_slave_config *config)
 {
-       u8 src_width, dst_width, src_burst, dst_burst;
+       s8 src_width, dst_width, src_burst, dst_burst;
 
        if (!config)
                return -EINVAL;
 
        src_burst = convert_burst(config->src_maxburst);
-       if (src_burst)
+       if (src_burst < 0)
                return src_burst;
 
        dst_burst = convert_burst(config->dst_maxburst);
-       if (dst_burst)
+       if (dst_burst < 0)
                return dst_burst;
 
        src_width = convert_buswidth(config->src_addr_width);
-       if (src_width)
+       if (src_width < 0)
                return src_width;
 
        dst_width = convert_buswidth(config->dst_addr_width);
-       if (dst_width)
+       if (dst_width < 0)
                return dst_width;
 
        lli->cfg = DMA_CHAN_CFG_SRC_BURST(src_burst) |