Add EHCI driver for Atmel SoC
Subsystems (3)
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
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
@@ -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
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 2Signed-off-by Bo Shen <[email protected]>---
Change since v1:
AddWATCHDOG_RESETto 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.cdrivers/usb/host/Makefile +1
-0@@ -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 elsedrivers/usb/host/ehci-atmel.c new file +30
-0@@ -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
PATCH v2 2/2 AT91: at91sam9m10g45ek : Enable EHCI instead OHCI
In reply to Bo ShenEnable EHCI support instead OHCI
--- include/configs/at91sam9m10g45ek.h | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-)
include/configs/at91sam9m10g45ek.h +3 -17
@@ -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
PATCH v2 2/2 AT91: at91sam9m10g45ek : Enable EHCI instead OHCI
Quoted 3 lines · Bo Shen
Enable EHCI support instead OHCI
Signed-off-by Bo Shen <[email protected]>
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(-)
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
Signed-off-by Bo Shen <[email protected]>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?Acked-by Andreas Bie?mann <[email protected]>
Take it
Quoted 4 lines
Quoted 4 lines
---
include/configs/at91sam9m10g45ek.h | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-)
Best regards,
Marek Vasut