public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/3] AM335x: Add USB support in u-boot.
@ 2012-06-22  6:17 Harman Sohanpal
  2012-06-22  6:17 ` [U-Boot] [PATCH 1/3] AM335x : Add USB support for AM335x " Harman Sohanpal
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Harman Sohanpal @ 2012-06-22  6:17 UTC (permalink / raw)
  To: u-boot

These patches add usb support in u-boot for AM335x.
I have tested this code on AM335x evm and beaglebone in 
the host mode using mass storage class.

Gene Zarkhin (1):
  AM335x : Add USB support for AM335x in u-boot

Harman Sohanpal (2):
  AM335x : Configs to add USB host support.
  musb_udc : Fix compile warning.

 drivers/usb/musb/Makefile    |    1 +
 drivers/usb/musb/am335x.c    |  121 ++++++++++++++++++++++++++++++++++++++++++
 drivers/usb/musb/am335x.h    |  113 +++++++++++++++++++++++++++++++++++++++
 drivers/usb/musb/musb_core.h |    2 +
 drivers/usb/musb/musb_hcd.h  |    3 -
 include/configs/am335x_evm.h |   41 ++++++++++++++
 include/usb.h                |    3 +-
 7 files changed, 280 insertions(+), 4 deletions(-)
 create mode 100644 drivers/usb/musb/am335x.c
 create mode 100644 drivers/usb/musb/am335x.h

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

* [U-Boot] [PATCH 1/3] AM335x : Add USB support for AM335x in u-boot
  2012-06-22  6:17 [U-Boot] [PATCH 0/3] AM335x: Add USB support in u-boot Harman Sohanpal
@ 2012-06-22  6:17 ` Harman Sohanpal
  2012-06-22  6:17 ` [U-Boot] [PATCH 2/3] AM335x : Configs to add USB host support Harman Sohanpal
  2012-06-22  6:17 ` [U-Boot] [PATCH 3/3] musb_udc : Fix compile warning Harman Sohanpal
  2 siblings, 0 replies; 5+ messages in thread
From: Harman Sohanpal @ 2012-06-22  6:17 UTC (permalink / raw)
  To: u-boot

From: Gene Zarkhin <gene_zarkhin@bose.com>

This patch adds USB support in uboot for AM335x.
By default the USB 1 module is enabled.
The support for USB 0 can be enabled by changing the
USB base address and the phy control register address
in the header file am335x.h.

Signed-off-by: Gene Zarkhin <gene_zarkhin@bose.com>
Signed-off-by: Harman Sohanpal <harman_sohanpal@ti.com>
---
 drivers/usb/musb/Makefile |    1 +
 drivers/usb/musb/am335x.c |  121 +++++++++++++++++++++++++++++++++++++++++++++
 drivers/usb/musb/am335x.h |  113 ++++++++++++++++++++++++++++++++++++++++++
 include/usb.h             |    3 +-
 4 files changed, 237 insertions(+), 1 deletions(-)
 create mode 100644 drivers/usb/musb/am335x.c
 create mode 100644 drivers/usb/musb/am335x.h

diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
index 20b5503..d00ec40 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -32,6 +32,7 @@ COBJS-$(CONFIG_USB_DAVINCI) += davinci.o
 COBJS-$(CONFIG_USB_OMAP3) += omap3.o
 COBJS-$(CONFIG_USB_DA8XX) += da8xx.o
 COBJS-$(CONFIG_USB_AM35X) += am35x.o
+COBJS-$(CONFIG_USB_AM335X) += am335x.o
 
 COBJS	:= $(COBJS-y)
 SRCS	:= $(COBJS:.o=.c)
diff --git a/drivers/usb/musb/am335x.c b/drivers/usb/musb/am335x.c
new file mode 100644
index 0000000..4b59769
--- /dev/null
+++ b/drivers/usb/musb/am335x.c
@@ -0,0 +1,121 @@
+/*
+ * am335x.c - TI's AM335x platform specific usb wrapper functions.
+ *
+ * Author: gene Zarkhin <gene_zarkhin@bose.com>
+ * Modified by: Harman Sohanpal <harman_sohanpal@ti.com>
+ *
+ * Based on drivers/usb/musb/da8xx.c
+ *
+ * Copyright (c) 2012 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 "am335x.h"
+
+/* MUSB platform configuration */
+struct musb_config musb_cfg = {
+	.regs = (struct musb_regs *)(AM335X_USB_OTG_CORE_BASE),
+	.timeout	= AM335X_USB_OTG_TIMEOUT,
+	.musb_speed	= 0,
+};
+
+/*
+ * Enable the USB phy
+ */
+static u8 phy_on(void)
+{
+	u32 timeout;
+	u32 regAddr = CM_REGISTERS + USB_CTRL0_REG_OFFSET;
+	u32 usb_ctrl_reg;
+
+	usb_ctrl_reg = readl(regAddr);
+	usb_ctrl_reg &= ~(CM_PHY_PWRDN | CM_PHY_OTG_PWRDN);
+	usb_ctrl_reg |= (OTGVDET_EN | OTGSESSENDEN);
+	writel(usb_ctrl_reg, regAddr);
+
+	timeout = musb_cfg.timeout;
+	writel(0x1, &am335x_usb_regs->ctrl);
+	udelay(6000);
+	while (timeout--) {
+		if ((readl(&am335x_usb_regs->ctrl) & SOFT_RESET_BIT) == 0)
+			return 1;
+	}
+	/* USB phy was not turned on */
+	return 0;
+}
+
+/*
+ * Disable the USB phy
+ */
+static void phy_off(void)
+{
+	u32 regAddr = CM_REGISTERS + USB_CTRL0_REG_OFFSET;
+	u32 usb_ctrl_reg;
+
+	usb_ctrl_reg = readl(regAddr);
+	usb_ctrl_reg |= (CM_PHY_PWRDN | CM_PHY_OTG_PWRDN);
+	writel(usb_ctrl_reg, regAddr);
+
+	/* Disable the USB module */
+	writel(PRCM_MODULE_DSBL, CM_PER_USB0_CLKCTRL);
+}
+
+/*
+ * This function performs platform specific initialization for usb0.
+ */
+int musb_platform_init(void)
+{
+	u32 timeout;
+	u32 revision;
+
+	/* USB */
+	/* PLL Gate set up */
+	writel(DPLL_CLKDCOLDO_GATE_CTRL, CM_CLKDCOLDO_DPLL_PER);
+
+	/* CLOCK */
+	writel(PRCM_MOD_EN, CM_PER_USB0_CLKCTRL);
+	timeout = musb_cfg.timeout;
+	while (timeout--) {
+		if (readl(CM_PER_USB0_CLKCTRL) != PRCM_MOD_EN)
+			continue;
+		else
+			break;
+	}
+	if (timeout == 0) {
+		printf("\nUSB module not enabled\nAborting");
+		return -1;
+	}
+
+	/* USB module fully functional */
+	/* start the on-chip usb phy and its pll */
+	if (phy_on() == 0)
+		return -1;
+	/* Returns zero if e.g. not clocked */
+	revision = readl(&am335x_usb_regs->revision);
+	if (revision == 0)
+		return -1;
+
+	return 0;
+}
+
+/*
+ * This function performs platform specific deinitialization for usb0.
+ */
+void musb_platform_deinit(void)
+{
+	/* Turn off the phy */
+	phy_off();
+}
diff --git a/drivers/usb/musb/am335x.h b/drivers/usb/musb/am335x.h
new file mode 100644
index 0000000..790531e
--- /dev/null
+++ b/drivers/usb/musb/am335x.h
@@ -0,0 +1,113 @@
+/*
+ * am335x.h - TI's AM335x platform specific usb wrapper definitions.
+ *
+ * Author: Gene Zarkhin <gene_zarkhin@bose.com>
+ * Modified by: Harman Sohanpal <harman_sohanpal@ti.com>
+ *
+ * Based on drivers/usb/musb/da8xx.h
+ *
+ * Copyright (c) 2012 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 __AM335X_USB_H__
+#define __AM335X_USB_H__
+
+#include "musb_core.h"
+/* PRCM Definitions */
+#define CM_CLKDCOLDO_DPLL_PER		(CM_WKUP + 0x7c)
+#define CM_PER_USB0_CLKCTRL		(CM_PER + 0x1c)
+#define PRCM_MOD_EN			0x2
+#define PRCM_MODULE_DSBL		0x0
+
+
+/* Control Module Registers */
+#define CM_REGISTERS			CTRL_BASE
+#define USB_CTRL0_REG_OFFSET	(0x628)
+#define USB_CTRL1_REG_OFFSET	(0x680)
+
+#define PRCM_IDLEST                             0x30000
+#define DPLL_CLKDCOLDO_GATE_CTRL                0x300
+
+/* Base address of musb wrapper */
+#define AM335X_USB_OTG_BASE	0x47401800
+
+/* Base address of musb core */
+#define AM335X_USB_OTG_CORE_BASE	(AM335X_USB_OTG_BASE + 0x400)
+
+/* Timeout for AM35x usb module */
+#define AM335X_USB_OTG_TIMEOUT	0x3FFFFFF
+
+/*
+ * AM335x platform USB wrapper register overlay.
+ */
+struct am335x_usb_regs {
+	u32 revision;			/* 0x00 */
+	u32 reserved0[4];
+	u32 ctrl;			/* 0x14 */
+	u32 status;			/* 0x18 */
+	u32 reserved1[1];
+	u32 irqmstat;			/* 0x20 */
+	u32 irqeoi;			/* 0x24 */
+	u32 irqstatraw0;		/* 0x28 */
+	u32 irqstatraw1;		/* 0x2c */
+	u32 irqstat0;			/* 0x30 */
+	u32 irqstat1;			/* 0x34 */
+	u32 irqenableset0;		/* 0x38 */
+	u32 irqenableset1;		/* 0x3c */
+	u32 irqenableclr0;		/* 0x40 */
+	u32 irqenableclr1;		/* 0x44 */
+	u32 reserved2[10];
+	u32 txmode;			/* 0x70 */
+	u32 rxmode;			/* 0x74 */
+	u32 reserved3[2];
+	u32 genrndisep1;		/* 0x80	*/
+	u32 genrndisep2;		/* 0x84	*/
+	u32 genrndisep3;		/* 0x88	*/
+	u32 genrndisep4;		/* 0x8c	*/
+	u32 genrndisep5;		/* 0x90	*/
+	u32 genrndisep6;		/* 0x94	*/
+	u32 genrndisep7;		/* 0x98	*/
+	u32 genrndisep8;		/* 0x9c	*/
+	u32 genrndisep9;		/* 0xa0	*/
+	u32 genrndisep10;		/* 0xa4	*/
+	u32 genrndisep11;		/* 0xa8	*/
+	u32 genrndisep12;		/* 0xac	*/
+	u32 genrndisep13;		/* 0xb0	*/
+	u32 genrndisep14;		/* 0xb4	*/
+	u32 genrndisep15;		/* 0xb8	*/
+	u32 reserved4[5];
+	u32 autoreq;			/* 0xd0	*/
+	u32 srpfixtime;			/* 0xd4	*/
+	u32 tdown;			/* 0xd8	*/
+	u32 reserved5[1];
+	u32 utmi;			/* 0xe0	*/
+	u32 utmilb;			/* 0xe4	*/
+	u32 mode;			/* 0xe8	*/
+};
+
+#define am335x_usb_regs ((struct am335x_usb_regs *)AM335X_USB_OTG_BASE)
+
+/* USB 2.0 PHY Control */
+#define CM_PHY_PWRDN		(1 << 0)
+#define CM_PHY_OTG_PWRDN	(1 << 1)
+#define OTGVDET_EN		(1 << 19)
+#define OTGSESSENDEN		(1 << 20)
+
+/* USB CTRL REG FIELDS */
+#define SOFT_RESET_BIT		(1 << 0)
+
+#endif	/* __AM335X_USB_H__ */
diff --git a/include/usb.h b/include/usb.h
index 6da91e7..13f5434 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -141,7 +141,8 @@ struct usb_device {
 	defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \
 	defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \
 	defined(CONFIG_USB_OMAP3) || defined(CONFIG_USB_DA8XX) || \
-	defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X)
+	defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X) || \
+	defined(CONFIG_USB_AM335X)
 
 int usb_lowlevel_init(void);
 int usb_lowlevel_stop(void);
-- 
1.7.0.4

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

* [U-Boot] [PATCH 2/3] AM335x : Configs to add USB host support.
  2012-06-22  6:17 [U-Boot] [PATCH 0/3] AM335x: Add USB support in u-boot Harman Sohanpal
  2012-06-22  6:17 ` [U-Boot] [PATCH 1/3] AM335x : Add USB support for AM335x " Harman Sohanpal
@ 2012-06-22  6:17 ` Harman Sohanpal
  2012-06-22  7:01   ` Stefan Roese
  2012-06-22  6:17 ` [U-Boot] [PATCH 3/3] musb_udc : Fix compile warning Harman Sohanpal
  2 siblings, 1 reply; 5+ messages in thread
From: Harman Sohanpal @ 2012-06-22  6:17 UTC (permalink / raw)
  To: u-boot

This patch adds required configs in config file for
am335x_evm to add support for usb host mode.
To enable USB device mode, add CONFIG_MUSB_UDC in
place of CONFIG_MUSB_HCD

Signed-off-by: Harman Sohanpal <harman_sohanpal@ti.com>
---
 include/configs/am335x_evm.h |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
index d0fbc88..d19f914 100644
--- a/include/configs/am335x_evm.h
+++ b/include/configs/am335x_evm.h
@@ -165,6 +165,47 @@
 #define CONFIG_SKIP_LOWLEVEL_INIT
 #endif
 
+
+/*
+ * USB configuration
+ * Enable CONFIG_MUSB_HCD for Host functionalities MSC, keyboard
+ * Enable CONFIG_MUSB_UDC for Device functionalities.
+ */
+#define CONFIG_USB_AM335X                1
+#define CONFIG_MUSB_HCD                 1
+
+#ifdef CONFIG_USB_AM335X
+
+#ifdef CONFIG_MUSB_HCD
+#define CONFIG_CMD_USB
+
+#define CONFIG_USB_STORAGE
+#define CONGIG_CMD_STORAGE
+#define CONFIG_CMD_FAT
+
+#ifdef CONFIG_USB_KEYBOARD
+#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 */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_USB_DEVICE               1
+#define CONFIG_USB_TTY                  1
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV    1
+#endif	/* CONFIG_SPL_BUILD */
+/* 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        "AM335xEVM"
+#endif /* CONFIG_MUSB_UDC */
+
+#endif /* CONFIG_USB_AM335X */
+
 /* Unsupported features */
 #undef CONFIG_USE_IRQ
 
-- 
1.7.0.4

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

* [U-Boot] [PATCH 3/3] musb_udc : Fix compile warning.
  2012-06-22  6:17 [U-Boot] [PATCH 0/3] AM335x: Add USB support in u-boot Harman Sohanpal
  2012-06-22  6:17 ` [U-Boot] [PATCH 1/3] AM335x : Add USB support for AM335x " Harman Sohanpal
  2012-06-22  6:17 ` [U-Boot] [PATCH 2/3] AM335x : Configs to add USB host support Harman Sohanpal
@ 2012-06-22  6:17 ` Harman Sohanpal
  2 siblings, 0 replies; 5+ messages in thread
From: Harman Sohanpal @ 2012-06-22  6:17 UTC (permalink / raw)
  To: u-boot

This patch fix the compile warning :
implicit declaration of musb_platform_init
when CONFIG_MUSB_UDC is defined.
The extern musb_platform_init was declared in musb_hcd.h
but no such extern function was declared for musb_udc.
So a common function has been declared in musb_core.h
which can be used for both host mode and device mode.

Signed-off-by: Harman Sohanpal <harman_sohanpal@ti.com>
---
 drivers/usb/musb/musb_core.h |    2 ++
 drivers/usb/musb/musb_hcd.h  |    3 ---
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index a8adcce..14253f0 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -360,6 +360,8 @@ extern void musb_start(void);
 extern void musb_configure_ep(const struct musb_epinfo *epinfo, u8 cnt);
 extern void write_fifo(u8 ep, u32 length, void *fifo_data);
 extern void read_fifo(u8 ep, u32 length, void *fifo_data);
+extern int musb_platform_init(void);
+extern void musb_platform_deinit(void);
 
 #if defined(CONFIG_USB_BLACKFIN)
 /* Every USB register is accessed as a 16-bit even if the value itself
diff --git a/drivers/usb/musb/musb_hcd.h b/drivers/usb/musb/musb_hcd.h
index dde7d37..5621f7e 100644
--- a/drivers/usb/musb/musb_hcd.h
+++ b/drivers/usb/musb/musb_hcd.h
@@ -105,8 +105,5 @@ extern unsigned char new[];
 #define RH_REQ_ERR		   -1
 #define RH_NACK			   0x00
 
-/* extern functions */
-extern int musb_platform_init(void);
-extern void musb_platform_deinit(void);
 
 #endif	/* __MUSB_HCD_H__ */
-- 
1.7.0.4

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

* [U-Boot] [PATCH 2/3] AM335x : Configs to add USB host support.
  2012-06-22  6:17 ` [U-Boot] [PATCH 2/3] AM335x : Configs to add USB host support Harman Sohanpal
@ 2012-06-22  7:01   ` Stefan Roese
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Roese @ 2012-06-22  7:01 UTC (permalink / raw)
  To: u-boot

On Friday 22 June 2012 08:17:15 Harman Sohanpal wrote:
> This patch adds required configs in config file for
> am335x_evm to add support for usb host mode.
> To enable USB device mode, add CONFIG_MUSB_UDC in
> place of CONFIG_MUSB_HCD
> 
> Signed-off-by: Harman Sohanpal <harman_sohanpal@ti.com>
> ---
>  include/configs/am335x_evm.h |   41
> +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 41
> insertions(+), 0 deletions(-)
> 
> diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
> index d0fbc88..d19f914 100644
> --- a/include/configs/am335x_evm.h
> +++ b/include/configs/am335x_evm.h
> @@ -165,6 +165,47 @@
>  #define CONFIG_SKIP_LOWLEVEL_INIT
>  #endif
> 
> +
> +/*
> + * USB configuration
> + * Enable CONFIG_MUSB_HCD for Host functionalities MSC, keyboard
> + * Enable CONFIG_MUSB_UDC for Device functionalities.
> + */
> +#define CONFIG_USB_AM335X                1
> +#define CONFIG_MUSB_HCD                 1

Please don't add the "1" to the defines. Simply define the value, thats 
enough.

> +
> +#ifdef CONFIG_USB_AM335X
> +
> +#ifdef CONFIG_MUSB_HCD
> +#define CONFIG_CMD_USB
> +
> +#define CONFIG_USB_STORAGE
> +#define CONGIG_CMD_STORAGE
> +#define CONFIG_CMD_FAT
> +
> +#ifdef CONFIG_USB_KEYBOARD
> +#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 */
> +#ifndef CONFIG_SPL_BUILD
> +#define CONFIG_USB_DEVICE               1
> +#define CONFIG_USB_TTY                  1
> +#define CONFIG_SYS_CONSOLE_IS_IN_ENV    1

Here again. No "1" please.

Thanks,
Stefan

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

end of thread, other threads:[~2012-06-22  7:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-22  6:17 [U-Boot] [PATCH 0/3] AM335x: Add USB support in u-boot Harman Sohanpal
2012-06-22  6:17 ` [U-Boot] [PATCH 1/3] AM335x : Add USB support for AM335x " Harman Sohanpal
2012-06-22  6:17 ` [U-Boot] [PATCH 2/3] AM335x : Configs to add USB host support Harman Sohanpal
2012-06-22  7:01   ` Stefan Roese
2012-06-22  6:17 ` [U-Boot] [PATCH 3/3] musb_udc : Fix compile warning Harman Sohanpal

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox