On 06/07/2017 02:16 AM, Simon Glass wrote: > Hi, > > On 6 June 2017 at 17:59, Dr. Philipp Tomsich > <[email protected]> wrote: >> Simon, >> >>> On 06 Jun 2017, at 23:09, Simon Glass <[email protected]> wrote: >>> >>> Hi Philipp, >>> >>> On 6 June 2017 at 07:42, Philipp Tomsich >>> <[email protected]> wrote: >>>> The regs_otg field in uintptr_t of the platform data structure for >>>> dwc2-otg has thus far been an unsigned int, but will eventually be >>>> casted into a void*. >>>> >>>> This raises the following error with GCC 6.3 and buildman: >>>> ../drivers/usb/gadget/dwc2_udc_otg.c: In function 'dwc2_udc_probe': >>>> ../drivers/usb/gadget/dwc2_udc_otg.c:821:8: warning: cast to pointer from >>>> integer of different size [-Wint-to-pointer-cast] >>>> reg = (struct dwc2_usbotg_reg *)pdata->regs_otg; >>>> ^ >>>> >>>> This changes regs_otg to a uintptr_t to ensure that it is large enough >>>> to hold any valid pointer (and fix the associated warning). >>>> >>>> Signed-off-by: Philipp Tomsich <[email protected]> >>>> >>>> --- >>>> >>>> Changes in v2: >>>> - (new patch) fix a int-to-pointer cast warning for regs_otg in >>>> dwc2-otg to fix a buildman failure for u-boot-rockchip/master@2b19b2f >>>> >>>> include/usb/dwc2_udc.h | 2 +- >>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>> >>>> diff --git a/include/usb/dwc2_udc.h b/include/usb/dwc2_udc.h >>>> index 7324d8a..1a370e0 100644 >>>> --- a/include/usb/dwc2_udc.h >>>> +++ b/include/usb/dwc2_udc.h >>>> @@ -16,7 +16,7 @@ struct dwc2_plat_otg_data { >>>> int phy_of_node; >>>> int (*phy_control)(int on); >>>> unsigned int regs_phy; >>>> - unsigned int regs_otg; >>>> + uintptr_t regs_otg; >>> >>> Can you use ulong instead? >> >> Sure, but can I first ask “why?”. >> I may reopen an old discussion with this… if so, forgive my ignorance: >> >> uintptr_t makes the most sense for this use case in the C99 (or later) type >> system, >> as we want this field to hold an integer (i.e. the address from the physical >> memory >> map for one of the register blocks) that will be casted into a pointer. >> The uintptr_t type will always the matching size in any and all programming >> models; >> in contrast, ulong would be wrong for LLP64 (and LLP64 probably “doesn’t >> matter” >> in the context of U-Boot anyway). >> >> What I always found odd, was that uintptr_t is optional according to ISO9899. >> I would thus not have been surprised if there’s a concern for portability >> between >> compilers behind this, but then again … U-Boot makes extensive use of GCC >> extensions (such as inline assembly). >> >> So I am apparently missing something here. > > I don't know of any deep reason except that long is defined to be able > to hold an address, and ulong makes sense since an address is > generally considered unsigned. > > U-Boot by convention uses ulong for addresses.
I was under the impression that u-boot by convention uses uintptr_t for addresses. > You can see this all > around the code base so I am really just arguing in favour of > consistency (and I suppose ulong is easier to type!) Then I guess half of the codebase is inconsistent. -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

