linux/drivers/mtd/spi-nor/fsl-quadspi.c
<<
>>
Prefs
   1/*
   2 * Freescale QuadSPI driver.
   3 *
   4 * Copyright (C) 2013 Freescale Semiconductor, Inc.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 */
  11#include <linux/kernel.h>
  12#include <linux/module.h>
  13#include <linux/interrupt.h>
  14#include <linux/errno.h>
  15#include <linux/platform_device.h>
  16#include <linux/sched.h>
  17#include <linux/delay.h>
  18#include <linux/io.h>
  19#include <linux/clk.h>
  20#include <linux/err.h>
  21#include <linux/of.h>
  22#include <linux/of_device.h>
  23#include <linux/timer.h>
  24#include <linux/jiffies.h>
  25#include <linux/completion.h>
  26#include <linux/mtd/mtd.h>
  27#include <linux/mtd/partitions.h>
  28#include <linux/mtd/spi-nor.h>
  29
  30/* The registers */
  31#define QUADSPI_MCR                     0x00
  32#define QUADSPI_MCR_RESERVED_SHIFT      16
  33#define QUADSPI_MCR_RESERVED_MASK       (0xF << QUADSPI_MCR_RESERVED_SHIFT)
  34#define QUADSPI_MCR_MDIS_SHIFT          14
  35#define QUADSPI_MCR_MDIS_MASK           (1 << QUADSPI_MCR_MDIS_SHIFT)
  36#define QUADSPI_MCR_CLR_TXF_SHIFT       11
  37#define QUADSPI_MCR_CLR_TXF_MASK        (1 << QUADSPI_MCR_CLR_TXF_SHIFT)
  38#define QUADSPI_MCR_CLR_RXF_SHIFT       10
  39#define QUADSPI_MCR_CLR_RXF_MASK        (1 << QUADSPI_MCR_CLR_RXF_SHIFT)
  40#define QUADSPI_MCR_DDR_EN_SHIFT        7
  41#define QUADSPI_MCR_DDR_EN_MASK         (1 << QUADSPI_MCR_DDR_EN_SHIFT)
  42#define QUADSPI_MCR_END_CFG_SHIFT       2
  43#define QUADSPI_MCR_END_CFG_MASK        (3 << QUADSPI_MCR_END_CFG_SHIFT)
  44#define QUADSPI_MCR_SWRSTHD_SHIFT       1
  45#define QUADSPI_MCR_SWRSTHD_MASK        (1 << QUADSPI_MCR_SWRSTHD_SHIFT)
  46#define QUADSPI_MCR_SWRSTSD_SHIFT       0
  47#define QUADSPI_MCR_SWRSTSD_MASK        (1 << QUADSPI_MCR_SWRSTSD_SHIFT)
  48
  49#define QUADSPI_IPCR                    0x08
  50#define QUADSPI_IPCR_SEQID_SHIFT        24
  51#define QUADSPI_IPCR_SEQID_MASK         (0xF << QUADSPI_IPCR_SEQID_SHIFT)
  52
  53#define QUADSPI_BUF0CR                  0x10
  54#define QUADSPI_BUF1CR                  0x14
  55#define QUADSPI_BUF2CR                  0x18
  56#define QUADSPI_BUFXCR_INVALID_MSTRID   0xe
  57
  58#define QUADSPI_BUF3CR                  0x1c
  59#define QUADSPI_BUF3CR_ALLMST_SHIFT     31
  60#define QUADSPI_BUF3CR_ALLMST_MASK      (1 << QUADSPI_BUF3CR_ALLMST_SHIFT)
  61#define QUADSPI_BUF3CR_ADATSZ_SHIFT             8
  62#define QUADSPI_BUF3CR_ADATSZ_MASK      (0xFF << QUADSPI_BUF3CR_ADATSZ_SHIFT)
  63
  64#define QUADSPI_BFGENCR                 0x20
  65#define QUADSPI_BFGENCR_PAR_EN_SHIFT    16
  66#define QUADSPI_BFGENCR_PAR_EN_MASK     (1 << (QUADSPI_BFGENCR_PAR_EN_SHIFT))
  67#define QUADSPI_BFGENCR_SEQID_SHIFT     12
  68#define QUADSPI_BFGENCR_SEQID_MASK      (0xF << QUADSPI_BFGENCR_SEQID_SHIFT)
  69
  70#define QUADSPI_BUF0IND                 0x30
  71#define QUADSPI_BUF1IND                 0x34
  72#define QUADSPI_BUF2IND                 0x38
  73#define QUADSPI_SFAR                    0x100
  74
  75#define QUADSPI_SMPR                    0x108
  76#define QUADSPI_SMPR_DDRSMP_SHIFT       16
  77#define QUADSPI_SMPR_DDRSMP_MASK        (7 << QUADSPI_SMPR_DDRSMP_SHIFT)
  78#define QUADSPI_SMPR_FSDLY_SHIFT        6
  79#define QUADSPI_SMPR_FSDLY_MASK         (1 << QUADSPI_SMPR_FSDLY_SHIFT)
  80#define QUADSPI_SMPR_FSPHS_SHIFT        5
  81#define QUADSPI_SMPR_FSPHS_MASK         (1 << QUADSPI_SMPR_FSPHS_SHIFT)
  82#define QUADSPI_SMPR_HSENA_SHIFT        0
  83#define QUADSPI_SMPR_HSENA_MASK         (1 << QUADSPI_SMPR_HSENA_SHIFT)
  84
  85#define QUADSPI_RBSR                    0x10c
  86#define QUADSPI_RBSR_RDBFL_SHIFT        8
  87#define QUADSPI_RBSR_RDBFL_MASK         (0x3F << QUADSPI_RBSR_RDBFL_SHIFT)
  88
  89#define QUADSPI_RBCT                    0x110
  90#define QUADSPI_RBCT_WMRK_MASK          0x1F
  91#define QUADSPI_RBCT_RXBRD_SHIFT        8
  92#define QUADSPI_RBCT_RXBRD_USEIPS       (0x1 << QUADSPI_RBCT_RXBRD_SHIFT)
  93
  94#define QUADSPI_TBSR                    0x150
  95#define QUADSPI_TBDR                    0x154
  96#define QUADSPI_SR                      0x15c
  97#define QUADSPI_SR_IP_ACC_SHIFT         1
  98#define QUADSPI_SR_IP_ACC_MASK          (0x1 << QUADSPI_SR_IP_ACC_SHIFT)
  99#define QUADSPI_SR_AHB_ACC_SHIFT        2
 100#define QUADSPI_SR_AHB_ACC_MASK         (0x1 << QUADSPI_SR_AHB_ACC_SHIFT)
 101
 102#define QUADSPI_FR                      0x160
 103#define QUADSPI_FR_TFF_MASK             0x1
 104
 105#define QUADSPI_SFA1AD                  0x180
 106#define QUADSPI_SFA2AD                  0x184
 107#define QUADSPI_SFB1AD                  0x188
 108#define QUADSPI_SFB2AD                  0x18c
 109#define QUADSPI_RBDR                    0x200
 110
 111#define QUADSPI_LUTKEY                  0x300
 112#define QUADSPI_LUTKEY_VALUE            0x5AF05AF0
 113
 114#define QUADSPI_LCKCR                   0x304
 115#define QUADSPI_LCKER_LOCK              0x1
 116#define QUADSPI_LCKER_UNLOCK            0x2
 117
 118#define QUADSPI_RSER                    0x164
 119#define QUADSPI_RSER_TFIE               (0x1 << 0)
 120
 121#define QUADSPI_LUT_BASE                0x310
 122
 123/*
 124 * The definition of the LUT register shows below:
 125 *
 126 *  ---------------------------------------------------
 127 *  | INSTR1 | PAD1 | OPRND1 | INSTR0 | PAD0 | OPRND0 |
 128 *  ---------------------------------------------------
 129 */
 130#define OPRND0_SHIFT            0
 131#define PAD0_SHIFT              8
 132#define INSTR0_SHIFT            10
 133#define OPRND1_SHIFT            16
 134
 135/* Instruction set for the LUT register. */
 136#define LUT_STOP                0
 137#define LUT_CMD                 1
 138#define LUT_ADDR                2
 139#define LUT_DUMMY               3
 140#define LUT_MODE                4
 141#define LUT_MODE2               5
 142#define LUT_MODE4               6
 143#define LUT_READ                7
 144#define LUT_WRITE               8
 145#define LUT_JMP_ON_CS           9
 146#define LUT_ADDR_DDR            10
 147#define LUT_MODE_DDR            11
 148#define LUT_MODE2_DDR           12
 149#define LUT_MODE4_DDR           13
 150#define LUT_READ_DDR            14
 151#define LUT_WRITE_DDR           15
 152#define LUT_DATA_LEARN          16
 153
 154/*
 155 * The PAD definitions for LUT register.
 156 *
 157 * The pad stands for the lines number of IO[0:3].
 158 * For example, the Quad read need four IO lines, so you should
 159 * set LUT_PAD4 which means we use four IO lines.
 160 */
 161#define LUT_PAD1                0
 162#define LUT_PAD2                1
 163#define LUT_PAD4                2
 164
 165/* Oprands for the LUT register. */
 166#define ADDR24BIT               0x18
 167#define ADDR32BIT               0x20
 168
 169/* Macros for constructing the LUT register. */
 170#define LUT0(ins, pad, opr)                                             \
 171                (((opr) << OPRND0_SHIFT) | ((LUT_##pad) << PAD0_SHIFT) | \
 172                ((LUT_##ins) << INSTR0_SHIFT))
 173
 174#define LUT1(ins, pad, opr)     (LUT0(ins, pad, opr) << OPRND1_SHIFT)
 175
 176/* other macros for LUT register. */
 177#define QUADSPI_LUT(x)          (QUADSPI_LUT_BASE + (x) * 4)
 178#define QUADSPI_LUT_NUM         64
 179
 180/* SEQID -- we can have 16 seqids at most. */
 181#define SEQID_QUAD_READ         0
 182#define SEQID_WREN              1
 183#define SEQID_WRDI              2
 184#define SEQID_RDSR              3
 185#define SEQID_SE                4
 186#define SEQID_CHIP_ERASE        5
 187#define SEQID_PP                6
 188#define SEQID_RDID              7
 189#define SEQID_WRSR              8
 190#define SEQID_RDCR              9
 191#define SEQID_EN4B              10
 192#define SEQID_BRWR              11
 193
 194enum fsl_qspi_devtype {
 195        FSL_QUADSPI_VYBRID,
 196        FSL_QUADSPI_IMX6SX,
 197};
 198
 199struct fsl_qspi_devtype_data {
 200        enum fsl_qspi_devtype devtype;
 201        int rxfifo;
 202        int txfifo;
 203        int ahb_buf_size;
 204};
 205
 206static struct fsl_qspi_devtype_data vybrid_data = {
 207        .devtype = FSL_QUADSPI_VYBRID,
 208        .rxfifo = 128,
 209        .txfifo = 64,
 210        .ahb_buf_size = 1024
 211};
 212
 213static struct fsl_qspi_devtype_data imx6sx_data = {
 214        .devtype = FSL_QUADSPI_IMX6SX,
 215        .rxfifo = 128,
 216        .txfifo = 512,
 217        .ahb_buf_size = 1024
 218};
 219
 220#define FSL_QSPI_MAX_CHIP       4
 221struct fsl_qspi {
 222        struct mtd_info mtd[FSL_QSPI_MAX_CHIP];
 223        struct spi_nor nor[FSL_QSPI_MAX_CHIP];
 224        void __iomem *iobase;
 225        void __iomem *ahb_base; /* Used when read from AHB bus */
 226        u32 memmap_phy;
 227        struct clk *clk, *clk_en;
 228        struct device *dev;
 229        struct completion c;
 230        struct fsl_qspi_devtype_data *devtype_data;
 231        u32 nor_size;
 232        u32 nor_num;
 233        u32 clk_rate;
 234        unsigned int chip_base_addr; /* We may support two chips. */
 235        bool has_second_chip;
 236};
 237
 238static inline int is_vybrid_qspi(struct fsl_qspi *q)
 239{
 240        return q->devtype_data->devtype == FSL_QUADSPI_VYBRID;
 241}
 242
 243static inline int is_imx6sx_qspi(struct fsl_qspi *q)
 244{
 245        return q->devtype_data->devtype == FSL_QUADSPI_IMX6SX;
 246}
 247
 248/*
 249 * An IC bug makes us to re-arrange the 32-bit data.
 250 * The following chips, such as IMX6SLX, have fixed this bug.
 251 */
 252static inline u32 fsl_qspi_endian_xchg(struct fsl_qspi *q, u32 a)
 253{
 254        return is_vybrid_qspi(q) ? __swab32(a) : a;
 255}
 256
 257static inline void fsl_qspi_unlock_lut(struct fsl_qspi *q)
 258{
 259        writel(QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
 260        writel(QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR);
 261}
 262
 263static inline void fsl_qspi_lock_lut(struct fsl_qspi *q)
 264{
 265        writel(QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
 266        writel(QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR);
 267}
 268
 269static irqreturn_t fsl_qspi_irq_handler(int irq, void *dev_id)
 270{
 271        struct fsl_qspi *q = dev_id;
 272        u32 reg;
 273
 274        /* clear interrupt */
 275        reg = readl(q->iobase + QUADSPI_FR);
 276        writel(reg, q->iobase + QUADSPI_FR);
 277
 278        if (reg & QUADSPI_FR_TFF_MASK)
 279                complete(&q->c);
 280
 281        dev_dbg(q->dev, "QUADSPI_FR : 0x%.8x:0x%.8x\n", q->chip_base_addr, reg);
 282        return IRQ_HANDLED;
 283}
 284
 285static void fsl_qspi_init_lut(struct fsl_qspi *q)
 286{
 287        void __iomem *base = q->iobase;
 288        int rxfifo = q->devtype_data->rxfifo;
 289        u32 lut_base;
 290        u8 cmd, addrlen, dummy;
 291        int i;
 292
 293        fsl_qspi_unlock_lut(q);
 294
 295        /* Clear all the LUT table */
 296        for (i = 0; i < QUADSPI_LUT_NUM; i++)
 297                writel(0, base + QUADSPI_LUT_BASE + i * 4);
 298
 299        /* Quad Read */
 300        lut_base = SEQID_QUAD_READ * 4;
 301
 302        if (q->nor_size <= SZ_16M) {
 303                cmd = SPINOR_OP_READ_1_1_4;
 304                addrlen = ADDR24BIT;
 305                dummy = 8;
 306        } else {
 307                /* use the 4-byte address */
 308                cmd = SPINOR_OP_READ_1_1_4;
 309                addrlen = ADDR32BIT;
 310                dummy = 8;
 311        }
 312
 313        writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
 314                        base + QUADSPI_LUT(lut_base));
 315        writel(LUT0(DUMMY, PAD1, dummy) | LUT1(READ, PAD4, rxfifo),
 316                        base + QUADSPI_LUT(lut_base + 1));
 317
 318        /* Write enable */
 319        lut_base = SEQID_WREN * 4;
 320        writel(LUT0(CMD, PAD1, SPINOR_OP_WREN), base + QUADSPI_LUT(lut_base));
 321
 322        /* Page Program */
 323        lut_base = SEQID_PP * 4;
 324
 325        if (q->nor_size <= SZ_16M) {
 326                cmd = SPINOR_OP_PP;
 327                addrlen = ADDR24BIT;
 328        } else {
 329                /* use the 4-byte address */
 330                cmd = SPINOR_OP_PP;
 331                addrlen = ADDR32BIT;
 332        }
 333
 334        writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
 335                        base + QUADSPI_LUT(lut_base));
 336        writel(LUT0(WRITE, PAD1, 0), base + QUADSPI_LUT(lut_base + 1));
 337
 338        /* Read Status */
 339        lut_base = SEQID_RDSR * 4;
 340        writel(LUT0(CMD, PAD1, SPINOR_OP_RDSR) | LUT1(READ, PAD1, 0x1),
 341                        base + QUADSPI_LUT(lut_base));
 342
 343        /* Erase a sector */
 344        lut_base = SEQID_SE * 4;
 345
 346        if (q->nor_size <= SZ_16M) {
 347                cmd = SPINOR_OP_SE;
 348                addrlen = ADDR24BIT;
 349        } else {
 350                /* use the 4-byte address */
 351                cmd = SPINOR_OP_SE;
 352                addrlen = ADDR32BIT;
 353        }
 354
 355        writel(LUT0(CMD, PAD1, cmd) | LUT1(ADDR, PAD1, addrlen),
 356                        base + QUADSPI_LUT(lut_base));
 357
 358        /* Erase the whole chip */
 359        lut_base = SEQID_CHIP_ERASE * 4;
 360        writel(LUT0(CMD, PAD1, SPINOR_OP_CHIP_ERASE),
 361                        base + QUADSPI_LUT(lut_base));
 362
 363        /* READ ID */
 364        lut_base = SEQID_RDID * 4;
 365        writel(LUT0(CMD, PAD1, SPINOR_OP_RDID) | LUT1(READ, PAD1, 0x8),
 366                        base + QUADSPI_LUT(lut_base));
 367
 368        /* Write Register */
 369        lut_base = SEQID_WRSR * 4;
 370        writel(LUT0(CMD, PAD1, SPINOR_OP_WRSR) | LUT1(WRITE, PAD1, 0x2),
 371                        base + QUADSPI_LUT(lut_base));
 372
 373        /* Read Configuration Register */
 374        lut_base = SEQID_RDCR * 4;
 375        writel(LUT0(CMD, PAD1, SPINOR_OP_RDCR) | LUT1(READ, PAD1, 0x1),
 376                        base + QUADSPI_LUT(lut_base));
 377
 378        /* Write disable */
 379        lut_base = SEQID_WRDI * 4;
 380        writel(LUT0(CMD, PAD1, SPINOR_OP_WRDI), base + QUADSPI_LUT(lut_base));
 381
 382        /* Enter 4 Byte Mode (Micron) */
 383        lut_base = SEQID_EN4B * 4;
 384        writel(LUT0(CMD, PAD1, SPINOR_OP_EN4B), base + QUADSPI_LUT(lut_base));
 385
 386        /* Enter 4 Byte Mode (Spansion) */
 387        lut_base = SEQID_BRWR * 4;
 388        writel(LUT0(CMD, PAD1, SPINOR_OP_BRWR), base + QUADSPI_LUT(lut_base));
 389
 390        fsl_qspi_lock_lut(q);
 391}
 392
 393/* Get the SEQID for the command */
 394static int fsl_qspi_get_seqid(struct fsl_qspi *q, u8 cmd)
 395{
 396        switch (cmd) {
 397        case SPINOR_OP_READ_1_1_4:
 398                return SEQID_QUAD_READ;
 399        case SPINOR_OP_WREN:
 400                return SEQID_WREN;
 401        case SPINOR_OP_WRDI:
 402                return SEQID_WRDI;
 403        case SPINOR_OP_RDSR:
 404                return SEQID_RDSR;
 405        case SPINOR_OP_SE:
 406                return SEQID_SE;
 407        case SPINOR_OP_CHIP_ERASE:
 408                return SEQID_CHIP_ERASE;
 409        case SPINOR_OP_PP:
 410                return SEQID_PP;
 411        case SPINOR_OP_RDID:
 412                return SEQID_RDID;
 413        case SPINOR_OP_WRSR:
 414                return SEQID_WRSR;
 415        case SPINOR_OP_RDCR:
 416                return SEQID_RDCR;
 417        case SPINOR_OP_EN4B:
 418                return SEQID_EN4B;
 419        case SPINOR_OP_BRWR:
 420                return SEQID_BRWR;
 421        default:
 422                dev_err(q->dev, "Unsupported cmd 0x%.2x\n", cmd);
 423                break;
 424        }
 425        return -EINVAL;
 426}
 427
 428static int
 429fsl_qspi_runcmd(struct fsl_qspi *q, u8 cmd, unsigned int addr, int len)
 430{
 431        void __iomem *base = q->iobase;
 432        int seqid;
 433        u32 reg, reg2;
 434        int err;
 435
 436        init_completion(&q->c);
 437        dev_dbg(q->dev, "to 0x%.8x:0x%.8x, len:%d, cmd:%.2x\n",
 438                        q->chip_base_addr, addr, len, cmd);
 439
 440        /* save the reg */
 441        reg = readl(base + QUADSPI_MCR);
 442
 443        writel(q->memmap_phy + q->chip_base_addr + addr, base + QUADSPI_SFAR);
 444        writel(QUADSPI_RBCT_WMRK_MASK | QUADSPI_RBCT_RXBRD_USEIPS,
 445                        base + QUADSPI_RBCT);
 446        writel(reg | QUADSPI_MCR_CLR_RXF_MASK, base + QUADSPI_MCR);
 447
 448        do {
 449                reg2 = readl(base + QUADSPI_SR);
 450                if (reg2 & (QUADSPI_SR_IP_ACC_MASK | QUADSPI_SR_AHB_ACC_MASK)) {
 451                        udelay(1);
 452                        dev_dbg(q->dev, "The controller is busy, 0x%x\n", reg2);
 453                        continue;
 454                }
 455                break;
 456        } while (1);
 457
 458        /* trigger the LUT now */
 459        seqid = fsl_qspi_get_seqid(q, cmd);
 460        writel((seqid << QUADSPI_IPCR_SEQID_SHIFT) | len, base + QUADSPI_IPCR);
 461
 462        /* Wait for the interrupt. */
 463        err = wait_for_completion_timeout(&q->c, msecs_to_jiffies(1000));
 464        if (!err) {
 465                dev_err(q->dev,
 466                        "cmd 0x%.2x timeout, addr@%.8x, FR:0x%.8x, SR:0x%.8x\n",
 467                        cmd, addr, readl(base + QUADSPI_FR),
 468                        readl(base + QUADSPI_SR));
 469                err = -ETIMEDOUT;
 470        } else {
 471                err = 0;
 472        }
 473
 474        /* restore the MCR */
 475        writel(reg, base + QUADSPI_MCR);
 476
 477        return err;
 478}
 479
 480/* Read out the data from the QUADSPI_RBDR buffer registers. */
 481static void fsl_qspi_read_data(struct fsl_qspi *q, int len, u8 *rxbuf)
 482{
 483        u32 tmp;
 484        int i = 0;
 485
 486        while (len > 0) {
 487                tmp = readl(q->iobase + QUADSPI_RBDR + i * 4);
 488                tmp = fsl_qspi_endian_xchg(q, tmp);
 489                dev_dbg(q->dev, "chip addr:0x%.8x, rcv:0x%.8x\n",
 490                                q->chip_base_addr, tmp);
 491
 492                if (len >= 4) {
 493                        *((u32 *)rxbuf) = tmp;
 494                        rxbuf += 4;
 495                } else {
 496                        memcpy(rxbuf, &tmp, len);
 497                        break;
 498                }
 499
 500                len -= 4;
 501                i++;
 502        }
 503}
 504
 505/*
 506 * If we have changed the content of the flash by writing or erasing,
 507 * we need to invalidate the AHB buffer. If we do not do so, we may read out
 508 * the wrong data. The spec tells us reset the AHB domain and Serial Flash
 509 * domain at the same time.
 510 */
 511static inline void fsl_qspi_invalid(struct fsl_qspi *q)
 512{
 513        u32 reg;
 514
 515        reg = readl(q->iobase + QUADSPI_MCR);
 516        reg |= QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK;
 517        writel(reg, q->iobase + QUADSPI_MCR);
 518
 519        /*
 520         * The minimum delay : 1 AHB + 2 SFCK clocks.
 521         * Delay 1 us is enough.
 522         */
 523        udelay(1);
 524
 525        reg &= ~(QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK);
 526        writel(reg, q->iobase + QUADSPI_MCR);
 527}
 528
 529static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
 530                                u8 opcode, unsigned int to, u32 *txbuf,
 531                                unsigned count, size_t *retlen)
 532{
 533        int ret, i, j;
 534        u32 tmp;
 535
 536        dev_dbg(q->dev, "to 0x%.8x:0x%.8x, len : %d\n",
 537                q->chip_base_addr, to, count);
 538
 539        /* clear the TX FIFO. */
 540        tmp = readl(q->iobase + QUADSPI_MCR);
 541        writel(tmp | QUADSPI_MCR_CLR_RXF_MASK, q->iobase + QUADSPI_MCR);
 542
 543        /* fill the TX data to the FIFO */
 544        for (j = 0, i = ((count + 3) / 4); j < i; j++) {
 545                tmp = fsl_qspi_endian_xchg(q, *txbuf);
 546                writel(tmp, q->iobase + QUADSPI_TBDR);
 547                txbuf++;
 548        }
 549
 550        /* Trigger it */
 551        ret = fsl_qspi_runcmd(q, opcode, to, count);
 552
 553        if (ret == 0 && retlen)
 554                *retlen += count;
 555
 556        return ret;
 557}
 558
 559static void fsl_qspi_set_map_addr(struct fsl_qspi *q)
 560{
 561        int nor_size = q->nor_size;
 562        void __iomem *base = q->iobase;
 563
 564        writel(nor_size + q->memmap_phy, base + QUADSPI_SFA1AD);
 565        writel(nor_size * 2 + q->memmap_phy, base + QUADSPI_SFA2AD);
 566        writel(nor_size * 3 + q->memmap_phy, base + QUADSPI_SFB1AD);
 567        writel(nor_size * 4 + q->memmap_phy, base + QUADSPI_SFB2AD);
 568}
 569
 570/*
 571 * There are two different ways to read out the data from the flash:
 572 *  the "IP Command Read" and the "AHB Command Read".
 573 *
 574 * The IC guy suggests we use the "AHB Command Read" which is faster
 575 * then the "IP Command Read". (What's more is that there is a bug in
 576 * the "IP Command Read" in the Vybrid.)
 577 *
 578 * After we set up the registers for the "AHB Command Read", we can use
 579 * the memcpy to read the data directly. A "missed" access to the buffer
 580 * causes the controller to clear the buffer, and use the sequence pointed
 581 * by the QUADSPI_BFGENCR[SEQID] to initiate a read from the flash.
 582 */
 583static void fsl_qspi_init_abh_read(struct fsl_qspi *q)
 584{
 585        void __iomem *base = q->iobase;
 586        int seqid;
 587
 588        /* AHB configuration for access buffer 0/1/2 .*/
 589        writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF0CR);
 590        writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF1CR);
 591        writel(QUADSPI_BUFXCR_INVALID_MSTRID, base + QUADSPI_BUF2CR);
 592        /*
 593         * Set ADATSZ with the maximum AHB buffer size to improve the
 594         * read performance.
 595         */
 596        writel(QUADSPI_BUF3CR_ALLMST_MASK | ((q->devtype_data->ahb_buf_size / 8)
 597                        << QUADSPI_BUF3CR_ADATSZ_SHIFT), base + QUADSPI_BUF3CR);
 598
 599        /* We only use the buffer3 */
 600        writel(0, base + QUADSPI_BUF0IND);
 601        writel(0, base + QUADSPI_BUF1IND);
 602        writel(0, base + QUADSPI_BUF2IND);
 603
 604        /* Set the default lut sequence for AHB Read. */
 605        seqid = fsl_qspi_get_seqid(q, q->nor[0].read_opcode);
 606        writel(seqid << QUADSPI_BFGENCR_SEQID_SHIFT,
 607                q->iobase + QUADSPI_BFGENCR);
 608}
 609
 610/* We use this function to do some basic init for spi_nor_scan(). */
 611static int fsl_qspi_nor_setup(struct fsl_qspi *q)
 612{
 613        void __iomem *base = q->iobase;
 614        u32 reg;
 615        int ret;
 616
 617        /* the default frequency, we will change it in the future.*/
 618        ret = clk_set_rate(q->clk, 66000000);
 619        if (ret)
 620                return ret;
 621
 622        /* Init the LUT table. */
 623        fsl_qspi_init_lut(q);
 624
 625        /* Disable the module */
 626        writel(QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK,
 627                        base + QUADSPI_MCR);
 628
 629        reg = readl(base + QUADSPI_SMPR);
 630        writel(reg & ~(QUADSPI_SMPR_FSDLY_MASK
 631                        | QUADSPI_SMPR_FSPHS_MASK
 632                        | QUADSPI_SMPR_HSENA_MASK
 633                        | QUADSPI_SMPR_DDRSMP_MASK), base + QUADSPI_SMPR);
 634
 635        /* Enable the module */
 636        writel(QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK,
 637                        base + QUADSPI_MCR);
 638
 639        /* enable the interrupt */
 640        writel(QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER);
 641
 642        return 0;
 643}
 644
 645static int fsl_qspi_nor_setup_last(struct fsl_qspi *q)
 646{
 647        unsigned long rate = q->clk_rate;
 648        int ret;
 649
 650        if (is_imx6sx_qspi(q))
 651                rate *= 4;
 652
 653        ret = clk_set_rate(q->clk, rate);
 654        if (ret)
 655                return ret;
 656
 657        /* Init the LUT table again. */
 658        fsl_qspi_init_lut(q);
 659
 660        /* Init for AHB read */
 661        fsl_qspi_init_abh_read(q);
 662
 663        return 0;
 664}
 665
 666static struct of_device_id fsl_qspi_dt_ids[] = {
 667        { .compatible = "fsl,vf610-qspi", .data = (void *)&vybrid_data, },
 668        { .compatible = "fsl,imx6sx-qspi", .data = (void *)&imx6sx_data, },
 669        { /* sentinel */ }
 670};
 671MODULE_DEVICE_TABLE(of, fsl_qspi_dt_ids);
 672
 673static void fsl_qspi_set_base_addr(struct fsl_qspi *q, struct spi_nor *nor)
 674{
 675        q->chip_base_addr = q->nor_size * (nor - q->nor);
 676}
 677
 678static int fsl_qspi_read_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len)
 679{
 680        int ret;
 681        struct fsl_qspi *q = nor->priv;
 682
 683        ret = fsl_qspi_runcmd(q, opcode, 0, len);
 684        if (ret)
 685                return ret;
 686
 687        fsl_qspi_read_data(q, len, buf);
 688        return 0;
 689}
 690
 691static int fsl_qspi_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len,
 692                        int write_enable)
 693{
 694        struct fsl_qspi *q = nor->priv;
 695        int ret;
 696
 697        if (!buf) {
 698                ret = fsl_qspi_runcmd(q, opcode, 0, 1);
 699                if (ret)
 700                        return ret;
 701
 702                if (opcode == SPINOR_OP_CHIP_ERASE)
 703                        fsl_qspi_invalid(q);
 704
 705        } else if (len > 0) {
 706                ret = fsl_qspi_nor_write(q, nor, opcode, 0,
 707                                        (u32 *)buf, len, NULL);
 708        } else {
 709                dev_err(q->dev, "invalid cmd %d\n", opcode);
 710                ret = -EINVAL;
 711        }
 712
 713        return ret;
 714}
 715
 716static void fsl_qspi_write(struct spi_nor *nor, loff_t to,
 717                size_t len, size_t *retlen, const u_char *buf)
 718{
 719        struct fsl_qspi *q = nor->priv;
 720
 721        fsl_qspi_nor_write(q, nor, nor->program_opcode, to,
 722                                (u32 *)buf, len, retlen);
 723
 724        /* invalid the data in the AHB buffer. */
 725        fsl_qspi_invalid(q);
 726}
 727
 728static int fsl_qspi_read(struct spi_nor *nor, loff_t from,
 729                size_t len, size_t *retlen, u_char *buf)
 730{
 731        struct fsl_qspi *q = nor->priv;
 732        u8 cmd = nor->read_opcode;
 733
 734        dev_dbg(q->dev, "cmd [%x],read from (0x%p, 0x%.8x, 0x%.8x),len:%d\n",
 735                cmd, q->ahb_base, q->chip_base_addr, (unsigned int)from, len);
 736
 737        /* Read out the data directly from the AHB buffer.*/
 738        memcpy(buf, q->ahb_base + q->chip_base_addr + from, len);
 739
 740        *retlen += len;
 741        return 0;
 742}
 743
 744static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs)
 745{
 746        struct fsl_qspi *q = nor->priv;
 747        int ret;
 748
 749        dev_dbg(nor->dev, "%dKiB at 0x%08x:0x%08x\n",
 750                nor->mtd->erasesize / 1024, q->chip_base_addr, (u32)offs);
 751
 752        ret = fsl_qspi_runcmd(q, nor->erase_opcode, offs, 0);
 753        if (ret)
 754                return ret;
 755
 756        fsl_qspi_invalid(q);
 757        return 0;
 758}
 759
 760static int fsl_qspi_prep(struct spi_nor *nor, enum spi_nor_ops ops)
 761{
 762        struct fsl_qspi *q = nor->priv;
 763        int ret;
 764
 765        ret = clk_enable(q->clk_en);
 766        if (ret)
 767                return ret;
 768
 769        ret = clk_enable(q->clk);
 770        if (ret) {
 771                clk_disable(q->clk_en);
 772                return ret;
 773        }
 774
 775        fsl_qspi_set_base_addr(q, nor);
 776        return 0;
 777}
 778
 779static void fsl_qspi_unprep(struct spi_nor *nor, enum spi_nor_ops ops)
 780{
 781        struct fsl_qspi *q = nor->priv;
 782
 783        clk_disable(q->clk);
 784        clk_disable(q->clk_en);
 785}
 786
 787static int fsl_qspi_probe(struct platform_device *pdev)
 788{
 789        struct device_node *np = pdev->dev.of_node;
 790        struct mtd_part_parser_data ppdata;
 791        struct device *dev = &pdev->dev;
 792        struct fsl_qspi *q;
 793        struct resource *res;
 794        struct spi_nor *nor;
 795        struct mtd_info *mtd;
 796        int ret, i = 0;
 797        const struct of_device_id *of_id =
 798                        of_match_device(fsl_qspi_dt_ids, &pdev->dev);
 799
 800        q = devm_kzalloc(dev, sizeof(*q), GFP_KERNEL);
 801        if (!q)
 802                return -ENOMEM;
 803
 804        q->nor_num = of_get_child_count(dev->of_node);
 805        if (!q->nor_num || q->nor_num > FSL_QSPI_MAX_CHIP)
 806                return -ENODEV;
 807
 808        /* find the resources */
 809        res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "QuadSPI");
 810        q->iobase = devm_ioremap_resource(dev, res);
 811        if (IS_ERR(q->iobase))
 812                return PTR_ERR(q->iobase);
 813
 814        res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
 815                                        "QuadSPI-memory");
 816        q->ahb_base = devm_ioremap_resource(dev, res);
 817        if (IS_ERR(q->ahb_base))
 818                return PTR_ERR(q->ahb_base);
 819
 820        q->memmap_phy = res->start;
 821
 822        /* find the clocks */
 823        q->clk_en = devm_clk_get(dev, "qspi_en");
 824        if (IS_ERR(q->clk_en))
 825                return PTR_ERR(q->clk_en);
 826
 827        q->clk = devm_clk_get(dev, "qspi");
 828        if (IS_ERR(q->clk))
 829                return PTR_ERR(q->clk);
 830
 831        ret = clk_prepare_enable(q->clk_en);
 832        if (ret) {
 833                dev_err(dev, "can not enable the qspi_en clock\n");
 834                return ret;
 835        }
 836
 837        ret = clk_prepare_enable(q->clk);
 838        if (ret) {
 839                dev_err(dev, "can not enable the qspi clock\n");
 840                goto clk_failed;
 841        }
 842
 843        /* find the irq */
 844        ret = platform_get_irq(pdev, 0);
 845        if (ret < 0) {
 846                dev_err(dev, "failed to get the irq\n");
 847                goto irq_failed;
 848        }
 849
 850        ret = devm_request_irq(dev, ret,
 851                        fsl_qspi_irq_handler, 0, pdev->name, q);
 852        if (ret) {
 853                dev_err(dev, "failed to request irq.\n");
 854                goto irq_failed;
 855        }
 856
 857        q->dev = dev;
 858        q->devtype_data = (struct fsl_qspi_devtype_data *)of_id->data;
 859        platform_set_drvdata(pdev, q);
 860
 861        ret = fsl_qspi_nor_setup(q);
 862        if (ret)
 863                goto irq_failed;
 864
 865        if (of_get_property(np, "fsl,qspi-has-second-chip", NULL))
 866                q->has_second_chip = true;
 867
 868        /* iterate the subnodes. */
 869        for_each_available_child_of_node(dev->of_node, np) {
 870                char modalias[40];
 871
 872                /* skip the holes */
 873                if (!q->has_second_chip)
 874                        i *= 2;
 875
 876                nor = &q->nor[i];
 877                mtd = &q->mtd[i];
 878
 879                nor->mtd = mtd;
 880                nor->dev = dev;
 881                nor->priv = q;
 882                mtd->priv = nor;
 883
 884                /* fill the hooks */
 885                nor->read_reg = fsl_qspi_read_reg;
 886                nor->write_reg = fsl_qspi_write_reg;
 887                nor->read = fsl_qspi_read;
 888                nor->write = fsl_qspi_write;
 889                nor->erase = fsl_qspi_erase;
 890
 891                nor->prepare = fsl_qspi_prep;
 892                nor->unprepare = fsl_qspi_unprep;
 893
 894                ret = of_modalias_node(np, modalias, sizeof(modalias));
 895                if (ret < 0)
 896                        goto irq_failed;
 897
 898                ret = of_property_read_u32(np, "spi-max-frequency",
 899                                &q->clk_rate);
 900                if (ret < 0)
 901                        goto irq_failed;
 902
 903                /* set the chip address for READID */
 904                fsl_qspi_set_base_addr(q, nor);
 905
 906                ret = spi_nor_scan(nor, modalias, SPI_NOR_QUAD);
 907                if (ret)
 908                        goto irq_failed;
 909
 910                ppdata.of_node = np;
 911                ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
 912                if (ret)
 913                        goto irq_failed;
 914
 915                /* Set the correct NOR size now. */
 916                if (q->nor_size == 0) {
 917                        q->nor_size = mtd->size;
 918
 919                        /* Map the SPI NOR to accessiable address */
 920                        fsl_qspi_set_map_addr(q);
 921                }
 922
 923                /*
 924                 * The TX FIFO is 64 bytes in the Vybrid, but the Page Program
 925                 * may writes 265 bytes per time. The write is working in the
 926                 * unit of the TX FIFO, not in the unit of the SPI NOR's page
 927                 * size.
 928                 *
 929                 * So shrink the spi_nor->page_size if it is larger then the
 930                 * TX FIFO.
 931                 */
 932                if (nor->page_size > q->devtype_data->txfifo)
 933                        nor->page_size = q->devtype_data->txfifo;
 934
 935                i++;
 936        }
 937
 938        /* finish the rest init. */
 939        ret = fsl_qspi_nor_setup_last(q);
 940        if (ret)
 941                goto last_init_failed;
 942
 943        clk_disable(q->clk);
 944        clk_disable(q->clk_en);
 945        return 0;
 946
 947last_init_failed:
 948        for (i = 0; i < q->nor_num; i++) {
 949                /* skip the holes */
 950                if (!q->has_second_chip)
 951                        i *= 2;
 952                mtd_device_unregister(&q->mtd[i]);
 953        }
 954irq_failed:
 955        clk_disable_unprepare(q->clk);
 956clk_failed:
 957        clk_disable_unprepare(q->clk_en);
 958        return ret;
 959}
 960
 961static int fsl_qspi_remove(struct platform_device *pdev)
 962{
 963        struct fsl_qspi *q = platform_get_drvdata(pdev);
 964        int i;
 965
 966        for (i = 0; i < q->nor_num; i++) {
 967                /* skip the holes */
 968                if (!q->has_second_chip)
 969                        i *= 2;
 970                mtd_device_unregister(&q->mtd[i]);
 971        }
 972
 973        /* disable the hardware */
 974        writel(QUADSPI_MCR_MDIS_MASK, q->iobase + QUADSPI_MCR);
 975        writel(0x0, q->iobase + QUADSPI_RSER);
 976
 977        clk_unprepare(q->clk);
 978        clk_unprepare(q->clk_en);
 979        return 0;
 980}
 981
 982static int fsl_qspi_suspend(struct platform_device *pdev, pm_message_t state)
 983{
 984        return 0;
 985}
 986
 987static int fsl_qspi_resume(struct platform_device *pdev)
 988{
 989        struct fsl_qspi *q = platform_get_drvdata(pdev);
 990
 991        fsl_qspi_nor_setup(q);
 992        fsl_qspi_set_map_addr(q);
 993        fsl_qspi_nor_setup_last(q);
 994
 995        return 0;
 996}
 997
 998static struct platform_driver fsl_qspi_driver = {
 999        .driver = {
1000                .name   = "fsl-quadspi",
1001                .bus    = &platform_bus_type,
1002                .of_match_table = fsl_qspi_dt_ids,
1003        },
1004        .probe          = fsl_qspi_probe,
1005        .remove         = fsl_qspi_remove,
1006        .suspend        = fsl_qspi_suspend,
1007        .resume         = fsl_qspi_resume,
1008};
1009module_platform_driver(fsl_qspi_driver);
1010
1011MODULE_DESCRIPTION("Freescale QuadSPI Controller Driver");
1012MODULE_AUTHOR("Freescale Semiconductor Inc.");
1013MODULE_LICENSE("GPL v2");
1014