Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/arm/omap OMAP4 EHCI enhancements



details:   https://anonhg.NetBSD.org/src/rev/8103707ebb5c
branches:  trunk
changeset: 787407:8103707ebb5c
user:      matt <matt%NetBSD.org@localhost>
date:      Sun Jun 16 16:42:13 2013 +0000

description:
OMAP4 EHCI enhancements

diffstat:

 sys/arch/arm/omap/omap2_reg.h  |  64 +++++++++++++++++++++++++++++++++--------
 sys/arch/arm/omap/omap3_ehci.c |  46 +++++++++++++++++++++---------
 2 files changed, 83 insertions(+), 27 deletions(-)

diffs (220 lines):

diff -r f57676b80d39 -r 8103707ebb5c sys/arch/arm/omap/omap2_reg.h
--- a/sys/arch/arm/omap/omap2_reg.h     Sun Jun 16 13:47:42 2013 +0000
+++ b/sys/arch/arm/omap/omap2_reg.h     Sun Jun 16 16:42:13 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: omap2_reg.h,v 1.18 2013/04/30 05:37:51 matt Exp $ */
+/* $NetBSD: omap2_reg.h,v 1.19 2013/06/16 16:42:13 matt Exp $ */
 
 /*
  * Copyright (c) 2007 Microsoft
@@ -87,6 +87,32 @@
 #define OMAP4430_L4_ABE_BASE           0x49000000      /* Actually L3 */
 #define OMAP4430_L4_ABE_SIZE           0x01000000      /* 16MB */
 
+#define OMAP4430_EMIF1_BASE            0x4C000000      /* MemCtrl 0 */
+#define OMAP4430_EMIF1_SIZE            0x00100000      /* 4KB padded to 1M */
+
+#define OMAP4430_EMIF2_BASE            0x4D000000      /* MemCtrl 1 */
+#define OMAP4430_EMIF2_SIZE            0x00100000      /* 4KB padded to 1M */
+
+/* OMAP5 processors */
+
+#define OMAP5430_L4_CORE_BASE          0x4A000000
+#define OMAP5430_L4_CORE_SIZE          0x01000000      /* 16MB - CFG */
+
+#define OMAP5430_L4_WAKEUP_BASE                0x4AE00000
+#define OMAP5430_L4_WAKEUP_SIZE                0x00200000      /* 2M */
+
+#define OMAP5430_L4_PERIPHERAL_BASE    0x48000000
+#define OMAP5430_L4_PERIPHERAL_SIZE    0x01000000      /* 16MB */
+
+#define OMAP5430_L4_ABE_BASE           0x49000000      /* Actually L3 */
+#define OMAP5430_L4_ABE_SIZE           0x01000000      /* 16MB */
+
+#define OMAP5430_EMIF1_BASE            0x4C000000      /* MemCtrl 0 */
+#define OMAP5430_EMIF1_SIZE            0x00100000      /* 4KB padded to 1M */
+
+#define OMAP5430_EMIF2_BASE            0x4D000000      /* MemCtrl 1 */
+#define OMAP5430_EMIF2_SIZE            0x00100000      /* 4KB padded to 1M */
+
 /* TI Sitara AM335x (OMAP like) */
 
 #define TI_AM335X_L4_WAKEUP_BASE       0x44C00000
@@ -98,8 +124,8 @@
 #define TI_AM335X_L4_FAST_BASE         0x4A000000
 #define TI_AM335X_L4_FAST_SIZE         0x01000000      /* 16MB */
 
-#define TI_AM335X_L4_EMIF_BASE         0x4C000000
-#define TI_AM335X_L4_EMIF_SIZE         0x01000000      /* 16MB */
+#define TI_AM335X_EMIF1_BASE           0x4C000000
+#define TI_AM335X_EMIF1_SIZE           0x00100000      /* 4KB pad to 1MB */
 
 /* TI Sitara DM37xx (OMAP like) */
 
@@ -133,6 +159,9 @@
 #ifdef OMAP_4430
 #define OMAP2_CM_BASE                  (OMAP4430_L4_CORE_BASE + 0x04000)
 #endif
+#ifdef OMAP_5430
+#define OMAP2_CM_BASE                  (OMAP5430_L4_CORE_BASE + 0x04000)
+#endif
 #ifdef TI_AM335X
 #define OMAP2_CM_BASE                  (TI_AM335X_L4_WAKEUP_BASE + 0x200000)
 #endif
@@ -346,6 +375,9 @@
 #ifdef OMAP_4430
 #define        OMAP2_PRM_BASE                  (OMAP4430_L4_WAKEUP_BASE + 0x6000)
 #endif
+#ifdef OMAP_5430
+#define        OMAP2_PRM_BASE                  (OMAP5430_L4_WAKEUP_BASE + 0x6000)
+#endif
 #ifdef TI_AM335X
 #define        OMAP2_PRM_BASE                  0x48306000
 #endif
@@ -670,6 +702,15 @@
 #define        GPIO5_BASE_4430                 0x4805b000
 #define        GPIO6_BASE_4430                 0x4805d000
 
+#define        GPIO1_BASE_5430                 0x4ae10000
+#define        GPIO2_BASE_5430                 0x48055000
+#define        GPIO3_BASE_5430                 0x48057000
+#define        GPIO4_BASE_5430                 0x48059000
+#define        GPIO5_BASE_5430                 0x4805b000
+#define        GPIO6_BASE_5430                 0x4805d000
+#define        GPIO7_BASE_5430                 0x48051000
+#define        GPIO8_BASE_5430                 0x48053000
+
 #define        GPIO0_BASE_TI_AM335X            0x44e07000
 #define        GPIO1_BASE_TI_AM335X            0x4804c000
 #define        GPIO2_BASE_TI_AM335X            0x481ac000
@@ -718,14 +759,11 @@
  */
 #define        OHCI1_BASE_2430                 0x4805e000
 
-#define        OHCI1_BASE_3430                 0x48064400
-#define        EHCI1_BASE_3430                 0x48064800
+#define        OHCI1_BASE_OMAP3                0x48064400
+#define        EHCI1_BASE_OMAP3                0x48064800
 
-#define        OHCI1_BASE_3530                 0x48064400
-#define        EHCI1_BASE_3530                 0x48064800
-
-#define        OHCI1_BASE_4430                 0x4A064800
-#define        EHCI1_BASE_4430                 0x4A064C00
+#define        OHCI1_BASE_OMAP4                0x4A064800
+#define        EHCI1_BASE_OMAP4                0x4A064C00
 
 /*
  * SDRC
@@ -743,13 +781,13 @@
 #define TI_AM335X_CTLMOD_BASE          0x44e10000
 #define CTLMOD_CONTROL_STATUS          0x40
 #define CTLMOD_CONTROL_STATUS_SYSBOOT1 __BITS(23,22)
-
-#define TI_AM335X_EMIF0_BASE           0x4c000000
-#define TI_AM335X_EMIF0_SIZE           0x00100000
+#endif
+#if defined(OMAP4) || defined(TI_AM335X)
 #define EMIF_SDRAM_CONFIG              8
 #define SDRAM_CONFIG_WIDTH             __BITS(15,14)
 #define SDRAM_CONFIG_RSIZE             __BITS(9,7)
 #define SDRAM_CONFIG_IBANK             __BITS(6,4)
+#define SDRAM_CONFIG_EBANK             __BIT(3)
 #define SDRAM_CONFIG_PAGESIZE          __BITS(2,0)
 #endif
        
diff -r f57676b80d39 -r 8103707ebb5c sys/arch/arm/omap/omap3_ehci.c
--- a/sys/arch/arm/omap/omap3_ehci.c    Sun Jun 16 13:47:42 2013 +0000
+++ b/sys/arch/arm/omap/omap3_ehci.c    Sun Jun 16 16:42:13 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: omap3_ehci.c,v 1.6 2012/12/24 06:41:02 kiyohara Exp $ */
+/* $NetBSD: omap3_ehci.c,v 1.7 2013/06/16 16:42:13 matt Exp $ */
 
 /*-
  * Copyright (c) 2010-2012 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: omap3_ehci.c,v 1.6 2012/12/24 06:41:02 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: omap3_ehci.c,v 1.7 2013/06/16 16:42:13 matt Exp $");
 
 #include "locators.h"
 
@@ -273,10 +273,18 @@
 static int
 omap3_ehci_match(device_t parent, cfdata_t match, void *opaque)
 {
+#ifdef OMAP3
        struct obio_attach_args *obio = opaque;
+#endif
 
-       if (obio->obio_addr == EHCI1_BASE_3530)
+#if defined(OMAP3) && !defined(OMAP4)
+       if (obio->obio_addr == EHCI1_BASE_OMAP3)
                return 1;
+#endif
+#ifdef OMAP4
+       if (obio->obio_addr == EHCI1_BASE_OMAP4)
+               return 1;
+#endif
 
        return 0;
 }
@@ -429,7 +437,6 @@
 {
        bus_space_tag_t iot = sc->sc.iot;
        bus_space_handle_t ioh;
-       uint32_t m, n, m2;
        int err;
 
        if (sc->sc_dpll5.m == 0 || sc->sc_dpll5.n == 0 || sc->sc_dpll5.m2 == 0)
@@ -440,27 +447,38 @@
                 panic("%s: cannot map CCR_CM_BASE at %#x, error %d\n",
                         __func__, CCR_CM_BASE, err);
 
-#if OMAP_MPU_TIMER_CLOCK_FREQ != 12000000
-#error FIXME
-#endif
 
+#if defined(OMAP_3530) || defined(OMAP_3540)
        /* set the multiplier and divider values for the desired CLKOUT freq */
-       m = sc->sc_dpll5.m;
-       n = sc->sc_dpll5.n;
+       uint32_t m = sc->sc_dpll5.m;
+       uint32_t n = sc->sc_dpll5.n;
        /* set the corresponding output dividers */
-       m2 = sc->sc_dpll5.m2;
+       uint32_t m2 = sc->sc_dpll5.m2;
 
-       /* 4.7.6.2 In the DPLL programming sequence, the DPLL_FREQSEL must be programmed
-        * before the new Multiplier factor M and the Divider factor N are programmed so
-        * that the new value is taken into account during current DPLL relock.
+       KASSERTMSG(479900000 <= 2 * m * (omap_sys_clk / ((n + 1) * m2)),
+           "m=%u n=%u m2=%u freq=%u",
+           m, n, m2, 2 * m * (omap_sys_clk / ((n + 1) * m2)));
+       KASSERTMSG(2 * m * (omap_sys_clk / ((n + 1) * m2)) <= 480100000,
+           "m=%u n=%u m2=%u freq=%u",
+           m, n, m2, 2 * m * (omap_sys_clk / ((n + 1) * m2)));
+
+       /* 4.7.6.2
+        * In the DPLL programming sequence, the DPLL_FREQSEL must be
+        * programmed before the new Multiplier factor M and the Divider
+        * factor N are programmed so that the new value is taken into
+        * account during current DPLL relock.
         */
        bus_space_write_4(iot, ioh, CM_CLKEN2_PLL, (0x4 << 4) | 0x7);
 
        bus_space_write_4(iot, ioh, CM_CLKSEL4_PLL, (m << 8) | n);
        bus_space_write_4(iot, ioh, CM_CLKSEL5_PLL, m2);
 
-       /* Put DPLL5 into low power stop mode when the 120MHz clock is not required (restarted automatically) */
+       /*
+        * Put DPLL5 into low power stop mode when the 120MHz clock
+        * is not required (restarted automatically)
+        */
        bus_space_write_4(iot, ioh, CM_AUTOIDLE2_PLL, AUTO_PERIPH2_DPLL);
+#endif /* OMAP_3540 || OMAP_3530 */
 
        bus_space_unmap(iot, ioh, CCR_CM_SIZE);
 }



Home | Main Index | Thread Index | Old Index