mmc: block: Update ext_csd.cache_ctrl if it was written
The cache function can be turned ON and OFF by writing to the CACHE_CTRL byte (EXT_CSD byte [33]). However, card->ext_csd.cache_ctrl is only set on init if cache size > 0. Fix that by explicitly setting ext_csd.cache_ctrl on ext-csd write. Signed-off-by: Avri Altman <avri.altman@wdc.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20210420134641.57343-3-avri.altman@wdc.com Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
Родитель
edd6021465
Коммит
aea0440ad0
|
@ -572,6 +572,18 @@ static int __mmc_blk_ioctl_cmd(struct mmc_card *card, struct mmc_blk_data *md,
|
|||
main_md->part_curr = value & EXT_CSD_PART_CONFIG_ACC_MASK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Make sure to update CACHE_CTRL in case it was changed. The cache
|
||||
* will get turned back on if the card is re-initialized, e.g.
|
||||
* suspend/resume or hw reset in recovery.
|
||||
*/
|
||||
if ((MMC_EXTRACT_INDEX_FROM_ARG(cmd.arg) == EXT_CSD_CACHE_CTRL) &&
|
||||
(cmd.opcode == MMC_SWITCH)) {
|
||||
u8 value = MMC_EXTRACT_VALUE_FROM_ARG(cmd.arg) & 1;
|
||||
|
||||
card->ext_csd.cache_ctrl = value;
|
||||
}
|
||||
|
||||
/*
|
||||
* According to the SD specs, some commands require a delay after
|
||||
* issuing the command.
|
||||
|
|
Загрузка…
Ссылка в новой задаче