• Markos Chandras's avatar
    mmc: dw_mmc: Handle unaligned data submission correctly · cfbeb59c
    Markos Chandras authored
    Commit f9c2a0dc
    "mmc: dw_mmc: Fix PIO mode with support of highmem" introduced
    a regression since v3.2 making the mmc_test hang on test #13
    with a "Data starvation by host timeout" interrupt.
    
    This is because, sg_mapping_iter is used to iterate through the
    data which spans on multiple pages. The problem is detected on
    unaligned data submission where the code previously checked for
    !(sg_next(host->sg)) which is true because we only have a single
    scatter/gather list which then expands to multiple pages.
    Therefore, the driver incorrectly assumed that this was the last
    list item and submitted unaligned data to the mmc device. This
    overflowed the FIFO on the device before all the data were written
    to it. The code was fixed to only submit unaligned data when we are
    handling the last sg_miter item by checking whether we reached
    the desired data length or not.
    
    The patch was tested against mmc_test and all the tests passed.
    Signed-off-by: default avatarMarkos Chandras <markos.chandras@imgtec.com>
    Acked-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
    Acked-by: default avatarSeungwon Jeon <tgih.jun@samsung.com>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    cfbeb59c
dw_mmc.c 61 KB