• M
    mmc: dw_mmc: Handle unaligned data submission correctly · cfbeb59c
    Markos Chandras 提交于
    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: NMarkos Chandras <markos.chandras@imgtec.com>
    Acked-by: NJaehoon Chung <jh80.chung@samsung.com>
    Acked-by: NSeungwon Jeon <tgih.jun@samsung.com>
    Signed-off-by: NChris Ball <cjb@laptop.org>
    cfbeb59c
dw_mmc.c 61.0 KB