mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
dma: fsl_raid: convert descriptor stores to big-endian
The descriptor structs (fsl_re_cmpnd_frame / fsl_re_hw_desc) are in-memory but their fields are __be32, because the structures are handed to the device as big-endian. The driver stored CPU-endian u32 values into them directly, which is both wrong (the engine would see byte-swapped lengths/addresses) and flagged by sparse as a base-type mismatch. Wrap those stores in cpu_to_be32() so the values are little->big converted. Reported-by: kernel test robot <lkp@intel.com> Link: https://lore.kernel.org/oe-kbuild-all/202008111749.yy85rFMD%25lkp@intel.com/ Assisted-by: opencode:hy3-free Signed-off-by: Rosen Penev <rosenp@gmail.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Link: https://patch.msgid.link/20260716202949.677290-2-rosenp@gmail.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
64173b6b76
commit
faa4ddedab
|
|
@ -242,9 +242,9 @@ static void fill_cfd_frame(struct fsl_re_cmpnd_frame *cf, u8 index,
|
|||
u32 efrl = length & FSL_RE_CF_LENGTH_MASK;
|
||||
|
||||
efrl |= final << FSL_RE_CF_FINAL_SHIFT;
|
||||
cf[index].efrl32 = efrl;
|
||||
cf[index].addr_high = upper_32_bits(addr);
|
||||
cf[index].addr_low = lower_32_bits(addr);
|
||||
cf[index].efrl32 = cpu_to_be32(efrl);
|
||||
cf[index].addr_high = cpu_to_be32(upper_32_bits(addr));
|
||||
cf[index].addr_low = cpu_to_be32(lower_32_bits(addr));
|
||||
}
|
||||
|
||||
static struct fsl_re_desc *fsl_re_init_desc(struct fsl_re_chan *re_chan,
|
||||
|
|
@ -256,9 +256,10 @@ static struct fsl_re_desc *fsl_re_init_desc(struct fsl_re_chan *re_chan,
|
|||
dma_async_tx_descriptor_init(&desc->async_tx, &re_chan->chan);
|
||||
INIT_LIST_HEAD(&desc->node);
|
||||
|
||||
desc->hwdesc.fmt32 = FSL_RE_FRAME_FORMAT << FSL_RE_HWDESC_FMT_SHIFT;
|
||||
desc->hwdesc.lbea32 = upper_32_bits(paddr);
|
||||
desc->hwdesc.addr_low = lower_32_bits(paddr);
|
||||
desc->hwdesc.fmt32 = cpu_to_be32(FSL_RE_FRAME_FORMAT <<
|
||||
FSL_RE_HWDESC_FMT_SHIFT);
|
||||
desc->hwdesc.lbea32 = cpu_to_be32(upper_32_bits(paddr));
|
||||
desc->hwdesc.addr_low = cpu_to_be32(lower_32_bits(paddr));
|
||||
desc->cf_addr = cf;
|
||||
desc->cf_paddr = paddr;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user