Skip to contentSkip to conversation

Add EHCI driver for Atmel SoC

PATCH Superseded Bo Shen 3 participants 6 messages Jun 26, 2012 – Jun 27, 2012

Subsystems (3)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Bo Shen

author
#0 lore raw

v2 cover Add EHCI driver for Atmel SoC

This patch series is to add EHCI driver for Atmel SoC, and enable EHCI support in at91sam9m10g45ek board

Bo Shen (2):
Atmel : usb : add EHCI driver for Atmel SoC
AT91: at91sam9m10g45ek : Enable EHCI instead OHCI

 drivers/usb/host/Makefile          |    1 +
 drivers/usb/host/ehci-atmel.c      |   68 ++++++++++++++++++++++++++++++++++++
 include/configs/at91sam9m10g45ek.h |   20 ++---------
 3 files changed, 72 insertions(+), 17 deletions(-)
 create mode 100644 drivers/usb/host/ehci-atmel.c
Signature · 1 line
1.7.9.5
author
#1 lore raw

PATCH v2 1/2 Atmel : usb : add EHCI driver for Atmel SoC

Some Atmel SoC support USB EHCI, add the EHCI driver to support it.

To enable the USB EHCI, add the following configuration options into board relative configuration file and remove USB OHCI options.

    #define CONFIG_USB_EHCI
    #define CONFIG_USB_EHCI_ATMEL
    #define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS     2

---

Change since v1:
Add WATCHDOG_RESET to avoid infinite loop.

---
 drivers/usb/host/Makefile     |    1 +
 drivers/usb/host/ehci-atmel.c |   68 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100644 drivers/usb/host/ehci-atmel.c
drivers/usb/host/Makefile +1 -0
index 59c3e57..4547f37 100644
@@ -36,6 +36,7 @@ COBJS-$(CONFIG_USB_SL811HS) += sl811-hcd.o
 # echi
 COBJS-$(CONFIG_USB_EHCI) += ehci-hcd.o
 COBJS-$(CONFIG_USB_EHCI_ARMADA100) += ehci-armada100.o utmi-armada100.o
+COBJS-$(CONFIG_USB_EHCI_ATMEL) += ehci-atmel.o
 ifdef CONFIG_MPC512X
 COBJS-$(CONFIG_USB_EHCI_FSL) += ehci-mpc512x.o
 else
drivers/usb/host/ehci-atmel.c new file +68 -0

68 lines not on this page · raw message

Signature · 1 line
1.7.9.5
#2 lore raw

PATCH v2 1/2 Atmel : usb : add EHCI driver for Atmel SoC

Dear Bo Shen,

Quoted 70 lines

Some Atmel SoC support USB EHCI, add the EHCI driver to support it.

To enable the USB EHCI, add the following configuration options into board relative configuration file and remove USB OHCI options.

    #define CONFIG_USB_EHCI
    #define CONFIG_USB_EHCI_ATMEL
    #define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS     2

---

Change since v1:
Add WATCHDOG_RESET to avoid infinite loop.

---
 drivers/usb/host/Makefile     |    1 +
 drivers/usb/host/ehci-atmel.c |   68
+++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69
insertions(+)
 create mode 100644 drivers/usb/host/ehci-atmel.c
drivers/usb/host/Makefile +1 -0
index 59c3e57..4547f37 100644
@@ -36,6 +36,7 @@ COBJS-$(CONFIG_USB_SL811HS) += sl811-hcd.o
 # echi
 COBJS-$(CONFIG_USB_EHCI) += ehci-hcd.o
 COBJS-$(CONFIG_USB_EHCI_ARMADA100) += ehci-armada100.o utmi-armada100.o
+COBJS-$(CONFIG_USB_EHCI_ATMEL) += ehci-atmel.o
 ifdef CONFIG_MPC512X
 COBJS-$(CONFIG_USB_EHCI_FSL) += ehci-mpc512x.o
 else
drivers/usb/host/ehci-atmel.c new file +30 -0
new file mode 100644
index 0000000..21037fe
@@ -0,0 +1,68 @@
+/*
+ * (C) Copyright 2012
+ * Atmel Semiconductor <www.atmel.com>
+ * Written-by: Bo Shen <[email protected]>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <usb.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/at91_pmc.h>

drivers/usb/host/ehci-atmel.c line 40

Quoted 10 lines
drivers/usb/host/ehci-atmel.c new file +10 -0
+#include <asm/arch/clk.h>
+
+#include "ehci.h"
+#include "ehci-core.h"
+
+int ehci_hcd_init(void)
+{
+	at91_pmc_t *pmc = (at91_pmc_t *)ATMEL_BASE_PMC;
+
+	/* Enable UPLL  */

Two spaces after UPLL, remove one.

drivers/usb/host/ehci-atmel.c line 43

Quoted 3 lines
drivers/usb/host/ehci-atmel.c new file +3 -0
+	writel(AT91_PMC_UPLLEN | AT91_PMC_BIASEN, &pmc->uckr);
+	while ((readl(&pmc->sr) & AT91_PMC_LOCKU) != AT91_PMC_LOCKU)
+		WATCHDOG_RESET();

Ok, this is an endless loop, can you add timeout?

Quoted 10 lines
drivers/usb/host/ehci-atmel.c new file +10 -0
+
+	/* Enable USB Host clock */
+	writel(1 << ATMEL_ID_UHPHS, &pmc->pcer);
+
+	hccr = (struct ehci_hccr *)ATMEL_BASE_EHCI;
+	hcor = (struct ehci_hcor *)((uint32_t)hccr +
+			HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+
+	return 0;
+}

drivers/usb/host/ehci-atmel.c line 63

Quoted 10 lines
drivers/usb/host/ehci-atmel.c new file +10 -0
+
+int ehci_hcd_stop(void)
+{
+	at91_pmc_t *pmc = (at91_pmc_t *)ATMEL_BASE_PMC;
+
+	/* Disable USB Host Clock */
+	writel(1 << ATMEL_ID_UHPHS, &pmc->pcdr);
+
+	/* Disable UPLL */
+	writel(readl(&pmc->uckr) & (~AT91_PMC_UPLLEN), &pmc->uckr);

& ~XXXXXXX is enough, remove the () .

drivers/usb/host/ehci-atmel.c line 65

Quoted 2 lines
drivers/usb/host/ehci-atmel.c new file +2 -0
+	while ((readl(&pmc->sr) & AT91_PMC_LOCKU) == AT91_PMC_LOCKU)
+		WATCHDOG_RESET();

Ditto here

drivers/usb/host/ehci-atmel.c line 53

Quoted 3 lines
drivers/usb/host/ehci-atmel.c new file +3 -0
+
+	return 0;
+}

Otherwise it's good :-) One more rework and I'll apply it to usb tree.

Best regards,
Marek Vasut

author
#3 lore raw

PATCH v2 2/2 AT91: at91sam9m10g45ek : Enable EHCI instead OHCI

In reply to Bo Shen

Enable EHCI support instead OHCI

---
 include/configs/at91sam9m10g45ek.h |   20 +++-----------------
 1 file changed, 3 insertions(+), 17 deletions(-)
include/configs/at91sam9m10g45ek.h +3 -17
index f8b3095..1d5fc8f 100644
@@ -59,17 +59,6 @@
 #define CONFIG_USART_BASE		ATMEL_BASE_DBGU
 #define	CONFIG_USART_ID			ATMEL_ID_SYS
 
-/*
- * This needs to be defined for the OHCI code to work but it is defined as
- * ATMEL_ID_UHPHS in the CPU specific header files.
- */
-#define ATMEL_ID_UHP		ATMEL_ID_UHPHS
-
-/*
- * Specify the clock enable bit in the PMC_SCER register.
- */
-#define ATMEL_PMC_UHP		AT91SAM926x_PMC_UHP
-
 /* LCD */
 #define CONFIG_LCD
 #define LCD_BPP				LCD_COLOR8
@@ -147,13 +136,10 @@
 #define CONFIG_RESET_PHY_R
 
 /* USB */
-#define CONFIG_USB_ATMEL
-#define CONFIG_USB_OHCI_NEW
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_ATMEL
+#define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS	2
 #define CONFIG_DOS_PARTITION
-#define CONFIG_SYS_USB_OHCI_CPU_INIT
-#define CONFIG_SYS_USB_OHCI_REGS_BASE	ATMEL_BASE_HCI
-#define CONFIG_SYS_USB_OHCI_SLOT_NAME	"at91sam9g45"
-#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS	2
 #define CONFIG_USB_STORAGE
 
 #define CONFIG_SYS_LOAD_ADDR		0x22000000	/* load address */
Signature · 1 line
1.7.9.5
#4 lore raw

PATCH v2 2/2 AT91: at91sam9m10g45ek : Enable EHCI instead OHCI

Quoted 3 lines · Bo Shen

Enable EHCI support instead OHCI

I have no style objections.
Marek, would you take this and apply it in your usb tree (to have the providing code and user side by side) or should I take it?

Quoted 3 lines
---
 include/configs/at91sam9m10g45ek.h |   20 +++-----------------
 1 file changed, 3 insertions(+), 17 deletions(-)
#5 lore raw

PATCH v2 2/2 AT91: at91sam9m10g45ek : Enable EHCI instead OHCI

Dear Andreas Bie?mann,

Quoted 10 lines · Bo Shen
Quoted 3 lines

Enable EHCI support instead OHCI

I have no style objections.
Marek, would you take this and apply it in your usb tree (to have the providing code and user side by side) or should I take it?

Take it

Quoted 4 lines
Quoted 4 lines

---

 include/configs/at91sam9m10g45ek.h |   20 +++-----------------
 1 file changed, 3 insertions(+), 17 deletions(-)

Best regards,
Marek Vasut