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 boards.

Signed-off-by: Stelian Pop <[EMAIL PROTECTED]>
---
 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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to