[U-Boot] [PATCH 3/3] rockchip: evb-rv1108: add usb init function for dwc2 gadget

Simon Glass sjg at chromium.org
Sun Aug 13 21:35:55 UTC 2017


On 8 August 2017 at 21:36, William Wu <william.wu at rock-chips.com> wrote:
> This patch implements board_usb_init() for dwc2 gadget, it
> generally called from do_fastboot to do dwc2 udc probe and
> support fastboot over USB.
>
> Signed-off-by: William Wu <william.wu at rock-chips.com>
> ---
>  board/rockchip/evb_rv1108/evb_rv1108.c | 47 ++++++++++++++++++++++++++++++++++
>  1 file changed, 47 insertions(+)
>
> diff --git a/board/rockchip/evb_rv1108/evb_rv1108.c b/board/rockchip/evb_rv1108/evb_rv1108.c
> index fe37eac..8ca5ee6 100644
> --- a/board/rockchip/evb_rv1108/evb_rv1108.c
> +++ b/board/rockchip/evb_rv1108/evb_rv1108.c
> @@ -50,3 +50,50 @@ int dram_init_banksize(void)
>
>         return 0;
>  }
> +
> +#if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG)
> +#include <usb.h>
> +#include <usb/dwc2_udc.h>
> +
> +static struct dwc2_plat_otg_data rv1108_otg_data = {
> +       .rx_fifo_sz     = 512,
> +       .np_tx_fifo_sz  = 16,
> +       .tx_fifo_sz     = 128,
> +};
> +
> +int board_usb_init(int index, enum usb_init_type init)
> +{
> +       int node;
> +       const char *mode;
> +       bool matched = false;
> +       const void *blob = gd->fdt_blob;
> +
> +       /* find the usb_otg node */
> +       node = fdt_node_offset_by_compatible(blob, -1,
> +                                       "rockchip,rv1108-usb");
> +
> +       while (node > 0) {
> +               mode = fdt_getprop(blob, node, "dr_mode", NULL);
> +               if (mode && strcmp(mode, "otg") == 0) {
> +                       matched = true;
> +                       break;
> +               }
> +
> +               node = fdt_node_offset_by_compatible(blob, node,
> +                                       "rockchip,rv1108-usb");
> +       }
> +       if (!matched) {
> +               debug("Not found usb_otg device\n");
> +               return -ENODEV;
> +       }
> +
> +       rv1108_otg_data.regs_otg = fdtdec_get_addr(blob, node, "reg");
> +
> +       return dwc2_udc_probe(&rv1108_otg_data);

These USB init things have been bothering me for a while. Do you think
this could be changed into a driver that you could probe with
device_probe()? Then much of the code in here would not be needed and
it might be easier to tidy it up when we have proper driver-model
support for USB device mode.

> +}
> +
> +int board_usb_cleanup(int index, enum usb_init_type init)
> +{
> +       return 0;
> +}
> +#endif
> --
> 2.0.0

Regards,
Simon


More information about the U-Boot mailing list