All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.