[U-Boot] PATCH: Add support for Toradex Colibri PX270 Modules

Peter Katzmann p.katzmann at thiesen.com
Fri Sep 26 12:39:49 CEST 2008


Hello,
i took the already submitted patches from Daniel Mack, fixed some minor 
problems and patched it against the 1.3.4 tree.
The patch compiles clean and all my boards boots well.
If there  are any objections leave me a note

peter


diff -purN u-boot-1.3.4/board/colibri/colibri.c 
u-boot-1.3.4-col/board/colibri/colibri.c
--- u-boot-1.3.4/board/colibri/colibri.c    1970-01-01 
01:00:00.000000000 +0100
+++ u-boot-1.3.4-col/board/colibri/colibri.c    2008-09-23 
15:13:35.000000000 +0200
@@ -0,0 +1,61 @@
+/*
+ * (C) Copyright 2007
+ * Daniel Mack, caiaq <daniel at caiaq.de>
+ *
+ * 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
+ */
+
+#include <common.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* 
------------------------------------------------------------------------- */
+
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+int board_init (void)
+{
+    /* memory and cpu-speed are setup before relocation */
+    /* so we do _nothing_ here */
+
+    /* arch number of COLIRBI-Board */
+    gd->bd->bi_arch_number = MACH_TYPE_COLIBRI;
+
+    /* adress of boot parameters */
+    gd->bd->bi_boot_params = 0xa0000100;
+
+    return 0;
+}
+
+int board_late_init(void)
+{
+    setenv("stdout", "serial");
+    setenv("stderr", "serial");
+    return 0;
+}
+
+
+int dram_init (void)
+{
+    gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+    gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+    return 0;
+}
diff -purN u-boot-1.3.4/board/colibri/config.mk 
u-boot-1.3.4-col/board/colibri/config.mk
--- u-boot-1.3.4/board/colibri/config.mk    1970-01-01 
01:00:00.000000000 +0100
+++ u-boot-1.3.4-col/board/colibri/config.mk    2008-09-23 
15:13:35.000000000 +0200
@@ -0,0 +1 @@
+TEXT_BASE = 0xa1700000
diff -purN u-boot-1.3.4/board/colibri/lowlevel_init.S 
u-boot-1.3.4-col/board/colibri/lowlevel_init.S
--- u-boot-1.3.4/board/colibri/lowlevel_init.S    1970-01-01 
01:00:00.000000000 +0100
+++ u-boot-1.3.4-col/board/colibri/lowlevel_init.S    2008-09-23 
15:13:35.000000000 +0200
@@ -0,0 +1,465 @@
+/*
+* This was originally from the Lubbock u-boot port.
+*
+* 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.
+*
+* 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
+*/
+
+#include <config.h>
+#include <version.h>
+#include <asm/arch/pxa-regs.h>
+
+/* wait for coprocessor write complete */
+.macro CPWAIT reg
+mrc    p15,0,\reg,c2,c0,0
+mov    \reg,\reg
+sub    pc,pc,#4
+.endm
+
+
+/*
+*    Memory setup
+*/
+
+.globl lowlevel_init
+lowlevel_init:
+
+    /* Set up GPIO pins first ----------------------------------------- */
+
+    ldr        r0,    =GPSR0
+    ldr        r1,    =CFG_GPSR0_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPSR1
+    ldr        r1,    =CFG_GPSR1_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPSR2
+    ldr        r1,    =CFG_GPSR2_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPSR3
+    ldr        r1,    =CFG_GPSR3_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPCR0
+    ldr        r1,    =CFG_GPCR0_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPCR1
+    ldr        r1,    =CFG_GPCR1_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPCR2
+    ldr        r1,    =CFG_GPCR2_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPCR3
+    ldr        r1,    =CFG_GPCR3_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPDR0
+    ldr        r1,    =CFG_GPDR0_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPDR1
+    ldr        r1,    =CFG_GPDR1_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPDR2
+    ldr        r1,    =CFG_GPDR2_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GPDR3
+    ldr        r1,    =CFG_GPDR3_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR0_L
+    ldr        r1,    =CFG_GAFR0_L_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR0_U
+    ldr        r1,    =CFG_GAFR0_U_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR1_L
+    ldr        r1,    =CFG_GAFR1_L_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR1_U
+    ldr        r1,    =CFG_GAFR1_U_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR2_L
+    ldr        r1,    =CFG_GAFR2_L_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR2_U
+    ldr        r1,    =CFG_GAFR2_U_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR3_L
+    ldr        r1,    =CFG_GAFR3_L_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =GAFR3_U
+    ldr        r1,    =CFG_GAFR3_U_VAL
+    str        r1,   [r0]
+
+    ldr        r0,    =PSSR        /* enable GPIO pins */
+    ldr        r1,    =CFG_PSSR_VAL
+    str        r1,   [r0]
+
+    /* ---------------------------------------------------------------- */
+    /* Enable memory interface                        */
+    /*                                    */
+    /* The sequence below is based on the recommended init steps        */
+    /* detailed in the Intel PXA250 Operating Systems Developers Guide, */
+    /* Chapter 10.                                */
+    /* ---------------------------------------------------------------- */
+
+    /* ---------------------------------------------------------------- */
+    /* Step 1: Wait for at least 200 microsedonds to allow internal 
     */
+    /*       clocks to settle. Only necessary after hard reset...        */
+    /*       FIXME: can be optimized later                */
+    /* ---------------------------------------------------------------- */
+
+    ldr r3, =OSCR            /* reset the OS Timer Count to zero */
+    mov r2, #0
+    str r2, [r3]
+    ldr r4, =0x300            /* really 0x2E1 is about 200usec,   */
+                    /* so 0x300 should be plenty        */
+1:
+    ldr r2, [r3]
+    cmp r4, r2
+    bgt 1b
+
+mem_init:
+
+    ldr    r1,  =MEMC_BASE        /* get memory controller base addr. */
+
+    /* ---------------------------------------------------------------- */
+    /* Step 2a: Initialize Asynchronous static memory controller        */
+    /* ---------------------------------------------------------------- */
+
+    /* MSC registers: timing, bus width, mem type                */
+
+    /* MSC0: nCS(0,1)                            */
+    ldr    r2,   =CFG_MSC0_VAL
+    str    r2,   [r1, #MSC0_OFFSET]
+    ldr    r2,   [r1, #MSC0_OFFSET]    /* read back to ensure        */
+                        /* that data latches        */
+    /* MSC1: nCS(2,3)                            */
+    ldr    r2,  =CFG_MSC1_VAL
+    str    r2,  [r1, #MSC1_OFFSET]
+    ldr    r2,  [r1, #MSC1_OFFSET]
+
+    /* MSC2: nCS(4,5)                            */
+    ldr    r2,  =CFG_MSC2_VAL
+    str    r2,  [r1, #MSC2_OFFSET]
+    ldr    r2,  [r1, #MSC2_OFFSET]
+
+    /* ---------------------------------------------------------------- */
+    /* Step 2b: Initialize Card Interface                    */
+    /* ---------------------------------------------------------------- */
+
+    /* MECR: Memory Expansion Card Register                    */
+    ldr    r2,  =CFG_MECR_VAL
+    str    r2,  [r1, #MECR_OFFSET]
+    ldr    r2,    [r1, #MECR_OFFSET]
+
+    /* MCMEM0: Card Interface slot 0 timing                    */
+    ldr    r2,  =CFG_MCMEM0_VAL
+    str    r2,  [r1, #MCMEM0_OFFSET]
+    ldr    r2,    [r1, #MCMEM0_OFFSET]
+
+    /* MCMEM1: Card Interface slot 1 timing                    */
+    ldr    r2,  =CFG_MCMEM1_VAL
+    str    r2,  [r1, #MCMEM1_OFFSET]
+    ldr    r2,    [r1, #MCMEM1_OFFSET]
+
+    /* MCATT0: Card Interface Attribute Space Timing, slot 0        */
+    ldr    r2,  =CFG_MCATT0_VAL
+    str    r2,  [r1, #MCATT0_OFFSET]
+    ldr    r2,    [r1, #MCATT0_OFFSET]
+
+    /* MCATT1: Card Interface Attribute Space Timing, slot 1        */
+    ldr    r2,  =CFG_MCATT1_VAL
+    str    r2,  [r1, #MCATT1_OFFSET]
+    ldr    r2,    [r1, #MCATT1_OFFSET]
+
+    /* MCIO0: Card Interface I/O Space Timing, slot 0            */
+    ldr    r2,  =CFG_MCIO0_VAL
+    str    r2,  [r1, #MCIO0_OFFSET]
+    ldr    r2,    [r1, #MCIO0_OFFSET]
+
+    /* MCIO1: Card Interface I/O Space Timing, slot 1            */
+    ldr    r2,  =CFG_MCIO1_VAL
+    str    r2,  [r1, #MCIO1_OFFSET]
+    ldr    r2,    [r1, #MCIO1_OFFSET]
+
+    /* ---------------------------------------------------------------- */
+    /* Step 2c: Write FLYCNFG  FIXME: what's that???            */
+    /* ---------------------------------------------------------------- */
+    /*ldr    r2,  =CFG_FLYCNFG_VAL
+    str    r2,  [r1, #FLYCNFG_OFFSET]
+    str    r2,    [r1, #FLYCNFG_OFFSET]*/
+
+    /* ---------------------------------------------------------------- */
+    /* Step 2d: Initialize Timing for Sync Memory (SDCLK0)            */
+    /* ---------------------------------------------------------------- */
+
+    /* Before accessing MDREFR we need a valid DRI field, so we set 
     */
+    /* this to power on defaults + DRI field.                */
+
+    ldr    r4,    [r1, #MDREFR_OFFSET]
+    ldr    r2,    =0xFFF
+    bic    r4,    r4, r2
+
+    ldr    r3,    =CFG_MDREFR_VAL
+    and    r3,    r3,  r2
+
+    orr    r4,    r4, r3
+    str    r4,    [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+
+    orr    r4,  r4, #MDREFR_K0RUN
+    orr    r4,  r4, #MDREFR_K0DB4
+    orr    r4,  r4, #MDREFR_K0FREE
+    orr    r4,  r4, #MDREFR_K0DB2
+    orr    r4,  r4, #MDREFR_K1DB2
+    bic    r4,  r4, #MDREFR_K1FREE
+    bic    r4,  r4, #MDREFR_K2FREE
+
+    str    r4,    [r1, #MDREFR_OFFSET]    /* write back MDREFR        */
+    ldr    r4,  [r1, #MDREFR_OFFSET]
+
+    /* Note: preserve the mdrefr value in r4                */
+
+
+    /* ---------------------------------------------------------------- */
+    /* Step 3: Initialize Synchronous Static Memory (Flash/Peripherals) */
+    /* ---------------------------------------------------------------- */
+
+    /* Initialize SXCNFG register. Assert the enable bits            */
+
+    /* Write SXMRS to cause an MRS command to all enabled banks of 
    */
+    /* synchronous static memory. Note that SXLCR need not be written   */
+    /* at this time.                            */
+
+/*    ldr    r2,  =CFG_SXCNFG_VAL
+    str    r2,  [r1, #SXCNFG_OFFSET] */
+
+    /* ---------------------------------------------------------------- */
+    /* Step 4: Initialize SDRAM                        */
+    /* ---------------------------------------------------------------- */
+
+    bic    r4, r4, #(MDREFR_K2FREE |MDREFR_K1FREE | MDREFR_K0FREE)
+
+    orr    r4, r4, #MDREFR_K1RUN
+    bic    r4, r4, #MDREFR_K2DB2
+    str    r4, [r1, #MDREFR_OFFSET]
+    ldr    r4, [r1, #MDREFR_OFFSET]
+
+    bic    r4, r4, #MDREFR_SLFRSH
+    str    r4, [r1, #MDREFR_OFFSET]
+    ldr    r4, [r1, #MDREFR_OFFSET]
+
+    orr    r4, r4, #MDREFR_E1PIN
+    str    r4, [r1, #MDREFR_OFFSET]
+    ldr    r4, [r1, #MDREFR_OFFSET]
+
+    nop
+    nop
+
+    /* Step 4d: write MDCNFG with MDCNFG:DEx deasserted (set to 0), to  */
+    /*        configure but not enable each SDRAM partition pair.        */
+
+    ldr    r4,    =CFG_MDCNFG_VAL
+    bic    r4,    r4,    #(MDCNFG_DE0|MDCNFG_DE1)
+    bic    r4,    r4,    #(MDCNFG_DE2|MDCNFG_DE3)
+
+    str    r4,    [r1, #MDCNFG_OFFSET]    /* write back MDCNFG        */
+    ldr    r4,    [r1, #MDCNFG_OFFSET]
+
+
+    /* Step 4e: Wait for the clock to the SDRAMs to stabilize,        */
+    /*        100..200 µsec.                        */
+
+    ldr r3, =OSCR            /* reset the OS Timer Count to zero */
+    mov r2, #0
+    str r2, [r3]
+    ldr r4, =0x300            /* really 0x2E1 is about 200usec,   */
+                    /* so 0x300 should be plenty        */
+1:
+        ldr r2, [r3]
+        cmp r4, r2
+        bgt 1b
+
+
+    /* Step 4f: Trigger a number (usually 8) refresh cycles by        */
+    /*        attempting non-burst read or write accesses to disabled */
+    /*        SDRAM, as commonly specified in the power up sequence   */
+    /*        documented in SDRAM data sheets. The address(es) used   */
+    /*        for this purpose must not be cacheable.            */
+
+    ldr    r3,    =CFG_DRAM_BASE
+    str    r2,    [r3]
+    str    r2,    [r3]
+    str    r2,    [r3]
+    str    r2,    [r3]
+    str    r2,    [r3]
+    str    r2,    [r3]
+    str    r2,    [r3]
+    str    r2,    [r3]
+
+
+    /* Step 4g: Write MDCNFG with enable bits asserted            */
+    /*        (MDCNFG:DEx set to 1).                    */
+
+    ldr    r3,    [r1, #MDCNFG_OFFSET]
+    mov    r4, r3
+    orr    r3,    r3,    #MDCNFG_DE0
+    str    r3,    [r1, #MDCNFG_OFFSET]
+    mov    r0, r3
+
+    /* Step 4h: Write MDMRS.                        */
+
+    ldr    r2,  =CFG_MDMRS_VAL
+    str    r2,  [r1, #MDMRS_OFFSET]
+
+    /* enable APD */
+    ldr    r3,  [r1, #MDREFR_OFFSET]
+    orr    r3,  r3,  #MDREFR_APD
+    str    r3,  [r1, #MDREFR_OFFSET]
+
+    /* We are finished with Intel's memory controller initialisation    */
+
+ at setvoltage:
+@
+@    mov    r10,    lr
+@    bl    initPXAvoltage    /* In case the board is rebooting with a    */
+@    mov    lr,    r10    /* low voltage raise it up to a good one.   */
+
+wakeup:
+    /* Are we waking from sleep? */
+    ldr    r0,    =RCSR
+    ldr    r1,    [r0]
+    and    r1,    r1, #(RCSR_GPR | RCSR_SMR | RCSR_WDR | RCSR_HWR)
+    str    r1,    [r0]
+    teq    r1,    #RCSR_SMR
+
+    bne    initirqs
+
+    ldr    r0,    =PSSR
+    mov    r1,    #PSSR_PH
+    str    r1,    [r0]
+
+    /* if so, resume at PSPR */
+    ldr    r0,    =PSPR
+    ldr    r1,    [r0]
+    mov    pc,    r1
+
+    /* ---------------------------------------------------------------- */
+    /* Disable (mask) all interrupts at interrupt controller        */
+    /* ---------------------------------------------------------------- */
+
+initirqs:
+
+    mov    r1,  #0        /* clear int. level register (IRQ, not FIQ) */
+    ldr    r2,  =ICLR
+    str    r1,  [r2]
+
+    ldr    r2,  =ICMR    /* mask all interrupts at the controller    */
+    str    r1,  [r2]
+
+    /* ---------------------------------------------------------------- */
+    /* Clock initialisation                            */
+    /* ---------------------------------------------------------------- */
+
+initclks:
+
+    /* Disable the peripheral clocks, and set the core clock frequency  */
+
+    /* Turn Off on-chip peripheral clocks (except for memory)        */
+    /* for re-configuration.                        */
+    ldr    r1,  =CKEN
+    ldr    r2,  =CFG_CKEN
+    str    r2,  [r1]
+
+    /* ... and write the core clock config register                */
+    ldr    r2,  =CFG_CCCR
+    ldr    r1,  =CCCR
+    str    r2,  [r1]
+
+    /* Turn on turbo mode */
+    mrc    p14, 0, r2, c6, c0, 0
+    orr    r2, r2, #0xB        /* Turbo, Fast-Bus, Freq change**/
+    mcr    p14, 0, r2, c6, c0, 0
+
+    /* Re-write MDREFR */
+    ldr    r1, =MEMC_BASE
+    ldr    r2, [r1, #MDREFR_OFFSET]
+    str    r2, [r1, #MDREFR_OFFSET]
+#ifdef RTC
+    /* enable the 32Khz oscillator for RTC and PowerManager            */
+    ldr    r1,  =OSCC
+    mov    r2,  #OSCC_OON
+    str    r2,  [r1]
+
+    /* NOTE:  spin here until OSCC.OOK get set, meaning the PLL        */
+    /* has settled.                                */
+60:
+    /*ldr    r2, [r1]
+    ands    r2, r2, #1
+    beq    60b*/
+#else
+#error "RTC not defined"
+#endif
+
+    /* Interrupt init: Mask all interrupts                    */
+ldr r0, =ICMR /* enable no sources */
+    mov r1, #0
+str r1, [r0]
+    /* FIXME */
+
+#ifdef NODEBUG
+    /*Disable software and data breakpoints */
+    mov    r0,#0
+    mcr    p15,0,r0,c14,c8,0  /* ibcr0 */
+    mcr    p15,0,r0,c14,c9,0  /* ibcr1 */
+    mcr    p15,0,r0,c14,c4,0  /* dbcon */
+
+    /*Enable all debug functionality */
+    mov    r0,#0x80000000
+    mcr    p14,0,r0,c10,c0,0  /* dcsr */
+#endif
+
+    /* ---------------------------------------------------------------- */
+    /* End lowlevel_init                            */
+    /* ---------------------------------------------------------------- */
+
+endlowlevel_init:
+
+    mov    pc, lr
diff -purN u-boot-1.3.4/board/colibri/Makefile 
u-boot-1.3.4-col/board/colibri/Makefile
--- u-boot-1.3.4/board/colibri/Makefile    1970-01-01 01:00:00.000000000 
+0100
+++ u-boot-1.3.4-col/board/colibri/Makefile    2008-09-23 
15:13:35.000000000 +0200
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+#
+# 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
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS    := colibri.o
+SOBJS    := lowlevel_init.o
+
+SRCS    := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS    := $(addprefix $(obj),$(COBJS))
+SOBJS    := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):    $(obj).depend $(OBJS) $(SOBJS)
+    $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+    rm -f $(SOBJS) $(OBJS)
+
+distclean:    clean
+    rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff -purN u-boot-1.3.4/board/colibri/u-boot.lds 
u-boot-1.3.4-col/board/colibri/u-boot.lds
--- u-boot-1.3.4/board/colibri/u-boot.lds    1970-01-01 
01:00:00.000000000 +0100
+++ u-boot-1.3.4-col/board/colibri/u-boot.lds    2008-09-23 
15:13:35.000000000 +0200
@@ -0,0 +1,56 @@
+/*
+* (C) Copyright 2000
+* Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+*
+* 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
+*/
+
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+    . = 0x00000000;
+
+    . = ALIGN(4);
+    .text      :
+    {
+      cpu/pxa/start.o    (.text)
+      *(.text)
+    }
+
+    . = ALIGN(4);
+    .rodata : { *(.rodata) }
+
+    . = ALIGN(4);
+    .data : { *(.data) }
+
+    . = ALIGN(4);
+    .got : { *(.got) }
+
+    . = .;
+    __u_boot_cmd_start = .;
+    .u_boot_cmd : { *(.u_boot_cmd) }
+    __u_boot_cmd_end = .;
+
+    . = ALIGN(4);
+    __bss_start = .;
+    .bss : { *(.bss) }
+    _end = .;
+}
diff -purN u-boot-1.3.4/include/asm-arm/mach-types.h 
u-boot-1.3.4-col/include/asm-arm/mach-types.h
--- u-boot-1.3.4/include/asm-arm/mach-types.h    2008-08-12 
16:08:38.000000000 +0200
+++ u-boot-1.3.4-col/include/asm-arm/mach-types.h    2008-09-23 
15:13:35.000000000 +0200
@@ -11689,6 +11689,18 @@ extern unsigned int __machine_arch_type;
  # define machine_is_ax8004()    (0)
  #endif

+#ifdef CONFIG_MACH_COLIBRI
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type     __machine_arch_type
+# else
+#  define machine_arch_type     MACH_TYPE_COLIBRI
+# endif
+# define machine_is_colibri()    (machine_arch_type == MACH_TYPE_COLIBRI)
+#else
+# define machine_is_colibri()    (0)
+#endif
+
  #ifdef CONFIG_MACH_AT91SAM9261EK
  # ifdef machine_arch_type
  #  undef machine_arch_type
diff -purN u-boot-1.3.4/include/configs/colibri.h 
u-boot-1.3.4-col/include/configs/colibri.h
--- u-boot-1.3.4/include/configs/colibri.h    1970-01-01 
01:00:00.000000000 +0100
+++ u-boot-1.3.4-col/include/configs/colibri.h    2008-09-23 
15:13:35.000000000 +0200
@@ -0,0 +1,276 @@
+/*
+ * (c) Copyright 2007
+ * Daniel Mack, caiaq <daniel at caiaq.de>
+ *
+ * Configuation settings for the Colibri board.
+ *
+ * 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
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+/* #define DEBUG            15 */
+#define CONFIG_PXA27X        1    /* This is an PXA27x CPU    */
+#define CONFIG_COLIBRI        1    /* on a Colibri Board     */
+/* #define CONFIG_MMC        1    */
+#define BOARD_LATE_INIT        1
+
+#undef CONFIG_USE_IRQ            /* we don't need IRQ/FIQ stuff */
+
+#define RTC
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN        (CFG_ENV_SECT_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE    128    /* size in bytes reserved for 
initial data */
+
+/*
+ * Hardware drivers
+ */
+
+/*
+ * select serial console configuration
+ */
+#define CONFIG_FFUART           1       /* we use FFUART */
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_BAUDRATE           9600
+
+/* #define CONFIG_DOS_PARTITION   1 */
+
+#undef CONFIG_SHOW_BOOT_PROGRESS
+
+#define CONFIG_BOOTDELAY    -1
+#define CONFIG_ETHADDR        00:00:00:00:00:00
+#define CONFIG_NETMASK          255.255.255.0
+#define CONFIG_IPADDR           192.168.1.99
+#define CONFIG_SERVERIP        192.168.1.1
+#define CONFIG_BOOTCOMMAND    "bootm 80000 || dhcp && bootm"
+#define CONFIG_BOOTARGS        "console=ttyS0,9600n8 "\
+                " rw root=/dev/nfs ip=:::::eth0:"
+
+#define CONFIG_EXTRA_ENV_SETTINGS ""
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_DFL
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_SDRAM
+/* #define CONFIG_COMMANDS              (CONFIG_CMD_DFL | CFG_CMD_DIAG 
| CFG_CMD_DHCP | CFG_CMD_SDRAM | CFG_CMD_KGDB) */
+/*#define CONFIG_COMMANDS               (CONFIG_CMD_DFL | CFG_CMD_DIAG 
| CFG_CMD_SDRAM)*/
+
+
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_CMDLINE_TAG     1    /* enable passing of ATAGs    */
+/* #define CONFIG_INITRD_TAG     1 */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE    230400        /* speed to run kgdb 
serial port */
+#define CONFIG_KGDB_SER_INDEX    2        /* which serial port to use */
+#endif
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_HUSH_PARSER        1
+#define CFG_PROMPT_HUSH_PS2    "> "
+
+#define CFG_LONGHELP                /* undef to save memory        */
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT        "$ "        /* Monitor Command Prompt */
+#else
+#define CFG_PROMPT        "=> "        /* Monitor Command Prompt */
+#endif
+#define CFG_CBSIZE        256        /* Console I/O Buffer Size    */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer 
Size */
+#define CFG_MAXARGS        16        /* max number of command args    */
+#define CFG_BARGSIZE        CFG_CBSIZE    /* Boot Argument Buffer Size 
    */
+#define CFG_DEVICE_NULLDEV    1
+
+#define CFG_MEMTEST_START    0xa0400000    /* memtest works on    */
+#define CFG_MEMTEST_END        0xa0800000    /* 4 ... 8 MB in DRAM    */
+
+#undef    CFG_CLKS_IN_HZ        /* everything, incl board info, in Hz */
+
+#define CFG_LOAD_ADDR        0xa1000000    /* default load address */
+
+#define CFG_HZ            3686400        /* incrementer freq: 3.6864 MHz */
+#define CFG_CPUSPEED        0x190
+
+                        /* valid baudrates */
+#define CFG_BAUDRATE_TABLE    { 9600, 19200, 38400, 57600, 115200 }
+
+#define CFG_MMC_BASE        0xF0000000
+
+/*
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE    (128*1024)    /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ    (4*1024)    /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ    (4*1024)    /* FIQ stack */
+#endif
+
+/*
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS    1       /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1        0xa0000000 /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE    0x04000000 /* 64 MB */
+#define PHYS_SDRAM_2        0xa4000000 /* SDRAM Bank #2 */
+#define PHYS_SDRAM_2_SIZE    0x00000000 /* 0 MB */
+#define PHYS_SDRAM_3        0xa8000000 /* SDRAM Bank #3 */
+#define PHYS_SDRAM_3_SIZE    0x00000000 /* 0 MB */
+#define PHYS_SDRAM_4        0xac000000 /* SDRAM Bank #4 */
+#define PHYS_SDRAM_4_SIZE    0x00000000 /* 0 MB */
+
+#define PHYS_FLASH_1        0x00000000 /* Flash Bank #1 */
+#define PHYS_FLASH_SIZE         0x02000000 /* 32 MB */
+#define PHYS_FLASH_BANK_SIZE    0x02000000 /* 32 MB Bank */
+#define PHYS_FLASH_SECT_SIZE    0x00040000 /* 256 KB sectors (x2) */
+
+#define CFG_DRAM_BASE        0xa0000000
+#define CFG_DRAM_SIZE        0x04000000
+
+#define CFG_FLASH_BASE        PHYS_FLASH_1
+
+/*
+ * DM9000 ethernet chip
+ */
+
+#define CONFIG_DRIVER_DM9000            1
+#define CONFIG_DM9000_BASE              0x08000000 /* CS2         */
+#define DM9000_IO                       (CONFIG_DM9000_BASE)
+#define DM9000_DATA                     (CONFIG_DM9000_BASE+4)
+/* #define CONFIG_DM9000_USE_8BIT  */
+/* #define CONFIG_DM9000_USE_16BIT */
+#define CONFIG_DM9000_USE_32BIT        1
+
+#define CFG_GPSR3_VAL   0x00000000
+#define CFG_GPSR2_VAL   0x0000c000      /*GPIO78, GPIO79 set --> 
78-nCS<2>, 79-nEXT_CS[1]*/
+#define CFG_GPSR1_VAL   0x00020000      /*GPIO49 set --> 49-nPWE-Ethernet*/
+#define CFG_GPSR0_VAL   0x00000000
+
+#define CFG_GPCR3_VAL   0x0
+#define CFG_GPCR2_VAL   0x0
+#define CFG_GPCR1_VAL   0x0
+#define CFG_GPCR0_VAL   0x0
+
+#define CFG_GPDR3_VAL   0x00000000
+#define CFG_GPDR2_VAL   0x0000c000      /*GPIO78, GPIO79 output*/
+#define CFG_GPDR1_VAL   0x00020180      /*GPIO39, GPIO40, GPIO49 output 
-->39-FF_TXD, 40-FF_DTR*/
+#define CFG_GPDR0_VAL   0x08000000      /*GPIO27 output --> 27-FF_RTS*/
+
+#define CFG_GAFR3_U_VAL 0x00000000
+#define CFG_GAFR3_L_VAL 0x00000200
+#define CFG_GAFR2_U_VAL 0x00000000
+#define CFG_GAFR2_L_VAL 0xa0000000      /*GPIO78_AF2, GPIO79_AF2 --> 
78-nCS<2>, 79-nCS<3>*/
+#define CFG_GAFR1_U_VAL 0x00000008      /*GPIO49_AF2 --> 49- nPWE*/
+#define CFG_GAFR1_L_VAL 0x00029018      /*GPIO33_AF2, 
GPIO34_AF1,GPIO38_AF1, GPIO39_AF2, GPIO40_AF2 --> 33-FF_DSR, 34-FF_RXD, 
38-FF_RI, 39-FF_TXD,  40-FF_DTR*/
+#define CFG_GAFR0_U_VAL 0x00c00010      /*GPIO18_AF1, GPIO27_AF3 --> 
18-RDY, 27-FF_RTS*/
+#define CFG_GAFR0_L_VAL 0x00100000      /*GPIO10_AF1 --> FFDCD*/
+
+#define CFG_PSSR_VAL        0x30
+
+/*
+ * Clock settings
+ */
+#define CFG_CKEN        0x00400240
+/* #define CFG_CCCR        0x02000290 */ /* 520Mhz */
+/* #define CFG_CCCR        0x02000210 */ /* 416 Mhz */
+#define CFG_CCCR        0x00000190 /* 312 MHz */
+
+/*
+ * Memory settings
+ */
+
+#define CFG_MSC0_VAL            0x9ee1c5f2
+#define CFG_MSC1_VAL            0x9ee1f974
+#define CFG_MSC2_VAL            0x9ee19ee1
+#define CFG_MDCNFG_VAL          0x090009c9
+#define CFG_MDREFR_VAL          0x00000031
+#define CFG_MDMRS_VAL           0x00000000
+
+#define CFG_FLYCNFG_VAL         0x00010001
+#define CFG_SXCNFG_VAL          0x40044004
+
+/*
+ * PCMCIA and CF Interfaces
+ */
+#define CFG_MECR_VAL        0x00000002
+#define CFG_MCMEM0_VAL        0x00004204
+#define CFG_MCMEM1_VAL        0x00000000
+#define CFG_MCATT0_VAL        0x00010504
+#define CFG_MCATT1_VAL        0x00000000
+#define CFG_MCIO0_VAL        0x00008407
+#define CFG_MCIO1_VAL        0x00000000
+
+/*
+#undef CONFIG_PXA_PCMCIA
+#undef CONFIG_PXA_IDE
+*/
+
+/*#define CONFIG_PCMCIA_SLOT_A 1 */
+/* just to keep build system happy  */
+
+/*
+ * FLASH and environment organization
+ */
+
+#define CFG_FLASH_CFI        1
+#define CFG_FLASH_CFI_DRIVER    1
+#define CFG_FLASH_CFI_WIDTH     FLASH_CFI_32BIT
+#define CFG_FLASH_USE_BUFFER_WRITE      1
+#define CFG_FLASH_PROTECTION    1
+
+
+#define CFG_MONITOR_BASE    CFG_FLASH_BASE
+/*#define CFG_MONITOR_LEN        0x20000
+*/
+#define CFG_MAX_FLASH_BANKS    1    /* 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 */
+
+
+/* Flash environment locations */
+#define CFG_ENV_IS_IN_FLASH 1
+#define CFG_FIX_PARAM_SIZE 256
+#define CFG_ENV_ADDR        (PHYS_FLASH_1 + PHYS_FLASH_SECT_SIZE)/* 
Addr of Environment Sector   */
+#define CFG_ENV_SIZE        (PHYS_FLASH_SECT_SIZE - CFG_FIX_PARAM_SIZE) 
/* Total Size of Environment */
+#define CFG_ENV_SECT_SIZE    PHYS_FLASH_SECT_SIZE    /* Total Size of 
Environment Sector     */
+
+#endif    /* __CONFIG_H */
diff -purN u-boot-1.3.4/MAKEALL u-boot-1.3.4-col/MAKEALL
--- u-boot-1.3.4/MAKEALL    2008-08-12 16:08:38.000000000 +0200
+++ u-boot-1.3.4-col/MAKEALL    2008-09-23 15:13:35.000000000 +0200
@@ -541,6 +541,7 @@ LIST_at91="        \

  LIST_pxa="        \
      cerf250        \
+    colibri        \
      cradle        \
      csb226        \
      delta        \
diff -purN u-boot-1.3.4/Makefile u-boot-1.3.4-col/Makefile
--- u-boot-1.3.4/Makefile    2008-08-12 16:08:38.000000000 +0200
+++ u-boot-1.3.4-col/Makefile    2008-09-23 15:13:35.000000000 +0200
@@ -2597,6 +2597,9 @@ actux4_config    :    unconfig
  cerf250_config :    unconfig
      @$(MKCONFIG) $(@:_config=) arm pxa cerf250

+colibri_config    :    unconfig
+    @$(MKCONFIG) $(@:_config=) arm pxa colibri
+
  cradle_config    :    unconfig
      @$(MKCONFIG) $(@:_config=) arm pxa cradle



More information about the U-Boot mailing list