[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