]> git.sur5r.net Git - u-boot/blobdiff - cpu/ppc4xx/ndfc.c
Merge with /home/stefan/git/u-boot/yucca-ddr2
[u-boot] / cpu / ppc4xx / ndfc.c
index 2c44111da6b9e0971600de5cbfa4b85b41328dec..b198ff46ceb4a6c50141c0084eeee962e24666e6 100644 (file)
@@ -144,16 +144,21 @@ static int ndfc_verify_buf(struct mtd_info *mtdinfo, const uint8_t *buf, int len
 
 void board_nand_select_device(struct nand_chip *nand, int chip)
 {
+       /*
+        * Don't use "chip" to address the NAND device,
+        * generate the cs from the address where it is encoded.
+        */
+       int cs = (ulong)nand->IO_ADDR_W & 0x00000003;
        ulong base = (ulong)nand->IO_ADDR_W & 0xfffffffc;
 
        /* Set NandFlash Core Configuration Register */
        /* 1col x 2 rows */
-       out32(base + NDFC_CCR, 0x00000000 | (chip << 24));
+       out32(base + NDFC_CCR, 0x00000000 | (cs << 24));
 }
 
-void board_nand_init(struct nand_chip *nand)
+int board_nand_init(struct nand_chip *nand)
 {
-       int chip = (ulong)nand->IO_ADDR_W & 0x00000003;
+       int cs = (ulong)nand->IO_ADDR_W & 0x00000003;
        ulong base = (ulong)nand->IO_ADDR_W & 0xfffffffc;
 
        nand->eccmode = NAND_ECC_SOFT;
@@ -181,8 +186,9 @@ void board_nand_init(struct nand_chip *nand)
        /*
         * Select required NAND chip in NDFC
         */
-       board_nand_select_device(nand, chip);
-       out32(base + NDFC_BCFG0 + (chip << 2), 0x80002222);
+       board_nand_select_device(nand, cs);
+       out32(base + NDFC_BCFG0 + (cs << 2), 0x80002222);
+       return 0;
 }
 
 #endif