linux/drivers/mmc/core
Jorge Ramirez-Ortiz 67380251e8 mmc: core: Do not force a retune before RPMB switch
Requesting a retune before switching to the RPMB partition has been
observed to cause CRC errors on the RPMB reads (-EILSEQ).

Since RPMB reads can not be retried, the clients would be directly
affected by the errors.

This commit disables the retune request prior to switching to the RPMB
partition: mmc_retune_pause() no longer triggers a retune before the
pause period begins.

This was verified with the sdhci-of-arasan driver (ZynqMP) configured
for HS200 using two separate eMMC cards (DG4064 and 064GB2). In both
cases, the error was easy to reproduce triggering every few tenths of
reads.

With this commit, systems that were utilizing OP-TEE to access RPMB
variables will experience an enhanced performance. Specifically, when
OP-TEE is configured to employ RPMB as a secure storage solution, it not
only writes the data but also the secure filesystem within the
partition. As a result, retrieving any variable involves multiple RPMB
reads, typically around five.

For context, on ZynqMP, each retune request consumed approximately
8ms. Consequently, reading any RPMB variable used to take at the very
minimum 40ms.

After droping the need to retune before switching to the RPMB partition,
this is no longer the case.

Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
Acked-by: Avri Altman <avri.altman@wdc.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20240103112911.2954632-1-jorge@foundries.io
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2024-01-03 13:16:26 +01:00
..
block.c mmc: Merge branch fixes into next 2023-12-07 14:59:57 +01:00
block.h
bus.c mmc: core: propagate removable attribute to driver core 2023-08-09 13:21:48 +02:00
bus.h mmc: core: use sysfs_emit() instead of sprintf() 2022-02-28 13:06:23 +01:00
card.h mmc: Add quirk MMC_QUIRK_BROKEN_CACHE_FLUSH for Micron eMMC Q2J54A 2023-11-03 12:01:32 +01:00
core.c mmc: block: Retry commands in CQE error recovery 2023-11-14 17:15:07 +01:00
core.h mmc: core: refactor debugfs code 2022-12-07 13:29:13 +01:00
crypto.c blk-crypto: rename blk_keyslot_manager to blk_crypto_profile 2021-10-21 10:49:32 -06:00
crypto.h mmc: core: Add basic support for inline encryption 2021-02-01 12:02:33 +01:00
debugfs.c mmc: debugfs: Allow host caps to be modified 2023-10-10 13:44:49 +02:00
host.c mmc: core: Do not force a retune before RPMB switch 2024-01-03 13:16:26 +01:00
host.h mmc: host: factor out clearing the retune state 2021-08-24 10:15:28 +02:00
Kconfig mmc: core: Imply IOSCHED_BFQ 2023-02-02 16:02:02 +01:00
Makefile mmc: core: Add basic support for inline encryption 2021-02-01 12:02:33 +01:00
mmc.c mmc: core: Add HS400 tuning in HS400es initialization 2024-01-02 17:54:05 +01:00
mmc_ops.c mmc: core: Align to common busy polling behaviour for mmc ioctls 2023-02-15 13:24:03 +01:00
mmc_ops.h mmc: core: Add host specific tuning support for SD HS mode 2023-08-25 11:45:51 +02:00
mmc_test.c mmc: mmc_test: Add re-tuning test 2024-01-02 17:54:05 +01:00
pwrseq.c mmc: pwrseq: Use device_match_of_node() 2022-12-07 13:22:37 +01:00
pwrseq.h
pwrseq_emmc.c mmc: pwrseq: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
pwrseq_sd8787.c mmc: pwrseq: sd8787: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
pwrseq_simple.c mmc: pwrseq_simple: Convert to platform remove callback returning void 2023-08-15 12:48:20 +02:00
queue.c mmc: core: Allow dynamical updates of the number of requests for hsq 2023-09-27 12:13:18 +02:00
queue.h mmc: switch to blk_mq_alloc_disk 2021-06-30 15:34:04 -06:00
quirks.h mmc: Add quirk MMC_QUIRK_BROKEN_CACHE_FLUSH for Micron eMMC Q2J54A 2023-11-03 12:01:32 +01:00
regulator.c mmc: core: add helpers mmc_regulator_enable/disable_vqmmc 2023-03-23 11:38:34 +01:00
sd.c mmc: core: Add host specific tuning support for SD HS mode 2023-08-25 11:45:51 +02:00
sd.h
sd_ops.c mmc: core: Add host specific tuning support for SD HS mode 2023-08-25 11:45:51 +02:00
sd_ops.h mmc: core: Add host specific tuning support for SD HS mode 2023-08-25 11:45:51 +02:00
sdio.c mmc: core: sdio: hold retuning if sdio in 1-bit mode 2023-09-26 15:08:05 +02:00
sdio_bus.c Driver core changes for 6.3-rc1 2023-02-24 12:58:55 -08:00
sdio_bus.h
sdio_cis.c mmc: sdio: fix possible resource leaks in some error paths 2023-02-14 00:06:22 +01:00
sdio_cis.h
sdio_io.c mmc: sdio: Spelling s/compement/complement/ 2023-01-23 15:51:38 +01:00
sdio_irq.c mmc: core: Switch to basic workqueue API for sdio_irq_work 2022-09-14 11:53:47 +02:00
sdio_ops.c
sdio_ops.h
sdio_uart.c tty: make tty_operations::write()'s count size_t 2023-08-11 21:12:46 +02:00
slot-gpio.c mmc: core: support setting card detect interrupt from drivers 2023-02-15 13:46:09 +01:00
slot-gpio.h