All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@bootlin.com>
To: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com>
Cc: <richard@nod.at>, <dwmw2@infradead.org>,
	<computersforpeace@gmail.com>, <marek.vasut@gmail.com>,
	<f.fainelli@gmail.com>, <mmayer@broadcom.com>, <rogerq@ti.com>,
	<ladis@linux-mips.org>, <ada@thorsis.com>,
	<honghui.zhang@mediatek.com>, <miquel.raynal@bootlin.com>,
	nagasureshkumarrelli@gmail.com, michals@xilinx.com,
	linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [[LINUX PATCH v10] 3/4] Documentation: nand: pl353: Add documentation for controller and driver
Date: Sun, 24 Jun 2018 22:54:27 +0200	[thread overview]
Message-ID: <20180624225427.67c4d9c3@bbrezillon> (raw)
In-Reply-To: <1529563351-2241-4-git-send-email-naga.sureshkumar.relli@xilinx.com>

On Thu, 21 Jun 2018 12:12:30 +0530
Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com> wrote:

> Added notes about the controller and driver.
> 
> Signed-off-by: Naga Sureshkumar Relli <naga.sureshkumar.relli@xilinx.com>
> ---
> Changes in v10:
>  - None
> Changes in v9:
>  - Addressed the comments given by Miquel and Randy
> Changes in v8
>  - None
> Changes in v7:
> - None
> Changes in v6:
> - None
> Changes in v5:
> - Fixed the review comments
> Changes in v4:
> - None
> ---
>  Documentation/mtd/nand/pl353-nand.txt | 99 +++++++++++++++++++++++++++++++++++
>  1 file changed, 99 insertions(+)
>  create mode 100644 Documentation/mtd/nand/pl353-nand.txt

Can we put these information directly in the driver instead of having
yet another place where we have things partially documented? I just
discovered a doc for the pxa NAND controller in this directory because
of this patch, which kind of proves my point :-).

> 
> diff --git a/Documentation/mtd/nand/pl353-nand.txt b/Documentation/mtd/nand/pl353-nand.txt
> new file mode 100644
> index 0000000..c352c87
> --- /dev/null
> +++ b/Documentation/mtd/nand/pl353-nand.txt
> @@ -0,0 +1,99 @@
> +This document provides some notes about the ARM pl353 SMC controller used in
> +Zynq SOC and confined to NAND specific details.
> +
> +Overview of the controller
> +==========================
> +	The SMC (PL353) supports two memory interfaces:
> +	Interface 0 type SRAM.
> +	Interface 1 type NAND.
> +	This configuration supports the following configurable options:
> +	   . 32-bit or 64-bit AXI data width
> +	   . 8-bit, 16-bit, or 32-bit memory data width for interface 0
> +	   . 8-bit, or 16-bit memory data width for interface 1
> +	   . 1-4 chip selects on each interface
> +	   . SLC ECC block for interface 1
> +
> +For more information, refer the below link for TRM
> +http://infocenter.arm.com/help/topic/com.arm.doc.ddi0380g/DDI0380G_smc_pl350_series_r2p1_trm.pdf
> +
> +NAND memory accesses
> +====================
> +	. Two phase NAND accesses
> +	. NAND command phase transfers
> +	. NAND data phase transfers
> +
> +Two phase NAND accesses
> +	The SMC defines two phases of commands when transferring data to or from
> +NAND flash.
> +
> +Command phase
> +	Commands and optional address information are written to the NAND flash.
> +The command and address can be associated with either a data phase operation to
> +write to or read from the array, or a status/ID register transfer.
> +
> +Data phase
> + Data is either written to or read from the NAND flash. This data can be either
> +data transferred to or from the array, or status/ID register information.
> +
> +NAND AXI address setup
> +       AXI address      Command phase      Data phase
> +	[31:24]         Chip address       Chip address
> +	[23]            NoOfAddCycles_2    Reserved
> +	[22]            NoOfAddCycles_1    Reserved
> +	[21]            NoOfAddCycles_0    ClearCS
> +	[20]            End command valid  End command valid
> +	[19]            0                  1
> +	[18:11]         End command        End command
> +	[10:3]          Start command      [10] ECC Last
> +					   [9:3] Reserved
> +	[2:0]           Reserved           Reserved
> +
> +ECC
> +===
> +    It operates on a number of 512 byte blocks of NAND memory and can be
> +programmed to store the ECC codes after the data in memory. For writes,
> +the ECC is written to the spare area of the page. For reads, the result of
> +a block ECC check are made available to the device driver.
> +
> +------------------------------------------------------------------------
> +|               n * 512 blocks                  | extra  | ecc    |     |
> +|                                               | block  | codes  |     |
> +------------------------------------------------------------------------
> +
> +The ECC calculation uses a simple Hamming code, using 1-bit correction 2-bit
> +detection. It starts when a valid read or write command with a 512 byte aligned
> +address is detected on the memory interface.
> +
> +Driver details
> +==============
> +	The NAND driver has dependency with the pl353_smc memory controller
> +driver for initializing the NAND timing parameters, bus width, ECC modes,
> +control and status information.
> +
> +Since the controller expects that the chip select bit would be cleared for the
> +last data transfer i.e last 4 data bytes, the existing nand page
> +read/write routines for soft ECC and ECC none modes will not work. So, in order
> +to make this driver work, it always updates the ECC mode as HW ECC and
> +implements the page read/write functions for supporting the SW ECC.
> +i.e. There is a limitation in SMC controller, that we must set ECC LAST on
> +last data phase access, to tell ECC block not to expect any data further.
> +Ex:  When number of ECC STEPS are 4, then till 3 we will write to flash
> +using SMC with HW ECC enabled. And for the last ECC STEP, we will subtract
> +4bytes from page size, and will initiate a transfer. And the remaining 4 as
> +one more transfer with ECC_LAST bit set in NAND data phase register to notify
> +ECC block not to expect any more data. The last block should be align with end
> +of 512 byte block. Because of this limitation, we are not using core routines.
> +
> +HW ECC mode:
> +	Up to 2K page size is supported and beyond that it returns
> +-ENOTSUPPORT error. If the flash has on-die ECC controller then the
> +priority is given to the on-die ECC controller. Also the current
> +implementation has support for up to 64 bytes of OOB data.
> +
> +SW ECC mode:
> +	It supports all the page sizes. But since, Zynq SOC bootrom uses
> +HW ECC for the devices that have page <= 2K. so, When the kernel is not
> +aware of the ECC mode, it uses HW ECC by default.
> +
> +For devicetree binding information please refer to the below dt binding file
> +Documentation/devicetree/bindings/memory-controllers/pl353-smc.txt.

  reply	other threads:[~2018-06-24 20:54 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-21  6:42 [[LINUX PATCH v10] 0/4] Add arm pl353 smc memory and nand driver for xilinx zynq soc Naga Sureshkumar Relli
2018-06-21  6:42 ` [[LINUX PATCH v10] 1/4] Devicetree: Add pl353 smc controller devicetree binding information Naga Sureshkumar Relli
2018-06-24 20:40   ` Boris Brezillon
2018-06-25  8:59     ` Naga Sureshkumar Relli
2018-06-27 11:07       ` Naga Sureshkumar Relli
2018-06-28  6:54   ` Linus Walleij
2018-06-28  7:56     ` Naga Sureshkumar Relli
2018-06-21  6:42 ` [[LINUX PATCH v10] 2/4] memory: pl353: Add driver for arm pl353 static memory controller Naga Sureshkumar Relli
2018-06-28  6:49   ` Linus Walleij
2018-06-28 12:10     ` Naga Sureshkumar Relli
2018-06-28 12:11       ` Naga Sureshkumar Relli
2018-06-28 18:11         ` Linus Walleij
2018-06-21  6:42 ` [[LINUX PATCH v10] 3/4] Documentation: nand: pl353: Add documentation for controller and driver Naga Sureshkumar Relli
2018-06-24 20:54   ` Boris Brezillon [this message]
2018-06-25  8:56     ` Naga Sureshkumar Relli
2018-06-25  9:13       ` Boris Brezillon
2018-06-21  6:42 ` [[LINUX PATCH v10] 4/4] mtd: rawnand: pl353: Add basic driver for arm pl353 smc nand interface Naga Sureshkumar Relli
2018-06-27 15:22   ` Miquel Raynal
2018-06-28  5:01     ` Naga Sureshkumar Relli
2018-06-28  7:14       ` Miquel Raynal
2018-06-28  7:37         ` Naga Sureshkumar Relli
2018-07-03 13:00         ` Naga Sureshkumar Relli
2018-07-08 12:38           ` Miquel Raynal
2018-06-28  7:43   ` Linus Walleij
2018-06-28 12:13     ` Naga Sureshkumar Relli
2018-06-28 18:13       ` Linus Walleij
2018-06-29  4:15         ` Naga Sureshkumar Relli
2018-07-02 13:47           ` Linus Walleij
2018-07-03  4:19             ` Naga Sureshkumar Relli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180624225427.67c4d9c3@bbrezillon \
    --to=boris.brezillon@bootlin.com \
    --cc=ada@thorsis.com \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=f.fainelli@gmail.com \
    --cc=honghui.zhang@mediatek.com \
    --cc=ladis@linux-mips.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=marek.vasut@gmail.com \
    --cc=michals@xilinx.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=mmayer@broadcom.com \
    --cc=naga.sureshkumar.relli@xilinx.com \
    --cc=nagasureshkumarrelli@gmail.com \
    --cc=richard@nod.at \
    --cc=rogerq@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.