dmaengine: dw-edma: Fix unaligned 64bit access
[platform/kernel/linux-rpi.git] / drivers / dma / dw-edma / dw-edma-v0-core.c
index 329fc2e..b5b8f81 100644 (file)
@@ -415,8 +415,11 @@ void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first)
                          (DW_EDMA_V0_CCS | DW_EDMA_V0_LLE));
                /* Linked list */
                #ifdef CONFIG_64BIT
                          (DW_EDMA_V0_CCS | DW_EDMA_V0_LLE));
                /* Linked list */
                #ifdef CONFIG_64BIT
-                       SET_CH_64(dw, chan->dir, chan->id, llp.reg,
-                                 chunk->ll_region.paddr);
+                       /* llp is not aligned on 64bit -> keep 32bit accesses */
+                       SET_CH_32(dw, chan->dir, chan->id, llp.lsb,
+                                 lower_32_bits(chunk->ll_region.paddr));
+                       SET_CH_32(dw, chan->dir, chan->id, llp.msb,
+                                 upper_32_bits(chunk->ll_region.paddr));
                #else /* CONFIG_64BIT */
                        SET_CH_32(dw, chan->dir, chan->id, llp.lsb,
                                  lower_32_bits(chunk->ll_region.paddr));
                #else /* CONFIG_64BIT */
                        SET_CH_32(dw, chan->dir, chan->id, llp.lsb,
                                  lower_32_bits(chunk->ll_region.paddr));