All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] (no subject)
@ 2019-04-28 21:45 Adam Ford
  2019-04-28 21:45 ` [U-Boot] [PATCH 1/4] usb: ohci: Re-enable commented out delay Adam Ford
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Adam Ford @ 2019-04-28 21:45 UTC (permalink / raw)
  To: u-boot



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 1/4] usb: ohci:  Re-enable commented out delay
  2019-04-28 21:45 [U-Boot] (no subject) Adam Ford
@ 2019-04-28 21:45 ` Adam Ford
  2019-04-29  8:25   ` Marek Vasut
  2019-04-28 21:45 ` [U-Boot] [PATCH 2/4] ARM: davinci: Remove unused functions from header Adam Ford
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2019-04-28 21:45 UTC (permalink / raw)
  To: u-boot

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);
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 2/4] ARM: davinci: Remove unused functions from header
  2019-04-28 21:45 [U-Boot] (no subject) Adam Ford
  2019-04-28 21:45 ` [U-Boot] [PATCH 1/4] usb: ohci: Re-enable commented out delay Adam Ford
@ 2019-04-28 21:45 ` Adam Ford
  2019-04-29  8:25   ` Marek Vasut
  2019-04-28 21:45 ` [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support Adam Ford
  2019-04-28 21:45 ` [U-Boot] [PATCH 4/4] ARM: da850evm: Enable da850-ohci USB host controller Adam Ford
  3 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2019-04-28 21:45 UTC (permalink / raw)
  To: u-boot

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__ */
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support
  2019-04-28 21:45 [U-Boot] (no subject) Adam Ford
  2019-04-28 21:45 ` [U-Boot] [PATCH 1/4] usb: ohci: Re-enable commented out delay Adam Ford
  2019-04-28 21:45 ` [U-Boot] [PATCH 2/4] ARM: davinci: Remove unused functions from header Adam Ford
@ 2019-04-28 21:45 ` Adam Ford
  2019-04-29  8:24   ` Marek Vasut
  2019-04-28 21:45 ` [U-Boot] [PATCH 4/4] ARM: da850evm: Enable da850-ohci USB host controller Adam Ford
  3 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2019-04-28 21:45 UTC (permalink / raw)
  To: u-boot

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
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 4/4] ARM: da850evm: Enable da850-ohci USB host controller
  2019-04-28 21:45 [U-Boot] (no subject) Adam Ford
                   ` (2 preceding siblings ...)
  2019-04-28 21:45 ` [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support Adam Ford
@ 2019-04-28 21:45 ` Adam Ford
  3 siblings, 0 replies; 10+ messages in thread
From: Adam Ford @ 2019-04-28 21:45 UTC (permalink / raw)
  To: u-boot

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 - \
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support
  2019-04-28 21:45 ` [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support Adam Ford
@ 2019-04-29  8:24   ` Marek Vasut
  2019-04-30  9:24     ` Adam Ford
  0 siblings, 1 reply; 10+ messages in thread
From: Marek Vasut @ 2019-04-29  8:24 UTC (permalink / raw)
  To: u-boot

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
> 


-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 1/4] usb: ohci: Re-enable commented out delay
  2019-04-28 21:45 ` [U-Boot] [PATCH 1/4] usb: ohci: Re-enable commented out delay Adam Ford
@ 2019-04-29  8:25   ` Marek Vasut
  0 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2019-04-29  8:25 UTC (permalink / raw)
  To: u-boot

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.

-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 2/4] ARM: davinci: Remove unused functions from header
  2019-04-28 21:45 ` [U-Boot] [PATCH 2/4] ARM: davinci: Remove unused functions from header Adam Ford
@ 2019-04-29  8:25   ` Marek Vasut
  0 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2019-04-29  8:25 UTC (permalink / raw)
  To: u-boot

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

-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support
  2019-04-29  8:24   ` Marek Vasut
@ 2019-04-30  9:24     ` Adam Ford
  2019-04-30  9:32       ` Marek Vasut
  0 siblings, 1 reply; 10+ messages in thread
From: Adam Ford @ 2019-04-30  9:24 UTC (permalink / raw)
  To: u-boot

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support
  2019-04-30  9:24     ` Adam Ford
@ 2019-04-30  9:32       ` Marek Vasut
  0 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2019-04-30  9:32 UTC (permalink / raw)
  To: u-boot

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)

-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-04-30  9:32 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-28 21:45 [U-Boot] (no subject) Adam Ford
2019-04-28 21:45 ` [U-Boot] [PATCH 1/4] usb: ohci: Re-enable commented out delay Adam Ford
2019-04-29  8:25   ` Marek Vasut
2019-04-28 21:45 ` [U-Boot] [PATCH 2/4] ARM: davinci: Remove unused functions from header Adam Ford
2019-04-29  8:25   ` Marek Vasut
2019-04-28 21:45 ` [U-Boot] [PATCH 3/4] usb: ohci: ohci-da8xx: Enable da850-ohci driver with DM support Adam Ford
2019-04-29  8:24   ` Marek Vasut
2019-04-30  9:24     ` Adam Ford
2019-04-30  9:32       ` Marek Vasut
2019-04-28 21:45 ` [U-Boot] [PATCH 4/4] ARM: da850evm: Enable da850-ohci USB host controller Adam Ford

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.