|
@@ -92,10 +92,23 @@ static void samsung_nand_decode_id(struct nand_chip *chip)
|
|
|
} else {
|
|
|
nand_decode_ext_id(chip);
|
|
|
|
|
|
- /* Datasheet values for SLC Samsung K9F4G08U0D-S[I|C]B0(T00) */
|
|
|
- if (nand_is_slc(chip) && chip->id.data[1] == 0xDC) {
|
|
|
- chip->ecc_step_ds = 512;
|
|
|
- chip->ecc_strength_ds = 1;
|
|
|
+ if (nand_is_slc(chip)) {
|
|
|
+ switch (chip->id.data[1]) {
|
|
|
+ /* K9F4G08U0D-S[I|C]B0(T00) */
|
|
|
+ case 0xDC:
|
|
|
+ chip->ecc_step_ds = 512;
|
|
|
+ chip->ecc_strength_ds = 1;
|
|
|
+ break;
|
|
|
+
|
|
|
+ /* K9F1G08U0E 21nm chips do not support subpage write */
|
|
|
+ case 0xF1:
|
|
|
+ if (chip->id.len > 4 &&
|
|
|
+ (chip->id.data[4] & GENMASK(1, 0)) == 0x1)
|
|
|
+ chip->options |= NAND_NO_SUBPAGE_WRITE;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|