• Viresh Kumar's avatar
    dmaengine/amba-pl08x: Align lli_len to max(src.width, dst.width) · e0719165
    Viresh Kumar authored
    Currently lli_len is aligned to min of two widths, which looks to be incorrect.
    Instead it should be aligned to max of both widths.
    
    Lets say, total_size = 441 bytes
    
    MIN: lets check if min() suits or not:
    
    CASE 1: srcwidth = 1, dstwidth = 4
    min(src, dst) = 1
    
    i.e. We program transfer size in control reg to 441.
    Now, till 440 bytes everything is fine, but on the last byte DMAC can't transfer
    1 byte to dst, as its width is 4.
    
    CASE 2: srcwidth = 4, dstwidth = 1
    min(src, dst) = 1
    
    i.e. we program transfer size in control reg to 110 (data transferred = 110 * srcwidth).
    So, here too 1 byte is left, but on the source side.
    
    MAX: Lets check if max() suits or not:
    
    CASE 3: srcwidth = 1, dstwidth = 4
    max(src, dst) = 4
    
    Aligned size is 440
    
    i.e. We program transfer size in control reg to 440.
    Now, all 440 bytes will be transferred without any issues.
    
    CASE 4: srcwidth = 4, dstwidth = 1
    max(src, dst) = 4
    
    Aligned size is 440
    
    i.e. We program transfer size in control reg to 110 (data transferred = 110 * srcwidth).
    Now, also all 440 bytes will be transferred without any issues.
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@st.com>
    Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
    Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
    e0719165
amba-pl08x.c 51.3 KB