e877d99bb051a312ca82893b233c1011143a7d4b
[oweals/u-boot.git] / drivers / spi / fsl_qspi.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright 2013-2015 Freescale Semiconductor, Inc.
4  *
5  * Freescale Quad Serial Peripheral Interface (QSPI) driver
6  */
7
8 #include <common.h>
9 #include <malloc.h>
10 #include <spi.h>
11 #include <asm/io.h>
12 #include <linux/sizes.h>
13 #include <linux/iopoll.h>
14 #include <dm.h>
15 #include <errno.h>
16 #include <watchdog.h>
17 #include <wait_bit.h>
18 #include "fsl_qspi.h"
19
20 DECLARE_GLOBAL_DATA_PTR;
21
22 #define RX_BUFFER_SIZE          0x80
23 #if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
24         defined(CONFIG_MX6ULL) || defined(CONFIG_MX7D)
25 #define TX_BUFFER_SIZE          0x200
26 #else
27 #define TX_BUFFER_SIZE          0x40
28 #endif
29
30 #define OFFSET_BITS_MASK        GENMASK(23, 0)
31
32 #define FLASH_STATUS_WEL        0x02
33
34 /* SEQID */
35 #define SEQID_WREN              1
36 #define SEQID_FAST_READ         2
37 #define SEQID_RDSR              3
38 #define SEQID_SE                4
39 #define SEQID_CHIP_ERASE        5
40 #define SEQID_PP                6
41 #define SEQID_RDID              7
42 #define SEQID_BE_4K             8
43 #ifdef CONFIG_SPI_FLASH_BAR
44 #define SEQID_BRRD              9
45 #define SEQID_BRWR              10
46 #define SEQID_RDEAR             11
47 #define SEQID_WREAR             12
48 #endif
49 #define SEQID_WRAR              13
50 #define SEQID_RDAR              14
51
52 /* QSPI CMD */
53 #define QSPI_CMD_PP             0x02    /* Page program (up to 256 bytes) */
54 #define QSPI_CMD_RDSR           0x05    /* Read status register */
55 #define QSPI_CMD_WREN           0x06    /* Write enable */
56 #define QSPI_CMD_FAST_READ      0x0b    /* Read data bytes (high frequency) */
57 #define QSPI_CMD_BE_4K          0x20    /* 4K erase */
58 #define QSPI_CMD_CHIP_ERASE     0xc7    /* Erase whole flash chip */
59 #define QSPI_CMD_SE             0xd8    /* Sector erase (usually 64KiB) */
60 #define QSPI_CMD_RDID           0x9f    /* Read JEDEC ID */
61
62 /* Used for Micron, winbond and Macronix flashes */
63 #define QSPI_CMD_WREAR          0xc5    /* EAR register write */
64 #define QSPI_CMD_RDEAR          0xc8    /* EAR reigster read */
65
66 /* Used for Spansion flashes only. */
67 #define QSPI_CMD_BRRD           0x16    /* Bank register read */
68 #define QSPI_CMD_BRWR           0x17    /* Bank register write */
69
70 /* Used for Spansion S25FS-S family flash only. */
71 #define QSPI_CMD_RDAR           0x65    /* Read any device register */
72 #define QSPI_CMD_WRAR           0x71    /* Write any device register */
73
74 /* 4-byte address QSPI CMD - used on Spansion and some Macronix flashes */
75 #define QSPI_CMD_FAST_READ_4B   0x0c    /* Read data bytes (high frequency) */
76 #define QSPI_CMD_PP_4B          0x12    /* Page program (up to 256 bytes) */
77 #define QSPI_CMD_SE_4B          0xdc    /* Sector erase (usually 64KiB) */
78
79 /* fsl_qspi_platdata flags */
80 #define QSPI_FLAG_REGMAP_ENDIAN_BIG     BIT(0)
81
82 /* default SCK frequency, unit: HZ */
83 #define FSL_QSPI_DEFAULT_SCK_FREQ       50000000
84
85 /* QSPI max chipselect signals number */
86 #define FSL_QSPI_MAX_CHIPSELECT_NUM     4
87
88 /**
89  * struct fsl_qspi_platdata - platform data for Freescale QSPI
90  *
91  * @flags: Flags for QSPI QSPI_FLAG_...
92  * @speed_hz: Default SCK frequency
93  * @reg_base: Base address of QSPI registers
94  * @amba_base: Base address of QSPI memory mapping
95  * @amba_total_size: size of QSPI memory mapping
96  * @flash_num: Number of active slave devices
97  * @num_chipselect: Number of QSPI chipselect signals
98  */
99 struct fsl_qspi_platdata {
100         u32 flags;
101         u32 speed_hz;
102         fdt_addr_t reg_base;
103         fdt_addr_t amba_base;
104         fdt_size_t amba_total_size;
105         u32 flash_num;
106         u32 num_chipselect;
107 };
108
109 /**
110  * struct fsl_qspi_priv - private data for Freescale QSPI
111  *
112  * @flags: Flags for QSPI QSPI_FLAG_...
113  * @bus_clk: QSPI input clk frequency
114  * @speed_hz: Default SCK frequency
115  * @cur_seqid: current LUT table sequence id
116  * @sf_addr: flash access offset
117  * @amba_base: Base address of QSPI memory mapping of every CS
118  * @amba_total_size: size of QSPI memory mapping
119  * @cur_amba_base: Base address of QSPI memory mapping of current CS
120  * @flash_num: Number of active slave devices
121  * @num_chipselect: Number of QSPI chipselect signals
122  * @regs: Point to QSPI register structure for I/O access
123  */
124 struct fsl_qspi_priv {
125         u32 flags;
126         u32 bus_clk;
127         u32 speed_hz;
128         u32 cur_seqid;
129         u32 sf_addr;
130         u32 amba_base[FSL_QSPI_MAX_CHIPSELECT_NUM];
131         u32 amba_total_size;
132         u32 cur_amba_base;
133         u32 flash_num;
134         u32 num_chipselect;
135         struct fsl_qspi_regs *regs;
136 };
137
138
139 static u32 qspi_read32(u32 flags, u32 *addr)
140 {
141         return flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ?
142                 in_be32(addr) : in_le32(addr);
143 }
144
145 static void qspi_write32(u32 flags, u32 *addr, u32 val)
146 {
147         flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ?
148                 out_be32(addr, val) : out_le32(addr, val);
149 }
150
151 static inline int is_controller_busy(const struct fsl_qspi_priv *priv)
152 {
153         u32 val;
154         u32 mask = QSPI_SR_BUSY_MASK | QSPI_SR_AHB_ACC_MASK |
155                    QSPI_SR_IP_ACC_MASK;
156
157         if (priv->flags & QSPI_FLAG_REGMAP_ENDIAN_BIG)
158                 mask = (u32)cpu_to_be32(mask);
159
160         return readl_poll_timeout(&priv->regs->sr, val, !(val & mask), 1000);
161 }
162
163 /* QSPI support swapping the flash read/write data
164  * in hardware for LS102xA, but not for VF610 */
165 static inline u32 qspi_endian_xchg(u32 data)
166 {
167 #ifdef CONFIG_VF610
168         return swab32(data);
169 #else
170         return data;
171 #endif
172 }
173
174 static void qspi_set_lut(struct fsl_qspi_priv *priv)
175 {
176         struct fsl_qspi_regs *regs = priv->regs;
177         u32 lut_base;
178
179         /* Unlock the LUT */
180         qspi_write32(priv->flags, &regs->lutkey, LUT_KEY_VALUE);
181         qspi_write32(priv->flags, &regs->lckcr, QSPI_LCKCR_UNLOCK);
182
183         /* Write Enable */
184         lut_base = SEQID_WREN * 4;
185         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_WREN) |
186                 PAD0(LUT_PAD1) | INSTR0(LUT_CMD));
187         qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
188         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
189         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
190
191         /* Fast Read */
192         lut_base = SEQID_FAST_READ * 4;
193 #ifdef CONFIG_SPI_FLASH_BAR
194         qspi_write32(priv->flags, &regs->lut[lut_base],
195                      OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
196                      INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
197                      PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
198 #else
199         if (FSL_QSPI_FLASH_SIZE  <= SZ_16M)
200                 qspi_write32(priv->flags, &regs->lut[lut_base],
201                              OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
202                              INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
203                              PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
204         else
205                 qspi_write32(priv->flags, &regs->lut[lut_base],
206                              OPRND0(QSPI_CMD_FAST_READ_4B) |
207                              PAD0(LUT_PAD1) | INSTR0(LUT_CMD) |
208                              OPRND1(ADDR32BIT) | PAD1(LUT_PAD1) |
209                              INSTR1(LUT_ADDR));
210 #endif
211         qspi_write32(priv->flags, &regs->lut[lut_base + 1],
212                      OPRND0(8) | PAD0(LUT_PAD1) | INSTR0(LUT_DUMMY) |
213                      OPRND1(RX_BUFFER_SIZE) | PAD1(LUT_PAD1) |
214                      INSTR1(LUT_READ));
215         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
216         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
217
218         /* Read Status */
219         lut_base = SEQID_RDSR * 4;
220         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_RDSR) |
221                 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
222                 PAD1(LUT_PAD1) | INSTR1(LUT_READ));
223         qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
224         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
225         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
226
227         /* Erase a sector */
228         lut_base = SEQID_SE * 4;
229 #ifdef CONFIG_SPI_FLASH_BAR
230         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_SE) |
231                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
232                      PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
233 #else
234         if (FSL_QSPI_FLASH_SIZE  <= SZ_16M)
235                 qspi_write32(priv->flags, &regs->lut[lut_base],
236                              OPRND0(QSPI_CMD_SE) | PAD0(LUT_PAD1) |
237                              INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
238                              PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
239         else
240                 qspi_write32(priv->flags, &regs->lut[lut_base],
241                              OPRND0(QSPI_CMD_SE_4B) | PAD0(LUT_PAD1) |
242                              INSTR0(LUT_CMD) | OPRND1(ADDR32BIT) |
243                              PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
244 #endif
245         qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
246         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
247         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
248
249         /* Erase the whole chip */
250         lut_base = SEQID_CHIP_ERASE * 4;
251         qspi_write32(priv->flags, &regs->lut[lut_base],
252                      OPRND0(QSPI_CMD_CHIP_ERASE) |
253                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD));
254         qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
255         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
256         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
257
258         /* Page Program */
259         lut_base = SEQID_PP * 4;
260 #ifdef CONFIG_SPI_FLASH_BAR
261         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_PP) |
262                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
263                      PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
264 #else
265         if (FSL_QSPI_FLASH_SIZE  <= SZ_16M)
266                 qspi_write32(priv->flags, &regs->lut[lut_base],
267                              OPRND0(QSPI_CMD_PP) | PAD0(LUT_PAD1) |
268                              INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
269                              PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
270         else
271                 qspi_write32(priv->flags, &regs->lut[lut_base],
272                              OPRND0(QSPI_CMD_PP_4B) | PAD0(LUT_PAD1) |
273                              INSTR0(LUT_CMD) | OPRND1(ADDR32BIT) |
274                              PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
275 #endif
276 #if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
277         defined(CONFIG_MX6ULL) || defined(CONFIG_MX7D)
278         /*
279          * To MX6SX, OPRND0(TX_BUFFER_SIZE) can not work correctly.
280          * So, Use IDATSZ in IPCR to determine the size and here set 0.
281          */
282         qspi_write32(priv->flags, &regs->lut[lut_base + 1], OPRND0(0) |
283                      PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
284 #else
285         qspi_write32(priv->flags, &regs->lut[lut_base + 1],
286                      OPRND0(TX_BUFFER_SIZE) |
287                      PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
288 #endif
289         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
290         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
291
292         /* READ ID */
293         lut_base = SEQID_RDID * 4;
294         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_RDID) |
295                 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(8) |
296                 PAD1(LUT_PAD1) | INSTR1(LUT_READ));
297         qspi_write32(priv->flags, &regs->lut[lut_base + 1], 0);
298         qspi_write32(priv->flags, &regs->lut[lut_base + 2], 0);
299         qspi_write32(priv->flags, &regs->lut[lut_base + 3], 0);
300
301         /* SUB SECTOR 4K ERASE */
302         lut_base = SEQID_BE_4K * 4;
303         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_BE_4K) |
304                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
305                      PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
306
307 #ifdef CONFIG_SPI_FLASH_BAR
308         /*
309          * BRRD BRWR RDEAR WREAR are all supported, because it is hard to
310          * dynamically check whether to set BRRD BRWR or RDEAR WREAR during
311          * initialization.
312          */
313         lut_base = SEQID_BRRD * 4;
314         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_BRRD) |
315                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
316                      PAD1(LUT_PAD1) | INSTR1(LUT_READ));
317
318         lut_base = SEQID_BRWR * 4;
319         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_BRWR) |
320                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
321                      PAD1(LUT_PAD1) | INSTR1(LUT_WRITE));
322
323         lut_base = SEQID_RDEAR * 4;
324         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_RDEAR) |
325                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
326                      PAD1(LUT_PAD1) | INSTR1(LUT_READ));
327
328         lut_base = SEQID_WREAR * 4;
329         qspi_write32(priv->flags, &regs->lut[lut_base], OPRND0(QSPI_CMD_WREAR) |
330                      PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
331                      PAD1(LUT_PAD1) | INSTR1(LUT_WRITE));
332 #endif
333
334         /*
335          * Read any device register.
336          * Used for Spansion S25FS-S family flash only.
337          */
338         lut_base = SEQID_RDAR * 4;
339         qspi_write32(priv->flags, &regs->lut[lut_base],
340                      OPRND0(QSPI_CMD_RDAR) | PAD0(LUT_PAD1) |
341                      INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
342                      PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
343         qspi_write32(priv->flags, &regs->lut[lut_base + 1],
344                      OPRND0(8) | PAD0(LUT_PAD1) | INSTR0(LUT_DUMMY) |
345                      OPRND1(1) | PAD1(LUT_PAD1) |
346                      INSTR1(LUT_READ));
347
348         /*
349          * Write any device register.
350          * Used for Spansion S25FS-S family flash only.
351          */
352         lut_base = SEQID_WRAR * 4;
353         qspi_write32(priv->flags, &regs->lut[lut_base],
354                      OPRND0(QSPI_CMD_WRAR) | PAD0(LUT_PAD1) |
355                      INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
356                      PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
357         qspi_write32(priv->flags, &regs->lut[lut_base + 1],
358                      OPRND0(1) | PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
359
360         /* Lock the LUT */
361         qspi_write32(priv->flags, &regs->lutkey, LUT_KEY_VALUE);
362         qspi_write32(priv->flags, &regs->lckcr, QSPI_LCKCR_LOCK);
363 }
364
365 #if defined(CONFIG_SYS_FSL_QSPI_AHB)
366 /*
367  * If we have changed the content of the flash by writing or erasing,
368  * we need to invalidate the AHB buffer. If we do not do so, we may read out
369  * the wrong data. The spec tells us reset the AHB domain and Serial Flash
370  * domain at the same time.
371  */
372 static inline void qspi_ahb_invalid(struct fsl_qspi_priv *priv)
373 {
374         struct fsl_qspi_regs *regs = priv->regs;
375         u32 reg;
376
377         reg = qspi_read32(priv->flags, &regs->mcr);
378         reg |= QSPI_MCR_SWRSTHD_MASK | QSPI_MCR_SWRSTSD_MASK;
379         qspi_write32(priv->flags, &regs->mcr, reg);
380
381         /*
382          * The minimum delay : 1 AHB + 2 SFCK clocks.
383          * Delay 1 us is enough.
384          */
385         udelay(1);
386
387         reg &= ~(QSPI_MCR_SWRSTHD_MASK | QSPI_MCR_SWRSTSD_MASK);
388         qspi_write32(priv->flags, &regs->mcr, reg);
389 }
390
391 /* Read out the data from the AHB buffer. */
392 static inline void qspi_ahb_read(struct fsl_qspi_priv *priv, u8 *rxbuf, int len)
393 {
394         struct fsl_qspi_regs *regs = priv->regs;
395         u32 mcr_reg;
396         void *rx_addr;
397
398         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
399
400         qspi_write32(priv->flags, &regs->mcr,
401                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
402                      mcr_reg);
403
404         rx_addr = (void *)(uintptr_t)(priv->cur_amba_base + priv->sf_addr);
405         /* Read out the data directly from the AHB buffer. */
406         memcpy(rxbuf, rx_addr, len);
407
408         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
409 }
410
411 static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv)
412 {
413         u32 reg, reg2;
414         struct fsl_qspi_regs *regs = priv->regs;
415
416         reg = qspi_read32(priv->flags, &regs->mcr);
417         /* Disable the module */
418         qspi_write32(priv->flags, &regs->mcr, reg | QSPI_MCR_MDIS_MASK);
419
420         /* Set the Sampling Register for DDR */
421         reg2 = qspi_read32(priv->flags, &regs->smpr);
422         reg2 &= ~QSPI_SMPR_DDRSMP_MASK;
423         reg2 |= (2 << QSPI_SMPR_DDRSMP_SHIFT);
424         qspi_write32(priv->flags, &regs->smpr, reg2);
425
426         /* Enable the module again (enable the DDR too) */
427         reg |= QSPI_MCR_DDR_EN_MASK;
428         /* Enable bit 29 for imx6sx */
429         reg |= BIT(29);
430
431         qspi_write32(priv->flags, &regs->mcr, reg);
432
433         /* Enable the TDH to 1 for some platforms like imx6ul, imx7d, etc
434          * These two bits are reserved on other platforms
435          */
436         reg = qspi_read32(priv->flags, &regs->flshcr);
437         reg &= ~(BIT(17));
438         reg |= BIT(16);
439         qspi_write32(priv->flags, &regs->flshcr, reg);
440 }
441
442 /*
443  * There are two different ways to read out the data from the flash:
444  *  the "IP Command Read" and the "AHB Command Read".
445  *
446  * The IC guy suggests we use the "AHB Command Read" which is faster
447  * then the "IP Command Read". (What's more is that there is a bug in
448  * the "IP Command Read" in the Vybrid.)
449  *
450  * After we set up the registers for the "AHB Command Read", we can use
451  * the memcpy to read the data directly. A "missed" access to the buffer
452  * causes the controller to clear the buffer, and use the sequence pointed
453  * by the QUADSPI_BFGENCR[SEQID] to initiate a read from the flash.
454  */
455 static void qspi_init_ahb_read(struct fsl_qspi_priv *priv)
456 {
457         struct fsl_qspi_regs *regs = priv->regs;
458
459         /* AHB configuration for access buffer 0/1/2 .*/
460         qspi_write32(priv->flags, &regs->buf0cr, QSPI_BUFXCR_INVALID_MSTRID);
461         qspi_write32(priv->flags, &regs->buf1cr, QSPI_BUFXCR_INVALID_MSTRID);
462         qspi_write32(priv->flags, &regs->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
463         qspi_write32(priv->flags, &regs->buf3cr, QSPI_BUF3CR_ALLMST_MASK |
464                      (0x80 << QSPI_BUF3CR_ADATSZ_SHIFT));
465
466         /* We only use the buffer3 */
467         qspi_write32(priv->flags, &regs->buf0ind, 0);
468         qspi_write32(priv->flags, &regs->buf1ind, 0);
469         qspi_write32(priv->flags, &regs->buf2ind, 0);
470
471         /*
472          * Set the default lut sequence for AHB Read.
473          * Parallel mode is disabled.
474          */
475         qspi_write32(priv->flags, &regs->bfgencr,
476                      SEQID_FAST_READ << QSPI_BFGENCR_SEQID_SHIFT);
477
478         /*Enable DDR Mode*/
479         qspi_enable_ddr_mode(priv);
480 }
481 #endif
482
483 #ifdef CONFIG_SPI_FLASH_BAR
484 /* Bank register read/write, EAR register read/write */
485 static void qspi_op_rdbank(struct fsl_qspi_priv *priv, u8 *rxbuf, u32 len)
486 {
487         struct fsl_qspi_regs *regs = priv->regs;
488         u32 reg, mcr_reg, data, seqid;
489
490         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
491         qspi_write32(priv->flags, &regs->mcr,
492                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
493                      mcr_reg);
494         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
495
496         qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
497
498         if (priv->cur_seqid == QSPI_CMD_BRRD)
499                 seqid = SEQID_BRRD;
500         else
501                 seqid = SEQID_RDEAR;
502
503         qspi_write32(priv->flags, &regs->ipcr,
504                      (seqid << QSPI_IPCR_SEQID_SHIFT) | len);
505
506         /* Wait previous command complete */
507         while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
508                 ;
509
510         while (1) {
511                 WATCHDOG_RESET();
512
513                 reg = qspi_read32(priv->flags, &regs->rbsr);
514                 if (reg & QSPI_RBSR_RDBFL_MASK) {
515                         data = qspi_read32(priv->flags, &regs->rbdr[0]);
516                         data = qspi_endian_xchg(data);
517                         memcpy(rxbuf, &data, len);
518                         qspi_write32(priv->flags, &regs->mcr,
519                                      qspi_read32(priv->flags, &regs->mcr) |
520                                      QSPI_MCR_CLR_RXF_MASK);
521                         break;
522                 }
523         }
524
525         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
526 }
527 #endif
528
529 static void qspi_op_rdid(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
530 {
531         struct fsl_qspi_regs *regs = priv->regs;
532         u32 mcr_reg, rbsr_reg, data, size;
533         int i;
534
535         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
536         qspi_write32(priv->flags, &regs->mcr,
537                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
538                      mcr_reg);
539         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
540
541         qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
542
543         qspi_write32(priv->flags, &regs->ipcr,
544                      (SEQID_RDID << QSPI_IPCR_SEQID_SHIFT) | 0);
545         while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
546                 ;
547
548         i = 0;
549         while ((RX_BUFFER_SIZE >= len) && (len > 0)) {
550                 WATCHDOG_RESET();
551
552                 rbsr_reg = qspi_read32(priv->flags, &regs->rbsr);
553                 if (rbsr_reg & QSPI_RBSR_RDBFL_MASK) {
554                         data = qspi_read32(priv->flags, &regs->rbdr[i]);
555                         data = qspi_endian_xchg(data);
556                         size = (len < 4) ? len : 4;
557                         memcpy(rxbuf, &data, size);
558                         len -= size;
559                         rxbuf++;
560                         i++;
561                 }
562         }
563
564         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
565 }
566
567 /* If not use AHB read, read data from ip interface */
568 static void qspi_op_read(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
569 {
570         struct fsl_qspi_regs *regs = priv->regs;
571         u32 mcr_reg, data;
572         int i, size;
573         u32 to_or_from;
574         u32 seqid;
575
576         if (priv->cur_seqid == QSPI_CMD_RDAR)
577                 seqid = SEQID_RDAR;
578         else
579                 seqid = SEQID_FAST_READ;
580
581         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
582         qspi_write32(priv->flags, &regs->mcr,
583                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
584                      mcr_reg);
585         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
586
587         to_or_from = priv->sf_addr + priv->cur_amba_base;
588
589         while (len > 0) {
590                 WATCHDOG_RESET();
591
592                 qspi_write32(priv->flags, &regs->sfar, to_or_from);
593
594                 size = (len > RX_BUFFER_SIZE) ?
595                         RX_BUFFER_SIZE : len;
596
597                 qspi_write32(priv->flags, &regs->ipcr,
598                              (seqid << QSPI_IPCR_SEQID_SHIFT) |
599                              size);
600                 while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
601                         ;
602
603                 to_or_from += size;
604                 len -= size;
605
606                 i = 0;
607                 while ((RX_BUFFER_SIZE >= size) && (size > 0)) {
608                         data = qspi_read32(priv->flags, &regs->rbdr[i]);
609                         data = qspi_endian_xchg(data);
610                         if (size < 4)
611                                 memcpy(rxbuf, &data, size);
612                         else
613                                 memcpy(rxbuf, &data, 4);
614                         rxbuf++;
615                         size -= 4;
616                         i++;
617                 }
618                 qspi_write32(priv->flags, &regs->mcr,
619                              qspi_read32(priv->flags, &regs->mcr) |
620                              QSPI_MCR_CLR_RXF_MASK);
621         }
622
623         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
624 }
625
626 static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
627 {
628         struct fsl_qspi_regs *regs = priv->regs;
629         u32 mcr_reg, data, reg, status_reg, seqid;
630         int i, size, tx_size;
631         u32 to_or_from = 0;
632
633         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
634         qspi_write32(priv->flags, &regs->mcr,
635                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
636                      mcr_reg);
637         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
638
639         status_reg = 0;
640         while ((status_reg & FLASH_STATUS_WEL) != FLASH_STATUS_WEL) {
641                 WATCHDOG_RESET();
642
643                 qspi_write32(priv->flags, &regs->ipcr,
644                              (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
645                 while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
646                         ;
647
648                 qspi_write32(priv->flags, &regs->ipcr,
649                              (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 1);
650                 while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
651                         ;
652
653                 reg = qspi_read32(priv->flags, &regs->rbsr);
654                 if (reg & QSPI_RBSR_RDBFL_MASK) {
655                         status_reg = qspi_read32(priv->flags, &regs->rbdr[0]);
656                         status_reg = qspi_endian_xchg(status_reg);
657                 }
658                 qspi_write32(priv->flags, &regs->mcr,
659                              qspi_read32(priv->flags, &regs->mcr) |
660                              QSPI_MCR_CLR_RXF_MASK);
661         }
662
663         /* Default is page programming */
664         seqid = SEQID_PP;
665         if (priv->cur_seqid == QSPI_CMD_WRAR)
666                 seqid = SEQID_WRAR;
667 #ifdef CONFIG_SPI_FLASH_BAR
668         if (priv->cur_seqid == QSPI_CMD_BRWR)
669                 seqid = SEQID_BRWR;
670         else if (priv->cur_seqid == QSPI_CMD_WREAR)
671                 seqid = SEQID_WREAR;
672 #endif
673
674         to_or_from = priv->sf_addr + priv->cur_amba_base;
675
676         qspi_write32(priv->flags, &regs->sfar, to_or_from);
677
678         tx_size = (len > TX_BUFFER_SIZE) ?
679                 TX_BUFFER_SIZE : len;
680
681         size = tx_size / 16;
682         /*
683          * There must be atleast 128bit data
684          * available in TX FIFO for any pop operation
685          */
686         if (tx_size % 16)
687                 size++;
688         for (i = 0; i < size * 4; i++) {
689                 memcpy(&data, txbuf, 4);
690                 data = qspi_endian_xchg(data);
691                 qspi_write32(priv->flags, &regs->tbdr, data);
692                 txbuf += 4;
693         }
694
695         qspi_write32(priv->flags, &regs->ipcr,
696                      (seqid << QSPI_IPCR_SEQID_SHIFT) | tx_size);
697         while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
698                 ;
699
700         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
701 }
702
703 static void qspi_op_rdsr(struct fsl_qspi_priv *priv, void *rxbuf, u32 len)
704 {
705         struct fsl_qspi_regs *regs = priv->regs;
706         u32 mcr_reg, reg, data;
707
708         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
709         qspi_write32(priv->flags, &regs->mcr,
710                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
711                      mcr_reg);
712         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
713
714         qspi_write32(priv->flags, &regs->sfar, priv->cur_amba_base);
715
716         qspi_write32(priv->flags, &regs->ipcr,
717                      (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 0);
718         while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
719                 ;
720
721         while (1) {
722                 WATCHDOG_RESET();
723
724                 reg = qspi_read32(priv->flags, &regs->rbsr);
725                 if (reg & QSPI_RBSR_RDBFL_MASK) {
726                         data = qspi_read32(priv->flags, &regs->rbdr[0]);
727                         data = qspi_endian_xchg(data);
728                         memcpy(rxbuf, &data, len);
729                         qspi_write32(priv->flags, &regs->mcr,
730                                      qspi_read32(priv->flags, &regs->mcr) |
731                                      QSPI_MCR_CLR_RXF_MASK);
732                         break;
733                 }
734         }
735
736         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
737 }
738
739 static void qspi_op_erase(struct fsl_qspi_priv *priv)
740 {
741         struct fsl_qspi_regs *regs = priv->regs;
742         u32 mcr_reg;
743         u32 to_or_from = 0;
744
745         mcr_reg = qspi_read32(priv->flags, &regs->mcr);
746         qspi_write32(priv->flags, &regs->mcr,
747                      QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
748                      mcr_reg);
749         qspi_write32(priv->flags, &regs->rbct, QSPI_RBCT_RXBRD_USEIPS);
750
751         to_or_from = priv->sf_addr + priv->cur_amba_base;
752         qspi_write32(priv->flags, &regs->sfar, to_or_from);
753
754         qspi_write32(priv->flags, &regs->ipcr,
755                      (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
756         while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
757                 ;
758
759         if (priv->cur_seqid == QSPI_CMD_SE) {
760                 qspi_write32(priv->flags, &regs->ipcr,
761                              (SEQID_SE << QSPI_IPCR_SEQID_SHIFT) | 0);
762         } else if (priv->cur_seqid == QSPI_CMD_BE_4K) {
763                 qspi_write32(priv->flags, &regs->ipcr,
764                              (SEQID_BE_4K << QSPI_IPCR_SEQID_SHIFT) | 0);
765         }
766         while (qspi_read32(priv->flags, &regs->sr) & QSPI_SR_BUSY_MASK)
767                 ;
768
769         qspi_write32(priv->flags, &regs->mcr, mcr_reg);
770 }
771
772 int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int bitlen,
773                 const void *dout, void *din, unsigned long flags)
774 {
775         u32 bytes = DIV_ROUND_UP(bitlen, 8);
776         static u32 wr_sfaddr;
777         u32 txbuf;
778
779         WATCHDOG_RESET();
780
781         if (dout) {
782                 if (flags & SPI_XFER_BEGIN) {
783                         priv->cur_seqid = *(u8 *)dout;
784                         memcpy(&txbuf, dout, 4);
785                 }
786
787                 if (flags == SPI_XFER_END) {
788                         priv->sf_addr = wr_sfaddr;
789                         qspi_op_write(priv, (u8 *)dout, bytes);
790                         return 0;
791                 }
792
793                 if (priv->cur_seqid == QSPI_CMD_FAST_READ ||
794                     priv->cur_seqid == QSPI_CMD_RDAR) {
795                         priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
796                 } else if ((priv->cur_seqid == QSPI_CMD_SE) ||
797                            (priv->cur_seqid == QSPI_CMD_BE_4K)) {
798                         priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
799                         qspi_op_erase(priv);
800                 } else if (priv->cur_seqid == QSPI_CMD_PP ||
801                            priv->cur_seqid == QSPI_CMD_WRAR) {
802                         wr_sfaddr = swab32(txbuf) & OFFSET_BITS_MASK;
803                 } else if ((priv->cur_seqid == QSPI_CMD_BRWR) ||
804                          (priv->cur_seqid == QSPI_CMD_WREAR)) {
805 #ifdef CONFIG_SPI_FLASH_BAR
806                         wr_sfaddr = 0;
807 #endif
808                 }
809         }
810
811         if (din) {
812                 if (priv->cur_seqid == QSPI_CMD_FAST_READ) {
813 #ifdef CONFIG_SYS_FSL_QSPI_AHB
814                         qspi_ahb_read(priv, din, bytes);
815 #else
816                         qspi_op_read(priv, din, bytes);
817 #endif
818                 } else if (priv->cur_seqid == QSPI_CMD_RDAR) {
819                         qspi_op_read(priv, din, bytes);
820                 } else if (priv->cur_seqid == QSPI_CMD_RDID)
821                         qspi_op_rdid(priv, din, bytes);
822                 else if (priv->cur_seqid == QSPI_CMD_RDSR)
823                         qspi_op_rdsr(priv, din, bytes);
824 #ifdef CONFIG_SPI_FLASH_BAR
825                 else if ((priv->cur_seqid == QSPI_CMD_BRRD) ||
826                          (priv->cur_seqid == QSPI_CMD_RDEAR)) {
827                         priv->sf_addr = 0;
828                         qspi_op_rdbank(priv, din, bytes);
829                 }
830 #endif
831         }
832
833 #ifdef CONFIG_SYS_FSL_QSPI_AHB
834         if ((priv->cur_seqid == QSPI_CMD_SE) ||
835             (priv->cur_seqid == QSPI_CMD_PP) ||
836             (priv->cur_seqid == QSPI_CMD_BE_4K) ||
837             (priv->cur_seqid == QSPI_CMD_WREAR) ||
838             (priv->cur_seqid == QSPI_CMD_BRWR))
839                 qspi_ahb_invalid(priv);
840 #endif
841
842         return 0;
843 }
844
845 void qspi_module_disable(struct fsl_qspi_priv *priv, u8 disable)
846 {
847         u32 mcr_val;
848
849         mcr_val = qspi_read32(priv->flags, &priv->regs->mcr);
850         if (disable)
851                 mcr_val |= QSPI_MCR_MDIS_MASK;
852         else
853                 mcr_val &= ~QSPI_MCR_MDIS_MASK;
854         qspi_write32(priv->flags, &priv->regs->mcr, mcr_val);
855 }
856
857 void qspi_cfg_smpr(struct fsl_qspi_priv *priv, u32 clear_bits, u32 set_bits)
858 {
859         u32 smpr_val;
860
861         smpr_val = qspi_read32(priv->flags, &priv->regs->smpr);
862         smpr_val &= ~clear_bits;
863         smpr_val |= set_bits;
864         qspi_write32(priv->flags, &priv->regs->smpr, smpr_val);
865 }
866
867 static int fsl_qspi_child_pre_probe(struct udevice *dev)
868 {
869         struct spi_slave *slave = dev_get_parent_priv(dev);
870
871         slave->max_write_size = TX_BUFFER_SIZE;
872
873         return 0;
874 }
875
876 static int fsl_qspi_probe(struct udevice *bus)
877 {
878         u32 amba_size_per_chip;
879         struct fsl_qspi_platdata *plat = dev_get_platdata(bus);
880         struct fsl_qspi_priv *priv = dev_get_priv(bus);
881         struct dm_spi_bus *dm_spi_bus;
882         int i, ret;
883
884         dm_spi_bus = bus->uclass_priv;
885
886         dm_spi_bus->max_hz = plat->speed_hz;
887
888         priv->regs = (struct fsl_qspi_regs *)(uintptr_t)plat->reg_base;
889         priv->flags = plat->flags;
890
891         priv->speed_hz = plat->speed_hz;
892         /*
893          * QSPI SFADR width is 32bits, the max dest addr is 4GB-1.
894          * AMBA memory zone should be located on the 0~4GB space
895          * even on a 64bits cpu.
896          */
897         priv->amba_base[0] = (u32)plat->amba_base;
898         priv->amba_total_size = (u32)plat->amba_total_size;
899         priv->flash_num = plat->flash_num;
900         priv->num_chipselect = plat->num_chipselect;
901
902         /* make sure controller is not busy anywhere */
903         ret = is_controller_busy(priv);
904
905         if (ret) {
906                 debug("ERROR : The controller is busy\n");
907                 return ret;
908         }
909
910         qspi_write32(priv->flags, &priv->regs->mcr,
911                      QSPI_MCR_RESERVED_MASK | QSPI_MCR_MDIS_MASK |
912                      QSPI_MCR_END_CFD_LE);
913
914         qspi_cfg_smpr(priv, ~(QSPI_SMPR_FSDLY_MASK | QSPI_SMPR_DDRSMP_MASK |
915                 QSPI_SMPR_FSPHS_MASK | QSPI_SMPR_HSENA_MASK), 0);
916
917         /*
918          * Assign AMBA memory zone for every chipselect
919          * QuadSPI has two channels, every channel has two chipselects.
920          * If the property 'num-cs' in dts is 2, the AMBA memory will be divided
921          * into two parts and assign to every channel. This indicate that every
922          * channel only has one valid chipselect.
923          * If the property 'num-cs' in dts is 4, the AMBA memory will be divided
924          * into four parts and assign to every chipselect.
925          * Every channel will has two valid chipselects.
926          */
927         amba_size_per_chip = priv->amba_total_size >>
928                              (priv->num_chipselect >> 1);
929         for (i = 1 ; i < priv->num_chipselect ; i++)
930                 priv->amba_base[i] =
931                         amba_size_per_chip + priv->amba_base[i - 1];
932
933         /*
934          * Any read access to non-implemented addresses will provide
935          * undefined results.
936          *
937          * In case single die flash devices, TOP_ADDR_MEMA2 and
938          * TOP_ADDR_MEMB2 should be initialized/programmed to
939          * TOP_ADDR_MEMA1 and TOP_ADDR_MEMB1 respectively - in effect,
940          * setting the size of these devices to 0.  This would ensure
941          * that the complete memory map is assigned to only one flash device.
942          */
943         qspi_write32(priv->flags, &priv->regs->sfa1ad,
944                      priv->amba_base[0] + amba_size_per_chip);
945         switch (priv->num_chipselect) {
946         case 1:
947                 break;
948         case 2:
949                 qspi_write32(priv->flags, &priv->regs->sfa2ad,
950                              priv->amba_base[1]);
951                 qspi_write32(priv->flags, &priv->regs->sfb1ad,
952                              priv->amba_base[1] + amba_size_per_chip);
953                 qspi_write32(priv->flags, &priv->regs->sfb2ad,
954                              priv->amba_base[1] + amba_size_per_chip);
955                 break;
956         case 4:
957                 qspi_write32(priv->flags, &priv->regs->sfa2ad,
958                              priv->amba_base[2]);
959                 qspi_write32(priv->flags, &priv->regs->sfb1ad,
960                              priv->amba_base[3]);
961                 qspi_write32(priv->flags, &priv->regs->sfb2ad,
962                              priv->amba_base[3] + amba_size_per_chip);
963                 break;
964         default:
965                 debug("Error: Unsupported chipselect number %u!\n",
966                       priv->num_chipselect);
967                 qspi_module_disable(priv, 1);
968                 return -EINVAL;
969         }
970
971         qspi_set_lut(priv);
972
973 #ifdef CONFIG_SYS_FSL_QSPI_AHB
974         qspi_init_ahb_read(priv);
975 #endif
976
977         qspi_module_disable(priv, 0);
978
979         return 0;
980 }
981
982 static int fsl_qspi_ofdata_to_platdata(struct udevice *bus)
983 {
984         struct fdt_resource res_regs, res_mem;
985         struct fsl_qspi_platdata *plat = bus->platdata;
986         const void *blob = gd->fdt_blob;
987         int node = dev_of_offset(bus);
988         int ret, flash_num = 0, subnode;
989
990         if (fdtdec_get_bool(blob, node, "big-endian"))
991                 plat->flags |= QSPI_FLAG_REGMAP_ENDIAN_BIG;
992
993         ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
994                                      "QuadSPI", &res_regs);
995         if (ret) {
996                 debug("Error: can't get regs base addresses(ret = %d)!\n", ret);
997                 return -ENOMEM;
998         }
999         ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
1000                                      "QuadSPI-memory", &res_mem);
1001         if (ret) {
1002                 debug("Error: can't get AMBA base addresses(ret = %d)!\n", ret);
1003                 return -ENOMEM;
1004         }
1005
1006         /* Count flash numbers */
1007         fdt_for_each_subnode(subnode, blob, node)
1008                 ++flash_num;
1009
1010         if (flash_num == 0) {
1011                 debug("Error: Missing flashes!\n");
1012                 return -ENODEV;
1013         }
1014
1015         plat->speed_hz = fdtdec_get_int(blob, node, "spi-max-frequency",
1016                                         FSL_QSPI_DEFAULT_SCK_FREQ);
1017         plat->num_chipselect = fdtdec_get_int(blob, node, "num-cs",
1018                                               FSL_QSPI_MAX_CHIPSELECT_NUM);
1019
1020         plat->reg_base = res_regs.start;
1021         plat->amba_base = res_mem.start;
1022         plat->amba_total_size = res_mem.end - res_mem.start + 1;
1023         plat->flash_num = flash_num;
1024
1025         debug("%s: regs=<0x%llx> <0x%llx, 0x%llx>, max-frequency=%d, endianess=%s\n",
1026               __func__,
1027               (u64)plat->reg_base,
1028               (u64)plat->amba_base,
1029               (u64)plat->amba_total_size,
1030               plat->speed_hz,
1031               plat->flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ? "be" : "le"
1032               );
1033
1034         return 0;
1035 }
1036
1037 static int fsl_qspi_xfer(struct udevice *dev, unsigned int bitlen,
1038                 const void *dout, void *din, unsigned long flags)
1039 {
1040         struct fsl_qspi_priv *priv;
1041         struct udevice *bus;
1042
1043         bus = dev->parent;
1044         priv = dev_get_priv(bus);
1045
1046         return qspi_xfer(priv, bitlen, dout, din, flags);
1047 }
1048
1049 static int fsl_qspi_claim_bus(struct udevice *dev)
1050 {
1051         struct fsl_qspi_priv *priv;
1052         struct udevice *bus;
1053         struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
1054         int ret;
1055
1056         bus = dev->parent;
1057         priv = dev_get_priv(bus);
1058
1059         /* make sure controller is not busy anywhere */
1060         ret = is_controller_busy(priv);
1061
1062         if (ret) {
1063                 debug("ERROR : The controller is busy\n");
1064                 return ret;
1065         }
1066
1067         priv->cur_amba_base = priv->amba_base[slave_plat->cs];
1068
1069         qspi_module_disable(priv, 0);
1070
1071         return 0;
1072 }
1073
1074 static int fsl_qspi_release_bus(struct udevice *dev)
1075 {
1076         struct fsl_qspi_priv *priv;
1077         struct udevice *bus;
1078
1079         bus = dev->parent;
1080         priv = dev_get_priv(bus);
1081
1082         qspi_module_disable(priv, 1);
1083
1084         return 0;
1085 }
1086
1087 static int fsl_qspi_set_speed(struct udevice *bus, uint speed)
1088 {
1089         /* Nothing to do */
1090         return 0;
1091 }
1092
1093 static int fsl_qspi_set_mode(struct udevice *bus, uint mode)
1094 {
1095         /* Nothing to do */
1096         return 0;
1097 }
1098
1099 static const struct dm_spi_ops fsl_qspi_ops = {
1100         .claim_bus      = fsl_qspi_claim_bus,
1101         .release_bus    = fsl_qspi_release_bus,
1102         .xfer           = fsl_qspi_xfer,
1103         .set_speed      = fsl_qspi_set_speed,
1104         .set_mode       = fsl_qspi_set_mode,
1105 };
1106
1107 static const struct udevice_id fsl_qspi_ids[] = {
1108         { .compatible = "fsl,vf610-qspi" },
1109         { .compatible = "fsl,imx6sx-qspi" },
1110         { .compatible = "fsl,imx6ul-qspi" },
1111         { .compatible = "fsl,imx7d-qspi" },
1112         { }
1113 };
1114
1115 U_BOOT_DRIVER(fsl_qspi) = {
1116         .name   = "fsl_qspi",
1117         .id     = UCLASS_SPI,
1118         .of_match = fsl_qspi_ids,
1119         .ops    = &fsl_qspi_ops,
1120         .ofdata_to_platdata = fsl_qspi_ofdata_to_platdata,
1121         .platdata_auto_alloc_size = sizeof(struct fsl_qspi_platdata),
1122         .priv_auto_alloc_size = sizeof(struct fsl_qspi_priv),
1123         .probe  = fsl_qspi_probe,
1124         .child_pre_probe = fsl_qspi_child_pre_probe,
1125 };