Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 
0003 /*
0004  * Freescale QuadSPI driver.
0005  *
0006  * Copyright (C) 2013 Freescale Semiconductor, Inc.
0007  * Copyright (C) 2018 Bootlin
0008  * Copyright (C) 2018 exceet electronics GmbH
0009  * Copyright (C) 2018 Kontron Electronics GmbH
0010  *
0011  * Transition to SPI MEM interface:
0012  * Authors:
0013  *     Boris Brezillon <bbrezillon@kernel.org>
0014  *     Frieder Schrempf <frieder.schrempf@kontron.de>
0015  *     Yogesh Gaur <yogeshnarayan.gaur@nxp.com>
0016  *     Suresh Gupta <suresh.gupta@nxp.com>
0017  *
0018  * Based on the original fsl-quadspi.c SPI NOR driver:
0019  * Author: Freescale Semiconductor, Inc.
0020  *
0021  */
0022 
0023 #include <linux/bitops.h>
0024 #include <linux/clk.h>
0025 #include <linux/completion.h>
0026 #include <linux/delay.h>
0027 #include <linux/err.h>
0028 #include <linux/errno.h>
0029 #include <linux/interrupt.h>
0030 #include <linux/io.h>
0031 #include <linux/iopoll.h>
0032 #include <linux/jiffies.h>
0033 #include <linux/kernel.h>
0034 #include <linux/module.h>
0035 #include <linux/mutex.h>
0036 #include <linux/of.h>
0037 #include <linux/of_device.h>
0038 #include <linux/platform_device.h>
0039 #include <linux/pm_qos.h>
0040 #include <linux/sizes.h>
0041 
0042 #include <linux/spi/spi.h>
0043 #include <linux/spi/spi-mem.h>
0044 
0045 /*
0046  * The driver only uses one single LUT entry, that is updated on
0047  * each call of exec_op(). Index 0 is preset at boot with a basic
0048  * read operation, so let's use the last entry (15).
0049  */
0050 #define SEQID_LUT           15
0051 
0052 /* Registers used by the driver */
0053 #define QUADSPI_MCR         0x00
0054 #define QUADSPI_MCR_RESERVED_MASK   GENMASK(19, 16)
0055 #define QUADSPI_MCR_MDIS_MASK       BIT(14)
0056 #define QUADSPI_MCR_CLR_TXF_MASK    BIT(11)
0057 #define QUADSPI_MCR_CLR_RXF_MASK    BIT(10)
0058 #define QUADSPI_MCR_DDR_EN_MASK     BIT(7)
0059 #define QUADSPI_MCR_END_CFG_MASK    GENMASK(3, 2)
0060 #define QUADSPI_MCR_SWRSTHD_MASK    BIT(1)
0061 #define QUADSPI_MCR_SWRSTSD_MASK    BIT(0)
0062 
0063 #define QUADSPI_IPCR            0x08
0064 #define QUADSPI_IPCR_SEQID(x)       ((x) << 24)
0065 
0066 #define QUADSPI_FLSHCR          0x0c
0067 #define QUADSPI_FLSHCR_TCSS_MASK    GENMASK(3, 0)
0068 #define QUADSPI_FLSHCR_TCSH_MASK    GENMASK(11, 8)
0069 #define QUADSPI_FLSHCR_TDH_MASK     GENMASK(17, 16)
0070 
0071 #define QUADSPI_BUF0CR                  0x10
0072 #define QUADSPI_BUF1CR                  0x14
0073 #define QUADSPI_BUF2CR                  0x18
0074 #define QUADSPI_BUFXCR_INVALID_MSTRID   0xe
0075 
0076 #define QUADSPI_BUF3CR          0x1c
0077 #define QUADSPI_BUF3CR_ALLMST_MASK  BIT(31)
0078 #define QUADSPI_BUF3CR_ADATSZ(x)    ((x) << 8)
0079 #define QUADSPI_BUF3CR_ADATSZ_MASK  GENMASK(15, 8)
0080 
0081 #define QUADSPI_BFGENCR         0x20
0082 #define QUADSPI_BFGENCR_SEQID(x)    ((x) << 12)
0083 
0084 #define QUADSPI_BUF0IND         0x30
0085 #define QUADSPI_BUF1IND         0x34
0086 #define QUADSPI_BUF2IND         0x38
0087 #define QUADSPI_SFAR            0x100
0088 
0089 #define QUADSPI_SMPR            0x108
0090 #define QUADSPI_SMPR_DDRSMP_MASK    GENMASK(18, 16)
0091 #define QUADSPI_SMPR_FSDLY_MASK     BIT(6)
0092 #define QUADSPI_SMPR_FSPHS_MASK     BIT(5)
0093 #define QUADSPI_SMPR_HSENA_MASK     BIT(0)
0094 
0095 #define QUADSPI_RBCT            0x110
0096 #define QUADSPI_RBCT_WMRK_MASK      GENMASK(4, 0)
0097 #define QUADSPI_RBCT_RXBRD_USEIPS   BIT(8)
0098 
0099 #define QUADSPI_TBDR            0x154
0100 
0101 #define QUADSPI_SR          0x15c
0102 #define QUADSPI_SR_IP_ACC_MASK      BIT(1)
0103 #define QUADSPI_SR_AHB_ACC_MASK     BIT(2)
0104 
0105 #define QUADSPI_FR          0x160
0106 #define QUADSPI_FR_TFF_MASK     BIT(0)
0107 
0108 #define QUADSPI_RSER            0x164
0109 #define QUADSPI_RSER_TFIE       BIT(0)
0110 
0111 #define QUADSPI_SPTRCLR         0x16c
0112 #define QUADSPI_SPTRCLR_IPPTRC      BIT(8)
0113 #define QUADSPI_SPTRCLR_BFPTRC      BIT(0)
0114 
0115 #define QUADSPI_SFA1AD          0x180
0116 #define QUADSPI_SFA2AD          0x184
0117 #define QUADSPI_SFB1AD          0x188
0118 #define QUADSPI_SFB2AD          0x18c
0119 #define QUADSPI_RBDR(x)         (0x200 + ((x) * 4))
0120 
0121 #define QUADSPI_LUTKEY          0x300
0122 #define QUADSPI_LUTKEY_VALUE        0x5AF05AF0
0123 
0124 #define QUADSPI_LCKCR           0x304
0125 #define QUADSPI_LCKER_LOCK      BIT(0)
0126 #define QUADSPI_LCKER_UNLOCK        BIT(1)
0127 
0128 #define QUADSPI_LUT_BASE        0x310
0129 #define QUADSPI_LUT_OFFSET      (SEQID_LUT * 4 * 4)
0130 #define QUADSPI_LUT_REG(idx) \
0131     (QUADSPI_LUT_BASE + QUADSPI_LUT_OFFSET + (idx) * 4)
0132 
0133 /* Instruction set for the LUT register */
0134 #define LUT_STOP        0
0135 #define LUT_CMD         1
0136 #define LUT_ADDR        2
0137 #define LUT_DUMMY       3
0138 #define LUT_MODE        4
0139 #define LUT_MODE2       5
0140 #define LUT_MODE4       6
0141 #define LUT_FSL_READ        7
0142 #define LUT_FSL_WRITE       8
0143 #define LUT_JMP_ON_CS       9
0144 #define LUT_ADDR_DDR        10
0145 #define LUT_MODE_DDR        11
0146 #define LUT_MODE2_DDR       12
0147 #define LUT_MODE4_DDR       13
0148 #define LUT_FSL_READ_DDR    14
0149 #define LUT_FSL_WRITE_DDR   15
0150 #define LUT_DATA_LEARN      16
0151 
0152 /*
0153  * The PAD definitions for LUT register.
0154  *
0155  * The pad stands for the number of IO lines [0:3].
0156  * For example, the quad read needs four IO lines,
0157  * so you should use LUT_PAD(4).
0158  */
0159 #define LUT_PAD(x) (fls(x) - 1)
0160 
0161 /*
0162  * Macro for constructing the LUT entries with the following
0163  * register layout:
0164  *
0165  *  ---------------------------------------------------
0166  *  | INSTR1 | PAD1 | OPRND1 | INSTR0 | PAD0 | OPRND0 |
0167  *  ---------------------------------------------------
0168  */
0169 #define LUT_DEF(idx, ins, pad, opr)                 \
0170     ((((ins) << 10) | ((pad) << 8) | (opr)) << (((idx) % 2) * 16))
0171 
0172 /* Controller needs driver to swap endianness */
0173 #define QUADSPI_QUIRK_SWAP_ENDIAN   BIT(0)
0174 
0175 /* Controller needs 4x internal clock */
0176 #define QUADSPI_QUIRK_4X_INT_CLK    BIT(1)
0177 
0178 /*
0179  * TKT253890, the controller needs the driver to fill the txfifo with
0180  * 16 bytes at least to trigger a data transfer, even though the extra
0181  * data won't be transferred.
0182  */
0183 #define QUADSPI_QUIRK_TKT253890     BIT(2)
0184 
0185 /* TKT245618, the controller cannot wake up from wait mode */
0186 #define QUADSPI_QUIRK_TKT245618     BIT(3)
0187 
0188 /*
0189  * Controller adds QSPI_AMBA_BASE (base address of the mapped memory)
0190  * internally. No need to add it when setting SFXXAD and SFAR registers
0191  */
0192 #define QUADSPI_QUIRK_BASE_INTERNAL BIT(4)
0193 
0194 /*
0195  * Controller uses TDH bits in register QUADSPI_FLSHCR.
0196  * They need to be set in accordance with the DDR/SDR mode.
0197  */
0198 #define QUADSPI_QUIRK_USE_TDH_SETTING   BIT(5)
0199 
0200 struct fsl_qspi_devtype_data {
0201     unsigned int rxfifo;
0202     unsigned int txfifo;
0203     int invalid_mstrid;
0204     unsigned int ahb_buf_size;
0205     unsigned int quirks;
0206     bool little_endian;
0207 };
0208 
0209 static const struct fsl_qspi_devtype_data vybrid_data = {
0210     .rxfifo = SZ_128,
0211     .txfifo = SZ_64,
0212     .invalid_mstrid = QUADSPI_BUFXCR_INVALID_MSTRID,
0213     .ahb_buf_size = SZ_1K,
0214     .quirks = QUADSPI_QUIRK_SWAP_ENDIAN,
0215     .little_endian = true,
0216 };
0217 
0218 static const struct fsl_qspi_devtype_data imx6sx_data = {
0219     .rxfifo = SZ_128,
0220     .txfifo = SZ_512,
0221     .invalid_mstrid = QUADSPI_BUFXCR_INVALID_MSTRID,
0222     .ahb_buf_size = SZ_1K,
0223     .quirks = QUADSPI_QUIRK_4X_INT_CLK | QUADSPI_QUIRK_TKT245618,
0224     .little_endian = true,
0225 };
0226 
0227 static const struct fsl_qspi_devtype_data imx7d_data = {
0228     .rxfifo = SZ_128,
0229     .txfifo = SZ_512,
0230     .invalid_mstrid = QUADSPI_BUFXCR_INVALID_MSTRID,
0231     .ahb_buf_size = SZ_1K,
0232     .quirks = QUADSPI_QUIRK_TKT253890 | QUADSPI_QUIRK_4X_INT_CLK |
0233           QUADSPI_QUIRK_USE_TDH_SETTING,
0234     .little_endian = true,
0235 };
0236 
0237 static const struct fsl_qspi_devtype_data imx6ul_data = {
0238     .rxfifo = SZ_128,
0239     .txfifo = SZ_512,
0240     .invalid_mstrid = QUADSPI_BUFXCR_INVALID_MSTRID,
0241     .ahb_buf_size = SZ_1K,
0242     .quirks = QUADSPI_QUIRK_TKT253890 | QUADSPI_QUIRK_4X_INT_CLK |
0243           QUADSPI_QUIRK_USE_TDH_SETTING,
0244     .little_endian = true,
0245 };
0246 
0247 static const struct fsl_qspi_devtype_data ls1021a_data = {
0248     .rxfifo = SZ_128,
0249     .txfifo = SZ_64,
0250     .invalid_mstrid = QUADSPI_BUFXCR_INVALID_MSTRID,
0251     .ahb_buf_size = SZ_1K,
0252     .quirks = 0,
0253     .little_endian = false,
0254 };
0255 
0256 static const struct fsl_qspi_devtype_data ls2080a_data = {
0257     .rxfifo = SZ_128,
0258     .txfifo = SZ_64,
0259     .ahb_buf_size = SZ_1K,
0260     .invalid_mstrid = 0x0,
0261     .quirks = QUADSPI_QUIRK_TKT253890 | QUADSPI_QUIRK_BASE_INTERNAL,
0262     .little_endian = true,
0263 };
0264 
0265 struct fsl_qspi {
0266     void __iomem *iobase;
0267     void __iomem *ahb_addr;
0268     u32 memmap_phy;
0269     struct clk *clk, *clk_en;
0270     struct device *dev;
0271     struct completion c;
0272     const struct fsl_qspi_devtype_data *devtype_data;
0273     struct mutex lock;
0274     struct pm_qos_request pm_qos_req;
0275     int selected;
0276 };
0277 
0278 static inline int needs_swap_endian(struct fsl_qspi *q)
0279 {
0280     return q->devtype_data->quirks & QUADSPI_QUIRK_SWAP_ENDIAN;
0281 }
0282 
0283 static inline int needs_4x_clock(struct fsl_qspi *q)
0284 {
0285     return q->devtype_data->quirks & QUADSPI_QUIRK_4X_INT_CLK;
0286 }
0287 
0288 static inline int needs_fill_txfifo(struct fsl_qspi *q)
0289 {
0290     return q->devtype_data->quirks & QUADSPI_QUIRK_TKT253890;
0291 }
0292 
0293 static inline int needs_wakeup_wait_mode(struct fsl_qspi *q)
0294 {
0295     return q->devtype_data->quirks & QUADSPI_QUIRK_TKT245618;
0296 }
0297 
0298 static inline int needs_amba_base_offset(struct fsl_qspi *q)
0299 {
0300     return !(q->devtype_data->quirks & QUADSPI_QUIRK_BASE_INTERNAL);
0301 }
0302 
0303 static inline int needs_tdh_setting(struct fsl_qspi *q)
0304 {
0305     return q->devtype_data->quirks & QUADSPI_QUIRK_USE_TDH_SETTING;
0306 }
0307 
0308 /*
0309  * An IC bug makes it necessary to rearrange the 32-bit data.
0310  * Later chips, such as IMX6SLX, have fixed this bug.
0311  */
0312 static inline u32 fsl_qspi_endian_xchg(struct fsl_qspi *q, u32 a)
0313 {
0314     return needs_swap_endian(q) ? __swab32(a) : a;
0315 }
0316 
0317 /*
0318  * R/W functions for big- or little-endian registers:
0319  * The QSPI controller's endianness is independent of
0320  * the CPU core's endianness. So far, although the CPU
0321  * core is little-endian the QSPI controller can use
0322  * big-endian or little-endian.
0323  */
0324 static void qspi_writel(struct fsl_qspi *q, u32 val, void __iomem *addr)
0325 {
0326     if (q->devtype_data->little_endian)
0327         iowrite32(val, addr);
0328     else
0329         iowrite32be(val, addr);
0330 }
0331 
0332 static u32 qspi_readl(struct fsl_qspi *q, void __iomem *addr)
0333 {
0334     if (q->devtype_data->little_endian)
0335         return ioread32(addr);
0336 
0337     return ioread32be(addr);
0338 }
0339 
0340 static irqreturn_t fsl_qspi_irq_handler(int irq, void *dev_id)
0341 {
0342     struct fsl_qspi *q = dev_id;
0343     u32 reg;
0344 
0345     /* clear interrupt */
0346     reg = qspi_readl(q, q->iobase + QUADSPI_FR);
0347     qspi_writel(q, reg, q->iobase + QUADSPI_FR);
0348 
0349     if (reg & QUADSPI_FR_TFF_MASK)
0350         complete(&q->c);
0351 
0352     dev_dbg(q->dev, "QUADSPI_FR : 0x%.8x:0x%.8x\n", 0, reg);
0353     return IRQ_HANDLED;
0354 }
0355 
0356 static int fsl_qspi_check_buswidth(struct fsl_qspi *q, u8 width)
0357 {
0358     switch (width) {
0359     case 1:
0360     case 2:
0361     case 4:
0362         return 0;
0363     }
0364 
0365     return -ENOTSUPP;
0366 }
0367 
0368 static bool fsl_qspi_supports_op(struct spi_mem *mem,
0369                  const struct spi_mem_op *op)
0370 {
0371     struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master);
0372     int ret;
0373 
0374     ret = fsl_qspi_check_buswidth(q, op->cmd.buswidth);
0375 
0376     if (op->addr.nbytes)
0377         ret |= fsl_qspi_check_buswidth(q, op->addr.buswidth);
0378 
0379     if (op->dummy.nbytes)
0380         ret |= fsl_qspi_check_buswidth(q, op->dummy.buswidth);
0381 
0382     if (op->data.nbytes)
0383         ret |= fsl_qspi_check_buswidth(q, op->data.buswidth);
0384 
0385     if (ret)
0386         return false;
0387 
0388     /*
0389      * The number of instructions needed for the op, needs
0390      * to fit into a single LUT entry.
0391      */
0392     if (op->addr.nbytes +
0393        (op->dummy.nbytes ? 1:0) +
0394        (op->data.nbytes ? 1:0) > 6)
0395         return false;
0396 
0397     /* Max 64 dummy clock cycles supported */
0398     if (op->dummy.nbytes &&
0399         (op->dummy.nbytes * 8 / op->dummy.buswidth > 64))
0400         return false;
0401 
0402     /* Max data length, check controller limits and alignment */
0403     if (op->data.dir == SPI_MEM_DATA_IN &&
0404         (op->data.nbytes > q->devtype_data->ahb_buf_size ||
0405          (op->data.nbytes > q->devtype_data->rxfifo - 4 &&
0406           !IS_ALIGNED(op->data.nbytes, 8))))
0407         return false;
0408 
0409     if (op->data.dir == SPI_MEM_DATA_OUT &&
0410         op->data.nbytes > q->devtype_data->txfifo)
0411         return false;
0412 
0413     return spi_mem_default_supports_op(mem, op);
0414 }
0415 
0416 static void fsl_qspi_prepare_lut(struct fsl_qspi *q,
0417                  const struct spi_mem_op *op)
0418 {
0419     void __iomem *base = q->iobase;
0420     u32 lutval[4] = {};
0421     int lutidx = 1, i;
0422 
0423     lutval[0] |= LUT_DEF(0, LUT_CMD, LUT_PAD(op->cmd.buswidth),
0424                  op->cmd.opcode);
0425 
0426     /*
0427      * For some unknown reason, using LUT_ADDR doesn't work in some
0428      * cases (at least with only one byte long addresses), so
0429      * let's use LUT_MODE to write the address bytes one by one
0430      */
0431     for (i = 0; i < op->addr.nbytes; i++) {
0432         u8 addrbyte = op->addr.val >> (8 * (op->addr.nbytes - i - 1));
0433 
0434         lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_MODE,
0435                           LUT_PAD(op->addr.buswidth),
0436                           addrbyte);
0437         lutidx++;
0438     }
0439 
0440     if (op->dummy.nbytes) {
0441         lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_DUMMY,
0442                           LUT_PAD(op->dummy.buswidth),
0443                           op->dummy.nbytes * 8 /
0444                           op->dummy.buswidth);
0445         lutidx++;
0446     }
0447 
0448     if (op->data.nbytes) {
0449         lutval[lutidx / 2] |= LUT_DEF(lutidx,
0450                           op->data.dir == SPI_MEM_DATA_IN ?
0451                           LUT_FSL_READ : LUT_FSL_WRITE,
0452                           LUT_PAD(op->data.buswidth),
0453                           0);
0454         lutidx++;
0455     }
0456 
0457     lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_STOP, 0, 0);
0458 
0459     /* unlock LUT */
0460     qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
0461     qspi_writel(q, QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR);
0462 
0463     /* fill LUT */
0464     for (i = 0; i < ARRAY_SIZE(lutval); i++)
0465         qspi_writel(q, lutval[i], base + QUADSPI_LUT_REG(i));
0466 
0467     /* lock LUT */
0468     qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
0469     qspi_writel(q, QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR);
0470 }
0471 
0472 static int fsl_qspi_clk_prep_enable(struct fsl_qspi *q)
0473 {
0474     int ret;
0475 
0476     ret = clk_prepare_enable(q->clk_en);
0477     if (ret)
0478         return ret;
0479 
0480     ret = clk_prepare_enable(q->clk);
0481     if (ret) {
0482         clk_disable_unprepare(q->clk_en);
0483         return ret;
0484     }
0485 
0486     if (needs_wakeup_wait_mode(q))
0487         cpu_latency_qos_add_request(&q->pm_qos_req, 0);
0488 
0489     return 0;
0490 }
0491 
0492 static void fsl_qspi_clk_disable_unprep(struct fsl_qspi *q)
0493 {
0494     if (needs_wakeup_wait_mode(q))
0495         cpu_latency_qos_remove_request(&q->pm_qos_req);
0496 
0497     clk_disable_unprepare(q->clk);
0498     clk_disable_unprepare(q->clk_en);
0499 }
0500 
0501 /*
0502  * If we have changed the content of the flash by writing or erasing, or if we
0503  * read from flash with a different offset into the page buffer, we need to
0504  * invalidate the AHB buffer. If we do not do so, we may read out the wrong
0505  * data. The spec tells us reset the AHB domain and Serial Flash domain at
0506  * the same time.
0507  */
0508 static void fsl_qspi_invalidate(struct fsl_qspi *q)
0509 {
0510     u32 reg;
0511 
0512     reg = qspi_readl(q, q->iobase + QUADSPI_MCR);
0513     reg |= QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK;
0514     qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
0515 
0516     /*
0517      * The minimum delay : 1 AHB + 2 SFCK clocks.
0518      * Delay 1 us is enough.
0519      */
0520     udelay(1);
0521 
0522     reg &= ~(QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK);
0523     qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
0524 }
0525 
0526 static void fsl_qspi_select_mem(struct fsl_qspi *q, struct spi_device *spi)
0527 {
0528     unsigned long rate = spi->max_speed_hz;
0529     int ret;
0530 
0531     if (q->selected == spi->chip_select)
0532         return;
0533 
0534     if (needs_4x_clock(q))
0535         rate *= 4;
0536 
0537     fsl_qspi_clk_disable_unprep(q);
0538 
0539     ret = clk_set_rate(q->clk, rate);
0540     if (ret)
0541         return;
0542 
0543     ret = fsl_qspi_clk_prep_enable(q);
0544     if (ret)
0545         return;
0546 
0547     q->selected = spi->chip_select;
0548 
0549     fsl_qspi_invalidate(q);
0550 }
0551 
0552 static void fsl_qspi_read_ahb(struct fsl_qspi *q, const struct spi_mem_op *op)
0553 {
0554     memcpy_fromio(op->data.buf.in,
0555               q->ahb_addr + q->selected * q->devtype_data->ahb_buf_size,
0556               op->data.nbytes);
0557 }
0558 
0559 static void fsl_qspi_fill_txfifo(struct fsl_qspi *q,
0560                  const struct spi_mem_op *op)
0561 {
0562     void __iomem *base = q->iobase;
0563     int i;
0564     u32 val;
0565 
0566     for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 4); i += 4) {
0567         memcpy(&val, op->data.buf.out + i, 4);
0568         val = fsl_qspi_endian_xchg(q, val);
0569         qspi_writel(q, val, base + QUADSPI_TBDR);
0570     }
0571 
0572     if (i < op->data.nbytes) {
0573         memcpy(&val, op->data.buf.out + i, op->data.nbytes - i);
0574         val = fsl_qspi_endian_xchg(q, val);
0575         qspi_writel(q, val, base + QUADSPI_TBDR);
0576     }
0577 
0578     if (needs_fill_txfifo(q)) {
0579         for (i = op->data.nbytes; i < 16; i += 4)
0580             qspi_writel(q, 0, base + QUADSPI_TBDR);
0581     }
0582 }
0583 
0584 static void fsl_qspi_read_rxfifo(struct fsl_qspi *q,
0585               const struct spi_mem_op *op)
0586 {
0587     void __iomem *base = q->iobase;
0588     int i;
0589     u8 *buf = op->data.buf.in;
0590     u32 val;
0591 
0592     for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 4); i += 4) {
0593         val = qspi_readl(q, base + QUADSPI_RBDR(i / 4));
0594         val = fsl_qspi_endian_xchg(q, val);
0595         memcpy(buf + i, &val, 4);
0596     }
0597 
0598     if (i < op->data.nbytes) {
0599         val = qspi_readl(q, base + QUADSPI_RBDR(i / 4));
0600         val = fsl_qspi_endian_xchg(q, val);
0601         memcpy(buf + i, &val, op->data.nbytes - i);
0602     }
0603 }
0604 
0605 static int fsl_qspi_do_op(struct fsl_qspi *q, const struct spi_mem_op *op)
0606 {
0607     void __iomem *base = q->iobase;
0608     int err = 0;
0609 
0610     init_completion(&q->c);
0611 
0612     /*
0613      * Always start the sequence at the same index since we update
0614      * the LUT at each exec_op() call. And also specify the DATA
0615      * length, since it's has not been specified in the LUT.
0616      */
0617     qspi_writel(q, op->data.nbytes | QUADSPI_IPCR_SEQID(SEQID_LUT),
0618             base + QUADSPI_IPCR);
0619 
0620     /* Wait for the interrupt. */
0621     if (!wait_for_completion_timeout(&q->c, msecs_to_jiffies(1000)))
0622         err = -ETIMEDOUT;
0623 
0624     if (!err && op->data.nbytes && op->data.dir == SPI_MEM_DATA_IN)
0625         fsl_qspi_read_rxfifo(q, op);
0626 
0627     return err;
0628 }
0629 
0630 static int fsl_qspi_readl_poll_tout(struct fsl_qspi *q, void __iomem *base,
0631                     u32 mask, u32 delay_us, u32 timeout_us)
0632 {
0633     u32 reg;
0634 
0635     if (!q->devtype_data->little_endian)
0636         mask = (u32)cpu_to_be32(mask);
0637 
0638     return readl_poll_timeout(base, reg, !(reg & mask), delay_us,
0639                   timeout_us);
0640 }
0641 
0642 static int fsl_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
0643 {
0644     struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master);
0645     void __iomem *base = q->iobase;
0646     u32 addr_offset = 0;
0647     int err = 0;
0648     int invalid_mstrid = q->devtype_data->invalid_mstrid;
0649 
0650     mutex_lock(&q->lock);
0651 
0652     /* wait for the controller being ready */
0653     fsl_qspi_readl_poll_tout(q, base + QUADSPI_SR, (QUADSPI_SR_IP_ACC_MASK |
0654                  QUADSPI_SR_AHB_ACC_MASK), 10, 1000);
0655 
0656     fsl_qspi_select_mem(q, mem->spi);
0657 
0658     if (needs_amba_base_offset(q))
0659         addr_offset = q->memmap_phy;
0660 
0661     qspi_writel(q,
0662             q->selected * q->devtype_data->ahb_buf_size + addr_offset,
0663             base + QUADSPI_SFAR);
0664 
0665     qspi_writel(q, qspi_readl(q, base + QUADSPI_MCR) |
0666             QUADSPI_MCR_CLR_RXF_MASK | QUADSPI_MCR_CLR_TXF_MASK,
0667             base + QUADSPI_MCR);
0668 
0669     qspi_writel(q, QUADSPI_SPTRCLR_BFPTRC | QUADSPI_SPTRCLR_IPPTRC,
0670             base + QUADSPI_SPTRCLR);
0671 
0672     qspi_writel(q, invalid_mstrid, base + QUADSPI_BUF0CR);
0673     qspi_writel(q, invalid_mstrid, base + QUADSPI_BUF1CR);
0674     qspi_writel(q, invalid_mstrid, base + QUADSPI_BUF2CR);
0675 
0676     fsl_qspi_prepare_lut(q, op);
0677 
0678     /*
0679      * If we have large chunks of data, we read them through the AHB bus
0680      * by accessing the mapped memory. In all other cases we use
0681      * IP commands to access the flash.
0682      */
0683     if (op->data.nbytes > (q->devtype_data->rxfifo - 4) &&
0684         op->data.dir == SPI_MEM_DATA_IN) {
0685         fsl_qspi_read_ahb(q, op);
0686     } else {
0687         qspi_writel(q, QUADSPI_RBCT_WMRK_MASK |
0688                 QUADSPI_RBCT_RXBRD_USEIPS, base + QUADSPI_RBCT);
0689 
0690         if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT)
0691             fsl_qspi_fill_txfifo(q, op);
0692 
0693         err = fsl_qspi_do_op(q, op);
0694     }
0695 
0696     /* Invalidate the data in the AHB buffer. */
0697     fsl_qspi_invalidate(q);
0698 
0699     mutex_unlock(&q->lock);
0700 
0701     return err;
0702 }
0703 
0704 static int fsl_qspi_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op)
0705 {
0706     struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master);
0707 
0708     if (op->data.dir == SPI_MEM_DATA_OUT) {
0709         if (op->data.nbytes > q->devtype_data->txfifo)
0710             op->data.nbytes = q->devtype_data->txfifo;
0711     } else {
0712         if (op->data.nbytes > q->devtype_data->ahb_buf_size)
0713             op->data.nbytes = q->devtype_data->ahb_buf_size;
0714         else if (op->data.nbytes > (q->devtype_data->rxfifo - 4))
0715             op->data.nbytes = ALIGN_DOWN(op->data.nbytes, 8);
0716     }
0717 
0718     return 0;
0719 }
0720 
0721 static int fsl_qspi_default_setup(struct fsl_qspi *q)
0722 {
0723     void __iomem *base = q->iobase;
0724     u32 reg, addr_offset = 0;
0725     int ret;
0726 
0727     /* disable and unprepare clock to avoid glitch pass to controller */
0728     fsl_qspi_clk_disable_unprep(q);
0729 
0730     /* the default frequency, we will change it later if necessary. */
0731     ret = clk_set_rate(q->clk, 66000000);
0732     if (ret)
0733         return ret;
0734 
0735     ret = fsl_qspi_clk_prep_enable(q);
0736     if (ret)
0737         return ret;
0738 
0739     /* Reset the module */
0740     qspi_writel(q, QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK,
0741             base + QUADSPI_MCR);
0742     udelay(1);
0743 
0744     /* Disable the module */
0745     qspi_writel(q, QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK,
0746             base + QUADSPI_MCR);
0747 
0748     /*
0749      * Previous boot stages (BootROM, bootloader) might have used DDR
0750      * mode and did not clear the TDH bits. As we currently use SDR mode
0751      * only, clear the TDH bits if necessary.
0752      */
0753     if (needs_tdh_setting(q))
0754         qspi_writel(q, qspi_readl(q, base + QUADSPI_FLSHCR) &
0755                 ~QUADSPI_FLSHCR_TDH_MASK,
0756                 base + QUADSPI_FLSHCR);
0757 
0758     reg = qspi_readl(q, base + QUADSPI_SMPR);
0759     qspi_writel(q, reg & ~(QUADSPI_SMPR_FSDLY_MASK
0760             | QUADSPI_SMPR_FSPHS_MASK
0761             | QUADSPI_SMPR_HSENA_MASK
0762             | QUADSPI_SMPR_DDRSMP_MASK), base + QUADSPI_SMPR);
0763 
0764     /* We only use the buffer3 for AHB read */
0765     qspi_writel(q, 0, base + QUADSPI_BUF0IND);
0766     qspi_writel(q, 0, base + QUADSPI_BUF1IND);
0767     qspi_writel(q, 0, base + QUADSPI_BUF2IND);
0768 
0769     qspi_writel(q, QUADSPI_BFGENCR_SEQID(SEQID_LUT),
0770             q->iobase + QUADSPI_BFGENCR);
0771     qspi_writel(q, QUADSPI_RBCT_WMRK_MASK, base + QUADSPI_RBCT);
0772     qspi_writel(q, QUADSPI_BUF3CR_ALLMST_MASK |
0773             QUADSPI_BUF3CR_ADATSZ(q->devtype_data->ahb_buf_size / 8),
0774             base + QUADSPI_BUF3CR);
0775 
0776     if (needs_amba_base_offset(q))
0777         addr_offset = q->memmap_phy;
0778 
0779     /*
0780      * In HW there can be a maximum of four chips on two buses with
0781      * two chip selects on each bus. We use four chip selects in SW
0782      * to differentiate between the four chips.
0783      * We use ahb_buf_size for each chip and set SFA1AD, SFA2AD, SFB1AD,
0784      * SFB2AD accordingly.
0785      */
0786     qspi_writel(q, q->devtype_data->ahb_buf_size + addr_offset,
0787             base + QUADSPI_SFA1AD);
0788     qspi_writel(q, q->devtype_data->ahb_buf_size * 2 + addr_offset,
0789             base + QUADSPI_SFA2AD);
0790     qspi_writel(q, q->devtype_data->ahb_buf_size * 3 + addr_offset,
0791             base + QUADSPI_SFB1AD);
0792     qspi_writel(q, q->devtype_data->ahb_buf_size * 4 + addr_offset,
0793             base + QUADSPI_SFB2AD);
0794 
0795     q->selected = -1;
0796 
0797     /* Enable the module */
0798     qspi_writel(q, QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK,
0799             base + QUADSPI_MCR);
0800 
0801     /* clear all interrupt status */
0802     qspi_writel(q, 0xffffffff, q->iobase + QUADSPI_FR);
0803 
0804     /* enable the interrupt */
0805     qspi_writel(q, QUADSPI_RSER_TFIE, q->iobase + QUADSPI_RSER);
0806 
0807     return 0;
0808 }
0809 
0810 static const char *fsl_qspi_get_name(struct spi_mem *mem)
0811 {
0812     struct fsl_qspi *q = spi_controller_get_devdata(mem->spi->master);
0813     struct device *dev = &mem->spi->dev;
0814     const char *name;
0815 
0816     /*
0817      * In order to keep mtdparts compatible with the old MTD driver at
0818      * mtd/spi-nor/fsl-quadspi.c, we set a custom name derived from the
0819      * platform_device of the controller.
0820      */
0821     if (of_get_available_child_count(q->dev->of_node) == 1)
0822         return dev_name(q->dev);
0823 
0824     name = devm_kasprintf(dev, GFP_KERNEL,
0825                   "%s-%d", dev_name(q->dev),
0826                   mem->spi->chip_select);
0827 
0828     if (!name) {
0829         dev_err(dev, "failed to get memory for custom flash name\n");
0830         return ERR_PTR(-ENOMEM);
0831     }
0832 
0833     return name;
0834 }
0835 
0836 static const struct spi_controller_mem_ops fsl_qspi_mem_ops = {
0837     .adjust_op_size = fsl_qspi_adjust_op_size,
0838     .supports_op = fsl_qspi_supports_op,
0839     .exec_op = fsl_qspi_exec_op,
0840     .get_name = fsl_qspi_get_name,
0841 };
0842 
0843 static int fsl_qspi_probe(struct platform_device *pdev)
0844 {
0845     struct spi_controller *ctlr;
0846     struct device *dev = &pdev->dev;
0847     struct device_node *np = dev->of_node;
0848     struct resource *res;
0849     struct fsl_qspi *q;
0850     int ret;
0851 
0852     ctlr = spi_alloc_master(&pdev->dev, sizeof(*q));
0853     if (!ctlr)
0854         return -ENOMEM;
0855 
0856     ctlr->mode_bits = SPI_RX_DUAL | SPI_RX_QUAD |
0857               SPI_TX_DUAL | SPI_TX_QUAD;
0858 
0859     q = spi_controller_get_devdata(ctlr);
0860     q->dev = dev;
0861     q->devtype_data = of_device_get_match_data(dev);
0862     if (!q->devtype_data) {
0863         ret = -ENODEV;
0864         goto err_put_ctrl;
0865     }
0866 
0867     platform_set_drvdata(pdev, q);
0868 
0869     /* find the resources */
0870     res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "QuadSPI");
0871     q->iobase = devm_ioremap_resource(dev, res);
0872     if (IS_ERR(q->iobase)) {
0873         ret = PTR_ERR(q->iobase);
0874         goto err_put_ctrl;
0875     }
0876 
0877     res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
0878                     "QuadSPI-memory");
0879     if (!res) {
0880         ret = -EINVAL;
0881         goto err_put_ctrl;
0882     }
0883     q->memmap_phy = res->start;
0884     /* Since there are 4 cs, map size required is 4 times ahb_buf_size */
0885     q->ahb_addr = devm_ioremap(dev, q->memmap_phy,
0886                    (q->devtype_data->ahb_buf_size * 4));
0887     if (!q->ahb_addr) {
0888         ret = -ENOMEM;
0889         goto err_put_ctrl;
0890     }
0891 
0892     /* find the clocks */
0893     q->clk_en = devm_clk_get(dev, "qspi_en");
0894     if (IS_ERR(q->clk_en)) {
0895         ret = PTR_ERR(q->clk_en);
0896         goto err_put_ctrl;
0897     }
0898 
0899     q->clk = devm_clk_get(dev, "qspi");
0900     if (IS_ERR(q->clk)) {
0901         ret = PTR_ERR(q->clk);
0902         goto err_put_ctrl;
0903     }
0904 
0905     ret = fsl_qspi_clk_prep_enable(q);
0906     if (ret) {
0907         dev_err(dev, "can not enable the clock\n");
0908         goto err_put_ctrl;
0909     }
0910 
0911     /* find the irq */
0912     ret = platform_get_irq(pdev, 0);
0913     if (ret < 0)
0914         goto err_disable_clk;
0915 
0916     ret = devm_request_irq(dev, ret,
0917             fsl_qspi_irq_handler, 0, pdev->name, q);
0918     if (ret) {
0919         dev_err(dev, "failed to request irq: %d\n", ret);
0920         goto err_disable_clk;
0921     }
0922 
0923     mutex_init(&q->lock);
0924 
0925     ctlr->bus_num = -1;
0926     ctlr->num_chipselect = 4;
0927     ctlr->mem_ops = &fsl_qspi_mem_ops;
0928 
0929     fsl_qspi_default_setup(q);
0930 
0931     ctlr->dev.of_node = np;
0932 
0933     ret = devm_spi_register_controller(dev, ctlr);
0934     if (ret)
0935         goto err_destroy_mutex;
0936 
0937     return 0;
0938 
0939 err_destroy_mutex:
0940     mutex_destroy(&q->lock);
0941 
0942 err_disable_clk:
0943     fsl_qspi_clk_disable_unprep(q);
0944 
0945 err_put_ctrl:
0946     spi_controller_put(ctlr);
0947 
0948     dev_err(dev, "Freescale QuadSPI probe failed\n");
0949     return ret;
0950 }
0951 
0952 static int fsl_qspi_remove(struct platform_device *pdev)
0953 {
0954     struct fsl_qspi *q = platform_get_drvdata(pdev);
0955 
0956     /* disable the hardware */
0957     qspi_writel(q, QUADSPI_MCR_MDIS_MASK, q->iobase + QUADSPI_MCR);
0958     qspi_writel(q, 0x0, q->iobase + QUADSPI_RSER);
0959 
0960     fsl_qspi_clk_disable_unprep(q);
0961 
0962     mutex_destroy(&q->lock);
0963 
0964     return 0;
0965 }
0966 
0967 static int fsl_qspi_suspend(struct device *dev)
0968 {
0969     return 0;
0970 }
0971 
0972 static int fsl_qspi_resume(struct device *dev)
0973 {
0974     struct fsl_qspi *q = dev_get_drvdata(dev);
0975 
0976     fsl_qspi_default_setup(q);
0977 
0978     return 0;
0979 }
0980 
0981 static const struct of_device_id fsl_qspi_dt_ids[] = {
0982     { .compatible = "fsl,vf610-qspi", .data = &vybrid_data, },
0983     { .compatible = "fsl,imx6sx-qspi", .data = &imx6sx_data, },
0984     { .compatible = "fsl,imx7d-qspi", .data = &imx7d_data, },
0985     { .compatible = "fsl,imx6ul-qspi", .data = &imx6ul_data, },
0986     { .compatible = "fsl,ls1021a-qspi", .data = &ls1021a_data, },
0987     { .compatible = "fsl,ls2080a-qspi", .data = &ls2080a_data, },
0988     { /* sentinel */ }
0989 };
0990 MODULE_DEVICE_TABLE(of, fsl_qspi_dt_ids);
0991 
0992 static const struct dev_pm_ops fsl_qspi_pm_ops = {
0993     .suspend    = fsl_qspi_suspend,
0994     .resume     = fsl_qspi_resume,
0995 };
0996 
0997 static struct platform_driver fsl_qspi_driver = {
0998     .driver = {
0999         .name   = "fsl-quadspi",
1000         .of_match_table = fsl_qspi_dt_ids,
1001         .pm =   &fsl_qspi_pm_ops,
1002     },
1003     .probe          = fsl_qspi_probe,
1004     .remove     = fsl_qspi_remove,
1005 };
1006 module_platform_driver(fsl_qspi_driver);
1007 
1008 MODULE_DESCRIPTION("Freescale QuadSPI Controller Driver");
1009 MODULE_AUTHOR("Freescale Semiconductor Inc.");
1010 MODULE_AUTHOR("Boris Brezillon <bbrezillon@kernel.org>");
1011 MODULE_AUTHOR("Frieder Schrempf <frieder.schrempf@kontron.de>");
1012 MODULE_AUTHOR("Yogesh Gaur <yogeshnarayan.gaur@nxp.com>");
1013 MODULE_AUTHOR("Suresh Gupta <suresh.gupta@nxp.com>");
1014 MODULE_LICENSE("GPL v2");