Commit 62d17163 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 4b6f2316 2b372a96
...@@ -14,8 +14,9 @@ if MTD_HYPERBUS ...@@ -14,8 +14,9 @@ if MTD_HYPERBUS
config HBMC_AM654 config HBMC_AM654
tristate "HyperBus controller driver for AM65x SoC" tristate "HyperBus controller driver for AM65x SoC"
depends on ARM64 || COMPILE_TEST
select MULTIPLEXER select MULTIPLEXER
select MUX_MMIO imply MUX_MMIO
help help
This is the driver for HyperBus controller on TI's AM65x and This is the driver for HyperBus controller on TI's AM65x and
other SoCs other SoCs
......
...@@ -390,6 +390,14 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip) ...@@ -390,6 +390,14 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip)
(chip->id.data[4] & MICRON_ID_INTERNAL_ECC_MASK) != 0x2) (chip->id.data[4] & MICRON_ID_INTERNAL_ECC_MASK) != 0x2)
return MICRON_ON_DIE_UNSUPPORTED; return MICRON_ON_DIE_UNSUPPORTED;
/*
* It seems that there are devices which do not support ECC officially.
* At least the MT29F2G08ABAGA / MT29F2G08ABBGA devices supports
* enabling the ECC feature but don't reflect that to the READ_ID table.
* So we have to guarantee that we disable the ECC feature directly
* after we did the READ_ID table command. Later we can evaluate the
* ECC_ENABLE support.
*/
ret = micron_nand_on_die_ecc_setup(chip, true); ret = micron_nand_on_die_ecc_setup(chip, true);
if (ret) if (ret)
return MICRON_ON_DIE_UNSUPPORTED; return MICRON_ON_DIE_UNSUPPORTED;
...@@ -398,13 +406,13 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip) ...@@ -398,13 +406,13 @@ static int micron_supports_on_die_ecc(struct nand_chip *chip)
if (ret) if (ret)
return MICRON_ON_DIE_UNSUPPORTED; return MICRON_ON_DIE_UNSUPPORTED;
if (!(id[4] & MICRON_ID_ECC_ENABLED))
return MICRON_ON_DIE_UNSUPPORTED;
ret = micron_nand_on_die_ecc_setup(chip, false); ret = micron_nand_on_die_ecc_setup(chip, false);
if (ret) if (ret)
return MICRON_ON_DIE_UNSUPPORTED; return MICRON_ON_DIE_UNSUPPORTED;
if (!(id[4] & MICRON_ID_ECC_ENABLED))
return MICRON_ON_DIE_UNSUPPORTED;
ret = nand_readid_op(chip, 0, id, sizeof(id)); ret = nand_readid_op(chip, 0, id, sizeof(id));
if (ret) if (ret)
return MICRON_ON_DIE_UNSUPPORTED; return MICRON_ON_DIE_UNSUPPORTED;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment