cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tegra_nand.c (35266B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (C) 2018 Stefan Agner <stefan@agner.ch>
      4 * Copyright (C) 2014-2015 Lucas Stach <dev@lynxeye.de>
      5 * Copyright (C) 2012 Avionic Design GmbH
      6 */
      7
      8#include <linux/clk.h>
      9#include <linux/completion.h>
     10#include <linux/dma-mapping.h>
     11#include <linux/err.h>
     12#include <linux/gpio/consumer.h>
     13#include <linux/interrupt.h>
     14#include <linux/io.h>
     15#include <linux/module.h>
     16#include <linux/mtd/partitions.h>
     17#include <linux/mtd/rawnand.h>
     18#include <linux/of.h>
     19#include <linux/platform_device.h>
     20#include <linux/pm_runtime.h>
     21#include <linux/reset.h>
     22
     23#include <soc/tegra/common.h>
     24
     25#define COMMAND					0x00
     26#define   COMMAND_GO				BIT(31)
     27#define   COMMAND_CLE				BIT(30)
     28#define   COMMAND_ALE				BIT(29)
     29#define   COMMAND_PIO				BIT(28)
     30#define   COMMAND_TX				BIT(27)
     31#define   COMMAND_RX				BIT(26)
     32#define   COMMAND_SEC_CMD			BIT(25)
     33#define   COMMAND_AFT_DAT			BIT(24)
     34#define   COMMAND_TRANS_SIZE(size)		((((size) - 1) & 0xf) << 20)
     35#define   COMMAND_A_VALID			BIT(19)
     36#define   COMMAND_B_VALID			BIT(18)
     37#define   COMMAND_RD_STATUS_CHK			BIT(17)
     38#define   COMMAND_RBSY_CHK			BIT(16)
     39#define   COMMAND_CE(x)				BIT(8 + ((x) & 0x7))
     40#define   COMMAND_CLE_SIZE(size)		((((size) - 1) & 0x3) << 4)
     41#define   COMMAND_ALE_SIZE(size)		((((size) - 1) & 0xf) << 0)
     42
     43#define STATUS					0x04
     44
     45#define ISR					0x08
     46#define   ISR_CORRFAIL_ERR			BIT(24)
     47#define   ISR_UND				BIT(7)
     48#define   ISR_OVR				BIT(6)
     49#define   ISR_CMD_DONE				BIT(5)
     50#define   ISR_ECC_ERR				BIT(4)
     51
     52#define IER					0x0c
     53#define   IER_ERR_TRIG_VAL(x)			(((x) & 0xf) << 16)
     54#define   IER_UND				BIT(7)
     55#define   IER_OVR				BIT(6)
     56#define   IER_CMD_DONE				BIT(5)
     57#define   IER_ECC_ERR				BIT(4)
     58#define   IER_GIE				BIT(0)
     59
     60#define CONFIG					0x10
     61#define   CONFIG_HW_ECC				BIT(31)
     62#define   CONFIG_ECC_SEL			BIT(30)
     63#define   CONFIG_ERR_COR			BIT(29)
     64#define   CONFIG_PIPE_EN			BIT(28)
     65#define   CONFIG_TVAL_4				(0 << 24)
     66#define   CONFIG_TVAL_6				(1 << 24)
     67#define   CONFIG_TVAL_8				(2 << 24)
     68#define   CONFIG_SKIP_SPARE			BIT(23)
     69#define   CONFIG_BUS_WIDTH_16			BIT(21)
     70#define   CONFIG_COM_BSY			BIT(20)
     71#define   CONFIG_PS_256				(0 << 16)
     72#define   CONFIG_PS_512				(1 << 16)
     73#define   CONFIG_PS_1024			(2 << 16)
     74#define   CONFIG_PS_2048			(3 << 16)
     75#define   CONFIG_PS_4096			(4 << 16)
     76#define   CONFIG_SKIP_SPARE_SIZE_4		(0 << 14)
     77#define   CONFIG_SKIP_SPARE_SIZE_8		(1 << 14)
     78#define   CONFIG_SKIP_SPARE_SIZE_12		(2 << 14)
     79#define   CONFIG_SKIP_SPARE_SIZE_16		(3 << 14)
     80#define   CONFIG_TAG_BYTE_SIZE(x)			((x) & 0xff)
     81
     82#define TIMING_1				0x14
     83#define   TIMING_TRP_RESP(x)			(((x) & 0xf) << 28)
     84#define   TIMING_TWB(x)				(((x) & 0xf) << 24)
     85#define   TIMING_TCR_TAR_TRR(x)			(((x) & 0xf) << 20)
     86#define   TIMING_TWHR(x)			(((x) & 0xf) << 16)
     87#define   TIMING_TCS(x)				(((x) & 0x3) << 14)
     88#define   TIMING_TWH(x)				(((x) & 0x3) << 12)
     89#define   TIMING_TWP(x)				(((x) & 0xf) <<  8)
     90#define   TIMING_TRH(x)				(((x) & 0x3) <<  4)
     91#define   TIMING_TRP(x)				(((x) & 0xf) <<  0)
     92
     93#define RESP					0x18
     94
     95#define TIMING_2				0x1c
     96#define   TIMING_TADL(x)			((x) & 0xf)
     97
     98#define CMD_REG1				0x20
     99#define CMD_REG2				0x24
    100#define ADDR_REG1				0x28
    101#define ADDR_REG2				0x2c
    102
    103#define DMA_MST_CTRL				0x30
    104#define   DMA_MST_CTRL_GO			BIT(31)
    105#define   DMA_MST_CTRL_IN			(0 << 30)
    106#define   DMA_MST_CTRL_OUT			BIT(30)
    107#define   DMA_MST_CTRL_PERF_EN			BIT(29)
    108#define   DMA_MST_CTRL_IE_DONE			BIT(28)
    109#define   DMA_MST_CTRL_REUSE			BIT(27)
    110#define   DMA_MST_CTRL_BURST_1			(2 << 24)
    111#define   DMA_MST_CTRL_BURST_4			(3 << 24)
    112#define   DMA_MST_CTRL_BURST_8			(4 << 24)
    113#define   DMA_MST_CTRL_BURST_16			(5 << 24)
    114#define   DMA_MST_CTRL_IS_DONE			BIT(20)
    115#define   DMA_MST_CTRL_EN_A			BIT(2)
    116#define   DMA_MST_CTRL_EN_B			BIT(1)
    117
    118#define DMA_CFG_A				0x34
    119#define DMA_CFG_B				0x38
    120
    121#define FIFO_CTRL				0x3c
    122#define   FIFO_CTRL_CLR_ALL			BIT(3)
    123
    124#define DATA_PTR				0x40
    125#define TAG_PTR					0x44
    126#define ECC_PTR					0x48
    127
    128#define DEC_STATUS				0x4c
    129#define   DEC_STATUS_A_ECC_FAIL			BIT(1)
    130#define   DEC_STATUS_ERR_COUNT_MASK		0x00ff0000
    131#define   DEC_STATUS_ERR_COUNT_SHIFT		16
    132
    133#define HWSTATUS_CMD				0x50
    134#define HWSTATUS_MASK				0x54
    135#define   HWSTATUS_RDSTATUS_MASK(x)		(((x) & 0xff) << 24)
    136#define   HWSTATUS_RDSTATUS_VALUE(x)		(((x) & 0xff) << 16)
    137#define   HWSTATUS_RBSY_MASK(x)			(((x) & 0xff) << 8)
    138#define   HWSTATUS_RBSY_VALUE(x)		(((x) & 0xff) << 0)
    139
    140#define BCH_CONFIG				0xcc
    141#define   BCH_ENABLE				BIT(0)
    142#define   BCH_TVAL_4				(0 << 4)
    143#define   BCH_TVAL_8				(1 << 4)
    144#define   BCH_TVAL_14				(2 << 4)
    145#define   BCH_TVAL_16				(3 << 4)
    146
    147#define DEC_STAT_RESULT				0xd0
    148#define DEC_STAT_BUF				0xd4
    149#define   DEC_STAT_BUF_FAIL_SEC_FLAG_MASK	0xff000000
    150#define   DEC_STAT_BUF_FAIL_SEC_FLAG_SHIFT	24
    151#define   DEC_STAT_BUF_CORR_SEC_FLAG_MASK	0x00ff0000
    152#define   DEC_STAT_BUF_CORR_SEC_FLAG_SHIFT	16
    153#define   DEC_STAT_BUF_MAX_CORR_CNT_MASK	0x00001f00
    154#define   DEC_STAT_BUF_MAX_CORR_CNT_SHIFT	8
    155
    156#define OFFSET(val, off)	((val) < (off) ? 0 : (val) - (off))
    157
    158#define SKIP_SPARE_BYTES	4
    159#define BITS_PER_STEP_RS	18
    160#define BITS_PER_STEP_BCH	13
    161
    162#define INT_MASK		(IER_UND | IER_OVR | IER_CMD_DONE | IER_GIE)
    163#define HWSTATUS_CMD_DEFAULT	NAND_STATUS_READY
    164#define HWSTATUS_MASK_DEFAULT	(HWSTATUS_RDSTATUS_MASK(1) | \
    165				HWSTATUS_RDSTATUS_VALUE(0) | \
    166				HWSTATUS_RBSY_MASK(NAND_STATUS_READY) | \
    167				HWSTATUS_RBSY_VALUE(NAND_STATUS_READY))
    168
    169struct tegra_nand_controller {
    170	struct nand_controller controller;
    171	struct device *dev;
    172	void __iomem *regs;
    173	int irq;
    174	struct clk *clk;
    175	struct completion command_complete;
    176	struct completion dma_complete;
    177	bool last_read_error;
    178	int cur_cs;
    179	struct nand_chip *chip;
    180};
    181
    182struct tegra_nand_chip {
    183	struct nand_chip chip;
    184	struct gpio_desc *wp_gpio;
    185	struct mtd_oob_region ecc;
    186	u32 config;
    187	u32 config_ecc;
    188	u32 bch_config;
    189	int cs[1];
    190};
    191
    192static inline struct tegra_nand_controller *
    193			to_tegra_ctrl(struct nand_controller *hw_ctrl)
    194{
    195	return container_of(hw_ctrl, struct tegra_nand_controller, controller);
    196}
    197
    198static inline struct tegra_nand_chip *to_tegra_chip(struct nand_chip *chip)
    199{
    200	return container_of(chip, struct tegra_nand_chip, chip);
    201}
    202
    203static int tegra_nand_ooblayout_rs_ecc(struct mtd_info *mtd, int section,
    204				       struct mtd_oob_region *oobregion)
    205{
    206	struct nand_chip *chip = mtd_to_nand(mtd);
    207	int bytes_per_step = DIV_ROUND_UP(BITS_PER_STEP_RS * chip->ecc.strength,
    208					  BITS_PER_BYTE);
    209
    210	if (section > 0)
    211		return -ERANGE;
    212
    213	oobregion->offset = SKIP_SPARE_BYTES;
    214	oobregion->length = round_up(bytes_per_step * chip->ecc.steps, 4);
    215
    216	return 0;
    217}
    218
    219static int tegra_nand_ooblayout_no_free(struct mtd_info *mtd, int section,
    220					struct mtd_oob_region *oobregion)
    221{
    222	return -ERANGE;
    223}
    224
    225static const struct mtd_ooblayout_ops tegra_nand_oob_rs_ops = {
    226	.ecc = tegra_nand_ooblayout_rs_ecc,
    227	.free = tegra_nand_ooblayout_no_free,
    228};
    229
    230static int tegra_nand_ooblayout_bch_ecc(struct mtd_info *mtd, int section,
    231					struct mtd_oob_region *oobregion)
    232{
    233	struct nand_chip *chip = mtd_to_nand(mtd);
    234	int bytes_per_step = DIV_ROUND_UP(BITS_PER_STEP_BCH * chip->ecc.strength,
    235					  BITS_PER_BYTE);
    236
    237	if (section > 0)
    238		return -ERANGE;
    239
    240	oobregion->offset = SKIP_SPARE_BYTES;
    241	oobregion->length = round_up(bytes_per_step * chip->ecc.steps, 4);
    242
    243	return 0;
    244}
    245
    246static const struct mtd_ooblayout_ops tegra_nand_oob_bch_ops = {
    247	.ecc = tegra_nand_ooblayout_bch_ecc,
    248	.free = tegra_nand_ooblayout_no_free,
    249};
    250
    251static irqreturn_t tegra_nand_irq(int irq, void *data)
    252{
    253	struct tegra_nand_controller *ctrl = data;
    254	u32 isr, dma;
    255
    256	isr = readl_relaxed(ctrl->regs + ISR);
    257	dma = readl_relaxed(ctrl->regs + DMA_MST_CTRL);
    258	dev_dbg(ctrl->dev, "isr %08x\n", isr);
    259
    260	if (!isr && !(dma & DMA_MST_CTRL_IS_DONE))
    261		return IRQ_NONE;
    262
    263	/*
    264	 * The bit name is somewhat missleading: This is also set when
    265	 * HW ECC was successful. The data sheet states:
    266	 * Correctable OR Un-correctable errors occurred in the DMA transfer...
    267	 */
    268	if (isr & ISR_CORRFAIL_ERR)
    269		ctrl->last_read_error = true;
    270
    271	if (isr & ISR_CMD_DONE)
    272		complete(&ctrl->command_complete);
    273
    274	if (isr & ISR_UND)
    275		dev_err(ctrl->dev, "FIFO underrun\n");
    276
    277	if (isr & ISR_OVR)
    278		dev_err(ctrl->dev, "FIFO overrun\n");
    279
    280	/* handle DMA interrupts */
    281	if (dma & DMA_MST_CTRL_IS_DONE) {
    282		writel_relaxed(dma, ctrl->regs + DMA_MST_CTRL);
    283		complete(&ctrl->dma_complete);
    284	}
    285
    286	/* clear interrupts */
    287	writel_relaxed(isr, ctrl->regs + ISR);
    288
    289	return IRQ_HANDLED;
    290}
    291
    292static const char * const tegra_nand_reg_names[] = {
    293	"COMMAND",
    294	"STATUS",
    295	"ISR",
    296	"IER",
    297	"CONFIG",
    298	"TIMING",
    299	NULL,
    300	"TIMING2",
    301	"CMD_REG1",
    302	"CMD_REG2",
    303	"ADDR_REG1",
    304	"ADDR_REG2",
    305	"DMA_MST_CTRL",
    306	"DMA_CFG_A",
    307	"DMA_CFG_B",
    308	"FIFO_CTRL",
    309};
    310
    311static void tegra_nand_dump_reg(struct tegra_nand_controller *ctrl)
    312{
    313	u32 reg;
    314	int i;
    315
    316	dev_err(ctrl->dev, "Tegra NAND controller register dump\n");
    317	for (i = 0; i < ARRAY_SIZE(tegra_nand_reg_names); i++) {
    318		const char *reg_name = tegra_nand_reg_names[i];
    319
    320		if (!reg_name)
    321			continue;
    322
    323		reg = readl_relaxed(ctrl->regs + (i * 4));
    324		dev_err(ctrl->dev, "%s: 0x%08x\n", reg_name, reg);
    325	}
    326}
    327
    328static void tegra_nand_controller_abort(struct tegra_nand_controller *ctrl)
    329{
    330	u32 isr, dma;
    331
    332	disable_irq(ctrl->irq);
    333
    334	/* Abort current command/DMA operation */
    335	writel_relaxed(0, ctrl->regs + DMA_MST_CTRL);
    336	writel_relaxed(0, ctrl->regs + COMMAND);
    337
    338	/* clear interrupts */
    339	isr = readl_relaxed(ctrl->regs + ISR);
    340	writel_relaxed(isr, ctrl->regs + ISR);
    341	dma = readl_relaxed(ctrl->regs + DMA_MST_CTRL);
    342	writel_relaxed(dma, ctrl->regs + DMA_MST_CTRL);
    343
    344	reinit_completion(&ctrl->command_complete);
    345	reinit_completion(&ctrl->dma_complete);
    346
    347	enable_irq(ctrl->irq);
    348}
    349
    350static int tegra_nand_cmd(struct nand_chip *chip,
    351			  const struct nand_subop *subop)
    352{
    353	const struct nand_op_instr *instr;
    354	const struct nand_op_instr *instr_data_in = NULL;
    355	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    356	unsigned int op_id, size = 0, offset = 0;
    357	bool first_cmd = true;
    358	u32 reg, cmd = 0;
    359	int ret;
    360
    361	for (op_id = 0; op_id < subop->ninstrs; op_id++) {
    362		unsigned int naddrs, i;
    363		const u8 *addrs;
    364		u32 addr1 = 0, addr2 = 0;
    365
    366		instr = &subop->instrs[op_id];
    367
    368		switch (instr->type) {
    369		case NAND_OP_CMD_INSTR:
    370			if (first_cmd) {
    371				cmd |= COMMAND_CLE;
    372				writel_relaxed(instr->ctx.cmd.opcode,
    373					       ctrl->regs + CMD_REG1);
    374			} else {
    375				cmd |= COMMAND_SEC_CMD;
    376				writel_relaxed(instr->ctx.cmd.opcode,
    377					       ctrl->regs + CMD_REG2);
    378			}
    379			first_cmd = false;
    380			break;
    381
    382		case NAND_OP_ADDR_INSTR:
    383			offset = nand_subop_get_addr_start_off(subop, op_id);
    384			naddrs = nand_subop_get_num_addr_cyc(subop, op_id);
    385			addrs = &instr->ctx.addr.addrs[offset];
    386
    387			cmd |= COMMAND_ALE | COMMAND_ALE_SIZE(naddrs);
    388			for (i = 0; i < min_t(unsigned int, 4, naddrs); i++)
    389				addr1 |= *addrs++ << (BITS_PER_BYTE * i);
    390			naddrs -= i;
    391			for (i = 0; i < min_t(unsigned int, 4, naddrs); i++)
    392				addr2 |= *addrs++ << (BITS_PER_BYTE * i);
    393
    394			writel_relaxed(addr1, ctrl->regs + ADDR_REG1);
    395			writel_relaxed(addr2, ctrl->regs + ADDR_REG2);
    396			break;
    397
    398		case NAND_OP_DATA_IN_INSTR:
    399			size = nand_subop_get_data_len(subop, op_id);
    400			offset = nand_subop_get_data_start_off(subop, op_id);
    401
    402			cmd |= COMMAND_TRANS_SIZE(size) | COMMAND_PIO |
    403				COMMAND_RX | COMMAND_A_VALID;
    404
    405			instr_data_in = instr;
    406			break;
    407
    408		case NAND_OP_DATA_OUT_INSTR:
    409			size = nand_subop_get_data_len(subop, op_id);
    410			offset = nand_subop_get_data_start_off(subop, op_id);
    411
    412			cmd |= COMMAND_TRANS_SIZE(size) | COMMAND_PIO |
    413				COMMAND_TX | COMMAND_A_VALID;
    414			memcpy(&reg, instr->ctx.data.buf.out + offset, size);
    415
    416			writel_relaxed(reg, ctrl->regs + RESP);
    417			break;
    418
    419		case NAND_OP_WAITRDY_INSTR:
    420			cmd |= COMMAND_RBSY_CHK;
    421			break;
    422		}
    423	}
    424
    425	cmd |= COMMAND_GO | COMMAND_CE(ctrl->cur_cs);
    426	writel_relaxed(cmd, ctrl->regs + COMMAND);
    427	ret = wait_for_completion_timeout(&ctrl->command_complete,
    428					  msecs_to_jiffies(500));
    429	if (!ret) {
    430		dev_err(ctrl->dev, "COMMAND timeout\n");
    431		tegra_nand_dump_reg(ctrl);
    432		tegra_nand_controller_abort(ctrl);
    433		return -ETIMEDOUT;
    434	}
    435
    436	if (instr_data_in) {
    437		reg = readl_relaxed(ctrl->regs + RESP);
    438		memcpy(instr_data_in->ctx.data.buf.in + offset, &reg, size);
    439	}
    440
    441	return 0;
    442}
    443
    444static const struct nand_op_parser tegra_nand_op_parser = NAND_OP_PARSER(
    445	NAND_OP_PARSER_PATTERN(tegra_nand_cmd,
    446		NAND_OP_PARSER_PAT_CMD_ELEM(true),
    447		NAND_OP_PARSER_PAT_ADDR_ELEM(true, 8),
    448		NAND_OP_PARSER_PAT_CMD_ELEM(true),
    449		NAND_OP_PARSER_PAT_WAITRDY_ELEM(true)),
    450	NAND_OP_PARSER_PATTERN(tegra_nand_cmd,
    451		NAND_OP_PARSER_PAT_DATA_OUT_ELEM(false, 4)),
    452	NAND_OP_PARSER_PATTERN(tegra_nand_cmd,
    453		NAND_OP_PARSER_PAT_CMD_ELEM(true),
    454		NAND_OP_PARSER_PAT_ADDR_ELEM(true, 8),
    455		NAND_OP_PARSER_PAT_CMD_ELEM(true),
    456		NAND_OP_PARSER_PAT_WAITRDY_ELEM(true),
    457		NAND_OP_PARSER_PAT_DATA_IN_ELEM(true, 4)),
    458	);
    459
    460static void tegra_nand_select_target(struct nand_chip *chip,
    461				     unsigned int die_nr)
    462{
    463	struct tegra_nand_chip *nand = to_tegra_chip(chip);
    464	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    465
    466	ctrl->cur_cs = nand->cs[die_nr];
    467}
    468
    469static int tegra_nand_exec_op(struct nand_chip *chip,
    470			      const struct nand_operation *op,
    471			      bool check_only)
    472{
    473	if (!check_only)
    474		tegra_nand_select_target(chip, op->cs);
    475
    476	return nand_op_parser_exec_op(chip, &tegra_nand_op_parser, op,
    477				      check_only);
    478}
    479
    480static void tegra_nand_hw_ecc(struct tegra_nand_controller *ctrl,
    481			      struct nand_chip *chip, bool enable)
    482{
    483	struct tegra_nand_chip *nand = to_tegra_chip(chip);
    484
    485	if (chip->ecc.algo == NAND_ECC_ALGO_BCH && enable)
    486		writel_relaxed(nand->bch_config, ctrl->regs + BCH_CONFIG);
    487	else
    488		writel_relaxed(0, ctrl->regs + BCH_CONFIG);
    489
    490	if (enable)
    491		writel_relaxed(nand->config_ecc, ctrl->regs + CONFIG);
    492	else
    493		writel_relaxed(nand->config, ctrl->regs + CONFIG);
    494}
    495
    496static int tegra_nand_page_xfer(struct mtd_info *mtd, struct nand_chip *chip,
    497				void *buf, void *oob_buf, int oob_len, int page,
    498				bool read)
    499{
    500	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    501	enum dma_data_direction dir = read ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
    502	dma_addr_t dma_addr = 0, dma_addr_oob = 0;
    503	u32 addr1, cmd, dma_ctrl;
    504	int ret;
    505
    506	tegra_nand_select_target(chip, chip->cur_cs);
    507
    508	if (read) {
    509		writel_relaxed(NAND_CMD_READ0, ctrl->regs + CMD_REG1);
    510		writel_relaxed(NAND_CMD_READSTART, ctrl->regs + CMD_REG2);
    511	} else {
    512		writel_relaxed(NAND_CMD_SEQIN, ctrl->regs + CMD_REG1);
    513		writel_relaxed(NAND_CMD_PAGEPROG, ctrl->regs + CMD_REG2);
    514	}
    515	cmd = COMMAND_CLE | COMMAND_SEC_CMD;
    516
    517	/* Lower 16-bits are column, by default 0 */
    518	addr1 = page << 16;
    519
    520	if (!buf)
    521		addr1 |= mtd->writesize;
    522	writel_relaxed(addr1, ctrl->regs + ADDR_REG1);
    523
    524	if (chip->options & NAND_ROW_ADDR_3) {
    525		writel_relaxed(page >> 16, ctrl->regs + ADDR_REG2);
    526		cmd |= COMMAND_ALE | COMMAND_ALE_SIZE(5);
    527	} else {
    528		cmd |= COMMAND_ALE | COMMAND_ALE_SIZE(4);
    529	}
    530
    531	if (buf) {
    532		dma_addr = dma_map_single(ctrl->dev, buf, mtd->writesize, dir);
    533		ret = dma_mapping_error(ctrl->dev, dma_addr);
    534		if (ret) {
    535			dev_err(ctrl->dev, "dma mapping error\n");
    536			return -EINVAL;
    537		}
    538
    539		writel_relaxed(mtd->writesize - 1, ctrl->regs + DMA_CFG_A);
    540		writel_relaxed(dma_addr, ctrl->regs + DATA_PTR);
    541	}
    542
    543	if (oob_buf) {
    544		dma_addr_oob = dma_map_single(ctrl->dev, oob_buf, mtd->oobsize,
    545					      dir);
    546		ret = dma_mapping_error(ctrl->dev, dma_addr_oob);
    547		if (ret) {
    548			dev_err(ctrl->dev, "dma mapping error\n");
    549			ret = -EINVAL;
    550			goto err_unmap_dma_page;
    551		}
    552
    553		writel_relaxed(oob_len - 1, ctrl->regs + DMA_CFG_B);
    554		writel_relaxed(dma_addr_oob, ctrl->regs + TAG_PTR);
    555	}
    556
    557	dma_ctrl = DMA_MST_CTRL_GO | DMA_MST_CTRL_PERF_EN |
    558		   DMA_MST_CTRL_IE_DONE | DMA_MST_CTRL_IS_DONE |
    559		   DMA_MST_CTRL_BURST_16;
    560
    561	if (buf)
    562		dma_ctrl |= DMA_MST_CTRL_EN_A;
    563	if (oob_buf)
    564		dma_ctrl |= DMA_MST_CTRL_EN_B;
    565
    566	if (read)
    567		dma_ctrl |= DMA_MST_CTRL_IN | DMA_MST_CTRL_REUSE;
    568	else
    569		dma_ctrl |= DMA_MST_CTRL_OUT;
    570
    571	writel_relaxed(dma_ctrl, ctrl->regs + DMA_MST_CTRL);
    572
    573	cmd |= COMMAND_GO | COMMAND_RBSY_CHK | COMMAND_TRANS_SIZE(9) |
    574	       COMMAND_CE(ctrl->cur_cs);
    575
    576	if (buf)
    577		cmd |= COMMAND_A_VALID;
    578	if (oob_buf)
    579		cmd |= COMMAND_B_VALID;
    580
    581	if (read)
    582		cmd |= COMMAND_RX;
    583	else
    584		cmd |= COMMAND_TX | COMMAND_AFT_DAT;
    585
    586	writel_relaxed(cmd, ctrl->regs + COMMAND);
    587
    588	ret = wait_for_completion_timeout(&ctrl->command_complete,
    589					  msecs_to_jiffies(500));
    590	if (!ret) {
    591		dev_err(ctrl->dev, "COMMAND timeout\n");
    592		tegra_nand_dump_reg(ctrl);
    593		tegra_nand_controller_abort(ctrl);
    594		ret = -ETIMEDOUT;
    595		goto err_unmap_dma;
    596	}
    597
    598	ret = wait_for_completion_timeout(&ctrl->dma_complete,
    599					  msecs_to_jiffies(500));
    600	if (!ret) {
    601		dev_err(ctrl->dev, "DMA timeout\n");
    602		tegra_nand_dump_reg(ctrl);
    603		tegra_nand_controller_abort(ctrl);
    604		ret = -ETIMEDOUT;
    605		goto err_unmap_dma;
    606	}
    607	ret = 0;
    608
    609err_unmap_dma:
    610	if (oob_buf)
    611		dma_unmap_single(ctrl->dev, dma_addr_oob, mtd->oobsize, dir);
    612err_unmap_dma_page:
    613	if (buf)
    614		dma_unmap_single(ctrl->dev, dma_addr, mtd->writesize, dir);
    615
    616	return ret;
    617}
    618
    619static int tegra_nand_read_page_raw(struct nand_chip *chip, u8 *buf,
    620				    int oob_required, int page)
    621{
    622	struct mtd_info *mtd = nand_to_mtd(chip);
    623	void *oob_buf = oob_required ? chip->oob_poi : NULL;
    624
    625	return tegra_nand_page_xfer(mtd, chip, buf, oob_buf,
    626				    mtd->oobsize, page, true);
    627}
    628
    629static int tegra_nand_write_page_raw(struct nand_chip *chip, const u8 *buf,
    630				     int oob_required, int page)
    631{
    632	struct mtd_info *mtd = nand_to_mtd(chip);
    633	void *oob_buf = oob_required ? chip->oob_poi : NULL;
    634
    635	return tegra_nand_page_xfer(mtd, chip, (void *)buf, oob_buf,
    636				     mtd->oobsize, page, false);
    637}
    638
    639static int tegra_nand_read_oob(struct nand_chip *chip, int page)
    640{
    641	struct mtd_info *mtd = nand_to_mtd(chip);
    642
    643	return tegra_nand_page_xfer(mtd, chip, NULL, chip->oob_poi,
    644				    mtd->oobsize, page, true);
    645}
    646
    647static int tegra_nand_write_oob(struct nand_chip *chip, int page)
    648{
    649	struct mtd_info *mtd = nand_to_mtd(chip);
    650
    651	return tegra_nand_page_xfer(mtd, chip, NULL, chip->oob_poi,
    652				    mtd->oobsize, page, false);
    653}
    654
    655static int tegra_nand_read_page_hwecc(struct nand_chip *chip, u8 *buf,
    656				      int oob_required, int page)
    657{
    658	struct mtd_info *mtd = nand_to_mtd(chip);
    659	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    660	struct tegra_nand_chip *nand = to_tegra_chip(chip);
    661	void *oob_buf = oob_required ? chip->oob_poi : NULL;
    662	u32 dec_stat, max_corr_cnt;
    663	unsigned long fail_sec_flag;
    664	int ret;
    665
    666	tegra_nand_hw_ecc(ctrl, chip, true);
    667	ret = tegra_nand_page_xfer(mtd, chip, buf, oob_buf, 0, page, true);
    668	tegra_nand_hw_ecc(ctrl, chip, false);
    669	if (ret)
    670		return ret;
    671
    672	/* No correctable or un-correctable errors, page must have 0 bitflips */
    673	if (!ctrl->last_read_error)
    674		return 0;
    675
    676	/*
    677	 * Correctable or un-correctable errors occurred. Use DEC_STAT_BUF
    678	 * which contains information for all ECC selections.
    679	 *
    680	 * Note that since we do not use Command Queues DEC_RESULT does not
    681	 * state the number of pages we can read from the DEC_STAT_BUF. But
    682	 * since CORRFAIL_ERR did occur during page read we do have a valid
    683	 * result in DEC_STAT_BUF.
    684	 */
    685	ctrl->last_read_error = false;
    686	dec_stat = readl_relaxed(ctrl->regs + DEC_STAT_BUF);
    687
    688	fail_sec_flag = (dec_stat & DEC_STAT_BUF_FAIL_SEC_FLAG_MASK) >>
    689			DEC_STAT_BUF_FAIL_SEC_FLAG_SHIFT;
    690
    691	max_corr_cnt = (dec_stat & DEC_STAT_BUF_MAX_CORR_CNT_MASK) >>
    692		       DEC_STAT_BUF_MAX_CORR_CNT_SHIFT;
    693
    694	if (fail_sec_flag) {
    695		int bit, max_bitflips = 0;
    696
    697		/*
    698		 * Since we do not support subpage writes, a complete page
    699		 * is either written or not. We can take a shortcut here by
    700		 * checking wheather any of the sector has been successful
    701		 * read. If at least one sectors has been read successfully,
    702		 * the page must have been a written previously. It cannot
    703		 * be an erased page.
    704		 *
    705		 * E.g. controller might return fail_sec_flag with 0x4, which
    706		 * would mean only the third sector failed to correct. The
    707		 * page must have been written and the third sector is really
    708		 * not correctable anymore.
    709		 */
    710		if (fail_sec_flag ^ GENMASK(chip->ecc.steps - 1, 0)) {
    711			mtd->ecc_stats.failed += hweight8(fail_sec_flag);
    712			return max_corr_cnt;
    713		}
    714
    715		/*
    716		 * All sectors failed to correct, but the ECC isn't smart
    717		 * enough to figure out if a page is really just erased.
    718		 * Read OOB data and check whether data/OOB is completely
    719		 * erased or if error correction just failed for all sub-
    720		 * pages.
    721		 */
    722		ret = tegra_nand_read_oob(chip, page);
    723		if (ret < 0)
    724			return ret;
    725
    726		for_each_set_bit(bit, &fail_sec_flag, chip->ecc.steps) {
    727			u8 *data = buf + (chip->ecc.size * bit);
    728			u8 *oob = chip->oob_poi + nand->ecc.offset +
    729				  (chip->ecc.bytes * bit);
    730
    731			ret = nand_check_erased_ecc_chunk(data, chip->ecc.size,
    732							  oob, chip->ecc.bytes,
    733							  NULL, 0,
    734							  chip->ecc.strength);
    735			if (ret < 0) {
    736				mtd->ecc_stats.failed++;
    737			} else {
    738				mtd->ecc_stats.corrected += ret;
    739				max_bitflips = max(ret, max_bitflips);
    740			}
    741		}
    742
    743		return max_t(unsigned int, max_corr_cnt, max_bitflips);
    744	} else {
    745		int corr_sec_flag;
    746
    747		corr_sec_flag = (dec_stat & DEC_STAT_BUF_CORR_SEC_FLAG_MASK) >>
    748				DEC_STAT_BUF_CORR_SEC_FLAG_SHIFT;
    749
    750		/*
    751		 * The value returned in the register is the maximum of
    752		 * bitflips encountered in any of the ECC regions. As there is
    753		 * no way to get the number of bitflips in a specific regions
    754		 * we are not able to deliver correct stats but instead
    755		 * overestimate the number of corrected bitflips by assuming
    756		 * that all regions where errors have been corrected
    757		 * encountered the maximum number of bitflips.
    758		 */
    759		mtd->ecc_stats.corrected += max_corr_cnt * hweight8(corr_sec_flag);
    760
    761		return max_corr_cnt;
    762	}
    763}
    764
    765static int tegra_nand_write_page_hwecc(struct nand_chip *chip, const u8 *buf,
    766				       int oob_required, int page)
    767{
    768	struct mtd_info *mtd = nand_to_mtd(chip);
    769	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    770	void *oob_buf = oob_required ? chip->oob_poi : NULL;
    771	int ret;
    772
    773	tegra_nand_hw_ecc(ctrl, chip, true);
    774	ret = tegra_nand_page_xfer(mtd, chip, (void *)buf, oob_buf,
    775				   0, page, false);
    776	tegra_nand_hw_ecc(ctrl, chip, false);
    777
    778	return ret;
    779}
    780
    781static void tegra_nand_setup_timing(struct tegra_nand_controller *ctrl,
    782				    const struct nand_sdr_timings *timings)
    783{
    784	/*
    785	 * The period (and all other timings in this function) is in ps,
    786	 * so need to take care here to avoid integer overflows.
    787	 */
    788	unsigned int rate = clk_get_rate(ctrl->clk) / 1000000;
    789	unsigned int period = DIV_ROUND_UP(1000000, rate);
    790	u32 val, reg = 0;
    791
    792	val = DIV_ROUND_UP(max3(timings->tAR_min, timings->tRR_min,
    793				timings->tRC_min), period);
    794	reg |= TIMING_TCR_TAR_TRR(OFFSET(val, 3));
    795
    796	val = DIV_ROUND_UP(max(max(timings->tCS_min, timings->tCH_min),
    797			       max(timings->tALS_min, timings->tALH_min)),
    798			   period);
    799	reg |= TIMING_TCS(OFFSET(val, 2));
    800
    801	val = DIV_ROUND_UP(max(timings->tRP_min, timings->tREA_max) + 6000,
    802			   period);
    803	reg |= TIMING_TRP(OFFSET(val, 1)) | TIMING_TRP_RESP(OFFSET(val, 1));
    804
    805	reg |= TIMING_TWB(OFFSET(DIV_ROUND_UP(timings->tWB_max, period), 1));
    806	reg |= TIMING_TWHR(OFFSET(DIV_ROUND_UP(timings->tWHR_min, period), 1));
    807	reg |= TIMING_TWH(OFFSET(DIV_ROUND_UP(timings->tWH_min, period), 1));
    808	reg |= TIMING_TWP(OFFSET(DIV_ROUND_UP(timings->tWP_min, period), 1));
    809	reg |= TIMING_TRH(OFFSET(DIV_ROUND_UP(timings->tREH_min, period), 1));
    810
    811	writel_relaxed(reg, ctrl->regs + TIMING_1);
    812
    813	val = DIV_ROUND_UP(timings->tADL_min, period);
    814	reg = TIMING_TADL(OFFSET(val, 3));
    815
    816	writel_relaxed(reg, ctrl->regs + TIMING_2);
    817}
    818
    819static int tegra_nand_setup_interface(struct nand_chip *chip, int csline,
    820				      const struct nand_interface_config *conf)
    821{
    822	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    823	const struct nand_sdr_timings *timings;
    824
    825	timings = nand_get_sdr_timings(conf);
    826	if (IS_ERR(timings))
    827		return PTR_ERR(timings);
    828
    829	if (csline == NAND_DATA_IFACE_CHECK_ONLY)
    830		return 0;
    831
    832	tegra_nand_setup_timing(ctrl, timings);
    833
    834	return 0;
    835}
    836
    837static const int rs_strength_bootable[] = { 4 };
    838static const int rs_strength[] = { 4, 6, 8 };
    839static const int bch_strength_bootable[] = { 8, 16 };
    840static const int bch_strength[] = { 4, 8, 14, 16 };
    841
    842static int tegra_nand_get_strength(struct nand_chip *chip, const int *strength,
    843				   int strength_len, int bits_per_step,
    844				   int oobsize)
    845{
    846	struct nand_device *base = mtd_to_nanddev(nand_to_mtd(chip));
    847	const struct nand_ecc_props *requirements =
    848		nanddev_get_ecc_requirements(base);
    849	bool maximize = base->ecc.user_conf.flags & NAND_ECC_MAXIMIZE_STRENGTH;
    850	int i;
    851
    852	/*
    853	 * Loop through available strengths. Backwards in case we try to
    854	 * maximize the BCH strength.
    855	 */
    856	for (i = 0; i < strength_len; i++) {
    857		int strength_sel, bytes_per_step, bytes_per_page;
    858
    859		if (maximize) {
    860			strength_sel = strength[strength_len - i - 1];
    861		} else {
    862			strength_sel = strength[i];
    863
    864			if (strength_sel < requirements->strength)
    865				continue;
    866		}
    867
    868		bytes_per_step = DIV_ROUND_UP(bits_per_step * strength_sel,
    869					      BITS_PER_BYTE);
    870		bytes_per_page = round_up(bytes_per_step * chip->ecc.steps, 4);
    871
    872		/* Check whether strength fits OOB */
    873		if (bytes_per_page < (oobsize - SKIP_SPARE_BYTES))
    874			return strength_sel;
    875	}
    876
    877	return -EINVAL;
    878}
    879
    880static int tegra_nand_select_strength(struct nand_chip *chip, int oobsize)
    881{
    882	const int *strength;
    883	int strength_len, bits_per_step;
    884
    885	switch (chip->ecc.algo) {
    886	case NAND_ECC_ALGO_RS:
    887		bits_per_step = BITS_PER_STEP_RS;
    888		if (chip->options & NAND_IS_BOOT_MEDIUM) {
    889			strength = rs_strength_bootable;
    890			strength_len = ARRAY_SIZE(rs_strength_bootable);
    891		} else {
    892			strength = rs_strength;
    893			strength_len = ARRAY_SIZE(rs_strength);
    894		}
    895		break;
    896	case NAND_ECC_ALGO_BCH:
    897		bits_per_step = BITS_PER_STEP_BCH;
    898		if (chip->options & NAND_IS_BOOT_MEDIUM) {
    899			strength = bch_strength_bootable;
    900			strength_len = ARRAY_SIZE(bch_strength_bootable);
    901		} else {
    902			strength = bch_strength;
    903			strength_len = ARRAY_SIZE(bch_strength);
    904		}
    905		break;
    906	default:
    907		return -EINVAL;
    908	}
    909
    910	return tegra_nand_get_strength(chip, strength, strength_len,
    911				       bits_per_step, oobsize);
    912}
    913
    914static int tegra_nand_attach_chip(struct nand_chip *chip)
    915{
    916	struct tegra_nand_controller *ctrl = to_tegra_ctrl(chip->controller);
    917	const struct nand_ecc_props *requirements =
    918		nanddev_get_ecc_requirements(&chip->base);
    919	struct tegra_nand_chip *nand = to_tegra_chip(chip);
    920	struct mtd_info *mtd = nand_to_mtd(chip);
    921	int bits_per_step;
    922	int ret;
    923
    924	if (chip->bbt_options & NAND_BBT_USE_FLASH)
    925		chip->bbt_options |= NAND_BBT_NO_OOB;
    926
    927	chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
    928	chip->ecc.size = 512;
    929	chip->ecc.steps = mtd->writesize / chip->ecc.size;
    930	if (requirements->step_size != 512) {
    931		dev_err(ctrl->dev, "Unsupported step size %d\n",
    932			requirements->step_size);
    933		return -EINVAL;
    934	}
    935
    936	chip->ecc.read_page = tegra_nand_read_page_hwecc;
    937	chip->ecc.write_page = tegra_nand_write_page_hwecc;
    938	chip->ecc.read_page_raw = tegra_nand_read_page_raw;
    939	chip->ecc.write_page_raw = tegra_nand_write_page_raw;
    940	chip->ecc.read_oob = tegra_nand_read_oob;
    941	chip->ecc.write_oob = tegra_nand_write_oob;
    942
    943	if (chip->options & NAND_BUSWIDTH_16)
    944		nand->config |= CONFIG_BUS_WIDTH_16;
    945
    946	if (chip->ecc.algo == NAND_ECC_ALGO_UNKNOWN) {
    947		if (mtd->writesize < 2048)
    948			chip->ecc.algo = NAND_ECC_ALGO_RS;
    949		else
    950			chip->ecc.algo = NAND_ECC_ALGO_BCH;
    951	}
    952
    953	if (chip->ecc.algo == NAND_ECC_ALGO_BCH && mtd->writesize < 2048) {
    954		dev_err(ctrl->dev, "BCH supports 2K or 4K page size only\n");
    955		return -EINVAL;
    956	}
    957
    958	if (!chip->ecc.strength) {
    959		ret = tegra_nand_select_strength(chip, mtd->oobsize);
    960		if (ret < 0) {
    961			dev_err(ctrl->dev,
    962				"No valid strength found, minimum %d\n",
    963				requirements->strength);
    964			return ret;
    965		}
    966
    967		chip->ecc.strength = ret;
    968	}
    969
    970	nand->config_ecc = CONFIG_PIPE_EN | CONFIG_SKIP_SPARE |
    971			   CONFIG_SKIP_SPARE_SIZE_4;
    972
    973	switch (chip->ecc.algo) {
    974	case NAND_ECC_ALGO_RS:
    975		bits_per_step = BITS_PER_STEP_RS * chip->ecc.strength;
    976		mtd_set_ooblayout(mtd, &tegra_nand_oob_rs_ops);
    977		nand->config_ecc |= CONFIG_HW_ECC | CONFIG_ECC_SEL |
    978				    CONFIG_ERR_COR;
    979		switch (chip->ecc.strength) {
    980		case 4:
    981			nand->config_ecc |= CONFIG_TVAL_4;
    982			break;
    983		case 6:
    984			nand->config_ecc |= CONFIG_TVAL_6;
    985			break;
    986		case 8:
    987			nand->config_ecc |= CONFIG_TVAL_8;
    988			break;
    989		default:
    990			dev_err(ctrl->dev, "ECC strength %d not supported\n",
    991				chip->ecc.strength);
    992			return -EINVAL;
    993		}
    994		break;
    995	case NAND_ECC_ALGO_BCH:
    996		bits_per_step = BITS_PER_STEP_BCH * chip->ecc.strength;
    997		mtd_set_ooblayout(mtd, &tegra_nand_oob_bch_ops);
    998		nand->bch_config = BCH_ENABLE;
    999		switch (chip->ecc.strength) {
   1000		case 4:
   1001			nand->bch_config |= BCH_TVAL_4;
   1002			break;
   1003		case 8:
   1004			nand->bch_config |= BCH_TVAL_8;
   1005			break;
   1006		case 14:
   1007			nand->bch_config |= BCH_TVAL_14;
   1008			break;
   1009		case 16:
   1010			nand->bch_config |= BCH_TVAL_16;
   1011			break;
   1012		default:
   1013			dev_err(ctrl->dev, "ECC strength %d not supported\n",
   1014				chip->ecc.strength);
   1015			return -EINVAL;
   1016		}
   1017		break;
   1018	default:
   1019		dev_err(ctrl->dev, "ECC algorithm not supported\n");
   1020		return -EINVAL;
   1021	}
   1022
   1023	dev_info(ctrl->dev, "Using %s with strength %d per 512 byte step\n",
   1024		 chip->ecc.algo == NAND_ECC_ALGO_BCH ? "BCH" : "RS",
   1025		 chip->ecc.strength);
   1026
   1027	chip->ecc.bytes = DIV_ROUND_UP(bits_per_step, BITS_PER_BYTE);
   1028
   1029	switch (mtd->writesize) {
   1030	case 256:
   1031		nand->config |= CONFIG_PS_256;
   1032		break;
   1033	case 512:
   1034		nand->config |= CONFIG_PS_512;
   1035		break;
   1036	case 1024:
   1037		nand->config |= CONFIG_PS_1024;
   1038		break;
   1039	case 2048:
   1040		nand->config |= CONFIG_PS_2048;
   1041		break;
   1042	case 4096:
   1043		nand->config |= CONFIG_PS_4096;
   1044		break;
   1045	default:
   1046		dev_err(ctrl->dev, "Unsupported writesize %d\n",
   1047			mtd->writesize);
   1048		return -ENODEV;
   1049	}
   1050
   1051	/* Store complete configuration for HW ECC in config_ecc */
   1052	nand->config_ecc |= nand->config;
   1053
   1054	/* Non-HW ECC read/writes complete OOB */
   1055	nand->config |= CONFIG_TAG_BYTE_SIZE(mtd->oobsize - 1);
   1056	writel_relaxed(nand->config, ctrl->regs + CONFIG);
   1057
   1058	return 0;
   1059}
   1060
   1061static const struct nand_controller_ops tegra_nand_controller_ops = {
   1062	.attach_chip = &tegra_nand_attach_chip,
   1063	.exec_op = tegra_nand_exec_op,
   1064	.setup_interface = tegra_nand_setup_interface,
   1065};
   1066
   1067static int tegra_nand_chips_init(struct device *dev,
   1068				 struct tegra_nand_controller *ctrl)
   1069{
   1070	struct device_node *np = dev->of_node;
   1071	struct device_node *np_nand;
   1072	int nsels, nchips = of_get_child_count(np);
   1073	struct tegra_nand_chip *nand;
   1074	struct mtd_info *mtd;
   1075	struct nand_chip *chip;
   1076	int ret;
   1077	u32 cs;
   1078
   1079	if (nchips != 1) {
   1080		dev_err(dev, "Currently only one NAND chip supported\n");
   1081		return -EINVAL;
   1082	}
   1083
   1084	np_nand = of_get_next_child(np, NULL);
   1085
   1086	nsels = of_property_count_elems_of_size(np_nand, "reg", sizeof(u32));
   1087	if (nsels != 1) {
   1088		dev_err(dev, "Missing/invalid reg property\n");
   1089		return -EINVAL;
   1090	}
   1091
   1092	/* Retrieve CS id, currently only single die NAND supported */
   1093	ret = of_property_read_u32(np_nand, "reg", &cs);
   1094	if (ret) {
   1095		dev_err(dev, "could not retrieve reg property: %d\n", ret);
   1096		return ret;
   1097	}
   1098
   1099	nand = devm_kzalloc(dev, sizeof(*nand), GFP_KERNEL);
   1100	if (!nand)
   1101		return -ENOMEM;
   1102
   1103	nand->cs[0] = cs;
   1104
   1105	nand->wp_gpio = devm_gpiod_get_optional(dev, "wp", GPIOD_OUT_LOW);
   1106
   1107	if (IS_ERR(nand->wp_gpio)) {
   1108		ret = PTR_ERR(nand->wp_gpio);
   1109		dev_err(dev, "Failed to request WP GPIO: %d\n", ret);
   1110		return ret;
   1111	}
   1112
   1113	chip = &nand->chip;
   1114	chip->controller = &ctrl->controller;
   1115
   1116	mtd = nand_to_mtd(chip);
   1117
   1118	mtd->dev.parent = dev;
   1119	mtd->owner = THIS_MODULE;
   1120
   1121	nand_set_flash_node(chip, np_nand);
   1122
   1123	if (!mtd->name)
   1124		mtd->name = "tegra_nand";
   1125
   1126	chip->options = NAND_NO_SUBPAGE_WRITE | NAND_USES_DMA;
   1127
   1128	ret = nand_scan(chip, 1);
   1129	if (ret)
   1130		return ret;
   1131
   1132	mtd_ooblayout_ecc(mtd, 0, &nand->ecc);
   1133
   1134	ret = mtd_device_register(mtd, NULL, 0);
   1135	if (ret) {
   1136		dev_err(dev, "Failed to register mtd device: %d\n", ret);
   1137		nand_cleanup(chip);
   1138		return ret;
   1139	}
   1140
   1141	ctrl->chip = chip;
   1142
   1143	return 0;
   1144}
   1145
   1146static int tegra_nand_probe(struct platform_device *pdev)
   1147{
   1148	struct reset_control *rst;
   1149	struct tegra_nand_controller *ctrl;
   1150	int err = 0;
   1151
   1152	ctrl = devm_kzalloc(&pdev->dev, sizeof(*ctrl), GFP_KERNEL);
   1153	if (!ctrl)
   1154		return -ENOMEM;
   1155
   1156	ctrl->dev = &pdev->dev;
   1157	platform_set_drvdata(pdev, ctrl);
   1158	nand_controller_init(&ctrl->controller);
   1159	ctrl->controller.ops = &tegra_nand_controller_ops;
   1160
   1161	ctrl->regs = devm_platform_ioremap_resource(pdev, 0);
   1162	if (IS_ERR(ctrl->regs))
   1163		return PTR_ERR(ctrl->regs);
   1164
   1165	rst = devm_reset_control_get(&pdev->dev, "nand");
   1166	if (IS_ERR(rst))
   1167		return PTR_ERR(rst);
   1168
   1169	ctrl->clk = devm_clk_get(&pdev->dev, "nand");
   1170	if (IS_ERR(ctrl->clk))
   1171		return PTR_ERR(ctrl->clk);
   1172
   1173	err = devm_tegra_core_dev_init_opp_table_common(&pdev->dev);
   1174	if (err)
   1175		return err;
   1176
   1177	/*
   1178	 * This driver doesn't support active power management yet,
   1179	 * so we will simply keep device resumed.
   1180	 */
   1181	pm_runtime_enable(&pdev->dev);
   1182	err = pm_runtime_resume_and_get(&pdev->dev);
   1183	if (err)
   1184		return err;
   1185
   1186	err = reset_control_reset(rst);
   1187	if (err) {
   1188		dev_err(ctrl->dev, "Failed to reset HW: %d\n", err);
   1189		goto err_put_pm;
   1190	}
   1191
   1192	writel_relaxed(HWSTATUS_CMD_DEFAULT, ctrl->regs + HWSTATUS_CMD);
   1193	writel_relaxed(HWSTATUS_MASK_DEFAULT, ctrl->regs + HWSTATUS_MASK);
   1194	writel_relaxed(INT_MASK, ctrl->regs + IER);
   1195
   1196	init_completion(&ctrl->command_complete);
   1197	init_completion(&ctrl->dma_complete);
   1198
   1199	ctrl->irq = platform_get_irq(pdev, 0);
   1200	err = devm_request_irq(&pdev->dev, ctrl->irq, tegra_nand_irq, 0,
   1201			       dev_name(&pdev->dev), ctrl);
   1202	if (err) {
   1203		dev_err(ctrl->dev, "Failed to get IRQ: %d\n", err);
   1204		goto err_put_pm;
   1205	}
   1206
   1207	writel_relaxed(DMA_MST_CTRL_IS_DONE, ctrl->regs + DMA_MST_CTRL);
   1208
   1209	err = tegra_nand_chips_init(ctrl->dev, ctrl);
   1210	if (err)
   1211		goto err_put_pm;
   1212
   1213	return 0;
   1214
   1215err_put_pm:
   1216	pm_runtime_put_sync_suspend(ctrl->dev);
   1217	pm_runtime_force_suspend(ctrl->dev);
   1218	return err;
   1219}
   1220
   1221static int tegra_nand_remove(struct platform_device *pdev)
   1222{
   1223	struct tegra_nand_controller *ctrl = platform_get_drvdata(pdev);
   1224	struct nand_chip *chip = ctrl->chip;
   1225	struct mtd_info *mtd = nand_to_mtd(chip);
   1226	int ret;
   1227
   1228	ret = mtd_device_unregister(mtd);
   1229	if (ret)
   1230		return ret;
   1231
   1232	nand_cleanup(chip);
   1233
   1234	pm_runtime_put_sync_suspend(ctrl->dev);
   1235	pm_runtime_force_suspend(ctrl->dev);
   1236
   1237	return 0;
   1238}
   1239
   1240static int __maybe_unused tegra_nand_runtime_resume(struct device *dev)
   1241{
   1242	struct tegra_nand_controller *ctrl = dev_get_drvdata(dev);
   1243	int err;
   1244
   1245	err = clk_prepare_enable(ctrl->clk);
   1246	if (err) {
   1247		dev_err(dev, "Failed to enable clock: %d\n", err);
   1248		return err;
   1249	}
   1250
   1251	return 0;
   1252}
   1253
   1254static int __maybe_unused tegra_nand_runtime_suspend(struct device *dev)
   1255{
   1256	struct tegra_nand_controller *ctrl = dev_get_drvdata(dev);
   1257
   1258	clk_disable_unprepare(ctrl->clk);
   1259
   1260	return 0;
   1261}
   1262
   1263static const struct dev_pm_ops tegra_nand_pm = {
   1264	SET_RUNTIME_PM_OPS(tegra_nand_runtime_suspend, tegra_nand_runtime_resume,
   1265			   NULL)
   1266};
   1267
   1268static const struct of_device_id tegra_nand_of_match[] = {
   1269	{ .compatible = "nvidia,tegra20-nand" },
   1270	{ /* sentinel */ }
   1271};
   1272MODULE_DEVICE_TABLE(of, tegra_nand_of_match);
   1273
   1274static struct platform_driver tegra_nand_driver = {
   1275	.driver = {
   1276		.name = "tegra-nand",
   1277		.of_match_table = tegra_nand_of_match,
   1278		.pm = &tegra_nand_pm,
   1279	},
   1280	.probe = tegra_nand_probe,
   1281	.remove = tegra_nand_remove,
   1282};
   1283module_platform_driver(tegra_nand_driver);
   1284
   1285MODULE_DESCRIPTION("NVIDIA Tegra NAND driver");
   1286MODULE_AUTHOR("Thierry Reding <thierry.reding@nvidia.com>");
   1287MODULE_AUTHOR("Lucas Stach <dev@lynxeye.de>");
   1288MODULE_AUTHOR("Stefan Agner <stefan@agner.ch>");
   1289MODULE_LICENSE("GPL v2");