common: Drop image.h from common header
[oweals/u-boot.git] / drivers / spi / fsl_qspi.c
1 // SPDX-License-Identifier: GPL-2.0+
2
3 /*
4  * Freescale QuadSPI driver.
5  *
6  * Copyright (C) 2013 Freescale Semiconductor, Inc.
7  * Copyright (C) 2018 Bootlin
8  * Copyright (C) 2018 exceet electronics GmbH
9  * Copyright (C) 2018 Kontron Electronics GmbH
10  * Copyright 2019-2020 NXP
11  *
12  * This driver is a ported version of Linux Freescale QSPI driver taken from
13  * v5.5-rc1 tag having following information.
14  *
15  * Transition to SPI MEM interface:
16  * Authors:
17  *     Boris Brezillon <bbrezillon@kernel.org>
18  *     Frieder Schrempf <frieder.schrempf@kontron.de>
19  *     Yogesh Gaur <yogeshnarayan.gaur@nxp.com>
20  *     Suresh Gupta <suresh.gupta@nxp.com>
21  *
22  * Based on the original fsl-quadspi.c spi-nor driver.
23  * Transition to spi-mem in spi-fsl-qspi.c
24  */
25
26 #include <common.h>
27 #include <asm/io.h>
28 #include <linux/libfdt.h>
29 #include <linux/sizes.h>
30 #include <linux/iopoll.h>
31 #include <dm.h>
32 #include <linux/iopoll.h>
33 #include <linux/sizes.h>
34 #include <linux/err.h>
35 #include <spi.h>
36 #include <spi-mem.h>
37
38 DECLARE_GLOBAL_DATA_PTR;
39
40 /*
41  * The driver only uses one single LUT entry, that is updated on
42  * each call of exec_op(). Index 0 is preset at boot with a basic
43  * read operation, so let's use the last entry (15).
44  */
45 #define SEQID_LUT                       15
46
47 /* Registers used by the driver */
48 #define QUADSPI_MCR                     0x00
49 #define QUADSPI_MCR_RESERVED_MASK       GENMASK(19, 16)
50 #define QUADSPI_MCR_MDIS_MASK           BIT(14)
51 #define QUADSPI_MCR_CLR_TXF_MASK        BIT(11)
52 #define QUADSPI_MCR_CLR_RXF_MASK        BIT(10)
53 #define QUADSPI_MCR_DDR_EN_MASK         BIT(7)
54 #define QUADSPI_MCR_END_CFG_MASK        GENMASK(3, 2)
55 #define QUADSPI_MCR_SWRSTHD_MASK        BIT(1)
56 #define QUADSPI_MCR_SWRSTSD_MASK        BIT(0)
57
58 #define QUADSPI_IPCR                    0x08
59 #define QUADSPI_IPCR_SEQID(x)           ((x) << 24)
60 #define QUADSPI_FLSHCR                  0x0c
61 #define QUADSPI_FLSHCR_TCSS_MASK        GENMASK(3, 0)
62 #define QUADSPI_FLSHCR_TCSH_MASK        GENMASK(11, 8)
63 #define QUADSPI_FLSHCR_TDH_MASK         GENMASK(17, 16)
64
65 #define QUADSPI_BUF3CR                  0x1c
66 #define QUADSPI_BUF3CR_ALLMST_MASK      BIT(31)
67 #define QUADSPI_BUF3CR_ADATSZ(x)        ((x) << 8)
68 #define QUADSPI_BUF3CR_ADATSZ_MASK      GENMASK(15, 8)
69
70 #define QUADSPI_BFGENCR                 0x20
71 #define QUADSPI_BFGENCR_SEQID(x)        ((x) << 12)
72
73 #define QUADSPI_BUF0IND                 0x30
74 #define QUADSPI_BUF1IND                 0x34
75 #define QUADSPI_BUF2IND                 0x38
76 #define QUADSPI_SFAR                    0x100
77
78 #define QUADSPI_SMPR                    0x108
79 #define QUADSPI_SMPR_DDRSMP_MASK        GENMASK(18, 16)
80 #define QUADSPI_SMPR_FSDLY_MASK         BIT(6)
81 #define QUADSPI_SMPR_FSPHS_MASK         BIT(5)
82 #define QUADSPI_SMPR_HSENA_MASK         BIT(0)
83
84 #define QUADSPI_RBCT                    0x110
85 #define QUADSPI_RBCT_WMRK_MASK          GENMASK(4, 0)
86 #define QUADSPI_RBCT_RXBRD_USEIPS       BIT(8)
87
88 #define QUADSPI_TBDR                    0x154
89
90 #define QUADSPI_SR                      0x15c
91 #define QUADSPI_SR_IP_ACC_MASK          BIT(1)
92 #define QUADSPI_SR_AHB_ACC_MASK         BIT(2)
93
94 #define QUADSPI_FR                      0x160
95 #define QUADSPI_FR_TFF_MASK             BIT(0)
96
97 #define QUADSPI_RSER                    0x164
98 #define QUADSPI_RSER_TFIE               BIT(0)
99
100 #define QUADSPI_SPTRCLR                 0x16c
101 #define QUADSPI_SPTRCLR_IPPTRC          BIT(8)
102 #define QUADSPI_SPTRCLR_BFPTRC          BIT(0)
103
104 #define QUADSPI_SFA1AD                  0x180
105 #define QUADSPI_SFA2AD                  0x184
106 #define QUADSPI_SFB1AD                  0x188
107 #define QUADSPI_SFB2AD                  0x18c
108 #define QUADSPI_RBDR(x)                 (0x200 + ((x) * 4))
109
110 #define QUADSPI_LUTKEY                  0x300
111 #define QUADSPI_LUTKEY_VALUE            0x5AF05AF0
112
113 #define QUADSPI_LCKCR                   0x304
114 #define QUADSPI_LCKER_LOCK              BIT(0)
115 #define QUADSPI_LCKER_UNLOCK            BIT(1)
116
117 #define QUADSPI_LUT_BASE                0x310
118 #define QUADSPI_LUT_OFFSET              (SEQID_LUT * 4 * 4)
119 #define QUADSPI_LUT_REG(idx) \
120         (QUADSPI_LUT_BASE + QUADSPI_LUT_OFFSET + (idx) * 4)
121
122 /* Instruction set for the LUT register */
123 #define LUT_STOP                0
124 #define LUT_CMD                 1
125 #define LUT_ADDR                2
126 #define LUT_DUMMY               3
127 #define LUT_MODE                4
128 #define LUT_MODE2               5
129 #define LUT_MODE4               6
130 #define LUT_FSL_READ            7
131 #define LUT_FSL_WRITE           8
132 #define LUT_JMP_ON_CS           9
133 #define LUT_ADDR_DDR            10
134 #define LUT_MODE_DDR            11
135 #define LUT_MODE2_DDR           12
136 #define LUT_MODE4_DDR           13
137 #define LUT_FSL_READ_DDR        14
138 #define LUT_FSL_WRITE_DDR       15
139 #define LUT_DATA_LEARN          16
140
141 /*
142  * The PAD definitions for LUT register.
143  *
144  * The pad stands for the number of IO lines [0:3].
145  * For example, the quad read needs four IO lines,
146  * so you should use LUT_PAD(4).
147  */
148 #define LUT_PAD(x) (fls(x) - 1)
149
150 /*
151  * Macro for constructing the LUT entries with the following
152  * register layout:
153  *
154  *  ---------------------------------------------------
155  *  | INSTR1 | PAD1 | OPRND1 | INSTR0 | PAD0 | OPRND0 |
156  *  ---------------------------------------------------
157  */
158 #define LUT_DEF(idx, ins, pad, opr)                                     \
159         ((((ins) << 10) | ((pad) << 8) | (opr)) << (((idx) % 2) * 16))
160
161 /* Controller needs driver to swap endianness */
162 #define QUADSPI_QUIRK_SWAP_ENDIAN       BIT(0)
163
164 /* Controller needs 4x internal clock */
165 #define QUADSPI_QUIRK_4X_INT_CLK        BIT(1)
166
167 /*
168  * TKT253890, the controller needs the driver to fill the txfifo with
169  * 16 bytes at least to trigger a data transfer, even though the extra
170  * data won't be transferred.
171  */
172 #define QUADSPI_QUIRK_TKT253890         BIT(2)
173
174 /* TKT245618, the controller cannot wake up from wait mode */
175 #define QUADSPI_QUIRK_TKT245618         BIT(3)
176
177 /*
178  * Controller adds QSPI_AMBA_BASE (base address of the mapped memory)
179  * internally. No need to add it when setting SFXXAD and SFAR registers
180  */
181 #define QUADSPI_QUIRK_BASE_INTERNAL     BIT(4)
182
183 /*
184  * Controller uses TDH bits in register QUADSPI_FLSHCR.
185  * They need to be set in accordance with the DDR/SDR mode.
186  */
187 #define QUADSPI_QUIRK_USE_TDH_SETTING   BIT(5)
188
189 struct fsl_qspi_devtype_data {
190         unsigned int rxfifo;
191         unsigned int txfifo;
192         unsigned int ahb_buf_size;
193         unsigned int quirks;
194         bool little_endian;
195 };
196
197 static const struct fsl_qspi_devtype_data vybrid_data = {
198         .rxfifo = SZ_128,
199         .txfifo = SZ_64,
200         .ahb_buf_size = SZ_1K,
201         .quirks = QUADSPI_QUIRK_SWAP_ENDIAN,
202         .little_endian = true,
203 };
204
205 static const struct fsl_qspi_devtype_data imx6sx_data = {
206         .rxfifo = SZ_128,
207         .txfifo = SZ_512,
208         .ahb_buf_size = SZ_1K,
209         .quirks = QUADSPI_QUIRK_4X_INT_CLK | QUADSPI_QUIRK_TKT245618,
210         .little_endian = true,
211 };
212
213 static const struct fsl_qspi_devtype_data imx7d_data = {
214         .rxfifo = SZ_128,
215         .txfifo = SZ_512,
216         .ahb_buf_size = SZ_1K,
217         .quirks = QUADSPI_QUIRK_TKT253890 | QUADSPI_QUIRK_4X_INT_CLK |
218                   QUADSPI_QUIRK_USE_TDH_SETTING,
219         .little_endian = true,
220 };
221
222 static const struct fsl_qspi_devtype_data imx6ul_data = {
223         .rxfifo = SZ_128,
224         .txfifo = SZ_512,
225         .ahb_buf_size = SZ_1K,
226         .quirks = QUADSPI_QUIRK_TKT253890 | QUADSPI_QUIRK_4X_INT_CLK |
227                   QUADSPI_QUIRK_USE_TDH_SETTING,
228         .little_endian = true,
229 };
230
231 static const struct fsl_qspi_devtype_data ls1021a_data = {
232         .rxfifo = SZ_128,
233         .txfifo = SZ_64,
234         .ahb_buf_size = SZ_1K,
235         .quirks = 0,
236         .little_endian = false,
237 };
238
239 static const struct fsl_qspi_devtype_data ls1088a_data = {
240         .rxfifo = SZ_128,
241         .txfifo = SZ_128,
242         .ahb_buf_size = SZ_1K,
243         .quirks = QUADSPI_QUIRK_TKT253890,
244         .little_endian = true,
245 };
246
247 static const struct fsl_qspi_devtype_data ls2080a_data = {
248         .rxfifo = SZ_128,
249         .txfifo = SZ_64,
250         .ahb_buf_size = SZ_1K,
251         .quirks = QUADSPI_QUIRK_TKT253890 | QUADSPI_QUIRK_BASE_INTERNAL,
252         .little_endian = true,
253 };
254
255 struct fsl_qspi {
256         struct udevice *dev;
257         void __iomem *iobase;
258         void __iomem *ahb_addr;
259         u32 memmap_phy;
260         const struct fsl_qspi_devtype_data *devtype_data;
261         int selected;
262 };
263
264 static inline int needs_swap_endian(struct fsl_qspi *q)
265 {
266         return q->devtype_data->quirks & QUADSPI_QUIRK_SWAP_ENDIAN;
267 }
268
269 static inline int needs_4x_clock(struct fsl_qspi *q)
270 {
271         return q->devtype_data->quirks & QUADSPI_QUIRK_4X_INT_CLK;
272 }
273
274 static inline int needs_fill_txfifo(struct fsl_qspi *q)
275 {
276         return q->devtype_data->quirks & QUADSPI_QUIRK_TKT253890;
277 }
278
279 static inline int needs_wakeup_wait_mode(struct fsl_qspi *q)
280 {
281         return q->devtype_data->quirks & QUADSPI_QUIRK_TKT245618;
282 }
283
284 static inline int needs_amba_base_offset(struct fsl_qspi *q)
285 {
286         return !(q->devtype_data->quirks & QUADSPI_QUIRK_BASE_INTERNAL);
287 }
288
289 static inline int needs_tdh_setting(struct fsl_qspi *q)
290 {
291         return q->devtype_data->quirks & QUADSPI_QUIRK_USE_TDH_SETTING;
292 }
293
294 /*
295  * An IC bug makes it necessary to rearrange the 32-bit data.
296  * Later chips, such as IMX6SLX, have fixed this bug.
297  */
298 static inline u32 fsl_qspi_endian_xchg(struct fsl_qspi *q, u32 a)
299 {
300         return needs_swap_endian(q) ? __swab32(a) : a;
301 }
302
303 /*
304  * R/W functions for big- or little-endian registers:
305  * The QSPI controller's endianness is independent of
306  * the CPU core's endianness. So far, although the CPU
307  * core is little-endian the QSPI controller can use
308  * big-endian or little-endian.
309  */
310 static void qspi_writel(struct fsl_qspi *q, u32 val, void __iomem *addr)
311 {
312         if (q->devtype_data->little_endian)
313                 out_le32(addr, val);
314         else
315                 out_be32(addr, val);
316 }
317
318 static u32 qspi_readl(struct fsl_qspi *q, void __iomem *addr)
319 {
320         if (q->devtype_data->little_endian)
321                 return in_le32(addr);
322
323         return in_be32(addr);
324 }
325
326 static int fsl_qspi_check_buswidth(struct fsl_qspi *q, u8 width)
327 {
328         switch (width) {
329         case 1:
330         case 2:
331         case 4:
332                 return 0;
333         }
334
335         return -ENOTSUPP;
336 }
337
338 static bool fsl_qspi_supports_op(struct spi_slave *slave,
339                                  const struct spi_mem_op *op)
340 {
341         struct fsl_qspi *q = dev_get_priv(slave->dev->parent);
342         int ret;
343
344         ret = fsl_qspi_check_buswidth(q, op->cmd.buswidth);
345
346         if (op->addr.nbytes)
347                 ret |= fsl_qspi_check_buswidth(q, op->addr.buswidth);
348
349         if (op->dummy.nbytes)
350                 ret |= fsl_qspi_check_buswidth(q, op->dummy.buswidth);
351
352         if (op->data.nbytes)
353                 ret |= fsl_qspi_check_buswidth(q, op->data.buswidth);
354
355         if (ret)
356                 return false;
357
358         /*
359          * The number of instructions needed for the op, needs
360          * to fit into a single LUT entry.
361          */
362         if (op->addr.nbytes +
363            (op->dummy.nbytes ? 1 : 0) +
364            (op->data.nbytes ? 1 : 0) > 6)
365                 return false;
366
367         /* Max 64 dummy clock cycles supported */
368         if (op->dummy.nbytes &&
369             (op->dummy.nbytes * 8 / op->dummy.buswidth > 64))
370                 return false;
371
372         /* Max data length, check controller limits and alignment */
373         if (op->data.dir == SPI_MEM_DATA_IN &&
374             (op->data.nbytes > q->devtype_data->ahb_buf_size ||
375              (op->data.nbytes > q->devtype_data->rxfifo - 4 &&
376               !IS_ALIGNED(op->data.nbytes, 8))))
377                 return false;
378
379         if (op->data.dir == SPI_MEM_DATA_OUT &&
380             op->data.nbytes > q->devtype_data->txfifo)
381                 return false;
382
383         return true;
384 }
385
386 static void fsl_qspi_prepare_lut(struct fsl_qspi *q,
387                                  const struct spi_mem_op *op)
388 {
389         void __iomem *base = q->iobase;
390         u32 lutval[4] = {};
391         int lutidx = 1, i;
392
393         lutval[0] |= LUT_DEF(0, LUT_CMD, LUT_PAD(op->cmd.buswidth),
394                              op->cmd.opcode);
395
396         /*
397          * For some unknown reason, using LUT_ADDR doesn't work in some
398          * cases (at least with only one byte long addresses), so
399          * let's use LUT_MODE to write the address bytes one by one
400          */
401         for (i = 0; i < op->addr.nbytes; i++) {
402                 u8 addrbyte = op->addr.val >> (8 * (op->addr.nbytes - i - 1));
403
404                 lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_MODE,
405                                               LUT_PAD(op->addr.buswidth),
406                                               addrbyte);
407                 lutidx++;
408         }
409
410         if (op->dummy.nbytes) {
411                 lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_DUMMY,
412                                               LUT_PAD(op->dummy.buswidth),
413                                               op->dummy.nbytes * 8 /
414                                               op->dummy.buswidth);
415                 lutidx++;
416         }
417
418         if (op->data.nbytes) {
419                 lutval[lutidx / 2] |= LUT_DEF(lutidx,
420                                               op->data.dir == SPI_MEM_DATA_IN ?
421                                               LUT_FSL_READ : LUT_FSL_WRITE,
422                                               LUT_PAD(op->data.buswidth),
423                                               0);
424                 lutidx++;
425         }
426
427         lutval[lutidx / 2] |= LUT_DEF(lutidx, LUT_STOP, 0, 0);
428
429         /* unlock LUT */
430         qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
431         qspi_writel(q, QUADSPI_LCKER_UNLOCK, q->iobase + QUADSPI_LCKCR);
432
433         dev_dbg(q->dev, "CMD[%x] lutval[0:%x \t 1:%x \t 2:%x \t 3:%x]\n",
434                 op->cmd.opcode, lutval[0], lutval[1], lutval[2], lutval[3]);
435
436         /* fill LUT */
437         for (i = 0; i < ARRAY_SIZE(lutval); i++)
438                 qspi_writel(q, lutval[i], base + QUADSPI_LUT_REG(i));
439
440         /* lock LUT */
441         qspi_writel(q, QUADSPI_LUTKEY_VALUE, q->iobase + QUADSPI_LUTKEY);
442         qspi_writel(q, QUADSPI_LCKER_LOCK, q->iobase + QUADSPI_LCKCR);
443 }
444
445 /*
446  * If we have changed the content of the flash by writing or erasing, or if we
447  * read from flash with a different offset into the page buffer, we need to
448  * invalidate the AHB buffer. If we do not do so, we may read out the wrong
449  * data. The spec tells us reset the AHB domain and Serial Flash domain at
450  * the same time.
451  */
452 static void fsl_qspi_invalidate(struct fsl_qspi *q)
453 {
454         u32 reg;
455
456         reg = qspi_readl(q, q->iobase + QUADSPI_MCR);
457         reg |= QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK;
458         qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
459
460         /*
461          * The minimum delay : 1 AHB + 2 SFCK clocks.
462          * Delay 1 us is enough.
463          */
464         udelay(1);
465
466         reg &= ~(QUADSPI_MCR_SWRSTHD_MASK | QUADSPI_MCR_SWRSTSD_MASK);
467         qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
468 }
469
470 static void fsl_qspi_select_mem(struct fsl_qspi *q, struct spi_slave *slave)
471 {
472         struct dm_spi_slave_platdata *plat =
473                 dev_get_parent_platdata(slave->dev);
474
475         if (q->selected == plat->cs)
476                 return;
477
478         q->selected = plat->cs;
479         fsl_qspi_invalidate(q);
480 }
481
482 static void fsl_qspi_read_ahb(struct fsl_qspi *q, const struct spi_mem_op *op)
483 {
484         memcpy_fromio(op->data.buf.in,
485                       q->ahb_addr + q->selected * q->devtype_data->ahb_buf_size,
486                       op->data.nbytes);
487 }
488
489 static void fsl_qspi_fill_txfifo(struct fsl_qspi *q,
490                                  const struct spi_mem_op *op)
491 {
492         void __iomem *base = q->iobase;
493         int i;
494         u32 val;
495
496         for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 4); i += 4) {
497                 memcpy(&val, op->data.buf.out + i, 4);
498                 val = fsl_qspi_endian_xchg(q, val);
499                 qspi_writel(q, val, base + QUADSPI_TBDR);
500         }
501
502         if (i < op->data.nbytes) {
503                 memcpy(&val, op->data.buf.out + i, op->data.nbytes - i);
504                 val = fsl_qspi_endian_xchg(q, val);
505                 qspi_writel(q, val, base + QUADSPI_TBDR);
506         }
507
508         if (needs_fill_txfifo(q)) {
509                 for (i = op->data.nbytes; i < 16; i += 4)
510                         qspi_writel(q, 0, base + QUADSPI_TBDR);
511         }
512 }
513
514 static void fsl_qspi_read_rxfifo(struct fsl_qspi *q,
515                                  const struct spi_mem_op *op)
516 {
517         void __iomem *base = q->iobase;
518         int i;
519         u8 *buf = op->data.buf.in;
520         u32 val;
521
522         for (i = 0; i < ALIGN_DOWN(op->data.nbytes, 4); i += 4) {
523                 val = qspi_readl(q, base + QUADSPI_RBDR(i / 4));
524                 val = fsl_qspi_endian_xchg(q, val);
525                 memcpy(buf + i, &val, 4);
526         }
527
528         if (i < op->data.nbytes) {
529                 val = qspi_readl(q, base + QUADSPI_RBDR(i / 4));
530                 val = fsl_qspi_endian_xchg(q, val);
531                 memcpy(buf + i, &val, op->data.nbytes - i);
532         }
533 }
534
535 static int fsl_qspi_readl_poll_tout(struct fsl_qspi *q, void __iomem *base,
536                                     u32 mask, u32 delay_us, u32 timeout_us)
537 {
538         u32 reg;
539
540         if (!q->devtype_data->little_endian)
541                 mask = (u32)cpu_to_be32(mask);
542
543         return readl_poll_timeout(base, reg, !(reg & mask), timeout_us);
544 }
545
546 static int fsl_qspi_do_op(struct fsl_qspi *q, const struct spi_mem_op *op)
547 {
548         void __iomem *base = q->iobase;
549         int err = 0;
550
551         /*
552          * Always start the sequence at the same index since we update
553          * the LUT at each exec_op() call. And also specify the DATA
554          * length, since it's has not been specified in the LUT.
555          */
556         qspi_writel(q, op->data.nbytes | QUADSPI_IPCR_SEQID(SEQID_LUT),
557                     base + QUADSPI_IPCR);
558
559         /* wait for the controller being ready */
560         err = fsl_qspi_readl_poll_tout(q, base + QUADSPI_SR,
561                                        (QUADSPI_SR_IP_ACC_MASK |
562                                         QUADSPI_SR_AHB_ACC_MASK),
563                                         10, 1000);
564
565         if (!err && op->data.nbytes && op->data.dir == SPI_MEM_DATA_IN)
566                 fsl_qspi_read_rxfifo(q, op);
567
568         return err;
569 }
570
571 static int fsl_qspi_exec_op(struct spi_slave *slave,
572                             const struct spi_mem_op *op)
573 {
574         struct fsl_qspi *q = dev_get_priv(slave->dev->parent);
575         void __iomem *base = q->iobase;
576         u32 addr_offset = 0;
577         int err = 0;
578
579         /* wait for the controller being ready */
580         fsl_qspi_readl_poll_tout(q, base + QUADSPI_SR, (QUADSPI_SR_IP_ACC_MASK |
581                                  QUADSPI_SR_AHB_ACC_MASK), 10, 1000);
582
583         fsl_qspi_select_mem(q, slave);
584
585         if (needs_amba_base_offset(q))
586                 addr_offset = q->memmap_phy;
587
588         qspi_writel(q,
589                     q->selected * q->devtype_data->ahb_buf_size + addr_offset,
590                     base + QUADSPI_SFAR);
591
592         qspi_writel(q, qspi_readl(q, base + QUADSPI_MCR) |
593                     QUADSPI_MCR_CLR_RXF_MASK | QUADSPI_MCR_CLR_TXF_MASK,
594                     base + QUADSPI_MCR);
595
596         qspi_writel(q, QUADSPI_SPTRCLR_BFPTRC | QUADSPI_SPTRCLR_IPPTRC,
597                     base + QUADSPI_SPTRCLR);
598
599         fsl_qspi_prepare_lut(q, op);
600
601         /*
602          * If we have large chunks of data, we read them through the AHB bus
603          * by accessing the mapped memory. In all other cases we use
604          * IP commands to access the flash.
605          */
606         if (op->data.nbytes > (q->devtype_data->rxfifo - 4) &&
607             op->data.dir == SPI_MEM_DATA_IN) {
608                 fsl_qspi_read_ahb(q, op);
609         } else {
610                 qspi_writel(q, QUADSPI_RBCT_WMRK_MASK |
611                             QUADSPI_RBCT_RXBRD_USEIPS, base + QUADSPI_RBCT);
612
613                 if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT)
614                         fsl_qspi_fill_txfifo(q, op);
615
616                 err = fsl_qspi_do_op(q, op);
617         }
618
619         /* Invalidate the data in the AHB buffer. */
620         fsl_qspi_invalidate(q);
621
622         return err;
623 }
624
625 static int fsl_qspi_adjust_op_size(struct spi_slave *slave,
626                                    struct spi_mem_op *op)
627 {
628         struct fsl_qspi *q = dev_get_priv(slave->dev->parent);
629
630         if (op->data.dir == SPI_MEM_DATA_OUT) {
631                 if (op->data.nbytes > q->devtype_data->txfifo)
632                         op->data.nbytes = q->devtype_data->txfifo;
633         } else {
634                 if (op->data.nbytes > q->devtype_data->ahb_buf_size)
635                         op->data.nbytes = q->devtype_data->ahb_buf_size;
636                 else if (op->data.nbytes > (q->devtype_data->rxfifo - 4))
637                         op->data.nbytes = ALIGN_DOWN(op->data.nbytes, 8);
638         }
639
640         return 0;
641 }
642
643 static int fsl_qspi_default_setup(struct fsl_qspi *q)
644 {
645         void __iomem *base = q->iobase;
646         u32 reg, addr_offset = 0;
647
648         /* Reset the module */
649         qspi_writel(q, QUADSPI_MCR_SWRSTSD_MASK | QUADSPI_MCR_SWRSTHD_MASK,
650                     base + QUADSPI_MCR);
651         udelay(1);
652
653         /* Disable the module */
654         qspi_writel(q, QUADSPI_MCR_MDIS_MASK | QUADSPI_MCR_RESERVED_MASK,
655                     base + QUADSPI_MCR);
656
657         /*
658          * Previous boot stages (BootROM, bootloader) might have used DDR
659          * mode and did not clear the TDH bits. As we currently use SDR mode
660          * only, clear the TDH bits if necessary.
661          */
662         if (needs_tdh_setting(q))
663                 qspi_writel(q, qspi_readl(q, base + QUADSPI_FLSHCR) &
664                             ~QUADSPI_FLSHCR_TDH_MASK,
665                             base + QUADSPI_FLSHCR);
666
667         reg = qspi_readl(q, base + QUADSPI_SMPR);
668         qspi_writel(q, reg & ~(QUADSPI_SMPR_FSDLY_MASK
669                         | QUADSPI_SMPR_FSPHS_MASK
670                         | QUADSPI_SMPR_HSENA_MASK
671                         | QUADSPI_SMPR_DDRSMP_MASK), base + QUADSPI_SMPR);
672
673         /* We only use the buffer3 for AHB read */
674         qspi_writel(q, 0, base + QUADSPI_BUF0IND);
675         qspi_writel(q, 0, base + QUADSPI_BUF1IND);
676         qspi_writel(q, 0, base + QUADSPI_BUF2IND);
677
678         qspi_writel(q, QUADSPI_BFGENCR_SEQID(SEQID_LUT),
679                     q->iobase + QUADSPI_BFGENCR);
680         qspi_writel(q, QUADSPI_RBCT_WMRK_MASK, base + QUADSPI_RBCT);
681         qspi_writel(q, QUADSPI_BUF3CR_ALLMST_MASK |
682                     QUADSPI_BUF3CR_ADATSZ(q->devtype_data->ahb_buf_size / 8),
683                     base + QUADSPI_BUF3CR);
684
685         if (needs_amba_base_offset(q))
686                 addr_offset = q->memmap_phy;
687
688         /*
689          * In HW there can be a maximum of four chips on two buses with
690          * two chip selects on each bus. We use four chip selects in SW
691          * to differentiate between the four chips.
692          * We use ahb_buf_size for each chip and set SFA1AD, SFA2AD, SFB1AD,
693          * SFB2AD accordingly.
694          */
695         qspi_writel(q, q->devtype_data->ahb_buf_size + addr_offset,
696                     base + QUADSPI_SFA1AD);
697         qspi_writel(q, q->devtype_data->ahb_buf_size * 2 + addr_offset,
698                     base + QUADSPI_SFA2AD);
699         qspi_writel(q, q->devtype_data->ahb_buf_size * 3 + addr_offset,
700                     base + QUADSPI_SFB1AD);
701         qspi_writel(q, q->devtype_data->ahb_buf_size * 4 + addr_offset,
702                     base + QUADSPI_SFB2AD);
703
704         q->selected = -1;
705
706         /* Enable the module */
707         qspi_writel(q, QUADSPI_MCR_RESERVED_MASK | QUADSPI_MCR_END_CFG_MASK,
708                     base + QUADSPI_MCR);
709         return 0;
710 }
711
712 static const struct spi_controller_mem_ops fsl_qspi_mem_ops = {
713         .adjust_op_size = fsl_qspi_adjust_op_size,
714         .supports_op = fsl_qspi_supports_op,
715         .exec_op = fsl_qspi_exec_op,
716 };
717
718 static int fsl_qspi_probe(struct udevice *bus)
719 {
720         struct dm_spi_bus *dm_bus = bus->uclass_priv;
721         struct fsl_qspi *q = dev_get_priv(bus);
722         const void *blob = gd->fdt_blob;
723         int node = dev_of_offset(bus);
724         struct fdt_resource res;
725         int ret;
726
727         q->dev = bus;
728         q->devtype_data = (struct fsl_qspi_devtype_data *)
729                            dev_get_driver_data(bus);
730
731         /* find the resources */
732         ret = fdt_get_named_resource(blob, node, "reg", "reg-names", "QuadSPI",
733                                      &res);
734         if (ret) {
735                 dev_err(bus, "Can't get regs base addresses(ret = %d)!\n", ret);
736                 return -ENOMEM;
737         }
738
739         q->iobase = map_physmem(res.start, res.end - res.start, MAP_NOCACHE);
740
741         ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
742                                      "QuadSPI-memory", &res);
743         if (ret) {
744                 dev_err(bus, "Can't get AMBA base addresses(ret = %d)!\n", ret);
745                 return -ENOMEM;
746         }
747
748         q->ahb_addr = map_physmem(res.start, res.end - res.start, MAP_NOCACHE);
749         q->memmap_phy = res.start;
750
751         dm_bus->max_hz = fdtdec_get_int(blob, node, "spi-max-frequency",
752                                         66000000);
753
754         fsl_qspi_default_setup(q);
755
756         return 0;
757 }
758
759 static int fsl_qspi_xfer(struct udevice *dev, unsigned int bitlen,
760                          const void *dout, void *din, unsigned long flags)
761 {
762         return 0;
763 }
764
765 static int fsl_qspi_claim_bus(struct udevice *dev)
766 {
767         return 0;
768 }
769
770 static int fsl_qspi_release_bus(struct udevice *dev)
771 {
772         return 0;
773 }
774
775 static int fsl_qspi_set_speed(struct udevice *bus, uint speed)
776 {
777         return 0;
778 }
779
780 static int fsl_qspi_set_mode(struct udevice *bus, uint mode)
781 {
782         return 0;
783 }
784
785 static const struct dm_spi_ops fsl_qspi_ops = {
786         .claim_bus      = fsl_qspi_claim_bus,
787         .release_bus    = fsl_qspi_release_bus,
788         .xfer           = fsl_qspi_xfer,
789         .set_speed      = fsl_qspi_set_speed,
790         .set_mode       = fsl_qspi_set_mode,
791         .mem_ops        = &fsl_qspi_mem_ops,
792 };
793
794 static const struct udevice_id fsl_qspi_ids[] = {
795         { .compatible = "fsl,vf610-qspi", .data = (ulong)&vybrid_data, },
796         { .compatible = "fsl,imx6sx-qspi", .data = (ulong)&imx6sx_data, },
797         { .compatible = "fsl,imx6ul-qspi", .data = (ulong)&imx6ul_data, },
798         { .compatible = "fsl,imx7d-qspi", .data = (ulong)&imx7d_data, },
799         { .compatible = "fsl,ls1021a-qspi", .data = (ulong)&ls1021a_data, },
800         { .compatible = "fsl,ls1088a-qspi", .data = (ulong)&ls1088a_data, },
801         { .compatible = "fsl,ls2080a-qspi", .data = (ulong)&ls2080a_data, },
802         { }
803 };
804
805 U_BOOT_DRIVER(fsl_qspi) = {
806         .name   = "fsl_qspi",
807         .id     = UCLASS_SPI,
808         .of_match = fsl_qspi_ids,
809         .ops    = &fsl_qspi_ops,
810         .priv_auto_alloc_size = sizeof(struct fsl_qspi),
811         .probe  = fsl_qspi_probe,
812 };