[RFC] mmc: Do no export the rpmb as a partition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I have here a SK-Hynix eMMC media which is eMMC 5.0 compatible (according to
the manual). I read / write the media and haven't noticed anything odd.
Then I tried to boot using systemd :)
Systemd needs to touch everything and so it tried to read from the rpmb
partition. The results were not good.
The MMC core sends first CMD18 which ends with -110 after a few secs. CMD17
ends with the same error "immediately".
Looking into the "JEDEC STANDARD Embedded Multi-Media Card (eMMC) Electrical
Standard (5.01)" / JESD84-B50.1" I read the following in "6.2.2 Command
restrictions":
|RPMB Partition
|o  Only commands of classes Class0, Class2 and Class4 are admitted. Still usage of any
|   other command than CMD0, CMD6, CMD8, CMD12, CMD13, CMD15 or commands
|   defined in 6.6.25 shall be considered as illegal one.

CMD17 + CMD18 are part of Class 2 (and therefore legal) however the later
enumeration commands excludes CMD17 + 18 from beeing legal.

So my question is basically, is it okay to read from this partition?

Here is output of "dd if=/dev/mmcblk0rpmb of=/dev/null count=1"
Single read only:
[  625.881087] mmc0: starting CMD6 arg 03b30301 flags 0000049d
[  625.888813] mmc0: req done (CMD6): 0: 00000900 00000000 00000000 00000000
[  625.895659] mmc0: starting CMD13 arg 00010000 flags 00000195
[  625.901360] mmc0: req done (CMD13): 0: 00000900 00000000 00000000 00000000
[  625.908255] mmc0: starting CMD17 arg 00000000 flags 000000b5
[  625.913934] mmc0:     blksz 512 blocks 1 flags 00000200 tsac 150 ms nsac 1000
[  625.921114] mmc0: req done (CMD17): -110: 00000000 00000000 00000000 00000000
[  625.928253] mmc0:     0 bytes transferred: 0
[  625.932547] mmc0: starting CMD13 arg 00010000 flags 00000195
[  625.938228] mmc0: req done (CMD13): 0: 00400900 00000000 00000000 00000000
[  625.945129] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900

Multi read:
[   14.257869] mmc0: starting CMD6 arg 03b30301 flags 0000049d
[   14.265570] mmc0: req done (CMD6): 0: 00000900 00000000 00000000 00000000
[   14.272398] mmc0: starting CMD13 arg 00010000 flags 00000195
[   14.278083] mmc0: req done (CMD13): 0: 00000900 00000000 00000000 00000000
[   14.284997] <mmc0: starting CMD23 arg 00000020 flags 00000015>
[   14.290846] mmc0: starting CMD18 arg 00000000 flags 000000b5
[   14.296508] mmc0:     blksz 512 blocks 32 flags 00000200 tsac 150 ms nsac 1000
[   14.303742] mmc0:     CMD12 arg 00000000 flags 00000095
[   19.737209] mmc0: req done <CMD23>: 0: 00000000 00000000 00000000 00000000
[   19.744089] mmc0: req done (CMD18): 0: 00000900 00000000 00000000 00000000
[   19.750964] mmc0:     0 bytes transferred: -110
[   19.755495] mmc0:     (CMD12): 0: 00000b00 00000000 00000000 00000000
[   19.761963] mmc0: starting CMD13 arg 00010000 flags 00000195
[   19.767646] mmc0: req done (CMD13): 0: 00000900 00000000 00000000 00000000
[   19.774558] mmcblk0rpmb: error -110 transferring data, sector 0, nr 32, cmd response 0x900, card status 0xb00

and then, there is this dead mode:
[   44.055345] mmc0: starting CMD6 arg 03b30301 flags 0000049d
[   44.063039] mmc0: req done (CMD6): 0: 00000900 00000000 00000000 00000000
[   44.069849] mmc0: starting CMD13 arg 00010000 flags 00000195
[   44.075559] mmc0: req done (CMD13): 0: 00000900 00000000 00000000 00000000
[   44.082460] mmc0: Card stuck in programming state! __mmc_switch
[   44.088386] blk_update_request: I/O error, dev mmcblk0rpmb, sector 0

mostly the same thing as above except that it dies within CMD13. After that it
does not boot from eMMC and the eMMC looks dead if I boot differently. A few
minutes powerless and everything is back to normal.
At this point I am not sure if access to the rpmb is a problem or a problem at
surface and I should be chasing something else.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
---
 drivers/mmc/core/mmc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 7466ce098e60..52faf8f4f45f 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -512,6 +512,7 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
 		/*
 		 * RPMB regions are defined in multiples of 128K.
 		 */
+#if 0
 		card->ext_csd.raw_rpmb_size_mult = ext_csd[EXT_CSD_RPMB_MULT];
 		if (ext_csd[EXT_CSD_RPMB_MULT] && mmc_host_cmd23(card->host)) {
 			mmc_part_add(card, ext_csd[EXT_CSD_RPMB_MULT] << 17,
@@ -519,6 +520,7 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 *ext_csd)
 				"rpmb", 0, false,
 				MMC_BLK_DATA_AREA_RPMB);
 		}
+#endif
 	}
 
 	card->ext_csd.raw_erased_mem_count = ext_csd[EXT_CSD_ERASED_MEM_CONT];
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux