• James Hogan's avatar
    mmc: dw_mmc: handle unaligned buffers and sizes · 34b664a2
    James Hogan authored
    Update functions for PIO pushing and pulling data to and from the FIFO
    so that they can handle unaligned output buffers and unaligned buffer
    lengths. This makes more of the tests in mmc_test pass.
    
    Unaligned lengths in pulls are handled by reading the full FIFO item,
    and storing the remaining bytes in a small internal buffer (part_buf).
    The next data pull will copy data out of this buffer first before
    accessing the FIFO again. Similarly, for pushes the final bytes that
    don't fill a FIFO item are stored in the part_buf (or sent anyway if
    it's the last transfer), and then the part_buf is included at the
    beginning of the next buffer pushed.
    
    Unaligned buffers in pulls are handled specially if the architecture
    cannot do efficient unaligned accesses, by reading FIFO items into a
    aligned local buffer, and memcpy'ing them into the output buffer, again
    storing any remaining bytes in the internal buffer. Similarly for pushes
    the buffer is memcpy'd into an aligned local buffer then written to the
    FIFO.
    Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
    Acked-by: default avatarWill Newton <will.newton@imgtec.com>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    34b664a2
dw_mmc.c 50.4 KB