Removes all board specific code from the arch. part for DM644x (DaVinci) boards
authorPieter Voorthuijsen <[pieter.voorthuijsen@Prodrive.nl]>
Sun, 30 Mar 2008 10:11:34 +0000 (11:11 +0100)
committerPeter Pearse <peter.pearse@arm.com>
Sun, 30 Mar 2008 10:11:34 +0000 (11:11 +0100)
Signed-off-by: Pieter Voorthuijsen <pv@prodrive.nl>
cpu/arm926ejs/davinci/lowlevel_init.S
cpu/arm926ejs/davinci/nand.c
include/asm-arm/arch-davinci/hardware.h
include/configs/davinci_dvevm.h
include/configs/davinci_schmoogie.h
include/configs/davinci_sonata.h

index a87c112eca42e120a4a592430f6c54960baa2489..79bc692c143ccb663277e8742045b95517e4a84a 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
  *
+ * Copyright (C) 2008 Prodrive BV <pv@prodrive.nl>
+ * Changed:
+ * Made board specific defines such as DDR timing and PLL
+ * dividers. These should be set in the board config file
+ *
  * Partially based on TI sources, original copyrights follow:
  */
 
@@ -156,17 +161,17 @@ WaitPPL2Loop:
 
        /* Program the PLL Multiplier */
        ldr     r6, PLL2_PLLM
-       mov     r2, $0x17       /* 162 MHz */
+       mov     r2, $CFG_DAVINCI_PLL2_PLLM
        str     r2, [r6]
 
        /* Program the PLL2 Divisor Value */
        ldr     r6, PLL2_DIV2
-       mov     r3, $0x01
+       mov     r3, $CFG_DAVINCI_PLL2_DIV2
        str     r3, [r6]
 
        /* Program the PLL2 Divisor Value */
        ldr     r6, PLL2_DIV1
-       mov     r4, $0x0b       /* 54 MHz */
+       mov     r4, $CFG_DAVINCI_PLL2_DIV1
        str     r4, [r6]
 
        /* PLL2 DIV2 MMR */
@@ -273,7 +278,7 @@ checkDDRStatClkStop:
        bne     checkDDRStatClkStop
 
        /*------------------------------------------------------*
-        * Program DDR2 MMRs for 162MHz Setting                 *
+        * Program DDR2 MMRs                                    *
         *------------------------------------------------------*/
 
        /* Program PHY Control Register */
@@ -288,12 +293,12 @@ checkDDRStatClkStop:
 
        /* Program SDRAM TIM-0 Config Register */
        ldr     r6, SDTIM0
-       ldr     r7, SDTIM0_VAL_162MHz
+       ldr     r7, SDTIM0_VAL
        str     r7, [r6]
 
        /* Program SDRAM TIM-1 Config Register */
        ldr     r6, SDTIM1
-       ldr     r7, SDTIM1_VAL_162MHz
+       ldr     r7, SDTIM1_VAL
        str     r7, [r6]
 
        /* Program the SDRAM Bank Config Control Register */
@@ -435,7 +440,7 @@ WaitLoop:
 
        /* Program the PLL Multiplier */
        ldr     r6, PLL1_PLLM
-       mov     r3, $0x15       /* For 594MHz */
+       mov     r3, $CFG_DAVINCI_PLL1_PLLM
        str     r3, [r6]
 
        /* Wait for PLL to Reset Properly */
@@ -467,7 +472,7 @@ PLL1Lock:
        nop
 
        /*------------------------------------------------------*
-        * AEMIF configuration for NOR Flash (double check)     *
+        * AEMIF configuration for NAND/NOR Flash               *
         *------------------------------------------------------*/
        ldr     r0, _PINMUX0
        ldr     r1, _DEV_SETTING
@@ -479,6 +484,12 @@ PLL1Lock:
        orr     r2, r2, r1
        str     r2, [r0]
 
+       ldr     r0, ACFG2
+       ldr     r1, ACFG2_VAL
+       ldr     r2, [r0]
+       and     r1, r2, r1
+       str     r1, [r0]
+
        ldr     r0, ACFG3
        ldr     r1, ACFG3_VAL
        ldr     r2, [r0]
@@ -497,6 +508,12 @@ PLL1Lock:
        and     r1, r2, r1
        str     r1, [r0]
 
+       ldr     r0, NANDFCR
+       ldr     r1, NANDFCR_VAL
+       ldr     r2, [r0]
+       and     r1, r2, r1
+       str     r1, [r0]
+
        /*--------------------------------------*
         * VTP manual Calibration               *
         *--------------------------------------*/
@@ -560,24 +577,36 @@ _PINMUX1:
        .word   0x01c40004              /* Device Configuration Registers */
 
 _DEV_SETTING:
-       .word   0x00000c1f
+       .word   CFG_DAVINCI_PINMUX_0
 
 WAITCFG:
        .word   0x01e00004
 WAITCFG_VAL:
-       .word   0
+       .word   CFG_DAVINCI_WAITCFG
+ACFG2:
+       .word   0x01e00010
+ACFG2_VAL:
+       .word   CFG_DAVINCI_ACFG2
 ACFG3:
        .word   0x01e00014
 ACFG3_VAL:
-       .word   0x3ffffffd
+       .word   CFG_DAVINCI_ACFG3
 ACFG4:
        .word   0x01e00018
 ACFG4_VAL:
-       .word   0x3ffffffd
+       .word   CFG_DAVINCI_ACFG4
 ACFG5:
        .word   0x01e0001c
 ACFG5_VAL:
-       .word   0x3ffffffd
+       .word   CFG_DAVINCI_ACFG5
+NANDFCR:
+       .word   0x01e00060
+NANDFCR_VAL:
+#ifdef CFG_DAVINCI_NANDCE
+       .word   (1 << (CFG_DAVINCI_NANDCE - 2))
+#else
+       .word   0x00000000
+#endif
 
 MDCTL_DDR2:
        .word   0x01c41a34
@@ -599,33 +628,27 @@ PSC_FLAG_CLEAR:
 PSC_GEM_FLAG_CLEAR:
        .word   0xfffffeff
 
-/* DDR2 MMR & CONFIGURATION VALUES, 162 MHZ clock */
+/* DDR2 MMR & CONFIGURATION VALUES */
 DDRCTL:
        .word   0x200000e4
 DDRCTL_VAL:
-       .word   0x50006405
+       .word   CFG_DAVINCI_DDRCTL
 SDREF:
        .word   0x2000000c
 SDREF_VAL:
-       .word   0x000005c3
+       .word   CFG_DAVINCI_SDREF
 SDCFG:
        .word   0x20000008
 SDCFG_VAL:
-#ifdef DDR_4BANKS
-       .word   0x00178622
-#elif defined DDR_8BANKS
-       .word   0x00178632
-#else
-#error "Unknown DDR configuration!!!"
-#endif
+       .word   CFG_DAVINCI_SDCFG
 SDTIM0:
        .word   0x20000010
-SDTIM0_VAL_162MHz:
-       .word   0x28923211
+SDTIM0_VAL:
+       .word   CFG_DAVINCI_SDTIM0
 SDTIM1:
        .word   0x20000014
-SDTIM1_VAL_162MHz:
-       .word   0x0016c722
+SDTIM1_VAL:
+       .word   CFG_DAVINCI_SDTIM1
 VTPIOCR:
        .word   0x200000f0      /* VTP IO Control register */
 DDRVTPR:
@@ -699,7 +722,7 @@ PLL2_DIV_MASK:
 MMARG_BRF0:
        .word   0x01c42010      /* BRF margin mode 0 (R/W)*/
 MMARG_BRF0_VAL:
-       .word   0x00444400
+       .word   CFG_DAVINCI_MMARG_BRF0
 
 DDR2_START_ADDR:
        .word   0x80000000
index 127be9fcd4396d1b9918e467fc12258572adb96b..3257f83a2f9fafba9c5c7e347076a0c93570eced 100644 (file)
@@ -117,7 +117,7 @@ static void nand_davinci_enable_hwecc(struct mtd_info *mtd, int mode)
        dummy = emif_addr->NANDF3ECC;
        dummy = emif_addr->NANDF4ECC;
 
-       emif_addr->NANDFCR |= (1 << 8);
+       emif_addr->NANDFCR |= (1 << (CFG_DAVINCI_NANDCE + 6));
 }
 
 static u_int32_t nand_davinci_readecc(struct mtd_info *mtd, u_int32_t region)
@@ -147,7 +147,7 @@ static int nand_davinci_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u
 
        n = (this->eccmode == NAND_ECC_HW12_2048) ? 4 : 1;
 
-       region = 1;
+       region = (CFG_DAVINCI_NANDCE - 1);
        while (n--) {
                tmp = nand_davinci_readecc(mtd, region);
                *ecc_code++ = tmp;
@@ -311,40 +311,9 @@ static int nand_davinci_waitfunc(struct mtd_info *mtd, struct nand_chip *this, i
 
 static void nand_flash_init(void)
 {
-       u_int32_t       acfg1 = 0x3ffffffc;
-       u_int32_t       acfg2 = 0x3ffffffc;
-       u_int32_t       acfg3 = 0x3ffffffc;
-       u_int32_t       acfg4 = 0x3ffffffc;
-       emifregs        emif_regs;
-
-       /*------------------------------------------------------------------*
-        *  NAND FLASH CHIP TIMEOUT @ 459 MHz                               *
-        *                                                                  *
-        *  AEMIF.CLK freq   = PLL1/6 = 459/6 = 76.5 MHz                    *
-        *  AEMIF.CLK period = 1/76.5 MHz = 13.1 ns                         *
-        *                                                                  *
-        *------------------------------------------------------------------*/
-        acfg1 = 0
-               | (0 << 31 )    /* selectStrobe */
-               | (0 << 30 )    /* extWait */
-               | (1 << 26 )    /* writeSetup   10 ns */
-               | (3 << 20 )    /* writeStrobe  40 ns */
-               | (1 << 17 )    /* writeHold    10 ns */
-               | (1 << 13 )    /* readSetup    10 ns */
-               | (5 << 7 )     /* readStrobe   60 ns */
-               | (1 << 4 )     /* readHold     10 ns */
-               | (3 << 2 )     /* turnAround   ?? ns */
-               | (0 << 0 )     /* asyncSize    8-bit bus */
-               ;
-
-       emif_regs = (emifregs)DAVINCI_ASYNC_EMIF_CNTRL_BASE;
-
-       emif_regs->AWCCR |= 0x10000000;
-       emif_regs->AB1CR = acfg1;       /* 0x08244128 */;
-       emif_regs->AB2CR = acfg2;
-       emif_regs->AB3CR = acfg3;
-       emif_regs->AB4CR = acfg4;
-       emif_regs->NANDFCR = 0x00000101;
+       /* All EMIF initialization is done in lowlevel_init.S
+        * and config values are in the board config files
+        */
 }
 
 int board_nand_init(struct nand_chip *nand)
index ebcdcfea1e9960d9f44c323cd87baf547b375e75..2b3eb90c322f26ce90142b82ea23595f0f32a654 100644 (file)
@@ -150,6 +150,8 @@ typedef volatile unsigned int *     dv_reg_p;
 
 #define VDD3P3V_PWDN                   (0x01c40048)
 #define UART0_PWREMU_MGMT              (0x01c20030)
+#define UART1_PWREMU_MGMT              (0x01c20430)
+#define UART2_PWREMU_MGMT              (0x01c20830)
 
 #define PSC_SILVER_BULLET              (0x01c41a20)
 
index 8ecd0595a2040282322b83309bd09f35ce3c9840..17d3b03dd54fdc031e3b42f6536df1a5ca2d8b57 100644 (file)
@@ -52,6 +52,9 @@
 #define DV_EVM
 #define CFG_NAND_SMALLPAGE
 #define CFG_USE_NOR
+#define CFG_USE_INTEL_NOR      /* Define this when your DVEVM has Intel
+                                * flash instead of AMD flash
+                                */
 /*===================*/
 /* SoC Configuration */
 /*===================*/
 #define CFG_TIMERBASE          0x01c21400      /* use timer 0 */
 #define CFG_HZ_CLOCK           27000000        /* Timer Input clock freq */
 #define CFG_HZ                 1000
+#define CFG_DAVINCI_PINMUX_0   0x00000c1f
+#define CFG_DAVINCI_WAITCFG    0x00000000
+#define CFG_DAVINCI_ACFG2      0x3ffffffd      /* CE configs */
+#define CFG_DAVINCI_ACFG3      0x3ffffffd
+#define CFG_DAVINCI_ACFG4      0x3ffffffd
+#define CFG_DAVINCI_ACFG5      0x3ffffffd
+#undef CFG_DAVINCI_NANDCE              /* When using NAND, define 2,3 or 4 */
+#define CFG_DAVINCI_DDRCTL     0x50006405      /* DDR timing config */
+#define CFG_DAVINCI_SDREF      0x000005c3
+#define CFG_DAVINCI_SDCFG      0x00178632      /* 8 banks */
+#define CFG_DAVINCI_SDTIM0     0x28923211
+#define CFG_DAVINCI_SDTIM1     0x0016c722
+#define CFG_DAVINCI_MMARG_BRF0 0x00444400
+/* DM6446 = 0x15, DM6441 = 0x12, DM6441_LV = 0x0e */
+#define CFG_DAVINCI_PLL1_PLLM  0x15
+#define CFG_DAVINCI_PLL2_PLLM  0x17            /* 162 MHz */
+#define CFG_DAVINCI_PLL2_DIV1  0x0b            /* 54 MHz */
+#define CFG_DAVINCI_PLL2_DIV2  0x01
 /*====================================================*/
 /* EEPROM definitions for Atmel 24C256BN SEEPROM chip */
 /* on Sonata/DV_EVM board. No EEPROM on schmoogie.    */
 #ifdef CFG_USE_NAND
 #undef CFG_ENV_IS_IN_FLASH
 #define CFG_NO_FLASH
-#define CFG_ENV_IS_IN_NAND             /* U-Boot env in NAND Flash  */
+#define CFG_ENV_IS_IN_NAND             /* U-Boot env in NAND Flash */
 #ifdef CFG_NAND_SMALLPAGE
 #define CFG_ENV_SECT_SIZE      512     /* Env sector Size */
 #define CFG_ENV_SIZE           SZ_16K
 #undef CONFIG_SKIP_RELOCATE_UBOOT
 #endif
 #define CFG_ENV_IS_IN_FLASH
-#undef CFG_NO_FLASH
+#undef CFG_NO_FLASH
 #define CFG_FLASH_CFI_DRIVER
 #define CFG_FLASH_CFI
 #define CFG_MAX_FLASH_BANKS    1               /* max number of flash banks */
-#define CFG_FLASH_SECT_SZ      0x10000         /* 64KB sect size AMD Flash */
-#define CFG_ENV_OFFSET         (CFG_FLASH_SECT_SZ*3)
-#define PHYS_FLASH_1           0x02000000      /* CS2 Base address      */
+#define CFG_ENV_ADDR           (PHYS_FLASH_1 + 0x40000)
+#define CFG_ENV_OFFSET         (CFG_ENV_ADDR)
+#define CFG_FLASH_USE_BUFFER_WRITE 1 /* use buffered writes (20x faster) */
+#define PHYS_FLASH_1           0x02000000      /* CS2 Base address */
 #define CFG_FLASH_BASE         PHYS_FLASH_1    /* Flash Base for U-Boot */
-#define PHYS_FLASH_SIZE                0x2000000       /* Flash size 32MB       */
+#define PHYS_FLASH_SIZE                0x2000000       /* Flash size 32MB */
 #define CFG_MAX_FLASH_SECT     (PHYS_FLASH_SIZE/CFG_FLASH_SECT_SZ)
 #define CFG_ENV_SECT_SIZE      CFG_FLASH_SECT_SZ       /* Env sector Size */
+#ifdef CFG_USE_INTEL_NOR
+#define CFG_FLASH_SECT_SZ      0x20000 /* 128KB sect size INTEL Flash */
+#define CFG_FLASH_PROTECTION   1
+#else
+#define CFG_FLASH_SECT_SZ      0x10000 /* 64KB sect size AMD Flash */
+#endif
 #endif
 /*==============================*/
 /* U-Boot general configuration */
 /*==============================*/
-#undef         CONFIG_USE_IRQ                  /* No IRQ/FIQ in U-Boot */
+#undef CONFIG_USE_IRQ                          /* No IRQ/FIQ in U-Boot */
 #define CONFIG_MISC_INIT_R
-#undef CONFIG_BOOTDELAY
+#undef CONFIG_BOOTDELAY
 #define CONFIG_BOOTFILE                "uImage"        /* Boot file name */
 #define CFG_PROMPT             "U-Boot > "     /* Monitor Command Prompt */
 #define CFG_CBSIZE             1024            /* Console I/O Buffer Size  */
index 96c9a30147828810e780029abd4427696728d923..cb69535e141114579aeaab7289b5729b99455466 100644 (file)
 #define CFG_TIMERBASE          0x01c21400      /* use timer 0 */
 #define CFG_HZ_CLOCK           27000000        /* Timer Input clock freq */
 #define CFG_HZ                 1000
+#define CFG_DAVINCI_PINMUX_0   0x00000c1f
+#define CFG_DAVINCI_WAITCFG    0x00000000
+#define CFG_DAVINCI_ACFG2      0x0432229c      /* CE configs */
+#define CFG_DAVINCI_ACFG3      0x3ffffffd
+#define CFG_DAVINCI_ACFG4      0x3ffffffd
+#define CFG_DAVINCI_ACFG5      0x3ffffffd
+#define CFG_DAVINCI_NANDCE     2       /* When using NAND, define 2,3 or 4 */
+#define CFG_DAVINCI_DDRCTL     0x50006405      /* DDR timing config */
+#define CFG_DAVINCI_SDREF      0x000005c3
+#define CFG_DAVINCI_SDCFG      0x00178622      /* 4 banks */
+#define CFG_DAVINCI_SDTIM0     0x28923211
+#define CFG_DAVINCI_SDTIM1     0x0016c722
+#define CFG_DAVINCI_MMARG_BRF0 0x00444400
+/* DM6446 = 0x15, DM6441 = 0x12, DM6441_LV = 0x0e */
+#define CFG_DAVINCI_PLL1_PLLM  0x15
+#define CFG_DAVINCI_PLL2_PLLM  0x17            /* 162 MHz */
+#define CFG_DAVINCI_PLL2_DIV1  0x0b            /* 54 MHz */
+#define CFG_DAVINCI_PLL2_DIV2  0x01
 /*=============*/
 /* Memory Info */
 /*=============*/
@@ -46,7 +64,6 @@
 #define CONFIG_STACKSIZE       (256*1024)      /* regular stack */
 #define PHYS_SDRAM_1           0x80000000      /* DDR Start */
 #define PHYS_SDRAM_1_SIZE      0x08000000      /* DDR size 128MB */
-#define DDR_4BANKS                             /* 4-bank DDR2 (128MB) */
 /*====================*/
 /* Serial Driver info */
 /*====================*/
index de8c4fac2b00fe2b0d3a5edbbbe5612ce61fc79b..b2c0d7d175d67d7077e33d4ce76b5af32096f3df 100644 (file)
 #define CFG_TIMERBASE          0x01c21400      /* use timer 0 */
 #define CFG_HZ_CLOCK           27000000        /* Timer Input clock freq */
 #define CFG_HZ                 1000
+#define CFG_DAVINCI_PINMUX_0   0x00000c1f
+#define CFG_DAVINCI_WAITCFG    0x00000000
+#define CFG_DAVINCI_ACFG2      0x3ffffffd      /* CE configs */
+#define CFG_DAVINCI_ACFG3      0x3ffffffd
+#define CFG_DAVINCI_ACFG4      0x3ffffffd
+#define CFG_DAVINCI_ACFG5      0x3ffffffd
+#undef  CFG_DAVINCI_NANDCE             /* When using NAND, define 2,3 or 4 */
+#define CFG_DAVINCI_DDRCTL     0x50006405      /* DDR timing config */
+#define CFG_DAVINCI_SDREF      0x000005c3
+#define CFG_DAVINCI_SDCFG      0x00178632      /* 8 banks */
+#define CFG_DAVINCI_SDTIM0     0x28923211
+#define CFG_DAVINCI_SDTIM1     0x0016c722
+#define CFG_DAVINCI_MMARG_BRF0 0x00444400
+/* DM6446 = 0x15, DM6441 = 0x12, DM6441_LV = 0x0e */
+#define CFG_DAVINCI_PLL1_PLLM  0x15
+#define CFG_DAVINCI_PLL2_PLLM  0x17            /* 162 MHz */
+#define CFG_DAVINCI_PLL2_DIV1  0x0b            /* 54 MHz */
+#define CFG_DAVINCI_PLL2_DIV2  0x01
 /*====================================================*/
 /* EEPROM definitions for Atmel 24C256BN SEEPROM chip */
 /* on Sonata/DV_EVM board. No EEPROM on schmoogie.    */