[U-Boot] [PATCH 3/5] usb: ehci: Implement V2P mapping

Stephen Warren swarren at wwwdotorg.org
Fri Feb 26 19:16:23 CET 2016


On 02/26/2016 09:55 AM, Marek Vasut wrote:
> On 02/26/2016 05:48 PM, Stephen Warren wrote:
>> On 01/26/2016 07:14 PM, Marek Vasut wrote:
>>> Certain processor architectures, like MIPS, require that the USB
>>> structures and transfer buffers are passed with their PA to the
>>> USB controller. If VA is passed, the USB will not work. Add the
>>> necessary virt_to_phys() calls into the USB EHCI code to make it
>>> work.
>>
>> FYI, this causes some cast size warnings, e.g.:
>>
>>> +make
>>> O=/home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/build-p2371-2180
>>> -s p2371-2180_defconfig
>>> +make
>>> O=/home/swarren/shared/git_wa/tegra-uboot-flasher/u-boot/build-p2371-2180
>>> -s -j8
>>> In file included from ../arch/arm/include/asm/byteorder.h:29:0,
>>>                   from ../include/compiler.h:125,
>>>                   from ../include/image.h:19,
>>>                   from ../include/common.h:88,
>>>                   from ../drivers/usb/host/ehci-hcd.c:10:
>>> ../drivers/usb/host/ehci-hcd.c: In function ‘ehci_td_buffer’:
>>> ../drivers/usb/host/ehci-hcd.c:248:49: warning: cast to pointer from
>>> integer of different size [-Wint-to-pointer-cast]
>>>     td->qt_buffer[idx] = cpu_to_hc32(virt_to_phys((void *)addr));
>>>                                                   ^
>>> ../include/linux/byteorder/little_endian.h:34:51: note: in definition
>>> of macro ‘__cpu_to_le32’
>>>   #define __cpu_to_le32(x) ((__force __le32)(__u32)(x))
>>>                                                     ^
>>> ../drivers/usb/host/ehci-hcd.c:248:24: note: in expansion of macro
>>> ‘cpu_to_hc32’
>>>     td->qt_buffer[idx] = cpu_to_hc32(virt_to_phys((void *)addr));
>>>                          ^
>>
>> (This is a 64-bit ARM platform, so I had CROSS_COMPILE=aarch64-linux-gnu-)
>
> Tom reported this to me too, sorry :-(
>
> Do you have an idea how to fix this too? I am now installing arm64
> toolchain.

I haven't looked at it yet. I've seen similar problems in the bast 
handled by casting between integer types before casting to pointers e.g. 
something like the following guess:

uint32_t pa;
void *p = (void *)(uintptr_t)pa;

> Do you know about some nice arm64 board with USB for testing?

There's always the Jetson TX1; it is the p2371-2180 that I was building 
above:

http://www.nvidia.com/object/jetson-tx1-dev-kit.html



More information about the U-Boot mailing list