[U-Boot] [PATCH v4 00/10] Improvements for the dwc3_generic driver

Jean-Jacques Hiblot jjhiblot at ti.com
Fri Jan 4 08:53:02 UTC 2019


On 04/01/2019 08:05, Jon Nettleton wrote:
> On Fri, Dec 7, 2018 at 8:46 AM Jean-Jacques Hiblot <jjhiblot at ti.com> wrote:
>>
>> On 06/12/2018 21:56, Loic Devulder wrote:
>>> Hi,
>>>
>>> I re-tested this series on Khadas VIM1 and it still fix the USB issue I
>>> had with 'usb reset' (I already tested v2 patches).
>>>
>>> I just have a message and I'm not sure that I had it last time:
>>> "Error disabling PHY supply
>>> Can't shutdown USB PHY1 for dwc3 at c9000000"
>>>
>>> But USB stack looks ok, I can plug/unplug USB key  and do the reset, all
>>> works as expected.
>>>
>>> Since my last test lot of changes has been done in Amlogic SoCs, maybe
>>> it's because of this?
>>>
>>> So if you want you can add my tested-by flag.
>>> Tested-by: Loic Devulder <ldevulder at suse.de>
>> Thank you for testing
>>> On 11/29/18 10:52 AM, Jean-Jacques Hiblot wrote:
>>>> This series aims at bringing improvements to the dwc3_generic driver so
>>>> that it can be used by most of the platforms using the dwc3 controller.
>>>>
>>>> I tested this on with DRA7 and AM57x platforms for both Peripheral and Host
>>>> operations. The code to enable DM USB host & dev support for those
>>>> platforms will be submitted in a separate series.
>>>>
>>>> Michal Simek has tested this series:
>>>> " I have tested it on zcu100 with usb stick, usb to ethernet converter and
>>>> also dfu.
>>>> Tested-by: Michal Simek <michal.simek at xilinx.com>"
>>>>
>>>> Enhancements:
>>>> - use separate Kconfig option for DM USB Periphal and DM USB Host. This
>>>> allow platforms to keep their non-DM USB peripheral code and use the DM
>>>> USB host.
>>>> - fixes the bind/probe confusion in dwc3_generic. The probe is done when
>>>> the USB device is first needed.
>>>> - handles PHYs when in the peripheral mode. The code to handle the PHYs is
>>>> shared with the host side
>>>> - handles clock and reset
>>>> - bind host controller to the more generic driver 'xhci-dwc3'
>>>>
>>>>
>>>> Changes in v4:
>>>> - rebased on latest U-Boot
>>>> - renamed DM_USB_DEV as DM_USB_GADGET
>>>> - Add a new commit to create a new UCLASS for USB gadget drivers
>>>>
>>>> Changes in v3:
>>>> - fixes bug dwc3_setup_phy(): the phy arrays wasn't returned. This was
>>>>     visible only when the device is removed.
>>>> - Stub the DWC3 PHY operations if CONFIG_IS_ENABLED(PHY) is false.
>>>>     This fixes all build issues but one (evb-rk3328).
>>>> - Fix build issue with evb-rk3328 by enabling CONFIG_USB_DWC3. This has
>>>>     little impact on the footprint and should not break the runtime as the
>>>>     xhci-rockchip driver has its own probe function.
>>>>     Nevertheless this was !!! NOT TESTED !!! by lack of hw
>>>>
>>>> Changes in v2:
>>>> - Updated commit log
>>>> - Fixed typo in thordown.c
>>>> - select DM_USB_DEV by default for zynqmp platforms
>>>>
>>>> Jean-Jacques Hiblot (10):
>>>>     usb: gadget: Do not call board_usb_xxx() directly in USB gadget
>>>>       drivers
>>>>     usb: introduce a separate config option for DM USB device
>>>>     usb: udc: implement DM versions of
>>>>       usb_gadget_initialize()/_release()/_handle_interrupt()
>>>>     dwc3_generic: do not probe the USB device driver when it's bound
>>>>     dwc3: move phy operation to core.c
>>>>     dm: usb: create a new UCLASS ID for USB gadget devices
>>>>     configs: evb-rk3328: Enable CONFIG_USB_DWC3
>>>>     dwc3-generic: Handle the PHYs, the clocks and the reset lines
>>>>     dwc3-generic: Add select_dr_mode operation
>>>>     usb: dwc3: Fix a compilation error with the edison defconfig
>>>>
>>>>    arch/arm/Kconfig                    |   2 +
>>>>    board/sunxi/board.c                 |   2 +-
>>>>    cmd/fastboot.c                      |   4 +-
>>>>    cmd/rockusb.c                       |   4 +-
>>>>    cmd/thordown.c                      |   4 +-
>>>>    cmd/usb_gadget_sdp.c                |   4 +-
>>>>    cmd/usb_mass_storage.c              |   4 +-
>>>>    common/dfu.c                        |   6 +-
>>>>    configs/evb-rk3328_defconfig        |   1 +
>>>>    drivers/usb/Kconfig                 |  14 +++
>>>>    drivers/usb/dwc3/Kconfig            |   7 +-
>>>>    drivers/usb/dwc3/core.c             |  89 ++++++++++++++-
>>>>    drivers/usb/dwc3/dwc3-generic.c     | 208 ++++++++++++++++++++++++++++--------
>>>>    drivers/usb/dwc3/ep0.c              |   2 +-
>>>>    drivers/usb/gadget/ether.c          |  40 ++-----
>>>>    drivers/usb/gadget/udc/Makefile     |   4 +
>>>>    drivers/usb/gadget/udc/udc-core.c   |   3 +-
>>>>    drivers/usb/gadget/udc/udc-uclass.c |  58 ++++++++++
>>>>    drivers/usb/host/xhci-dwc3.c        |  95 ++--------------
>>>>    drivers/usb/musb-new/omap2430.c     |   2 +-
>>>>    drivers/usb/musb-new/sunxi.c        |   2 +-
>>>>    include/dm/uclass-id.h              |   1 +
>>>>    include/dwc3-uboot.h                |  19 ++++
>>>>    include/linux/usb/gadget.h          |  18 ++++
>>>>    24 files changed, 401 insertions(+), 192 deletions(-)
>>>>    create mode 100644 drivers/usb/gadget/udc/udc-uclass.c
>>>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> https://lists.denx.de/listinfo/u-boot
> First off thanks for the work.  I have imported it into my u-boot tree
> for the iMX8M and now have both usb host and gadget mode working
> simultaneously.  There is one catch.  Currently, the iMX8M codebase
> does not support clock and power device initialization from DM.  I
> have patched the driver to punt back to the board to do these
> initializations in the following patch.  Yes I know not ideal, but
> functional.  I am wondering if we should support architecture specific
> implementation quirks for boards that don't fully support DM
> initialization yet.

That is not fitting the DM model. I had the same issue and finally 
enabled the clocks in the board_late_init(): 
board/ti/dra7xx/evm.c:662:int board_late_init(void)

>   I am open to writing something more complete if
> we decide it is something worth pursuing, otherwise I will carry this
> patch in my tree for time being.
The true solution would be to implement the support for clk.
>
> -Jon
>
> diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
> index 6d9be9b245..90d4ff2ea7 100644
> --- a/drivers/usb/dwc3/dwc3-generic.c
> +++ b/drivers/usb/dwc3/dwc3-generic.c
> @@ -119,6 +119,15 @@ struct dwc3_glue_ops {
>                                  enum usb_dr_mode mode);
>   };
>
> +__weak int board_usb_of_init(struct udevice *dev)
> +{
> +        return 0;
> +}
> +
> +__weak void board_usb_of_cleanup(struct udevice *dev)
> +{
> +}
> +
>   static int dwc3_glue_bind(struct udevice *parent)
>   {
>           const void *fdt = gd->fdt_blob;
> @@ -242,6 +251,8 @@ static int dwc3_glue_probe(struct udevice *dev)
>                   index++;
>           }
>
> +        ret = board_usb_of_init(dev);
> +
>           return 0;
>   }
>
> @@ -249,6 +260,8 @@ static int dwc3_glue_remove(struct udevice *dev)
>   {
>           struct dwc3_glue_data *glue = dev_get_platdata(dev);
>
> +        board_usb_of_cleanup(dev);
> +
>           reset_release_bulk(&glue->resets);
>
>           clk_release_bulk(&glue->clks);
> @@ -257,6 +270,7 @@ static int dwc3_glue_remove(struct udevice *dev)
>   }
>


More information about the U-Boot mailing list