День добрый!
Скорее всего вопрос уже решен, но все же может кому другому пригодится
Столкнулся с ней при переходе на более свежее ядро. У меня были след. проблемы:
1. стартовал u-boot и не находил таблицы бад-блоков, после чего создавал ее.
2. стартовал линуксе и так же не находил таблицу бед-блоков, и так же создавал ее.
3. сектора, записанные в линуксе, читались с ошибками ECC в u-boote и наоборот.
После долгого ковыряния как обычно обнаружилось простое решение. Оказалось,
1. в ядре была определена только
nand_ecclayout , а в u-boote определяется и структура
nand_ecclayout и дескрипторы бад-блоков
nand_bbt_descr(2шт - обычная и mirror).
2. поля структуры
nand_ecclayout в линуксе и у-бууте были заполнены разными значениями
Решение - структуры
nand_ecclayout, nand_bbt_descr(2шт - обычная и mirror) должны быть одинкаковы. Вообщем-то не так важно откуда куда копировать и или
Для DM36x TI рекомендует след структуру nand_ecclayout
http://processors.wiki.ti.com/index.php/DM...Nand_ECC_layoutмои структур выглядят след образом:
Код
static struct nand_ecclayout nand_davinci_ecclayout = {
.eccbytes = 40,
.eccpos = {6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
},
.oobfree = {{2, 4}, {16, 6}, {32, 6}, {48, 6} },
};
static uint8_t nand_davinci_bbt_pattern[] = { 'B', 'b', 't', '0' };
static uint8_t nand_davinci_mirror_pattern[] = { '1', 't', 'b', 'B' };
static struct nand_bbt_descr nand_davinci_bbt_main_descr = {
.options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
| NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
.offs = 2,
.len = 4,
.veroffs = 16,
.maxblocks = 4,
.pattern = nand_davinci_bbt_pattern
};
static struct nand_bbt_descr nand_davinci_bbt_mirror_descr = {
.options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
| NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
.offs = 2,
.len = 4,
.veroffs = 16,
.maxblocks = 4,
.pattern = nand_davinci_mirror_pattern
};
//только для ядра. файл типа board_evm.c
static struct davinci_nand_pdata davinci_nand_data = {
.mask_ale = MASK_ALE,
.mask_cle = MASK_CLE,
.mask_chipsel = BIT(14),
.parts = davinci_nand_partitions,
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
.ecc_mode = NAND_ECC_HW,
.ecc_bits = 4,
.options = NAND_USE_FLASH_BBT, //NAND_SKIP_BBTSCAN NAND_USE_FLASH_BBT_NO_OOB
.ecclayout = &nand_davinci_ecclayout,
.bbt_td = &nand_davinci_bbt_main_descr,
.bbt_md = &nand_davinci_bbt_mirror_descr,
};
Сообщение отредактировал vovchk - Feb 6 2013, 12:52