From: Hannes Petermaier <hannes@petermaier.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] mmc: question about capacity detection
Date: Tue, 05 Aug 2014 10:55:22 +0200 [thread overview]
Message-ID: <53E09BFA.1090401@petermaier.org> (raw)
In-Reply-To: <53E085BF.709@petermaier.org>
On 2014-08-05 09:20, Hannes Petermaier wrote:
> 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
>
I've digged a bit deeper and found an (for me, as newbie in this)
interesting webpage:
http://www.hjreggel.net/cardspeed/special-sd.html
there i've found the key to understand the "high_capacity" path:
"...In CSD Version 2.0, the C_SIZE field was extended to 22 bit. The
C_SIZE_MULT was dropped, assuming a preset multiplier of 2^10 . The
READ_BL_LEN was kept, but the only value allowed is 9, indicating a
block length of 512 bytes."
So the code should be as following:
- if (mmc->high_capacity) {
+ if (mmc->high_capacity && mmc->read_bl_len == MMC_MAX_BLOCK_LEN) {
i'am correct in my thinking ? please some comment.
if yes - i will format a patch for this
best regards,
Hannes
next prev parent reply other threads:[~2014-08-05 8:55 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-05 7:20 [U-Boot] mmc: question about capacity detection Hannes Petermaier
2014-08-05 8:55 ` Hannes Petermaier [this message]
2014-08-05 11:07 ` [U-Boot] hw_watchdog andrew
2014-08-05 12:22 ` Hannes Petermaier
2014-08-05 18:49 ` Jeroen Hofstee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53E09BFA.1090401@petermaier.org \
--to=hannes@petermaier.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox