Re: [PATCH] usb: chipidea: tegra: fix hardlock with invalid dr mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 20-01-26 21:35:48, Peter Geis wrote:
> The ci_hdrc_tegra driver does not currently support dual role mode, but
> it does not explicitly prevent its use.
> Certain devices support dual role mode, but not automatic role switch.
> This can cause the device to lock up during initialization of the
> driver.

If the driver only supports peripheral mode, you could set dr_mode as
peripheral-only at glue layer, it would not be override by core.c.
See ci_get_platdata.

But one thing I could not understand, if the driver doesn't support
dual-role, how could you do manual role switch?

> 
> Detect this state by checking for the extcon phandle when dual role mode
> is set to otg.
> If it doesn't exist request the driver to only enable manual role
> switching.
> 
> Fixes: dfebb5f ("usb: chipidea: Add support for Tegra20/30/114/124")
> Signed-off-by: Peter Geis <pgwipeout@xxxxxxxxx>
> ---
>  drivers/usb/chipidea/ci_hdrc_tegra.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/usb/chipidea/ci_hdrc_tegra.c b/drivers/usb/chipidea/ci_hdrc_tegra.c
> index 7455df0ede49..2f6f6ce3e8f5 100644
> --- a/drivers/usb/chipidea/ci_hdrc_tegra.c
> +++ b/drivers/usb/chipidea/ci_hdrc_tegra.c
> @@ -89,6 +89,13 @@ static int tegra_udc_probe(struct platform_device *pdev)
>  	udc->data.usb_phy = udc->phy;
>  	udc->data.capoffset = DEF_CAPOFFSET;
>  
> +	/* check the dual mode and warn about bad configurations */
> +	if (usb_get_dr_mode(&pdev->dev) == USB_DR_MODE_OTG &&
> +	   !of_property_read_bool(pdev->dev.of_node, "extcon")) {
> +		dev_warn(&pdev->dev, "no extcon registered, otg unavailable");
> +		udc->data.flags |= CI_HDRC_DUAL_ROLE_NOT_OTG;
> +	}
> +

The CI_HDRC_DUAL_ROLE_NOT_OTG flag may not be suitable here, please see
comments for it.
 
>  	udc->dev = ci_hdrc_add_device(&pdev->dev, pdev->resource,
>  				      pdev->num_resources, &udc->data);
>  	if (IS_ERR(udc->dev)) {
> -- 
> 2.17.1
> 

-- 

Thanks,
Peter Chen



[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux