[U-Boot] [PATCH] mmc: seperate block number into small parts for multi-write cmd

Lei Wen adrian.wenl at gmail.com
Sun Oct 10 06:20:50 CEST 2010


Hi Reinhard,

On Mon, Sep 6, 2010 at 7:50 PM, Reinhard Meyer <u-boot at emk-elektronik.de> wrote:
> Lei Wen schrieb:
>>>>> Where does this limitation supposedly come from?
>>>> This limitation comes from the SD/MMC sepc. You could find one and
>>>> check the 0x6 offset register(BLOCK COUNT REGISTER).
>>> This might refer to certain HOST controllers, but not to Cards!
>>
>> You are right, this comes from HOST, not card. But since the host spec
>> define so, then is there any host don't follow the sepc? ...
>
> Any that use bit banging, or SPI, and at least: ATMELs MCI.
> Probably any number of others that do not copy Intel/PC centered
> register structures...
>
> If you had read my first mail on this, there was an example of a 98304
> blocks transfer...

I know that maybe the mmc specific hardware may have no such limitation, but
for our hardware it is sd&mmc cocompatible one, which should follow both spec
and their limitation.

>
>>
>>> And you still do not explain why the buffer size shall be limited to 512KB?
>>
>> The 512 KB comes from the SDMA boundary, and this value is also adopt by Linux.
>> You could refer to drivers/mmc/host/sdhci.c in Linux code.
>
> What hardware, again? sdhci.c? SDMA?

My hardware is pxa168, which has sdhci controller for control both mmc and sd.

>
> You are trying to change a GENERIC function of U-Boot here to suit a
> particular hardware, not a particular hardware driver.
>
> As such, changes should be generic/configurable and not suited to a specific
> hardware.
>

Although the common code is named as mmc.c, I think a lot of people use it
to work for sd too, since they are compatible in most case.

I also try to put this limitation in the driver level, but no lucky,
without the generic change,
the driver cannot do nothing unless a mess change.
For multi-write, it should first send multi-write command, then follow
stop transmission command.
If I implement the seperation in driver, I need to send the stop
transmission command by self...
Then the "generic" one would make no sense...

> If a specific hardware needs the generic part to obey some limitations, those
> limitations should be configurable, like maybe:
>
> #define CONFIG_SYS_MMC_BLOCKLIMIT 65535
> #define CONFIG_SYS_MMC_BUFFERLIMIT (512<<10)
>

I am ok with set a macro for this.

Best regards,
Lei


More information about the U-Boot mailing list