diff options
| author | Mike Frysinger <vapier.adi@gmail.com> | 2008-07-30 15:35:01 -0400 |
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2008-08-01 10:42:55 -0400 |
| commit | fcb90ba7e9ba9a17ca5103be3f3ae3a446dadc14 (patch) | |
| tree | 48313298d30bd369b29ef86cc511c96497af0202 | |
| parent | cf840392e83914b9fcdbce8a8a2bc17a84cf0353 (diff) | |
[MTD] [NAND] Blackfin NFC Driver: add support for the ECC layout the Blackfin bootrom uses
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
| -rw-r--r-- | drivers/mtd/nand/Kconfig | 12 | ||||
| -rw-r--r-- | drivers/mtd/nand/bf5xx_nand.c | 40 |
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 | ||
| 112 | config 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 | |||
| 112 | config MTD_NAND_RTC_FROM4 | 124 | config 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 | ||
| 95 | static uint8_t bbt_pattern[] = { 0xff }; | ||
| 96 | |||
| 97 | static struct nand_bbt_descr bootrom_bbt = { | ||
| 98 | .options = 0, | ||
| 99 | .offs = 63, | ||
| 100 | .len = 1, | ||
| 101 | .pattern = bbt_pattern, | ||
| 102 | }; | ||
| 103 | |||
| 104 | static 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; |
