mmc: core: production year for eMMC 4.41 and later
PATCH 1/1 mmc: core: production year for eMMC 4.41 and later
The field containing the production date in the CID register only uses 4 bits to encode the year, starting from 1997 in the original standard. In 2013, the production year field contains 0, and the kernel reports a 1997 production date.
The eMMC 4.51 specification adds a new interpretation rule. For all devices implementing the 4.41 specification or later, the production year field will be interpreted as a value between 2010 and 2025, with 0 corresponding to 2013.
--- drivers/mmc/core/mmc.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mmc/core/mmc.c +4 -0
@@ -482,6 +482,10 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd) }if (card->ext_csd.rev >=5 ) { +/* Adjust production date as per JEDEC JESD84-B451 */ +if (card->cid.year <2010 ) + card->cid.year +=16 ; +/* check whether the eMMC card supports BKOPS */ if (ext_csd[EXT_CSD_BKOPS_SUPPORT ] &0x1 ) { card->ext_csd.bkops =1 ;
Signature · 1 line
1.8.1.2
Hi Romain,
Quoted 20 lines · Romain Izard
The field containing the production date in the CID register only uses 4 bits to encode the year, starting from 1997 in the original standard. In 2013, the production year field contains 0, and the kernel reports a 1997 production date.
The eMMC 4.51 specification adds a new interpretation rule. For all devices implementing the 4.41 specification or later, the production year field will be interpreted as a value between 2010 and 2025, with 0 corresponding to 2013.
Signed-off-by Romain Izard <[email protected]>--- drivers/mmc/core/mmc.c | 4 ++++ 1 file changed, 4 insertions(+)drivers/mmc/core/mmc.c +0
-0
drivers/mmc/core/mmc.c static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd) · line 491
Quoted 10 lines
drivers/mmc/core/mmc.c +4
-0@@ -482,6 +482,10 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd) }if (card->ext_csd.rev >=5 ) { +/* Adjust production date as per JEDEC JESD84-B451 */ +if (card->cid.year <2010 ) + card->cid.year +=16 ; +/* check whether the eMMC card supports BKOPS */ if (ext_csd[EXT_CSD_BKOPS_SUPPORT ] &0x1 ) { card->ext_csd.bkops =1 ;
Thanks, pushed to mmc-next for 3.11.
- Chris.
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child