[U-Boot] [PATCH 0/4 v4] DA8xx: USB support

Hi,
These patch set have been created against uboot-ti/master branch.
Changes from previous version are, - Used C structure for DA8xx usb registers.
I didn't modify the alignment in include/usb.h as Nick suggested, would wait for Remy Bohmer's comment on this.
Regards, Ajay
Ajay Kumar Gupta (4): DA830: Add pinmux for USB0_DRVVBUS DA8xx: Add GPIO register definitions DA8xx: Add MUSB host support DA830: Add usb config
board/davinci/da830evm/da830evm.c | 8 ++ drivers/usb/musb/Makefile | 1 + drivers/usb/musb/da8xx.c | 139 ++++++++++++++++++++++++++++++ drivers/usb/musb/da8xx.h | 103 ++++++++++++++++++++++ include/asm-arm/arch-davinci/gpio_defs.h | 14 +++ include/configs/da830evm.h | 38 +++++++- include/usb.h | 3 +- 7 files changed, 300 insertions(+), 6 deletions(-) create mode 100644 drivers/usb/musb/da8xx.c create mode 100644 drivers/usb/musb/da8xx.h

USB0_DRVVBUS pinmux configuration is required for USB functinality in uboot.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com --- board/davinci/da830evm/da830evm.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/board/davinci/da830evm/da830evm.c b/board/davinci/da830evm/da830evm.c index bb8cc3c..7cf6013 100644 --- a/board/davinci/da830evm/da830evm.c +++ b/board/davinci/da830evm/da830evm.c @@ -65,6 +65,11 @@ const struct pinmux_config i2c_pins[] = { { pinmux[9], 2, 4 } };
+/* USB0_DRVVBUS pin muxer settings */ +const struct pinmux_config usb_pins[] = { + { pinmux[9], 1, 1 } +}; + int board_init(void) { #ifndef CONFIG_USE_IRQ @@ -118,6 +123,9 @@ int board_init(void) if (davinci_configure_pin_mux(i2c_pins, ARRAY_SIZE(i2c_pins)) != 0) return 1;
+ if (davinci_configure_pin_mux(usb_pins, ARRAY_SIZE(usb_pins)) != 0) + return 1; + /* enable the console UART */ writel((DAVINCI_UART_PWREMU_MGMT_FREE | DAVINCI_UART_PWREMU_MGMT_URRST | DAVINCI_UART_PWREMU_MGMT_UTRST),

Added DA8xx GPIO base addresses in gpio_defs.h and pointers to different BANKs which can be used to program GPIOs.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com --- include/asm-arm/arch-davinci/gpio_defs.h | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/include/asm-arm/arch-davinci/gpio_defs.h b/include/asm-arm/arch-davinci/gpio_defs.h index ff62976..1be2ac2 100644 --- a/include/asm-arm/arch-davinci/gpio_defs.h +++ b/include/asm-arm/arch-davinci/gpio_defs.h @@ -22,12 +22,21 @@ #ifndef _GPIO_DEFS_H_ #define _GPIO_DEFS_H_
+#ifndef CONFIG_SOC_DA8XX #define DAVINCI_GPIO_BINTEN 0x01C67008 #define DAVINCI_GPIO_BANK01 0x01C67010 #define DAVINCI_GPIO_BANK23 0x01C67038 #define DAVINCI_GPIO_BANK45 0x01C67060 #define DAVINCI_GPIO_BANK67 0x01C67088
+#else /* CONFIG_SOC_DA8XX */ +#define DAVINCI_GPIO_BINTEN 0x01E26008 +#define DAVINCI_GPIO_BANK01 0x01E26010 +#define DAVINCI_GPIO_BANK23 0x01E26038 +#define DAVINCI_GPIO_BANK45 0x01E26060 +#define DAVINCI_GPIO_BANK67 0x01E26088 +#endif /* CONFIG_SOC_DA8XX */ + struct davinci_gpio { unsigned int dir; unsigned int out_data; @@ -49,4 +58,9 @@ struct davinci_gpio_bank { unsigned long base; };
+#define davinci_gpio_bank01 ((struct davinci_gpio *)DAVINCI_GPIO_BANK01) +#define davinci_gpio_bank23 ((struct davinci_gpio *)DAVINCI_GPIO_BANK23) +#define davinci_gpio_bank45 ((struct davinci_gpio *)DAVINCI_GPIO_BANK45) +#define davinci_gpio_bank67 ((struct davinci_gpio *)DAVINCI_GPIO_BANK67) + #endif

Tested USB host functionality on DA830 EVM.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com --- drivers/usb/musb/Makefile | 1 + drivers/usb/musb/da8xx.c | 139 +++++++++++++++++++++++++++++++++++++++++++++ drivers/usb/musb/da8xx.h | 103 +++++++++++++++++++++++++++++++++ include/usb.h | 3 +- 4 files changed, 245 insertions(+), 1 deletions(-) create mode 100644 drivers/usb/musb/da8xx.c create mode 100644 drivers/usb/musb/da8xx.h
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile index 09e0a5f..eb4d8fd 100644 --- a/drivers/usb/musb/Makefile +++ b/drivers/usb/musb/Makefile @@ -27,6 +27,7 @@ LIB := $(obj)libusb_musb.a
COBJS-$(CONFIG_MUSB_HCD) += musb_hcd.o musb_core.o COBJS-$(CONFIG_USB_DAVINCI) += davinci.o +COBJS-$(CONFIG_USB_DA8XX) += da8xx.o
COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c) diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c new file mode 100644 index 0000000..8f480d4 --- /dev/null +++ b/drivers/usb/musb/da8xx.c @@ -0,0 +1,139 @@ +/* + * da8xx.c - TI's DA8xx platform specific usb wrapper functions. + * + * Author: Ajay Kumar Gupta ajay.gupta@ti.com + * + * Based on drivers/usb/musb/davinci.c + * + * Copyright (C) 2009 Texas Instruments Incorporated + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#include <common.h> + +#include "da8xx.h" + +/* MUSB platform configuration */ +struct musb_config musb_cfg = { + (struct musb_regs *)DA8XX_USB_OTG_CORE_BASE, + DA8XX_USB_OTG_TIMEOUT, + 0 +}; + +/* + * This function enables VBUS by driving the GPIO Bank4 Pin 15 high. + */ +static void enable_vbus(void) +{ + u32 value; + + /* configure GPIO bank4 pin 15 in output direction */ + value = readl(&davinci_gpio_bank45->dir); + writel((value & (~DA8XX_USB_VBUS_GPIO)), &davinci_gpio_bank45->dir); + + /* set GPIO bank4 pin 15 high to drive VBUS */ + value = readl(&davinci_gpio_bank45->set_data); + writel((value | DA8XX_USB_VBUS_GPIO), &davinci_gpio_bank45->set_data); +} + +/* + * Enable the usb0 phy. This initialization procedure is explained in + * the DA8xx USB user guide document. + */ +static u8 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 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN | CFGCHIP2_PHY_PLLON | + CFGCHIP2_REFFREQ_24MHZ; + + writel(cfgchip2, &davinci_syscfg_regs->cfgchip2); + + /* wait until the usb phy pll locks */ + timeout = musb_cfg.timeout; + while (timeout--) + if (readl(&davinci_syscfg_regs->cfgchip2) & CFGCHIP2_PHYCLKGD) + return 1; + + /* USB phy was not turned on */ + return 0; +} + +/* + * Disable the usb phy + */ +static void phy_off(void) +{ + u32 cfgchip2; + + /* + * Power down the on-chip PHY. + */ + cfgchip2 = readl(&davinci_syscfg_regs->cfgchip2); + cfgchip2 &= ~CFGCHIP2_PHY_PLLON; + cfgchip2 |= CFGCHIP2_PHYPWRDN | CFGCHIP2_OTGPWRDN; + writel(cfgchip2, &davinci_syscfg_regs->cfgchip2); +} + +/* + * This function performs DA8xx platform specific initialization for usb0. + */ +int musb_platform_init(void) +{ + u32 revision; + + /* enable psc for usb2.0 */ + lpsc_on(33); + + /* enable usb vbus */ + enable_vbus(); + + /* reset the controller */ + writel(0x1, da8xx_usb_regs->control); + udelay(5000); + + /* start the on-chip usb phy and its pll */ + if (phy_on() == 0) + return -1; + + /* Returns zero if e.g. not clocked */ + revision = readl(da8xx_usb_regs->revision); + if (revision == 0) + return -1; + + /* Disable all interrupts */ + writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK | + DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_set); + return 0; +} + +/* + * This function performs DA8xx platform specific deinitialization for usb0. + */ +void musb_platform_deinit(void) +{ + /* Turn of the phy */ + phy_off(); + + /* flush any interrupts */ + writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK | + DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_clr); + writel(0, da8xx_usb_regs->eoi); +} diff --git a/drivers/usb/musb/da8xx.h b/drivers/usb/musb/da8xx.h new file mode 100644 index 0000000..93234f0 --- /dev/null +++ b/drivers/usb/musb/da8xx.h @@ -0,0 +1,103 @@ +/* + * da8xx.h -- TI's DA8xx platform specific usb wrapper definitions. + * + * Author: Ajay Kumar Gupta ajay.gupta@ti.com + * + * Based on drivers/usb/musb/davinci.h + * + * Copyright (C) 2009 Texas Instruments Incorporated + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +#ifndef __DA8XX_MUSB_H__ +#define __DA8XX_MUSB_H__ + +#include <asm/arch/hardware.h> +#include <asm/arch/gpio_defs.h> +#include "musb_core.h" + +/* Base address of da8xx usb0 wrapper */ +#define DA8XX_USB_OTG_BASE 0x01E00000 + +/* Base address of da8xx musb core */ +#define DA8XX_USB_OTG_CORE_BASE (DA8XX_USB_OTG_BASE + 0x400) + +/* Timeout for DA8xx usb module */ +#define DA8XX_USB_OTG_TIMEOUT 0x3FFFFFF + +/* + * DA8xx platform USB wrapper register overlay. + */ +struct da8xx_usb_regs { + dv_reg revision; + dv_reg control; + dv_reg status; + dv_reg emulation; + dv_reg mode; + dv_reg autoreq; + dv_reg srpfixtime; + dv_reg teardown; + dv_reg intsrc; + dv_reg intsrc_set; + dv_reg intsrc_clr; + dv_reg intmsk; + dv_reg intmsk_set; + dv_reg intmsk_clr; + dv_reg intsrcmsk; + dv_reg eoi; + dv_reg intvector; + dv_reg grndis_size[4]; +}; + +#define da8xx_usb_regs ((struct da8xx_usb_regs *)DA8XX_USB_OTG_BASE) + +/* DA8XX interrupt bits definitions */ +#define DA8XX_USB_TX_ENDPTS_MASK 0x1f /* ep0 + 4 tx */ +#define DA8XX_USB_RX_ENDPTS_MASK 0x1e /* 4 rx */ +#define DA8XX_USB_TXINT_SHIFT 0 +#define DA8XX_USB_RXINT_SHIFT 8 + +#define DA8XX_USB_USBINT_MASK 0x01ff0000 /* 8 Mentor, DRVVBUS */ +#define DA8XX_USB_TXINT_MASK \ + (DA8XX_USB_TX_ENDPTS_MASK << DA8XX_USB_TXINT_SHIFT) +#define DA8XX_USB_RXINT_MASK \ + (DA8XX_USB_RX_ENDPTS_MASK << DA8XX_USB_RXINT_SHIFT) + +/* DA8xx CFGCHIP2 (USB 2.0 PHY Control) register bits */ +#define CFGCHIP2_PHYCLKGD (1 << 17) +#define CFGCHIP2_VBUSSENSE (1 << 16) +#define CFGCHIP2_RESET (1 << 15) +#define CFGCHIP2_OTGMODE (3 << 13) +#define CFGCHIP2_NO_OVERRIDE (0 << 13) +#define CFGCHIP2_FORCE_HOST (1 << 13) +#define CFGCHIP2_FORCE_DEVICE (2 << 13) +#define CFGCHIP2_FORCE_HOST_VBUS_LOW (3 << 13) +#define CFGCHIP2_USB1PHYCLKMUX (1 << 12) +#define CFGCHIP2_USB2PHYCLKMUX (1 << 11) +#define CFGCHIP2_PHYPWRDN (1 << 10) +#define CFGCHIP2_OTGPWRDN (1 << 9) +#define CFGCHIP2_DATPOL (1 << 8) +#define CFGCHIP2_USB1SUSPENDM (1 << 7) +#define CFGCHIP2_PHY_PLLON (1 << 6) /* override PLL suspend */ +#define CFGCHIP2_SESENDEN (1 << 5) /* Vsess_end comparator */ +#define CFGCHIP2_VBDTCTEN (1 << 4) /* Vbus comparator */ +#define CFGCHIP2_REFFREQ (0xf << 0) +#define CFGCHIP2_REFFREQ_12MHZ (1 << 0) +#define CFGCHIP2_REFFREQ_24MHZ (2 << 0) +#define CFGCHIP2_REFFREQ_48MHZ (3 << 0) + +#define DA8XX_USB_VBUS_GPIO (1 << 15) +#endif /* __DA8XX_MUSB_H__ */ + diff --git a/include/usb.h b/include/usb.h index 7c47098..7c56ace 100644 --- a/include/usb.h +++ b/include/usb.h @@ -183,7 +183,8 @@ struct usb_device { #if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || \ defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \ defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \ - defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) + defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \ + defined(CONFIG_USB_DA8XX)
int usb_lowlevel_init(void); int usb_lowlevel_stop(void);

Adding USB configuration. Default is set for USB MSC host.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com --- include/configs/da830evm.h | 38 +++++++++++++++++++++++++++++++++----- 1 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/include/configs/da830evm.h b/include/configs/da830evm.h index 38e2ce1..432cd57 100644 --- a/include/configs/da830evm.h +++ b/include/configs/da830evm.h @@ -149,6 +149,11 @@ #define CONFIG_SYS_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED #endif
+/* + * USB configuration + */ +#define CONFIG_USB_DA8XX /* Platform hookup to MUSB controller */ +#define CONFIG_MUSB_HCD
/* * U-Boot general configuration @@ -234,10 +239,33 @@ #endif
#ifdef CONFIG_USB_DA8XX -#define CONFIG_CMD_USB /* include support for usb */ -#define CONFIG_CMD_STORAGE /* include support for usb */ -#define CONFIG_CMD_FAT /* include support for FAT/storage*/ -#define CONFIG_DOS_PARTITION /* include support for FAT/storage*/ -#endif
+#ifdef CONFIG_MUSB_HCD /* include support for usb host */ +#define CONFIG_CMD_USB /* include support for usb cmd */ + +#define CONFIG_USB_STORAGE /* MSC class support */ +#define CONFIG_CMD_STORAGE /* inclue support for usb-storage cmd */ +#define CONFIG_CMD_FAT /* inclue support for FAT/storage */ +#define CONFIG_DOS_PARTITION /* inclue support for FAT/storage */ + +#ifdef CONFIG_USB_KEYBOARD /* HID class support */ +#define CONFIG_SYS_USB_EVENT_POLL +#define CONFIG_PREBOOT "usb start" +#endif /* CONFIG_USB_KEYBOARD */ + +#endif /* CONFIG_MUSB_HCD */ + +#ifdef CONFIG_MUSB_UDC +/* USB device configuration */ +#define CONFIG_USB_DEVICE 1 +#define CONFIG_USB_TTY 1 +#define CONFIG_SYS_CONSOLE_IS_IN_ENV 1 +/* Change these to suit your needs */ +#define CONFIG_USBD_VENDORID 0x0451 +#define CONFIG_USBD_PRODUCTID 0x5678 +#define CONFIG_USBD_MANUFACTURER "Texas Instruments" +#define CONFIG_USBD_PRODUCT_NAME "DA830EVM" +#endif /* CONFIG_MUSB_UDC */ + +#endif /* CONFIG_USB_DA8XX */ #endif /* __CONFIG_H */

Hi,
-----Original Message----- From: Gupta, Ajay Kumar Sent: Sunday, November 15, 2009 11:04 AM To: u-boot@lists.denx.de Cc: linux@bohmer.net; Tom.Rix@windriver.com; Gupta, Ajay Kumar; Subbrathnam, Swaminathan Subject: [PATCH 3/4 v4] DA8xx: Add MUSB host support
Tested USB host functionality on DA830 EVM.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com
drivers/usb/musb/Makefile | 1 + drivers/usb/musb/da8xx.c | 139 +++++++++++++++++++++++++++++++++++++++++++++ drivers/usb/musb/da8xx.h | 103 +++++++++++++++++++++++++++++++++ include/usb.h | 3 +- 4 files changed, 245 insertions(+), 1 deletions(-) create mode 100644 drivers/usb/musb/da8xx.c create mode 100644 drivers/usb/musb/da8xx.h
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile index 09e0a5f..eb4d8fd 100644 --- a/drivers/usb/musb/Makefile +++ b/drivers/usb/musb/Makefile
<snip..>
- /* reset the controller */
- writel(0x1, da8xx_usb_regs->control);
- udelay(5000);
- /* start the on-chip usb phy and its pll */
- if (phy_on() == 0)
return -1;
- /* Returns zero if e.g. not clocked */
- revision = readl(da8xx_usb_regs->revision);
'&' is missing, will resubmit the patch set.
Regards, Ajay
- if (revision == 0)
return -1;
- /* Disable all interrupts */
- writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_set);
- return 0;
+}
+/*
- This function performs DA8xx platform specific deinitialization for
usb0.
- */
+void musb_platform_deinit(void) +{
- /* Turn of the phy */
- phy_off();
- /* flush any interrupts */
- writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_clr);
- writel(0, da8xx_usb_regs->eoi);
+} diff --git a/drivers/usb/musb/da8xx.h b/drivers/usb/musb/da8xx.h new file mode 100644 index 0000000..93234f0 --- /dev/null +++ b/drivers/usb/musb/da8xx.h @@ -0,0 +1,103 @@ +/*
- da8xx.h -- TI's DA8xx platform specific usb wrapper definitions.
- Author: Ajay Kumar Gupta ajay.gupta@ti.com
- Based on drivers/usb/musb/davinci.h
- Copyright (C) 2009 Texas Instruments Incorporated
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
+#ifndef __DA8XX_MUSB_H__ +#define __DA8XX_MUSB_H__
+#include <asm/arch/hardware.h> +#include <asm/arch/gpio_defs.h> +#include "musb_core.h"
+/* Base address of da8xx usb0 wrapper */ +#define DA8XX_USB_OTG_BASE 0x01E00000
+/* Base address of da8xx musb core */ +#define DA8XX_USB_OTG_CORE_BASE (DA8XX_USB_OTG_BASE + 0x400)
+/* Timeout for DA8xx usb module */ +#define DA8XX_USB_OTG_TIMEOUT 0x3FFFFFF
+/*
- DA8xx platform USB wrapper register overlay.
- */
+struct da8xx_usb_regs {
- dv_reg revision;
- dv_reg control;
- dv_reg status;
- dv_reg emulation;
- dv_reg mode;
- dv_reg autoreq;
- dv_reg srpfixtime;
- dv_reg teardown;
- dv_reg intsrc;
- dv_reg intsrc_set;
- dv_reg intsrc_clr;
- dv_reg intmsk;
- dv_reg intmsk_set;
- dv_reg intmsk_clr;
- dv_reg intsrcmsk;
- dv_reg eoi;
- dv_reg intvector;
- dv_reg grndis_size[4];
+};
+#define da8xx_usb_regs ((struct da8xx_usb_regs *)DA8XX_USB_OTG_BASE)
+/* DA8XX interrupt bits definitions */ +#define DA8XX_USB_TX_ENDPTS_MASK 0x1f /* ep0 + 4 tx */ +#define DA8XX_USB_RX_ENDPTS_MASK 0x1e /* 4 rx */ +#define DA8XX_USB_TXINT_SHIFT 0 +#define DA8XX_USB_RXINT_SHIFT 8
+#define DA8XX_USB_USBINT_MASK 0x01ff0000 /* 8 Mentor, DRVVBUS */ +#define DA8XX_USB_TXINT_MASK \
(DA8XX_USB_TX_ENDPTS_MASK << DA8XX_USB_TXINT_SHIFT)
+#define DA8XX_USB_RXINT_MASK \
(DA8XX_USB_RX_ENDPTS_MASK << DA8XX_USB_RXINT_SHIFT)
+/* DA8xx CFGCHIP2 (USB 2.0 PHY Control) register bits */ +#define CFGCHIP2_PHYCLKGD (1 << 17) +#define CFGCHIP2_VBUSSENSE (1 << 16) +#define CFGCHIP2_RESET (1 << 15) +#define CFGCHIP2_OTGMODE (3 << 13) +#define CFGCHIP2_NO_OVERRIDE (0 << 13) +#define CFGCHIP2_FORCE_HOST (1 << 13) +#define CFGCHIP2_FORCE_DEVICE (2 << 13) +#define CFGCHIP2_FORCE_HOST_VBUS_LOW (3 << 13) +#define CFGCHIP2_USB1PHYCLKMUX (1 << 12) +#define CFGCHIP2_USB2PHYCLKMUX (1 << 11) +#define CFGCHIP2_PHYPWRDN (1 << 10) +#define CFGCHIP2_OTGPWRDN (1 << 9) +#define CFGCHIP2_DATPOL (1 << 8) +#define CFGCHIP2_USB1SUSPENDM (1 << 7) +#define CFGCHIP2_PHY_PLLON (1 << 6) /* override PLL suspend */ +#define CFGCHIP2_SESENDEN (1 << 5) /* Vsess_end comparator */ +#define CFGCHIP2_VBDTCTEN (1 << 4) /* Vbus comparator */ +#define CFGCHIP2_REFFREQ (0xf << 0) +#define CFGCHIP2_REFFREQ_12MHZ (1 << 0) +#define CFGCHIP2_REFFREQ_24MHZ (2 << 0) +#define CFGCHIP2_REFFREQ_48MHZ (3 << 0)
+#define DA8XX_USB_VBUS_GPIO (1 << 15) +#endif /* __DA8XX_MUSB_H__ */
diff --git a/include/usb.h b/include/usb.h index 7c47098..7c56ace 100644 --- a/include/usb.h +++ b/include/usb.h @@ -183,7 +183,8 @@ struct usb_device { #if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || \ defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \ defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \
- defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI)
- defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \
- defined(CONFIG_USB_DA8XX)
int usb_lowlevel_init(void); int usb_lowlevel_stop(void); -- 1.6.2.4

Remy,
Any comment on DA8xx USB support patches?
These patch set depends on DA8xx base support patches which are available only on uboot-ti tree.
Regards, Ajay
-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Gupta, Ajay Kumar Sent: Sunday, November 15, 2009 11:19 AM To: u-boot@lists.denx.de Subject: Re: [U-Boot] [PATCH 3/4 v5] DA8xx: Add MUSB host support
Hi,
Tested USB host functionality on DA830 EVM.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com
drivers/usb/musb/Makefile | 1 + drivers/usb/musb/da8xx.c | 139 +++++++++++++++++++++++++++++++++++++++++++++ drivers/usb/musb/da8xx.h | 103 +++++++++++++++++++++++++++++++++ include/usb.h | 3 +- 4 files changed, 245 insertions(+), 1 deletions(-) create mode 100644 drivers/usb/musb/da8xx.c create mode 100644 drivers/usb/musb/da8xx.h
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile index 09e0a5f..eb4d8fd 100644 --- a/drivers/usb/musb/Makefile +++ b/drivers/usb/musb/Makefile
<snip..>
- /* reset the controller */
- writel(0x1, da8xx_usb_regs->control);
- udelay(5000);
- /* start the on-chip usb phy and its pll */
- if (phy_on() == 0)
return -1;
- /* Returns zero if e.g. not clocked */
- revision = readl(da8xx_usb_regs->revision);
'&' is missing, will resubmit the patch set.
Regards, Ajay
- if (revision == 0)
return -1;
- /* Disable all interrupts */
- writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_set);
- return 0;
+}
+/*
- This function performs DA8xx platform specific deinitialization for
usb0.
- */
+void musb_platform_deinit(void) +{
- /* Turn of the phy */
- phy_off();
- /* flush any interrupts */
- writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_clr);
- writel(0, da8xx_usb_regs->eoi);
+} diff --git a/drivers/usb/musb/da8xx.h b/drivers/usb/musb/da8xx.h new file mode 100644 index 0000000..93234f0 --- /dev/null +++ b/drivers/usb/musb/da8xx.h @@ -0,0 +1,103 @@ +/*
- da8xx.h -- TI's DA8xx platform specific usb wrapper definitions.
- Author: Ajay Kumar Gupta ajay.gupta@ti.com
- Based on drivers/usb/musb/davinci.h
- Copyright (C) 2009 Texas Instruments Incorporated
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
+#ifndef __DA8XX_MUSB_H__ +#define __DA8XX_MUSB_H__
+#include <asm/arch/hardware.h> +#include <asm/arch/gpio_defs.h> +#include "musb_core.h"
+/* Base address of da8xx usb0 wrapper */ +#define DA8XX_USB_OTG_BASE 0x01E00000
+/* Base address of da8xx musb core */ +#define DA8XX_USB_OTG_CORE_BASE (DA8XX_USB_OTG_BASE + 0x400)
+/* Timeout for DA8xx usb module */ +#define DA8XX_USB_OTG_TIMEOUT 0x3FFFFFF
+/*
- DA8xx platform USB wrapper register overlay.
- */
+struct da8xx_usb_regs {
- dv_reg revision;
- dv_reg control;
- dv_reg status;
- dv_reg emulation;
- dv_reg mode;
- dv_reg autoreq;
- dv_reg srpfixtime;
- dv_reg teardown;
- dv_reg intsrc;
- dv_reg intsrc_set;
- dv_reg intsrc_clr;
- dv_reg intmsk;
- dv_reg intmsk_set;
- dv_reg intmsk_clr;
- dv_reg intsrcmsk;
- dv_reg eoi;
- dv_reg intvector;
- dv_reg grndis_size[4];
+};
+#define da8xx_usb_regs ((struct da8xx_usb_regs *)DA8XX_USB_OTG_BASE)
+/* DA8XX interrupt bits definitions */ +#define DA8XX_USB_TX_ENDPTS_MASK 0x1f /* ep0 + 4 tx */ +#define DA8XX_USB_RX_ENDPTS_MASK 0x1e /* 4 rx */ +#define DA8XX_USB_TXINT_SHIFT 0 +#define DA8XX_USB_RXINT_SHIFT 8
+#define DA8XX_USB_USBINT_MASK 0x01ff0000 /* 8 Mentor, DRVVBUS */ +#define DA8XX_USB_TXINT_MASK \
(DA8XX_USB_TX_ENDPTS_MASK << DA8XX_USB_TXINT_SHIFT)
+#define DA8XX_USB_RXINT_MASK \
(DA8XX_USB_RX_ENDPTS_MASK << DA8XX_USB_RXINT_SHIFT)
+/* DA8xx CFGCHIP2 (USB 2.0 PHY Control) register bits */ +#define CFGCHIP2_PHYCLKGD (1 << 17) +#define CFGCHIP2_VBUSSENSE (1 << 16) +#define CFGCHIP2_RESET (1 << 15) +#define CFGCHIP2_OTGMODE (3 << 13) +#define CFGCHIP2_NO_OVERRIDE (0 << 13) +#define CFGCHIP2_FORCE_HOST (1 << 13) +#define CFGCHIP2_FORCE_DEVICE (2 << 13) +#define CFGCHIP2_FORCE_HOST_VBUS_LOW (3 << 13) +#define CFGCHIP2_USB1PHYCLKMUX (1 << 12) +#define CFGCHIP2_USB2PHYCLKMUX (1 << 11) +#define CFGCHIP2_PHYPWRDN (1 << 10) +#define CFGCHIP2_OTGPWRDN (1 << 9) +#define CFGCHIP2_DATPOL (1 << 8) +#define CFGCHIP2_USB1SUSPENDM (1 << 7) +#define CFGCHIP2_PHY_PLLON (1 << 6) /* override PLL suspend */ +#define CFGCHIP2_SESENDEN (1 << 5) /* Vsess_end comparator */ +#define CFGCHIP2_VBDTCTEN (1 << 4) /* Vbus comparator */ +#define CFGCHIP2_REFFREQ (0xf << 0) +#define CFGCHIP2_REFFREQ_12MHZ (1 << 0) +#define CFGCHIP2_REFFREQ_24MHZ (2 << 0) +#define CFGCHIP2_REFFREQ_48MHZ (3 << 0)
+#define DA8XX_USB_VBUS_GPIO (1 << 15) +#endif /* __DA8XX_MUSB_H__ */
diff --git a/include/usb.h b/include/usb.h index 7c47098..7c56ace 100644 --- a/include/usb.h +++ b/include/usb.h @@ -183,7 +183,8 @@ struct usb_device { #if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || \ defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \ defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \
- defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI)
- defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \
- defined(CONFIG_USB_DA8XX)
int usb_lowlevel_init(void); int usb_lowlevel_stop(void); -- 1.6.2.4
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

Remy,
-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Gupta, Ajay Kumar Sent: Tuesday, November 17, 2009 7:35 PM To: u-boot@lists.denx.de Subject: Re: [U-Boot] [PATCH 3/4 v5] DA8xx: Add MUSB host support
Remy,
Any comment on DA8xx USB support patches?
These patch set depends on DA8xx base support patches which are available only on uboot-ti tree.
Any comment ?
Regards, Ajay
Regards, Ajay
-----Original Message----- From: u-boot-bounces@lists.denx.de [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Gupta, Ajay Kumar Sent: Sunday, November 15, 2009 11:19 AM To: u-boot@lists.denx.de Subject: Re: [U-Boot] [PATCH 3/4 v5] DA8xx: Add MUSB host support
Hi,
Tested USB host functionality on DA830 EVM.
Signed-off-by: Ajay Kumar Gupta ajay.gupta@ti.com Signed-off-by: Swaminathan S swami.iyer@ti.com
drivers/usb/musb/Makefile | 1 + drivers/usb/musb/da8xx.c | 139 +++++++++++++++++++++++++++++++++++++++++++++ drivers/usb/musb/da8xx.h | 103
+++++++++++++++++++++++++++++++++
include/usb.h | 3 +- 4 files changed, 245 insertions(+), 1 deletions(-) create mode 100644 drivers/usb/musb/da8xx.c create mode 100644 drivers/usb/musb/da8xx.h
diff --git a/drivers/usb/musb/Makefile
b/drivers/usb/musb/Makefile
index 09e0a5f..eb4d8fd 100644 --- a/drivers/usb/musb/Makefile +++ b/drivers/usb/musb/Makefile
<snip..>
- /* reset the controller */
- writel(0x1, da8xx_usb_regs->control);
- udelay(5000);
- /* start the on-chip usb phy and its pll */
- if (phy_on() == 0)
return -1;
- /* Returns zero if e.g. not clocked */
- revision = readl(da8xx_usb_regs->revision);
'&' is missing, will resubmit the patch set.
Regards, Ajay
- if (revision == 0)
return -1;
- /* Disable all interrupts */
- writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_set);
- return 0;
+}
+/*
- This function performs DA8xx platform specific
deinitialization
+for usb0.
- */
+void musb_platform_deinit(void) +{
- /* Turn of the phy */
- phy_off();
- /* flush any interrupts */
- writel((DA8XX_USB_USBINT_MASK | DA8XX_USB_TXINT_MASK |
DA8XX_USB_RXINT_MASK), da8xx_usb_regs->intmsk_clr);
- writel(0, da8xx_usb_regs->eoi);
+} diff --git a/drivers/usb/musb/da8xx.h
b/drivers/usb/musb/da8xx.h new
file mode 100644 index 0000000..93234f0 --- /dev/null +++ b/drivers/usb/musb/da8xx.h @@ -0,0 +1,103 @@ +/*
- da8xx.h -- TI's DA8xx platform specific usb wrapper
definitions.
- Author: Ajay Kumar Gupta ajay.gupta@ti.com
- Based on drivers/usb/musb/davinci.h
- Copyright (C) 2009 Texas Instruments Incorporated
- This program is free software; you can redistribute it and/or
+modify
- it under the terms of the GNU General Public License as
+published by
- the Free Software Foundation; either version 2 of the
License,
+or
- (at your option) any later version.
- This program is distributed in the hope that it will
be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public
+License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
+#ifndef __DA8XX_MUSB_H__ +#define __DA8XX_MUSB_H__
+#include <asm/arch/hardware.h> +#include <asm/arch/gpio_defs.h> +#include "musb_core.h"
+/* Base address of da8xx usb0 wrapper */ #define
DA8XX_USB_OTG_BASE
+0x01E00000
+/* Base address of da8xx musb core */ #define +DA8XX_USB_OTG_CORE_BASE (DA8XX_USB_OTG_BASE + 0x400)
+/* Timeout for DA8xx usb module */ +#define DA8XX_USB_OTG_TIMEOUT 0x3FFFFFF
+/*
- DA8xx platform USB wrapper register overlay.
- */
+struct da8xx_usb_regs {
- dv_reg revision;
- dv_reg control;
- dv_reg status;
- dv_reg emulation;
- dv_reg mode;
- dv_reg autoreq;
- dv_reg srpfixtime;
- dv_reg teardown;
- dv_reg intsrc;
- dv_reg intsrc_set;
- dv_reg intsrc_clr;
- dv_reg intmsk;
- dv_reg intmsk_set;
- dv_reg intmsk_clr;
- dv_reg intsrcmsk;
- dv_reg eoi;
- dv_reg intvector;
- dv_reg grndis_size[4];
+};
+#define da8xx_usb_regs ((struct da8xx_usb_regs +*)DA8XX_USB_OTG_BASE)
+/* DA8XX interrupt bits definitions */ +#define DA8XX_USB_TX_ENDPTS_MASK 0x1f /* ep0 + 4 tx */ +#define DA8XX_USB_RX_ENDPTS_MASK 0x1e /* 4 rx */ +#define DA8XX_USB_TXINT_SHIFT 0 +#define DA8XX_USB_RXINT_SHIFT 8
+#define DA8XX_USB_USBINT_MASK 0x01ff0000 /* 8
Mentor, DRVVBUS
*/ +#define DA8XX_USB_TXINT_MASK \
(DA8XX_USB_TX_ENDPTS_MASK <<
DA8XX_USB_TXINT_SHIFT) #define
+DA8XX_USB_RXINT_MASK \
(DA8XX_USB_RX_ENDPTS_MASK << DA8XX_USB_RXINT_SHIFT)
+/* DA8xx CFGCHIP2 (USB 2.0 PHY Control) register bits */ +#define CFGCHIP2_PHYCLKGD (1 << 17) +#define CFGCHIP2_VBUSSENSE (1 << 16) +#define CFGCHIP2_RESET (1 << 15) +#define CFGCHIP2_OTGMODE (3 << 13) +#define CFGCHIP2_NO_OVERRIDE (0 << 13) +#define CFGCHIP2_FORCE_HOST (1 << 13) +#define CFGCHIP2_FORCE_DEVICE (2 << 13) +#define CFGCHIP2_FORCE_HOST_VBUS_LOW (3 << 13) +#define CFGCHIP2_USB1PHYCLKMUX (1 << 12) +#define CFGCHIP2_USB2PHYCLKMUX (1 << 11) +#define CFGCHIP2_PHYPWRDN (1 << 10) +#define CFGCHIP2_OTGPWRDN (1 << 9) +#define CFGCHIP2_DATPOL (1 << 8) +#define CFGCHIP2_USB1SUSPENDM (1 << 7) +#define CFGCHIP2_PHY_PLLON (1 << 6) /*
override PLL suspend */
+#define CFGCHIP2_SESENDEN (1 << 5) /*
Vsess_end comparator */
+#define CFGCHIP2_VBDTCTEN (1 << 4) /* Vbus
comparator */
+#define CFGCHIP2_REFFREQ (0xf << 0) +#define CFGCHIP2_REFFREQ_12MHZ (1 << 0) +#define CFGCHIP2_REFFREQ_24MHZ (2 << 0) +#define CFGCHIP2_REFFREQ_48MHZ (3 << 0)
+#define DA8XX_USB_VBUS_GPIO (1 << 15) +#endif /* __DA8XX_MUSB_H__ */
diff --git a/include/usb.h b/include/usb.h index 7c47098..7c56ace 100644 --- a/include/usb.h +++ b/include/usb.h @@ -183,7 +183,8 @@ struct usb_device { #if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || \ defined(CONFIG_USB_EHCI) || defined(CONFIG_USB_OHCI_NEW) || \ defined(CONFIG_USB_SL811HS) ||
defined(CONFIG_USB_ISP116X_HCD) || \
- defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI)
- defined(CONFIG_USB_R8A66597_HCD) ||
defined(CONFIG_USB_DAVINCI) || \
- defined(CONFIG_USB_DA8XX)
int usb_lowlevel_init(void); int usb_lowlevel_stop(void); -- 1.6.2.4
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

Hi,
2009/12/21 Gupta, Ajay Kumar ajay.gupta@ti.com:
Remy,
How about USB patches from me supporting MUSB on DA8xx platform?
Okay let's check...
2009/11/17 Gupta, Ajay Kumar ajay.gupta@ti.com:
Remy,
Any comment on DA8xx USB support patches?
These patch set depends on DA8xx base support patches which are available only on uboot-ti tree.
The last time I checked this series was not mainlined. Is it now? It is always fun with these dependencies to other repos.. ;-) If the series can be applied to current mainline, I will take them in...
Kind regards,
Remy

Dear Remy Bohmer,
In message 3efb10970912211348q31ed3f5aod24d7f5cfc05b5e7@mail.gmail.com you wrote:
Any comment on DA8xx USB support patches?
These patch set depends on DA8xx base support patches which are available only on uboot-ti tree.
The last time I checked this series was not mainlined. Is it now? It is always fun with these dependencies to other repos.. ;-) If the series can be applied to current mainline, I will take them in...
Right.
I can only repeat myself: patches shall be based on the mainline "master" (or "next", if it exists) branch.
Best regards,
Wolfgang Denk

Dear Remy Bohmer,
In message 3efb10970912211348q31ed3f5aod24d7f5cfc05b5e7@mail.gmail.com you wrote:
Any comment on DA8xx USB support patches?
These patch set depends on DA8xx base support patches which are
available
only on uboot-ti tree.
I believe it is in u-boot master as of now
http://git.denx.de/?p=u-boot.git&a=search&h=HEAD&st=commit&s...
It takes time for stuff in u-boot-ti to go to u-boot as we have an intermediate u-boot-arm :-)
We are doing things the way it is supposed to be done though :-)
The last time I checked this series was not mainlined. Is it now?
So I believe
It is always fun with these dependencies to other repos.. ;-) If the series can be applied to current mainline, I will take them in...
This I cannot confirm as the base patches were itself were going through a process of review at that point of time.
Right.
I can only repeat myself: patches shall be based on the mainline "master" (or "next", if it exists) branch.
Best regards,
Wolfgang Denk
Thanks, Sandeep

Remy,
-----Original Message----- From: l.pinguin@gmail.com [mailto:l.pinguin@gmail.com] On Behalf Of Remy Bohmer Sent: Tuesday, December 22, 2009 3:18 AM To: Gupta, Ajay Kumar Cc: u-boot@lists.denx.de Subject: Re: [PATCH 3/4 v5] DA8xx: Add MUSB host support
Hi,
2009/12/21 Gupta, Ajay Kumar ajay.gupta@ti.com:
Remy,
How about USB patches from me supporting MUSB on DA8xx platform?
Okay let's check...
2009/11/17 Gupta, Ajay Kumar ajay.gupta@ti.com:
Remy,
Any comment on DA8xx USB support patches?
These patch set depends on DA8xx base support patches which are
available
only on uboot-ti tree.
The last time I checked this series was not mainlined. Is it now? It is always fun with these dependencies to other repos.. ;-) If the series can be applied to current mainline, I will take them in...
It applies to mainline except one. I will refresh the patch set and submit.
Regards, Ajay
Kind regards,
Remy
participants (5)
-
Ajay Kumar Gupta
-
Gupta, Ajay Kumar
-
Paulraj, Sandeep
-
Remy Bohmer
-
Wolfgang Denk