From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hannes Petermaier Date: Tue, 05 Aug 2014 09:20:31 +0200 Subject: [U-Boot] mmc: question about capacity detection Message-ID: <53E085BF.709@petermaier.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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