[U-Boot] (no subject)

From 323b5ea0eec7aac821eb2319ca0debda711e8bec Mon Sep 17 00:00:00 2001
From: Adam Ford aford173@gmail.com Date: Sun, 28 Apr 2019 16:42:42 -0500 Subject: [PATCH 0/4] Enable Host OHCI USB controller wtih DM_USB
This series enables some commented-out code, resurrects some older code and enables DA850 OHCI USB Host controller on the da850evm
Adam Ford (4): usb: ohci: Re-enable commented out delay ARM: davinci: Remove unused functions from header usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support ARM: da850evm: Enable da850-ohci USB host controller
.../arm/mach-davinci/include/mach/da8xx-usb.h | 3 - configs/da850evm_defconfig | 7 +- drivers/usb/host/Kconfig | 5 + drivers/usb/host/ohci-da8xx.c | 147 +++++++++++++++++- drivers/usb/host/ohci-hcd.c | 2 - include/configs/da850evm.h | 8 + 6 files changed, 165 insertions(+), 7 deletions(-)

There is a delay function that was commented out. This patch re-enables it, because it will be needed for da850 ohci support.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 3b6f889f7b..2b0df88f49 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1545,10 +1545,8 @@ static int submit_common_msg(ohci_t *ohci, struct usb_device *dev, return -1; }
-#if 0 mdelay(10); /* ohci_dump_status(ohci); */ -#endif
timeout = USB_TIMEOUT_MS(pipe);

On 4/28/19 11:45 PM, Adam Ford wrote:
There is a delay function that was commented out. This patch re-enables it, because it will be needed for da850 ohci support.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 3b6f889f7b..2b0df88f49 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -1545,10 +1545,8 @@ static int submit_common_msg(ohci_t *ohci, struct usb_device *dev, return -1; }
-#if 0 mdelay(10); /* ohci_dump_status(ohci); */ -#endif
timeout = USB_TIMEOUT_MS(pipe);
Applied, since this was probably broken since 2006.

There are a few functions defined in the header file, but they are not referenced by any Davinci code. In order to make a general function in the future with static function declarations, this patch will remove the references all together.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/arch/arm/mach-davinci/include/mach/da8xx-usb.h b/arch/arm/mach-davinci/include/mach/da8xx-usb.h index 42e1258225..215706e172 100644 --- a/arch/arm/mach-davinci/include/mach/da8xx-usb.h +++ b/arch/arm/mach-davinci/include/mach/da8xx-usb.h @@ -86,7 +86,4 @@ struct da8xx_usb_regs {
#define DA8XX_USB_VBUS_GPIO (1 << 15)
-int usb_phy_on(void); -void usb_phy_off(void); - #endif /* __DA8XX_MUSB_H__ */

On 4/28/19 11:45 PM, Adam Ford wrote:
There are a few functions defined in the header file, but they are not referenced by any Davinci code. In order to make a general function in the future with static function declarations, this patch will remove the references all together.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/arch/arm/mach-davinci/include/mach/da8xx-usb.h b/arch/arm/mach-davinci/include/mach/da8xx-usb.h index 42e1258225..215706e172 100644 --- a/arch/arm/mach-davinci/include/mach/da8xx-usb.h +++ b/arch/arm/mach-davinci/include/mach/da8xx-usb.h @@ -86,7 +86,4 @@ struct da8xx_usb_regs {
#define DA8XX_USB_VBUS_GPIO (1 << 15)
-int usb_phy_on(void); -void usb_phy_off(void);
#endif /* __DA8XX_MUSB_H__ */
Applied, thanks

This patch reuses some former code for the hawkboard, combines it with some some similar DM_USB compatible code for the OHCI driver, and enables the use of the da850's OHCI controller with DM_USB compatibility.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 0fbc115801..0d8ab3b651 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -239,6 +239,11 @@ config USB_OHCI_GENERIC ---help--- Enables support for generic OHCI controller.
+config USB_OHCI_DA8XX + bool "Support for da850 OHCI USB controller" + help + Enable support for the da850 USB controller. + endif # USB_OHCI_HCD
config USB_UHCI_HCD diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c index 47ad3f34d5..0f38791973 100644 --- a/drivers/usb/host/ohci-da8xx.c +++ b/drivers/usb/host/ohci-da8xx.c @@ -4,9 +4,63 @@ */
#include <common.h> - +#include <asm/io.h> +#include <clk.h> +#include <dm.h> +#include <dm/ofnode.h> +#include <generic-phy.h> +#include <reset.h> +#include "ohci.h" #include <asm/arch/da8xx-usb.h>
+struct da8xx_ohci { + ohci_t ohci; + struct clk *clocks; /* clock list */ + struct phy phy; + int clock_count; /* number of clock in clock list */ +}; + +static int usb_phy_on(void) +{ + u32 timeout; + u32 cfgchip2; + + cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2); + + cfgchip2 &= ~(CFGCHIP2_RESET | CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN | + CFGCHIP2_OTGMODE | CFGCHIP2_REFFREQ | + CFGCHIP2_USB1PHYCLKMUX); + cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN | CFGCHIP2_PHY_PLLON | + CFGCHIP2_REFFREQ_24MHZ | CFGCHIP2_USB2PHYCLKMUX | + CFGCHIP2_USB1SUSPENDM; + + writel(cfgchip2, &davinci_syscfg_regs->cfgchip2); + + /* wait until the usb phy pll locks */ + timeout = 0x7FFFFFF; + + while (timeout--) { + if (readl(&davinci_syscfg_regs->cfgchip2) & CFGCHIP2_PHYCLKGD) + return 1; + } + + /* USB phy was not turned on */ + return 0; +} + +static void usb_phy_off(void) +{ + u32 cfgchip2; + + /* + * Power down the on-chip PHY. + */ + cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2); + cfgchip2 &= ~(CFGCHIP2_PHY_PLLON | CFGCHIP2_USB1SUSPENDM); + cfgchip2 |= CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN | CFGCHIP2_RESET; + writel(cfgchip2, &davinci_syscfg_regs->cfgchip2); +} + int usb_cpu_init(void) { /* enable psc for usb2.0 */ @@ -37,3 +91,94 @@ int usb_cpu_init_fail(void) { return usb_cpu_stop(); } + +#if CONFIG_IS_ENABLED(DM_USB) +static int ohci_da8xx_probe(struct udevice *dev) +{ + struct ohci_regs *regs = (struct ohci_regs *)devfdt_get_addr(dev); + struct da8xx_ohci *priv = dev_get_priv(dev); + int i, err, ret, clock_nb; + + err = 0; + priv->clock_count = 0; + clock_nb = dev_count_phandle_with_args(dev, "clocks", "#clock-cells"); + if (clock_nb > 0) { + priv->clocks = devm_kcalloc(dev, clock_nb, sizeof(struct clk), + GFP_KERNEL); + if (!priv->clocks) + return -ENOMEM; + + for (i = 0; i < clock_nb; i++) { + err = clk_get_by_index(dev, i, &priv->clocks[i]); + if (err < 0) + break; + + err = clk_enable(&priv->clocks[i]); + if (err) { + dev_err(dev, "failed to enable clock %d\n", i); + clk_free(&priv->clocks[i]); + goto clk_err; + } + priv->clock_count++; + } + } else if (clock_nb != -ENOENT) { + dev_err(dev, "failed to get clock phandle(%d)\n", clock_nb); + return clock_nb; + } + + err = usb_cpu_init(); + + if (err) + goto clk_err; + + err = ohci_register(dev, regs); + if (err) + goto phy_err; + + return 0; + +phy_err: + ret = usb_cpu_stop(); + if (ret) + dev_err(dev, "failed to shutdown usb phy\n"); + +clk_err: + ret = clk_release_all(priv->clocks, priv->clock_count); + if (ret) + dev_err(dev, "failed to disable all clocks\n"); + + return err; +} + +static int ohci_da8xx_remove(struct udevice *dev) +{ + struct da8xx_ohci *priv = dev_get_priv(dev); + int ret; + + ret = ohci_deregister(dev); + if (ret) + return ret; + + ret = usb_cpu_stop(); + if (ret) + return ret; + + return clk_release_all(priv->clocks, priv->clock_count); +} + +static const struct udevice_id da8xx_ohci_ids[] = { + { .compatible = "ti,da830-ohci" }, + { } +}; + +U_BOOT_DRIVER(ohci_generic) = { + .name = "ohci-da8xx", + .id = UCLASS_USB, + .of_match = da8xx_ohci_ids, + .probe = ohci_da8xx_probe, + .remove = ohci_da8xx_remove, + .ops = &ohci_usb_ops, + .priv_auto_alloc_size = sizeof(struct da8xx_ohci), + .flags = DM_FLAG_ALLOC_PRIV_DMA, +}; +#endif

On 4/28/19 11:45 PM, Adam Ford wrote:
This patch reuses some former code for the hawkboard, combines it with some some similar DM_USB compatible code for the OHCI driver, and enables the use of the da850's OHCI controller with DM_USB compatibility.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 0fbc115801..0d8ab3b651 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -239,6 +239,11 @@ config USB_OHCI_GENERIC ---help--- Enables support for generic OHCI controller.
+config USB_OHCI_DA8XX
- bool "Support for da850 OHCI USB controller"
- help
Enable support for the da850 USB controller.
endif # USB_OHCI_HCD
config USB_UHCI_HCD diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c index 47ad3f34d5..0f38791973 100644 --- a/drivers/usb/host/ohci-da8xx.c +++ b/drivers/usb/host/ohci-da8xx.c @@ -4,9 +4,63 @@ */
#include <common.h>
+#include <asm/io.h> +#include <clk.h> +#include <dm.h> +#include <dm/ofnode.h> +#include <generic-phy.h> +#include <reset.h> +#include "ohci.h" #include <asm/arch/da8xx-usb.h>
+struct da8xx_ohci {
- ohci_t ohci;
- struct clk *clocks; /* clock list */
- struct phy phy;
- int clock_count; /* number of clock in clock list */
+};
+static int usb_phy_on(void) +{
- u32 timeout;
- u32 cfgchip2;
- cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
- cfgchip2 &= ~(CFGCHIP2_RESET | CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN |
CFGCHIP2_OTGMODE | CFGCHIP2_REFFREQ |
CFGCHIP2_USB1PHYCLKMUX);
- cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN | CFGCHIP2_PHY_PLLON |
CFGCHIP2_REFFREQ_24MHZ | CFGCHIP2_USB2PHYCLKMUX |
CFGCHIP2_USB1SUSPENDM;
- writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
- /* wait until the usb phy pll locks */
- timeout = 0x7FFFFFF;
- while (timeout--) {
Use get_timer() for the timeout.
if (readl(&davinci_syscfg_regs->cfgchip2) & CFGCHIP2_PHYCLKGD)
return 1;
- }
- /* USB phy was not turned on */
- return 0;
+}
+static void usb_phy_off(void) +{
- u32 cfgchip2;
- /*
* Power down the on-chip PHY.
*/
- cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
- cfgchip2 &= ~(CFGCHIP2_PHY_PLLON | CFGCHIP2_USB1SUSPENDM);
- cfgchip2 |= CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN | CFGCHIP2_RESET;
- writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
clrsetbits
+}
int usb_cpu_init(void) { /* enable psc for usb2.0 */ @@ -37,3 +91,94 @@ int usb_cpu_init_fail(void) { return usb_cpu_stop(); }
+#if CONFIG_IS_ENABLED(DM_USB) +static int ohci_da8xx_probe(struct udevice *dev) +{
- struct ohci_regs *regs = (struct ohci_regs *)devfdt_get_addr(dev);
- struct da8xx_ohci *priv = dev_get_priv(dev);
- int i, err, ret, clock_nb;
- err = 0;
- priv->clock_count = 0;
- clock_nb = dev_count_phandle_with_args(dev, "clocks", "#clock-cells");
- if (clock_nb > 0) {
priv->clocks = devm_kcalloc(dev, clock_nb, sizeof(struct clk),
GFP_KERNEL);
if (!priv->clocks)
return -ENOMEM;
clk_enable_bulk()
for (i = 0; i < clock_nb; i++) {
err = clk_get_by_index(dev, i, &priv->clocks[i]);
if (err < 0)
break;
err = clk_enable(&priv->clocks[i]);
if (err) {
dev_err(dev, "failed to enable clock %d\n", i);
clk_free(&priv->clocks[i]);
goto clk_err;
}
priv->clock_count++;
}
- } else if (clock_nb != -ENOENT) {
dev_err(dev, "failed to get clock phandle(%d)\n", clock_nb);
return clock_nb;
- }
- err = usb_cpu_init();
- if (err)
goto clk_err;
- err = ohci_register(dev, regs);
- if (err)
goto phy_err;
- return 0;
+phy_err:
- ret = usb_cpu_stop();
- if (ret)
dev_err(dev, "failed to shutdown usb phy\n");
+clk_err:
- ret = clk_release_all(priv->clocks, priv->clock_count);
- if (ret)
dev_err(dev, "failed to disable all clocks\n");
- return err;
+}
+static int ohci_da8xx_remove(struct udevice *dev) +{
- struct da8xx_ohci *priv = dev_get_priv(dev);
- int ret;
- ret = ohci_deregister(dev);
- if (ret)
return ret;
- ret = usb_cpu_stop();
- if (ret)
return ret;
- return clk_release_all(priv->clocks, priv->clock_count);
+}
+static const struct udevice_id da8xx_ohci_ids[] = {
- { .compatible = "ti,da830-ohci" },
- { }
+};
+U_BOOT_DRIVER(ohci_generic) = {
- .name = "ohci-da8xx",
- .id = UCLASS_USB,
- .of_match = da8xx_ohci_ids,
- .probe = ohci_da8xx_probe,
- .remove = ohci_da8xx_remove,
- .ops = &ohci_usb_ops,
- .priv_auto_alloc_size = sizeof(struct da8xx_ohci),
- .flags = DM_FLAG_ALLOC_PRIV_DMA,
+}; +#endif

On Mon, Apr 29, 2019 at 4:54 AM Marek Vasut marex@denx.de wrote:
On 4/28/19 11:45 PM, Adam Ford wrote:
This patch reuses some former code for the hawkboard, combines it with some some similar DM_USB compatible code for the OHCI driver, and enables the use of the da850's OHCI controller with DM_USB compatibility.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 0fbc115801..0d8ab3b651 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -239,6 +239,11 @@ config USB_OHCI_GENERIC ---help--- Enables support for generic OHCI controller.
+config USB_OHCI_DA8XX
bool "Support for da850 OHCI USB controller"
help
Enable support for the da850 USB controller.
endif # USB_OHCI_HCD
config USB_UHCI_HCD diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c index 47ad3f34d5..0f38791973 100644 --- a/drivers/usb/host/ohci-da8xx.c +++ b/drivers/usb/host/ohci-da8xx.c @@ -4,9 +4,63 @@ */
#include <common.h>
+#include <asm/io.h> +#include <clk.h> +#include <dm.h> +#include <dm/ofnode.h> +#include <generic-phy.h> +#include <reset.h> +#include "ohci.h" #include <asm/arch/da8xx-usb.h>
+struct da8xx_ohci {
ohci_t ohci;
struct clk *clocks; /* clock list */
struct phy phy;
int clock_count; /* number of clock in clock list */
+};
+static int usb_phy_on(void) +{
u32 timeout;
u32 cfgchip2;
cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
cfgchip2 &= ~(CFGCHIP2_RESET | CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN |
CFGCHIP2_OTGMODE | CFGCHIP2_REFFREQ |
CFGCHIP2_USB1PHYCLKMUX);
cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN | CFGCHIP2_PHY_PLLON |
CFGCHIP2_REFFREQ_24MHZ | CFGCHIP2_USB2PHYCLKMUX |
CFGCHIP2_USB1SUSPENDM;
writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
/* wait until the usb phy pll locks */
timeout = 0x7FFFFFF;
while (timeout--) {
Use get_timer() for the timeout.
if (readl(&davinci_syscfg_regs->cfgchip2) & CFGCHIP2_PHYCLKGD)
return 1;
}
/* USB phy was not turned on */
return 0;
+}
+static void usb_phy_off(void) +{
u32 cfgchip2;
/*
* Power down the on-chip PHY.
*/
cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
cfgchip2 &= ~(CFGCHIP2_PHY_PLLON | CFGCHIP2_USB1SUSPENDM);
cfgchip2 |= CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN | CFGCHIP2_RESET;
writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
clrsetbits
Marek - I will be submitting a V2 with your suggestions. It seems like some of the segments are going to be applied, do you want just do a V2 on the this one, or re-submit the whole series?
+}
int usb_cpu_init(void) { /* enable psc for usb2.0 */ @@ -37,3 +91,94 @@ int usb_cpu_init_fail(void) { return usb_cpu_stop(); }
+#if CONFIG_IS_ENABLED(DM_USB) +static int ohci_da8xx_probe(struct udevice *dev) +{
struct ohci_regs *regs = (struct ohci_regs *)devfdt_get_addr(dev);
struct da8xx_ohci *priv = dev_get_priv(dev);
int i, err, ret, clock_nb;
err = 0;
priv->clock_count = 0;
clock_nb = dev_count_phandle_with_args(dev, "clocks", "#clock-cells");
if (clock_nb > 0) {
priv->clocks = devm_kcalloc(dev, clock_nb, sizeof(struct clk),
GFP_KERNEL);
if (!priv->clocks)
return -ENOMEM;
clk_enable_bulk()
for (i = 0; i < clock_nb; i++) {
err = clk_get_by_index(dev, i, &priv->clocks[i]);
if (err < 0)
break;
err = clk_enable(&priv->clocks[i]);
if (err) {
dev_err(dev, "failed to enable clock %d\n", i);
clk_free(&priv->clocks[i]);
goto clk_err;
}
priv->clock_count++;
}
} else if (clock_nb != -ENOENT) {
dev_err(dev, "failed to get clock phandle(%d)\n", clock_nb);
return clock_nb;
}
err = usb_cpu_init();
if (err)
goto clk_err;
err = ohci_register(dev, regs);
if (err)
goto phy_err;
return 0;
+phy_err:
ret = usb_cpu_stop();
if (ret)
dev_err(dev, "failed to shutdown usb phy\n");
+clk_err:
ret = clk_release_all(priv->clocks, priv->clock_count);
if (ret)
dev_err(dev, "failed to disable all clocks\n");
return err;
+}
+static int ohci_da8xx_remove(struct udevice *dev) +{
struct da8xx_ohci *priv = dev_get_priv(dev);
int ret;
ret = ohci_deregister(dev);
if (ret)
return ret;
ret = usb_cpu_stop();
if (ret)
return ret;
return clk_release_all(priv->clocks, priv->clock_count);
+}
+static const struct udevice_id da8xx_ohci_ids[] = {
{ .compatible = "ti,da830-ohci" },
{ }
+};
+U_BOOT_DRIVER(ohci_generic) = {
.name = "ohci-da8xx",
.id = UCLASS_USB,
.of_match = da8xx_ohci_ids,
.probe = ohci_da8xx_probe,
.remove = ohci_da8xx_remove,
.ops = &ohci_usb_ops,
.priv_auto_alloc_size = sizeof(struct da8xx_ohci),
.flags = DM_FLAG_ALLOC_PRIV_DMA,
+}; +#endif
-- Best regards, Marek Vasut

On 4/30/19 11:24 AM, Adam Ford wrote:
On Mon, Apr 29, 2019 at 4:54 AM Marek Vasut marex@denx.de wrote:
On 4/28/19 11:45 PM, Adam Ford wrote:
This patch reuses some former code for the hawkboard, combines it with some some similar DM_USB compatible code for the OHCI driver, and enables the use of the da850's OHCI controller with DM_USB compatibility.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 0fbc115801..0d8ab3b651 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -239,6 +239,11 @@ config USB_OHCI_GENERIC ---help--- Enables support for generic OHCI controller.
+config USB_OHCI_DA8XX
bool "Support for da850 OHCI USB controller"
help
Enable support for the da850 USB controller.
endif # USB_OHCI_HCD
config USB_UHCI_HCD diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c index 47ad3f34d5..0f38791973 100644 --- a/drivers/usb/host/ohci-da8xx.c +++ b/drivers/usb/host/ohci-da8xx.c @@ -4,9 +4,63 @@ */
#include <common.h>
+#include <asm/io.h> +#include <clk.h> +#include <dm.h> +#include <dm/ofnode.h> +#include <generic-phy.h> +#include <reset.h> +#include "ohci.h" #include <asm/arch/da8xx-usb.h>
+struct da8xx_ohci {
ohci_t ohci;
struct clk *clocks; /* clock list */
struct phy phy;
int clock_count; /* number of clock in clock list */
+};
+static int usb_phy_on(void) +{
u32 timeout;
u32 cfgchip2;
cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
cfgchip2 &= ~(CFGCHIP2_RESET | CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN |
CFGCHIP2_OTGMODE | CFGCHIP2_REFFREQ |
CFGCHIP2_USB1PHYCLKMUX);
cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN | CFGCHIP2_PHY_PLLON |
CFGCHIP2_REFFREQ_24MHZ | CFGCHIP2_USB2PHYCLKMUX |
CFGCHIP2_USB1SUSPENDM;
writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
/* wait until the usb phy pll locks */
timeout = 0x7FFFFFF;
while (timeout--) {
Use get_timer() for the timeout.
if (readl(&davinci_syscfg_regs->cfgchip2) & CFGCHIP2_PHYCLKGD)
return 1;
}
/* USB phy was not turned on */
return 0;
+}
+static void usb_phy_off(void) +{
u32 cfgchip2;
/*
* Power down the on-chip PHY.
*/
cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2);
cfgchip2 &= ~(CFGCHIP2_PHY_PLLON | CFGCHIP2_USB1SUSPENDM);
cfgchip2 |= CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN | CFGCHIP2_RESET;
writel(cfgchip2, &davinci_syscfg_regs->cfgchip2);
clrsetbits
Marek - I will be submitting a V2 with your suggestions. It seems like some of the segments are going to be applied, do you want just do a V2 on the this one, or re-submit the whole series?
Just 3/4 and 4/4 is enough. Rebase on u-boot-usb/master and make sure not to drop $subject from the cover letter (this series has it empty, which made me almost miss it)

The DA850 EVM has one USB 1.1 OHCI Host controller. With the host controller now support DM_USB, this patch enables the respective functions for the da850evm.
Signed-off-by: Adam Ford aford173@gmail.com
diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig index ee39b0b1bc..1845813b2e 100644 --- a/configs/da850evm_defconfig +++ b/configs/da850evm_defconfig @@ -8,8 +8,8 @@ CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SYS_MALLOC_F_LEN=0x800 CONFIG_SPL_SERIAL_SUPPORT=y -CONFIG_SPL=y CONFIG_NR_DRAM_BANKS=1 +CONFIG_SPL=y CONFIG_SPL_SPI_FLASH_SUPPORT=y CONFIG_SPL_SPI_SUPPORT=y CONFIG_SYS_EXTRA_OPTIONS="MAC_ADDR_IN_SPIFLASH" @@ -67,5 +67,10 @@ CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DM_SPI=y CONFIG_DAVINCI_SPI=y +CONFIG_USB=y +CONFIG_DM_USB=y +# CONFIG_SPL_DM_USB is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_DA8XX=y # CONFIG_FAT_WRITE is not set CONFIG_USE_TINY_PRINTF=y diff --git a/include/configs/da850evm.h b/include/configs/da850evm.h index 94848f5128..9aaecdd1d5 100644 --- a/include/configs/da850evm.h +++ b/include/configs/da850evm.h @@ -267,6 +267,14 @@ #define CONFIG_ENV_SIZE (16 << 10) #endif
+/* USB Configs */ +#define CONFIG_SYS_USB_OHCI_CPU_INIT +#define CONFIG_USB_OHCI_NEW +#define CONFIG_USB_STORAGE +#define CONFIG_SYS_USB_OHCI_REGS_BASE 0x01E25000 +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15 +#define CONFIG_SYS_USB_OHCI_SLOT_NAME "da850evm" + #ifndef CONFIG_DIRECT_NOR_BOOT /* defines for SPL */ #define CONFIG_SYS_SPL_MALLOC_START (CONFIG_SYS_TEXT_BASE - \
participants (2)
-
Adam Ford
-
Marek Vasut