lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1483448495-31607-1-git-send-email-boris.brezillon@free-electrons.com>
Date:   Tue,  3 Jan 2017 14:01:20 +0100
From:   Boris Brezillon <boris.brezillon@...e-electrons.com>
To:     Boris Brezillon <boris.brezillon@...e-electrons.com>,
        Richard Weinberger <richard@....at>,
        linux-mtd@...ts.infradead.org
Cc:     David Woodhouse <dwmw2@...radead.org>,
        Brian Norris <computersforpeace@...il.com>,
        Marek Vasut <marek.vasut@...il.com>,
        Cyrille Pitchen <cyrille.pitchen@...el.com>,
        Icenowy Zheng <icenowy@...c.xyz>, Valdis.Kletnieks@...edu,
        linux-kernel@...r.kernel.org
Subject: [PATCH v4 00/15] mtd: nand: allow vendor specific detection/initialization

Hello,

This patch series is a step forward in supporting vendor-specific
functionalities.
This series is mainly moving vendor-specific initialization or
detection code out of the core, but also introduces an infrastructure
allowing support for vendor-specific features.

While those features might seem useless to most users, some of them are
actually required on modern MLC/TLC NANDs (this is the case of read-retry
support, which AFAICT has not been standardized by the JEDEC consortium).

Now, let's detail what's inside this patch-set.

Patches 1 to 4 are simple reworks simplifying auto-detection function
prototypes, and clarifying their purpose.

Patch 5 is introducing the vendor-specific initialization
infrastructure.

Patch 6 is removing the MTD_NAND_IDS Kconfig option to avoid creating
a nand_ids.ko module when MTD_NAND is enabled as a module. This prevents
a future cross-dependency between nand.ko where all vendor specific
code will rely and nand_ids.ko which will reference vendor-specific ops
in its manufacturer table, which in turn is referenced by the core code
linked in nand.ko.

Patches 7 to 12 are moving vendor-specific code into their respective
nand_<vendor>.c files.

Patch 13 is taking a patch proposed by Hans and adding support for ECC
requirements extraction from the samsung extended IDs. It seems to apply
to all Samsung MLCs, but even if it's not the case, the detection code
should be improved to support the new formats.

Patch 14 is adding support for advanced NAND ID decoding to the Hynix
driver (OOB size, ECC and scrambling requirements extraction). Again
this detection code might be incomplete, but I'd like people to extend
it if required rather than adding new full-id entries in the nand_ids
table.

And finally, patch 15 is showing how useful this vendor-specific stuff
can be by implementing read-retry support for Hynix 1x nm MLCs. And
trust me, you don't want to try using such a NAND without read-retry
support ;).

As always, I'm open to any suggestion to improve this vendor-specific
infrastructure, so please review the code :).

Thanks,

Boris

Changes since v3:
- Fix coding style issues 

Changes since v2:
- Fix nand_command_lp() implementation to allow reading the ID
  after switching from ->cmdfunc() from nand_command() to
  nand_command_lp().
- Include slab.h in hynix_nand.c
- Avoid selecting/unselecting the NAND chip in Hynix ->init()
  hook (the chip is already selected by the core)
- Add wrappers to call the ->detect() and ->init() hooks

Changes since v1:
- split detection and initialization steps to avoid keeping
  information retrieved by nand_decode_ext_id() if it's not
  appropriate (Aleksei reported a bug where NAND_BUSWIDTH_16
  was set by nand_decode_ext_id() and not cleared by the
  samsung ->init() function).
  The new approach is to call ->detect() if it's provided and
  fallback to nand_decode_ext_id() if it's not. ->detect()
  implementation should can call nand_decode_ext_id() if needed.

Boris Brezillon (14):
  mtd: nand: get rid of the mtd parameter in all auto-detection
    functions
  mtd: nand: store nand ID in struct nand_chip
  mtd: nand: get rid of busw parameter
  mtd: nand: rename nand_get_flash_type() into nand_detect()
  mtd: nand: add manufacturer specific initialization/detection steps
  mtd: nand: kill the MTD_NAND_IDS Kconfig option
  mtd: nand: move Samsung specific init/detection logic in
    nand_samsung.c
  mtd: nand: move Hynix specific init/detection logic in nand_hynix.c
  mtd: nand: move Toshiba specific init/detection logic in
    nand_toshiba.c
  mtd: nand: move Micron specific init logic in nand_micron.c
  mtd: nand: move AMD/Spansion specific init/detection logic in
    nand_amd.c
  mtd: nand: move Macronix specific initialization in nand_macronix.c
  mtd: nand: hynix: rework NAND ID decoding to extract more information
  mtd: nand: hynix: add read-retry support for 1x nm MLC NANDs

Hans de Goede (1):
  mtd: nand: samsung: retrieve ECC requirements from extended ID

 arch/cris/arch-v32/drivers/Kconfig |   1 -
 drivers/mtd/nand/Kconfig           |   4 -
 drivers/mtd/nand/Makefile          |   9 +-
 drivers/mtd/nand/nand_amd.c        |  48 +++
 drivers/mtd/nand/nand_base.c       | 381 ++++++++--------------
 drivers/mtd/nand/nand_hynix.c      | 626 +++++++++++++++++++++++++++++++++++++
 drivers/mtd/nand/nand_ids.c        |  21 +-
 drivers/mtd/nand/nand_macronix.c   |  27 ++
 drivers/mtd/nand/nand_micron.c     |  83 +++++
 drivers/mtd/nand/nand_samsung.c    | 109 +++++++
 drivers/mtd/nand/nand_toshiba.c    |  48 +++
 include/linux/mtd/nand.h           |  68 ++--
 12 files changed, 1143 insertions(+), 282 deletions(-)
 create mode 100644 drivers/mtd/nand/nand_amd.c
 create mode 100644 drivers/mtd/nand/nand_hynix.c
 create mode 100644 drivers/mtd/nand/nand_macronix.c
 create mode 100644 drivers/mtd/nand/nand_micron.c
 create mode 100644 drivers/mtd/nand/nand_samsung.c
 create mode 100644 drivers/mtd/nand/nand_toshiba.c

-- 
2.7.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ