platform/kernel/linux-rpi.git
7 years agomtd: dataflash: Replace C99 types with their kernel counterparts
Andrey Smirnov [Fri, 21 Apr 2017 16:30:21 +0000 (09:30 -0700)]
mtd: dataflash: Replace C99 types with their kernel counterparts

No functional change intended.

Cc: cphealy@gmail.com
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Brian Norris <computersforpeace@gmail.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>
Cc: Marek Vasut <marek.vasut@gmail.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Cc: linux-kernel@vger.kernel.org
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Tested-by: Chris Healy <cphealy@gmail.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agoMAINTAINERS: Update NAND subsystem git repositories
Boris Brezillon [Wed, 3 May 2017 06:48:55 +0000 (08:48 +0200)]
MAINTAINERS: Update NAND subsystem git repositories

NAND branches are now hosted on MTD repos, nand/next is on l2-mtd and
nand/fixes will be on linux-mtd.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
[Brian: added branch names]
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: nand: gpio: update binding
Christophe Leroy [Wed, 3 May 2017 12:18:24 +0000 (14:18 +0200)]
mtd: nand: gpio: update binding

This patch updates the binding documentation in accordance with
commit 44dd182861f99 ("mtd: nand: gpio: make nCE GPIO optional")

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reported-by: Brian Norris <computersforpeace@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: nand: add ooblayout for old hamming layout
Alexander Couzens [Tue, 2 May 2017 10:19:00 +0000 (12:19 +0200)]
mtd: nand: add ooblayout for old hamming layout

The old 1-bit hamming layout requires ECC data to be placed at a
fixed offset, and not necessarily at the end of the OOB area.
Add this old layout back in order to fix legacy setups.

Fixes: 41b207a70d3a ("mtd: nand: implement the default mtd_ooblayout_ops")
Cc: <stable@vger.kernel.org>
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: oxnas_nand: Allocating more than necessary in probe()
Dan Carpenter [Tue, 25 Apr 2017 09:19:49 +0000 (12:19 +0300)]
mtd: oxnas_nand: Allocating more than necessary in probe()

We only need to allocate sizeof(struct oxnas_nand_ctrl) which is 192
bytes and not sizeof(struct nand_chip) which is a much larger 3056
bytes.

Fixes: 668592492409 ("mtd: nand: Add OX820 NAND Support")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agodt-bindings: mtd: Document the STM32 QSPI bindings
Ludovic Barre [Thu, 13 Apr 2017 17:15:56 +0000 (19:15 +0200)]
dt-bindings: mtd: Document the STM32 QSPI bindings

This patch adds documentation of device tree bindings for the STM32
QSPI controller.

Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agoMerge tag 'spi-nor/for-4.12-v2' of git://github.com/spi-nor/linux into MTD
Brian Norris [Tue, 2 May 2017 00:08:10 +0000 (17:08 -0700)]
Merge tag 'spi-nor/for-4.12-v2' of git://github.com/spi-nor/linux into MTD

From Cyrille:
"""
This pull request contains the following notable changes:
- fixes in the hisi SPI controller driver.
- fixes in the intel SPI controller driver.
- fixes in the Mediatek SPI controller driver.
- fixes to some SPI flash memories not supported the Chip Erase command.
- add support to some new memory parts (Winbond, Macronix, Micron, ESMT).
- add new driver for the STM32 QSPI controller.
"""

7 years agoMerge tag 'nand/for-4.12' of github.com:linux-nand/linux into MTD
Brian Norris [Mon, 1 May 2017 20:36:44 +0000 (13:36 -0700)]
Merge tag 'nand/for-4.12' of github.com:linux-nand/linux into MTD

From Boris:
"""
This pull request contains:

 - some minor fixes/improvements on existing drivers (fsmc, gpio, ifc,
   davinci, brcmnand, omap)
 - a huge cleanup/rework of the denali driver accompanied with core
   fixes/improvements to simplify the driver code
 - a complete rewrite of the atmel driver to support new DT bindings
   make future evolution easier
 - the addition of per-vendor detection/initialization steps to avoid
   extending the nand_ids table with more extended-id entries
"""

7 years agomtd: mtk-nor: set controller's address width according to nor flash
Guochun Mao [Wed, 5 Apr 2017 08:37:42 +0000 (16:37 +0800)]
mtd: mtk-nor: set controller's address width according to nor flash

When nor's size larger than 16MByte, nor's address width maybe
set to 3 or 4, and controller should change address width according
to nor's setting.

Signed-off-by: Guochun Mao <guochun.mao@mediatek.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: spi-nor: add driver for STM32 quad spi flash controller
Ludovic Barre [Thu, 13 Apr 2017 17:15:57 +0000 (19:15 +0200)]
mtd: spi-nor: add driver for STM32 quad spi flash controller

The quadspi is a specialized communication interface targeting single,
dual or quad SPI Flash memories.

It can operate in any of the following modes:
-indirect mode: all the operations are performed using the quadspi
 registers
-read memory-mapped mode: the external Flash memory is mapped to the
 microcontroller address space and is seen by the system as if it was
 an internal memory

Signed-off-by: Ludovic Barre <ludovic.barre@st.com>
Reviewed-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: nand: brcmnand: Check flash #WP pin status before nand erase/program
Kamal Dasu [Fri, 3 Mar 2017 21:16:53 +0000 (16:16 -0500)]
mtd: nand: brcmnand: Check flash #WP pin status before nand erase/program

On brcmnand controller v6.x and v7.x, the #WP pin is controlled through
the NAND_WP bit in CS_SELECT register.

The driver currently assumes that toggling the #WP pin is
instantaneously enabling/disabling write-protection, but it actually
takes some time to propagate the new state to the internal NAND chip
logic. This behavior is sometime causing data corruptions when an
erase/program operation is executed before write-protection has really
been disabled.

Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
Signed-off-by: Kamal Dasu <kdasu.kdev@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: davinci: add comment on NAND subpage write status on keystone
Sekhar Nori [Thu, 30 Mar 2017 14:39:30 +0000 (20:09 +0530)]
mtd: nand: davinci: add comment on NAND subpage write status on keystone

Add a comment clarifying that NAND subpage write on keystone works,
but is not being enabled in the interest of backward compatibility.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: omap2: Fix partition creation via cmdline mtdparts
Roger Quadros [Thu, 30 Mar 2017 07:37:50 +0000 (10:37 +0300)]
mtd: nand: omap2: Fix partition creation via cmdline mtdparts

commit c9711ec5250b ("mtd: nand: omap: Clean up device tree support")
caused the parent device name to be changed from "omap2-nand.0"
to "<base address>.nand"  (e.g. 30000000.nand on omap3 platforms).
This caused mtd->name to be changed as well. This breaks partition
creation via mtdparts passed by u-boot as it uses "omap2-nand.0"
for the mtd-id.

Fix this by explicitly setting the mtd->name to "omap2-nand.<CS number>"
if it isn't already set by nand_set_flash_node(). CS number is the
NAND controller instance ID.

Fixes: c9711ec5250b ("mtd: nand: omap: Clean up device tree support")
Cc: <stable@vger.kernel.org> # 4.7+
Reported-by: Leto Enrico <enrico.leto@siemens.com>
Reported-by: Adam Ford <aford173@gmail.com>
Suggested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Tested-by: Adam Ford <aford173@gmail.com>
Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: NULL terminate a of_device_id table
Christophe Jaillet [Tue, 11 Apr 2017 05:22:52 +0000 (07:22 +0200)]
mtd: nand: NULL terminate a of_device_id table

of_device_id tables should be NULL terminated.

Fixes: 07b23e3db9ed ("mtd: nand: Cleanup/rework the atmel_nand driver")

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Fix a couple error codes
Dan Carpenter [Tue, 4 Apr 2017 08:15:46 +0000 (11:15 +0300)]
mtd: nand: Fix a couple error codes

We accidentally return 1 on error instead of proper error codes.

Fixes: 07b23e3db9ed ("mtd: nand: Cleanup/rework the atmel_nand driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: allow drivers to request minimum alignment for passed buffer
Masahiro Yamada [Thu, 30 Mar 2017 08:15:05 +0000 (17:15 +0900)]
mtd: nand: allow drivers to request minimum alignment for passed buffer

In some cases, nand_do_{read,write}_ops is passed with unaligned
ops->datbuf.  Drivers using DMA will be unhappy about unaligned
buffer.

The new struct member, buf_align, represents the minimum alignment
the driver require for the buffer.  If the buffer passed from the
upper MTD layer does not have enough alignment, nand_do_*_ops will
use bufpoi.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: allocate aligned buffers if NAND_OWN_BUFFERS is unset
Masahiro Yamada [Thu, 30 Mar 2017 08:15:04 +0000 (17:15 +0900)]
mtd: nand: allocate aligned buffers if NAND_OWN_BUFFERS is unset

Some NAND controllers are using DMA engine requiring a specific
buffer alignment.  The core provides no guarantee on the nand_buffers
pointers, which forces some drivers to allocate their own buffers
and pass the NAND_OWN_BUFFERS flag.

Rework the nand_buffers allocation logic to allocate each buffer
independently.  This should make most NAND controllers/DMA engine
happy, and allow us to get rid of these custom buf allocation in
NAND controller drivers.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: allow to override revision number
Masahiro Yamada [Thu, 30 Mar 2017 06:45:57 +0000 (15:45 +0900)]
mtd: nand: denali: allow to override revision number

Commit 271707b1d817 ("mtd: nand: denali: max_banks calculation
changed in revision 5.1") added a revision check to support the
new max_banks encoding.  Its git-log states "The encoding of
max_banks changed in Denali revision 5.1".

There are exceptional cases, for example, the revision register on
some UniPhier SoCs says the IP is 5.0 but the max_banks is encoded
in the new format.

This IP updates the resister specification from time to time (often
breaking the backward compatibility), but the revision number is not
incremented correctly.

The max_banks is not only the case that needs revision checking.
Let's allow to override an incorrect revision number.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali_dt: use pdev instead of ofdev for platform_device
Masahiro Yamada [Thu, 30 Mar 2017 06:45:56 +0000 (15:45 +0900)]
mtd: nand: denali_dt: use pdev instead of ofdev for platform_device

"pdev" is much more often used to point a platform_device, so this
will help the driver code look consistent across the kernel.

While we are here, fix "line over 80 characters" coding style
violations.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali_dt: remove dma-mask DT property
Masahiro Yamada [Thu, 30 Mar 2017 06:45:55 +0000 (15:45 +0900)]
mtd: nand: denali_dt: remove dma-mask DT property

The driver sets appropriate DMA mask.  Delete the "dma-mask" DT
property.  See [1] for negative comments for this binding.

[1] https://lkml.org/lkml/2016/2/8/57

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: support 64bit capable DMA engine
Masahiro Yamada [Thu, 30 Mar 2017 06:45:54 +0000 (15:45 +0900)]
mtd: nand: denali: support 64bit capable DMA engine

The current driver only supports the DMA engine up to 32 bit
physical address, but there also exists 64 bit capable DMA engine
for this IP.

The data DMA setup sequence is completely different, so I added the
64 bit DMA code as a new function denali_setup_dma64().  The 32 bit
one has been renamed to denali_setup_dma32().

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali_dt: enable HW_ECC_FIXUP for Altera SOCFPGA variant
Masahiro Yamada [Thu, 30 Mar 2017 06:45:53 +0000 (15:45 +0900)]
mtd: nand: denali_dt: enable HW_ECC_FIXUP for Altera SOCFPGA variant

There are various customizable parameters, so several variants for
this IP.  A generic compatible like "denali,denali-nand-dt" is
useless.  Moreover, there are multiple things wrong with this string.
(Refer to Rob's comment [1])

The "denali,denali-nand-dt" was added by Altera for the SOCFPGA port.
Replace it with a more specific string "altr,socfpga-denali-nand".
There are no users (in upstream) of the old compatible string.

The Denali IP on SOCFPGA incorporates the hardware ECC fixup engine.
So, this capability should be associated with the compatible.

[1] https://lkml.org/lkml/2016/12/1/450

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: support HW_ECC_FIXUP capability
Masahiro Yamada [Thu, 30 Mar 2017 06:45:52 +0000 (15:45 +0900)]
mtd: nand: denali: support HW_ECC_FIXUP capability

Some old versions of the Denali IP (perhaps used only for Intel?)
detects ECC errors and provides correct data via a register, but
does not touch the transferred data.  So, the software must fixup
the data in the buffer according to the provided ECC correction
information.

Newer versions perform ECC correction before transferring the data.
No more software intervention is needed.  The ECC_ERROR_ADDRESS and
ECC_CORRECTION_INFO registers were deprecated.  Instead, the number
of corrected bit-flips are reported via the ECC_COR_INFO register.
When an uncorrectable ECC error happens, a status flag is set to the
INTR_STATUS and ECC_COR_INFO registers.

As is often the case with this IP, the register view of INTR_STATUS
had broken compatibility.

For older versions (SW ECC fixup):
  bit 0:  ECC_TRANSACTION_DONE
  bit 1:  ECC_ERR

For newer versions (HW ECC fixup):
  bit 0:  ECC_UNCOR_ERR
  bit 1:  Reserved

Due to this difference, the irq_mask must be fixed too.

The existing handle_ecc() has been renamed to denali_sw_ecc_fixup()
for clarification.

What is unfortunate with this feature is we can not know the total
number of corrected/uncorrected errors in a page.  The register
ECC_COR_INFO reports the maximum of per-sector bitflips.  This is
useful for ->read_page return value, but ecc_stats.{corrected,failed}
increments may not be precise.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: fix erased page checking
Masahiro Yamada [Thu, 30 Mar 2017 06:45:51 +0000 (15:45 +0900)]
mtd: nand: denali: fix erased page checking

This part is wrong in multiple ways:

[1] is_erased() is called against "buf" twice, so the OOB area is
not checked at all.  The second call should check chip->oob_poi.

[2] This code block is nested by double "if (check_erase_page)".
The inner one is redundant.

[3] The ECC_ERROR_ADDRESS register reports which sector(s) had
uncorrectable ECC errors.  It is pointless to check the whole page
if only one sector contains errors.

[4] Unfortunately, the Denali ECC correction engine has already
manipulated the data buffer before it decides the bitflips are
uncorrectable.  That is, not all of the data are 0xFF after an
erased page is processed by the ECC engine.  The current is_erased()
helper could report false-positive ECC errors.  Actually, a certain
mount of bitflips are allowed in an erased page.  The core framework
provides nand_check_erased_ecc_chunk() that takes the threshold into
account.  Let's use this.

This commit reworks the code to solve those problems.

Please note the erased page checking is implemented as a separate
helper function instead of embedding it in the loop in handle_ecc().
The reason is that OOB data are needed for the erased page checking,
but the controller can not start a new transaction until all ECC
error information is read out from the registers.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: fix bitflips calculation in handle_ecc()
Masahiro Yamada [Thu, 30 Mar 2017 06:45:50 +0000 (15:45 +0900)]
mtd: nand: denali: fix bitflips calculation in handle_ecc()

This function is wrong in multiple ways:

[1] Counting corrected bytes instead of corrected bits.

The following code is counting the number of corrected _bytes_.

    /* correct the ECC error */
    buf[offset] ^= err_cor_value;
    mtd->ecc_stats.corrected++;
    bitflips++;

What the core framework expects is the number of corrected _bits_.
They can be different if multiple bitflips occur within one byte.

[2] total number of errors instead of max of per-sector errors

The core framework expects that corrected errors are counted per
sector, then the max value should be taken.  The current code simply
iterates over the whole page, i.e. counts the total number of
correction in the page.  This means "too many bitflips" is triggered
earlier than it should be, i.e. the NAND device is worn out sooner.

Besides those bugs, this function is unreadable due to the deep
nesting.  Notice the whole code in this function is wrapped in
if (irq_status & INTR__ECC_ERR), so this conditional can be moved
out of the function.  Also, use shorter names for local variables.

Re-work the function to fix all the issues.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: remove meaningless pipeline read-ahead operation
Masahiro Yamada [Thu, 30 Mar 2017 06:45:49 +0000 (15:45 +0900)]
mtd: nand: denali: remove meaningless pipeline read-ahead operation

The pipeline read-ahead function of the Denali IP enables continuous
reading from the device; while data is being read out by a CPU, the
controller maintains additional commands for streaming data from the
device.  This will reduce the latency of the second page or later.

This feature is obviously no help for per-page accessors of Linux
NAND driver interface.

In the current implementation, the pipeline command is issued to
load a single page, then data are read out immediately.  The use of
the pipeline operation is not adding any advantage, but just adding
complexity to the code.  Remove.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: allow to override mtd->name from label DT property
Masahiro Yamada [Thu, 30 Mar 2017 06:45:48 +0000 (15:45 +0900)]
mtd: nand: denali: allow to override mtd->name from label DT property

Commit 28309572aac4 ("mtd: name the mtd device with an optional
label property") allow us to identify a chip in a user-friendly way.

If nand_set_flash_node() picks up the "label" from DT, let's respect
it.  Otherwise, let it fallback to the current name "denali-nand".

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Suggested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: relax ecc.read_page() return value for uncorrectable ECC
Masahiro Yamada [Thu, 30 Mar 2017 06:45:47 +0000 (15:45 +0900)]
mtd: nand: relax ecc.read_page() return value for uncorrectable ECC

The comment for ecc.read_page() requires that it should return
"0 if bitflips uncorrectable".

Actually, drivers could return positive values when uncorrectable
bitflips occur.  For example, nand_read_page_swecc() is the case.
If ecc.correct() returns -EBADMSG for the first ECC sector, and
a positive value for the second one, nand_read_page_swecc() returns
a positive max_bitflips and increments ecc_stats.failed for the same
page.

The requirement can be relaxed by tweaking nand_do_read_ops().
Move the max_bitflips calculation below the retry.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Suggested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Remove unused chip->write_page() hook
Boris Brezillon [Thu, 16 Mar 2017 08:02:42 +0000 (09:02 +0100)]
mtd: nand: Remove unused chip->write_page() hook

The last/only user of the chip->write_page() hook (the Atmel NAND
controller driver) has been reworked and is no longer specifying a custom
->write_page() implementation.
Drop this hook before someone else start abusing it.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
7 years agomtd: nand: atmel: Document the new DT bindings
Boris Brezillon [Thu, 16 Mar 2017 08:02:41 +0000 (09:02 +0100)]
mtd: nand: atmel: Document the new DT bindings

The old NAND bindings were not exactly describing the hardware topology
and were preventing definitions of several NAND chips under the same
NAND controller.

New bindings address these limitations and should be preferred over the
old ones for new SoCs/boards.
Old bindings are still supported for backward compatibility but are
marked deprecated in the doc.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Acked-by: Rob Herring <robh@kernel.org>
7 years agomtd: nand: Cleanup/rework the atmel_nand driver
Boris Brezillon [Thu, 16 Mar 2017 08:02:40 +0000 (09:02 +0100)]
mtd: nand: Cleanup/rework the atmel_nand driver

This is a complete rewrite of the driver whose main purpose is to
support the new DT representation where the NAND controller node is now
really visible in the DT and appears under the EBI bus. With this new
representation, we can add other devices under the EBI bus without
risking pinmuxing conflicts (the NAND controller is under the EBI
bus logic and as such, share some of its pins with other devices
connected on this bus).

Even though the goal of this rework was not necessarily to add new
features, the new driver has been designed with this in mind. With a
clearer separation between the different blocks and different IP
revisions, adding new functionalities should be easier (we already
have plans to support SMC timing configuration so that we no longer
have to rely on the configuration done by the bootloader/bootstrap).

Also note that we no longer have a custom ->cmdfunc() implementation,
which means we can now benefit from new features added in the core
implementation for free (support for new NAND operations for example).

The last thing that we gain with this rework is support for multi-chips
and multi-dies chips, thanks to the clean NAND controller <-> NAND
devices representation.

During this transition we also dropped support for AVR32 SoCs which
should soon disappear from mainline (removal of the AVR32 arch is
planned for 4.12).

This new driver has been tested on several platforms (at91sam9261,
at91sam9g45, at91sam9x5, sama5d3 and sama5d4) to make sure it did not
introduce regressions, and it's worth mentioning that old bindings are
still supported (which partly explain the positive diffstat).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
7 years agomtd: physmap_of: use OF helpers for reading strings
Rafał Miłecki [Thu, 30 Mar 2017 15:58:53 +0000 (17:58 +0200)]
mtd: physmap_of: use OF helpers for reading strings

OF core code provides helpers for counting strings and reading them so
use them instead of doing this manually. This simplifies the code a bit.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agoMAINTAINERS: change email address from atmel.com to wedev4u.fr
Cyrille Pitchen [Wed, 19 Apr 2017 20:43:52 +0000 (22:43 +0200)]
MAINTAINERS: change email address from atmel.com to wedev4u.fr

Switch to my alternative address as primary address.

Signed-off-by: Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: mtdswap: use MTDSWAP_ECNT_MIN/MAX
Geliang Tang [Tue, 20 Dec 2016 13:54:33 +0000 (21:54 +0800)]
mtd: mtdswap: use MTDSWAP_ECNT_MIN/MAX

Since macros MTDSWAP_ECNT_MIN() and MTDSWAP_ECNT_MAX() have been
defined in mtdswap.c, use them instead of open-coding.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agodrivers/mtd: Convert remaining uses of pr_warning to pr_warn
Joe Perches [Fri, 17 Feb 2017 07:11:37 +0000 (23:11 -0800)]
drivers/mtd: Convert remaining uses of pr_warning to pr_warn

To enable eventual removal of pr_warning

This makes pr_warn use consistent for drivers/mtd

Prior to this patch, there were 7 uses of pr_warning and
31 uses of pr_warn in drivers/mtd

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: physmap_of: really fix the physmap add-ons
Linus Walleij [Thu, 30 Mar 2017 15:36:39 +0000 (17:36 +0200)]
mtd: physmap_of: really fix the physmap add-ons

The current way of building the of_physmap add-ons result in just
the add-on being in the object code, and not the actual core
implementation and regress the Gemini and Versatile.

Bake the physmap_of.o object by baking physmap_of_core.o and
adding the Versatile and/or Gemini add-ons to the final object.
Rename the source file physmap_of_core.c to get the desired
build components.

Suggested-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Fixes: 4f04f68e1598 ("mtd: physmap_of: fixup gemini/versatile dependencies")
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: use dev_of_node helper in mtd_get_of_node
Rafał Miłecki [Fri, 31 Mar 2017 09:11:48 +0000 (11:11 +0200)]
mtd: use dev_of_node helper in mtd_get_of_node

This allows better compile-time optimizations with CONFIG_OF disabled.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agojffs2: fix spelling mistake: "requestied" -> "requested"
Colin Ian King [Thu, 23 Feb 2017 00:34:00 +0000 (00:34 +0000)]
jffs2: fix spelling mistake: "requestied" -> "requested"

trivial fix to spelling mistake in JFFS2_ERROR message

Signed-off-by: Colin Ian King <colin.king@canonical.com>
[Brian: also fix 'an' -> 'a']
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
7 years agomtd: spi-nor: enable stateless 4b op codes for mx25u25635f
Mathias Kresin [Thu, 13 Apr 2017 07:23:54 +0000 (09:23 +0200)]
mtd: spi-nor: enable stateless 4b op codes for mx25u25635f

All required stateless 4-byte op codes are supported by this flash
chip. The stateless 4-byte support can't be autodetected due to a
missing 4-byte Address Instruction Table in SFDP.

Fixes hangs on reboot for SoCs expecting the flash chip in 3byte mode.

Signed-off-by: Mathias Kresin <dev@kresin.me>
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: spi-nor: Add support for N25Q256A11
Nobuhiro Iwamatsu [Wed, 22 Mar 2017 23:04:14 +0000 (08:04 +0900)]
mtd: spi-nor: Add support for N25Q256A11

Add new Micron N25Q256A (N25Q256A11) 256Mbit NOR Flash in the list
of supported devices. This chip has the same structure as the N25Q256A
but ID and voltage (1V8) to use is different. Therefore, this adds
N25Q256A11 as n25q256ax1.

In the future, for new Micron memories we could use the patterns
"n25q*ax1" for 1V8 and "n25q*ax3" for 3V3 memories.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.kw@hitachi.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: nand: orion: improve handling of optional clock
Simon Baatz [Mon, 27 Mar 2017 18:02:08 +0000 (20:02 +0200)]
mtd: nand: orion: improve handling of optional clock

The clock gate used by orion_nand is not available on all platforms.
When getting this optional clock gate, the code masked all errors.
Let's be more precise here and actually only allow ENOENT.

EPROBE_DEFER is handled like any other error code since probe deferral
is not supported by drivers using module_platform_driver_probe().

Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: orion: fix clk handling
Simon Baatz [Mon, 27 Mar 2017 18:02:07 +0000 (20:02 +0200)]
mtd: nand: orion: fix clk handling

The clk handling in orion_nand.c had two problems:

- In the probe function, clk_put() was called for an enabled clock,
  which violates the API (see documentation for clk_put() in
  include/linux/clk.h)

- In the error path of the probe function, clk_put() could be called
  twice for the same clock.

In order to clean this up, use the managed function devm_clk_get() and
store the pointer to the clk in the driver data.

Fixes: baffab28b13120694fa3ebab08d3e99667a851d2 ('ARM: Orion: fix driver probe error handling with respect to clk')
Cc: <stable@vger.kernel.org> # v4.5+
Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: remove unnecessary writes to ECC_CORRECTION
Masahiro Yamada [Wed, 22 Mar 2017 20:07:24 +0000 (05:07 +0900)]
mtd: nand: denali: remove unnecessary writes to ECC_CORRECTION

Because SUPPORT_15BITECC is defined, the following is dead code:

  #elif SUPPORT_8BITECC
          iowrite32(8, denali->flash_reg + ECC_CORRECTION);
  #endif

Such ifdefs are useless and unacceptable coding style.

These writes are not needed in the first place since ECC_CORRECTION
is set up by the nand_init() function.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: remove meaningless writes to read-only registers
Masahiro Yamada [Wed, 22 Mar 2017 20:07:23 +0000 (05:07 +0900)]
mtd: nand: denali: remove meaningless writes to read-only registers

The write accesses to LOGICAL_PAGE_{DATA,SPARE}_SIZE have no effect
because the Denali User's Guide says these registers are read-only.

The hardware automatically multiplies the main/spare size by the
number of devices and update LOGICAL_PAGE_{DATA,SPARE}_SIZE.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: set DEVICES_CONNECTED 1 if not set
Masahiro Yamada [Wed, 22 Mar 2017 20:07:22 +0000 (05:07 +0900)]
mtd: nand: denali: set DEVICES_CONNECTED 1 if not set

Currently, the driver expects DEVICE_CONNECTED is automatically set
by the hardware, but this feature is disabled in some cases.
In such cases, it is the software's responsibility to set up the
DEVICES_CONNECTED register.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: simplify multi device fixup code
Masahiro Yamada [Wed, 22 Mar 2017 20:07:21 +0000 (05:07 +0900)]
mtd: nand: denali: simplify multi device fixup code

The available configuration of the IP bus width is x8 or x16, so the
possible value for denali->devnum is 1 or 2.

If the value is 1, there is nothing to do.  Fixup parameters only
when denali->devnum is 2.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: move multi device fixup code to a helper function
Masahiro Yamada [Wed, 22 Mar 2017 20:07:20 +0000 (05:07 +0900)]
mtd: nand: denali: move multi device fixup code to a helper function

Collect multi NAND fixups into a helper function instead of
scattering them in denali_init().

I am rewording the comment block to clearly explain what is called
"multi device".

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: call nand_set_flash_node() to set DT node
Masahiro Yamada [Wed, 22 Mar 2017 20:07:18 +0000 (05:07 +0900)]
mtd: nand: denali: call nand_set_flash_node() to set DT node

This will allow nand_dt_init() to parse DT properties in the NAND
controller device node.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: use nand_chip to hold frequently accessed data
Masahiro Yamada [Wed, 22 Mar 2017 20:07:17 +0000 (05:07 +0900)]
mtd: nand: denali: use nand_chip to hold frequently accessed data

The denali_init() needs to setup a bunch of parameters of nand_chip.
Replace denali->nand.(member) with chip->(member) for shorter code.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: do not check R/B# for CMD_SET_FEATURES in nand_command(_lp)
Masahiro Yamada [Thu, 23 Mar 2017 00:17:50 +0000 (09:17 +0900)]
mtd: nand: do not check R/B# for CMD_SET_FEATURES in nand_command(_lp)

Set Features (0xEF) command toggles the R/B# pin after 4 sub feature
parameters are written.

Currently, nand_command(_lp) calls chip->dev_ready immediately after
the address cycle because NAND_CMD_SET_FEATURES falls into default:
label.  No wait is needed at this point.

If you see nand_onfi_set_features(), R/B# is already cared by the
chip->waitfunc call.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: do not check R/B# for CMD_READID in nand_command(_lp)
Masahiro Yamada [Thu, 23 Mar 2017 00:17:49 +0000 (09:17 +0900)]
mtd: nand: do not check R/B# for CMD_READID in nand_command(_lp)

Read ID (0x90) command does not toggle the R/B# pin.  Without this
patch, NAND_CMD_READID falls into the default: label, then R/B# is
checked by chip->dev_ready().

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: use int where no reason to use fixed width variable
Masahiro Yamada [Wed, 22 Mar 2017 20:07:08 +0000 (05:07 +0900)]
mtd: nand: denali: use int where no reason to use fixed width variable

The page number is generally stored in an integer type variable.
The uint16_t does not have enough width.  I see no reason to use
uint32_t for other members, either.  Just use int.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: introduce capability flag
Masahiro Yamada [Wed, 22 Mar 2017 20:07:07 +0000 (05:07 +0900)]
mtd: nand: denali: introduce capability flag

The Denali NAND controller IP has various customizable features.
SoC vendors can choose desired functions when a delivery RTL is
created.  It means there are several variants for this IP.  For
example, the Intel version is equipped with 32bit DMA, whereas the
IP for UniPhier SoC family with 64bit DMA.

This driver was originally written for some Intel platforms with
Intel specific things hard-coded.  What is worse, the revision
register of this IP does not work to distinguish such features.
We need to do something to make the driver available for other SoCs.

Let's introduce a caps member to the denali_nand_info structure to
switch on/off various features.  Also, add struct denali_dt_data to
store the capability associated with compatible string.

Boris suggested this approach in discussion [1] instead of a new DT
property for every feature.

[1] https://lkml.org/lkml/2016/3/29/142

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: consolidate INTR_STATUS__* and INTR_EN__* macros
Masahiro Yamada [Wed, 22 Mar 2017 20:07:06 +0000 (05:07 +0900)]
mtd: nand: denali: consolidate INTR_STATUS__* and INTR_EN__* macros

The interrupts are enabled by INTR_EN register, then asserted
interrupts can be observed via INTR_STATUS register.

The bit fields are identical between INTR_EN and INTR_STATUS, so we
can merge the bit field macros.  Likewise for DATA_INTR.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: fix comment of denali_nand_info::flash_mem
Masahiro Yamada [Wed, 22 Mar 2017 20:07:05 +0000 (05:07 +0900)]
mtd: nand: denali: fix comment of denali_nand_info::flash_mem

The same comment "Mapped io reg base address" for flash_reg and
flash_mem probably due to the mistake of copy-paste work.
Of course, the latter is not the register base address.

Reword the comments using the terminology in the Denali User's Guide.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: remove more unused struct members
Masahiro Yamada [Wed, 22 Mar 2017 20:07:04 +0000 (05:07 +0900)]
mtd: nand: denali: remove more unused struct members

These members are not used at all.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: remove redundant define of BANK(x)
Masahiro Yamada [Wed, 22 Mar 2017 20:07:03 +0000 (05:07 +0900)]
mtd: nand: denali: remove redundant define of BANK(x)

This macro is defined twice in denali.c (around line 98 and
line 651), so remove the second one.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: denali: remove unused CONFIG option and macros
Masahiro Yamada [Wed, 22 Mar 2017 20:07:02 +0000 (05:07 +0900)]
mtd: nand: denali: remove unused CONFIG option and macros

All of these macros are not used at all.
CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR is not used for anything but
defining SCRATCH_REG_ADDR.  The config option should go away as well.

I am removing some register macros.  They are not used, and do not
exist in recent IP versions.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: use read_oob() instead of cmdfunc() for bad block check
Masahiro Yamada [Wed, 22 Mar 2017 20:07:01 +0000 (05:07 +0900)]
mtd: nand: use read_oob() instead of cmdfunc() for bad block check

The nand_default_block_markbad() and scan_block_fast() use high
level APIs to get access to the BBM.

On the other hand, nand_block_bad (the default implementation of
->block_bad) calls the lower level ->cmdfunc hook.  This prevents
drivers from using ->ecc.read_oob() even if optimized read operation
is implemented.  Besides, some NAND controllers may protect the BBM
with ECC.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: allow to set only one of ECC size and ECC strength from DT
Masahiro Yamada [Wed, 22 Mar 2017 20:07:00 +0000 (05:07 +0900)]
mtd: nand: allow to set only one of ECC size and ECC strength from DT

Currently, it is valid to specify both "nand-ecc-step-size" and
"nand-ecc-strength", but not allowed to set only one of them.

This requirement has a conflict with "nand-ecc-maximize"; this flag
is used when you want the driver to choose the best ECC strength.
If "nand-ecc-maximize" is set, "nand-ecc-strength" is very likely to
be unset.

It would be possible to make the if-conditional more complex by
adding the check for the NAND_ECC_MAXIMIZE flag, but I chose to drop
the check entirely.  I thought of the situation where the hardware
has a fixed ECC step size (so it can be hard-coded in the driver),
whereas the ECC strength is configurable by software.  In that case,
we may want to only set "nand-ecc-strength" (or "nand-ecc-maximize")
in DT.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: remove CONFIG_OF conditional
Thomas Petazzoni [Tue, 21 Mar 2017 10:04:05 +0000 (11:04 +0100)]
mtd: nand: fsmc: remove CONFIG_OF conditional

Since commit 4404d7d821c33 ("mtd: nand: fsmc: remove stale non-DT probe
path"), the fsmc NAND driver only supports Device Tree probing, and
therefore has a "depends on OF" in its Kconfig option.

Due to this the #ifdef CONFIG_OF ... #endif condition in the driver code
is no longer necessary.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: remove unused definitions
Thomas Petazzoni [Tue, 21 Mar 2017 10:04:04 +0000 (11:04 +0100)]
mtd: nand: fsmc: remove unused definitions

These definitions are not used anywhere in the driver, so remove them.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: use devm_clk_get()
Thomas Petazzoni [Tue, 21 Mar 2017 10:04:03 +0000 (11:04 +0100)]
mtd: nand: fsmc: use devm_clk_get()

This commit switches the fsmc_nand driver from clk_get() to
devm_clk_get(), which saves a few clk_put().

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: finally remove fsmc_nand_platform_data
Thomas Petazzoni [Tue, 21 Mar 2017 10:04:02 +0000 (11:04 +0100)]
mtd: nand: fsmc: finally remove fsmc_nand_platform_data

Since the driver now only supports DT probing, it doesn't make a lot of
sense to have a private data structure called platform_data, fill it in
with information coming from the DT, and then copying this into the
driver-specific structure fsmc_nand_data.

So instead, we remove fsmc_nand_platform_data entirely, and have
fsmc_nand_probe_config_dt() fill in the fsmc_nand_data structure
directly.

This requires calling fsmc_nand_probe_config_dt() after fsmc_nand_data
has been allocated instead of before.

Also, as an added bonus, we now propagate properly the return value of
fsmc_nand_probe_config_dt() instead of returning -ENODEV on failure. The
error message is also removed, since it no longer made any sense.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: remove duplicate nand_set_flash_node()
Thomas Petazzoni [Tue, 21 Mar 2017 10:04:01 +0000 (11:04 +0100)]
mtd: nand: fsmc: remove duplicate nand_set_flash_node()

It is already done a few lines before.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: kill {nr_, }partitions structure fields
Thomas Petazzoni [Tue, 21 Mar 2017 10:04:00 +0000 (11:04 +0100)]
mtd: nand: fsmc: kill {nr_, }partitions structure fields

The ->partitions and ->nr_partitions fields of struct
fsmc_nand_platform_data are never set anywhere, so they are always
NULL/0. The corresponding fields in 'struct fsmc_nand_data' are set to the
value of the same fields in fsmc_nand_platform_data, i.e NULL/0.

Therefore, we remove those two fields, and pass NULL/0 directly to
mtd_device_register(), like many other NAND drivers already do.

At the same time, we remove the comment about the fact that we pass
partition info, since we are no longer doing this.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fmsc: kill {read, write}_dma_priv from fsmc_nand_platform_data
Thomas Petazzoni [Tue, 21 Mar 2017 10:03:59 +0000 (11:03 +0100)]
mtd: nand: fmsc: kill {read, write}_dma_priv from fsmc_nand_platform_data

The read_dma_priv and write_dma_priv fields of fsmc_nand_platform_data
are never set, so this commit removes them.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: remove fsmc_select_chip()
Thomas Petazzoni [Tue, 21 Mar 2017 10:03:58 +0000 (11:03 +0100)]
mtd: nand: fsmc: remove fsmc_select_chip()

host->select_chip used to point to the ->select_bank() function provided
by the platform data, but the latter no longer exists. Therefore
host->select_chip is always NULL.

Due to this, the fsmc_select_chip() does nothing, except:

  chip->cmd_ctrl(mtd, NAND_CMD_NONE, 0 | NAND_CTRL_CHANGE);

when chipnr is -1, which is exactly what the default implementation of
->select_chip() does in the NAND framework. So, this commit kills
fsmc_select_chip() entirely.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: remove ->select_bank() from fsmc_nand_platform_data
Thomas Petazzoni [Tue, 21 Mar 2017 10:03:57 +0000 (11:03 +0100)]
mtd: nand: fsmc: remove ->select_bank() from fsmc_nand_platform_data

Since commit 4404d7d821c3 ("mtd: nand: fsmc: remove stale non-DT probe
path"), only DT probing is used for the fsmc_nand driver. Due to this,
the ->select_bank() field of fsmc_nand_platform_data is never used, so
this commit gets rid of it.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: move fsmc_nand_data definition
Thomas Petazzoni [Tue, 21 Mar 2017 10:03:56 +0000 (11:03 +0100)]
mtd: nand: fsmc: move fsmc_nand_data definition

This commit simply moves the "struct fsmc_nand_data" definition to be
towards the beginning of the file, with the other defines and type
definitions, instead of in the middle of the driver code. This is much
more consistent with what most Linux drivers do.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: fsmc: fix NAND width handling
Thomas Petazzoni [Tue, 21 Mar 2017 10:03:53 +0000 (11:03 +0100)]
mtd: nand: fsmc: fix NAND width handling

In commit eea628199d5b ("mtd: Add device-tree support to fsmc_nand"),
Device Tree support was added to the fmsc_nand driver. However, this
code has a bug in how it handles the bank-width DT property to set the
bus width.

Indeed, in the function fsmc_nand_probe_config_dt() that parses the
Device Tree, it sets pdata->width to either 8 or 16 depending on the
value of the bank-width DT property.

Then, the ->probe() function will test if pdata->width is equal to
FSMC_NAND_BW16 (which is 2) to set NAND_BUSWIDTH_16 in
nand->options. Therefore, with the DT probing, this condition will never
match.

This commit fixes that by removing the "width" field from
fsmc_nand_platform_data and instead have the fsmc_nand_probe_config_dt()
function directly set the appropriate nand->options value.

It is worth mentioning that if this commit gets backported to older
kernels, prior to the drop of non-DT probing, then non-DT probing will
be broken because nand->options will no longer be set to
NAND_BUSWIDTH_16.

Fixes: eea628199d5b ("mtd: Add device-tree support to fsmc_nand")
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: hynix: Fix an error code in init
Dan Carpenter [Wed, 22 Mar 2017 09:01:45 +0000 (12:01 +0300)]
mtd: nand: hynix: Fix an error code in init

We should be return -ENOMEM instead of success.

Fixes: 626994e07480 ("mtd: nand: hynix: Add read-retry support for 1x nm MLC NANDs")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agodrivers mtd: spi-nor: add Macronix MX25Ux033E and MX25Ux035 variants
Alexander Kurz [Sat, 11 Mar 2017 19:01:05 +0000 (20:01 +0100)]
drivers mtd: spi-nor: add Macronix MX25Ux033E and MX25Ux035 variants

Macronix MX25U2033E, MX25U4033E and MX25U4035 devices are used in 4/5/6th
generation Kindle ebook readers. Both MX25U403x variants share the same
JEDEC id. Add those spi-nor variants and the similar MX25U8035 mentioned
in the same set of datasheets.

Signed-off-by: Alexander Kurz <akurz@blala.de>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agodrivers mtd: spi-nor: add Winbond W25Q20 variants
Alexander Kurz [Sat, 11 Mar 2017 19:01:04 +0000 (20:01 +0100)]
drivers mtd: spi-nor: add Winbond W25Q20 variants

Winbond W25Q20BW devices are used in 4/5th generation Kindle ebook readers.
Add this spi-nor device and the similar W25Q20 devices to the list of known
devices.

Signed-off-by: Alexander Kurz <akurz@blala.de>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: spi-nor: Disable chip erase for Micron n25q00.
mar.krzeminski [Fri, 6 Jan 2017 17:19:01 +0000 (18:19 +0100)]
mtd: spi-nor: Disable chip erase for Micron n25q00.

Micron n25q00 are stacked chips, thus do not support chip erase.
>From now spi-nor framework will not send chip erase command,
instead will use sector at time erase procedure.

Signed-off-by: Marcin Krzeminski <mar.krzeminski@gmail.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: spi-nor: Fix whole chip erasing for stacked chips.
mar.krzeminski [Fri, 6 Jan 2017 17:19:00 +0000 (18:19 +0100)]
mtd: spi-nor: Fix whole chip erasing for stacked chips.

Currently it is possible to disable chip erase for spi-nor driver.
Some modern stacked (multi die) flash chips do not support chip
erase opcode at all but spi-nor framework needs to cope with them too.
This commit extends existing functionality to allow disable
chip erase for a single flash chip.

Signed-off-by: Marcin Krzeminski <mar.krzeminski@gmail.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
7 years agomtd: nand: gpio: make nCE GPIO optional
Christophe Leroy [Fri, 10 Feb 2017 14:01:10 +0000 (15:01 +0100)]
mtd: nand: gpio: make nCE GPIO optional

On some hardware, the nCE signal is wired to the ChipSelect associated
to bus address of the NAND, so it is automatically driven during the
memory access and it is not managed by a GPIO.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Reviewed-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Update dependency of IFC for LS1021A
Alison Wang [Mon, 13 Feb 2017 06:46:56 +0000 (14:46 +0800)]
mtd: nand: Update dependency of IFC for LS1021A

As NAND support for Freescale/NXP IFC controller is available on
LS1021A, the dependency for LS1021A is added.

LS1021A is an earlier product and is not compatible with later
LayerScape architecture. So ARCH_LAYERSCAPE can't cover LS1021A.

Signed-off-by: Alison Wang <alison.wang@nxp.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomemory: ifc: Update dependency of IFC for LS1021A
Alison Wang [Mon, 13 Feb 2017 06:46:55 +0000 (14:46 +0800)]
memory: ifc: Update dependency of IFC for LS1021A

As Freescale/NXP IFC controller is available on LS1021A, the dependency
for LS1021A is added.

LS1021A is an earlier product and is not compatible with later
LayerScape architecture. So ARCH_LAYERSCAPE can't cover LS1021A.

Signed-off-by: Alison Wang <alison.wang@nxp.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: tango: Enforce DMA direction type
Boris Brezillon [Mon, 20 Feb 2017 13:10:07 +0000 (14:10 +0100)]
mtd: nand: tango: Enforce DMA direction type

do_dma() uses an int to pass the DMA data direction information and
pass the same value to dmaengine_prep_slave_sg().

Currently, DMA_{FROM,TO}_DEVICE match DMA_{DEV_TO_MEM,MEM_TO_DEV}
definitions so it works fine, but assuming this will always be the case
is not safe.

Enforce enum dma_data_direction type in the function prototype and make
the enum dma_data_direction -> enum dma_transfer_direction conversion
explicit.

Reported-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
7 years agomtd: nand: nandsim: fix spelling mistake: "weakpagess" -> "weakpages"
Colin Ian King [Thu, 23 Feb 2017 11:30:48 +0000 (11:30 +0000)]
mtd: nand: nandsim: fix spelling mistake: "weakpagess" -> "weakpages"

trivial fix to spelling mistake in NS_ERR error message

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: sunxi: simplify optional reset handling
Philipp Zabel [Wed, 15 Mar 2017 11:31:47 +0000 (12:31 +0100)]
mtd: nand: sunxi: simplify optional reset handling

As of commit bb475230b8e5 ("reset: make optional functions really
optional"), the reset framework API calls use NULL pointers to describe
optional, non-present reset controls.

This allows to return errors from devm_reset_control_get_optional and to
call reset_control_(de)assert unconditionally.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: hynix: Add read-retry support for 1x nm MLC NANDs
Boris Brezillon [Fri, 27 May 2016 08:15:03 +0000 (10:15 +0200)]
mtd: nand: hynix: Add read-retry support for 1x nm MLC NANDs

All Hynix MLC NANDs produced with the 1x nm process support read-retry.
This read retry implementation should also be re-usable for other Hynix
NANDs, but the method to retrieve the read-retry parameters from the
read-retry OTP area might change a bit (some NANDs are even using a fixed
set of values instead of retrieving those information from the OTP area).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: hynix: Rework NAND ID decoding to extract more information
Boris Brezillon [Fri, 27 May 2016 12:36:36 +0000 (14:36 +0200)]
mtd: nand: hynix: Rework NAND ID decoding to extract more information

The current NAND ID detection in nand_hynix.c is not handling the
different scheme used by Hynix, thus forcing developers to add new
entry to the nand_ids table each time they want to support a new MLC
NAND.

Enhance the detection logic to handle all known formats. This does not
necessarily mean we are handling all the cases, but if new formats are
discovered, the code should evolve to take them into account instead of
adding more full-id entries to the nand_ids table.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: samsung: Retrieve ECC requirements from extended ID
Hans de Goede [Wed, 8 Jun 2016 08:45:28 +0000 (10:45 +0200)]
mtd: nand: samsung: Retrieve ECC requirements from extended ID

On some nand controllers with hw-ecc the controller code wants to know
the ecc strength and size and having these as 0, 0 is not accepted.

Specifying these in devicetree is possible but undesirable as the nand
may be different in different production runs of the same board, so it
is better to get this info from the nand id where possible.

This commit adds code to read the ecc strength and size from the nand
for Samsung extended-id nands. This code is based on the info for the 5th
id byte in the datasheets for the following Samsung nands: K9GAG08U0E,
K9GAG08U0F, K9GAG08X0D, K9GBG08U0A, K9GBG08U0B. These all use these bits
in the exact same way.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Move Macronix specific initialization in nand_macronix.c
Boris Brezillon [Wed, 8 Jun 2016 08:43:26 +0000 (10:43 +0200)]
mtd: nand: Move Macronix specific initialization in nand_macronix.c

Move Macronix specific initialization logic into nand_macronix.c. This
is part of the "separate vendor specific code from core" cleanup
process.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Move AMD/Spansion specific init/detection logic in nand_amd.c
Boris Brezillon [Wed, 8 Jun 2016 08:42:23 +0000 (10:42 +0200)]
mtd: nand: Move AMD/Spansion specific init/detection logic in nand_amd.c

Move AMD/Spansion specific initialization/detection logic into
nand_amd.c. This is part of the "separate vendor specific code from
core" cleanup process.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: Move Micron specific init logic in nand_micron.c
Boris Brezillon [Wed, 8 Jun 2016 08:38:57 +0000 (10:38 +0200)]
mtd: nand: Move Micron specific init logic in nand_micron.c

Move Micron specific initialization logic into nand_micron.c. This is
part of the "separate vendor specific code from core" cleanup process.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: Move Toshiba specific init/detection logic in nand_toshiba.c
Boris Brezillon [Wed, 8 Jun 2016 08:34:57 +0000 (10:34 +0200)]
mtd: nand: Move Toshiba specific init/detection logic in nand_toshiba.c

Move Toshiba specific initialization and detection logic into
nand_toshiba.c. This is part of the "separate vendor specific code from
core" cleanup process.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: Move Hynix specific init/detection logic in nand_hynix.c
Boris Brezillon [Wed, 8 Jun 2016 08:30:18 +0000 (10:30 +0200)]
mtd: nand: Move Hynix specific init/detection logic in nand_hynix.c

Move Hynix specific initialization and detection logic into
nand_hynix.c. This is part of the "separate vendor specific code from
core" cleanup process.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: Move Samsung specific init/detection logic in nand_samsung.c
Boris Brezillon [Wed, 8 Jun 2016 08:22:19 +0000 (10:22 +0200)]
mtd: nand: Move Samsung specific init/detection logic in nand_samsung.c

Move Samsung specific initialization and detection logic into
nand_samsung.c. This is part of the "separate vendor specific code from
core" cleanup process.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: Add manufacturer specific initialization/detection steps
Boris Brezillon [Wed, 8 Jun 2016 07:32:55 +0000 (09:32 +0200)]
mtd: nand: Add manufacturer specific initialization/detection steps

A lot of NANDs are implementing generic features in a non-generic way,
or are providing advanced auto-detection logic where the NAND ID bytes
meaning changes with the NAND generation.

Providing this vendor specific initialization step will allow us to get
rid of full-id entries in the nand_ids table or all the vendor specific
cases added over the time in the generic NAND ID decoding logic.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Do not expose the NAND manufacturer table directly
Boris Brezillon [Sat, 7 Jan 2017 14:48:25 +0000 (15:48 +0100)]
mtd: nand: Do not expose the NAND manufacturer table directly

There is no reason to expose the NAND manufacturer table. Provide an
helper function to find manufacturers by their id.

We also turn the nand_manufacturers table into a const array, since its
members are not modified after the initial assignment.

Finally, we remove the sentinel manufacturer entry from the manufacturers
table (we already have the array size information given by ARRAY_SIZE()),
and add the nand_manufacturer_name() helper to handle the "Unknown" case
properly.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Kill the MTD_NAND_IDS Kconfig option
Boris Brezillon [Tue, 24 May 2016 21:07:46 +0000 (23:07 +0200)]
mtd: nand: Kill the MTD_NAND_IDS Kconfig option

MTD_NAND_IDS is selected by MTD_NAND, which makes it useless. Remove
the Kconfig option and link nand_ids.o into the nand.o object file.
Doing that also prevents creating an extra nand_ids.ko module when
MTD_NAND is activated as a module.

Since nand_ids.c is no longer compiled as a standalone module and the
nand_manuf_ids/nand_flash_ids symbols are only used in nand_base.c, we
can get rid of the MODULE_XXX() and EXPORT_SYMBOL() definitions.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Rename the nand_manufacturers struct
Boris Brezillon [Sat, 7 Jan 2017 14:15:57 +0000 (15:15 +0100)]
mtd: nand: Rename the nand_manufacturers struct

Drop the 's' at the end of nand_manufacturers since the struct is actually
describing a single manufacturer, not a manufacturer table.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
7 years agomtd: nand: Rename nand_get_flash_type() into nand_detect()
Boris Brezillon [Tue, 24 May 2016 18:55:33 +0000 (20:55 +0200)]
mtd: nand: Rename nand_get_flash_type() into nand_detect()

Since commit 4722c0e958e6 ("mtd: nand: change return type of
nand_get_flash_type() to int"), nand_get_flash_type() no longer returns
a nand_flash_dev object.
Rename the function to match this new behavior.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
7 years agomtd: nand: Get rid of busw parameter
Boris Brezillon [Tue, 24 May 2016 18:17:48 +0000 (20:17 +0200)]
mtd: nand: Get rid of busw parameter

Auto-detection functions are passed a busw parameter to retrieve the actual
NAND bus width and eventually set the correct value in chip->options.
Rework the nand_get_flash_type() function to get rid of this extra
parameter and let detection code directly set the NAND_BUSWIDTH_16 flag in
chip->options if needed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
Reviewed-by: Marek Vasut <marek.vasut@gmail.com>
7 years agomtd: nand: Store nand ID in struct nand_chip
Boris Brezillon [Tue, 24 May 2016 17:20:05 +0000 (19:20 +0200)]
mtd: nand: Store nand ID in struct nand_chip

Store the NAND ID in struct nand_chip to avoid passing id_data and id_len
as function parameters.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
Reviewed-by: Marek Vasut <marek.vasut@gmail.com>
7 years agomtd: nand: Get rid of the mtd parameter in all auto-detection functions
Boris Brezillon [Tue, 24 May 2016 14:56:22 +0000 (16:56 +0200)]
mtd: nand: Get rid of the mtd parameter in all auto-detection functions

Now that struct nand_chip embeds an mtd_info object we can get rid of the
mtd parameter and extract it from the chip parameter with the nand_to_mtd()
helper.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Richard Weinberger <richard@nod.at>
Reviewed-by: Marek Vasut <marek.vasut@gmail.com>
7 years agomtd: spi-nor: Add support for ESMT F25L32QA and F25L64QA
L. D. Pinney [Tue, 14 Feb 2017 22:27:13 +0000 (16:27 -0600)]
mtd: spi-nor: Add support for ESMT F25L32QA and F25L64QA

Add support for the ESMT F25L32QA and F25L64QA.
These are 4MB and 8MB SPI-NOR Chips from Elite Semiconductor Memory
Technology.

Signed-off-by: L. D. Pinney <ldpinney@gmail.com>
Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>