Lines Matching +full:chip +full:- +full:id
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Author: Boris Brezillon <boris.brezillon@free-electrons.com>
11 static void samsung_nand_decode_id(struct nand_chip *chip) in samsung_nand_decode_id() argument
13 struct nand_device *base = &chip->base; in samsung_nand_decode_id()
15 struct mtd_info *mtd = nand_to_mtd(chip); in samsung_nand_decode_id()
18 memorg = nanddev_get_memorg(&chip->base); in samsung_nand_decode_id()
20 /* New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44) */ in samsung_nand_decode_id()
21 if (chip->id.len == 6 && !nand_is_slc(chip) && in samsung_nand_decode_id()
22 chip->id.data[5] != 0x00) { in samsung_nand_decode_id()
23 u8 extid = chip->id.data[3]; in samsung_nand_decode_id()
26 memorg->pagesize = 2048 << (extid & 0x03); in samsung_nand_decode_id()
27 mtd->writesize = memorg->pagesize; in samsung_nand_decode_id()
34 memorg->oobsize = 128; in samsung_nand_decode_id()
37 memorg->oobsize = 218; in samsung_nand_decode_id()
40 memorg->oobsize = 400; in samsung_nand_decode_id()
43 memorg->oobsize = 436; in samsung_nand_decode_id()
46 memorg->oobsize = 512; in samsung_nand_decode_id()
49 memorg->oobsize = 640; in samsung_nand_decode_id()
55 * a different extended ID format, and we should find in samsung_nand_decode_id()
62 mtd->oobsize = memorg->oobsize; in samsung_nand_decode_id()
66 memorg->pages_per_eraseblock = (128 * 1024) << in samsung_nand_decode_id()
69 memorg->pagesize; in samsung_nand_decode_id()
70 mtd->erasesize = (128 * 1024) << in samsung_nand_decode_id()
73 /* Extract ECC requirements from 5th id byte*/ in samsung_nand_decode_id()
74 extid = (chip->id.data[4] >> 4) & 0x07; in samsung_nand_decode_id()
96 nand_decode_ext_id(chip); in samsung_nand_decode_id()
98 if (nand_is_slc(chip)) { in samsung_nand_decode_id()
99 switch (chip->id.data[1]) { in samsung_nand_decode_id()
100 /* K9F4G08U0D-S[I|C]B0(T00) */ in samsung_nand_decode_id()
108 if (chip->id.len > 4 && in samsung_nand_decode_id()
109 (chip->id.data[4] & GENMASK(1, 0)) == 0x1) in samsung_nand_decode_id()
110 chip->options |= NAND_NO_SUBPAGE_WRITE; in samsung_nand_decode_id()
121 static int samsung_nand_init(struct nand_chip *chip) in samsung_nand_init() argument
123 struct mtd_info *mtd = nand_to_mtd(chip); in samsung_nand_init()
125 if (mtd->writesize > 512) in samsung_nand_init()
126 chip->options |= NAND_SAMSUNG_LP_OPTIONS; in samsung_nand_init()
128 if (!nand_is_slc(chip)) in samsung_nand_init()
129 chip->options |= NAND_BBM_LASTPAGE; in samsung_nand_init()
131 chip->options |= NAND_BBM_FIRSTPAGE | NAND_BBM_SECONDPAGE; in samsung_nand_init()