Merge with http://www.denx.de/git/u-boot.git
authorMarkus Klotzbuecher <mk@denx.de>
Fri, 24 Mar 2006 14:43:16 +0000 (15:43 +0100)
committerMarkus Klotzbücher <mk@pollux.denx.de>
Fri, 24 Mar 2006 14:43:16 +0000 (15:43 +0100)
README
board/delta/delta.c
board/delta/lowlevel_init.S
board/delta/nand.c
common/env_nand.c
cpu/pxa/i2c.c
cpu/pxa/start.S
include/asm-arm/arch-pxa/pxa-regs.h
include/configs/delta.h
include/da9030.h [new file with mode: 0644]
include/environment.h

diff --git a/README b/README
index 38fbfbf..59f4cd2 100644 (file)
--- a/README
+++ b/README
@@ -246,6 +246,7 @@ The following options need to be configured:
                CONFIG_SA1110
                CONFIG_ARM7
                CONFIG_PXA250
+               CONFIG_CPU_MONAHANS
 
                MicroBlaze based CPUs:
                ----------------------
@@ -304,13 +305,13 @@ The following options need to be configured:
                -----------------
 
                CONFIG_ARMADILLO,       CONFIG_AT91RM9200DK,    CONFIG_CERF250,
-               CONFIG_CSB637,          CONFIG_DNP1110,         CONFIG_EP7312,
-               CONFIG_H2_OMAP1610,     CONFIG_HHP_CRADLE,      CONFIG_IMPA7,
-               CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610, CONFIG_KB9202,
-               CONFIG_LART,            CONFIG_LPD7A400,        CONFIG_LUBBOCK,
-               CONFIG_OSK_OMAP5912,    CONFIG_OMAP2420H4,      CONFIG_SHANNON,
-               CONFIG_P2_OMAP730,      CONFIG_SMDK2400,        CONFIG_SMDK2410,
-               CONFIG_TRAB,            CONFIG_VCMA9
+               CONFIG_CSB637,          CONFIG_DELTA,           CONFIG_DNP1110,
+               CONFIG_EP7312,          CONFIG_H2_OMAP1610,     CONFIG_HHP_CRADLE,
+               CONFIG_IMPA7,           CONFIG_INNOVATOROMAP1510, CONFIG_INNOVATOROMAP1610, 
+               CONFIG_KB9202,          CONFIG_LART,            CONFIG_LPD7A400,
+               CONFIG_LUBBOCK,         CONFIG_OSK_OMAP5912,    CONFIG_OMAP2420H4,
+               CONFIG_SHANNON,         CONFIG_P2_OMAP730,      CONFIG_SMDK2400,
+               CONFIG_SMDK2410,        CONFIG_TRAB,            CONFIG_VCMA9
 
                MicroBlaze based boards:
                ------------------------
@@ -379,6 +380,20 @@ The following options need to be configured:
                that this requires a (stable) reference clock (32 kHz
                RTC clock or CFG_8XX_XIN)
 
+- Intel Monahans options:
+               CFG_MONAHANS_RUN_MODE_OSC_RATIO
+
+               Defines the Monahans run mode to oscillator
+               ratio. Valid values are 8, 16, 24, 31. The core
+               frequency is this value multiplied by 13 MHz.
+
+               CFG_MONAHANS_TURBO_RUN_MODE_RATIO
+               
+               Defines the Monahans turbo mode to oscillator
+               ratio. Valid values are 1 (default if undefined) and
+               2. The core frequency as calculated above is multiplied 
+               by this value.
+               
 - Linux Kernel Interface:
                CONFIG_CLOCKS_IN_MHZ
 
@@ -1969,6 +1984,17 @@ to save the current settings.
          These two #defines specify the offset and size of the environment
          area within the first NAND device.
 
+       - CFG_ENV_OFFSET_REDUND
+
+         This setting describes a second storage area of CFG_ENV_SIZE
+         size used to hold a redundant copy of the environment data,
+         so that there is a valid backup copy in case there is a
+         power failure during a "saveenv" operation.
+
+       Note: CFG_ENV_OFFSET and CFG_ENV_OFFSET_REDUND must be aligned
+       to a block boundary, and CFG_ENV_SIZE must be a multiple of
+       the NAND devices block size.
+
 - CFG_SPI_INIT_OFFSET
 
        Defines offset to the initial SPI buffer area in DPRAM. The
index 3ffcc2a..6ef7e2f 100644 (file)
  */
 
 #include <common.h>
+#include <i2c.h>
+#include <da9030.h>
+#include <asm/arch/pxa-regs.h>
 
 /* ------------------------------------------------------------------------- */
 
+static void init_DA9030(void);
 
 /*
  * Miscelaneous platform dependent initialisations
@@ -54,6 +58,7 @@ int board_late_init(void)
 {
        setenv("stdout", "serial");
        setenv("stderr", "serial");
+       init_DA9030();
        return 0;
 }
 
@@ -73,3 +78,65 @@ int dram_init (void)
 
        return 0;
 }
+
+/* initialize the DA9030 Power Controller */
+static void init_DA9030()
+{
+       uchar addr = (uchar) DA9030_I2C_ADDR, val = 0;
+
+       /* setup I2C GPIO's */
+       GPIO32 = 0x801;         /* SCL = Alt. Fkt. 1 */
+       GPIO33 = 0x801;         /* SDA = Alt. Fkt. 1 */
+
+       /* rising Edge on EXTON */
+       GPIO17 = 0x8800;
+       udelay(5);
+       GPIO17 = 0xc800;
+       udelay(100000);         /* wait for DA9030 */
+
+       /* reset the watchdog and go active (0xec) */
+       val = (SYS_CONTROL_A_HWRES_ENABLE |
+              (0x6<<4) |
+              SYS_CONTROL_A_WDOG_ACTION |
+              SYS_CONTROL_A_WATCHDOG);
+
+       i2c_reg_write(addr, SYS_CONTROL_A, val);
+
+       i2c_reg_write(addr, REG_CONTROL_1_97, 0xfd); /* disable LDO1, enable LDO6 */
+       i2c_reg_write(addr, LDO2_3, 0xd1);      /* LDO2 =1,9V, LDO3=3,1V */
+       i2c_reg_write(addr, LDO4_5, 0xcc);      /* LDO2 =1,9V, LDO3=3,1V */
+       i2c_reg_write(addr, LDO6_SIMCP, 0x3e);  /* LDO6=3,2V, SIMCP = 5V support */
+       i2c_reg_write(addr, LDO7_8, 0xc9);      /* LDO7=2,7V, LDO8=3,0V */
+       i2c_reg_write(addr, LDO9_12, 0xec);     /* LDO9=3,0V, LDO12=3,2V */
+       i2c_reg_write(addr, BUCK, 0x0c);        /* Buck=1.2V */
+       i2c_reg_write(addr, REG_CONTROL_2_98, 0x7f); /* All LDO'S on 8,9,10,11,12,14 */
+       i2c_reg_write(addr, LDO_10_11, 0xcc);   /* LDO10=3.0V  LDO11=3.0V */
+       i2c_reg_write(addr, LDO_15, 0xae);      /* LDO15=1.8V, dislock first 3bit */
+       i2c_reg_write(addr, LDO_14_16, 0x05);   /* LDO14=2.8V, LDO16=NB */
+       i2c_reg_write(addr, LDO_18_19, 0x9c);   /* LDO18=3.0V, LDO19=2.7V */
+       i2c_reg_write(addr, LDO_17_SIMCP0, 0x2c); /* LDO17=3.0V, SIMCP=3V support */
+       i2c_reg_write(addr, BUCK2_DVC1, 0x9a);  /* Buck2=1.5V plus Update support of 520 MHz */
+       i2c_reg_write(addr, REG_CONTROL_2_18, 0x43); /* Ball on */
+       i2c_reg_write(addr, MISC_CONTROLB, 0x08); /* session valid enable */
+       i2c_reg_write(addr, USBPUMP, 0xc1);     /* start pump, ignore HW signals */
+
+       val = i2c_reg_read(addr, STATUS);
+       if(val & STATUS_CHDET)
+               printf("Charger detected, turning on LED.\n");
+       else {
+               printf("No charger detetected.\n");
+               /* undervoltage? print error and power down */
+       }
+}
+
+
+#if 0
+/* reset the DA9030 watchdog */
+void hw_watchdog_reset(void)
+{
+       uchar addr = (uchar) DA9030_I2C_ADDR, val = 0;
+       val = i2c_reg_read(addr, SYS_CONTROL_A);
+       val |= SYS_CONTROL_A_WATCHDOG;
+       i2c_reg_write(addr, SYS_CONTROL_A, val);
+}
+#endif
index 498cf7f..f059db5 100644 (file)
@@ -1,10 +1,5 @@
 /*
- * Most of this taken from Redboot hal_platform_setup.h with cleanup
- *
- * NOTE: I haven't clean this up considerably, just enough to get it
- * running. See hal_platform_setup.h for the source. See
- * board/cradle/lowlevel_init.S for another PXA250 setup that is
- * much cleaner.
+ * (C) Copyright 2006 DENX Software Engineering
  *
  * See file CREDITS for list of people who contributed to this
  * project.
 
 DRAM_SIZE:  .long   CFG_DRAM_SIZE
 
-/* wait for coprocessor write complete */
-.macro CPWAIT reg
-       mrc     p15,0,\reg,c2,c0,0
-       mov     \reg,\reg
-       sub     pc,pc,#4
-.endm
-
-
 .macro wait time
        ldr             r2, =OSCR
        mov             r3, #0
@@ -49,13 +36,9 @@ DRAM_SIZE:  .long   CFG_DRAM_SIZE
        bls             0b
 .endm
 
-/*
- *     Memory setup
- */
-
 .globl lowlevel_init
 lowlevel_init:
-       /* Set up GPIO pins first ----------------------------------------- */
+       /* Set up GPIO pins first */
        mov      r10, lr
 
        /*  Configure GPIO  Pins 97, 98 UART1 / altern. Fkt. 1 */
@@ -73,22 +56,7 @@ lowlevel_init:
        bic             r1, r1, #0x80000000
        str             r1, [r0]
 
-       /* ---------------------------------------------------------------- */
-       /* Enable memory interface                                          */
-       /* ---------------------------------------------------------------- */
-
-       /* ---------------------------------------------------------------- */
-       /* Step 1: Wait for at least 200 microsedonds to allow internal     */
-       /*         clocks to settle. Only necessary after hard reset...     */
-       /*         FIXME: can be optimized later                            */
-       /* ---------------------------------------------------------------- */
-;      wait #300
-
 mem_init:
-
-#define NEW_SDRAM_INIT 1
-#ifdef NEW_SDRAM_INIT
-
        /* Configure ACCR Register - enable DMEMC Clock at 260 / 2 MHz */
        ldr             r0, =ACCR
        ldr             r1, [r0]
@@ -99,7 +67,7 @@ mem_init:
        /* 2. Programm MDCNFG, leaving DMCEN de-asserted */
        ldr             r0, =MDCNFG
        ldr             r1, =(MDCNFG_DMAP | MDCNFG_DTYPE | MDCNFG_DTC_2 | MDCNFG_DCSE0 | MDCNFG_DRAC_13)
-       /*      ldr             r1, =0x80000403 */
+       /* ldr          r1, =0x80000403 */
        str             r1, [r0]
        ldr             r1, [r0]        /* delay until written */
 
@@ -140,121 +108,6 @@ mem_init:
        orr             r1, r1, #MDCNFG_DMCEN
        str             r1, [r0]
 
-
-#else /* NEW_SDRAM_INIT */
-
-       /* configure the MEMCLKCFG register */
-       ldr             r1, =MEMCLKCFG
-       ldr             r2, =0x00010001
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-       /* set CSADRCFG[0] to data flash SRAM mode */
-       ldr             r1, =CSADRCFG0
-       ldr             r2, =0x00320809
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-       /* set CSADRCFG[1] to data flash SRAM mode */
-       ldr             r1, =CSADRCFG1
-       ldr             r2, =0x00320809
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-       /* set MSC 0 register for SRAM memory */
-       ldr             r1, =MSC0
-       ldr             r2, =0x11191119
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-       /* set CSADRCFG[2] to data flash SRAM mode */
-       ldr             r1, =CSADRCFG2
-       ldr             r2, =0x00320809
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-       /* set CSADRCFG[3] to VLIO mode */
-       ldr             r1, =CSADRCFG3
-       ldr             r2, =0x0032080B
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-       /* set MSC 1 register for VLIO memory */
-       ldr             r1, =MSC1
-       ldr             r2, =0x123C1119
-       str             r2, [r1]             @ WRITE
-       ldr             r2, [r1]             @ DELAY UNTIL WRITTEN
-
-#if 0
-       /* This does not work in Zylonite. -SC */
-       ldr             r0, =0x15fffff0
-       ldr             r1, =0xb10b
-       str             r1, [r0]
-       str             r1, [r0, #4]
-#endif
-
-       /* Configure ACCR Register */
-       ldr             r0, =ACCR               @ ACCR
-       ldr             r1, =0x0180b108
-       str             r1, [r0]
-       ldr             r1, [r0]
-
-       /* Configure MDCNFG Register */
-       ldr             r0, =MDCNFG             @ MDCNFG
-       ldr             r1, =0x403
-       str             r1, [r0]
-       ldr             r1, [r0]
-
-       /* Perform Resistive Compensation by configuring RCOMP register */
-       ldr             r1, =RCOMP              @ RCOMP
-       ldr             r2, =0x000000ff
-       str             r2, [r1]
-       ldr             r2, [r1]
-
-       /* Configure MDMRS Register for SDCS0 */
-       ldr             r1, =MDMRS              @ MDMRS
-       ldr             r2, =0x60000023
-       ldr             r3, [r1]
-       orr             r2, r2, r3
-       str             r2, [r1]
-       ldr             r2, [r1]
-
-       /* Configure MDMRS Register for SDCS1 */
-       ldr             r1, =MDMRS              @ MDMRS
-       ldr             r2, =0xa0000023
-       ldr             r3, [r1]
-       orr             r2, r2, r3
-       str             r2, [r1]
-       ldr             r2, [r1]
-
-       /* Configure MDREFR */
-       ldr             r1, =MDREFR             @ MDREFR
-       ldr             r2, =0x00000006
-       str             r2, [r1]
-       ldr             r2, [r1]
-
-       /* Configure EMPI */
-       ldr             r1, =EMPI               @ EMPI
-       ldr             r2, =0x80000000
-       str             r2, [r1]
-       ldr             r2, [r1]
-
-       /* Hardware DDR Read-Strobe Delay Calibration */
-       ldr             r0, =DDR_HCAL           @ DDR_HCAL
-       ldr             r1, =0x803ffc07     @ the offset is correct? -SC
-       str             r1, [r0]
-       wait            #5
-       ldr             r1, [r0]
-
-       /* Here we assume the hardware calibration alwasy be successful. -SC */
-       /* Set DMCEN bit in MDCNFG Register */
-       ldr             r0, =MDCNFG             @ MDCNFG
-       ldr             r1, [r0]
-       orr             r1, r1, #0x40000000     @ enable SDRAM for Normal Access
-       str             r1, [r0]
-
-#endif /* NEW_SDRAM_INIT */
-
 #ifndef CFG_SKIP_DRAM_SCRUB
        /* scrub/init SDRAM if enabled/present */
        ldr     r8, =CFG_DRAM_BASE      /* base address of SDRAM (CFG_DRAM_BASE) */
@@ -290,96 +143,4 @@ mem_init:
        mcr     p14,0,r0,c10,c0,0  /* dcsr */
 
 endlowlevel_init:
-
        mov     pc, lr
-
-
-/*
-@********************************************************************************
-@ DDR calibration
-@
-@  This function is used to calibrate DQS delay lines.
-@ Monahans supports three ways to do it. One is software
-@ calibration. Two is hardware calibration. Three is hybrid
-@ calibration.
-@
-@ TBD
-@ -SC
-ddr_calibration:
-
-       @ Case 1:       Write the correct delay value once
-       @ Configure DDR_SCAL Register
-       ldr             r0, =DDR_SCAL           @ DDR_SCAL
-q      ldr             r1, =0xaf2f2f2f
-       str             r1, [r0]
-       ldr             r1, [r0]
-*/
-/*     @ Case 2:       Software Calibration
-       @ Write test pattern to memory
-       ldr             r5, =0x0faf0faf         @ Data Pattern
-       ldr             r4, =0xa0000000         @ DDR ram
-       str             r5, [r4]
-
-       mov             r1, =0x0                @ delay count
-       mov             r6, =0x0
-       mov             r7, =0x0
-ddr_loop1:
-       add             r1, r1, =0x1
-       cmp             r1, =0xf
-       ble             end_loop
-       mov             r3, r1
-       mov             r0, r1, lsl #30
-       orr             r3, r3, r0
-       mov             r0, r1, lsl #22
-       orr             r3, r3, r0
-       mov             r0, r1, lsl #14
-       orr             r3, r3, r0
-       orr             r3, r3, =0x80000000
-       ldr             r2, =DDR_SCAL
-       str             r3, [r2]
-
-       ldr             r2, [r4]
-       cmp             r2, r5
-       bne             ddr_loop1
-       mov             r6, r1
-ddr_loop2:
-       add             r1, r1, =0x1
-       cmp             r1, =0xf
-       ble             end_loop
-       mov             r3, r1
-       mov             r0, r1, lsl #30
-       orr             r3, r3, r0
-       mov             r0, r1, lsl #22
-       orr             r3, r3, r0
-       mov             r0, r1, lsl #14
-       orr             r3, r3, r0
-       orr             r3, r3, =0x80000000
-       ldr             r2, =DDR_SCAL
-       str             r3, [r2]
-
-       ldr             r2, [r4]
-       cmp             r2, r5
-       be              ddr_loop2
-       mov             r7, r2
-
-       add             r3, r6, r7
-       lsr             r3, r3, =0x1
-       mov             r0, r1, lsl #30
-       orr             r3, r3, r0
-       mov             r0, r1, lsl #22
-       orr             r3, r3, r0
-       mov             r0, r1, lsl #14
-       orr             r3, r3, r0
-       orr             r3, r3, =0x80000000
-       ldr             r2, =DDR_SCAL
-
-end_loop:
-
-       @ Case 3:       Hardware Calibratoin
-       ldr             r0, =DDR_HCAL           @ DDR_HCAL
-       ldr             r1, =0x803ffc07     @ the offset is correct? -SC
-       str             r1, [r0]
-       wait            #5
-       ldr             r1, [r0]
-       mov             pc, lr
-*/
index c4df6e5..5d2cd65 100644 (file)
@@ -293,11 +293,6 @@ static int dfc_wait(struct mtd_info *mtd, struct nand_chip *this, int state)
 {
        unsigned long ndsr=0, event=0;
 
-       /* mk@tbd set appropriate timeouts */
-       /*      if (state == FL_ERASING) */
-       /*              timeo = CFG_HZ * 400; */
-       /*      else */
-       /*              timeo = CFG_HZ * 20; */
        if(state == FL_WRITING) {
                event = NDSR_CS0_CMDD | NDSR_CS0_BBD;
        } else if(state == FL_ERASING) {
@@ -563,13 +558,12 @@ void board_nand_init(struct nand_chip *nand)
 
 
        /* wait 10 us due to cmd buffer clear reset */
-       /*      wait(10); */
+       /*      wait(10); */
 
 
        nand->hwcontrol = dfc_hwcontrol;
-/*     nand->dev_ready = dfc_device_ready; */
+/*     nand->dev_ready = dfc_device_ready; */
        nand->eccmode = NAND_ECC_SOFT;
-       nand->chip_delay = NAND_DELAY_US;
        nand->options = NAND_BUSWIDTH_16;
        nand->waitfunc = dfc_wait;
        nand->read_byte = dfc_read_byte;
index dd27f7b..a6af74a 100644 (file)
 #include <command.h>
 #include <environment.h>
 #include <linux/stddef.h>
+#include <malloc.h>
 #include <nand.h>
 
 #if ((CONFIG_COMMANDS&(CFG_CMD_ENV|CFG_CMD_NAND)) == (CFG_CMD_ENV|CFG_CMD_NAND))
 #define CMD_SAVEENV
+#elif defined(CFG_ENV_OFFSET_REDUND)
+#error Cannot use CFG_ENV_OFFSET_REDUND without CFG_CMD_ENV & CFG_CMD_NAND
 #endif
 
-#if defined(CFG_ENV_SIZE_REDUND)
-#error CFG_ENV_SIZE_REDUND  not supported yet
+#if defined(CFG_ENV_SIZE_REDUND) && (CFG_ENV_SIZE_REDUND != CFG_ENV_SIZE)
+#error CFG_ENV_SIZE_REDUND should be the same as CFG_ENV_SIZE
 #endif
 
-#if defined(CFG_ENV_ADDR_REDUND)
-#error CFG_ENV_ADDR_REDUND and CFG_ENV_IS_IN_NAND not supported yet
-#endif
-
-
 #ifdef CONFIG_INFERNO
 #error CONFIG_INFERNO not supported yet
 #endif
@@ -99,7 +97,7 @@ int env_init(void)
 {
        DECLARE_GLOBAL_DATA_PTR;
 
-       gd->env_addr  = (ulong)&default_environment[0];
+       gd->env_addr  = (ulong)&default_environment[0];
        gd->env_valid = 1;
 
        return (0);
@@ -110,6 +108,43 @@ int env_init(void)
  * The legacy NAND code saved the environment in the first NAND device i.e.,
  * nand_dev_desc + 0. This is also the behaviour using the new NAND code.
  */
+#ifdef CFG_ENV_OFFSET_REDUND
+int saveenv(void)
+{
+       ulong total;
+       int ret = 0;
+
+       DECLARE_GLOBAL_DATA_PTR;
+
+       env_ptr->flags++;
+       total = CFG_ENV_SIZE;
+
+       if(gd->env_valid == 1) {
+               puts ("Erasing redundant Nand...");
+               if (nand_erase(&nand_info[0],
+                              CFG_ENV_OFFSET_REDUND, CFG_ENV_SIZE))
+                       return 1;
+               puts ("Writing to redundant Nand... ");
+               ret = nand_write(&nand_info[0], CFG_ENV_OFFSET_REDUND, &total,
+                                (u_char*) env_ptr);
+       } else {
+               puts ("Erasing Nand...");
+               if (nand_erase(&nand_info[0],
+                              CFG_ENV_OFFSET, CFG_ENV_SIZE))
+                       return 1;
+
+               puts ("Writing to Nand... ");
+               ret = nand_write(&nand_info[0], CFG_ENV_OFFSET, &total,
+                                (u_char*) env_ptr);
+       }
+       if (ret || total != CFG_ENV_SIZE)
+               return 1;
+
+       puts ("done\n");
+       gd->env_valid = (gd->env_valid == 2 ? 1 : 2);
+       return ret;
+}
+#else /* ! CFG_ENV_OFFSET_REDUND */
 int saveenv(void)
 {
        ulong total;
@@ -128,9 +163,65 @@ int saveenv(void)
        puts ("done\n");
        return ret;
 }
+#endif /* CFG_ENV_OFFSET_REDUND */
 #endif /* CMD_SAVEENV */
 
+#ifdef CFG_ENV_OFFSET_REDUND
+void env_relocate_spec (void)
+{
+#if !defined(ENV_IS_EMBEDDED)
+       ulong total;
+       int crc1_ok = 0, crc2_ok = 0;
+       env_t *tmp_env1, *tmp_env2;
+
+       DECLARE_GLOBAL_DATA_PTR;
+
+       total = CFG_ENV_SIZE;
+
+       tmp_env1 = (env_t *) malloc(CFG_ENV_SIZE);
+       tmp_env2 = (env_t *) malloc(CFG_ENV_SIZE);
+
+       nand_read(&nand_info[0], CFG_ENV_OFFSET, &total,
+                 (u_char*) tmp_env1);
+       nand_read(&nand_info[0], CFG_ENV_OFFSET_REDUND, &total,
+                 (u_char*) tmp_env2);
+
+       crc1_ok = (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc);
+       crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);
 
+       if(!crc1_ok && !crc2_ok)
+               return use_default();
+       else if(crc1_ok && !crc2_ok)
+               gd->env_valid = 1;
+       else if(!crc1_ok && crc2_ok)
+               gd->env_valid = 2;
+       else {
+               /* both ok - check serial */
+               if(tmp_env1->flags == 255 && tmp_env2->flags == 0)
+                       gd->env_valid = 2;
+               else if(tmp_env2->flags == 255 && tmp_env1->flags == 0)
+                       gd->env_valid = 1;
+               else if(tmp_env1->flags > tmp_env2->flags)
+                       gd->env_valid = 1;
+               else if(tmp_env2->flags > tmp_env1->flags)
+                       gd->env_valid = 2;
+               else /* flags are equal - almost impossible */
+                       gd->env_valid = 1;
+
+       }
+
+       free(env_ptr);
+       if(gd->env_valid == 1) {
+               env_ptr = tmp_env1;
+               free(tmp_env2);
+       } else {
+               env_ptr = tmp_env2;
+               free(tmp_env1);
+       }
+
+#endif /* ! ENV_IS_EMBEDDED */
+}
+#else /* ! CFG_ENV_OFFSET_REDUND */
 /*
  * The legacy NAND code saved the environment in the first NAND device i.e.,
  * nand_dev_desc + 0. This is also the behaviour using the new NAND code.
@@ -149,8 +240,8 @@ void env_relocate_spec (void)
        if (crc32(0, env_ptr->data, ENV_SIZE) != env_ptr->crc)
                return use_default();
 #endif /* ! ENV_IS_EMBEDDED */
-
 }
+#endif /* CFG_ENV_OFFSET_REDUND */
 
 static void use_default()
 {
@@ -158,7 +249,7 @@ static void use_default()
 
        puts ("*** Warning - bad CRC or NAND, using default environment\n\n");
 
-       if (default_environment_size > CFG_ENV_SIZE){
+       if (default_environment_size > CFG_ENV_SIZE){
                puts ("*** Error - default environment is too large\n\n");
                return;
        }
@@ -168,7 +259,7 @@ static void use_default()
                        default_environment,
                        default_environment_size);
        env_ptr->crc = crc32(0, env_ptr->data, ENV_SIZE);
-       gd->env_valid = 1;
+       gd->env_valid = 1;
 
 }
 
index b6155b1..722d949 100644 (file)
 
 /*#define      DEBUG_I2C       1       /###* activate local debugging output  */
 #define I2C_PXA_SLAVE_ADDR     0x1     /* slave pxa unit address           */
-#define I2C_ICR_INIT           (ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE)
+
+#if (CFG_I2C_SPEED == 400000)
+#define I2C_ICR_INIT   (ICR_FM | ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE)
+#else
+#define I2C_ICR_INIT   (ICR_BEIE | ICR_IRFIE | ICR_ITEIE | ICR_GCD | ICR_SCLE)
+#endif
+
 #define I2C_ISR_INIT           0x7FF
 
 #ifdef DEBUG_I2C
@@ -91,7 +97,11 @@ static void i2c_reset( void )
        ICR |= ICR_UR;                  /* reset the unit */
        udelay(100);
        ICR &= ~ICR_IUE;                /* disable unit */
+#ifdef CONFIG_CPU_MONAHANS
+       CKENB |= (CKENB_4_I2C); /*  | CKENB_1_PWM1 | CKENB_0_PWM0); */
+#else /* CONFIG_CPU_MONAHANS */
        CKEN |= CKEN14_I2C;             /* set the global I2C clock on */
+#endif
        ISAR = I2C_PXA_SLAVE_ADDR;      /* set our slave address */
        ICR = I2C_ICR_INIT;             /* set control register values */
        ISR = I2C_ISR_INIT;             /* set clear interrupt bits */
@@ -104,9 +114,8 @@ static void i2c_reset( void )
  * i2c_isr_set_cleared: - wait until certain bits of the I2C status register
  *                       are set and cleared
  *
- * @return: 0 in case of success, 1 means timeout (no match within 10 ms).
+ * @return: 1 in case of success, 0 means timeout (no match within 10 ms).
  */
-
 static int i2c_isr_set_cleared( unsigned long set_mask, unsigned long cleared_mask )
 {
        int timeout = 10000;
@@ -360,9 +369,9 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
                msg.data      = 0x00;
                if ((ret=i2c_transfer(&msg))) return -1;
 
-               *(buffer++) = msg.data;
-
+               *buffer = msg.data;
                PRINTD(("i2c_read: reading byte (0x%08x)=0x%02x\n",(unsigned int)buffer,*buffer));
+               buffer++;
 
        }
 
index 9541c9b..ffaa30f 100644 (file)
@@ -190,6 +190,14 @@ OSTIMER_BASE:      .word   0x40a00000
 #define OIER   0x1C
 
 /* Clock Manager Registers                                                 */
+#ifdef CONFIG_CPU_MONAHANS
+# ifndef CFG_MONAHANS_RUN_MODE_OSC_RATIO
+#  error "You have to define CFG_MONAHANS_RUN_MODE_OSC_RATIO!!"
+# endif
+# ifndef CFG_MONAHANS_TURBO_RUN_MODE_RATIO
+#  define CFG_MONAHANS_TURBO_RUN_MODE_RATIO 0x1
+# endif
+#else /* ! CONFIG_CPU_MONAHANS */
 #ifdef CFG_CPUSPEED
 CC_BASE:       .word   0x41300000
 #define CCCR   0x00
@@ -197,6 +205,7 @@ cpuspeed:   .word   CFG_CPUSPEED
 #else
 #error "You have to define CFG_CPUSPEED!!"
 #endif
+#endif /* CONFIG_CPU_MONAHANS */
 
        /* takes care the CP15 update has taken place */
        .macro CPWAIT reg
@@ -233,9 +242,13 @@ cpu_init_crit:
        str     r2, [r1]
 #endif
 
-#ifndef CONFIG_CPU_MONAHANS
+       /* set clock speed */
+#ifdef CONFIG_CPU_MONAHANS
+       ldr     r0, =ACCR
+       ldr     r1, =(((CFG_MONAHANS_TURBO_RUN_MODE_RATIO<<8) & ACCR_XN_MASK) | (CFG_MONAHANS_RUN_MODE_OSC_RATIO & ACCR_XL_MASK))
+       str     r1, [r0]
+#else /* ! CONFIG_CPU_MONAHANS */
 #ifdef CFG_CPUSPEED
-       /* set clock speed tbd@mk: required for monahans? */
        ldr     r0, CC_BASE
        ldr     r1, cpuspeed
        str     r1, [r0, #CCCR]
index 83ae5e3..ebda719 100644 (file)
@@ -475,11 +475,11 @@ typedef void              (*ExcpHndlr) (void) ;
 #define ICR_ACKNAK     0x4             /* send ACK(0) or NAK(1) */
 #define ICR_TB         0x8             /* transfer byte bit */
 #define ICR_MA         0x10            /* master abort */
-#define ICR_SCLE       0x20            /* master clock enable */
+#define ICR_SCLE       0x20            /* master clock enable, mona SCLEA */
 #define ICR_IUE                0x40            /* unit enable */
 #define ICR_GCD                0x80            /* general call disable */
 #define ICR_ITEIE      0x100           /* enable tx interrupts */
-#define ICR_IRFIE      0x200           /* enable rx interrupts */
+#define ICR_IRFIE      0x200           /* enable rx interrupts, mona: DRFIE */
 #define ICR_BEIE       0x400           /* enable bus error ints */
 #define ICR_SSDIE      0x800           /* slave STOP detected int enable */
 #define ICR_ALDIE      0x1000          /* enable arbitration interrupt */
@@ -821,21 +821,21 @@ typedef void              (*ExcpHndlr) (void) ;
 #define RTAR           __REG(0x40900004)  /* RTC Alarm Register */
 #define RTSR           __REG(0x40900008)  /* RTC Status Register */
 #define RTTR           __REG(0x4090000C)  /* RTC Timer Trim Register */
-#define RDAR1     __REG(0x40900018)  /* Wristwatch Day Alarm Reg 1 */
-#define RDAR2     __REG(0x40900020)  /* Wristwatch Day Alarm Reg 2 */
-#define RYAR1     __REG(0x4090001C)  /* Wristwatch Year Alarm Reg 1 */
-#define RYAR2     __REG(0x40900024)  /* Wristwatch Year Alarm Reg 2 */
-#define SWAR1     __REG(0x4090002C)  /* Stopwatch Alarm Register 1 */
-#define SWAR2     __REG(0x40900030)  /* Stopwatch Alarm Register 2 */
-#define PIAR      __REG(0x40900038)  /* Periodic Interrupt Alarm Register */
-#define RDCR      __REG(0x40900010)  /* RTC Day Count Register. */
-#define RYCR      __REG(0x40900014)  /* RTC Year Count Register. */
-#define SWCR      __REG(0x40900028)  /* Stopwatch Count Register */
-#define RTCPICR           __REG(0x40900034)  /* Periodic Interrupt Counter Register */
-
-#define RTSR_PICE  (1 << 15)   /* Peridoc interrupt count enable */
-#define RTSR_PIALE (1 << 14)   /* Peridoc interrupt Alarm enable */
-#define RTSR_PIAL  (1 << 13)   /* Peridoc  interrupt Alarm status */
+#define RDAR1          __REG(0x40900018)  /* Wristwatch Day Alarm Reg 1 */
+#define RDAR2          __REG(0x40900020)  /* Wristwatch Day Alarm Reg 2 */
+#define RYAR1          __REG(0x4090001C)  /* Wristwatch Year Alarm Reg 1 */
+#define RYAR2          __REG(0x40900024)  /* Wristwatch Year Alarm Reg 2 */
+#define SWAR1          __REG(0x4090002C)  /* Stopwatch Alarm Register 1 */
+#define SWAR2          __REG(0x40900030)  /* Stopwatch Alarm Register 2 */
+#define PIAR           __REG(0x40900038)  /* Periodic Interrupt Alarm Register */
+#define RDCR           __REG(0x40900010)  /* RTC Day Count Register. */
+#define RYCR           __REG(0x40900014)  /* RTC Year Count Register. */
+#define SWCR           __REG(0x40900028)  /* Stopwatch Count Register */
+#define RTCPICR                __REG(0x40900034)  /* Periodic Interrupt Counter Register */
+
+#define RTSR_PICE      (1 << 15)       /* Peridoc interrupt count enable */
+#define RTSR_PIALE     (1 << 14)       /* Peridoc interrupt Alarm enable */
+#define RTSR_PIAL      (1 << 13)       /* Peridoc  interrupt Alarm status */
 #define RTSR_HZE       (1 << 3)        /* HZ interrupt enable */
 #define RTSR_ALE       (1 << 2)        /* RTC alarm interrupt enable */
 #define RTSR_HZ                (1 << 1)        /* HZ rising-edge detected */
@@ -921,9 +921,10 @@ typedef void               (*ExcpHndlr) (void) ;
 
 #ifdef CONFIG_CPU_MONAHANS
 #define ICHP           __REG(0x40D00018)  /* Interrupt Controller Highest Priority Register */
-/* Missing: 32 Interrupt priority registers */
-/* mk@tbd: These are the same as beneath for PXA27x: maybe can be
- * merged if GPIO Stuff is same too. */
+/* Missing: 32 Interrupt priority registers
+ * These are the same as beneath for PXA27x: maybe can be merged if
+ * GPIO Stuff is same too.
+ */
 #define ICIP2          __REG(0x40D0009C)  /* Interrupt Controller IRQ Pending Register 2 */
 #define ICMR2          __REG(0x40D000A0)  /* Interrupt Controller Mask Register 2 */
 #define ICLR2          __REG(0x40D000A4)  /* Interrupt Controller Level Register 2 */
@@ -983,24 +984,24 @@ typedef void              (*ExcpHndlr) (void) ;
 #define GCDR3          __REG(0x40E0042C) /* Bit-wise Clear of GPDR[127:96] */
 
 #define GSRER0         __REG(0x40E00440) /* Set Rising Edge Det. Enable [31:0] */
-#define GSRER1         __REG(0x40E00444) /* Set Rising Edge Det. Enable [63:32] */
+#define GSRER1         __REG(0x40E00444) /* Set Rising Edge Det. Enable [63:32] */
 #define GSRER2         __REG(0x40E00448) /* Set Rising Edge Det. Enable [95:64] */
-#define GSRER3         __REG(0x40E0044C) /* Set Rising Edge Det. Enable [127:96] */
+#define GSRER3         __REG(0x40E0044C) /* Set Rising Edge Det. Enable [127:96] */
 
 #define GCRER0         __REG(0x40E00460) /* Clear Rising Edge Det. Enable [31:0] */
-#define GCRER1         __REG(0x40E00464) /* Clear Rising Edge Det. Enable [63:32] */
+#define GCRER1         __REG(0x40E00464) /* Clear Rising Edge Det. Enable [63:32] */
 #define GCRER2         __REG(0x40E00468) /* Clear Rising Edge Det. Enable [95:64] */
-#define GCRER3         __REG(0x40E0046C) /* Clear Rising Edge Det. Enable[127:96] */
+#define GCRER3         __REG(0x40E0046C) /* Clear Rising Edge Det. Enable[127:96] */
 
 #define GSFER0         __REG(0x40E00480) /* Set Falling Edge Det. Enable [31:0] */
-#define GSFER1         __REG(0x40E00484) /* Set Falling Edge Det. Enable [63:32] */
+#define GSFER1         __REG(0x40E00484) /* Set Falling Edge Det. Enable [63:32] */
 #define GSFER2         __REG(0x40E00488) /* Set Falling Edge Det. Enable [95:64] */
-#define GSFER3         __REG(0x40E0048C) /* Set Falling Edge Det. Enable[127:96] */
+#define GSFER3         __REG(0x40E0048C) /* Set Falling Edge Det. Enable[127:96] */
 
 #define GCFER0         __REG(0x40E004A0) /* Clr Falling Edge Det. Enable [31:0] */
-#define GCFER1         __REG(0x40E004A4) /* Clr Falling Edge Det. Enable [63:32] */
+#define GCFER1         __REG(0x40E004A4) /* Clr Falling Edge Det. Enable [63:32] */
 #define GCFER2         __REG(0x40E004A8) /* Clr Falling Edge Det. Enable [95:64] */
-#define GCFER3         __REG(0x40E004AC) /* Clr Falling Edge Det. Enable[127:96] */
+#define GCFER3         __REG(0x40E004AC) /* Clr Falling Edge Det. Enable[127:96] */
 
 #define GSDR(x)                __REG2(0x40E00400, ((x) & 0x60) >> 3)
 #define GCDR(x)                __REG2(0x40300420, ((x) & 0x60) >> 3)
@@ -1488,8 +1489,8 @@ typedef void              (*ExcpHndlr) (void) ;
 #define GPIO79_nCS_3_MD                (79 | GPIO_ALT_FN_2_OUT)
 #define GPIO80_nCS_4_MD                (80 | GPIO_ALT_FN_2_OUT)
 
-#define GPIO117_SCL         (117 | GPIO_ALT_FN_1_OUT)
-#define GPIO118_SDA         (118 | GPIO_ALT_FN_1_OUT)
+#define GPIO117_SCL            (117 | GPIO_ALT_FN_1_OUT)
+#define GPIO118_SDA            (118 | GPIO_ALT_FN_1_OUT)
 
 /*
  * Power Manager
@@ -1709,10 +1710,10 @@ typedef void            (*ExcpHndlr) (void) ;
 #define ACCR_13MEND2   (1 << 21)
 #define ACCR_PCCE      (1 << 11)
 
-#define CKENA_30_MSL0  (1 << 30)       /* MSL0 Interface Unit Clock Enable */
-#define CKENA_29_SSP4  (1 << 29)       /* SSP3 Unit Clock Enable */
-#define CKENA_28_SSP3  (1 << 28)       /* SSP2 Unit Clock Enable */
-#define CKENA_27_SSP2  (1 << 27)       /* SSP1 Unit Clock Enable */
+#define CKENA_30_MSL0  (1 << 30)       /* MSL0 Interface Unit Clock Enable */
+#define CKENA_29_SSP4  (1 << 29)       /* SSP3 Unit Clock Enable */
+#define CKENA_28_SSP3  (1 << 28)       /* SSP2 Unit Clock Enable */
+#define CKENA_27_SSP2  (1 << 27)       /* SSP1 Unit Clock Enable */
 #define CKENA_26_SSP1  (1 << 26)       /* SSP0 Unit Clock Enable */
 #define CKENA_25_TSI   (1 << 25)       /* TSI Clock Enable */
 #define CKENA_24_AC97  (1 << 24)       /* AC97 Unit Clock Enable */
@@ -1720,27 +1721,27 @@ typedef void            (*ExcpHndlr) (void) ;
 #define CKENA_22_FFUART        (1 << 22)       /* FFUART Unit Clock Enable */
 #define CKENA_21_BTUART        (1 << 21)       /* BTUART Unit Clock Enable */
 #define CKENA_20_UDC   (1 << 20)       /* UDC Clock Enable */
-#define CKENA_19_TPM   (1 << 19)       /* TPM Unit Clock Enable */
-#define CKENA_18_USIM1 (1 << 18)       /* USIM1 Unit Clock Enable */
-#define CKENA_17_USIM0 (1 << 17)       /* USIM0 Unit Clock Enable */
-#define CKENA_15_CIR   (1 << 15)       /* Consumer IR Clock Enable */
-#define CKENA_14_KEY   (1 << 14)       /* Keypad Controller Clock Enable */
-#define CKENA_13_MMC1  (1 << 13)       /* MMC1 Clock Enable */
-#define CKENA_12_MMC0  (1 << 12)       /* MMC0 Clock Enable */
-#define CKENA_11_FLASH (1 << 11)       /* Boot ROM Clock Enable */
-#define CKENA_10_SRAM  (1 << 10)       /* SRAM Controller Clock Enable */
-#define CKENA_9_SMC    (1 << 9)        /* Static Memory Controller */
-#define CKENA_8_DMC    (1 << 8)        /* Dynamic Memory Controller */
-#define CKENA_7_GRAPHICS (1 << 7)      /* 2D Graphics Clock Enable */
+#define CKENA_19_TPM   (1 << 19)       /* TPM Unit Clock Enable */
+#define CKENA_18_USIM1 (1 << 18)       /* USIM1 Unit Clock Enable */
+#define CKENA_17_USIM0 (1 << 17)       /* USIM0 Unit Clock Enable */
+#define CKENA_15_CIR   (1 << 15)       /* Consumer IR Clock Enable */
+#define CKENA_14_KEY   (1 << 14)       /* Keypad Controller Clock Enable */
+#define CKENA_13_MMC1  (1 << 13)       /* MMC1 Clock Enable */
+#define CKENA_12_MMC0  (1 << 12)       /* MMC0 Clock Enable */
+#define CKENA_11_FLASH (1 << 11)       /* Boot ROM Clock Enable */
+#define CKENA_10_SRAM  (1 << 10)       /* SRAM Controller Clock Enable */
+#define CKENA_9_SMC    (1 << 9)        /* Static Memory Controller */
+#define CKENA_8_DMC    (1 << 8)        /* Dynamic Memory Controller */
+#define CKENA_7_GRAPHICS (1 << 7)      /* 2D Graphics Clock Enable */
 #define CKENA_6_USBCLI (1 << 6)        /* USB Client Unit Clock Enable */
-#define CKENA_4_NAND   (1 << 4)        /* NAND Flash Controller Clock Enable */
-#define CKENA_3_CAMERA (1 << 3)        /* Camera Interface Clock Enable */
+#define CKENA_4_NAND   (1 << 4)        /* NAND Flash Controller Clock Enable */
+#define CKENA_3_CAMERA (1 << 3)        /* Camera Interface Clock Enable */
 #define CKENA_2_USBHOST        (1 << 2)        /* USB Host Unit Clock Enable */
 #define CKENA_1_LCD    (1 << 1)        /* LCD Unit Clock Enable */
 
 #define CKENB_8_1WIRE  ((1 << 8) + 32) /* One Wire Interface Unit Clock Enable */
-#define CKENB_7_GPIO   ((1 << 7) + 32)         /* GPIO Clock Enable */
-#define CKENB_6_IRQ    ((1 << 6) + 32)         /* Interrupt Controller Clock Enable */
+#define CKENB_7_GPIO   ((1 << 7) + 32) /* GPIO Clock Enable */
+#define CKENB_6_IRQ    ((1 << 6) + 32) /* Interrupt Controller Clock Enable */
 #define CKENB_4_I2C    ((1 << 4) + 32) /* I2C Unit Clock Enable */
 #define CKENB_1_PWM1   ((1 << 1) + 32) /* PWM2 & PWM3 Clock Enable */
 #define CKENB_0_PWM0   ((1 << 0) + 32) /* PWM0 & PWM1 Clock Enable */
@@ -2382,16 +2383,16 @@ typedef void            (*ExcpHndlr) (void) ;
 #define KPAS_SO                (0x1 << 31)
 #define KPASMKPx_SO    (0x1 << 31)
 
-#define GPIO113_BIT       (1 << 17)/* GPIO113 in GPSR, GPCR, bit 17 */
-#define PSLR      __REG(0x40F00034)
-#define PSTR      __REG(0x40F00038)  /* Power Manager Standby Configuration Reg */
-#define PSNR      __REG(0x40F0003C)  /* Power Manager Sense Configuration Reg */
-#define PVCR      __REG(0x40F00040)  /* Power Manager Voltage Change Control Reg */
-#define PKWR      __REG(0x40F00050)  /* Power Manager KB Wake-Up Enable Reg */
-#define PKSR      __REG(0x40F00054)  /* Power Manager KB Level-Detect Status Reg */
-#define OSMR4      __REG(0x40A00080)  /* */
-#define OSCR4      __REG(0x40A00040)  /* OS Timer Counter Register */
-#define OMCR4      __REG(0x40A000C0)  /* */
+#define GPIO113_BIT    (1 << 17)/* GPIO113 in GPSR, GPCR, bit 17 */
+#define PSLR           __REG(0x40F00034)
+#define PSTR           __REG(0x40F00038)  /* Power Manager Standby Configuration Reg */
+#define PSNR           __REG(0x40F0003C)  /* Power Manager Sense Configuration Reg */
+#define PVCR           __REG(0x40F00040)  /* Power Manager Voltage Change Control Reg */
+#define PKWR           __REG(0x40F00050)  /* Power Manager KB Wake-Up Enable Reg */
+#define PKSR           __REG(0x40F00054)  /* Power Manager KB Level-Detect Status Reg */
+#define OSMR4          __REG(0x40A00080)  /* */
+#define OSCR4          __REG(0x40A00040)  /* OS Timer Counter Register */
+#define OMCR4          __REG(0x40A000C0)  /* */
 
 #endif /* CONFIG_PXA27X */
 
index b42a7e2..776ee15 100644 (file)
@@ -49,7 +49,6 @@
 /*
  * Hardware drivers
  */
-
 #undef TURN_ON_ETHERNET
 #ifdef TURN_ON_ETHERNET
 # define CONFIG_DRIVER_SMC91111 1
 # undef CONFIG_SMC_USE_IOFUNCS          /* just for use with the kernel */
 #endif
 
+#define CONFIG_HARD_I2C                1       /* required for DA9030 access */
+#define CFG_I2C_SPEED          400000  /* I2C speed */
+#define CFG_I2C_SLAVE          1       /* I2C controllers address */
+#define DA9030_I2C_ADDR                0x49    /* I2C address of DA9030 */
+/* #define CONFIG_HW_WATCHDOG  1       /\* Required for hitting the DA9030 WD *\/ */
+
 /*
  * select serial console configuration
  */
-#define CONFIG_FFUART         1
+#define CONFIG_FFUART          1
 
 /* allow to overwrite serial and ethaddr */
 #define CONFIG_ENV_OVERWRITE
 #ifdef TURN_ON_ETHERNET
 # define CONFIG_COMMANDS        (CONFIG_CMD_DFL | CFG_CMD_PING)
 #else
-# define CONFIG_COMMANDS       ((CONFIG_CMD_DFL | CFG_CMD_ENV | CFG_CMD_NAND) \
-                               & ~(CFG_CMD_NET | CFG_CMD_FLASH | CFG_CMD_IMLS))
+# define CONFIG_COMMANDS       ((CONFIG_CMD_DFL \
+                                 | CFG_CMD_ENV \
+                                 | CFG_CMD_NAND \
+                                 | CFG_CMD_I2C) \
+                                & ~(CFG_CMD_NET \
+                                    | CFG_CMD_FLASH \
+                                    | CFG_CMD_IMLS))
 #endif
 
 
 
 #define CFG_LOAD_ADDR  (CFG_DRAM_BASE + 0x8000) /* default load address */
 
-#define CFG_HZ                 3686400         /* incrementer freq: 3.6864 MHz */
-#define CFG_CPUSPEED           0x161           /* set core clock to 400/200/100 MHz */
+#define CFG_HZ                 3250000         /* incrementer freq: 3.25 MHz */
+
+/* Monahans Core Frequency = 
+ * 
+ */
+#define CFG_MONAHANS_RUN_MODE_OSC_RATIO                16 /* valid values: 8, 16, 24, 31 */
+#define CFG_MONAHANS_TURBO_RUN_MODE_RATIO      1  /* valid values: 1, 2 */
+
 
                                                /* valid baudrates */
 #define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
 
 #define CFG_NAND_BASE_LIST     { CFG_NAND0_BASE }
 #define CFG_MAX_NAND_DEVICE    1       /* Max number of NAND devices */
-#define SECTORSIZE             512
-#define NAND_DELAY_US          25      /* mk@tbd: could be 0, I guess */
 
 /* nand timeout values */
 #define CFG_NAND_PROG_ERASE_TO 3000
 #undef NAND_ALLOW_ERASE_ALL    /* Allow erasing bad blocks - don't use */
 
 /* NAND Timing Parameters (in ns) */
-#define NAND_TIMING_tCH        10
-#define NAND_TIMING_tCS        0
+#define NAND_TIMING_tCH                10
+#define NAND_TIMING_tCS                0
 #define NAND_TIMING_tWH                20
-#define NAND_TIMING_tWP        40
+#define NAND_TIMING_tWP                40
 
-#define NAND_TIMING_tRH        20
-#define NAND_TIMING_tRP        40
+#define NAND_TIMING_tRH                20
+#define NAND_TIMING_tRP                40
 
-#define NAND_TIMING_tR         11123
-/* #define NAND_TIMING_tWHR    110 */
+#define NAND_TIMING_tR         11123
 #define NAND_TIMING_tWHR       100
 #define NAND_TIMING_tAR                10
 
 #define CONFIG_MTD_DEBUG
 #define CONFIG_MTD_DEBUG_VERBOSE 1
 
-#define ADDR_COLUMN 1
-#define ADDR_PAGE 2
-#define ADDR_COLUMN_PAGE 3
+#define ADDR_COLUMN            1
+#define ADDR_PAGE              2
+#define ADDR_COLUMN_PAGE       3
 
 #define NAND_ChipID_UNKNOWN    0x00
-#define NAND_MAX_FLOORS 1
-#define NAND_MAX_CHIPS 1
-
-#define CFG_NO_FLASH   1
-#ifndef CGF_NO_FLASH
-/* these are required by the environment code */
-#define PHYS_FLASH_1            CFG_NAND0_BASE /* Flash Bank #1 */
-#define PHYS_FLASH_SIZE         0x04000000 /* 64 MB */
-#define PHYS_FLASH_BANK_SIZE    0x04000000 /* 64 MB Banks */
-#define PHYS_FLASH_SECT_SIZE    (SECTORSIZE*1024) /*  KB sectors (x2) */
-#endif
-
-/*
- * GPIO settings
- */
-#define CFG_GPSR0_VAL          0x00008000
-#define CFG_GPSR1_VAL          0x00FC0382
-#define CFG_GPSR2_VAL          0x0001FFFF
-#define CFG_GPCR0_VAL          0x00000000
-#define CFG_GPCR1_VAL          0x00000000
-#define CFG_GPCR2_VAL          0x00000000
-#define CFG_GPDR0_VAL          0x0060A800
-#define CFG_GPDR1_VAL          0x00FF0382
-#define CFG_GPDR2_VAL          0x0001C000
-#define CFG_GAFR0_L_VAL                0x98400000
-#define CFG_GAFR0_U_VAL                0x00002950
-#define CFG_GAFR1_L_VAL                0x000A9558
-#define CFG_GAFR1_U_VAL                0x0005AAAA
-#define CFG_GAFR2_L_VAL                0xA0000000
-#define CFG_GAFR2_U_VAL                0x00000002
-
-#define CFG_PSSR_VAL           0x20
-
-/*
- * Memory settings
- */
-#define CFG_MSC0_VAL           0x23F223F2
-#define CFG_MSC1_VAL           0x3FF1A441
-#define CFG_MSC2_VAL           0x7FF97FF1
-#define CFG_MDCNFG_VAL         0x00001AC9
-#define CFG_MDREFR_VAL         0x00018018
-#define CFG_MDMRS_VAL          0x00000000
-
-/*
- * PCMCIA and CF Interfaces
- */
-#define CFG_MECR_VAL           0x00000000
-#define CFG_MCMEM0_VAL         0x00010504
-#define CFG_MCMEM1_VAL         0x00010504
-#define CFG_MCATT0_VAL         0x00010504
-#define CFG_MCATT1_VAL         0x00010504
-#define CFG_MCIO0_VAL          0x00004715
-#define CFG_MCIO1_VAL          0x00004715
-
-#define _LED                   0x08000010
-#define LED_BLANK              0x08000040
+#define NAND_MAX_FLOORS                1
+#define NAND_MAX_CHIPS         1
 
-/*
- * FLASH and environment organization
- */
-#ifndef CFG_NO_FLASH
-#define CFG_MAX_FLASH_BANKS    2       /* max number of memory banks           */
-#define CFG_MAX_FLASH_SECT     128  /* max number of sectors on one chip    */
-
-/* timeout values are in ticks */
-#define CFG_FLASH_ERASE_TOUT   (25*CFG_HZ) /* Timeout for Flash Erase */
-#define CFG_FLASH_WRITE_TOUT   (25*CFG_HZ) /* Timeout for Flash Write */
-
-
-/* NOTE: many default partitioning schemes assume the kernel starts at the
- * second sector, not an environment.  You have been warned!
- */
-#define        CFG_MONITOR_LEN         PHYS_FLASH_SECT_SIZE
-#endif /* #ifndef CFG_NO_FLASH */
+#define CFG_NO_FLASH           1
 
-/* #define CFG_ENV_IS_NOWHERE */
 #define CFG_ENV_IS_IN_NAND     1
 #define CFG_ENV_OFFSET         0x40000
+#define CFG_ENV_OFFSET_REDUND  0x44000
 #define CFG_ENV_SIZE           0x4000
 
 #endif /* __CONFIG_H */
diff --git a/include/da9030.h b/include/da9030.h
new file mode 100644 (file)
index 0000000..41108b9
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * (C) Copyright 2006 DENX Software Engineering
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* DA9030 register definitions */
+#define CID                    0x00
+#define EVENT_A                        0x01
+#define EVENT_B                        0x02
+#define EVENT_C                        0x03
+#define STATUS                 0x04
+#define IRQ_MASK_A             0x05
+#define IRQ_MASK_B             0x06
+#define IRQ_MASK_C             0x07
+#define SYS_CONTROL_A          0x08
+#define SYS_CONTROL_B          0x09
+#define FAULT_LOG              0x0A
+#define LDO_10_11              0x10
+#define LDO_15                 0x11
+#define LDO_14_16              0x12
+#define LDO_18_19              0x13
+#define LDO_17_SIMCP0          0x14
+#define BUCK2_DVC1             0x15
+#define BUCK2_DVC2             0x16
+#define REG_CONTROL_1_17       0x17
+#define REG_CONTROL_2_18       0x18
+#define USBPUMP                        0x19
+#define SLEEP_CONTROL          0x1A
+#define STARTUP_CONTROL                0x1B
+#define LED1_CONTROL           0x20
+#define LED2_CONTROL           0x21
+#define LED3_CONTROL           0x22
+#define LED4_CONTROL           0x23
+#define LEDPC_CONTROL          0x24
+#define WLED_CONTROL           0x25
+#define MISC_CONTROLA          0x26
+#define MISC_CONTROLB          0x27
+#define CHARGE_CONTROL         0x28
+#define CCTR_CONTROL           0x29
+#define TCTR_CONTROL           0x2A
+#define CHARGE_PULSE           0x2B
+
+/* ... some missing ...*/
+
+#define LDO1                   0x90
+#define LDO2_3                 0x91
+#define LDO4_5                 0x92
+#define LDO6_SIMCP             0x93
+#define LDO7_8                 0x94
+#define LDO9_12                        0x95
+#define BUCK                   0x96
+#define REG_CONTROL_1_97       0x97
+#define REG_CONTROL_2_98       0x98
+#define REG_SLEEP_CONTROL1     0x99
+#define REG_SLEEP_CONTROL2     0x9A
+#define REG_SLEEP_CONTROL3     0x9B
+#define ADC_MAN_CONTROL                0xA0
+#define ADC_AUTO_CONTROL       0xA1
+#define VBATMON                        0xA2
+#define VBATMONTXMON           0xA3
+#define TBATHIGHP              0xA4
+#define TBATHIGHN              0xA5
+#define TBATLOW                        0xA6
+#define MAN_RES                        0xB0
+#define VBAT_RES               0xB1
+#define VBATMIN_RES            0xB2
+#define VBATMINTXON_RES                0xB3
+#define ICHMAX_RES             0xB4
+#define ICHMIN_RES             0xB5
+#define ICHAVERAGE_RES         0xB6
+#define VCHMAX_RES             0xB7
+#define VCHMIN_RES             0xB8
+#define TBAT_RES               0xB9
+#define ADC_IN4_RES            0xBA
+
+#define STATUS_ONKEY_N         0x1     /* current ONKEY_N value */
+#define STATUS_PWREN1          (1<<1)  /* PWREN1 value */
+#define STATUS_EXTON           (1<<2)  /* EXTON value */
+#define STATUS_CHDET           (1<<3)  /* Charger detection status */
+#define STATUS_TBAT            (1<<4)  /* Battery over/under temperature status */
+#define STATUS_VBATMON         (1<<5)  /* VBATMON comparison status */
+#define STATUS_VBATMONTXON     (1<<6)  /* VBATMONTXON comparison status */
+#define STATUS_CHIOVER         (1<<7)  /* Charge overcurrent */
+
+#define SYS_CONTROL_A_SLEEP_N_PIN_ENABLE       0x1
+#define SYS_CONTROL_A_SHUT_DOWN                        (1<<1)
+#define SYS_CONTROL_A_HWRES_ENABLE             (1<<2)
+#define SYS_CONTROL_A_WDOG_ACTION              (1<<3)
+#define SYS_CONTROL_A_WATCHDOG                 (1<<7)
index bb10964..422f800 100644 (file)
 # endif
 #endif /* CFG_ENV_IS_IN_FLASH */
 
+#if defined(CFG_ENV_IS_IN_NAND)
+# ifndef CFG_ENV_OFFSET
+#  error "Need to define CFG_ENV_OFFSET when using CFG_ENV_IS_IN_NAND"
+# endif
+# ifndef CFG_ENV_SIZE
+#  error "Need to define CFG_ENV_SIZE when using CFG_ENV_IS_IN_NAND"
+# endif
+# ifdef CFG_ENV_OFFSET_REDUND
+#  define CFG_REDUNDAND_ENVIRONMENT
+# endif
+#endif /* CFG_ENV_IS_IN_NAND */
+
 
 #ifdef CFG_REDUNDAND_ENVIRONMENT
 # define ENV_HEADER_SIZE       (sizeof(unsigned long) + 1)