X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/54a10cd62697ff67ad261902837907da6aa49b37..463c4d86fe6b5a6b58cf6e2d69da781a7876654f:/target/linux/adm5120-2.6/files/drivers/mtd/nand/rbmipsnand.c diff --git a/target/linux/adm5120-2.6/files/drivers/mtd/nand/rbmipsnand.c b/target/linux/adm5120-2.6/files/drivers/mtd/nand/rbmipsnand.c index f08655290..c687dcdd2 100644 --- a/target/linux/adm5120-2.6/files/drivers/mtd/nand/rbmipsnand.c +++ b/target/linux/adm5120-2.6/files/drivers/mtd/nand/rbmipsnand.c @@ -66,7 +66,17 @@ static struct mtd_partition partition_info[] = { static struct mtd_info rmtd; static struct nand_chip rnand; - +/*========================================================================*/ +/* We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader */ +/* will not be able to find the kernel that we load. So set the oobinfo */ +/* when creating the partitions. */ +/*========================================================================*/ +static struct nand_ecclayout rb_ecclayout = { + .eccbytes = 6, + .eccpos = { 8, 9, 10, 13, 14, 15 }, + .oobavail = 9, + .oobfree = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1} } +}; static unsigned init_ok = 0; unsigned get_rbnand_block_size(void) { @@ -78,7 +88,7 @@ EXPORT_SYMBOL(get_rbnand_block_size); int __init rbmips_init(void) { memset(&rmtd, 0, sizeof(rmtd)); memset(&rnand, 0, sizeof(rnand)); - printk("RB1xx nand\n"); + printk(KERN_INFO "RB1xx nand\n"); MEM32(0xB2000064) = 0x100; MEM32(0xB2000008) = 0x1; SMEM1(NAND_SET_SPn) = 0x01; @@ -89,16 +99,17 @@ int __init rbmips_init(void) { rnand.dev_ready = rb100_dev_ready; p_nand = (void __iomem *)ioremap(( unsigned long)SMEM1_BASE, 0x1000); if (!p_nand) { - printk("RB1xx nand Unable ioremap buffer"); + printk(KERN_WARNING "RB1xx nand Unable ioremap buffer\n"); return -ENXIO; } rnand.ecc.mode = NAND_ECC_SOFT; + rnand.ecc.layout = &rb_ecclayout; rnand.chip_delay = 25; rnand.options |= NAND_NO_AUTOINCR; rmtd.priv = &rnand; if (nand_scan(&rmtd, 1) && nand_scan(&rmtd, 1) && nand_scan(&rmtd, 1) && nand_scan(&rmtd, 1)) { - printk("RB1xxx nand device not found"); + printk(KERN_INFO "RB1xxx nand device not found\n"); iounmap ((void *)p_nand); return -ENXIO; }