Skip to content

Commit 62d1716

Browse files
committed
Merge tag 'mtd/fixes-for-5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux
Pull MTD fixes from Miquel Raynal: "NAND: - Fix Micron driver as some chips enable internal ECC correction during their discovery while they advertize they do not have any. Hyperbus: - Restrict the build to only ARM64 SoCs (and compile testing) which is what should have been done since the beginning. - Fix Kconfig issue by selection something instead of implying it" * tag 'mtd/fixes-for-5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux: mtd: hyperbus: Add hardware dependency to AM654 driver mtd: hyperbus: Kconfig: Fix HBMC_AM654 dependencies mtd: rawnand: micron: handle on-die "ECC-off" devices correctly
2 parents 4b6f231 + 2b372a9 commit 62d1716

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

drivers/mtd/hyperbus/Kconfig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ if MTD_HYPERBUS
1414

1515
config HBMC_AM654
1616
tristate "HyperBus controller driver for AM65x SoC"
17+
depends on ARM64 || COMPILE_TEST
1718
select MULTIPLEXER
18-
select MUX_MMIO
19+
imply MUX_MMIO
1920
help
2021
This is the driver for HyperBus controller on TI's AM65x and
2122
other SoCs

drivers/mtd/nand/raw/nand_micron.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,14 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip)
390390
(chip->id.data[4] & MICRON_ID_INTERNAL_ECC_MASK) != 0x2)
391391
return MICRON_ON_DIE_UNSUPPORTED;
392392

393+
/*
394+
* It seems that there are devices which do not support ECC officially.
395+
* At least the MT29F2G08ABAGA / MT29F2G08ABBGA devices supports
396+
* enabling the ECC feature but don't reflect that to the READ_ID table.
397+
* So we have to guarantee that we disable the ECC feature directly
398+
* after we did the READ_ID table command. Later we can evaluate the
399+
* ECC_ENABLE support.
400+
*/
393401
ret = micron_nand_on_die_ecc_setup(chip, true);
394402
if (ret)
395403
return MICRON_ON_DIE_UNSUPPORTED;
@@ -398,13 +406,13 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip)
398406
if (ret)
399407
return MICRON_ON_DIE_UNSUPPORTED;
400408

401-
if (!(id[4] & MICRON_ID_ECC_ENABLED))
402-
return MICRON_ON_DIE_UNSUPPORTED;
403-
404409
ret = micron_nand_on_die_ecc_setup(chip, false);
405410
if (ret)
406411
return MICRON_ON_DIE_UNSUPPORTED;
407412

413+
if (!(id[4] & MICRON_ID_ECC_ENABLED))
414+
return MICRON_ON_DIE_UNSUPPORTED;
415+
408416
ret = nand_readid_op(chip, 0, id, sizeof(id));
409417
if (ret)
410418
return MICRON_ON_DIE_UNSUPPORTED;

0 commit comments

Comments
 (0)