dmaengine: hidma: In hidma_prep_dma_memset treat value as a single byte
authorBen Walker <benjamin.walker@intel.com>
Tue, 1 Mar 2022 18:25:51 +0000 (11:25 -0700)
committerVinod Koul <vkoul@kernel.org>
Wed, 20 Apr 2022 11:58:12 +0000 (17:28 +0530)
The value parameter is a single byte, so duplicate it to the 8 byte
range that is used as the pattern.

Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Cc: Sinan Kaya <okaya@kernel.org>
Link: https://lore.kernel.org/r/20220301182551.883474-5-benjamin.walker@intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/qcom/hidma.c

index 51587cf..210f1a9 100644 (file)
@@ -431,6 +431,7 @@ hidma_prep_dma_memset(struct dma_chan *dmach, dma_addr_t dest, int value,
        struct hidma_desc *mdesc = NULL;
        struct hidma_dev *mdma = mchan->dmadev;
        unsigned long irqflags;
+       u64 byte_pattern, fill_pattern;
 
        /* Get free descriptor */
        spin_lock_irqsave(&mchan->lock, irqflags);
@@ -443,9 +444,19 @@ hidma_prep_dma_memset(struct dma_chan *dmach, dma_addr_t dest, int value,
        if (!mdesc)
                return NULL;
 
+       byte_pattern = (char)value;
+       fill_pattern =  (byte_pattern << 56) |
+                       (byte_pattern << 48) |
+                       (byte_pattern << 40) |
+                       (byte_pattern << 32) |
+                       (byte_pattern << 24) |
+                       (byte_pattern << 16) |
+                       (byte_pattern << 8) |
+                       byte_pattern;
+
        mdesc->desc.flags = flags;
        hidma_ll_set_transfer_params(mdma->lldev, mdesc->tre_ch,
-                                    value, dest, len, flags,
+                                    fill_pattern, dest, len, flags,
                                     HIDMA_TRE_MEMSET);
 
        /* Place descriptor in prepared list */