ppc4xx: Change Canyonlands to support booting from 2k page NAND devices
authorStefan Roese <sr@denx.de>
Tue, 8 Apr 2008 08:33:29 +0000 (10:33 +0200)
committerStefan Roese <sr@denx.de>
Fri, 18 Apr 2008 14:30:49 +0000 (16:30 +0200)
Signed-off-by: Stefan Roese <sr@denx.de>
board/amcc/canyonlands/bootstrap.c
board/amcc/canyonlands/init.S
board/amcc/canyonlands/u-boot-nand.lds
include/configs/canyonlands.h
nand_spl/board/amcc/canyonlands/config.mk

index 37fa1c926cc89a0bd46d91396ceeebe2298a623e..1d125b6e6ea8b8c14544fdd6a741461c7fdc4cad 100644 (file)
@@ -63,9 +63,22 @@ static u8 boot_configs[][17] = {
 /*
  * Bytes 5,6,8,9,11 change for NAND boot
  */
+#if 0
+/*
+ * Values for 512 page size NAND chips, not used anymore, just
+ * keep them here for reference
+ */
 static u8 nand_boot[] = {
        0x90, 0x01,  0xa0, 0x68, 0x58
 };
+#else
+/*
+ * Values for 2k page size NAND chips
+ */
+static u8 nand_boot[] = {
+       0x90, 0x01,  0xa0, 0xe8, 0x58
+};
+#endif
 
 static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
index bd4cab56d8bbd6e598d228c731be912f5c9d00f6..258fb5de8ffb9dea5a30ddd780e5be48fbcef1db 100644 (file)
@@ -51,6 +51,7 @@ tlbtab:
 #else
        tlbentry(CFG_NAND_BOOT_SPL_SRC, SZ_4K, CFG_NAND_BOOT_SPL_SRC, 4, AC_R|AC_W|AC_X|SA_G)
        tlbentry(CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I)
+       tlbentry(256 << 20, SZ_256M, 256 << 20, 0, AC_R|AC_W|AC_X|SA_G|SA_I)
 #endif
 
        /*
index f0837d415f74966f9109094cd5ba335f7b48f681..332e3aaf2a74ff18500416d900e7c68f7c4a429b 100644 (file)
@@ -56,10 +56,10 @@ SECTIONS
     cpu/ppc4xx/start.o (.text)
 
     /* Align to next NAND block */
-    . = ALIGN(0x4000);
+    . = ALIGN(0x20000);
     common/environment.o  (.ppcenv)
     /* Keep some space here for redundant env and potential bad env blocks */
-    . = ALIGN(0x10000);
+    . = ALIGN(0x80000);
 
     *(.text)
     *(.fixup)
index be9432b4cdd6fdea3f48d8fb620d1823aaf7e070..e7896aa6c3839354ba03d50f6e741534e3711cda 100644 (file)
  * On 440EPx the SPL is copied to SDRAM before the NAND controller is
  * set up. While still running from cache, I experienced problems accessing
  * the NAND controller.        sr - 2006-08-25
+ *
+ * This is the first official implementation of booting from 2k page sized
+ * NAND devices (e.g. Micron 29F2G08AA 256Mbit * 8)
  */
 #define CFG_NAND_BOOT_SPL_SRC  0xfffff000      /* SPL location               */
 #define CFG_NAND_BOOT_SPL_SIZE (4 << 10)       /* SPL size                   */
 /*
  * Define the partitioning of the NAND chip (only RAM U-Boot is needed here)
  */
-#define CFG_NAND_U_BOOT_OFFS   (16 << 10)      /* Offset to RAM U-Boot image */
-#define CFG_NAND_U_BOOT_SIZE   (384 << 10)     /* Size of RAM U-Boot image   */
+#define CFG_NAND_U_BOOT_OFFS   (128 << 10)     /* Offset to RAM U-Boot image */
+#define CFG_NAND_U_BOOT_SIZE   (1 << 20)       /* Size of RAM U-Boot image   */
 
 /*
  * Now the NAND chip has to be defined (no autodetection used!)
  */
-#define CFG_NAND_PAGE_SIZE     512             /* NAND chip page size        */
-#define CFG_NAND_BLOCK_SIZE    (16 << 10)      /* NAND chip block size       */
-#define CFG_NAND_PAGE_COUNT    32              /* NAND chip page count       */
-#define CFG_NAND_BAD_BLOCK_POS 5             /* Location of bad block marker */
-#undef CFG_NAND_4_ADDR_CYCLE                 /* No fourth addr used (<=32MB) */
+#define CFG_NAND_PAGE_SIZE     (2 << 10)       /* NAND chip page size        */
+#define CFG_NAND_BLOCK_SIZE    (128 << 10)     /* NAND chip block size       */
+#define CFG_NAND_PAGE_COUNT    (CFG_NAND_BLOCK_SIZE / CFG_NAND_PAGE_SIZE)
+                                               /* NAND chip page count       */
+#define CFG_NAND_BAD_BLOCK_POS 0               /* Location of bad block marker*/
+#define CFG_NAND_5_ADDR_CYCLE                  /* Fifth addr used (<=128MB)  */
 
 #define CFG_NAND_ECCSIZE       256
 #define CFG_NAND_ECCBYTES      3
 #define CFG_NAND_ECCSTEPS      (CFG_NAND_PAGE_SIZE / CFG_NAND_ECCSIZE)
-#define CFG_NAND_OOBSIZE       16
+#define CFG_NAND_OOBSIZE       64
 #define CFG_NAND_ECCTOTAL      (CFG_NAND_ECCBYTES * CFG_NAND_ECCSTEPS)
-#define CFG_NAND_ECCPOS                {0, 1, 2, 3, 6, 7}
+#define CFG_NAND_ECCPOS                {40, 41, 42, 43, 44, 45, 46, 47, \
+                                48, 49, 50, 51, 52, 53, 54, 55, \
+                                56, 57, 58, 59, 60, 61, 62, 63}
 
 #ifdef CFG_ENV_IS_IN_NAND
 /*
 #define CONFIG_DDR_ECC         1       /* with ECC support             */
 #define CONFIG_DDR_RQDC_FIXED  0x80000038 /* fixed value for RQDC      */
 #endif
-#define CFG_MBYTES_SDRAM        256    /* 256MB                        */
+#define CFG_MBYTES_SDRAM       512     /* 512MB                        */
 
 /*-----------------------------------------------------------------------
  * I2C
index 6dad876ae589d10a20484aa7b931397fdb0e808f..c8d7c235267bbd8cb547b7328e47dfcd5c23dab5 100644 (file)
@@ -34,9 +34,9 @@
 #
 TEXT_BASE = 0xE3003000
 
-# PAD_TO used to generate a 16kByte binary needed for the combined image
-# -> PAD_TO = TEXT_BASE + 0x4000
-PAD_TO = 0xE3007000
+# PAD_TO used to generate a 128kByte binary needed for the combined image
+# -> PAD_TO = TEXT_BASE + 0x20000
+PAD_TO = 0xE3023000
 
 PLATFORM_CPPFLAGS += -DCONFIG_440=1