John,

On Wed, Dec 2, 2015 at 11:13 AM, John Youn <john.y...@synopsys.com> wrote:
> dwc2_core_reset() was previously renamed to
> dwc2_core_reset_and_force_mode(). Now add back dwc2_core_reset() which
> performs only a basic core reset without forcing the mode.
>
> Signed-off-by: John Youn <johny...@synopsys.com>
> ---
>  drivers/usb/dwc2/core.c | 22 ++++++++++++++++++----
>  drivers/usb/dwc2/core.h |  1 +
>  2 files changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c
> index 24f9e80..b7a733a 100644
> --- a/drivers/usb/dwc2/core.c
> +++ b/drivers/usb/dwc2/core.c
> @@ -478,14 +478,12 @@ static void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg 
> *hsotg)
>  }
>
>  /*
> - * Do core a soft reset of the core.  Be careful with this because it
> - * resets all the internal state machines of the core.
> + * Performs a base controller soft reset.

Wouldn't the "be careful" message still be relevant?  Presumably this
makes the mode no longer match what may be stored in hsotg->dr_mode,
so it probably wouldn't hurt to at least mention
dwc2_core_reset_and_force_mode() in the comment?

>   */
> -int dwc2_core_reset_and_force_mode(struct dwc2_hsotg *hsotg)
> +int dwc2_core_reset(struct dwc2_hsotg *hsotg)
>  {
>         u32 greset;
>         int count = 0;
> -       u32 gusbcfg;
>
>         dev_vdbg(hsotg->dev, "%s()\n", __func__);
>
> @@ -517,6 +515,22 @@ int dwc2_core_reset_and_force_mode(struct dwc2_hsotg 
> *hsotg)
>                 }
>         } while (!(greset & GRSTCTL_AHBIDLE));
>
> +       return 0;
> +}
> +
> +/*
> + * Do core a soft reset of the core.  Be careful with this because it
> + * resets all the internal state machines of the core.

Nothing differentiates this comment from dwc2_core_reset() other than
the warning message, and that warning message seems like it also
belongs on the other one.  Maybe at least a comment like "This will
apply mode forces as per the stored hsotg->dr_mode"

> + */
> +int dwc2_core_reset_and_force_mode(struct dwc2_hsotg *hsotg)
> +{
> +       int retval;
> +       u32 gusbcfg;
> +
> +       retval = dwc2_core_reset(hsotg);
> +       if (retval)
> +               return retval;
> +
>         if (hsotg->dr_mode == USB_DR_MODE_HOST) {
>                 gusbcfg = dwc2_readl(hsotg->regs + GUSBCFG);
>                 gusbcfg &= ~GUSBCFG_FORCEDEVMODE;
> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
> index 0b4c036..53c992a 100644
> --- a/drivers/usb/dwc2/core.h
> +++ b/drivers/usb/dwc2/core.h
> @@ -889,6 +889,7 @@ enum dwc2_halt_status {
>   * The following functions support initialization of the core driver 
> component
>   * and the DWC_otg controller
>   */
> +extern int dwc2_core_reset(struct dwc2_hsotg *hsotg);
>  extern int dwc2_core_reset_and_force_mode(struct dwc2_hsotg *hsotg);
>  extern void dwc2_core_host_init(struct dwc2_hsotg *hsotg);
>  extern int dwc2_enter_hibernation(struct dwc2_hsotg *hsotg);

Other than function commenting, this seems sane.  Works across many
reboots on a farm of rk3288-based devices on a 3.14 kernel.

Reviewed-by: Douglas Anderson <diand...@chromium.org>
Tested-by: Douglas Anderson <diand...@chromium.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to