From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bo Shen Date: Mon, 25 Jun 2012 09:31:41 +0800 Subject: [U-Boot] [PATCH] Atmel : usb : add EHCI driver for Atmel SoC In-Reply-To: <201206211217.26725.marex@denx.de> References: <1340265033-31321-1-git-send-email-voice.shen@atmel.com> <201206211217.26725.marex@denx.de> Message-ID: <4FE7BF7D.3040006@atmel.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Marek, On 6/21/2012 18:17, Marek Vasut wrote: > Dear Bo Shen, > >> 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 >> >> Signed-off-by: Bo Shen >> --- >> drivers/usb/host/Makefile | 1 + >> drivers/usb/host/ehci-atmel.c | 67 >> +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 >> insertions(+) >> create mode 100644 drivers/usb/host/ehci-atmel.c >> >> diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile >> index 59c3e57..4547f37 100644 >> --- a/drivers/usb/host/Makefile >> +++ b/drivers/usb/host/Makefile >> @@ -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 >> diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c >> new file mode 100644 >> index 0000000..a3418c4 >> --- /dev/null >> +++ b/drivers/usb/host/ehci-atmel.c >> @@ -0,0 +1,67 @@ >> +/* >> + * (C) Copyright 2012 >> + * Atmel Semiconductor >> + * Written-by: Bo Shen >> + * >> + * 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 >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include "ehci.h" >> +#include "ehci-core.h" >> + >> +int ehci_hcd_init(void) >> +{ >> + at91_pmc_t *pmc = (at91_pmc_t *)ATMEL_BASE_PMC; >> + >> + /* Enable UPLL */ >> + writel(AT91_PMC_UPLLEN | AT91_PMC_BIASEN,&pmc->uckr); >> + while ((readl(&pmc->sr)& AT91_PMC_LOCKU) != AT91_PMC_LOCKU) >> + ; > > Add WATCHDOG_RESET() and fix it not to be an endless loop. OK, I will fix it at next version patch. > >> + >> + /* 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; >> +} >> + >> +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); >> + while ((readl(&pmc->sr)& AT91_PMC_LOCKU) == AT91_PMC_LOCKU) >> + ; > > DTTO OK, I will fix it at next version patch. > >> + >> + return 0; >> +} > > btw do you have some user for this code? The at91sam9m10g45ek now uses OHCI, if needed, it can use EHCI. New coming boards will use EHCI. > > Best regards, > Marek Vasut