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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.