diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-08-04 19:37:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-08-04 19:37:08 -0400 |
commit | 62d1716304d1bb35ad9cdafe40efbbb6b3981cfe (patch) | |
tree | 0a650e85338c02b10502e72ae251237e73e26639 | |
parent | 4b6f23161b4e888e72671e377c32eabe9a8e62fc (diff) | |
parent | 2b372a9685a757a1d3ab30615ef42b2db7c45298 (diff) |
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
-rw-r--r-- | drivers/mtd/hyperbus/Kconfig | 3 | ||||
-rw-r--r-- | drivers/mtd/nand/raw/nand_micron.c | 14 |
2 files changed, 13 insertions, 4 deletions
diff --git a/drivers/mtd/hyperbus/Kconfig b/drivers/mtd/hyperbus/Kconfig index cff6bbd226f5..b4e3caf7d799 100644 --- a/drivers/mtd/hyperbus/Kconfig +++ b/drivers/mtd/hyperbus/Kconfig | |||
@@ -14,8 +14,9 @@ if MTD_HYPERBUS | |||
14 | 14 | ||
15 | config HBMC_AM654 | 15 | config HBMC_AM654 |
16 | tristate "HyperBus controller driver for AM65x SoC" | 16 | tristate "HyperBus controller driver for AM65x SoC" |
17 | depends on ARM64 || COMPILE_TEST | ||
17 | select MULTIPLEXER | 18 | select MULTIPLEXER |
18 | select MUX_MMIO | 19 | imply MUX_MMIO |
19 | help | 20 | help |
20 | This is the driver for HyperBus controller on TI's AM65x and | 21 | This is the driver for HyperBus controller on TI's AM65x and |
21 | other SoCs | 22 | other SoCs |
diff --git a/drivers/mtd/nand/raw/nand_micron.c b/drivers/mtd/nand/raw/nand_micron.c index 1622d3145587..8ca9fad6e6ad 100644 --- a/drivers/mtd/nand/raw/nand_micron.c +++ b/drivers/mtd/nand/raw/nand_micron.c | |||
@@ -390,6 +390,14 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip) | |||
390 | (chip->id.data[4] & MICRON_ID_INTERNAL_ECC_MASK) != 0x2) | 390 | (chip->id.data[4] & MICRON_ID_INTERNAL_ECC_MASK) != 0x2) |
391 | return MICRON_ON_DIE_UNSUPPORTED; | 391 | return MICRON_ON_DIE_UNSUPPORTED; |
392 | 392 | ||
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 | */ | ||
393 | ret = micron_nand_on_die_ecc_setup(chip, true); | 401 | ret = micron_nand_on_die_ecc_setup(chip, true); |
394 | if (ret) | 402 | if (ret) |
395 | return MICRON_ON_DIE_UNSUPPORTED; | 403 | return MICRON_ON_DIE_UNSUPPORTED; |
@@ -398,13 +406,13 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip) | |||
398 | if (ret) | 406 | if (ret) |
399 | return MICRON_ON_DIE_UNSUPPORTED; | 407 | return MICRON_ON_DIE_UNSUPPORTED; |
400 | 408 | ||
401 | if (!(id[4] & MICRON_ID_ECC_ENABLED)) | ||
402 | return MICRON_ON_DIE_UNSUPPORTED; | ||
403 | |||
404 | ret = micron_nand_on_die_ecc_setup(chip, false); | 409 | ret = micron_nand_on_die_ecc_setup(chip, false); |
405 | if (ret) | 410 | if (ret) |
406 | return MICRON_ON_DIE_UNSUPPORTED; | 411 | return MICRON_ON_DIE_UNSUPPORTED; |
407 | 412 | ||
413 | if (!(id[4] & MICRON_ID_ECC_ENABLED)) | ||
414 | return MICRON_ON_DIE_UNSUPPORTED; | ||
415 | |||
408 | ret = nand_readid_op(chip, 0, id, sizeof(id)); | 416 | ret = nand_readid_op(chip, 0, id, sizeof(id)); |
409 | if (ret) | 417 | if (ret) |
410 | return MICRON_ON_DIE_UNSUPPORTED; | 418 | return MICRON_ON_DIE_UNSUPPORTED; |