[U-Boot] [PATCH 1/2] usb: dwc2: correctly handle binding for g-tx-fifo-size

Patrick DELAUNAY patrick.delaunay at st.com
Tue Jun 18 13:33:50 UTC 2019


Hi Marek

> From: Marek Vasut <marex at denx.de>
> Sent: mardi 18 juin 2019 12:49
> 
> On 6/18/19 9:32 AM, Patrick DELAUNAY wrote:
> > Hi Marek,
> >
> >> From: Marek Vasut <marex at denx.de>
> >> Sent: lundi 17 juin 2019 17:54
> >>
> >> On 6/14/19 1:08 PM, Patrick Delaunay wrote:
> >>> Manage g-tx-fifo-size as a array as specify in the binding.
> >>>
> >>> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> >>> ---
> >>>
> >>>  arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi |  4 ----
> >>>  drivers/usb/gadget/dwc2_udc_otg.c        | 17 ++++++++++++++++-
> >>>  2 files changed, 16 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi
> >>> b/arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi
> >>> index 5b19e44..994092a 100644
> >>> --- a/arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi
> >>> +++ b/arch/arm/dts/stm32mp157c-ev1-u-boot.dtsi
> >>> @@ -56,10 +56,6 @@
> >>>  	};
> >>>  };
> >>>
> >>> -&usbotg_hs {
> >>> -	g-tx-fifo-size = <576>;
> >>
> >> Should this really be in this patch ?
> >
> > As I change the binding parsing, the stm32mp1 will don't work without this
> patch.
> > I make a commun patch only to allow bisec, but I can split the serie with 2
> patches.
> >
> >>
> >>> -};
> >>> -
> >>>  &v3v3 {
> >>>  	regulator-always-on;
> >>>  };
> >>> diff --git a/drivers/usb/gadget/dwc2_udc_otg.c
> >>> b/drivers/usb/gadget/dwc2_udc_otg.c
> >>> index 494ab53..7e6b5fc 100644
> >>> --- a/drivers/usb/gadget/dwc2_udc_otg.c
> >>> +++ b/drivers/usb/gadget/dwc2_udc_otg.c
> >>> @@ -1039,6 +1039,8 @@ static int
> >>> dwc2_udc_otg_ofdata_to_platdata(struct
> >> udevice *dev)
> >>>  	int node = dev_of_offset(dev);
> >>>  	ulong drvdata;
> >>>  	void (*set_params)(struct dwc2_plat_otg_data *data);
> >>> +	u32 tx_fifo_sz_array[DWC2_MAX_HW_ENDPOINTS];
> >>
> >> Can't you just read directly into platdata->tx_fifo_sz_array[] below,
> >> and thus drop this temporary variable ?
> >
> > It was the case in in my first internal version.
> >
> > if (platdata->tx_fifo_sz_nb) {
> > 		ret = dev_read_u32_array(dev, "g-tx-fifo-size",
> > 					 &platdata->tx_fifo_sz_array,
> > 					 platdata->tx_fifo_sz_nb);
> > 		if (ret)
> > 			return ret;
> > 	}
> >
> > And I add it to avoid the warning / potential issue:
> >
> > /local/home/frq07632/views/u-boot/u-
> boot/drivers/usb/gadget/dwc2_udc_otg.c:1062:7:
> > 	warning: passing argument 3 of ‘dev_read_u32_array’ from incompatible
> pointer type [-Wincompatible-pointer-types]
> >        &platdata->tx_fifo_sz_array,
> >        ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> > In file included from /local/home/frq07632/views/u-boot/u-boot/include/dm.h:12,
> >              from /local/home/frq07632/views/u-boot/u-
> boot/drivers/usb/gadget/dwc2_udc_otg.c:22:
> > 	/local/home/frq07632/views/u-boot/u-boot/include/dm/read.h:710:15: note:
> expected ‘u32 *’ {aka ‘unsigned int *’} but argument is of type ‘unsigned int (*)[16]’
> >           u32 *out_values, size_t sz)
> >           ~~~~~^~~~~~~~~~
> 
> Looks like GCC is complaining because you're passing an array of pointers to
> dev_read_u32_array() , instead of plain pointer .
> 
> Try
> 
>  		ret = dev_read_u32_array(dev, "g-tx-fifo-size",
> - 					 &platdata->tx_fifo_sz_array,
> + 					 platdata->tx_fifo_sz_array,
>  					 platdata->tx_fifo_sz_nb);

You are right, it is working
I don't double check the type of the buffer :-<
=> I will push update in V2

> >> btw is this fix for current release or next ?
> >
> > I hope it for the v2019.07 (as it is only impact the stm32mp1 arch/board).
> > But it is not blocking.
> 
> OK
> 
> --
> Best regards,
> Marek Vasut


More information about the U-Boot mailing list