[U-Boot] mmc: question about capacity detection

Hannes Petermaier hannes at petermaier.org
Tue Aug 5 09:20:31 CEST 2014


hi folks,

i am actually trying to enable the "enhanced data area" on an 4GB emmc 
device, this i've done successfully with the linux mmc-utils and the 
card has after this "partitioning" 2GB user-partition.

Linux kernel deals correctly with the card.

U-Boot doesn't:

"
MMC: block number 0x301 exceeds max(0x0)
spl: mmc blk read err - 0
### ERROR ### Please RESET the board ###
"

So i debugged around and found the capacity-calculation, which i don't 
fully understand.
"
     if (mmc->high_capacity) {
         csize = (mmc->csd[1] & 0x3f) << 16
             | (mmc->csd[2] & 0xffff0000) >> 16;
         cmult = 8;
     } else {
         csize = (mmc->csd[1] & 0x3ff) << 2
             | (mmc->csd[2] & 0xc0000000) >> 30;
         cmult = (mmc->csd[2] & 0x00038000) >> 15;
     }
"
The else path does for my opinion the right calculation according the 
mmc-specification, the "high_capacity" path i do not understand at all, 
neither i found some specification for this.

In fact my 4GB card (with 2GB enhanced area) works only with "the else" 
path.
my csd Registers:

MMC-card dection:
ocr    : 0xc0ff8080
csd[0] : 0xd04f0132
csd[1] : 0x0f5a13ff
csd[2] : 0xffffffe7
csd[3] : 0x8a4000f1
c_size : 0x00000000003fffff
c_mult : 0x0000000000000008

U-Boot (BuR V2.0)# mmc info
Device: OMAP SD/MMC
Manufacturer ID: fe
OEM: 14e
Name: MMC04
Tran Speed: 52000000
Rd Block Len: 512
MMC version 4.41
High Capacity: Yes
Capacity: 4 TiB
Bus Width: 1-bit

any ideas ?

best regards,
Hannes







More information about the U-Boot mailing list