Hi all, This is a first patch to introduce the support of the Mini2440. It's a board based on the S3C2440, arm920t. I based the support on the code of BusError (old version of u-boot).
I have a few work to do again, like some clean up in the configuration file. Currently, with this patch, we can boot from NOR and the network is available (tftp, dhcp, ...). Boot from NAND will be the next step (and laters MMC). Best regards,
>From 5f373acac7447aaf3072f0d1ba88d364a8b2ebfe Mon Sep 17 00:00:00 2001 From: Gabriel Huau <cont...@huau-gabriel.fr> Date: Sun, 15 Apr 2012 00:10:22 +0200 Subject: [PATCH] Add support for MINI2440 (s3c2440). Documentation about the product can be found on: http://www.friendlyarm.net/products/mini2440 --- arch/arm/cpu/arm920t/cpu.c | 34 +++ arch/arm/cpu/arm920t/start.S | 4 + arch/arm/include/asm/arch-s3c24x0/s3c24x0.h | 51 +---- board/friendlyarm/mini2440/Makefile | 45 ++++ board/friendlyarm/mini2440/lowlevel_init.S | 197 ++++++++++++++++ board/friendlyarm/mini2440/mini2440.c | 279 +++++++++++++++++++++++ boards.cfg | 1 + drivers/i2c/s3c24x0_i2c.c | 11 +- drivers/mtd/nand/s3c2410_nand.c | 82 +++++++ include/configs/mini2440.h | 323 +++++++++++++++++++++++++++ 10 files changed, 973 insertions(+), 54 deletions(-) create mode 100644 board/friendlyarm/mini2440/Makefile create mode 100644 board/friendlyarm/mini2440/lowlevel_init.S create mode 100644 board/friendlyarm/mini2440/mini2440.c create mode 100644 include/configs/mini2440.h diff --git a/arch/arm/cpu/arm920t/cpu.c b/arch/arm/cpu/arm920t/cpu.c index 34adb11..baf3d01 100644 --- a/arch/arm/cpu/arm920t/cpu.c +++ b/arch/arm/cpu/arm920t/cpu.c @@ -32,9 +32,43 @@ #include <common.h> #include <command.h> #include <asm/system.h> +#include <asm/arch/s3c2440.h> + +/* FCLK = 405 MHz, HCLK = 101 MHz, PCLK = 50 MHz, UCLK = 48 MHz */ +#define CLKDIVN_VAL 7 +#define M_MDIV 0x7f +#define M_PDIV 0x2 +#define M_SDIV 0x1 + +#define U_M_MDIV 0x38 +#define U_M_PDIV 0x2 +#define U_M_SDIV 0x2 static void cache_flush(void); +int arch_cpu_init (void) +{ + struct s3c24x0_clock_power * const clk_power = s3c24x0_get_base_clock_power(); + int i; + + /* to reduce PLL lock time, adjust the LOCKTIME register */ + clk_power->locktime = 0xFFFFFF; + clk_power->clkdivn = CLKDIVN_VAL; + + /* configure UPLL */ + clk_power->upllcon = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV); + /* some delay between MPLL and UPLL */ + for(i = 0; i < 100000; i++); + + /* configure MPLL */ + clk_power->mpllcon = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV); + + /* some delay between MPLL and UPLL */ + for(i = 0; i < 500000; i++); + + return 0; +} + int cleanup_before_linux (void) { /* diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S index 8c5612c..1d75fb5 100644 --- a/arch/arm/cpu/arm920t/start.S +++ b/arch/arm/cpu/arm920t/start.S @@ -165,6 +165,10 @@ copyex: ldr r1, =0x3ff ldr r0, =INTSUBMSK str r1, [r0] +# else + ldr r1, =0xffff + ldr r0, =INTSUBMSK + str r1, [r0] # endif /* FCLK:HCLK:PCLK = 1:2:4 */ diff --git a/arch/arm/include/asm/arch-s3c24x0/s3c24x0.h b/arch/arm/include/asm/arch-s3c24x0/s3c24x0.h index ca978c9..96e623b 100644 --- a/arch/arm/include/asm/arch-s3c24x0/s3c24x0.h +++ b/arch/arm/include/asm/arch-s3c24x0/s3c24x0.h @@ -416,7 +416,7 @@ struct s3c24x0_gpio { u32 misccr; u32 extint; #endif -#ifdef CONFIG_S3C2410 +#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) u32 gpacon; u32 gpadat; u32 res1[2]; @@ -467,55 +467,6 @@ struct s3c24x0_gpio { u32 gstatus4; #endif #if defined(CONFIG_S3C2440) - u32 gpacon; - u32 gpadat; - u32 res1[2]; - u32 gpbcon; - u32 gpbdat; - u32 gpbup; - u32 res2; - u32 gpccon; - u32 gpcdat; - u32 gpcup; - u32 res3; - u32 gpdcon; - u32 gpddat; - u32 gpdup; - u32 res4; - u32 gpecon; - u32 gpedat; - u32 gpeup; - u32 res5; - u32 gpfcon; - u32 gpfdat; - u32 gpfup; - u32 res6; - u32 gpgcon; - u32 gpgdat; - u32 gpgup; - u32 res7; - u32 gphcon; - u32 gphdat; - u32 gphup; - u32 res8; - - u32 misccr; - u32 dclkcon; - u32 extint0; - u32 extint1; - u32 extint2; - u32 eintflt0; - u32 eintflt1; - u32 eintflt2; - u32 eintflt3; - u32 eintmask; - u32 eintpend; - u32 gstatus0; - u32 gstatus1; - u32 gstatus2; - u32 gstatus3; - u32 gstatus4; - u32 res9; u32 dsc0; u32 dsc1; diff --git a/board/friendlyarm/mini2440/Makefile b/board/friendlyarm/mini2440/Makefile new file mode 100644 index 0000000..065f1db --- /dev/null +++ b/board/friendlyarm/mini2440/Makefile @@ -0,0 +1,45 @@ +# +# (C) Copyright 2000-2006 +# Wolfgang Denk, DENX Software Engineering, w...@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).o + +COBJS := mini2440.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) + $(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/friendlyarm/mini2440/lowlevel_init.S b/board/friendlyarm/mini2440/lowlevel_init.S new file mode 100644 index 0000000..e3dc3c6 --- /dev/null +++ b/board/friendlyarm/mini2440/lowlevel_init.S @@ -0,0 +1,197 @@ +/* + * Memory Setup stuff - taken from blob memsetup.S + * + * Copyright (C) 1999 2000 2001 Erik Mouw (j.a.k.m...@its.tudelft.nl) and + * Jan-Derk Bakker (j.d.bak...@its.tudelft.nl) + * + * Modified for the Samsung SMDK2410 by + * (C) Copyright 2002 + * David Mueller, ELSOFT AG, <d.muel...@elsoft.ch> + * + * 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> + + +/* some parameters for the board */ + +/* + * + * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S + * + * Copyright (C) 2002 Samsung Electronics SW.LEE <hitch...@sec.samsung.com> + * + */ + +#define BWSCON 0x48000000 +# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */ +# define INTSUBMSK 0x4A00001C + +/* BWSCON */ +#define DW8 (0x0) +#define DW16 (0x1) +#define DW32 (0x2) +#define WAIT (0x1<<2) +#define UBLB (0x1<<3) + +#define B1_BWSCON (DW32) +#define B2_BWSCON (DW16) +#define B3_BWSCON (DW16 + WAIT + UBLB) +#define B4_BWSCON (DW16 + WAIT + UBLB) +#define B5_BWSCON (DW16) +#define B6_BWSCON (DW32) +#define B7_BWSCON (DW32) + +/* BANK0CON */ +#define B0_Tacs 0x0 /* 0clk */ +#define B0_Tcos 0x0 /* 0clk */ +#define B0_Tacc 0x7 /* 14clk */ +#define B0_Tcoh 0x0 /* 0clk */ +#define B0_Tah 0x0 /* 0clk */ +#define B0_Tacp 0x0 +#define B0_PMC 0x0 /* normal */ + +/* BANK1CON */ +#define B1_Tacs 0x0 /* 0clk */ +#define B1_Tcos 0x0 /* 0clk */ +#define B1_Tacc 0x7 /* 14clk */ +#define B1_Tcoh 0x0 /* 0clk */ +#define B1_Tah 0x0 /* 0clk */ +#define B1_Tacp 0x0 +#define B1_PMC 0x0 + +#define B2_Tacs 0x0 +#define B2_Tcos 0x0 +#define B2_Tacc 0x7 +#define B2_Tcoh 0x0 +#define B2_Tah 0x0 +#define B2_Tacp 0x0 +#define B2_PMC 0x0 + +#define B3_Tacs 0x0 /* 0clk */ +#define B3_Tcos 0x3 /* 4clk */ +#define B3_Tacc 0x7 /* 14clk */ +#define B3_Tcoh 0x1 /* 1clk */ +#define B3_Tah 0x3 /* 4clk */ +#define B3_Tacp 0x0 /* 2clk */ +#define B3_PMC 0x0 /* normal */ + +#define B4_Tacs 0x0 +#define B4_Tcos 0x3 +#define B4_Tacc 0x7 +#define B4_Tcoh 0x1 +#define B4_Tah 0x3 +#define B4_Tacp 0x0 +#define B4_PMC 0x0 + +#define B5_Tacs 0x0 /* 0clk */ +#define B5_Tcos 0x0 /* 0clk */ +#define B5_Tacc 0x7 /* 14clk */ +#define B5_Tcoh 0x0 /* 0clk */ +#define B5_Tah 0x0 /* 0clk */ +#define B5_Tacp 0x0 +#define B5_PMC 0x0 /* normal */ + +#define SDRAM_MT 0x3 /* SDRAM */ +#define SDRAM_Trcd 0x0 /* 2clk */ +#define SDRAM_SCAN_9 0x1 /* 9bit */ +#define SDRAM_SCAN_10 0x2 /* 10bit */ + +#define SDRAM_128MB ((SDRAM_MT<<15)+(SDRAM_Trcd<<2)+(SDRAM_SCAN_10)) +#define SDRAM_64MB ((SDRAM_MT<<15)+(SDRAM_Trcd<<2)+(SDRAM_SCAN_9)) + +/* REFRESH parameter */ +#define REFEN 0x1 /* Refresh enable */ +#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */ +#define Trp 0x1 /* 3clk */ +#define Trc 0x3 /* 7clk */ +#define Tchr 0x0 /* unused */ + +#define REFCNT 1012 /* period=10.37us, HCLK=100Mhz, (2048+1-10.37*100) */ + +/**************************************/ + +_TEXT_BASE: + .word CONFIG_SYS_TEXT_BASE + +.globl lowlevel_init +lowlevel_init: + // disable all interupts + mov r1, #0xffffffff + ldr r0, =INTMSK + str r1, [r0] + + ldr r1, =0x7fff + ldr r0, =INTSUBMSK + str r1, [r0] + + /* memory control configuration */ + /* make r0 relative the current location so that it */ + /* reads SMRDATA out of FLASH rather than memory ! */ + ldr r0, =SMRDATA + ldr r1, _TEXT_BASE + sub r0, r0, r1 + ldr r1, =BWSCON /* Bus Width Status Controller */ + add r2, r0, #13*4 +0: + ldr r3, [r0], #4 + str r3, [r1], #4 + cmp r2, r0 + bne 0b + + /* + SDRAM comfigured for 128MB, lets try if it works, otherwise, + restart it with the smaller scan lines for 64MB + */ +#if 0 + ldr r1, =0x34000000 /* just outside 64MB RAM space */ + ldr r0, =0xdeadbeef + str r0, [r1] + ldr r2, [r1] + cmp r2, r0 + beq return +#endif + ldr r1, =BWSCON+(7*4) + ldr r0, =SDRAM_64MB + str r0, [r1], #4 + str r0, [r1] +return: + /* everything is fine now */ + mov pc, lr + + .ltorg +/* the literal pools origin */ + +SMRDATA: + .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28)) + .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) + .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) + .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) + .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) + .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) + .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) + .word SDRAM_128MB + .word SDRAM_128MB + .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) + .word 0xb2 /* enable burst */ + .word 0x30 + .word 0x30 diff --git a/board/friendlyarm/mini2440/mini2440.c b/board/friendlyarm/mini2440/mini2440.c new file mode 100644 index 0000000..1a43cf7 --- /dev/null +++ b/board/friendlyarm/mini2440/mini2440.c @@ -0,0 +1,279 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <mgroe...@sysgo.de> + * + * (C) Copyright 2002 + * David Mueller, ELSOFT AG, <d.muel...@elsoft.ch> + * + * (C) Copyright 2009 + * Michel Pollet <buser...@gmail.com> + * + * 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> +#include <asm/arch/s3c2440.h> +#include <video_fb.h> + +#ifdef CONFIG_DRIVER_DM9000 +#include <netdev.h> +#endif + +DECLARE_GLOBAL_DATA_PTR; + +/* FCLK = 405 MHz, HCLK = 101 MHz, PCLK = 50 MHz, UCLK = 48 MHz */ +#define CLKDIVN_VAL 7 +#define M_MDIV 0x7f +#define M_PDIV 0x2 +#define M_SDIV 0x1 + +#define U_M_MDIV 0x38 +#define U_M_PDIV 0x2 +#define U_M_SDIV 0x2 + +static inline void delay (unsigned long loops) +{ + __asm__ volatile ("1:\n" + "subs %0, %1, #1\n" + "bne 1b":"=r" (loops):"0" (loops)); +} + +/* + * Miscellaneous platform dependent initialisations + */ + +int board_init (void) +{ + struct s3c24x0_clock_power * const clk_power = s3c24x0_get_base_clock_power(); + struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); + + /* to reduce PLL lock time, adjust the LOCKTIME register */ + clk_power->locktime = 0xFFFFFF; + clk_power->clkdivn = CLKDIVN_VAL; + + /* configure UPLL */ + clk_power->upllcon = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV); + /* some delay between MPLL and UPLL */ + delay (10); + /* configure MPLL */ + clk_power->mpllcon = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV); + + /* some delay between MPLL and UPLL */ + delay (8000); + + gpio->gpacon = 0x007FFFFF; /* Port A is all "special" */ + // port B outputs reconfigured + gpio->gpbcon = + (0x1 << 0) | // GPB0 OUT TOUT0 PWM Buzzer + (0x2 << 2) | // GPB1 OUT TOUT1 LCD Backlight + (0x1 << 4) | // GPB2 OUT L3MODE + (0x1 << 6) | // GBP3 OUT L3DATA + (0x1 << 8) | // GBP4 OUT L3CLOCK + (0x1 << 10) | // GBP5 OUT LED1 + (0x1 << 12) | // GBP6 OUT LED2 + (0x1 << 14) | // GBP7 OUT LED3 + (0x1 << 16) | // GBP8 OUT LED4 + (0x2 << 18) | // GBP9 --- nXDACK0 CON5 EBI + (0x2 << 20) | // GBP10 --- nXDREQ0 CON5 EBI + 0; + gpio->gpbup = (1 << 10) - 1; // disable pullup on all 10 pins + gpio->gpbdat = + (0 << 5) | /* turn LED 1 on */ + (1 << 6) | /* turn LED 1 off */ + (1 << 7) | /* turn LED 1 off */ + (1 << 8) | /* turn LED 1 off */ + 0; + + // lcd signals on C and D + gpio->gpccon = (0xAAAAAAAA & /* all default IN but ... */ + ~(0x3 << 10)) | /* not pin 5 ... */ + (0x1 << 10); /* that is output (USBD) */ + gpio->gpcup = 0xFFFFFFFF; + gpio->gpcdat = 0; + + gpio->gpdcon = 0xAAAAAAAA; + gpio->gpdup = 0xFFFFFFFF; + // port E is set for all it's special functions (i2c, spi etc) + gpio->gpecon = 0xAAAAAAAA; + gpio->gpeup = 0x0000FFFF; + + gpio->gpfcon = + (0x1 << 0) | // GPG0 EINT0 OUT + (0x1 << 2) | // GPG1 EINT1 OUT + (0x1 << 4) | // GPG2 EINT2 OUT + (0x1 << 6) | // GPG3 EINT3 OUT + (0x1 << 8) | // GPG4 EINT4 OUT + (0x1 << 10) | // GPG5 EINT5 OUT + (0x1 << 12) | // GPG6 EINT6 OUT + (0x0 << 14) | // GPG7 EINT7 IN DM9000 + 0; + gpio->gpfdat = 0; + gpio->gpfup = + ((1 << 7) - 1) // all disabled + & ~( 1 << 7 ) // but for the ethernet one, we need it. + ; + + gpio->gpgcon = + (0x0 << 0) | // GPG0 EINT8 IN Key1 + (0x1 << 2) | // GPG1 EINT9 OUT Con5 + (0x1 << 4) | // GPG2 EINT10 OUT + (0x0 << 6) | // GPG3 EINT11 IN Key2 + (0x0 << 8) | // GPG4 EINT12 IN Smart Screen Interrupt + (0x0 << 10) | // GPG5 EINT13 IN Key3 + (0x0 << 12) | // GPG6 EINT14 IN Key4 + (0x0 << 14) | // GPG7 EINT15 IN Key5 + (0x1 << 16) | // GPG8 EINT16 OUT nCD_SD + (0x1 << 18) | // GPG9 EINT17 OUT + (0x1 << 20) | // GPG10 EINT18 OUT + (0x0 << 22) | // GPG11 EINT19 IN Key6 + (0x0 << 24) | // GPG12 EINT18 IN // GPG[12..15] need to be inputs + (0x0 << 26) | // GPG13 EINT18 IN // hard pullups + (0x0 << 28) | // GPG14 EINT18 IN + (0x0 << 30) | // GPG15 EINT18 IN + 0; + gpio->gpgup = (1 << 15) -1; // disable pullups for all pins + + gpio->gphcon = + (0x2 << 0) | // GPH0 nCTS0 --- + (0x2 << 2) | // GPH1 nRTS0 --- + (0x2 << 4) | // GPH2 TXD0 --- + (0x2 << 6) | // GPH3 RXD0 --- + (0x2 << 8) | // GPH4 TXD1 --- + (0x2 << 10) | // GPH5 RXD1 --- + (0x2 << 12) | // GPH6 [TXD2] nRTS1 + (0x2 << 14) | // GPH7 [RXD2] nCTS1 + (0x1 << 16) | // GPH8 UEXTCLK OUT + (0x1 << 18) | // GPH9 CLKOUT0 OUT + (0x1 << 20) | // GPH10 CLKOUT1 OUT + 0; + gpio->gphup = (1 << 10) - 1; // disable pullups for all pins + + gpio->extint0=0x22222222; + gpio->extint1=0x22222222; + gpio->extint2=0x22222222; + + /* USB Device Part */ + /* GPC5 is reset for USB Device */ + + gpio->gpcdat |= ( 1 << 5) ; + udelay(20000); + gpio->gpcdat &= ~( 1 << 5) ; + udelay(20000); + gpio->gpcdat |= ( 1 << 5) ; + + /* arch number from kernel post 2.6.28 */ +#ifndef MACH_TYPE_MINI2440 +#define MACH_TYPE_MINI2440 1999 +#endif + gd->bd->bi_arch_number = MACH_TYPE_MINI2440; + + /* adress of boot parameters */ + gd->bd->bi_boot_params = 0x30000100; + + //icache_enable(); + //dcache_enable(); + + return 0; +} + + + +#define MVAL (0) +#define MVAL_USED (0) //0=each frame 1=rate by MVAL +#define INVVDEN (1) //0=normal 1=inverted +#define BSWP (0) //Byte swap control +#define HWSWP (1) //Half word swap control + + +//TFT 240320 +#define LCD_XSIZE_TFT_240320 (240) +#define LCD_YSIZE_TFT_240320 (320) + +//TFT240320 +#define HOZVAL_TFT_240320 (LCD_XSIZE_TFT_240320-1) +#define LINEVAL_TFT_240320 (LCD_YSIZE_TFT_240320-1) + +//Timing parameter for NEC3.5" +#define VBPD_240320 (3) +#define VFPD_240320 (10) +#define VSPW_240320 (1) + +#define HBPD_240320 (5) +#define HFPD_240320 (2) +#define HSPW_240320 (36) + +#define CLKVAL_TFT_240320 (3) +//FCLK=101.25MHz,HCLK=50.625MHz,VCLK=6.33MHz + + +void board_video_init(GraphicDevice *pGD) +{ + struct s3c24x0_lcd * const lcd = s3c24x0_get_base_lcd(); + + /* FIXME: select LCM type by env variable */ + + /* Configuration for GTA01 LCM on QT2410 */ + lcd->lcdcon1 = 0x00000378; /* CLKVAL=4, BPPMODE=16bpp, TFT, ENVID=0 */ + +// lcd->LCDCON2 = 0x014fc141; +// lcd->LCDCON3 = 0x0098ef13; +// lcd->LCDCON4 = 0x00000d05; + lcd->lcdcon5 = 0x00000f09; + + lcd->lcdcon2 = (VBPD_240320<<24)|(LINEVAL_TFT_240320<<14)|(VFPD_240320<<6)|(VSPW_240320); + lcd->lcdcon3 = (HBPD_240320<<19)|(HOZVAL_TFT_240320<<8)|(HFPD_240320); + lcd->lcdcon4 = (MVAL<<8)|(HSPW_240320); + + + lcd->lpcsel = 0x00000000; +} + +void dram_init_banksize (void) +{ + struct s3c24x0_memctl * const mem = s3c24x0_get_base_memctl(); + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; + /* if the early bootloader found 128MB, lets tell the kernel */ + if ((mem->bankcon[6] & 0x3) == 0x2) + gd->bd->bi_dram[0].size = 128*1024*1024; + else + gd->bd->bi_dram[0].size = 64*1024*1024; +} + +int dram_init (void) +{ + gd->ram_size = 64*1024*1024; + return 0; +} + +int board_eth_init(bd_t *bis) +{ +#ifdef CONFIG_DRIVER_DM9000 + return dm9000_initialize(bis); +#else + return 0; +#endif +} + +/* The sum of all part_size[]s must equal to the NAND size, i.e., 0x4000000 */ + +unsigned int dynpart_size[] = { + 0x40000, 0x20000, 0x500000, 0xffffffff, 0 }; +char *dynpart_names[] = { + "u-boot", "u-boot_env", "kernel", "rootfs", NULL }; diff --git a/boards.cfg b/boards.cfg index 3cf75c3..93eeb3c 100644 --- a/boards.cfg +++ b/boards.cfg @@ -61,6 +61,7 @@ mx1ads arm arm920t - - scb9328 arm arm920t - - imx cm4008 arm arm920t - - ks8695 cm41xx arm arm920t - - ks8695 +mini2440 arm arm920t mini2440 friendlyarm s3c24x0 VCMA9 arm arm920t vcma9 mpl s3c24x0 smdk2410 arm arm920t - samsung s3c24x0 omap1510inn arm arm925t - ti diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c index ba6f39b..c7e4064 100644 --- a/drivers/i2c/s3c24x0_i2c.c +++ b/drivers/i2c/s3c24x0_i2c.c @@ -55,14 +55,15 @@ static int GetI2CSDA(void) { - struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); - #ifdef CONFIG_S3C2410 + struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); return (readl(&gpio->gpedat) & 0x8000) >> 15; #endif #ifdef CONFIG_S3C2400 + struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); return (readl(&gpio->pgdat) & 0x0020) >> 5; #endif + return 0; } #if 0 @@ -74,12 +75,12 @@ static void SetI2CSDA(int x) static void SetI2CSCL(int x) { - struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); - #ifdef CONFIG_S3C2410 + struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); writel((readl(&gpio->gpedat) & ~0x4000) | (x & 1) << 14, &gpio->gpedat); #endif #ifdef CONFIG_S3C2400 + struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); writel((readl(&gpio->pgdat) & ~0x0040) | (x & 1) << 6, &gpio->pgdat); #endif } @@ -115,7 +116,9 @@ static void ReadWriteByte(void) void i2c_init(int speed, int slaveadd) { struct s3c24x0_i2c *i2c = s3c24x0_get_base_i2c(); +#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2400) struct s3c24x0_gpio *gpio = s3c24x0_get_base_gpio(); +#endif ulong freq, pres = 16, div; int i; diff --git a/drivers/mtd/nand/s3c2410_nand.c b/drivers/mtd/nand/s3c2410_nand.c index e1a459b..4015cc1 100644 --- a/drivers/mtd/nand/s3c2410_nand.c +++ b/drivers/mtd/nand/s3c2410_nand.c @@ -24,6 +24,7 @@ #include <asm/arch/s3c24x0_cpu.h> #include <asm/io.h> +#ifdef CONFIG_S3C2410 #define S3C2410_NFCONF_EN (1<<15) #define S3C2410_NFCONF_512BYTE (1<<14) #define S3C2410_NFCONF_4STEP (1<<13) @@ -35,6 +36,21 @@ #define S3C2410_ADDR_NALE 4 #define S3C2410_ADDR_NCLE 8 +#elif defined(CONFIG_S3C2440) +#define S3C2410_NFCONF_EN (1<<15) +#define S3C2410_NFCONF_512BYTE (1<<14) +#define S3C2410_NFCONF_4STEP (1<<13) +#define S3C2410_NFCONF_INITECC (1<<12) +#define S3C2410_NFCONF_nFCE (1<<1) +#define S3C2410_NFCONF_TACLS(x) ((x)<<8) +#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4) +#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0) + +#define S3C2440_NFCONT_INITECC (1<<4) + +#define S3C2410_ADDR_NALE 4 +#define S3C2410_ADDR_NCLE 8 +#endif #ifdef CONFIG_NAND_SPL @@ -54,7 +70,11 @@ static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) { struct nand_chip *chip = mtd->priv; +#ifdef CONFIG_S3C2410 struct s3c2410_nand *nand = s3c2410_get_base_nand(); +#elif CONFIG_S3C2440 + struct s3c2440_nand *nand = s3c2440_get_base_nand(); +#endif debug("hwcontrol(): 0x%02x 0x%02x\n", cmd, ctrl); @@ -69,11 +89,23 @@ static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) chip->IO_ADDR_W = (void *)IO_ADDR_W; if (ctrl & NAND_NCE) +#ifdef CONFIG_S3C2410 writel(readl(&nand->nfconf) & ~S3C2410_NFCONF_nFCE, &nand->nfconf); +#else +#ifdef CONFIG_S3C2440_NAND_HWECC + writel((readl(&nand->nfcont) & ~((1<<5) | S3C2410_NFCONF_nFCE)) + | S3C2440_NFCONT_INITECC, &nand->nfcont); +#endif +#endif else +#ifdef CONFIG_S3C2410 writel(readl(&nand->nfconf) | S3C2410_NFCONF_nFCE, &nand->nfconf); +#else + writel(readl(&nand->nfcont) & ~S3C2410_NFCONF_nFCE, + &nand->nfcont); +#endif } if (cmd != NAND_CMD_NONE) @@ -82,7 +114,11 @@ static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) static int s3c2410_dev_ready(struct mtd_info *mtd) { +#ifdef CONFIG_S3C2410 struct s3c2410_nand *nand = s3c2410_get_base_nand(); +#elif CONFIG_S3C2440 + struct s3c2440_nand *nand = s3c2440_get_base_nand(); +#endif debug("dev_ready\n"); return readl(&nand->nfstat) & 0x01; } @@ -119,6 +155,41 @@ static int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat, printf("s3c2410_nand_correct_data: not implemented\n"); return -1; } +#elif defined CONFIG_S3C2440_NAND_HWECC +void s3c24x0_nand_enable_hwecc(struct mtd_info *mtd, int mode) +{ + struct s3c2440_nand *nand = s3c2440_get_base_nand(); + debug("s3c2440_nand_enable_hwecc(%p, %d)\n", mtd, mode); + writel((readl(&nand->nfcont) & ~(1 << 5)) | S3C2440_NFCONT_INITECC, &nand->nfcont); +} + +/* + * Avoid warnings until the support of NAND for the MINI2440 + */ +/*static int s3c24x0_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, + u_char *ecc_code) +{ + struct s3c2440_nand *nand = s3c2440_get_base_nand(); + ecc_code[0] = readb(&nand->nfeccd); + ecc_code[1] = readb(&nand->nfeccd0); + ecc_code[2] = readb(&nand->nfeccd1); + debug("s3c2440_nand_calculate_hwecc(%p,): 0x%02x 0x%02x 0x%02x\n", + mtd , ecc_code[0], ecc_code[1], ecc_code[2]); + + return 0; +} + +static int s3c24x0_nand_correct_data(struct mtd_info *mtd, u_char *dat, + u_char *read_ecc, u_char *calc_ecc) +{ + if (read_ecc[0] == calc_ecc[0] && + read_ecc[1] == calc_ecc[1] && + read_ecc[2] == calc_ecc[2]) + return 0; + + printf("s3c2440_nand_correct_data: not implemented\n"); + return -1; +}*/ #endif int board_nand_init(struct nand_chip *nand) @@ -126,7 +197,11 @@ int board_nand_init(struct nand_chip *nand) u_int32_t cfg; u_int8_t tacls, twrph0, twrph1; struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power(); +#ifdef CONFIG_S3C2410 struct s3c2410_nand *nand_reg = s3c2410_get_base_nand(); +#elif CONFIG_S3C2440 + struct s3c2440_nand *nand_reg = s3c2440_get_base_nand(); +#endif debug("board_nand_init()\n"); @@ -173,6 +248,13 @@ int board_nand_init(struct nand_chip *nand) nand->ecc.mode = NAND_ECC_HW; nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE; nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES; +#elif CONFIG_S3C24X0_NAND_HWECC + nand->ecc.hwctl = s3c24x0_nand_enable_hwecc; + nand->ecc.calculate = s3c24x0_nand_calculate_ecc; + nand->ecc.correct = s3c24x0_nand_correct_data; + nand->ecc.mode = NAND_ECC_HW; + nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE; + nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES; #else nand->ecc.mode = NAND_ECC_SOFT; #endif diff --git a/include/configs/mini2440.h b/include/configs/mini2440.h new file mode 100644 index 0000000..5f7d9d0 --- /dev/null +++ b/include/configs/mini2440.h @@ -0,0 +1,323 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <mgroe...@sysgo.de> + * Gary Jennejohn <g...@denx.de> + * David Mueller <d.muel...@elsoft.ch> + * + * (C) Copyright 2009-2010 + * Michel Pollet <buser...@gmail.com> + * + * Configuation settings for the MINI2440 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 + +/* If we want to start u-boot directly from within NAND flash + * Also use this if loading the bootloader directly via JTAG + * Mote that this is incompatible with NOR booting. + */ +//#define CONFIG_LL_INIT_NAND_ONLY 1 +//#define CONFIG_SYS_TEXT_BASE 0x33F80000 +#define CONFIG_SYS_TEXT_BASE 0x0 + +//#define CONFIG_S3C2410_NAND_BOOT 1 +//#define CONFIG_S3C2410_NAND_SKIP_BAD 1 + +/* + * High Level Configuration Options + * (easy to change) + */ +#define CONFIG_ARM920T 1 /* This is an ARM920T Core */ +#define CONFIG_S3C24X0 1 /* in a SAMSUNG S3C2440 SoC */ +#define CONFIG_S3C2440 1 /* in a SAMSUNG S3C2440 SoC */ +#define CONFIG_MINI2440 1 /* on a MIN2440 Board */ + +/* + * It is possible to have u-boot save it's environment in NOR, however, + * reember it is incompatible with booting from NAND as the NOR is not + * available at that point. So use this only if you use nand as storage + * and will never boot from it + */ +#define CONFIG_MINI2440_NOR_ENV 1 + +#define CONFIG_MINI2440_OVERCLOCK 1 /* allow use of frequencies over 405Mhz */ + +/* input clock of PLL */ +#define CONFIG_SYS_CLK_FREQ 12000000 /* MINI2440 has 12.0000MHz input clock */ + +#define CONFIG_ARCH_CPU_INIT 1 /* for the initialization of PLL */ + +#define USE_920T_MMU 1 +//#define CONFIG_USE_IRQ 1 /* Needed for USB device! */ + +/* + * Size of malloc() pool + */ +#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2048*1024) +#define CONFIG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ + +/* + * Hardware drivers + */ +#define CONFIG_DRIVER_DM9000 1 +#define CONFIG_DRIVER_DM9000_NO_EEPROM 1 +#define CONFIG_DM9000_BASE 0x20000300 +#define DM9000_IO CONFIG_DM9000_BASE +#define DM9000_DATA (CONFIG_DM9000_BASE+4) + + +/* + * I2C + */ +#define CONFIG_DRIVER_S3C24X0_I2C 1 +#if (CONFIG_DRIVER_S3C24X0_I2C) +#define CONFIG_HARD_I2C +#define CONFIG_SYS_I2C_SPEED 100000 +#define CONFIG_SYS_I2C_SLAVE 0x7f +#define CONFIG_MEGADISPLAY 1 +#endif + +/* + * select serial console configuration + */ +#define CONFIG_S3C24X0_SERIAL +#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on MINI2440 */ +//#define CONFIG_HWFLOW 1 + +/************************************************************ + * RTC + ************************************************************/ +#define CONFIG_RTC_S3C24X0 0 + +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_BAUDRATE 115200 + +/*********************************************************** + * Command definition + ***********************************************************/ +#include <config_cmd_default.h> + +/*#define CONFIG_CMD_DATE*/ +#define CONFIG_CMD_DHCP +#define CONFIG_CMD_EXT2 +#define CONFIG_CMD_FAT +/*#define CONFIG_CMD_JFFS2*/ +#define CONFIG_CMD_MMC +#define CONFIG_CMD_NAND +/*#define CONFIG_CMD_PING*/ +#define CONFIG_CMD_PORTIO +#define CONFIG_CMD_REGINFO +#define CONFIG_CMD_SAVES + +#if defined(CONFIG_DRIVER_S3C24X0_I2C) +#define CONFIG_CMD_I2C /* I2C serial bus support */ +#endif + +#define CONFIG_BOOTDELAY 3 +#define CONFIG_BOOTARGS "root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200" +#define CONFIG_ETHADDR 08:08:11:18:12:27 +#define CONFIG_NETMASK 255.255.255.0 +#define CONFIG_IPADDR 10.0.0.111 +#define CONFIG_SERVERIP 10.0.0.1 + +#define CONFIG_DOS_PARTITION 1 + +#if defined(CONFIG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */ +/* what's this ? it's not used anywhere */ +#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */ +#endif + +/* + * Miscellaneous configurable options + */ +#define CONFIG_LONGHELP /* undef to save memory */ +#define CONFIG_SYS_PROMPT "MINI2440 # " /* Monitor Command Prompt */ +#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */ +#define CONFIG_SYS_MAXARGS 32 /* max number of command args */ +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */ + +#define CONFIG_SYS_MEMTEST_START 0x30000000 /* memtest works on */ +#define CONFIG_SYS_MEMTEST_END 0x34000000 /* 64 MB in DRAM */ + +#undef CONFIG_CLKS_IN_HZ /* everything, incl board info, in Hz */ + +#define CONFIG_SYS_LOAD_ADDR 0x32000000 /* default load address */ + +/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */ +/* it to wrap 100 times (total 1562500) to get 1 sec. */ +#define CONFIG_SYS_HZ 1562500 + +/* valid baudrates */ +#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } + +/*----------------------------------------------------------------------- + * 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 (8*1024) /* IRQ stack */ +#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */ +#endif + +#if 0 +#define CONFIG_USB_OHCI_NEW 1 +#define CONFIG_CMD_USB 1 + +#define CONFIG_USB_OHCI_CPU_INIT 1 +#define CONFIG_USB_OHCI_REGS_BASE 0x49000000 /* S3C24X0_USB_HOST_BASE */ +#define CONFIG_USB_OHCI_SLOT_NAME "s3c2440" +#define CONFIG_USB_OHCI_MAX_ROOT_PORTS 2 +#endif + +#if 0 +#define CONFIG_USB_DEVICE 1 +#define CONFIG_USB_TTY 1 +#define CONFIG_USB_STORAGE 1 +#define CONFIG_CONSOLE_IS_IN_ENV 1 +#define CONFIG_USBD_VENDORID 0x1457 /* FIC */ +#define CONFIG_USBD_PRODUCTID_GSERIAL 0x5120 /* gserial */ +#define CONFIG_USBD_PRODUCTID_CDCACM 0x511b /* SMDK2440 CDC ACM */ +#define CONFIG_USBD_MANUFACTURER "MINI2440" +#define CONFIG_USBD_PRODUCT_NAME "S3C2440 Bootloader " U_BOOT_VERSION +#define CONFIG_USBD_DFU 1 +#define CONFIG_USBD_DFU_XFER_SIZE 4096 +#define CONFIG_USBD_DFU_INTERFACE 2 +//#define CONFIG_USB_DFU_REVISION 0x0100 +#endif + +/*----------------------------------------------------------------------- + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ +#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */ +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x100000 - \ + GENERATED_GBL_DATA_SIZE) + +/* + * startup code now probes, this is no longer needed + */ +//#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */ + +#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */ + +/* + * When booting from NAND, it is impossible to access the lowest addresses + * due to the SteppingStone being in the way. Luckily the NOR doesn't really + * care about the highest 16 bits of address, so we set the controlers + * registers to go and poke over there, instead. + */ +#define CONFIG_SYS_FLASH_BASE (0x0000 + PHYS_FLASH_1) + +/* + * NOR FLASH organization + * Now uses the standard CFI interface + */ + +/* FLASH and environment organization */ +#define CONFIG_SYS_FLASH_CFI 1 +#define CONFIG_FLASH_CFI_DRIVER 1 +#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_16BIT +#define CONFIG_SYS_MONITOR_BASE 0x0 +#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */ +#define CONFIG_SYS_MAX_FLASH_SECT 512 /* 512 * 4096 sectors, or 32 * 64k blocks */ +#define CONFIG_FLASH_SHOW_PROGRESS 1 + +/* + * u-boot environmnet + */ +#ifndef CONFIG_MINI2440_NOR_ENV +#define CONFIG_ENV_IS_IN_NAND 1 +#define CONFIG_ENV_OFFSET_OOB 1 // dont define for CONFIG_ENV_IS_IN_FLASH +/* This size must be the size of a common denominator for the NAND erase block */ +#define CONFIG_ENV_SIZE 0x20000 /* 128k Total Size of Environment Sector */ +#else +#define CONFIG_ENV_IS_IN_FLASH 1 +#define CONFIG_MY_ENV_OFFSET 0x40000 +#define CONFIG_ENV_ADDR (PHYS_FLASH_1 + CONFIG_MY_ENV_OFFSET) /* addr of environment */ +#define CONFIG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */ +#endif +#define CONFIG_PREBOOT_OVERRIDE 1 + + +/* NAND configuration */ +#ifdef CONFIG_CMD_NAND +#define CONFIG_NAND_S3C2410 +#define CONFIG_S3C2440_NAND_HWECC +#define CONFIG_SYS_MAX_NAND_DEVICE 1 +#define NAND_MAX_CHIPS 1 +#define CONFIG_SYS_NAND_BASE 0x4E000000 +/*#define CONFIG_S3C24XX_CUSTOM_NAND_TIMING +#define CONFIG_S3C24XX_TACLS 7 +#define CONFIG_S3C24XX_TWRPH0 7 +#define CONFIG_S3C24XX_TWRPH1 7*/ +#endif + +#define CONFIG_MMC 1 +#define CONFIG_GENERIC_MMC +#define CONFIG_MMC_S3C 1 /* Enabling the MMC driver */ +#define CONFIG_MMC_BASE 0xff000000 + +#define CONFIG_EXT2 1 +#define CONFIG_FAT 1 + +/* JFFS2 driver */ +/*#define CONFIG_JFFS2_CMDLINE 1 +#define CONFIG_JFFS2_NAND 1 +#define CONFIG_JFFS2_NAND_DEV 0*/ + +/* ATAG configuration */ +#define CONFIG_INITRD_TAG 1 +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_CMDLINE_TAG 1 +#if 0 +#define CONFIG_REVISION_TAG 1 +#define CONFIG_SERIAL_TAG 1 +#endif +#define CONFIG_CMDLINE_EDITING 1 +#define CONFIG_AUTO_COMPLETE 1 + +#define CONFIG_S3C2410_NAND_BBT 1 +//#define CONFIG_S3C2440_NAND_HWECC 1 /* this works for generation, not verification */ + +#define CONFIG_NAND_YAFFS_WRITE +#define CONFIG_NAND_YAFFS1_NEW_OOB_LAYOUT + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "ipaddr=192.168.1.2\0" \ + "serverip=192.168.1.1\0" \ + "" +#define MTDIDS_DEFAULT "nand0=mini2440-nand" +#define MTPDARTS_DEFAULT "mtdparts=mtdparts=mini2440-nand:256k@0(u-boot),128k(env),5m(kernel),-(root)" +#define CONFIG_NAND_DYNPART_MTD_KERNEL_NAME "mini2440-nand" +#define CONFIG_NAND_DYNPART 1 + +#define CONFIG_BOOTCOMMAND "mmcinit;ext2ls mmc 0 0x32000000 uImage;ext2ls mmc 0;ext2load mmc 0 0x32000000 uImage;setenv bootargs console=ttySAC0,115200 mem=16M noinitrd mini2440=5tb ip=dhcp;bootm" + +#endif /* __CONFIG_H */ -- 1.7.9.1
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot