linux/drivers/mmc/core
Ivan Semenov ff3206d218 mmc: core: Fix eMMC initialization with 1-bit bus connection
Initializing an eMMC that's connected via a 1-bit bus is current failing,
if the HW (DT) informs that 4-bit bus is supported. In fact this is a
regression, as we were earlier capable of falling back to 1-bit mode, when
switching to 4/8-bit bus failed. Therefore, let's restore the behaviour.

Log for Samsung eMMC 5.1 chip connected via 1bit bus (only D0 pin)
Before patch:
[134509.044225] mmc0: switch to bus width 4 failed
[134509.044509] mmc0: new high speed MMC card at address 0001
[134509.054594] mmcblk0: mmc0:0001 BGUF4R 29.1 GiB
[134509.281602] mmc0: switch to bus width 4 failed
[134509.282638] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[134509.282657] Buffer I/O error on dev mmcblk0, logical block 0, async page read
[134509.284598] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[134509.284602] Buffer I/O error on dev mmcblk0, logical block 0, async page read
[134509.284609] ldm_validate_partition_table(): Disk read failed.
[134509.286495] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[134509.286500] Buffer I/O error on dev mmcblk0, logical block 0, async page read
[134509.288303] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[134509.288308] Buffer I/O error on dev mmcblk0, logical block 0, async page read
[134509.289540] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[134509.289544] Buffer I/O error on dev mmcblk0, logical block 0, async page read
[134509.289553]  mmcblk0: unable to read partition table
[134509.289728] mmcblk0boot0: mmc0:0001 BGUF4R 31.9 MiB
[134509.290283] mmcblk0boot1: mmc0:0001 BGUF4R 31.9 MiB
[134509.294577] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
[134509.295835] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[134509.295841] Buffer I/O error on dev mmcblk0, logical block 0, async page read

After patch:

[134551.089613] mmc0: switch to bus width 4 failed
[134551.090377] mmc0: new high speed MMC card at address 0001
[134551.102271] mmcblk0: mmc0:0001 BGUF4R 29.1 GiB
[134551.113365]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21
[134551.114262] mmcblk0boot0: mmc0:0001 BGUF4R 31.9 MiB
[134551.114925] mmcblk0boot1: mmc0:0001 BGUF4R 31.9 MiB

Fixes: 577fb13199 ("mmc: rework selection of bus speed mode")
Cc: stable@vger.kernel.org
Signed-off-by: Ivan Semenov <ivan@semenov.dev>
Link: https://lore.kernel.org/r/20240206172845.34316-1-ivan@semenov.dev
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
2024-02-13 23:45:44 +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
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
Kconfig mmc: core: Imply IOSCHED_BFQ 2023-02-02 16:02:02 +01:00
Makefile
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
mmc.c mmc: core: Fix eMMC initialization with 1-bit bus connection 2024-02-13 23:45:44 +01:00
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
pwrseq.c mmc: pwrseq: Use device_match_of_node() 2022-12-07 13:22:37 +01:00
pwrseq.h
queue.c mmc: core: Allow dynamical updates of the number of requests for hsq 2023-09-27 12:13:18 +02:00
queue.h
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_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
sd.c mmc: core: Add host specific tuning support for SD HS mode 2023-08-25 11:45:51 +02:00
sd.h
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: mmc: sdio: use u8 for flag 2023-12-08 12:02:37 +01:00
sdio.c mmc: core: sdio: hold retuning if sdio in 1-bit mode 2023-09-26 15:08:05 +02:00
slot-gpio.c mmc: slot-gpio: Allow non-sleeping GPIO ro 2024-02-06 12:35:44 +01:00
slot-gpio.h