aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/nand/Kconfig12
-rw-r--r--drivers/mtd/nand/bf5xx_nand.c40
2 files changed, 52 insertions, 0 deletions
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index 71406e517857..c075b47e11ad 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -109,6 +109,18 @@ config MTD_NAND_BF5XX_HWECC
109 Enable the use of the BF5XX's internal ECC generator when 109 Enable the use of the BF5XX's internal ECC generator when
110 using NAND. 110 using NAND.
111 111
112config MTD_NAND_BF5XX_BOOTROM_ECC
113 bool "Use Blackfin BootROM ECC Layout"
114 default n
115 depends on MTD_NAND_BF5XX_HWECC
116 help
117 If you wish to modify NAND pages and allow the Blackfin on-chip
118 BootROM to boot from them, say Y here. This is only necessary
119 if you are booting U-Boot out of NAND and you wish to update
120 U-Boot from Linux' userspace. Otherwise, you should say N here.
121
122 If unsure, say N.
123
112config MTD_NAND_RTC_FROM4 124config MTD_NAND_RTC_FROM4
113 tristate "Renesas Flash ROM 4-slot interface board (FROM_BOARD4)" 125 tristate "Renesas Flash ROM 4-slot interface board (FROM_BOARD4)"
114 depends on SH_SOLUTION_ENGINE 126 depends on SH_SOLUTION_ENGINE
diff --git a/drivers/mtd/nand/bf5xx_nand.c b/drivers/mtd/nand/bf5xx_nand.c
index fc58afe4733a..3555f6b3ebe0 100644
--- a/drivers/mtd/nand/bf5xx_nand.c
+++ b/drivers/mtd/nand/bf5xx_nand.c
@@ -91,6 +91,41 @@ static const unsigned short bfin_nfc_pin_req[] =
91 P_NAND_ALE, 91 P_NAND_ALE,
92 0}; 92 0};
93 93
94#ifdef CONFIG_MTD_NAND_BF5XX_BOOTROM_ECC
95static uint8_t bbt_pattern[] = { 0xff };
96
97static struct nand_bbt_descr bootrom_bbt = {
98 .options = 0,
99 .offs = 63,
100 .len = 1,
101 .pattern = bbt_pattern,
102};
103
104static struct nand_ecclayout bootrom_ecclayout = {
105 .eccbytes = 24,
106 .eccpos = {
107 0x8 * 0, 0x8 * 0 + 1, 0x8 * 0 + 2,
108 0x8 * 1, 0x8 * 1 + 1, 0x8 * 1 + 2,
109 0x8 * 2, 0x8 * 2 + 1, 0x8 * 2 + 2,
110 0x8 * 3, 0x8 * 3 + 1, 0x8 * 3 + 2,
111 0x8 * 4, 0x8 * 4 + 1, 0x8 * 4 + 2,
112 0x8 * 5, 0x8 * 5 + 1, 0x8 * 5 + 2,
113 0x8 * 6, 0x8 * 6 + 1, 0x8 * 6 + 2,
114 0x8 * 7, 0x8 * 7 + 1, 0x8 * 7 + 2
115 },
116 .oobfree = {
117 { 0x8 * 0 + 3, 5 },
118 { 0x8 * 1 + 3, 5 },
119 { 0x8 * 2 + 3, 5 },
120 { 0x8 * 3 + 3, 5 },
121 { 0x8 * 4 + 3, 5 },
122 { 0x8 * 5 + 3, 5 },
123 { 0x8 * 6 + 3, 5 },
124 { 0x8 * 7 + 3, 5 },
125 }
126};
127#endif
128
94/* 129/*
95 * Data structures for bf5xx nand flash controller driver 130 * Data structures for bf5xx nand flash controller driver
96 */ 131 */
@@ -712,6 +747,11 @@ static int bf5xx_nand_probe(struct platform_device *pdev)
712 747
713 /* setup hardware ECC data struct */ 748 /* setup hardware ECC data struct */
714 if (hardware_ecc) { 749 if (hardware_ecc) {
750#ifdef CONFIG_MTD_NAND_BF5XX_BOOTROM_ECC
751 chip->badblock_pattern = &bootrom_bbt;
752 chip->ecc.layout = &bootrom_ecclayout;
753#endif
754
715 if (plat->page_size == NFC_PG_SIZE_256) { 755 if (plat->page_size == NFC_PG_SIZE_256) {
716 chip->ecc.bytes = 3; 756 chip->ecc.bytes = 3;
717 chip->ecc.size = 256; 757 chip->ecc.size = 256;