mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-19 11:13:24 +09:00
3e0cda071a
At least some (old ?) versions of the AT91Bootstrap do not set up the PLLB correctly to 48 MHz in order to make USB host function correctly. This patch sets up the PLLB to the same values Linux uses, and makes USB work ok on the following CPUs: - AT91CAP9 - AT91SAM9260 - AT91SAM9263 This patch also defines CONFIG_USB_STORAGE and CONFIG_CMD_FAT for all the relevant AT91CAP9/AT91SAM9 atmel boards. Signed-off-by: Stelian Pop <stelian@popies.net> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
81 lines
2.1 KiB
C
81 lines
2.1 KiB
C
/*
|
|
* (C) Copyright 2006
|
|
* DENX Software Engineering <mk@denx.de>
|
|
*
|
|
* 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., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*/
|
|
|
|
#include <common.h>
|
|
|
|
#if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT)
|
|
|
|
#include <asm/arch/hardware.h>
|
|
#include <asm/arch/io.h>
|
|
#include <asm/arch/at91_pmc.h>
|
|
|
|
int usb_cpu_init(void)
|
|
{
|
|
|
|
#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
|
|
defined(CONFIG_AT91SAM9263)
|
|
/* Enable PLLB */
|
|
at91_sys_write(AT91_CKGR_PLLBR, CFG_AT91_PLLB);
|
|
while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKB) != AT91_PMC_LOCKB)
|
|
;
|
|
#endif
|
|
|
|
/* Enable USB host clock. */
|
|
at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_UHP);
|
|
#ifdef CONFIG_AT91SAM9261
|
|
at91_sys_write(AT91_PMC_SCER, AT91_PMC_UHP | AT91_PMC_HCK0);
|
|
#else
|
|
at91_sys_write(AT91_PMC_SCER, AT91_PMC_UHP);
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
int usb_cpu_stop(void)
|
|
{
|
|
/* Disable USB host clock. */
|
|
at91_sys_write(AT91_PMC_PCDR, 1 << AT91_ID_UHP);
|
|
#ifdef CONFIG_AT91SAM9261
|
|
at91_sys_write(AT91_PMC_SCDR, AT91_PMC_UHP | AT91_PMC_HCK0);
|
|
#else
|
|
at91_sys_write(AT91_PMC_SCDR, AT91_PMC_UHP);
|
|
#endif
|
|
|
|
#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
|
|
defined(CONFIG_AT91SAM9263)
|
|
/* Disable PLLB */
|
|
at91_sys_write(AT91_CKGR_PLLBR, 0);
|
|
while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKB) != 0)
|
|
;
|
|
#endif
|
|
|
|
return 0;
|
|
}
|
|
|
|
int usb_cpu_init_fail(void)
|
|
{
|
|
return usb_cpu_stop();
|
|
}
|
|
|
|
#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_CPU_INIT) */
|