[U-Boot] [PATCH] AT91: Enable PLLB for USB
Remy Bohmer
linux at bohmer.net
Tue Oct 21 19:54:53 CEST 2008
Hello Stelian,
2008/10/21 Stelian Pop <stelian at popies.net>:
> 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
Are all your USB stick problems solved by now? Including that stick
that did not work?
I noticed that (with my latest patchset) sometimes a cold boot result
in a non-working USB stick on my boards, but a hard reset always
worked...
I will try your patches tomorrow, but I have one question:
> #define AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */
> #define AT91_MASTER_CLOCK 100000000 /* peripheral */
> #define AT91_CPU_CLOCK 200000000 /* cpu */
Are such nice rounded values possible with that unrounded crystal?
Looking at sam9261 I see:
#define AT91_MAIN_CLOCK 198656000 /* from 18.432 MHz crystal */
#define AT91_MASTER_CLOCK 99328000 /* peripheral = main / 2
This seems more logical to me, but I may be wrong...
Kind Regards,
Remy
>
> This patch also defines CONFIG_USB_STORAGE and CONFIG_CMD_FAT for all
> the relevant AT91CAP9/AT91SAM9 boards.
>
> Signed-off-by: Stelian Pop <stelian at popies.net>
> ---
> cpu/arm926ejs/at91/usb.c | 18 ++++++++++++++++++
> include/configs/at91cap9adk.h | 3 +++
> include/configs/at91sam9260ek.h | 2 ++
> include/configs/at91sam9261ek.h | 1 +
> include/configs/at91sam9263ek.h | 2 ++
> 5 files changed, 26 insertions(+), 0 deletions(-)
>
> diff --git a/cpu/arm926ejs/at91/usb.c b/cpu/arm926ejs/at91/usb.c
> index 2a92f73..c02334f 100644
> --- a/cpu/arm926ejs/at91/usb.c
> +++ b/cpu/arm926ejs/at91/usb.c
> @@ -31,6 +31,15 @@
>
> 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
> @@ -51,6 +60,15 @@ int usb_cpu_stop(void)
> #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;
> }
>
> diff --git a/include/configs/at91cap9adk.h b/include/configs/at91cap9adk.h
> index 1dbd3a4..47145d8 100644
> --- a/include/configs/at91cap9adk.h
> +++ b/include/configs/at91cap9adk.h
> @@ -32,6 +32,7 @@
> #define AT91_MAIN_CLOCK 12000000 /* 12 MHz crystal */
> #define AT91_MASTER_CLOCK 100000000 /* peripheral */
> #define AT91_CPU_CLOCK 200000000 /* cpu */
> +#define CFG_AT91_PLLB 0x10073e01 /* PLLB settings for USB */
> #define CFG_HZ 1000000 /* 1us resolution */
>
> #define AT91_SLOW_CLOCK 32768 /* slow clock */
> @@ -137,6 +138,8 @@
> #define CFG_USB_OHCI_REGS_BASE 0x00700000 /* AT91_BASE_UHP */
> #define CFG_USB_OHCI_SLOT_NAME "at91cap9"
> #define CFG_USB_OHCI_MAX_ROOT_PORTS 2
> +#define CONFIG_USB_STORAGE 1
> +#define CONFIG_CMD_FAT 1
>
> #define CFG_LOAD_ADDR 0x72000000 /* load address */
>
> diff --git a/include/configs/at91sam9260ek.h b/include/configs/at91sam9260ek.h
> index cb8857a..cd09288 100644
> --- a/include/configs/at91sam9260ek.h
> +++ b/include/configs/at91sam9260ek.h
> @@ -32,6 +32,7 @@
> #define AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */
> #define AT91_MASTER_CLOCK 100000000 /* peripheral */
> #define AT91_CPU_CLOCK 200000000 /* cpu */
> +#define CFG_AT91_PLLB 0x107c3e18 /* PLLB settings for USB */
> #define CFG_HZ 1000000 /* 1us resolution */
>
> #define AT91_SLOW_CLOCK 32768 /* slow clock */
> @@ -123,6 +124,7 @@
> #define CFG_USB_OHCI_SLOT_NAME "at91sam9260"
> #define CFG_USB_OHCI_MAX_ROOT_PORTS 2
> #define CONFIG_USB_STORAGE 1
> +#define CONFIG_CMD_FAT 1
>
> #define CFG_LOAD_ADDR 0x22000000 /* load address */
>
> diff --git a/include/configs/at91sam9261ek.h b/include/configs/at91sam9261ek.h
> index 92e134d..aa6c6ab 100644
> --- a/include/configs/at91sam9261ek.h
> +++ b/include/configs/at91sam9261ek.h
> @@ -137,6 +137,7 @@
> #define CFG_USB_OHCI_SLOT_NAME "at91sam9261"
> #define CFG_USB_OHCI_MAX_ROOT_PORTS 2
> #define CONFIG_USB_STORAGE 1
> +#define CONFIG_CMD_FAT 1
>
> #define CFG_LOAD_ADDR 0x22000000 /* load address */
>
> diff --git a/include/configs/at91sam9263ek.h b/include/configs/at91sam9263ek.h
> index c914571..1e9c5c5 100644
> --- a/include/configs/at91sam9263ek.h
> +++ b/include/configs/at91sam9263ek.h
> @@ -32,6 +32,7 @@
> #define AT91_MAIN_CLOCK 16367660 /* 16.367 MHz crystal */
> #define AT91_MASTER_CLOCK 100000000 /* peripheral */
> #define AT91_CPU_CLOCK 200000000 /* cpu */
> +#define CFG_AT91_PLLB 0x133a3e8d /* PLLB settings for USB */
> #define CFG_HZ 1000000 /* 1us resolution */
>
> #define AT91_SLOW_CLOCK 32768 /* slow clock */
> @@ -143,6 +144,7 @@
> #define CFG_USB_OHCI_SLOT_NAME "at91sam9263"
> #define CFG_USB_OHCI_MAX_ROOT_PORTS 2
> #define CONFIG_USB_STORAGE 1
> +#define CONFIG_CMD_FAT 1
>
> #define CFG_LOAD_ADDR 0x22000000 /* load address */
>
> --
> 1.5.4.3
>
>
More information about the U-Boot
mailing list