1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Xilinx Zynq UltraScale+ MPSoC Quad-SPI (QSPI) controller driver
6 * Copyright (C) 2009 - 2015 Xilinx, Inc.
10 #include <linux/delay.h>
11 #include <linux/dma-mapping.h>
12 #include <linux/dmaengine.h>
13 #include <linux/firmware/xlnx-zynqmp.h>
14 #include <linux/interrupt.h>
16 #include <linux/module.h>
18 #include <linux/platform_device.h>
19 #include <linux/pm_runtime.h>
20 #include <linux/spi/spi.h>
21 #include <linux/spinlock.h>
22 #include <linux/workqueue.h>
23 #include <linux/spi/spi-mem.h>
25 /* Generic QSPI register offsets */
26 #define GQSPI_CONFIG_OFST 0x00000100
27 #define GQSPI_ISR_OFST 0x00000104
28 #define GQSPI_IDR_OFST 0x0000010C
29 #define GQSPI_IER_OFST 0x00000108
30 #define GQSPI_IMASK_OFST 0x00000110
31 #define GQSPI_EN_OFST 0x00000114
32 #define GQSPI_TXD_OFST 0x0000011C
33 #define GQSPI_RXD_OFST 0x00000120
34 #define GQSPI_TX_THRESHOLD_OFST 0x00000128
35 #define GQSPI_RX_THRESHOLD_OFST 0x0000012C
36 #define IOU_TAPDLY_BYPASS_OFST 0x0000003C
37 #define GQSPI_LPBK_DLY_ADJ_OFST 0x00000138
38 #define GQSPI_GEN_FIFO_OFST 0x00000140
39 #define GQSPI_SEL_OFST 0x00000144
40 #define GQSPI_GF_THRESHOLD_OFST 0x00000150
41 #define GQSPI_FIFO_CTRL_OFST 0x0000014C
42 #define GQSPI_QSPIDMA_DST_CTRL_OFST 0x0000080C
43 #define GQSPI_QSPIDMA_DST_SIZE_OFST 0x00000804
44 #define GQSPI_QSPIDMA_DST_STS_OFST 0x00000808
45 #define GQSPI_QSPIDMA_DST_I_STS_OFST 0x00000814
46 #define GQSPI_QSPIDMA_DST_I_EN_OFST 0x00000818
47 #define GQSPI_QSPIDMA_DST_I_DIS_OFST 0x0000081C
48 #define GQSPI_QSPIDMA_DST_I_MASK_OFST 0x00000820
49 #define GQSPI_QSPIDMA_DST_ADDR_OFST 0x00000800
50 #define GQSPI_QSPIDMA_DST_ADDR_MSB_OFST 0x00000828
51 #define GQSPI_DATA_DLY_ADJ_OFST 0x000001F8
53 /* GQSPI register bit masks */
54 #define GQSPI_SEL_MASK 0x00000001
55 #define GQSPI_EN_MASK 0x00000001
56 #define GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK 0x00000020
57 #define GQSPI_ISR_WR_TO_CLR_MASK 0x00000002
58 #define GQSPI_IDR_ALL_MASK 0x00000FBE
59 #define GQSPI_CFG_MODE_EN_MASK 0xC0000000
60 #define GQSPI_CFG_GEN_FIFO_START_MODE_MASK 0x20000000
61 #define GQSPI_CFG_ENDIAN_MASK 0x04000000
62 #define GQSPI_CFG_EN_POLL_TO_MASK 0x00100000
63 #define GQSPI_CFG_WP_HOLD_MASK 0x00080000
64 #define GQSPI_CFG_BAUD_RATE_DIV_MASK 0x00000038
65 #define GQSPI_CFG_CLK_PHA_MASK 0x00000004
66 #define GQSPI_CFG_CLK_POL_MASK 0x00000002
67 #define GQSPI_CFG_START_GEN_FIFO_MASK 0x10000000
68 #define GQSPI_GENFIFO_IMM_DATA_MASK 0x000000FF
69 #define GQSPI_GENFIFO_DATA_XFER 0x00000100
70 #define GQSPI_GENFIFO_EXP 0x00000200
71 #define GQSPI_GENFIFO_MODE_SPI 0x00000400
72 #define GQSPI_GENFIFO_MODE_DUALSPI 0x00000800
73 #define GQSPI_GENFIFO_MODE_QUADSPI 0x00000C00
74 #define GQSPI_GENFIFO_MODE_MASK 0x00000C00
75 #define GQSPI_GENFIFO_CS_LOWER 0x00001000
76 #define GQSPI_GENFIFO_CS_UPPER 0x00002000
77 #define GQSPI_GENFIFO_BUS_LOWER 0x00004000
78 #define GQSPI_GENFIFO_BUS_UPPER 0x00008000
79 #define GQSPI_GENFIFO_BUS_BOTH 0x0000C000
80 #define GQSPI_GENFIFO_BUS_MASK 0x0000C000
81 #define GQSPI_GENFIFO_TX 0x00010000
82 #define GQSPI_GENFIFO_RX 0x00020000
83 #define GQSPI_GENFIFO_STRIPE 0x00040000
84 #define GQSPI_GENFIFO_POLL 0x00080000
85 #define GQSPI_GENFIFO_EXP_START 0x00000100
86 #define GQSPI_FIFO_CTRL_RST_RX_FIFO_MASK 0x00000004
87 #define GQSPI_FIFO_CTRL_RST_TX_FIFO_MASK 0x00000002
88 #define GQSPI_FIFO_CTRL_RST_GEN_FIFO_MASK 0x00000001
89 #define GQSPI_ISR_RXEMPTY_MASK 0x00000800
90 #define GQSPI_ISR_GENFIFOFULL_MASK 0x00000400
91 #define GQSPI_ISR_GENFIFONOT_FULL_MASK 0x00000200
92 #define GQSPI_ISR_TXEMPTY_MASK 0x00000100
93 #define GQSPI_ISR_GENFIFOEMPTY_MASK 0x00000080
94 #define GQSPI_ISR_RXFULL_MASK 0x00000020
95 #define GQSPI_ISR_RXNEMPTY_MASK 0x00000010
96 #define GQSPI_ISR_TXFULL_MASK 0x00000008
97 #define GQSPI_ISR_TXNOT_FULL_MASK 0x00000004
98 #define GQSPI_ISR_POLL_TIME_EXPIRE_MASK 0x00000002
99 #define GQSPI_IER_TXNOT_FULL_MASK 0x00000004
100 #define GQSPI_IER_RXEMPTY_MASK 0x00000800
101 #define GQSPI_IER_POLL_TIME_EXPIRE_MASK 0x00000002
102 #define GQSPI_IER_RXNEMPTY_MASK 0x00000010
103 #define GQSPI_IER_GENFIFOEMPTY_MASK 0x00000080
104 #define GQSPI_IER_TXEMPTY_MASK 0x00000100
105 #define GQSPI_QSPIDMA_DST_INTR_ALL_MASK 0x000000FE
106 #define GQSPI_QSPIDMA_DST_STS_WTC 0x0000E000
107 #define GQSPI_CFG_MODE_EN_DMA_MASK 0x80000000
108 #define GQSPI_ISR_IDR_MASK 0x00000994
109 #define GQSPI_QSPIDMA_DST_I_EN_DONE_MASK 0x00000002
110 #define GQSPI_QSPIDMA_DST_I_STS_DONE_MASK 0x00000002
111 #define GQSPI_IRQ_MASK 0x00000980
113 #define GQSPI_CFG_BAUD_RATE_DIV_SHIFT 3
114 #define GQSPI_GENFIFO_CS_SETUP 0x4
115 #define GQSPI_GENFIFO_CS_HOLD 0x3
116 #define GQSPI_TXD_DEPTH 64
117 #define GQSPI_RX_FIFO_THRESHOLD 32
118 #define GQSPI_RX_FIFO_FILL (GQSPI_RX_FIFO_THRESHOLD * 4)
119 #define GQSPI_TX_FIFO_THRESHOLD_RESET_VAL 32
120 #define GQSPI_TX_FIFO_FILL (GQSPI_TXD_DEPTH -\
121 GQSPI_TX_FIFO_THRESHOLD_RESET_VAL)
122 #define GQSPI_GEN_FIFO_THRESHOLD_RESET_VAL 0X10
123 #define GQSPI_QSPIDMA_DST_CTRL_RESET_VAL 0x803FFA00
124 #define GQSPI_SELECT_FLASH_CS_LOWER 0x1
125 #define GQSPI_SELECT_FLASH_CS_UPPER 0x2
126 #define GQSPI_SELECT_FLASH_CS_BOTH 0x3
127 #define GQSPI_SELECT_FLASH_BUS_LOWER 0x1
128 #define GQSPI_SELECT_FLASH_BUS_UPPER 0x2
129 #define GQSPI_SELECT_FLASH_BUS_BOTH 0x3
130 #define GQSPI_BAUD_DIV_MAX 7 /* Baud rate divisor maximum */
131 #define GQSPI_BAUD_DIV_SHIFT 2 /* Baud rate divisor shift */
132 #define GQSPI_SELECT_MODE_SPI 0x1
133 #define GQSPI_SELECT_MODE_DUALSPI 0x2
134 #define GQSPI_SELECT_MODE_QUADSPI 0x4
135 #define GQSPI_DMA_UNALIGN 0x3
136 #define GQSPI_DEFAULT_NUM_CS 1 /* Default number of chip selects */
138 #define GQSPI_MAX_NUM_CS 2 /* Maximum number of chip selects */
140 #define GQSPI_USE_DATA_DLY 0x1
141 #define GQSPI_USE_DATA_DLY_SHIFT 31
142 #define GQSPI_DATA_DLY_ADJ_VALUE 0x2
143 #define GQSPI_DATA_DLY_ADJ_SHIFT 28
144 #define GQSPI_LPBK_DLY_ADJ_DLY_1 0x1
145 #define GQSPI_LPBK_DLY_ADJ_DLY_1_SHIFT 0x3
146 #define TAP_DLY_BYPASS_LQSPI_RX_VALUE 0x1
147 #define TAP_DLY_BYPASS_LQSPI_RX_SHIFT 0x2
149 /* set to differentiate versal from zynqmp, 1=versal, 0=zynqmp */
150 #define QSPI_QUIRK_HAS_TAPDELAY BIT(0)
152 #define GQSPI_FREQ_37_5MHZ 37500000
153 #define GQSPI_FREQ_40MHZ 40000000
154 #define GQSPI_FREQ_100MHZ 100000000
155 #define GQSPI_FREQ_150MHZ 150000000
157 #define SPI_AUTOSUSPEND_TIMEOUT 3000
158 enum mode_type
{GQSPI_MODE_IO
, GQSPI_MODE_DMA
};
161 * struct qspi_platform_data - zynqmp qspi platform data structure
162 * @quirks: Flags is used to identify the platform
164 struct qspi_platform_data
{
169 * struct zynqmp_qspi - Defines qspi driver instance
170 * @ctlr: Pointer to the spi controller information
171 * @regs: Virtual address of the QSPI controller registers
172 * @refclk: Pointer to the peripheral clock
173 * @pclk: Pointer to the APB clock
175 * @dev: Pointer to struct device
176 * @txbuf: Pointer to the TX buffer
177 * @rxbuf: Pointer to the RX buffer
178 * @bytes_to_transfer: Number of bytes left to transfer
179 * @bytes_to_receive: Number of bytes left to receive
180 * @genfifocs: Used for chip select
181 * @genfifobus: Used to select the upper or lower bus
182 * @dma_rx_bytes: Remaining bytes to receive by DMA mode
183 * @dma_addr: DMA address after mapping the kernel buffer
184 * @genfifoentry: Used for storing the genfifoentry instruction.
185 * @mode: Defines the mode in which QSPI is operating
186 * @data_completion: completion structure
187 * @op_lock: Operational lock
188 * @speed_hz: Current SPI bus clock speed in hz
189 * @has_tapdelay: Used for tapdelay register available in qspi
192 struct spi_controller
*ctlr
;
200 int bytes_to_transfer
;
201 int bytes_to_receive
;
208 struct completion data_completion
;
209 struct mutex op_lock
;
215 * zynqmp_gqspi_read - For GQSPI controller read operation
216 * @xqspi: Pointer to the zynqmp_qspi structure
217 * @offset: Offset from where to read
218 * Return: Value at the offset
220 static u32
zynqmp_gqspi_read(struct zynqmp_qspi
*xqspi
, u32 offset
)
222 return readl_relaxed(xqspi
->regs
+ offset
);
226 * zynqmp_gqspi_write - For GQSPI controller write operation
227 * @xqspi: Pointer to the zynqmp_qspi structure
228 * @offset: Offset where to write
229 * @val: Value to be written
231 static inline void zynqmp_gqspi_write(struct zynqmp_qspi
*xqspi
, u32 offset
,
234 writel_relaxed(val
, (xqspi
->regs
+ offset
));
238 * zynqmp_gqspi_selecttarget - For selection of target device
239 * @instanceptr: Pointer to the zynqmp_qspi structure
240 * @targetcs: For chip select
241 * @targetbus: To check which bus is selected- upper or lower
243 static void zynqmp_gqspi_selecttarget(struct zynqmp_qspi
*instanceptr
,
244 u8 targetcs
, u8 targetbus
)
247 * Bus and CS lines selected here will be updated in the instance and
248 * used for subsequent GENFIFO entries during transfer.
251 /* Choose target select line */
253 case GQSPI_SELECT_FLASH_CS_BOTH
:
254 instanceptr
->genfifocs
= GQSPI_GENFIFO_CS_LOWER
|
255 GQSPI_GENFIFO_CS_UPPER
;
257 case GQSPI_SELECT_FLASH_CS_UPPER
:
258 instanceptr
->genfifocs
= GQSPI_GENFIFO_CS_UPPER
;
260 case GQSPI_SELECT_FLASH_CS_LOWER
:
261 instanceptr
->genfifocs
= GQSPI_GENFIFO_CS_LOWER
;
264 dev_warn(instanceptr
->dev
, "Invalid target select\n");
269 case GQSPI_SELECT_FLASH_BUS_BOTH
:
270 instanceptr
->genfifobus
= GQSPI_GENFIFO_BUS_LOWER
|
271 GQSPI_GENFIFO_BUS_UPPER
;
273 case GQSPI_SELECT_FLASH_BUS_UPPER
:
274 instanceptr
->genfifobus
= GQSPI_GENFIFO_BUS_UPPER
;
276 case GQSPI_SELECT_FLASH_BUS_LOWER
:
277 instanceptr
->genfifobus
= GQSPI_GENFIFO_BUS_LOWER
;
280 dev_warn(instanceptr
->dev
, "Invalid target bus\n");
285 * zynqmp_qspi_set_tapdelay: To configure qspi tap delays
286 * @xqspi: Pointer to the zynqmp_qspi structure
287 * @baudrateval: Buadrate to configure
289 static void zynqmp_qspi_set_tapdelay(struct zynqmp_qspi
*xqspi
, u32 baudrateval
)
291 u32 tapdlybypass
= 0, lpbkdlyadj
= 0, datadlyadj
= 0, clk_rate
;
294 clk_rate
= clk_get_rate(xqspi
->refclk
);
295 reqhz
= (clk_rate
/ (GQSPI_BAUD_DIV_SHIFT
<< baudrateval
));
297 if (!xqspi
->has_tapdelay
) {
298 if (reqhz
<= GQSPI_FREQ_40MHZ
) {
299 zynqmp_pm_set_tapdelay_bypass(PM_TAPDELAY_QSPI
,
300 PM_TAPDELAY_BYPASS_ENABLE
);
301 } else if (reqhz
<= GQSPI_FREQ_100MHZ
) {
302 zynqmp_pm_set_tapdelay_bypass(PM_TAPDELAY_QSPI
,
303 PM_TAPDELAY_BYPASS_ENABLE
);
304 lpbkdlyadj
|= (GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK
);
305 datadlyadj
|= ((GQSPI_USE_DATA_DLY
<<
306 GQSPI_USE_DATA_DLY_SHIFT
)
307 | (GQSPI_DATA_DLY_ADJ_VALUE
<<
308 GQSPI_DATA_DLY_ADJ_SHIFT
));
309 } else if (reqhz
<= GQSPI_FREQ_150MHZ
) {
310 lpbkdlyadj
|= GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK
;
313 if (reqhz
<= GQSPI_FREQ_37_5MHZ
) {
314 tapdlybypass
|= (TAP_DLY_BYPASS_LQSPI_RX_VALUE
<<
315 TAP_DLY_BYPASS_LQSPI_RX_SHIFT
);
316 } else if (reqhz
<= GQSPI_FREQ_100MHZ
) {
317 tapdlybypass
|= (TAP_DLY_BYPASS_LQSPI_RX_VALUE
<<
318 TAP_DLY_BYPASS_LQSPI_RX_SHIFT
);
319 lpbkdlyadj
|= (GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK
);
320 datadlyadj
|= (GQSPI_USE_DATA_DLY
<<
321 GQSPI_USE_DATA_DLY_SHIFT
);
322 } else if (reqhz
<= GQSPI_FREQ_150MHZ
) {
323 lpbkdlyadj
|= (GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK
324 | (GQSPI_LPBK_DLY_ADJ_DLY_1
<<
325 GQSPI_LPBK_DLY_ADJ_DLY_1_SHIFT
));
327 zynqmp_gqspi_write(xqspi
,
328 IOU_TAPDLY_BYPASS_OFST
, tapdlybypass
);
330 zynqmp_gqspi_write(xqspi
, GQSPI_LPBK_DLY_ADJ_OFST
, lpbkdlyadj
);
331 zynqmp_gqspi_write(xqspi
, GQSPI_DATA_DLY_ADJ_OFST
, datadlyadj
);
335 * zynqmp_qspi_init_hw - Initialize the hardware
336 * @xqspi: Pointer to the zynqmp_qspi structure
338 * The default settings of the QSPI controller's configurable parameters on
341 * - TX threshold set to 1
342 * - RX threshold set to 1
343 * - Flash memory interface mode enabled
344 * This function performs the following actions
345 * - Disable and clear all the interrupts
346 * - Enable manual target select
347 * - Enable manual start
348 * - Deselect all the chip select lines
349 * - Set the little endian mode of TX FIFO
351 * - Set clock polarity and
352 * - Enable the QSPI controller
354 static void zynqmp_qspi_init_hw(struct zynqmp_qspi
*xqspi
)
356 u32 config_reg
, baud_rate_val
= 0;
359 /* Select the GQSPI mode */
360 zynqmp_gqspi_write(xqspi
, GQSPI_SEL_OFST
, GQSPI_SEL_MASK
);
361 /* Clear and disable interrupts */
362 zynqmp_gqspi_write(xqspi
, GQSPI_ISR_OFST
,
363 zynqmp_gqspi_read(xqspi
, GQSPI_ISR_OFST
) |
364 GQSPI_ISR_WR_TO_CLR_MASK
);
365 /* Clear the DMA STS */
366 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_I_STS_OFST
,
367 zynqmp_gqspi_read(xqspi
,
368 GQSPI_QSPIDMA_DST_I_STS_OFST
));
369 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_STS_OFST
,
370 zynqmp_gqspi_read(xqspi
,
371 GQSPI_QSPIDMA_DST_STS_OFST
) |
372 GQSPI_QSPIDMA_DST_STS_WTC
);
373 zynqmp_gqspi_write(xqspi
, GQSPI_IDR_OFST
, GQSPI_IDR_ALL_MASK
);
374 zynqmp_gqspi_write(xqspi
,
375 GQSPI_QSPIDMA_DST_I_DIS_OFST
,
376 GQSPI_QSPIDMA_DST_INTR_ALL_MASK
);
377 /* Disable the GQSPI */
378 zynqmp_gqspi_write(xqspi
, GQSPI_EN_OFST
, 0x0);
379 config_reg
= zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
);
380 config_reg
&= ~GQSPI_CFG_MODE_EN_MASK
;
382 config_reg
|= GQSPI_CFG_GEN_FIFO_START_MODE_MASK
;
383 /* Little endian by default */
384 config_reg
&= ~GQSPI_CFG_ENDIAN_MASK
;
385 /* Disable poll time out */
386 config_reg
&= ~GQSPI_CFG_EN_POLL_TO_MASK
;
388 config_reg
|= GQSPI_CFG_WP_HOLD_MASK
;
389 /* Clear pre-scalar by default */
390 config_reg
&= ~GQSPI_CFG_BAUD_RATE_DIV_MASK
;
392 if (xqspi
->ctlr
->mode_bits
& SPI_CPHA
)
393 config_reg
|= GQSPI_CFG_CLK_PHA_MASK
;
395 config_reg
&= ~GQSPI_CFG_CLK_PHA_MASK
;
397 if (xqspi
->ctlr
->mode_bits
& SPI_CPOL
)
398 config_reg
|= GQSPI_CFG_CLK_POL_MASK
;
400 config_reg
&= ~GQSPI_CFG_CLK_POL_MASK
;
402 /* Set the clock frequency */
403 clk_rate
= clk_get_rate(xqspi
->refclk
);
404 while ((baud_rate_val
< GQSPI_BAUD_DIV_MAX
) &&
406 (GQSPI_BAUD_DIV_SHIFT
<< baud_rate_val
)) > xqspi
->speed_hz
)
409 config_reg
&= ~GQSPI_CFG_BAUD_RATE_DIV_MASK
;
410 config_reg
|= (baud_rate_val
<< GQSPI_CFG_BAUD_RATE_DIV_SHIFT
);
412 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
, config_reg
);
414 /* Set the tapdelay for clock frequency */
415 zynqmp_qspi_set_tapdelay(xqspi
, baud_rate_val
);
417 /* Clear the TX and RX FIFO */
418 zynqmp_gqspi_write(xqspi
, GQSPI_FIFO_CTRL_OFST
,
419 GQSPI_FIFO_CTRL_RST_RX_FIFO_MASK
|
420 GQSPI_FIFO_CTRL_RST_TX_FIFO_MASK
|
421 GQSPI_FIFO_CTRL_RST_GEN_FIFO_MASK
);
422 /* Reset thresholds */
423 zynqmp_gqspi_write(xqspi
, GQSPI_TX_THRESHOLD_OFST
,
424 GQSPI_TX_FIFO_THRESHOLD_RESET_VAL
);
425 zynqmp_gqspi_write(xqspi
, GQSPI_RX_THRESHOLD_OFST
,
426 GQSPI_RX_FIFO_THRESHOLD
);
427 zynqmp_gqspi_write(xqspi
, GQSPI_GF_THRESHOLD_OFST
,
428 GQSPI_GEN_FIFO_THRESHOLD_RESET_VAL
);
429 zynqmp_gqspi_selecttarget(xqspi
,
430 GQSPI_SELECT_FLASH_CS_LOWER
,
431 GQSPI_SELECT_FLASH_BUS_LOWER
);
433 zynqmp_gqspi_write(xqspi
,
434 GQSPI_QSPIDMA_DST_CTRL_OFST
,
435 GQSPI_QSPIDMA_DST_CTRL_RESET_VAL
);
437 /* Enable the GQSPI */
438 zynqmp_gqspi_write(xqspi
, GQSPI_EN_OFST
, GQSPI_EN_MASK
);
442 * zynqmp_qspi_copy_read_data - Copy data to RX buffer
443 * @xqspi: Pointer to the zynqmp_qspi structure
444 * @data: The variable where data is stored
445 * @size: Number of bytes to be copied from data to RX buffer
447 static void zynqmp_qspi_copy_read_data(struct zynqmp_qspi
*xqspi
,
450 memcpy(xqspi
->rxbuf
, &data
, size
);
451 xqspi
->rxbuf
+= size
;
452 xqspi
->bytes_to_receive
-= size
;
456 * zynqmp_qspi_chipselect - Select or deselect the chip select line
457 * @qspi: Pointer to the spi_device structure
458 * @is_high: Select(0) or deselect (1) the chip select line
460 static void zynqmp_qspi_chipselect(struct spi_device
*qspi
, bool is_high
)
462 struct zynqmp_qspi
*xqspi
= spi_controller_get_devdata(qspi
->controller
);
464 u32 genfifoentry
= 0, statusreg
;
466 genfifoentry
|= GQSPI_GENFIFO_MODE_SPI
;
469 if (!spi_get_chipselect(qspi
, 0)) {
470 xqspi
->genfifobus
= GQSPI_GENFIFO_BUS_LOWER
;
471 xqspi
->genfifocs
= GQSPI_GENFIFO_CS_LOWER
;
473 xqspi
->genfifobus
= GQSPI_GENFIFO_BUS_UPPER
;
474 xqspi
->genfifocs
= GQSPI_GENFIFO_CS_UPPER
;
476 genfifoentry
|= xqspi
->genfifobus
;
477 genfifoentry
|= xqspi
->genfifocs
;
478 genfifoentry
|= GQSPI_GENFIFO_CS_SETUP
;
480 genfifoentry
|= GQSPI_GENFIFO_CS_HOLD
;
483 zynqmp_gqspi_write(xqspi
, GQSPI_GEN_FIFO_OFST
, genfifoentry
);
485 /* Manually start the generic FIFO command */
486 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
487 zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
) |
488 GQSPI_CFG_START_GEN_FIFO_MASK
);
490 timeout
= jiffies
+ msecs_to_jiffies(1000);
492 /* Wait until the generic FIFO command is empty */
494 statusreg
= zynqmp_gqspi_read(xqspi
, GQSPI_ISR_OFST
);
496 if ((statusreg
& GQSPI_ISR_GENFIFOEMPTY_MASK
) &&
497 (statusreg
& GQSPI_ISR_TXEMPTY_MASK
))
500 } while (!time_after_eq(jiffies
, timeout
));
502 if (time_after_eq(jiffies
, timeout
))
503 dev_err(xqspi
->dev
, "Chip select timed out\n");
507 * zynqmp_qspi_selectspimode - Selects SPI mode - x1 or x2 or x4.
508 * @xqspi: xqspi is a pointer to the GQSPI instance
509 * @spimode: spimode - SPI or DUAL or QUAD.
510 * Return: Mask to set desired SPI mode in GENFIFO entry.
512 static inline u32
zynqmp_qspi_selectspimode(struct zynqmp_qspi
*xqspi
,
518 case GQSPI_SELECT_MODE_DUALSPI
:
519 mask
= GQSPI_GENFIFO_MODE_DUALSPI
;
521 case GQSPI_SELECT_MODE_QUADSPI
:
522 mask
= GQSPI_GENFIFO_MODE_QUADSPI
;
524 case GQSPI_SELECT_MODE_SPI
:
525 mask
= GQSPI_GENFIFO_MODE_SPI
;
528 dev_warn(xqspi
->dev
, "Invalid SPI mode\n");
535 * zynqmp_qspi_config_op - Configure QSPI controller for specified
537 * @xqspi: Pointer to the zynqmp_qspi structure
538 * @qspi: Pointer to the spi_device structure
540 * Sets the operational mode of QSPI controller for the next QSPI transfer and
541 * sets the requested clock frequency.
546 * If the requested frequency is not an exact match with what can be
547 * obtained using the pre-scalar value, the driver sets the clock
548 * frequency which is lower than the requested frequency (maximum lower)
551 * If the requested frequency is higher or lower than that is supported
552 * by the QSPI controller the driver will set the highest or lowest
553 * frequency supported by controller.
555 static int zynqmp_qspi_config_op(struct zynqmp_qspi
*xqspi
,
556 struct spi_device
*qspi
)
559 u32 config_reg
, req_speed_hz
, baud_rate_val
= 0;
561 req_speed_hz
= qspi
->max_speed_hz
;
563 if (xqspi
->speed_hz
!= req_speed_hz
) {
564 xqspi
->speed_hz
= req_speed_hz
;
566 /* Set the clock frequency */
567 /* If req_speed_hz == 0, default to lowest speed */
568 clk_rate
= clk_get_rate(xqspi
->refclk
);
570 while ((baud_rate_val
< GQSPI_BAUD_DIV_MAX
) &&
572 (GQSPI_BAUD_DIV_SHIFT
<< baud_rate_val
)) >
576 config_reg
= zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
);
578 config_reg
&= ~GQSPI_CFG_BAUD_RATE_DIV_MASK
;
579 config_reg
|= (baud_rate_val
<< GQSPI_CFG_BAUD_RATE_DIV_SHIFT
);
580 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
, config_reg
);
581 zynqmp_qspi_set_tapdelay(xqspi
, baud_rate_val
);
587 * zynqmp_qspi_setup_op - Configure the QSPI controller
588 * @qspi: Pointer to the spi_device structure
590 * Sets the operational mode of QSPI controller for the next QSPI transfer,
591 * baud rate and divisor value to setup the requested qspi clock.
593 * Return: 0 on success; error value otherwise.
595 static int zynqmp_qspi_setup_op(struct spi_device
*qspi
)
597 struct spi_controller
*ctlr
= qspi
->controller
;
598 struct zynqmp_qspi
*xqspi
= spi_controller_get_devdata(ctlr
);
603 zynqmp_gqspi_write(xqspi
, GQSPI_EN_OFST
, GQSPI_EN_MASK
);
609 * zynqmp_qspi_filltxfifo - Fills the TX FIFO as long as there is room in
610 * the FIFO or the bytes required to be
612 * @xqspi: Pointer to the zynqmp_qspi structure
613 * @size: Number of bytes to be copied from TX buffer to TX FIFO
615 static void zynqmp_qspi_filltxfifo(struct zynqmp_qspi
*xqspi
, int size
)
617 u32 count
= 0, intermediate
;
619 while ((xqspi
->bytes_to_transfer
> 0) && (count
< size
) && (xqspi
->txbuf
)) {
620 if (xqspi
->bytes_to_transfer
>= 4) {
621 memcpy(&intermediate
, xqspi
->txbuf
, 4);
623 xqspi
->bytes_to_transfer
-= 4;
626 memcpy(&intermediate
, xqspi
->txbuf
,
627 xqspi
->bytes_to_transfer
);
628 xqspi
->txbuf
+= xqspi
->bytes_to_transfer
;
629 xqspi
->bytes_to_transfer
= 0;
630 count
+= xqspi
->bytes_to_transfer
;
632 zynqmp_gqspi_write(xqspi
, GQSPI_TXD_OFST
, intermediate
);
637 * zynqmp_qspi_readrxfifo - Fills the RX FIFO as long as there is room in
639 * @xqspi: Pointer to the zynqmp_qspi structure
640 * @size: Number of bytes to be copied from RX buffer to RX FIFO
642 static void zynqmp_qspi_readrxfifo(struct zynqmp_qspi
*xqspi
, u32 size
)
647 while ((count
< size
) && (xqspi
->bytes_to_receive
> 0)) {
648 if (xqspi
->bytes_to_receive
>= 4) {
649 (*(u32
*)xqspi
->rxbuf
) =
650 zynqmp_gqspi_read(xqspi
, GQSPI_RXD_OFST
);
652 xqspi
->bytes_to_receive
-= 4;
655 data
= zynqmp_gqspi_read(xqspi
, GQSPI_RXD_OFST
);
656 count
+= xqspi
->bytes_to_receive
;
657 zynqmp_qspi_copy_read_data(xqspi
, data
,
658 xqspi
->bytes_to_receive
);
659 xqspi
->bytes_to_receive
= 0;
665 * zynqmp_qspi_fillgenfifo - Fills the GENFIFO.
666 * @xqspi: Pointer to the zynqmp_qspi structure
667 * @nbits: Transfer/Receive buswidth.
668 * @genfifoentry: Variable in which GENFIFO mask is saved
670 static void zynqmp_qspi_fillgenfifo(struct zynqmp_qspi
*xqspi
, u8 nbits
,
673 u32 transfer_len
= 0;
676 genfifoentry
&= ~GQSPI_GENFIFO_RX
;
677 genfifoentry
|= GQSPI_GENFIFO_DATA_XFER
;
678 genfifoentry
|= GQSPI_GENFIFO_TX
;
679 transfer_len
= xqspi
->bytes_to_transfer
;
680 } else if (xqspi
->rxbuf
) {
681 genfifoentry
&= ~GQSPI_GENFIFO_TX
;
682 genfifoentry
|= GQSPI_GENFIFO_DATA_XFER
;
683 genfifoentry
|= GQSPI_GENFIFO_RX
;
684 if (xqspi
->mode
== GQSPI_MODE_DMA
)
685 transfer_len
= xqspi
->dma_rx_bytes
;
687 transfer_len
= xqspi
->bytes_to_receive
;
689 /* Sending dummy circles here */
690 genfifoentry
&= ~(GQSPI_GENFIFO_TX
| GQSPI_GENFIFO_RX
);
691 genfifoentry
|= GQSPI_GENFIFO_DATA_XFER
;
692 transfer_len
= xqspi
->bytes_to_transfer
;
694 genfifoentry
|= zynqmp_qspi_selectspimode(xqspi
, nbits
);
695 xqspi
->genfifoentry
= genfifoentry
;
697 if ((transfer_len
) < GQSPI_GENFIFO_IMM_DATA_MASK
) {
698 genfifoentry
&= ~GQSPI_GENFIFO_IMM_DATA_MASK
;
699 genfifoentry
|= transfer_len
;
700 zynqmp_gqspi_write(xqspi
, GQSPI_GEN_FIFO_OFST
, genfifoentry
);
702 int tempcount
= transfer_len
;
703 u32 exponent
= 8; /* 2^8 = 256 */
704 u8 imm_data
= tempcount
& 0xFF;
706 tempcount
&= ~(tempcount
& 0xFF);
707 /* Immediate entry */
708 if (tempcount
!= 0) {
709 /* Exponent entries */
710 genfifoentry
|= GQSPI_GENFIFO_EXP
;
711 while (tempcount
!= 0) {
712 if (tempcount
& GQSPI_GENFIFO_EXP_START
) {
714 ~GQSPI_GENFIFO_IMM_DATA_MASK
;
715 genfifoentry
|= exponent
;
716 zynqmp_gqspi_write(xqspi
,
720 tempcount
= tempcount
>> 1;
725 genfifoentry
&= ~GQSPI_GENFIFO_EXP
;
726 genfifoentry
&= ~GQSPI_GENFIFO_IMM_DATA_MASK
;
727 genfifoentry
|= (u8
)(imm_data
& 0xFF);
728 zynqmp_gqspi_write(xqspi
, GQSPI_GEN_FIFO_OFST
,
732 if (xqspi
->mode
== GQSPI_MODE_IO
&& xqspi
->rxbuf
) {
733 /* Dummy generic FIFO entry */
734 zynqmp_gqspi_write(xqspi
, GQSPI_GEN_FIFO_OFST
, 0x0);
739 * zynqmp_process_dma_irq - Handler for DMA done interrupt of QSPI
741 * @xqspi: zynqmp_qspi instance pointer
743 * This function handles DMA interrupt only.
745 static void zynqmp_process_dma_irq(struct zynqmp_qspi
*xqspi
)
747 u32 config_reg
, genfifoentry
;
749 dma_unmap_single(xqspi
->dev
, xqspi
->dma_addr
,
750 xqspi
->dma_rx_bytes
, DMA_FROM_DEVICE
);
751 xqspi
->rxbuf
+= xqspi
->dma_rx_bytes
;
752 xqspi
->bytes_to_receive
-= xqspi
->dma_rx_bytes
;
753 xqspi
->dma_rx_bytes
= 0;
755 /* Disabling the DMA interrupts */
756 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_I_DIS_OFST
,
757 GQSPI_QSPIDMA_DST_I_EN_DONE_MASK
);
759 if (xqspi
->bytes_to_receive
> 0) {
760 /* Switch to IO mode,for remaining bytes to receive */
761 config_reg
= zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
);
762 config_reg
&= ~GQSPI_CFG_MODE_EN_MASK
;
763 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
, config_reg
);
765 /* Initiate the transfer of remaining bytes */
766 genfifoentry
= xqspi
->genfifoentry
;
767 genfifoentry
|= xqspi
->bytes_to_receive
;
768 zynqmp_gqspi_write(xqspi
, GQSPI_GEN_FIFO_OFST
, genfifoentry
);
770 /* Dummy generic FIFO entry */
771 zynqmp_gqspi_write(xqspi
, GQSPI_GEN_FIFO_OFST
, 0x0);
774 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
775 (zynqmp_gqspi_read(xqspi
,
777 GQSPI_CFG_START_GEN_FIFO_MASK
));
779 /* Enable the RX interrupts for IO mode */
780 zynqmp_gqspi_write(xqspi
, GQSPI_IER_OFST
,
781 GQSPI_IER_GENFIFOEMPTY_MASK
|
782 GQSPI_IER_RXNEMPTY_MASK
|
783 GQSPI_IER_RXEMPTY_MASK
);
788 * zynqmp_qspi_irq - Interrupt service routine of the QSPI controller
790 * @dev_id: Pointer to the xqspi structure
792 * This function handles TX empty only.
793 * On TX empty interrupt this function reads the received data from RX FIFO
794 * and fills the TX FIFO if there is any data remaining to be transferred.
796 * Return: IRQ_HANDLED when interrupt is handled
797 * IRQ_NONE otherwise.
799 static irqreturn_t
zynqmp_qspi_irq(int irq
, void *dev_id
)
801 struct zynqmp_qspi
*xqspi
= (struct zynqmp_qspi
*)dev_id
;
802 irqreturn_t ret
= IRQ_NONE
;
803 u32 status
, mask
, dma_status
= 0;
805 status
= zynqmp_gqspi_read(xqspi
, GQSPI_ISR_OFST
);
806 zynqmp_gqspi_write(xqspi
, GQSPI_ISR_OFST
, status
);
807 mask
= (status
& ~(zynqmp_gqspi_read(xqspi
, GQSPI_IMASK_OFST
)));
809 /* Read and clear DMA status */
810 if (xqspi
->mode
== GQSPI_MODE_DMA
) {
812 zynqmp_gqspi_read(xqspi
, GQSPI_QSPIDMA_DST_I_STS_OFST
);
813 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_I_STS_OFST
,
817 if (mask
& GQSPI_ISR_TXNOT_FULL_MASK
) {
818 zynqmp_qspi_filltxfifo(xqspi
, GQSPI_TX_FIFO_FILL
);
822 if (dma_status
& GQSPI_QSPIDMA_DST_I_STS_DONE_MASK
) {
823 zynqmp_process_dma_irq(xqspi
);
825 } else if (!(mask
& GQSPI_IER_RXEMPTY_MASK
) &&
826 (mask
& GQSPI_IER_GENFIFOEMPTY_MASK
)) {
827 zynqmp_qspi_readrxfifo(xqspi
, GQSPI_RX_FIFO_FILL
);
831 if (xqspi
->bytes_to_receive
== 0 && xqspi
->bytes_to_transfer
== 0 &&
832 ((status
& GQSPI_IRQ_MASK
) == GQSPI_IRQ_MASK
)) {
833 zynqmp_gqspi_write(xqspi
, GQSPI_IDR_OFST
, GQSPI_ISR_IDR_MASK
);
834 complete(&xqspi
->data_completion
);
841 * zynqmp_qspi_setuprxdma - This function sets up the RX DMA operation
842 * @xqspi: xqspi is a pointer to the GQSPI instance.
844 * Return: 0 on success; error value otherwise.
846 static int zynqmp_qspi_setuprxdma(struct zynqmp_qspi
*xqspi
)
848 u32 rx_bytes
, rx_rem
, config_reg
;
850 u64 dma_align
= (u64
)(uintptr_t)xqspi
->rxbuf
;
852 if (xqspi
->bytes_to_receive
< 8 ||
853 ((dma_align
& GQSPI_DMA_UNALIGN
) != 0x0)) {
854 /* Setting to IO mode */
855 config_reg
= zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
);
856 config_reg
&= ~GQSPI_CFG_MODE_EN_MASK
;
857 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
, config_reg
);
858 xqspi
->mode
= GQSPI_MODE_IO
;
859 xqspi
->dma_rx_bytes
= 0;
863 rx_rem
= xqspi
->bytes_to_receive
% 4;
864 rx_bytes
= (xqspi
->bytes_to_receive
- rx_rem
);
866 addr
= dma_map_single(xqspi
->dev
, (void *)xqspi
->rxbuf
,
867 rx_bytes
, DMA_FROM_DEVICE
);
868 if (dma_mapping_error(xqspi
->dev
, addr
)) {
869 dev_err(xqspi
->dev
, "ERR:rxdma:memory not mapped\n");
873 xqspi
->dma_rx_bytes
= rx_bytes
;
874 xqspi
->dma_addr
= addr
;
875 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_ADDR_OFST
,
876 (u32
)(addr
& 0xffffffff));
877 addr
= ((addr
>> 16) >> 16);
878 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_ADDR_MSB_OFST
,
879 ((u32
)addr
) & 0xfff);
881 /* Enabling the DMA mode */
882 config_reg
= zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
);
883 config_reg
&= ~GQSPI_CFG_MODE_EN_MASK
;
884 config_reg
|= GQSPI_CFG_MODE_EN_DMA_MASK
;
885 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
, config_reg
);
887 /* Switch to DMA mode */
888 xqspi
->mode
= GQSPI_MODE_DMA
;
890 /* Write the number of bytes to transfer */
891 zynqmp_gqspi_write(xqspi
, GQSPI_QSPIDMA_DST_SIZE_OFST
, rx_bytes
);
897 * zynqmp_qspi_write_op - This function sets up the GENFIFO entries,
898 * TX FIFO, and fills the TX FIFO with as many
900 * @xqspi: Pointer to the GQSPI instance.
901 * @tx_nbits: Transfer buswidth.
902 * @genfifoentry: Variable in which GENFIFO mask is returned
903 * to calling function
905 static void zynqmp_qspi_write_op(struct zynqmp_qspi
*xqspi
, u8 tx_nbits
,
910 zynqmp_qspi_fillgenfifo(xqspi
, tx_nbits
, genfifoentry
);
911 zynqmp_qspi_filltxfifo(xqspi
, GQSPI_TXD_DEPTH
);
912 if (xqspi
->mode
== GQSPI_MODE_DMA
) {
913 config_reg
= zynqmp_gqspi_read(xqspi
,
915 config_reg
&= ~GQSPI_CFG_MODE_EN_MASK
;
916 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
918 xqspi
->mode
= GQSPI_MODE_IO
;
923 * zynqmp_qspi_read_op - This function sets up the GENFIFO entries and
925 * @xqspi: xqspi is a pointer to the GQSPI instance.
926 * @rx_nbits: Receive buswidth.
927 * @genfifoentry: genfifoentry is pointer to the variable in which
928 * GENFIFO mask is returned to calling function
930 * Return: 0 on success; error value otherwise.
932 static int zynqmp_qspi_read_op(struct zynqmp_qspi
*xqspi
, u8 rx_nbits
,
937 ret
= zynqmp_qspi_setuprxdma(xqspi
);
940 zynqmp_qspi_fillgenfifo(xqspi
, rx_nbits
, genfifoentry
);
946 * zynqmp_qspi_suspend - Suspend method for the QSPI driver
947 * @dev: Address of the platform_device structure
949 * This function stops the QSPI driver queue and disables the QSPI controller
953 static int __maybe_unused
zynqmp_qspi_suspend(struct device
*dev
)
955 struct zynqmp_qspi
*xqspi
= dev_get_drvdata(dev
);
956 struct spi_controller
*ctlr
= xqspi
->ctlr
;
959 ret
= spi_controller_suspend(ctlr
);
963 zynqmp_gqspi_write(xqspi
, GQSPI_EN_OFST
, 0x0);
969 * zynqmp_qspi_resume - Resume method for the QSPI driver
970 * @dev: Address of the platform_device structure
972 * The function starts the QSPI driver queue and initializes the QSPI
975 * Return: 0 on success; error value otherwise
977 static int __maybe_unused
zynqmp_qspi_resume(struct device
*dev
)
979 struct zynqmp_qspi
*xqspi
= dev_get_drvdata(dev
);
980 struct spi_controller
*ctlr
= xqspi
->ctlr
;
982 zynqmp_gqspi_write(xqspi
, GQSPI_EN_OFST
, GQSPI_EN_MASK
);
984 spi_controller_resume(ctlr
);
990 * zynqmp_runtime_suspend - Runtime suspend method for the SPI driver
991 * @dev: Address of the platform_device structure
993 * This function disables the clocks
997 static int __maybe_unused
zynqmp_runtime_suspend(struct device
*dev
)
999 struct zynqmp_qspi
*xqspi
= dev_get_drvdata(dev
);
1001 clk_disable_unprepare(xqspi
->refclk
);
1002 clk_disable_unprepare(xqspi
->pclk
);
1008 * zynqmp_runtime_resume - Runtime resume method for the SPI driver
1009 * @dev: Address of the platform_device structure
1011 * This function enables the clocks
1013 * Return: 0 on success and error value on error
1015 static int __maybe_unused
zynqmp_runtime_resume(struct device
*dev
)
1017 struct zynqmp_qspi
*xqspi
= dev_get_drvdata(dev
);
1020 ret
= clk_prepare_enable(xqspi
->pclk
);
1022 dev_err(dev
, "Cannot enable APB clock.\n");
1026 ret
= clk_prepare_enable(xqspi
->refclk
);
1028 dev_err(dev
, "Cannot enable device clock.\n");
1029 clk_disable_unprepare(xqspi
->pclk
);
1036 static unsigned long zynqmp_qspi_timeout(struct zynqmp_qspi
*xqspi
, u8 bits
,
1037 unsigned long bytes
)
1039 unsigned long timeout
;
1041 /* Assume we are at most 2x slower than the nominal bus speed */
1042 timeout
= mult_frac(bytes
, 2 * 8 * MSEC_PER_SEC
,
1043 bits
* xqspi
->speed_hz
);
1044 /* And add 100 ms for scheduling delays */
1045 return msecs_to_jiffies(timeout
+ 100);
1049 * zynqmp_qspi_exec_op() - Initiates the QSPI transfer
1050 * @mem: The SPI memory
1051 * @op: The memory operation to execute
1053 * Executes a memory operation.
1055 * This function first selects the chip and starts the memory operation.
1057 * Return: 0 in case of success, a negative error code otherwise.
1059 static int zynqmp_qspi_exec_op(struct spi_mem
*mem
,
1060 const struct spi_mem_op
*op
)
1062 struct zynqmp_qspi
*xqspi
= spi_controller_get_devdata
1063 (mem
->spi
->controller
);
1064 unsigned long timeout
;
1066 u32 genfifoentry
= 0;
1067 u16 opcode
= op
->cmd
.opcode
;
1070 dev_dbg(xqspi
->dev
, "cmd:%#x mode:%d.%d.%d.%d\n",
1071 op
->cmd
.opcode
, op
->cmd
.buswidth
, op
->addr
.buswidth
,
1072 op
->dummy
.buswidth
, op
->data
.buswidth
);
1074 mutex_lock(&xqspi
->op_lock
);
1075 zynqmp_qspi_config_op(xqspi
, mem
->spi
);
1076 zynqmp_qspi_chipselect(mem
->spi
, false);
1077 genfifoentry
|= xqspi
->genfifocs
;
1078 genfifoentry
|= xqspi
->genfifobus
;
1080 if (op
->cmd
.opcode
) {
1081 reinit_completion(&xqspi
->data_completion
);
1082 xqspi
->txbuf
= &opcode
;
1083 xqspi
->rxbuf
= NULL
;
1084 xqspi
->bytes_to_transfer
= op
->cmd
.nbytes
;
1085 xqspi
->bytes_to_receive
= 0;
1086 zynqmp_qspi_write_op(xqspi
, op
->cmd
.buswidth
, genfifoentry
);
1087 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
1088 zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
) |
1089 GQSPI_CFG_START_GEN_FIFO_MASK
);
1090 zynqmp_gqspi_write(xqspi
, GQSPI_IER_OFST
,
1091 GQSPI_IER_GENFIFOEMPTY_MASK
|
1092 GQSPI_IER_TXNOT_FULL_MASK
);
1093 timeout
= zynqmp_qspi_timeout(xqspi
, op
->cmd
.buswidth
,
1095 if (!wait_for_completion_timeout(&xqspi
->data_completion
,
1102 if (op
->addr
.nbytes
) {
1103 xqspi
->txbuf
= &opaddr
;
1104 for (i
= 0; i
< op
->addr
.nbytes
; i
++) {
1105 *(((u8
*)xqspi
->txbuf
) + i
) = op
->addr
.val
>>
1106 (8 * (op
->addr
.nbytes
- i
- 1));
1109 reinit_completion(&xqspi
->data_completion
);
1110 xqspi
->rxbuf
= NULL
;
1111 xqspi
->bytes_to_transfer
= op
->addr
.nbytes
;
1112 xqspi
->bytes_to_receive
= 0;
1113 zynqmp_qspi_write_op(xqspi
, op
->addr
.buswidth
, genfifoentry
);
1114 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
1115 zynqmp_gqspi_read(xqspi
,
1116 GQSPI_CONFIG_OFST
) |
1117 GQSPI_CFG_START_GEN_FIFO_MASK
);
1118 zynqmp_gqspi_write(xqspi
, GQSPI_IER_OFST
,
1119 GQSPI_IER_TXEMPTY_MASK
|
1120 GQSPI_IER_GENFIFOEMPTY_MASK
|
1121 GQSPI_IER_TXNOT_FULL_MASK
);
1122 timeout
= zynqmp_qspi_timeout(xqspi
, op
->addr
.buswidth
,
1124 if (!wait_for_completion_timeout(&xqspi
->data_completion
,
1131 if (op
->dummy
.nbytes
) {
1132 xqspi
->txbuf
= NULL
;
1133 xqspi
->rxbuf
= NULL
;
1135 * xqspi->bytes_to_transfer here represents the dummy circles
1136 * which need to be sent.
1138 xqspi
->bytes_to_transfer
= op
->dummy
.nbytes
* 8 / op
->dummy
.buswidth
;
1139 xqspi
->bytes_to_receive
= 0;
1141 * Using op->data.buswidth instead of op->dummy.buswidth here because
1142 * we need to use it to configure the correct SPI mode.
1144 zynqmp_qspi_write_op(xqspi
, op
->data
.buswidth
,
1146 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
1147 zynqmp_gqspi_read(xqspi
, GQSPI_CONFIG_OFST
) |
1148 GQSPI_CFG_START_GEN_FIFO_MASK
);
1151 if (op
->data
.nbytes
) {
1152 reinit_completion(&xqspi
->data_completion
);
1153 if (op
->data
.dir
== SPI_MEM_DATA_OUT
) {
1154 xqspi
->txbuf
= (u8
*)op
->data
.buf
.out
;
1155 xqspi
->rxbuf
= NULL
;
1156 xqspi
->bytes_to_transfer
= op
->data
.nbytes
;
1157 xqspi
->bytes_to_receive
= 0;
1158 zynqmp_qspi_write_op(xqspi
, op
->data
.buswidth
,
1160 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
1162 (xqspi
, GQSPI_CONFIG_OFST
) |
1163 GQSPI_CFG_START_GEN_FIFO_MASK
);
1164 zynqmp_gqspi_write(xqspi
, GQSPI_IER_OFST
,
1165 GQSPI_IER_TXEMPTY_MASK
|
1166 GQSPI_IER_GENFIFOEMPTY_MASK
|
1167 GQSPI_IER_TXNOT_FULL_MASK
);
1169 xqspi
->txbuf
= NULL
;
1170 xqspi
->rxbuf
= (u8
*)op
->data
.buf
.in
;
1171 xqspi
->bytes_to_receive
= op
->data
.nbytes
;
1172 xqspi
->bytes_to_transfer
= 0;
1173 err
= zynqmp_qspi_read_op(xqspi
, op
->data
.buswidth
,
1178 zynqmp_gqspi_write(xqspi
, GQSPI_CONFIG_OFST
,
1180 (xqspi
, GQSPI_CONFIG_OFST
) |
1181 GQSPI_CFG_START_GEN_FIFO_MASK
);
1182 if (xqspi
->mode
== GQSPI_MODE_DMA
) {
1184 (xqspi
, GQSPI_QSPIDMA_DST_I_EN_OFST
,
1185 GQSPI_QSPIDMA_DST_I_EN_DONE_MASK
);
1187 zynqmp_gqspi_write(xqspi
, GQSPI_IER_OFST
,
1188 GQSPI_IER_GENFIFOEMPTY_MASK
|
1189 GQSPI_IER_RXNEMPTY_MASK
|
1190 GQSPI_IER_RXEMPTY_MASK
);
1193 timeout
= zynqmp_qspi_timeout(xqspi
, op
->data
.buswidth
,
1195 if (!wait_for_completion_timeout(&xqspi
->data_completion
, timeout
))
1201 zynqmp_qspi_chipselect(mem
->spi
, true);
1202 mutex_unlock(&xqspi
->op_lock
);
1207 static const struct dev_pm_ops zynqmp_qspi_dev_pm_ops
= {
1208 SET_RUNTIME_PM_OPS(zynqmp_runtime_suspend
,
1209 zynqmp_runtime_resume
, NULL
)
1210 SET_SYSTEM_SLEEP_PM_OPS(zynqmp_qspi_suspend
, zynqmp_qspi_resume
)
1213 static const struct qspi_platform_data versal_qspi_def
= {
1214 .quirks
= QSPI_QUIRK_HAS_TAPDELAY
,
1217 static const struct of_device_id zynqmp_qspi_of_match
[] = {
1218 { .compatible
= "xlnx,zynqmp-qspi-1.0"},
1219 { .compatible
= "xlnx,versal-qspi-1.0", .data
= &versal_qspi_def
},
1220 { /* End of table */ }
1223 static const struct spi_controller_mem_ops zynqmp_qspi_mem_ops
= {
1224 .exec_op
= zynqmp_qspi_exec_op
,
1228 * zynqmp_qspi_probe - Probe method for the QSPI driver
1229 * @pdev: Pointer to the platform_device structure
1231 * This function initializes the driver data structures and the hardware.
1233 * Return: 0 on success; error value otherwise
1235 static int zynqmp_qspi_probe(struct platform_device
*pdev
)
1238 struct spi_controller
*ctlr
;
1239 struct zynqmp_qspi
*xqspi
;
1240 struct device
*dev
= &pdev
->dev
;
1241 struct device_node
*np
= dev
->of_node
;
1243 const struct qspi_platform_data
*p_data
;
1245 ctlr
= devm_spi_alloc_host(&pdev
->dev
, sizeof(*xqspi
));
1249 xqspi
= spi_controller_get_devdata(ctlr
);
1252 platform_set_drvdata(pdev
, xqspi
);
1254 p_data
= of_device_get_match_data(&pdev
->dev
);
1255 if (p_data
&& (p_data
->quirks
& QSPI_QUIRK_HAS_TAPDELAY
))
1256 xqspi
->has_tapdelay
= true;
1258 xqspi
->regs
= devm_platform_ioremap_resource(pdev
, 0);
1259 if (IS_ERR(xqspi
->regs
))
1260 return PTR_ERR(xqspi
->regs
);
1262 xqspi
->pclk
= devm_clk_get(&pdev
->dev
, "pclk");
1263 if (IS_ERR(xqspi
->pclk
))
1264 return dev_err_probe(dev
, PTR_ERR(xqspi
->pclk
),
1265 "pclk clock not found.\n");
1267 xqspi
->refclk
= devm_clk_get(&pdev
->dev
, "ref_clk");
1268 if (IS_ERR(xqspi
->refclk
))
1269 return dev_err_probe(dev
, PTR_ERR(xqspi
->refclk
),
1270 "ref_clk clock not found.\n");
1272 ret
= clk_prepare_enable(xqspi
->pclk
);
1274 return dev_err_probe(dev
, ret
, "Unable to enable APB clock.\n");
1276 ret
= clk_prepare_enable(xqspi
->refclk
);
1278 dev_err(dev
, "Unable to enable device clock.\n");
1282 init_completion(&xqspi
->data_completion
);
1284 mutex_init(&xqspi
->op_lock
);
1286 pm_runtime_use_autosuspend(&pdev
->dev
);
1287 pm_runtime_set_autosuspend_delay(&pdev
->dev
, SPI_AUTOSUSPEND_TIMEOUT
);
1288 pm_runtime_set_active(&pdev
->dev
);
1289 pm_runtime_enable(&pdev
->dev
);
1291 ret
= pm_runtime_get_sync(&pdev
->dev
);
1293 dev_err(&pdev
->dev
, "Failed to pm_runtime_get_sync: %d\n", ret
);
1297 ctlr
->mode_bits
= SPI_CPOL
| SPI_CPHA
| SPI_RX_DUAL
| SPI_RX_QUAD
|
1298 SPI_TX_DUAL
| SPI_TX_QUAD
;
1299 ctlr
->max_speed_hz
= clk_get_rate(xqspi
->refclk
) / 2;
1300 xqspi
->speed_hz
= ctlr
->max_speed_hz
;
1302 /* QSPI controller initializations */
1303 zynqmp_qspi_init_hw(xqspi
);
1305 xqspi
->irq
= platform_get_irq(pdev
, 0);
1306 if (xqspi
->irq
< 0) {
1310 ret
= devm_request_irq(&pdev
->dev
, xqspi
->irq
, zynqmp_qspi_irq
,
1311 0, pdev
->name
, xqspi
);
1314 dev_err(dev
, "request_irq failed\n");
1318 ret
= dma_set_mask(&pdev
->dev
, DMA_BIT_MASK(44));
1322 ret
= of_property_read_u32(np
, "num-cs", &num_cs
);
1324 ctlr
->num_chipselect
= GQSPI_DEFAULT_NUM_CS
;
1325 } else if (num_cs
> GQSPI_MAX_NUM_CS
) {
1327 dev_err(&pdev
->dev
, "only %d chip selects are available\n",
1331 ctlr
->num_chipselect
= num_cs
;
1334 ctlr
->bits_per_word_mask
= SPI_BPW_MASK(8);
1335 ctlr
->mem_ops
= &zynqmp_qspi_mem_ops
;
1336 ctlr
->setup
= zynqmp_qspi_setup_op
;
1337 ctlr
->bits_per_word_mask
= SPI_BPW_MASK(8);
1338 ctlr
->dev
.of_node
= np
;
1339 ctlr
->auto_runtime_pm
= true;
1341 ret
= devm_spi_register_controller(&pdev
->dev
, ctlr
);
1343 dev_err(&pdev
->dev
, "spi_register_controller failed\n");
1347 pm_runtime_mark_last_busy(&pdev
->dev
);
1348 pm_runtime_put_autosuspend(&pdev
->dev
);
1353 pm_runtime_disable(&pdev
->dev
);
1354 pm_runtime_dont_use_autosuspend(&pdev
->dev
);
1355 pm_runtime_put_noidle(&pdev
->dev
);
1356 pm_runtime_set_suspended(&pdev
->dev
);
1357 clk_disable_unprepare(xqspi
->refclk
);
1359 clk_disable_unprepare(xqspi
->pclk
);
1365 * zynqmp_qspi_remove - Remove method for the QSPI driver
1366 * @pdev: Pointer to the platform_device structure
1368 * This function is called if a device is physically removed from the system or
1369 * if the driver module is being unloaded. It frees all resources allocated to
1374 static void zynqmp_qspi_remove(struct platform_device
*pdev
)
1376 struct zynqmp_qspi
*xqspi
= platform_get_drvdata(pdev
);
1378 pm_runtime_get_sync(&pdev
->dev
);
1380 zynqmp_gqspi_write(xqspi
, GQSPI_EN_OFST
, 0x0);
1382 pm_runtime_disable(&pdev
->dev
);
1383 pm_runtime_dont_use_autosuspend(&pdev
->dev
);
1384 pm_runtime_put_noidle(&pdev
->dev
);
1385 pm_runtime_set_suspended(&pdev
->dev
);
1386 clk_disable_unprepare(xqspi
->refclk
);
1387 clk_disable_unprepare(xqspi
->pclk
);
1390 MODULE_DEVICE_TABLE(of
, zynqmp_qspi_of_match
);
1392 static struct platform_driver zynqmp_qspi_driver
= {
1393 .probe
= zynqmp_qspi_probe
,
1394 .remove
= zynqmp_qspi_remove
,
1396 .name
= "zynqmp-qspi",
1397 .of_match_table
= zynqmp_qspi_of_match
,
1398 .pm
= &zynqmp_qspi_dev_pm_ops
,
1402 module_platform_driver(zynqmp_qspi_driver
);
1404 MODULE_AUTHOR("Xilinx, Inc.");
1405 MODULE_DESCRIPTION("Xilinx Zynqmp QSPI driver");
1406 MODULE_LICENSE("GPL");