[U-Boot] [PATCH v2 09/20] spl: nand: sunxi: ensure enough time has passed after changing the column
Boris Brezillon
boris.brezillon at bootlin.com
Thu Feb 22 13:45:00 UTC 2018
On Thu, 22 Feb 2018 14:33:39 +0100
Miquel Raynal <miquel.raynal at bootlin.com> wrote:
> When changing the column, the ONFI specification states that a minimum
> time of tCCS (Change Column Setup time) must elapse between the last
> address cycle is asserted on the bus and the first data cycle is
> clocked. An usual value for average NANDs is 500 nanoseconds. Round it
> up to 1 microsecond to be safe.
>
> Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
> ---
> drivers/mtd/nand/sunxi_nand_spl.c | 13 ++++++++++---
> 1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mtd/nand/sunxi_nand_spl.c b/drivers/mtd/nand/sunxi_nand_spl.c
> index 25a0941fd2..2fa1f70d9d 100644
> --- a/drivers/mtd/nand/sunxi_nand_spl.c
> +++ b/drivers/mtd/nand/sunxi_nand_spl.c
> @@ -243,15 +243,22 @@ static int nand_load_page(const struct nfc_config *conf, u32 offs)
>
> static int nand_reset_column(void)
> {
> + int ret;
> +
> writel((NFC_CMD_RNDOUTSTART << NFC_RANDOM_READ_CMD1_OFFSET) |
> (NFC_CMD_RNDOUT << NFC_RANDOM_READ_CMD0_OFFSET) |
> (NFC_CMD_RNDOUTSTART << NFC_READ_CMD_OFFSET),
> SUNXI_NFC_BASE + NFC_RCMD_SET);
> writel(0, SUNXI_NFC_BASE + NFC_ADDR_LOW);
>
> - return nand_exec_cmd(NFC_SEND_CMD1 | NFC_SEND_CMD2 | NFC_RAW_CMD |
> - (1 << NFC_ADDR_NUM_OFFSET) | NFC_SEND_ADDR |
> - NFC_CMD_RNDOUT);
> + ret = nand_exec_cmd(NFC_SEND_CMD1 | NFC_SEND_CMD2 | NFC_RAW_CMD |
> + (1 << NFC_ADDR_NUM_OFFSET) | NFC_SEND_ADDR |
> + NFC_CMD_RNDOUT);
> +
> + /* Ensure tCCS has passed before reading data */
> + udelay(1);
Just nitpicking, but if ret < 0 you don't have to wait tCCS :P.
> +
> + return ret;
> }
>
> static int nand_read_page(const struct nfc_config *conf, u32 offs,
--
Boris Brezillon, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
More information about the U-Boot
mailing list