1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2013-2015 Freescale Semiconductor, Inc.
5 * Freescale Quad Serial Peripheral Interface (QSPI) driver
12 #include <linux/sizes.h>
19 DECLARE_GLOBAL_DATA_PTR;
21 #define RX_BUFFER_SIZE 0x80
22 #if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
23 defined(CONFIG_MX6ULL) || defined(CONFIG_MX7D)
24 #define TX_BUFFER_SIZE 0x200
26 #define TX_BUFFER_SIZE 0x40
29 #define OFFSET_BITS_MASK GENMASK(23, 0)
31 #define FLASH_STATUS_WEL 0x02
35 #define SEQID_FAST_READ 2
38 #define SEQID_CHIP_ERASE 5
42 #ifdef CONFIG_SPI_FLASH_BAR
45 #define SEQID_RDEAR 11
46 #define SEQID_WREAR 12
52 #define QSPI_CMD_PP 0x02 /* Page program (up to 256 bytes) */
53 #define QSPI_CMD_RDSR 0x05 /* Read status register */
54 #define QSPI_CMD_WREN 0x06 /* Write enable */
55 #define QSPI_CMD_FAST_READ 0x0b /* Read data bytes (high frequency) */
56 #define QSPI_CMD_BE_4K 0x20 /* 4K erase */
57 #define QSPI_CMD_CHIP_ERASE 0xc7 /* Erase whole flash chip */
58 #define QSPI_CMD_SE 0xd8 /* Sector erase (usually 64KiB) */
59 #define QSPI_CMD_RDID 0x9f /* Read JEDEC ID */
61 /* Used for Micron, winbond and Macronix flashes */
62 #define QSPI_CMD_WREAR 0xc5 /* EAR register write */
63 #define QSPI_CMD_RDEAR 0xc8 /* EAR reigster read */
65 /* Used for Spansion flashes only. */
66 #define QSPI_CMD_BRRD 0x16 /* Bank register read */
67 #define QSPI_CMD_BRWR 0x17 /* Bank register write */
69 /* Used for Spansion S25FS-S family flash only. */
70 #define QSPI_CMD_RDAR 0x65 /* Read any device register */
71 #define QSPI_CMD_WRAR 0x71 /* Write any device register */
73 /* 4-byte address QSPI CMD - used on Spansion and some Macronix flashes */
74 #define QSPI_CMD_FAST_READ_4B 0x0c /* Read data bytes (high frequency) */
75 #define QSPI_CMD_PP_4B 0x12 /* Page program (up to 256 bytes) */
76 #define QSPI_CMD_SE_4B 0xdc /* Sector erase (usually 64KiB) */
78 /* fsl_qspi_platdata flags */
79 #define QSPI_FLAG_REGMAP_ENDIAN_BIG BIT(0)
81 /* default SCK frequency, unit: HZ */
82 #define FSL_QSPI_DEFAULT_SCK_FREQ 50000000
84 /* QSPI max chipselect signals number */
85 #define FSL_QSPI_MAX_CHIPSELECT_NUM 4
88 * struct fsl_qspi_platdata - platform data for Freescale QSPI
90 * @flags: Flags for QSPI QSPI_FLAG_...
91 * @speed_hz: Default SCK frequency
92 * @reg_base: Base address of QSPI registers
93 * @amba_base: Base address of QSPI memory mapping
94 * @amba_total_size: size of QSPI memory mapping
95 * @flash_num: Number of active slave devices
96 * @num_chipselect: Number of QSPI chipselect signals
98 struct fsl_qspi_platdata {
102 fdt_addr_t amba_base;
103 fdt_size_t amba_total_size;
109 * struct fsl_qspi_priv - private data for Freescale QSPI
111 * @flags: Flags for QSPI QSPI_FLAG_...
112 * @bus_clk: QSPI input clk frequency
113 * @speed_hz: Default SCK frequency
114 * @cur_seqid: current LUT table sequence id
115 * @sf_addr: flash access offset
116 * @amba_base: Base address of QSPI memory mapping of every CS
117 * @amba_total_size: size of QSPI memory mapping
118 * @cur_amba_base: Base address of QSPI memory mapping of current CS
119 * @flash_num: Number of active slave devices
120 * @num_chipselect: Number of QSPI chipselect signals
121 * @regs: Point to QSPI register structure for I/O access
123 struct fsl_qspi_priv {
129 u32 amba_base[FSL_QSPI_MAX_CHIPSELECT_NUM];
134 struct fsl_qspi_regs *regs;
138 static u32 qspi_read32(u32 flags, u32 *addr)
140 return flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ?
141 in_be32(addr) : in_le32(addr);
144 static void qspi_write32(u32 flags, u32 *addr, u32 val)
146 flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ?
147 out_be32(addr, val) : out_le32(addr, val);
150 static inline int is_controller_busy(const struct fsl_qspi_priv *priv)
153 const u32 mask = QSPI_SR_BUSY_MASK | QSPI_SR_AHB_ACC_MASK |
155 unsigned long timeout = timer_get_us() + 1000;
158 val = qspi_read32(priv->flags, &priv->regs->sr);
160 if ((~val & mask) == mask)
163 if (timer_get_us() > timeout )
168 /* QSPI support swapping the flash read/write data
169 * in hardware for LS102xA, but not for VF610 */
170 static inline u32 qspi_endian_xchg(u32 data)
179 static void qspi_set_lut(struct fsl_qspi_priv *priv)
181 struct fsl_qspi_regs *regs = priv->regs;
185 qspi_write32(priv->flags, ®s->lutkey, LUT_KEY_VALUE);
186 qspi_write32(priv->flags, ®s->lckcr, QSPI_LCKCR_UNLOCK);
189 lut_base = SEQID_WREN * 4;
190 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_WREN) |
191 PAD0(LUT_PAD1) | INSTR0(LUT_CMD));
192 qspi_write32(priv->flags, ®s->lut[lut_base + 1], 0);
193 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
194 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
197 lut_base = SEQID_FAST_READ * 4;
198 #ifdef CONFIG_SPI_FLASH_BAR
199 qspi_write32(priv->flags, ®s->lut[lut_base],
200 OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
201 INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
202 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
204 if (FSL_QSPI_FLASH_SIZE <= SZ_16M)
205 qspi_write32(priv->flags, ®s->lut[lut_base],
206 OPRND0(QSPI_CMD_FAST_READ) | PAD0(LUT_PAD1) |
207 INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
208 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
210 qspi_write32(priv->flags, ®s->lut[lut_base],
211 OPRND0(QSPI_CMD_FAST_READ_4B) |
212 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) |
213 OPRND1(ADDR32BIT) | PAD1(LUT_PAD1) |
216 qspi_write32(priv->flags, ®s->lut[lut_base + 1],
217 OPRND0(8) | PAD0(LUT_PAD1) | INSTR0(LUT_DUMMY) |
218 OPRND1(RX_BUFFER_SIZE) | PAD1(LUT_PAD1) |
220 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
221 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
224 lut_base = SEQID_RDSR * 4;
225 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_RDSR) |
226 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
227 PAD1(LUT_PAD1) | INSTR1(LUT_READ));
228 qspi_write32(priv->flags, ®s->lut[lut_base + 1], 0);
229 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
230 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
233 lut_base = SEQID_SE * 4;
234 #ifdef CONFIG_SPI_FLASH_BAR
235 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_SE) |
236 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
237 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
239 if (FSL_QSPI_FLASH_SIZE <= SZ_16M)
240 qspi_write32(priv->flags, ®s->lut[lut_base],
241 OPRND0(QSPI_CMD_SE) | PAD0(LUT_PAD1) |
242 INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
243 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
245 qspi_write32(priv->flags, ®s->lut[lut_base],
246 OPRND0(QSPI_CMD_SE_4B) | PAD0(LUT_PAD1) |
247 INSTR0(LUT_CMD) | OPRND1(ADDR32BIT) |
248 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
250 qspi_write32(priv->flags, ®s->lut[lut_base + 1], 0);
251 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
252 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
254 /* Erase the whole chip */
255 lut_base = SEQID_CHIP_ERASE * 4;
256 qspi_write32(priv->flags, ®s->lut[lut_base],
257 OPRND0(QSPI_CMD_CHIP_ERASE) |
258 PAD0(LUT_PAD1) | INSTR0(LUT_CMD));
259 qspi_write32(priv->flags, ®s->lut[lut_base + 1], 0);
260 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
261 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
264 lut_base = SEQID_PP * 4;
265 #ifdef CONFIG_SPI_FLASH_BAR
266 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_PP) |
267 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
268 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
270 if (FSL_QSPI_FLASH_SIZE <= SZ_16M)
271 qspi_write32(priv->flags, ®s->lut[lut_base],
272 OPRND0(QSPI_CMD_PP) | PAD0(LUT_PAD1) |
273 INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
274 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
276 qspi_write32(priv->flags, ®s->lut[lut_base],
277 OPRND0(QSPI_CMD_PP_4B) | PAD0(LUT_PAD1) |
278 INSTR0(LUT_CMD) | OPRND1(ADDR32BIT) |
279 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
281 #if defined(CONFIG_MX6SX) || defined(CONFIG_MX6UL) || \
282 defined(CONFIG_MX6ULL) || defined(CONFIG_MX7D)
284 * To MX6SX, OPRND0(TX_BUFFER_SIZE) can not work correctly.
285 * So, Use IDATSZ in IPCR to determine the size and here set 0.
287 qspi_write32(priv->flags, ®s->lut[lut_base + 1], OPRND0(0) |
288 PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
290 qspi_write32(priv->flags, ®s->lut[lut_base + 1],
291 OPRND0(TX_BUFFER_SIZE) |
292 PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
294 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
295 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
298 lut_base = SEQID_RDID * 4;
299 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_RDID) |
300 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(8) |
301 PAD1(LUT_PAD1) | INSTR1(LUT_READ));
302 qspi_write32(priv->flags, ®s->lut[lut_base + 1], 0);
303 qspi_write32(priv->flags, ®s->lut[lut_base + 2], 0);
304 qspi_write32(priv->flags, ®s->lut[lut_base + 3], 0);
306 /* SUB SECTOR 4K ERASE */
307 lut_base = SEQID_BE_4K * 4;
308 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_BE_4K) |
309 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
310 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
312 #ifdef CONFIG_SPI_FLASH_BAR
314 * BRRD BRWR RDEAR WREAR are all supported, because it is hard to
315 * dynamically check whether to set BRRD BRWR or RDEAR WREAR during
318 lut_base = SEQID_BRRD * 4;
319 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_BRRD) |
320 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
321 PAD1(LUT_PAD1) | INSTR1(LUT_READ));
323 lut_base = SEQID_BRWR * 4;
324 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_BRWR) |
325 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
326 PAD1(LUT_PAD1) | INSTR1(LUT_WRITE));
328 lut_base = SEQID_RDEAR * 4;
329 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_RDEAR) |
330 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
331 PAD1(LUT_PAD1) | INSTR1(LUT_READ));
333 lut_base = SEQID_WREAR * 4;
334 qspi_write32(priv->flags, ®s->lut[lut_base], OPRND0(QSPI_CMD_WREAR) |
335 PAD0(LUT_PAD1) | INSTR0(LUT_CMD) | OPRND1(1) |
336 PAD1(LUT_PAD1) | INSTR1(LUT_WRITE));
340 * Read any device register.
341 * Used for Spansion S25FS-S family flash only.
343 lut_base = SEQID_RDAR * 4;
344 qspi_write32(priv->flags, ®s->lut[lut_base],
345 OPRND0(QSPI_CMD_RDAR) | PAD0(LUT_PAD1) |
346 INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
347 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
348 qspi_write32(priv->flags, ®s->lut[lut_base + 1],
349 OPRND0(8) | PAD0(LUT_PAD1) | INSTR0(LUT_DUMMY) |
350 OPRND1(1) | PAD1(LUT_PAD1) |
354 * Write any device register.
355 * Used for Spansion S25FS-S family flash only.
357 lut_base = SEQID_WRAR * 4;
358 qspi_write32(priv->flags, ®s->lut[lut_base],
359 OPRND0(QSPI_CMD_WRAR) | PAD0(LUT_PAD1) |
360 INSTR0(LUT_CMD) | OPRND1(ADDR24BIT) |
361 PAD1(LUT_PAD1) | INSTR1(LUT_ADDR));
362 qspi_write32(priv->flags, ®s->lut[lut_base + 1],
363 OPRND0(1) | PAD0(LUT_PAD1) | INSTR0(LUT_WRITE));
366 qspi_write32(priv->flags, ®s->lutkey, LUT_KEY_VALUE);
367 qspi_write32(priv->flags, ®s->lckcr, QSPI_LCKCR_LOCK);
370 #if defined(CONFIG_SYS_FSL_QSPI_AHB)
372 * If we have changed the content of the flash by writing or erasing,
373 * we need to invalidate the AHB buffer. If we do not do so, we may read out
374 * the wrong data. The spec tells us reset the AHB domain and Serial Flash
375 * domain at the same time.
377 static inline void qspi_ahb_invalid(struct fsl_qspi_priv *priv)
379 struct fsl_qspi_regs *regs = priv->regs;
382 reg = qspi_read32(priv->flags, ®s->mcr);
383 reg |= QSPI_MCR_SWRSTHD_MASK | QSPI_MCR_SWRSTSD_MASK;
384 qspi_write32(priv->flags, ®s->mcr, reg);
387 * The minimum delay : 1 AHB + 2 SFCK clocks.
388 * Delay 1 us is enough.
392 reg &= ~(QSPI_MCR_SWRSTHD_MASK | QSPI_MCR_SWRSTSD_MASK);
393 qspi_write32(priv->flags, ®s->mcr, reg);
396 /* Read out the data from the AHB buffer. */
397 static inline void qspi_ahb_read(struct fsl_qspi_priv *priv, u8 *rxbuf, int len)
399 struct fsl_qspi_regs *regs = priv->regs;
403 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
405 qspi_write32(priv->flags, ®s->mcr,
406 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
407 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
409 rx_addr = (void *)(uintptr_t)(priv->cur_amba_base + priv->sf_addr);
410 /* Read out the data directly from the AHB buffer. */
411 memcpy(rxbuf, rx_addr, len);
413 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
416 static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv)
419 struct fsl_qspi_regs *regs = priv->regs;
421 reg = qspi_read32(priv->flags, ®s->mcr);
422 /* Disable the module */
423 qspi_write32(priv->flags, ®s->mcr, reg | QSPI_MCR_MDIS_MASK);
425 /* Set the Sampling Register for DDR */
426 reg2 = qspi_read32(priv->flags, ®s->smpr);
427 reg2 &= ~QSPI_SMPR_DDRSMP_MASK;
428 reg2 |= (2 << QSPI_SMPR_DDRSMP_SHIFT);
429 qspi_write32(priv->flags, ®s->smpr, reg2);
431 /* Enable the module again (enable the DDR too) */
432 reg |= QSPI_MCR_DDR_EN_MASK;
433 /* Enable bit 29 for imx6sx */
436 qspi_write32(priv->flags, ®s->mcr, reg);
440 * There are two different ways to read out the data from the flash:
441 * the "IP Command Read" and the "AHB Command Read".
443 * The IC guy suggests we use the "AHB Command Read" which is faster
444 * then the "IP Command Read". (What's more is that there is a bug in
445 * the "IP Command Read" in the Vybrid.)
447 * After we set up the registers for the "AHB Command Read", we can use
448 * the memcpy to read the data directly. A "missed" access to the buffer
449 * causes the controller to clear the buffer, and use the sequence pointed
450 * by the QUADSPI_BFGENCR[SEQID] to initiate a read from the flash.
452 static void qspi_init_ahb_read(struct fsl_qspi_priv *priv)
454 struct fsl_qspi_regs *regs = priv->regs;
456 /* AHB configuration for access buffer 0/1/2 .*/
457 qspi_write32(priv->flags, ®s->buf0cr, QSPI_BUFXCR_INVALID_MSTRID);
458 qspi_write32(priv->flags, ®s->buf1cr, QSPI_BUFXCR_INVALID_MSTRID);
459 qspi_write32(priv->flags, ®s->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
460 qspi_write32(priv->flags, ®s->buf3cr, QSPI_BUF3CR_ALLMST_MASK |
461 (0x80 << QSPI_BUF3CR_ADATSZ_SHIFT));
463 /* We only use the buffer3 */
464 qspi_write32(priv->flags, ®s->buf0ind, 0);
465 qspi_write32(priv->flags, ®s->buf1ind, 0);
466 qspi_write32(priv->flags, ®s->buf2ind, 0);
469 * Set the default lut sequence for AHB Read.
470 * Parallel mode is disabled.
472 qspi_write32(priv->flags, ®s->bfgencr,
473 SEQID_FAST_READ << QSPI_BFGENCR_SEQID_SHIFT);
476 qspi_enable_ddr_mode(priv);
480 #ifdef CONFIG_SPI_FLASH_BAR
481 /* Bank register read/write, EAR register read/write */
482 static void qspi_op_rdbank(struct fsl_qspi_priv *priv, u8 *rxbuf, u32 len)
484 struct fsl_qspi_regs *regs = priv->regs;
485 u32 reg, mcr_reg, data, seqid;
487 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
488 qspi_write32(priv->flags, ®s->mcr,
489 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
490 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
491 qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS);
493 qspi_write32(priv->flags, ®s->sfar, priv->cur_amba_base);
495 if (priv->cur_seqid == QSPI_CMD_BRRD)
500 qspi_write32(priv->flags, ®s->ipcr,
501 (seqid << QSPI_IPCR_SEQID_SHIFT) | len);
503 /* Wait previous command complete */
504 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
510 reg = qspi_read32(priv->flags, ®s->rbsr);
511 if (reg & QSPI_RBSR_RDBFL_MASK) {
512 data = qspi_read32(priv->flags, ®s->rbdr[0]);
513 data = qspi_endian_xchg(data);
514 memcpy(rxbuf, &data, len);
515 qspi_write32(priv->flags, ®s->mcr,
516 qspi_read32(priv->flags, ®s->mcr) |
517 QSPI_MCR_CLR_RXF_MASK);
522 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
526 static void qspi_op_rdid(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
528 struct fsl_qspi_regs *regs = priv->regs;
529 u32 mcr_reg, rbsr_reg, data, size;
532 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
533 qspi_write32(priv->flags, ®s->mcr,
534 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
535 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
536 qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS);
538 qspi_write32(priv->flags, ®s->sfar, priv->cur_amba_base);
540 qspi_write32(priv->flags, ®s->ipcr,
541 (SEQID_RDID << QSPI_IPCR_SEQID_SHIFT) | 0);
542 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
546 while ((RX_BUFFER_SIZE >= len) && (len > 0)) {
549 rbsr_reg = qspi_read32(priv->flags, ®s->rbsr);
550 if (rbsr_reg & QSPI_RBSR_RDBFL_MASK) {
551 data = qspi_read32(priv->flags, ®s->rbdr[i]);
552 data = qspi_endian_xchg(data);
553 size = (len < 4) ? len : 4;
554 memcpy(rxbuf, &data, size);
561 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
564 /* If not use AHB read, read data from ip interface */
565 static void qspi_op_read(struct fsl_qspi_priv *priv, u32 *rxbuf, u32 len)
567 struct fsl_qspi_regs *regs = priv->regs;
573 if (priv->cur_seqid == QSPI_CMD_RDAR)
576 seqid = SEQID_FAST_READ;
578 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
579 qspi_write32(priv->flags, ®s->mcr,
580 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
581 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
582 qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS);
584 to_or_from = priv->sf_addr + priv->cur_amba_base;
589 qspi_write32(priv->flags, ®s->sfar, to_or_from);
591 size = (len > RX_BUFFER_SIZE) ?
592 RX_BUFFER_SIZE : len;
594 qspi_write32(priv->flags, ®s->ipcr,
595 (seqid << QSPI_IPCR_SEQID_SHIFT) |
597 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
604 while ((RX_BUFFER_SIZE >= size) && (size > 0)) {
605 data = qspi_read32(priv->flags, ®s->rbdr[i]);
606 data = qspi_endian_xchg(data);
608 memcpy(rxbuf, &data, size);
610 memcpy(rxbuf, &data, 4);
615 qspi_write32(priv->flags, ®s->mcr,
616 qspi_read32(priv->flags, ®s->mcr) |
617 QSPI_MCR_CLR_RXF_MASK);
620 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
623 static void qspi_op_write(struct fsl_qspi_priv *priv, u8 *txbuf, u32 len)
625 struct fsl_qspi_regs *regs = priv->regs;
626 u32 mcr_reg, data, reg, status_reg, seqid;
627 int i, size, tx_size;
630 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
631 qspi_write32(priv->flags, ®s->mcr,
632 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
633 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
634 qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS);
637 while ((status_reg & FLASH_STATUS_WEL) != FLASH_STATUS_WEL) {
640 qspi_write32(priv->flags, ®s->ipcr,
641 (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
642 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
645 qspi_write32(priv->flags, ®s->ipcr,
646 (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 1);
647 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
650 reg = qspi_read32(priv->flags, ®s->rbsr);
651 if (reg & QSPI_RBSR_RDBFL_MASK) {
652 status_reg = qspi_read32(priv->flags, ®s->rbdr[0]);
653 status_reg = qspi_endian_xchg(status_reg);
655 qspi_write32(priv->flags, ®s->mcr,
656 qspi_read32(priv->flags, ®s->mcr) |
657 QSPI_MCR_CLR_RXF_MASK);
660 /* Default is page programming */
662 if (priv->cur_seqid == QSPI_CMD_WRAR)
664 #ifdef CONFIG_SPI_FLASH_BAR
665 if (priv->cur_seqid == QSPI_CMD_BRWR)
667 else if (priv->cur_seqid == QSPI_CMD_WREAR)
671 to_or_from = priv->sf_addr + priv->cur_amba_base;
673 qspi_write32(priv->flags, ®s->sfar, to_or_from);
675 tx_size = (len > TX_BUFFER_SIZE) ?
676 TX_BUFFER_SIZE : len;
680 * There must be atleast 128bit data
681 * available in TX FIFO for any pop operation
685 for (i = 0; i < size * 4; i++) {
686 memcpy(&data, txbuf, 4);
687 data = qspi_endian_xchg(data);
688 qspi_write32(priv->flags, ®s->tbdr, data);
692 qspi_write32(priv->flags, ®s->ipcr,
693 (seqid << QSPI_IPCR_SEQID_SHIFT) | tx_size);
694 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
697 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
700 static void qspi_op_rdsr(struct fsl_qspi_priv *priv, void *rxbuf, u32 len)
702 struct fsl_qspi_regs *regs = priv->regs;
703 u32 mcr_reg, reg, data;
705 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
706 qspi_write32(priv->flags, ®s->mcr,
707 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
708 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
709 qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS);
711 qspi_write32(priv->flags, ®s->sfar, priv->cur_amba_base);
713 qspi_write32(priv->flags, ®s->ipcr,
714 (SEQID_RDSR << QSPI_IPCR_SEQID_SHIFT) | 0);
715 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
721 reg = qspi_read32(priv->flags, ®s->rbsr);
722 if (reg & QSPI_RBSR_RDBFL_MASK) {
723 data = qspi_read32(priv->flags, ®s->rbdr[0]);
724 data = qspi_endian_xchg(data);
725 memcpy(rxbuf, &data, len);
726 qspi_write32(priv->flags, ®s->mcr,
727 qspi_read32(priv->flags, ®s->mcr) |
728 QSPI_MCR_CLR_RXF_MASK);
733 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
736 static void qspi_op_erase(struct fsl_qspi_priv *priv)
738 struct fsl_qspi_regs *regs = priv->regs;
742 mcr_reg = qspi_read32(priv->flags, ®s->mcr);
743 qspi_write32(priv->flags, ®s->mcr,
744 QSPI_MCR_CLR_RXF_MASK | QSPI_MCR_CLR_TXF_MASK |
745 QSPI_MCR_RESERVED_MASK | QSPI_MCR_END_CFD_LE);
746 qspi_write32(priv->flags, ®s->rbct, QSPI_RBCT_RXBRD_USEIPS);
748 to_or_from = priv->sf_addr + priv->cur_amba_base;
749 qspi_write32(priv->flags, ®s->sfar, to_or_from);
751 qspi_write32(priv->flags, ®s->ipcr,
752 (SEQID_WREN << QSPI_IPCR_SEQID_SHIFT) | 0);
753 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
756 if (priv->cur_seqid == QSPI_CMD_SE) {
757 qspi_write32(priv->flags, ®s->ipcr,
758 (SEQID_SE << QSPI_IPCR_SEQID_SHIFT) | 0);
759 } else if (priv->cur_seqid == QSPI_CMD_BE_4K) {
760 qspi_write32(priv->flags, ®s->ipcr,
761 (SEQID_BE_4K << QSPI_IPCR_SEQID_SHIFT) | 0);
763 while (qspi_read32(priv->flags, ®s->sr) & QSPI_SR_BUSY_MASK)
766 qspi_write32(priv->flags, ®s->mcr, mcr_reg);
769 int qspi_xfer(struct fsl_qspi_priv *priv, unsigned int bitlen,
770 const void *dout, void *din, unsigned long flags)
772 u32 bytes = DIV_ROUND_UP(bitlen, 8);
773 static u32 wr_sfaddr;
779 if (flags & SPI_XFER_BEGIN) {
780 priv->cur_seqid = *(u8 *)dout;
781 memcpy(&txbuf, dout, 4);
784 if (flags == SPI_XFER_END) {
785 priv->sf_addr = wr_sfaddr;
786 qspi_op_write(priv, (u8 *)dout, bytes);
790 if (priv->cur_seqid == QSPI_CMD_FAST_READ ||
791 priv->cur_seqid == QSPI_CMD_RDAR) {
792 priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
793 } else if ((priv->cur_seqid == QSPI_CMD_SE) ||
794 (priv->cur_seqid == QSPI_CMD_BE_4K)) {
795 priv->sf_addr = swab32(txbuf) & OFFSET_BITS_MASK;
797 } else if (priv->cur_seqid == QSPI_CMD_PP ||
798 priv->cur_seqid == QSPI_CMD_WRAR) {
799 wr_sfaddr = swab32(txbuf) & OFFSET_BITS_MASK;
800 } else if ((priv->cur_seqid == QSPI_CMD_BRWR) ||
801 (priv->cur_seqid == QSPI_CMD_WREAR)) {
802 #ifdef CONFIG_SPI_FLASH_BAR
809 if (priv->cur_seqid == QSPI_CMD_FAST_READ) {
810 #ifdef CONFIG_SYS_FSL_QSPI_AHB
811 qspi_ahb_read(priv, din, bytes);
813 qspi_op_read(priv, din, bytes);
815 } else if (priv->cur_seqid == QSPI_CMD_RDAR) {
816 qspi_op_read(priv, din, bytes);
817 } else if (priv->cur_seqid == QSPI_CMD_RDID)
818 qspi_op_rdid(priv, din, bytes);
819 else if (priv->cur_seqid == QSPI_CMD_RDSR)
820 qspi_op_rdsr(priv, din, bytes);
821 #ifdef CONFIG_SPI_FLASH_BAR
822 else if ((priv->cur_seqid == QSPI_CMD_BRRD) ||
823 (priv->cur_seqid == QSPI_CMD_RDEAR)) {
825 qspi_op_rdbank(priv, din, bytes);
830 #ifdef CONFIG_SYS_FSL_QSPI_AHB
831 if ((priv->cur_seqid == QSPI_CMD_SE) ||
832 (priv->cur_seqid == QSPI_CMD_PP) ||
833 (priv->cur_seqid == QSPI_CMD_BE_4K) ||
834 (priv->cur_seqid == QSPI_CMD_WREAR) ||
835 (priv->cur_seqid == QSPI_CMD_BRWR))
836 qspi_ahb_invalid(priv);
842 void qspi_module_disable(struct fsl_qspi_priv *priv, u8 disable)
846 mcr_val = qspi_read32(priv->flags, &priv->regs->mcr);
848 mcr_val |= QSPI_MCR_MDIS_MASK;
850 mcr_val &= ~QSPI_MCR_MDIS_MASK;
851 qspi_write32(priv->flags, &priv->regs->mcr, mcr_val);
854 void qspi_cfg_smpr(struct fsl_qspi_priv *priv, u32 clear_bits, u32 set_bits)
858 smpr_val = qspi_read32(priv->flags, &priv->regs->smpr);
859 smpr_val &= ~clear_bits;
860 smpr_val |= set_bits;
861 qspi_write32(priv->flags, &priv->regs->smpr, smpr_val);
864 static int fsl_qspi_child_pre_probe(struct udevice *dev)
866 struct spi_slave *slave = dev_get_parent_priv(dev);
868 slave->max_write_size = TX_BUFFER_SIZE;
873 static int fsl_qspi_probe(struct udevice *bus)
876 u32 amba_size_per_chip;
877 struct fsl_qspi_platdata *plat = dev_get_platdata(bus);
878 struct fsl_qspi_priv *priv = dev_get_priv(bus);
879 struct dm_spi_bus *dm_spi_bus;
882 dm_spi_bus = bus->uclass_priv;
884 dm_spi_bus->max_hz = plat->speed_hz;
886 priv->regs = (struct fsl_qspi_regs *)(uintptr_t)plat->reg_base;
887 priv->flags = plat->flags;
889 priv->speed_hz = plat->speed_hz;
891 * QSPI SFADR width is 32bits, the max dest addr is 4GB-1.
892 * AMBA memory zone should be located on the 0~4GB space
893 * even on a 64bits cpu.
895 priv->amba_base[0] = (u32)plat->amba_base;
896 priv->amba_total_size = (u32)plat->amba_total_size;
897 priv->flash_num = plat->flash_num;
898 priv->num_chipselect = plat->num_chipselect;
900 /* make sure controller is not busy anywhere */
901 ret = is_controller_busy(priv);
904 debug("ERROR : The controller is busy\n");
908 mcr_val = qspi_read32(priv->flags, &priv->regs->mcr);
910 /* Set endianness to LE for i.mx */
911 if (IS_ENABLED(CONFIG_MX6) || IS_ENABLED(CONFIG_MX7))
912 mcr_val = QSPI_MCR_END_CFD_LE;
914 qspi_write32(priv->flags, &priv->regs->mcr,
915 QSPI_MCR_RESERVED_MASK | QSPI_MCR_MDIS_MASK |
916 (mcr_val & QSPI_MCR_END_CFD_MASK));
918 qspi_cfg_smpr(priv, ~(QSPI_SMPR_FSDLY_MASK | QSPI_SMPR_DDRSMP_MASK |
919 QSPI_SMPR_FSPHS_MASK | QSPI_SMPR_HSENA_MASK), 0);
922 * Assign AMBA memory zone for every chipselect
923 * QuadSPI has two channels, every channel has two chipselects.
924 * If the property 'num-cs' in dts is 2, the AMBA memory will be divided
925 * into two parts and assign to every channel. This indicate that every
926 * channel only has one valid chipselect.
927 * If the property 'num-cs' in dts is 4, the AMBA memory will be divided
928 * into four parts and assign to every chipselect.
929 * Every channel will has two valid chipselects.
931 amba_size_per_chip = priv->amba_total_size >>
932 (priv->num_chipselect >> 1);
933 for (i = 1 ; i < priv->num_chipselect ; i++)
935 amba_size_per_chip + priv->amba_base[i - 1];
938 * Any read access to non-implemented addresses will provide
941 * In case single die flash devices, TOP_ADDR_MEMA2 and
942 * TOP_ADDR_MEMB2 should be initialized/programmed to
943 * TOP_ADDR_MEMA1 and TOP_ADDR_MEMB1 respectively - in effect,
944 * setting the size of these devices to 0. This would ensure
945 * that the complete memory map is assigned to only one flash device.
947 qspi_write32(priv->flags, &priv->regs->sfa1ad,
948 priv->amba_base[0] + amba_size_per_chip);
949 switch (priv->num_chipselect) {
953 qspi_write32(priv->flags, &priv->regs->sfa2ad,
955 qspi_write32(priv->flags, &priv->regs->sfb1ad,
956 priv->amba_base[1] + amba_size_per_chip);
957 qspi_write32(priv->flags, &priv->regs->sfb2ad,
958 priv->amba_base[1] + amba_size_per_chip);
961 qspi_write32(priv->flags, &priv->regs->sfa2ad,
963 qspi_write32(priv->flags, &priv->regs->sfb1ad,
965 qspi_write32(priv->flags, &priv->regs->sfb2ad,
966 priv->amba_base[3] + amba_size_per_chip);
969 debug("Error: Unsupported chipselect number %u!\n",
970 priv->num_chipselect);
971 qspi_module_disable(priv, 1);
977 #ifdef CONFIG_SYS_FSL_QSPI_AHB
978 qspi_init_ahb_read(priv);
981 qspi_module_disable(priv, 0);
986 static int fsl_qspi_ofdata_to_platdata(struct udevice *bus)
988 struct fdt_resource res_regs, res_mem;
989 struct fsl_qspi_platdata *plat = bus->platdata;
990 const void *blob = gd->fdt_blob;
991 int node = dev_of_offset(bus);
992 int ret, flash_num = 0, subnode;
994 if (fdtdec_get_bool(blob, node, "big-endian"))
995 plat->flags |= QSPI_FLAG_REGMAP_ENDIAN_BIG;
997 ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
998 "QuadSPI", &res_regs);
1000 debug("Error: can't get regs base addresses(ret = %d)!\n", ret);
1003 ret = fdt_get_named_resource(blob, node, "reg", "reg-names",
1004 "QuadSPI-memory", &res_mem);
1006 debug("Error: can't get AMBA base addresses(ret = %d)!\n", ret);
1010 /* Count flash numbers */
1011 fdt_for_each_subnode(subnode, blob, node)
1014 if (flash_num == 0) {
1015 debug("Error: Missing flashes!\n");
1019 plat->speed_hz = fdtdec_get_int(blob, node, "spi-max-frequency",
1020 FSL_QSPI_DEFAULT_SCK_FREQ);
1021 plat->num_chipselect = fdtdec_get_int(blob, node, "num-cs",
1022 FSL_QSPI_MAX_CHIPSELECT_NUM);
1024 plat->reg_base = res_regs.start;
1025 plat->amba_base = res_mem.start;
1026 plat->amba_total_size = res_mem.end - res_mem.start + 1;
1027 plat->flash_num = flash_num;
1029 debug("%s: regs=<0x%llx> <0x%llx, 0x%llx>, max-frequency=%d, endianess=%s\n",
1031 (u64)plat->reg_base,
1032 (u64)plat->amba_base,
1033 (u64)plat->amba_total_size,
1035 plat->flags & QSPI_FLAG_REGMAP_ENDIAN_BIG ? "be" : "le"
1041 static int fsl_qspi_xfer(struct udevice *dev, unsigned int bitlen,
1042 const void *dout, void *din, unsigned long flags)
1044 struct fsl_qspi_priv *priv;
1045 struct udevice *bus;
1048 priv = dev_get_priv(bus);
1050 return qspi_xfer(priv, bitlen, dout, din, flags);
1053 static int fsl_qspi_claim_bus(struct udevice *dev)
1055 struct fsl_qspi_priv *priv;
1056 struct udevice *bus;
1057 struct dm_spi_slave_platdata *slave_plat = dev_get_parent_platdata(dev);
1061 priv = dev_get_priv(bus);
1063 /* make sure controller is not busy anywhere */
1064 ret = is_controller_busy(priv);
1067 debug("ERROR : The controller is busy\n");
1071 priv->cur_amba_base = priv->amba_base[slave_plat->cs];
1073 qspi_module_disable(priv, 0);
1078 static int fsl_qspi_release_bus(struct udevice *dev)
1080 struct fsl_qspi_priv *priv;
1081 struct udevice *bus;
1084 priv = dev_get_priv(bus);
1086 qspi_module_disable(priv, 1);
1091 static int fsl_qspi_set_speed(struct udevice *bus, uint speed)
1097 static int fsl_qspi_set_mode(struct udevice *bus, uint mode)
1103 static const struct dm_spi_ops fsl_qspi_ops = {
1104 .claim_bus = fsl_qspi_claim_bus,
1105 .release_bus = fsl_qspi_release_bus,
1106 .xfer = fsl_qspi_xfer,
1107 .set_speed = fsl_qspi_set_speed,
1108 .set_mode = fsl_qspi_set_mode,
1111 static const struct udevice_id fsl_qspi_ids[] = {
1112 { .compatible = "fsl,vf610-qspi" },
1113 { .compatible = "fsl,imx6sx-qspi" },
1114 { .compatible = "fsl,imx6ul-qspi" },
1115 { .compatible = "fsl,imx7d-qspi" },
1119 U_BOOT_DRIVER(fsl_qspi) = {
1122 .of_match = fsl_qspi_ids,
1123 .ops = &fsl_qspi_ops,
1124 .ofdata_to_platdata = fsl_qspi_ofdata_to_platdata,
1125 .platdata_auto_alloc_size = sizeof(struct fsl_qspi_platdata),
1126 .priv_auto_alloc_size = sizeof(struct fsl_qspi_priv),
1127 .probe = fsl_qspi_probe,
1128 .child_pre_probe = fsl_qspi_child_pre_probe,