Skip to content

Commit 4ea07ab

Browse files
committed
Merge tag 'mmc-v4.19-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
Ulf writes: "MMC core: - Avoid fragile multiblock reads for the last sector in SPI mode WIFI/SDIO: - libertas: Fixup suspend sequence for the SDIO card" * tag 'mmc-v4.19-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: libertas: call into generic suspend code before turning off power mmc: block: avoid multiblock reads for the last sector in SPI mode
2 parents 60bd7be + 4f66667 commit 4ea07ab

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

drivers/mmc/core/block.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1370,6 +1370,16 @@ static void mmc_blk_data_prep(struct mmc_queue *mq, struct mmc_queue_req *mqrq,
13701370
brq->data.blocks = card->host->max_blk_count;
13711371

13721372
if (brq->data.blocks > 1) {
1373+
/*
1374+
* Some SD cards in SPI mode return a CRC error or even lock up
1375+
* completely when trying to read the last block using a
1376+
* multiblock read command.
1377+
*/
1378+
if (mmc_host_is_spi(card->host) && (rq_data_dir(req) == READ) &&
1379+
(blk_rq_pos(req) + blk_rq_sectors(req) ==
1380+
get_capacity(md->disk)))
1381+
brq->data.blocks--;
1382+
13731383
/*
13741384
* After a read error, we redo the request one sector
13751385
* at a time in order to accurately determine which

drivers/net/wireless/marvell/libertas/if_sdio.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,6 +1317,10 @@ static int if_sdio_suspend(struct device *dev)
13171317
if (priv->wol_criteria == EHS_REMOVE_WAKEUP) {
13181318
dev_info(dev, "Suspend without wake params -- powering down card\n");
13191319
if (priv->fw_ready) {
1320+
ret = lbs_suspend(priv);
1321+
if (ret)
1322+
return ret;
1323+
13201324
priv->power_up_on_resume = true;
13211325
if_sdio_power_off(card);
13221326
}

0 commit comments

Comments
 (0)