[U-Boot] MMC and buffer alignment question

Markus Niebel list-09_u-boot at tqsc.de
Wed Mar 19 18:40:21 CET 2014


Am 19.03.2014 15:44, wrote Wolfgang Denk:
> Dear Eric Nelson,
> 
> In message <5329A80B.9020908 at boundarydevices.com> you wrote:
>>
>>> short question to the usage of the mmc command (and also the mmc
>>> driver API): is it intended that mmc read / write may fail when the
>>> supplied address in RAM is not aligned?
>>
>> If not intended, it is known.
> 
> I consider this a known bug.
> 
>>> ARMV7 will give output like this:
>>>
>>> U-Boot > mmc read 12000002 44 44
>>>
>> Why would you want to do this?
> 
> For example, BMP images require loading on a +2 aligned address due to
> their stupid header format.  I ran into this before myself: it is
> impossible to match both the alignment reuqirements of the bmp command
> and the mmc read command at the same time.  One must manually copy the
> memory ragen again.  This is a plain, stupid bug.
> 

Exactly here it popped up ...

>>> Special commands inside the mmc drivers and in env_mmc implement the
>>> alignment magic. Shouldn't the mmc do the magic (and if neccesarry
>>> provide help using temp buffers if needed) so that all users outside can
>>> read / write without caring for special cases?
>>
>> Is there a use case here? There are plenty of memory addresses that
>> won't work with commands like "mmc read".
> 

env_mmc needs to care for cache aligned buffers - This was fixed some time ago
for the redundant env case

> "mmc read" and "mmc write" are operations that work on character
> buffers, like all other file IO ops.  These should not require any
> specific alignment.
> 
>> Is it worth **any** code to try and catch them?
> 
> Definitely yes.
> 

So just as an idea - we could use a bounce buffer for mmc_bwrite / mmc_bread for the 
unaligned case. Is definitely slow but should work.

> Best regards,
> 
> Wolfgang Denk
> 



More information about the U-Boot mailing list