Message ID | 1398187429-15199-1-git-send-email-andrey.konovalov@linaro.org |
---|---|
State | Accepted |
Commit | e6e493f341b0488843efe0c5b2c1274997fbbfe8 |
Headers | show |
On Tuesday, April 22, 2014 at 07:23:49 PM, andrey.konovalov@linaro.org wrote: > Commit 4a271cb1b4ff doesn't take into account that fdtdec_setup_gpio() > returns success when the gpio passed to it is FDT_GPIO_NONE (no > gpio node found in the fdtdec_decode_gpio() call). This results in > calling gpio_direction_output() on invalid gpio. For this reason > executing "usb start" command on Arndale causes data abort in the > ehci-exynos driver. > > Add the fdt_gpio_isvalid() check to fix that problem. > > Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org> > Cc: Julius Werner <jwerner@chromium.org> > Cc: Simon Glass <sjg@chromium.org> > Cc: Minkyu Kang <mk7.kang@samsung.com> > Cc: Marek Vasut <marex@denx.de> Applied, thanks. Best regards, Marek Vasut
diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c index 9356878..edd91a8 100644 --- a/drivers/usb/host/ehci-exynos.c +++ b/drivers/usb/host/ehci-exynos.c @@ -197,7 +197,8 @@ int ehci_hcd_init(int index, enum usb_init_type init, #ifdef CONFIG_OF_CONTROL /* setup the Vbus gpio here */ - if (!fdtdec_setup_gpio(&ctx->vbus_gpio)) + if (fdt_gpio_isvalid(&ctx->vbus_gpio) && + !fdtdec_setup_gpio(&ctx->vbus_gpio)) gpio_direction_output(ctx->vbus_gpio.gpio, 1); #endif diff --git a/drivers/usb/host/xhci-exynos5.c b/drivers/usb/host/xhci-exynos5.c index 1146d10..b4946a3 100644 --- a/drivers/usb/host/xhci-exynos5.c +++ b/drivers/usb/host/xhci-exynos5.c @@ -298,7 +298,8 @@ int xhci_hcd_init(int index, struct xhci_hccr **hccr, struct xhci_hcor **hcor) #ifdef CONFIG_OF_CONTROL /* setup the Vbus gpio here */ - if (!fdtdec_setup_gpio(&ctx->vbus_gpio)) + if (fdt_gpio_isvalid(&ctx->vbus_gpio) && + !fdtdec_setup_gpio(&ctx->vbus_gpio)) gpio_direction_output(ctx->vbus_gpio.gpio, 1); #endif
Commit 4a271cb1b4ff doesn't take into account that fdtdec_setup_gpio() returns success when the gpio passed to it is FDT_GPIO_NONE (no gpio node found in the fdtdec_decode_gpio() call). This results in calling gpio_direction_output() on invalid gpio. For this reason executing "usb start" command on Arndale causes data abort in the ehci-exynos driver. Add the fdt_gpio_isvalid() check to fix that problem. Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org> Cc: Julius Werner <jwerner@chromium.org> Cc: Simon Glass <sjg@chromium.org> Cc: Minkyu Kang <mk7.kang@samsung.com> Cc: Marek Vasut <marex@denx.de> --- drivers/usb/host/ehci-exynos.c | 3 ++- drivers/usb/host/xhci-exynos5.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)