Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[linux-2.6-microblaze.git] / drivers / spi / spi-tegra210-quad.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 //
3 // Copyright (C) 2020 NVIDIA CORPORATION.
4
5 #include <linux/clk.h>
6 #include <linux/completion.h>
7 #include <linux/delay.h>
8 #include <linux/dmaengine.h>
9 #include <linux/dma-mapping.h>
10 #include <linux/dmapool.h>
11 #include <linux/err.h>
12 #include <linux/interrupt.h>
13 #include <linux/io.h>
14 #include <linux/iopoll.h>
15 #include <linux/kernel.h>
16 #include <linux/kthread.h>
17 #include <linux/module.h>
18 #include <linux/platform_device.h>
19 #include <linux/pm_runtime.h>
20 #include <linux/of.h>
21 #include <linux/of_device.h>
22 #include <linux/reset.h>
23 #include <linux/spi/spi.h>
24
25 #define QSPI_COMMAND1                           0x000
26 #define QSPI_BIT_LENGTH(x)                      (((x) & 0x1f) << 0)
27 #define QSPI_PACKED                             BIT(5)
28 #define QSPI_INTERFACE_WIDTH_MASK               (0x03 << 7)
29 #define QSPI_INTERFACE_WIDTH(x)                 (((x) & 0x03) << 7)
30 #define QSPI_INTERFACE_WIDTH_SINGLE             QSPI_INTERFACE_WIDTH(0)
31 #define QSPI_INTERFACE_WIDTH_DUAL               QSPI_INTERFACE_WIDTH(1)
32 #define QSPI_INTERFACE_WIDTH_QUAD               QSPI_INTERFACE_WIDTH(2)
33 #define QSPI_SDR_DDR_SEL                        BIT(9)
34 #define QSPI_TX_EN                              BIT(11)
35 #define QSPI_RX_EN                              BIT(12)
36 #define QSPI_CS_SW_VAL                          BIT(20)
37 #define QSPI_CS_SW_HW                           BIT(21)
38 #define QSPI_CONTROL_MODE_0                     (0 << 28)
39 #define QSPI_CONTROL_MODE_3                     (3 << 28)
40 #define QSPI_CONTROL_MODE_MASK                  (3 << 28)
41 #define QSPI_M_S                                BIT(30)
42 #define QSPI_PIO                                BIT(31)
43
44 #define QSPI_COMMAND2                           0x004
45 #define QSPI_TX_TAP_DELAY(x)                    (((x) & 0x3f) << 10)
46 #define QSPI_RX_TAP_DELAY(x)                    (((x) & 0xff) << 0)
47
48 #define QSPI_CS_TIMING1                         0x008
49 #define QSPI_SETUP_HOLD(setup, hold)            (((setup) << 4) | (hold))
50
51 #define QSPI_CS_TIMING2                         0x00c
52 #define CYCLES_BETWEEN_PACKETS_0(x)             (((x) & 0x1f) << 0)
53 #define CS_ACTIVE_BETWEEN_PACKETS_0             BIT(5)
54
55 #define QSPI_TRANS_STATUS                       0x010
56 #define QSPI_BLK_CNT(val)                       (((val) >> 0) & 0xffff)
57 #define QSPI_RDY                                BIT(30)
58
59 #define QSPI_FIFO_STATUS                        0x014
60 #define QSPI_RX_FIFO_EMPTY                      BIT(0)
61 #define QSPI_RX_FIFO_FULL                       BIT(1)
62 #define QSPI_TX_FIFO_EMPTY                      BIT(2)
63 #define QSPI_TX_FIFO_FULL                       BIT(3)
64 #define QSPI_RX_FIFO_UNF                        BIT(4)
65 #define QSPI_RX_FIFO_OVF                        BIT(5)
66 #define QSPI_TX_FIFO_UNF                        BIT(6)
67 #define QSPI_TX_FIFO_OVF                        BIT(7)
68 #define QSPI_ERR                                BIT(8)
69 #define QSPI_TX_FIFO_FLUSH                      BIT(14)
70 #define QSPI_RX_FIFO_FLUSH                      BIT(15)
71 #define QSPI_TX_FIFO_EMPTY_COUNT(val)           (((val) >> 16) & 0x7f)
72 #define QSPI_RX_FIFO_FULL_COUNT(val)            (((val) >> 23) & 0x7f)
73
74 #define QSPI_FIFO_ERROR                         (QSPI_RX_FIFO_UNF | \
75                                                  QSPI_RX_FIFO_OVF | \
76                                                  QSPI_TX_FIFO_UNF | \
77                                                  QSPI_TX_FIFO_OVF)
78 #define QSPI_FIFO_EMPTY                         (QSPI_RX_FIFO_EMPTY | \
79                                                  QSPI_TX_FIFO_EMPTY)
80
81 #define QSPI_TX_DATA                            0x018
82 #define QSPI_RX_DATA                            0x01c
83
84 #define QSPI_DMA_CTL                            0x020
85 #define QSPI_TX_TRIG(n)                         (((n) & 0x3) << 15)
86 #define QSPI_TX_TRIG_1                          QSPI_TX_TRIG(0)
87 #define QSPI_TX_TRIG_4                          QSPI_TX_TRIG(1)
88 #define QSPI_TX_TRIG_8                          QSPI_TX_TRIG(2)
89 #define QSPI_TX_TRIG_16                         QSPI_TX_TRIG(3)
90
91 #define QSPI_RX_TRIG(n)                         (((n) & 0x3) << 19)
92 #define QSPI_RX_TRIG_1                          QSPI_RX_TRIG(0)
93 #define QSPI_RX_TRIG_4                          QSPI_RX_TRIG(1)
94 #define QSPI_RX_TRIG_8                          QSPI_RX_TRIG(2)
95 #define QSPI_RX_TRIG_16                         QSPI_RX_TRIG(3)
96
97 #define QSPI_DMA_EN                             BIT(31)
98
99 #define QSPI_DMA_BLK                            0x024
100 #define QSPI_DMA_BLK_SET(x)                     (((x) & 0xffff) << 0)
101
102 #define QSPI_TX_FIFO                            0x108
103 #define QSPI_RX_FIFO                            0x188
104
105 #define QSPI_FIFO_DEPTH                         64
106
107 #define QSPI_INTR_MASK                          0x18c
108 #define QSPI_INTR_RX_FIFO_UNF_MASK              BIT(25)
109 #define QSPI_INTR_RX_FIFO_OVF_MASK              BIT(26)
110 #define QSPI_INTR_TX_FIFO_UNF_MASK              BIT(27)
111 #define QSPI_INTR_TX_FIFO_OVF_MASK              BIT(28)
112 #define QSPI_INTR_RDY_MASK                      BIT(29)
113 #define QSPI_INTR_RX_TX_FIFO_ERR                (QSPI_INTR_RX_FIFO_UNF_MASK | \
114                                                  QSPI_INTR_RX_FIFO_OVF_MASK | \
115                                                  QSPI_INTR_TX_FIFO_UNF_MASK | \
116                                                  QSPI_INTR_TX_FIFO_OVF_MASK)
117
118 #define QSPI_MISC_REG                           0x194
119 #define QSPI_NUM_DUMMY_CYCLE(x)                 (((x) & 0xff) << 0)
120 #define QSPI_DUMMY_CYCLES_MAX                   0xff
121
122 #define DATA_DIR_TX                             BIT(0)
123 #define DATA_DIR_RX                             BIT(1)
124
125 #define QSPI_DMA_TIMEOUT                        (msecs_to_jiffies(1000))
126 #define DEFAULT_QSPI_DMA_BUF_LEN                (64 * 1024)
127
128 struct tegra_qspi_client_data {
129         int tx_clk_tap_delay;
130         int rx_clk_tap_delay;
131 };
132
133 struct tegra_qspi {
134         struct device                           *dev;
135         struct spi_master                       *master;
136         /* lock to protect data accessed by irq */
137         spinlock_t                              lock;
138
139         struct clk                              *clk;
140         struct reset_control                    *rst;
141         void __iomem                            *base;
142         phys_addr_t                             phys;
143         unsigned int                            irq;
144
145         u32                                     cur_speed;
146         unsigned int                            cur_pos;
147         unsigned int                            words_per_32bit;
148         unsigned int                            bytes_per_word;
149         unsigned int                            curr_dma_words;
150         unsigned int                            cur_direction;
151
152         unsigned int                            cur_rx_pos;
153         unsigned int                            cur_tx_pos;
154
155         unsigned int                            dma_buf_size;
156         unsigned int                            max_buf_size;
157         bool                                    is_curr_dma_xfer;
158
159         struct completion                       rx_dma_complete;
160         struct completion                       tx_dma_complete;
161
162         u32                                     tx_status;
163         u32                                     rx_status;
164         u32                                     status_reg;
165         bool                                    is_packed;
166         bool                                    use_dma;
167
168         u32                                     command1_reg;
169         u32                                     dma_control_reg;
170         u32                                     def_command1_reg;
171         u32                                     def_command2_reg;
172         u32                                     spi_cs_timing1;
173         u32                                     spi_cs_timing2;
174         u8                                      dummy_cycles;
175
176         struct completion                       xfer_completion;
177         struct spi_transfer                     *curr_xfer;
178
179         struct dma_chan                         *rx_dma_chan;
180         u32                                     *rx_dma_buf;
181         dma_addr_t                              rx_dma_phys;
182         struct dma_async_tx_descriptor          *rx_dma_desc;
183
184         struct dma_chan                         *tx_dma_chan;
185         u32                                     *tx_dma_buf;
186         dma_addr_t                              tx_dma_phys;
187         struct dma_async_tx_descriptor          *tx_dma_desc;
188 };
189
190 static inline u32 tegra_qspi_readl(struct tegra_qspi *tqspi, unsigned long offset)
191 {
192         return readl(tqspi->base + offset);
193 }
194
195 static inline void tegra_qspi_writel(struct tegra_qspi *tqspi, u32 value, unsigned long offset)
196 {
197         writel(value, tqspi->base + offset);
198
199         /* read back register to make sure that register writes completed */
200         if (offset != QSPI_TX_FIFO)
201                 readl(tqspi->base + QSPI_COMMAND1);
202 }
203
204 static void tegra_qspi_mask_clear_irq(struct tegra_qspi *tqspi)
205 {
206         u32 value;
207
208         /* write 1 to clear status register */
209         value = tegra_qspi_readl(tqspi, QSPI_TRANS_STATUS);
210         tegra_qspi_writel(tqspi, value, QSPI_TRANS_STATUS);
211
212         value = tegra_qspi_readl(tqspi, QSPI_INTR_MASK);
213         if (!(value & QSPI_INTR_RDY_MASK)) {
214                 value |= (QSPI_INTR_RDY_MASK | QSPI_INTR_RX_TX_FIFO_ERR);
215                 tegra_qspi_writel(tqspi, value, QSPI_INTR_MASK);
216         }
217
218         /* clear fifo status error if any */
219         value = tegra_qspi_readl(tqspi, QSPI_FIFO_STATUS);
220         if (value & QSPI_ERR)
221                 tegra_qspi_writel(tqspi, QSPI_ERR | QSPI_FIFO_ERROR, QSPI_FIFO_STATUS);
222 }
223
224 static unsigned int
225 tegra_qspi_calculate_curr_xfer_param(struct tegra_qspi *tqspi, struct spi_transfer *t)
226 {
227         unsigned int max_word, max_len, total_fifo_words;
228         unsigned int remain_len = t->len - tqspi->cur_pos;
229         unsigned int bits_per_word = t->bits_per_word;
230
231         tqspi->bytes_per_word = DIV_ROUND_UP(bits_per_word, 8);
232
233         /*
234          * Tegra QSPI controller supports packed or unpacked mode transfers.
235          * Packed mode is used for data transfers using 8, 16, or 32 bits per
236          * word with a minimum transfer of 1 word and for all other transfers
237          * unpacked mode will be used.
238          */
239
240         if ((bits_per_word == 8 || bits_per_word == 16 ||
241              bits_per_word == 32) && t->len > 3) {
242                 tqspi->is_packed = true;
243                 tqspi->words_per_32bit = 32 / bits_per_word;
244         } else {
245                 tqspi->is_packed = false;
246                 tqspi->words_per_32bit = 1;
247         }
248
249         if (tqspi->is_packed) {
250                 max_len = min(remain_len, tqspi->max_buf_size);
251                 tqspi->curr_dma_words = max_len / tqspi->bytes_per_word;
252                 total_fifo_words = (max_len + 3) / 4;
253         } else {
254                 max_word = (remain_len - 1) / tqspi->bytes_per_word + 1;
255                 max_word = min(max_word, tqspi->max_buf_size / 4);
256                 tqspi->curr_dma_words = max_word;
257                 total_fifo_words = max_word;
258         }
259
260         return total_fifo_words;
261 }
262
263 static unsigned int
264 tegra_qspi_fill_tx_fifo_from_client_txbuf(struct tegra_qspi *tqspi, struct spi_transfer *t)
265 {
266         unsigned int written_words, fifo_words_left, count;
267         unsigned int len, tx_empty_count, max_n_32bit, i;
268         u8 *tx_buf = (u8 *)t->tx_buf + tqspi->cur_tx_pos;
269         u32 fifo_status;
270
271         fifo_status = tegra_qspi_readl(tqspi, QSPI_FIFO_STATUS);
272         tx_empty_count = QSPI_TX_FIFO_EMPTY_COUNT(fifo_status);
273
274         if (tqspi->is_packed) {
275                 fifo_words_left = tx_empty_count * tqspi->words_per_32bit;
276                 written_words = min(fifo_words_left, tqspi->curr_dma_words);
277                 len = written_words * tqspi->bytes_per_word;
278                 max_n_32bit = DIV_ROUND_UP(len, 4);
279                 for (count = 0; count < max_n_32bit; count++) {
280                         u32 x = 0;
281
282                         for (i = 0; (i < 4) && len; i++, len--)
283                                 x |= (u32)(*tx_buf++) << (i * 8);
284                         tegra_qspi_writel(tqspi, x, QSPI_TX_FIFO);
285                 }
286
287                 tqspi->cur_tx_pos += written_words * tqspi->bytes_per_word;
288         } else {
289                 unsigned int write_bytes;
290                 u8 bytes_per_word = tqspi->bytes_per_word;
291
292                 max_n_32bit = min(tqspi->curr_dma_words, tx_empty_count);
293                 written_words = max_n_32bit;
294                 len = written_words * tqspi->bytes_per_word;
295                 if (len > t->len - tqspi->cur_pos)
296                         len = t->len - tqspi->cur_pos;
297                 write_bytes = len;
298                 for (count = 0; count < max_n_32bit; count++) {
299                         u32 x = 0;
300
301                         for (i = 0; len && (i < bytes_per_word); i++, len--)
302                                 x |= (u32)(*tx_buf++) << (i * 8);
303                         tegra_qspi_writel(tqspi, x, QSPI_TX_FIFO);
304                 }
305
306                 tqspi->cur_tx_pos += write_bytes;
307         }
308
309         return written_words;
310 }
311
312 static unsigned int
313 tegra_qspi_read_rx_fifo_to_client_rxbuf(struct tegra_qspi *tqspi, struct spi_transfer *t)
314 {
315         u8 *rx_buf = (u8 *)t->rx_buf + tqspi->cur_rx_pos;
316         unsigned int len, rx_full_count, count, i;
317         unsigned int read_words = 0;
318         u32 fifo_status, x;
319
320         fifo_status = tegra_qspi_readl(tqspi, QSPI_FIFO_STATUS);
321         rx_full_count = QSPI_RX_FIFO_FULL_COUNT(fifo_status);
322         if (tqspi->is_packed) {
323                 len = tqspi->curr_dma_words * tqspi->bytes_per_word;
324                 for (count = 0; count < rx_full_count; count++) {
325                         x = tegra_qspi_readl(tqspi, QSPI_RX_FIFO);
326
327                         for (i = 0; len && (i < 4); i++, len--)
328                                 *rx_buf++ = (x >> i * 8) & 0xff;
329                 }
330
331                 read_words += tqspi->curr_dma_words;
332                 tqspi->cur_rx_pos += tqspi->curr_dma_words * tqspi->bytes_per_word;
333         } else {
334                 u32 rx_mask = ((u32)1 << t->bits_per_word) - 1;
335                 u8 bytes_per_word = tqspi->bytes_per_word;
336                 unsigned int read_bytes;
337
338                 len = rx_full_count * bytes_per_word;
339                 if (len > t->len - tqspi->cur_pos)
340                         len = t->len - tqspi->cur_pos;
341                 read_bytes = len;
342                 for (count = 0; count < rx_full_count; count++) {
343                         x = tegra_qspi_readl(tqspi, QSPI_RX_FIFO) & rx_mask;
344
345                         for (i = 0; len && (i < bytes_per_word); i++, len--)
346                                 *rx_buf++ = (x >> (i * 8)) & 0xff;
347                 }
348
349                 read_words += rx_full_count;
350                 tqspi->cur_rx_pos += read_bytes;
351         }
352
353         return read_words;
354 }
355
356 static void
357 tegra_qspi_copy_client_txbuf_to_qspi_txbuf(struct tegra_qspi *tqspi, struct spi_transfer *t)
358 {
359         dma_sync_single_for_cpu(tqspi->dev, tqspi->tx_dma_phys,
360                                 tqspi->dma_buf_size, DMA_TO_DEVICE);
361
362         /*
363          * In packed mode, each word in FIFO may contain multiple packets
364          * based on bits per word. So all bytes in each FIFO word are valid.
365          *
366          * In unpacked mode, each word in FIFO contains single packet and
367          * based on bits per word any remaining bits in FIFO word will be
368          * ignored by the hardware and are invalid bits.
369          */
370         if (tqspi->is_packed) {
371                 tqspi->cur_tx_pos += tqspi->curr_dma_words * tqspi->bytes_per_word;
372         } else {
373                 u8 *tx_buf = (u8 *)t->tx_buf + tqspi->cur_tx_pos;
374                 unsigned int i, count, consume, write_bytes;
375
376                 /*
377                  * Fill tx_dma_buf to contain single packet in each word based
378                  * on bits per word from SPI core tx_buf.
379                  */
380                 consume = tqspi->curr_dma_words * tqspi->bytes_per_word;
381                 if (consume > t->len - tqspi->cur_pos)
382                         consume = t->len - tqspi->cur_pos;
383                 write_bytes = consume;
384                 for (count = 0; count < tqspi->curr_dma_words; count++) {
385                         u32 x = 0;
386
387                         for (i = 0; consume && (i < tqspi->bytes_per_word); i++, consume--)
388                                 x |= (u32)(*tx_buf++) << (i * 8);
389                         tqspi->tx_dma_buf[count] = x;
390                 }
391
392                 tqspi->cur_tx_pos += write_bytes;
393         }
394
395         dma_sync_single_for_device(tqspi->dev, tqspi->tx_dma_phys,
396                                    tqspi->dma_buf_size, DMA_TO_DEVICE);
397 }
398
399 static void
400 tegra_qspi_copy_qspi_rxbuf_to_client_rxbuf(struct tegra_qspi *tqspi, struct spi_transfer *t)
401 {
402         dma_sync_single_for_cpu(tqspi->dev, tqspi->rx_dma_phys,
403                                 tqspi->dma_buf_size, DMA_FROM_DEVICE);
404
405         if (tqspi->is_packed) {
406                 tqspi->cur_rx_pos += tqspi->curr_dma_words * tqspi->bytes_per_word;
407         } else {
408                 unsigned char *rx_buf = t->rx_buf + tqspi->cur_rx_pos;
409                 u32 rx_mask = ((u32)1 << t->bits_per_word) - 1;
410                 unsigned int i, count, consume, read_bytes;
411
412                 /*
413                  * Each FIFO word contains single data packet.
414                  * Skip invalid bits in each FIFO word based on bits per word
415                  * and align bytes while filling in SPI core rx_buf.
416                  */
417                 consume = tqspi->curr_dma_words * tqspi->bytes_per_word;
418                 if (consume > t->len - tqspi->cur_pos)
419                         consume = t->len - tqspi->cur_pos;
420                 read_bytes = consume;
421                 for (count = 0; count < tqspi->curr_dma_words; count++) {
422                         u32 x = tqspi->rx_dma_buf[count] & rx_mask;
423
424                         for (i = 0; consume && (i < tqspi->bytes_per_word); i++, consume--)
425                                 *rx_buf++ = (x >> (i * 8)) & 0xff;
426                 }
427
428                 tqspi->cur_rx_pos += read_bytes;
429         }
430
431         dma_sync_single_for_device(tqspi->dev, tqspi->rx_dma_phys,
432                                    tqspi->dma_buf_size, DMA_FROM_DEVICE);
433 }
434
435 static void tegra_qspi_dma_complete(void *args)
436 {
437         struct completion *dma_complete = args;
438
439         complete(dma_complete);
440 }
441
442 static int tegra_qspi_start_tx_dma(struct tegra_qspi *tqspi, struct spi_transfer *t, int len)
443 {
444         dma_addr_t tx_dma_phys;
445
446         reinit_completion(&tqspi->tx_dma_complete);
447
448         if (tqspi->is_packed)
449                 tx_dma_phys = t->tx_dma;
450         else
451                 tx_dma_phys = tqspi->tx_dma_phys;
452
453         tqspi->tx_dma_desc = dmaengine_prep_slave_single(tqspi->tx_dma_chan, tx_dma_phys,
454                                                          len, DMA_MEM_TO_DEV,
455                                                          DMA_PREP_INTERRUPT |  DMA_CTRL_ACK);
456
457         if (!tqspi->tx_dma_desc) {
458                 dev_err(tqspi->dev, "Unable to get TX descriptor\n");
459                 return -EIO;
460         }
461
462         tqspi->tx_dma_desc->callback = tegra_qspi_dma_complete;
463         tqspi->tx_dma_desc->callback_param = &tqspi->tx_dma_complete;
464         dmaengine_submit(tqspi->tx_dma_desc);
465         dma_async_issue_pending(tqspi->tx_dma_chan);
466
467         return 0;
468 }
469
470 static int tegra_qspi_start_rx_dma(struct tegra_qspi *tqspi, struct spi_transfer *t, int len)
471 {
472         dma_addr_t rx_dma_phys;
473
474         reinit_completion(&tqspi->rx_dma_complete);
475
476         if (tqspi->is_packed)
477                 rx_dma_phys = t->rx_dma;
478         else
479                 rx_dma_phys = tqspi->rx_dma_phys;
480
481         tqspi->rx_dma_desc = dmaengine_prep_slave_single(tqspi->rx_dma_chan, rx_dma_phys,
482                                                          len, DMA_DEV_TO_MEM,
483                                                          DMA_PREP_INTERRUPT |  DMA_CTRL_ACK);
484
485         if (!tqspi->rx_dma_desc) {
486                 dev_err(tqspi->dev, "Unable to get RX descriptor\n");
487                 return -EIO;
488         }
489
490         tqspi->rx_dma_desc->callback = tegra_qspi_dma_complete;
491         tqspi->rx_dma_desc->callback_param = &tqspi->rx_dma_complete;
492         dmaengine_submit(tqspi->rx_dma_desc);
493         dma_async_issue_pending(tqspi->rx_dma_chan);
494
495         return 0;
496 }
497
498 static int tegra_qspi_flush_fifos(struct tegra_qspi *tqspi, bool atomic)
499 {
500         void __iomem *addr = tqspi->base + QSPI_FIFO_STATUS;
501         u32 val;
502
503         val = tegra_qspi_readl(tqspi, QSPI_FIFO_STATUS);
504         if ((val & QSPI_FIFO_EMPTY) == QSPI_FIFO_EMPTY)
505                 return 0;
506
507         val |= QSPI_RX_FIFO_FLUSH | QSPI_TX_FIFO_FLUSH;
508         tegra_qspi_writel(tqspi, val, QSPI_FIFO_STATUS);
509
510         if (!atomic)
511                 return readl_relaxed_poll_timeout(addr, val,
512                                                   (val & QSPI_FIFO_EMPTY) == QSPI_FIFO_EMPTY,
513                                                   1000, 1000000);
514
515         return readl_relaxed_poll_timeout_atomic(addr, val,
516                                                  (val & QSPI_FIFO_EMPTY) == QSPI_FIFO_EMPTY,
517                                                  1000, 1000000);
518 }
519
520 static void tegra_qspi_unmask_irq(struct tegra_qspi *tqspi)
521 {
522         u32 intr_mask;
523
524         intr_mask = tegra_qspi_readl(tqspi, QSPI_INTR_MASK);
525         intr_mask &= ~(QSPI_INTR_RDY_MASK | QSPI_INTR_RX_TX_FIFO_ERR);
526         tegra_qspi_writel(tqspi, intr_mask, QSPI_INTR_MASK);
527 }
528
529 static int tegra_qspi_dma_map_xfer(struct tegra_qspi *tqspi, struct spi_transfer *t)
530 {
531         u8 *tx_buf = (u8 *)t->tx_buf + tqspi->cur_tx_pos;
532         u8 *rx_buf = (u8 *)t->rx_buf + tqspi->cur_rx_pos;
533         unsigned int len;
534
535         len = DIV_ROUND_UP(tqspi->curr_dma_words * tqspi->bytes_per_word, 4) * 4;
536
537         if (t->tx_buf) {
538                 t->tx_dma = dma_map_single(tqspi->dev, (void *)tx_buf, len, DMA_TO_DEVICE);
539                 if (dma_mapping_error(tqspi->dev, t->tx_dma))
540                         return -ENOMEM;
541         }
542
543         if (t->rx_buf) {
544                 t->rx_dma = dma_map_single(tqspi->dev, (void *)rx_buf, len, DMA_FROM_DEVICE);
545                 if (dma_mapping_error(tqspi->dev, t->rx_dma)) {
546                         dma_unmap_single(tqspi->dev, t->tx_dma, len, DMA_TO_DEVICE);
547                         return -ENOMEM;
548                 }
549         }
550
551         return 0;
552 }
553
554 static void tegra_qspi_dma_unmap_xfer(struct tegra_qspi *tqspi, struct spi_transfer *t)
555 {
556         unsigned int len;
557
558         len = DIV_ROUND_UP(tqspi->curr_dma_words * tqspi->bytes_per_word, 4) * 4;
559
560         dma_unmap_single(tqspi->dev, t->tx_dma, len, DMA_TO_DEVICE);
561         dma_unmap_single(tqspi->dev, t->rx_dma, len, DMA_FROM_DEVICE);
562 }
563
564 static int tegra_qspi_start_dma_based_transfer(struct tegra_qspi *tqspi, struct spi_transfer *t)
565 {
566         struct dma_slave_config dma_sconfig = { 0 };
567         unsigned int len;
568         u8 dma_burst;
569         int ret = 0;
570         u32 val;
571
572         if (tqspi->is_packed) {
573                 ret = tegra_qspi_dma_map_xfer(tqspi, t);
574                 if (ret < 0)
575                         return ret;
576         }
577
578         val = QSPI_DMA_BLK_SET(tqspi->curr_dma_words - 1);
579         tegra_qspi_writel(tqspi, val, QSPI_DMA_BLK);
580
581         tegra_qspi_unmask_irq(tqspi);
582
583         if (tqspi->is_packed)
584                 len = DIV_ROUND_UP(tqspi->curr_dma_words * tqspi->bytes_per_word, 4) * 4;
585         else
586                 len = tqspi->curr_dma_words * 4;
587
588         /* set attention level based on length of transfer */
589         val = 0;
590         if (len & 0xf) {
591                 val |= QSPI_TX_TRIG_1 | QSPI_RX_TRIG_1;
592                 dma_burst = 1;
593         } else if (((len) >> 4) & 0x1) {
594                 val |= QSPI_TX_TRIG_4 | QSPI_RX_TRIG_4;
595                 dma_burst = 4;
596         } else {
597                 val |= QSPI_TX_TRIG_8 | QSPI_RX_TRIG_8;
598                 dma_burst = 8;
599         }
600
601         tegra_qspi_writel(tqspi, val, QSPI_DMA_CTL);
602         tqspi->dma_control_reg = val;
603
604         dma_sconfig.device_fc = true;
605         if (tqspi->cur_direction & DATA_DIR_TX) {
606                 dma_sconfig.dst_addr = tqspi->phys + QSPI_TX_FIFO;
607                 dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
608                 dma_sconfig.dst_maxburst = dma_burst;
609                 ret = dmaengine_slave_config(tqspi->tx_dma_chan, &dma_sconfig);
610                 if (ret < 0) {
611                         dev_err(tqspi->dev, "failed DMA slave config: %d\n", ret);
612                         return ret;
613                 }
614
615                 tegra_qspi_copy_client_txbuf_to_qspi_txbuf(tqspi, t);
616                 ret = tegra_qspi_start_tx_dma(tqspi, t, len);
617                 if (ret < 0) {
618                         dev_err(tqspi->dev, "failed to starting TX DMA: %d\n", ret);
619                         return ret;
620                 }
621         }
622
623         if (tqspi->cur_direction & DATA_DIR_RX) {
624                 dma_sconfig.src_addr = tqspi->phys + QSPI_RX_FIFO;
625                 dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
626                 dma_sconfig.src_maxburst = dma_burst;
627                 ret = dmaengine_slave_config(tqspi->rx_dma_chan, &dma_sconfig);
628                 if (ret < 0) {
629                         dev_err(tqspi->dev, "failed DMA slave config: %d\n", ret);
630                         return ret;
631                 }
632
633                 dma_sync_single_for_device(tqspi->dev, tqspi->rx_dma_phys,
634                                            tqspi->dma_buf_size,
635                                            DMA_FROM_DEVICE);
636
637                 ret = tegra_qspi_start_rx_dma(tqspi, t, len);
638                 if (ret < 0) {
639                         dev_err(tqspi->dev, "failed to start RX DMA: %d\n", ret);
640                         if (tqspi->cur_direction & DATA_DIR_TX)
641                                 dmaengine_terminate_all(tqspi->tx_dma_chan);
642                         return ret;
643                 }
644         }
645
646         tegra_qspi_writel(tqspi, tqspi->command1_reg, QSPI_COMMAND1);
647
648         tqspi->is_curr_dma_xfer = true;
649         tqspi->dma_control_reg = val;
650         val |= QSPI_DMA_EN;
651         tegra_qspi_writel(tqspi, val, QSPI_DMA_CTL);
652
653         return ret;
654 }
655
656 static int tegra_qspi_start_cpu_based_transfer(struct tegra_qspi *qspi, struct spi_transfer *t)
657 {
658         u32 val;
659         unsigned int cur_words;
660
661         if (qspi->cur_direction & DATA_DIR_TX)
662                 cur_words = tegra_qspi_fill_tx_fifo_from_client_txbuf(qspi, t);
663         else
664                 cur_words = qspi->curr_dma_words;
665
666         val = QSPI_DMA_BLK_SET(cur_words - 1);
667         tegra_qspi_writel(qspi, val, QSPI_DMA_BLK);
668
669         tegra_qspi_unmask_irq(qspi);
670
671         qspi->is_curr_dma_xfer = false;
672         val = qspi->command1_reg;
673         val |= QSPI_PIO;
674         tegra_qspi_writel(qspi, val, QSPI_COMMAND1);
675
676         return 0;
677 }
678
679 static void tegra_qspi_deinit_dma(struct tegra_qspi *tqspi)
680 {
681         if (tqspi->tx_dma_buf) {
682                 dma_free_coherent(tqspi->dev, tqspi->dma_buf_size,
683                                   tqspi->tx_dma_buf, tqspi->tx_dma_phys);
684                 tqspi->tx_dma_buf = NULL;
685         }
686
687         if (tqspi->tx_dma_chan) {
688                 dma_release_channel(tqspi->tx_dma_chan);
689                 tqspi->tx_dma_chan = NULL;
690         }
691
692         if (tqspi->rx_dma_buf) {
693                 dma_free_coherent(tqspi->dev, tqspi->dma_buf_size,
694                                   tqspi->rx_dma_buf, tqspi->rx_dma_phys);
695                 tqspi->rx_dma_buf = NULL;
696         }
697
698         if (tqspi->rx_dma_chan) {
699                 dma_release_channel(tqspi->rx_dma_chan);
700                 tqspi->rx_dma_chan = NULL;
701         }
702 }
703
704 static int tegra_qspi_init_dma(struct tegra_qspi *tqspi)
705 {
706         struct dma_chan *dma_chan;
707         dma_addr_t dma_phys;
708         u32 *dma_buf;
709         int err;
710
711         dma_chan = dma_request_chan(tqspi->dev, "rx");
712         if (IS_ERR(dma_chan)) {
713                 err = PTR_ERR(dma_chan);
714                 goto err_out;
715         }
716
717         tqspi->rx_dma_chan = dma_chan;
718
719         dma_buf = dma_alloc_coherent(tqspi->dev, tqspi->dma_buf_size, &dma_phys, GFP_KERNEL);
720         if (!dma_buf) {
721                 err = -ENOMEM;
722                 goto err_out;
723         }
724
725         tqspi->rx_dma_buf = dma_buf;
726         tqspi->rx_dma_phys = dma_phys;
727
728         dma_chan = dma_request_chan(tqspi->dev, "tx");
729         if (IS_ERR(dma_chan)) {
730                 err = PTR_ERR(dma_chan);
731                 goto err_out;
732         }
733
734         tqspi->tx_dma_chan = dma_chan;
735
736         dma_buf = dma_alloc_coherent(tqspi->dev, tqspi->dma_buf_size, &dma_phys, GFP_KERNEL);
737         if (!dma_buf) {
738                 err = -ENOMEM;
739                 goto err_out;
740         }
741
742         tqspi->tx_dma_buf = dma_buf;
743         tqspi->tx_dma_phys = dma_phys;
744         tqspi->use_dma = true;
745
746         return 0;
747
748 err_out:
749         tegra_qspi_deinit_dma(tqspi);
750
751         if (err != -EPROBE_DEFER) {
752                 dev_err(tqspi->dev, "cannot use DMA: %d\n", err);
753                 dev_err(tqspi->dev, "falling back to PIO\n");
754                 return 0;
755         }
756
757         return err;
758 }
759
760 static u32 tegra_qspi_setup_transfer_one(struct spi_device *spi, struct spi_transfer *t,
761                                          bool is_first_of_msg)
762 {
763         struct tegra_qspi *tqspi = spi_master_get_devdata(spi->master);
764         struct tegra_qspi_client_data *cdata = spi->controller_data;
765         u32 command1, command2, speed = t->speed_hz;
766         u8 bits_per_word = t->bits_per_word;
767         u32 tx_tap = 0, rx_tap = 0;
768         int req_mode;
769
770         if (speed != tqspi->cur_speed) {
771                 clk_set_rate(tqspi->clk, speed);
772                 tqspi->cur_speed = speed;
773         }
774
775         tqspi->cur_pos = 0;
776         tqspi->cur_rx_pos = 0;
777         tqspi->cur_tx_pos = 0;
778         tqspi->curr_xfer = t;
779
780         if (is_first_of_msg) {
781                 tegra_qspi_mask_clear_irq(tqspi);
782
783                 command1 = tqspi->def_command1_reg;
784                 command1 |= QSPI_BIT_LENGTH(bits_per_word - 1);
785
786                 command1 &= ~QSPI_CONTROL_MODE_MASK;
787                 req_mode = spi->mode & 0x3;
788                 if (req_mode == SPI_MODE_3)
789                         command1 |= QSPI_CONTROL_MODE_3;
790                 else
791                         command1 |= QSPI_CONTROL_MODE_0;
792
793                 if (spi->mode & SPI_CS_HIGH)
794                         command1 |= QSPI_CS_SW_VAL;
795                 else
796                         command1 &= ~QSPI_CS_SW_VAL;
797                 tegra_qspi_writel(tqspi, command1, QSPI_COMMAND1);
798
799                 if (cdata && cdata->tx_clk_tap_delay)
800                         tx_tap = cdata->tx_clk_tap_delay;
801
802                 if (cdata && cdata->rx_clk_tap_delay)
803                         rx_tap = cdata->rx_clk_tap_delay;
804
805                 command2 = QSPI_TX_TAP_DELAY(tx_tap) | QSPI_RX_TAP_DELAY(rx_tap);
806                 if (command2 != tqspi->def_command2_reg)
807                         tegra_qspi_writel(tqspi, command2, QSPI_COMMAND2);
808
809         } else {
810                 command1 = tqspi->command1_reg;
811                 command1 &= ~QSPI_BIT_LENGTH(~0);
812                 command1 |= QSPI_BIT_LENGTH(bits_per_word - 1);
813         }
814
815         command1 &= ~QSPI_SDR_DDR_SEL;
816
817         return command1;
818 }
819
820 static int tegra_qspi_start_transfer_one(struct spi_device *spi,
821                                          struct spi_transfer *t, u32 command1)
822 {
823         struct tegra_qspi *tqspi = spi_master_get_devdata(spi->master);
824         unsigned int total_fifo_words;
825         u8 bus_width = 0;
826         int ret;
827
828         total_fifo_words = tegra_qspi_calculate_curr_xfer_param(tqspi, t);
829
830         command1 &= ~QSPI_PACKED;
831         if (tqspi->is_packed)
832                 command1 |= QSPI_PACKED;
833         tegra_qspi_writel(tqspi, command1, QSPI_COMMAND1);
834
835         tqspi->cur_direction = 0;
836
837         command1 &= ~(QSPI_TX_EN | QSPI_RX_EN);
838         if (t->rx_buf) {
839                 command1 |= QSPI_RX_EN;
840                 tqspi->cur_direction |= DATA_DIR_RX;
841                 bus_width = t->rx_nbits;
842         }
843
844         if (t->tx_buf) {
845                 command1 |= QSPI_TX_EN;
846                 tqspi->cur_direction |= DATA_DIR_TX;
847                 bus_width = t->tx_nbits;
848         }
849
850         command1 &= ~QSPI_INTERFACE_WIDTH_MASK;
851
852         if (bus_width == SPI_NBITS_QUAD)
853                 command1 |= QSPI_INTERFACE_WIDTH_QUAD;
854         else if (bus_width == SPI_NBITS_DUAL)
855                 command1 |= QSPI_INTERFACE_WIDTH_DUAL;
856         else
857                 command1 |= QSPI_INTERFACE_WIDTH_SINGLE;
858
859         tqspi->command1_reg = command1;
860
861         tegra_qspi_writel(tqspi, QSPI_NUM_DUMMY_CYCLE(tqspi->dummy_cycles), QSPI_MISC_REG);
862
863         ret = tegra_qspi_flush_fifos(tqspi, false);
864         if (ret < 0)
865                 return ret;
866
867         if (tqspi->use_dma && total_fifo_words > QSPI_FIFO_DEPTH)
868                 ret = tegra_qspi_start_dma_based_transfer(tqspi, t);
869         else
870                 ret = tegra_qspi_start_cpu_based_transfer(tqspi, t);
871
872         return ret;
873 }
874
875 static struct tegra_qspi_client_data *tegra_qspi_parse_cdata_dt(struct spi_device *spi)
876 {
877         struct tegra_qspi_client_data *cdata;
878         struct device_node *slave_np = spi->dev.of_node;
879
880         cdata = kzalloc(sizeof(*cdata), GFP_KERNEL);
881         if (!cdata)
882                 return NULL;
883
884         of_property_read_u32(slave_np, "nvidia,tx-clk-tap-delay",
885                              &cdata->tx_clk_tap_delay);
886         of_property_read_u32(slave_np, "nvidia,rx-clk-tap-delay",
887                              &cdata->rx_clk_tap_delay);
888         return cdata;
889 }
890
891 static void tegra_qspi_cleanup(struct spi_device *spi)
892 {
893         struct tegra_qspi_client_data *cdata = spi->controller_data;
894
895         spi->controller_data = NULL;
896         kfree(cdata);
897 }
898
899 static int tegra_qspi_setup(struct spi_device *spi)
900 {
901         struct tegra_qspi *tqspi = spi_master_get_devdata(spi->master);
902         struct tegra_qspi_client_data *cdata = spi->controller_data;
903         unsigned long flags;
904         u32 val;
905         int ret;
906
907         ret = pm_runtime_resume_and_get(tqspi->dev);
908         if (ret < 0) {
909                 dev_err(tqspi->dev, "failed to get runtime PM: %d\n", ret);
910                 return ret;
911         }
912
913         if (!cdata) {
914                 cdata = tegra_qspi_parse_cdata_dt(spi);
915                 spi->controller_data = cdata;
916         }
917
918         spin_lock_irqsave(&tqspi->lock, flags);
919
920         /* keep default cs state to inactive */
921         val = tqspi->def_command1_reg;
922         if (spi->mode & SPI_CS_HIGH)
923                 val &= ~QSPI_CS_SW_VAL;
924         else
925                 val |= QSPI_CS_SW_VAL;
926
927         tqspi->def_command1_reg = val;
928         tegra_qspi_writel(tqspi, tqspi->def_command1_reg, QSPI_COMMAND1);
929
930         spin_unlock_irqrestore(&tqspi->lock, flags);
931
932         pm_runtime_put(tqspi->dev);
933
934         return 0;
935 }
936
937 static void tegra_qspi_dump_regs(struct tegra_qspi *tqspi)
938 {
939         dev_dbg(tqspi->dev, "============ QSPI REGISTER DUMP ============\n");
940         dev_dbg(tqspi->dev, "Command1:    0x%08x | Command2:    0x%08x\n",
941                 tegra_qspi_readl(tqspi, QSPI_COMMAND1),
942                 tegra_qspi_readl(tqspi, QSPI_COMMAND2));
943         dev_dbg(tqspi->dev, "DMA_CTL:     0x%08x | DMA_BLK:     0x%08x\n",
944                 tegra_qspi_readl(tqspi, QSPI_DMA_CTL),
945                 tegra_qspi_readl(tqspi, QSPI_DMA_BLK));
946         dev_dbg(tqspi->dev, "INTR_MASK:  0x%08x | MISC: 0x%08x\n",
947                 tegra_qspi_readl(tqspi, QSPI_INTR_MASK),
948                 tegra_qspi_readl(tqspi, QSPI_MISC_REG));
949         dev_dbg(tqspi->dev, "TRANS_STAT:  0x%08x | FIFO_STATUS: 0x%08x\n",
950                 tegra_qspi_readl(tqspi, QSPI_TRANS_STATUS),
951                 tegra_qspi_readl(tqspi, QSPI_FIFO_STATUS));
952 }
953
954 static void tegra_qspi_handle_error(struct tegra_qspi *tqspi)
955 {
956         dev_err(tqspi->dev, "error in transfer, fifo status 0x%08x\n", tqspi->status_reg);
957         tegra_qspi_dump_regs(tqspi);
958         tegra_qspi_flush_fifos(tqspi, true);
959         reset_control_assert(tqspi->rst);
960         udelay(2);
961         reset_control_deassert(tqspi->rst);
962 }
963
964 static void tegra_qspi_transfer_end(struct spi_device *spi)
965 {
966         struct tegra_qspi *tqspi = spi_master_get_devdata(spi->master);
967         int cs_val = (spi->mode & SPI_CS_HIGH) ? 0 : 1;
968
969         if (cs_val)
970                 tqspi->command1_reg |= QSPI_CS_SW_VAL;
971         else
972                 tqspi->command1_reg &= ~QSPI_CS_SW_VAL;
973         tegra_qspi_writel(tqspi, tqspi->command1_reg, QSPI_COMMAND1);
974         tegra_qspi_writel(tqspi, tqspi->def_command1_reg, QSPI_COMMAND1);
975 }
976
977 static int tegra_qspi_transfer_one_message(struct spi_master *master, struct spi_message *msg)
978 {
979         struct tegra_qspi *tqspi = spi_master_get_devdata(master);
980         struct spi_device *spi = msg->spi;
981         struct spi_transfer *transfer;
982         bool is_first_msg = true;
983         int ret;
984
985         msg->status = 0;
986         msg->actual_length = 0;
987         tqspi->tx_status = 0;
988         tqspi->rx_status = 0;
989
990         list_for_each_entry(transfer, &msg->transfers, transfer_list) {
991                 struct spi_transfer *xfer = transfer;
992                 u8 dummy_bytes = 0;
993                 u32 cmd1;
994
995                 tqspi->dummy_cycles = 0;
996                 /*
997                  * Tegra QSPI hardware supports dummy bytes transfer after actual transfer
998                  * bytes based on programmed dummy clock cycles in the QSPI_MISC register.
999                  * So, check if the next transfer is dummy data transfer and program dummy
1000                  * clock cycles along with the current transfer and skip next transfer.
1001                  */
1002                 if (!list_is_last(&xfer->transfer_list, &msg->transfers)) {
1003                         struct spi_transfer *next_xfer;
1004
1005                         next_xfer = list_next_entry(xfer, transfer_list);
1006                         if (next_xfer->dummy_data) {
1007                                 u32 dummy_cycles = next_xfer->len * 8 / next_xfer->tx_nbits;
1008
1009                                 if (dummy_cycles <= QSPI_DUMMY_CYCLES_MAX) {
1010                                         tqspi->dummy_cycles = dummy_cycles;
1011                                         dummy_bytes = next_xfer->len;
1012                                         transfer = next_xfer;
1013                                 }
1014                         }
1015                 }
1016
1017                 reinit_completion(&tqspi->xfer_completion);
1018
1019                 cmd1 = tegra_qspi_setup_transfer_one(spi, xfer, is_first_msg);
1020
1021                 ret = tegra_qspi_start_transfer_one(spi, xfer, cmd1);
1022                 if (ret < 0) {
1023                         dev_err(tqspi->dev, "failed to start transfer: %d\n", ret);
1024                         goto complete_xfer;
1025                 }
1026
1027                 is_first_msg = false;
1028                 ret = wait_for_completion_timeout(&tqspi->xfer_completion,
1029                                                   QSPI_DMA_TIMEOUT);
1030                 if (WARN_ON(ret == 0)) {
1031                         dev_err(tqspi->dev, "transfer timeout: %d\n", ret);
1032                         if (tqspi->is_curr_dma_xfer && (tqspi->cur_direction & DATA_DIR_TX))
1033                                 dmaengine_terminate_all(tqspi->tx_dma_chan);
1034                         if (tqspi->is_curr_dma_xfer && (tqspi->cur_direction & DATA_DIR_RX))
1035                                 dmaengine_terminate_all(tqspi->rx_dma_chan);
1036                         tegra_qspi_handle_error(tqspi);
1037                         ret = -EIO;
1038                         goto complete_xfer;
1039                 }
1040
1041                 if (tqspi->tx_status ||  tqspi->rx_status) {
1042                         tegra_qspi_handle_error(tqspi);
1043                         ret = -EIO;
1044                         goto complete_xfer;
1045                 }
1046
1047                 msg->actual_length += xfer->len + dummy_bytes;
1048
1049 complete_xfer:
1050                 if (ret < 0) {
1051                         tegra_qspi_transfer_end(spi);
1052                         spi_transfer_delay_exec(xfer);
1053                         goto exit;
1054                 }
1055
1056                 if (list_is_last(&xfer->transfer_list, &msg->transfers)) {
1057                         /* de-activate CS after last transfer only when cs_change is not set */
1058                         if (!xfer->cs_change) {
1059                                 tegra_qspi_transfer_end(spi);
1060                                 spi_transfer_delay_exec(xfer);
1061                         }
1062                 } else if (xfer->cs_change) {
1063                          /* de-activated CS between the transfers only when cs_change is set */
1064                         tegra_qspi_transfer_end(spi);
1065                         spi_transfer_delay_exec(xfer);
1066                 }
1067         }
1068
1069         ret = 0;
1070 exit:
1071         msg->status = ret;
1072         spi_finalize_current_message(master);
1073         return ret;
1074 }
1075
1076 static irqreturn_t handle_cpu_based_xfer(struct tegra_qspi *tqspi)
1077 {
1078         struct spi_transfer *t = tqspi->curr_xfer;
1079         unsigned long flags;
1080
1081         spin_lock_irqsave(&tqspi->lock, flags);
1082
1083         if (tqspi->tx_status ||  tqspi->rx_status) {
1084                 tegra_qspi_handle_error(tqspi);
1085                 complete(&tqspi->xfer_completion);
1086                 goto exit;
1087         }
1088
1089         if (tqspi->cur_direction & DATA_DIR_RX)
1090                 tegra_qspi_read_rx_fifo_to_client_rxbuf(tqspi, t);
1091
1092         if (tqspi->cur_direction & DATA_DIR_TX)
1093                 tqspi->cur_pos = tqspi->cur_tx_pos;
1094         else
1095                 tqspi->cur_pos = tqspi->cur_rx_pos;
1096
1097         if (tqspi->cur_pos == t->len) {
1098                 complete(&tqspi->xfer_completion);
1099                 goto exit;
1100         }
1101
1102         tegra_qspi_calculate_curr_xfer_param(tqspi, t);
1103         tegra_qspi_start_cpu_based_transfer(tqspi, t);
1104 exit:
1105         spin_unlock_irqrestore(&tqspi->lock, flags);
1106         return IRQ_HANDLED;
1107 }
1108
1109 static irqreturn_t handle_dma_based_xfer(struct tegra_qspi *tqspi)
1110 {
1111         struct spi_transfer *t = tqspi->curr_xfer;
1112         unsigned int total_fifo_words;
1113         unsigned long flags;
1114         long wait_status;
1115         int err = 0;
1116
1117         if (tqspi->cur_direction & DATA_DIR_TX) {
1118                 if (tqspi->tx_status) {
1119                         dmaengine_terminate_all(tqspi->tx_dma_chan);
1120                         err += 1;
1121                 } else {
1122                         wait_status = wait_for_completion_interruptible_timeout(
1123                                 &tqspi->tx_dma_complete, QSPI_DMA_TIMEOUT);
1124                         if (wait_status <= 0) {
1125                                 dmaengine_terminate_all(tqspi->tx_dma_chan);
1126                                 dev_err(tqspi->dev, "failed TX DMA transfer\n");
1127                                 err += 1;
1128                         }
1129                 }
1130         }
1131
1132         if (tqspi->cur_direction & DATA_DIR_RX) {
1133                 if (tqspi->rx_status) {
1134                         dmaengine_terminate_all(tqspi->rx_dma_chan);
1135                         err += 2;
1136                 } else {
1137                         wait_status = wait_for_completion_interruptible_timeout(
1138                                 &tqspi->rx_dma_complete, QSPI_DMA_TIMEOUT);
1139                         if (wait_status <= 0) {
1140                                 dmaengine_terminate_all(tqspi->rx_dma_chan);
1141                                 dev_err(tqspi->dev, "failed RX DMA transfer\n");
1142                                 err += 2;
1143                         }
1144                 }
1145         }
1146
1147         spin_lock_irqsave(&tqspi->lock, flags);
1148
1149         if (err) {
1150                 tegra_qspi_dma_unmap_xfer(tqspi, t);
1151                 tegra_qspi_handle_error(tqspi);
1152                 complete(&tqspi->xfer_completion);
1153                 goto exit;
1154         }
1155
1156         if (tqspi->cur_direction & DATA_DIR_RX)
1157                 tegra_qspi_copy_qspi_rxbuf_to_client_rxbuf(tqspi, t);
1158
1159         if (tqspi->cur_direction & DATA_DIR_TX)
1160                 tqspi->cur_pos = tqspi->cur_tx_pos;
1161         else
1162                 tqspi->cur_pos = tqspi->cur_rx_pos;
1163
1164         if (tqspi->cur_pos == t->len) {
1165                 tegra_qspi_dma_unmap_xfer(tqspi, t);
1166                 complete(&tqspi->xfer_completion);
1167                 goto exit;
1168         }
1169
1170         tegra_qspi_dma_unmap_xfer(tqspi, t);
1171
1172         /* continue transfer in current message */
1173         total_fifo_words = tegra_qspi_calculate_curr_xfer_param(tqspi, t);
1174         if (total_fifo_words > QSPI_FIFO_DEPTH)
1175                 err = tegra_qspi_start_dma_based_transfer(tqspi, t);
1176         else
1177                 err = tegra_qspi_start_cpu_based_transfer(tqspi, t);
1178
1179 exit:
1180         spin_unlock_irqrestore(&tqspi->lock, flags);
1181         return IRQ_HANDLED;
1182 }
1183
1184 static irqreturn_t tegra_qspi_isr_thread(int irq, void *context_data)
1185 {
1186         struct tegra_qspi *tqspi = context_data;
1187
1188         tqspi->status_reg = tegra_qspi_readl(tqspi, QSPI_FIFO_STATUS);
1189
1190         if (tqspi->cur_direction & DATA_DIR_TX)
1191                 tqspi->tx_status = tqspi->status_reg & (QSPI_TX_FIFO_UNF | QSPI_TX_FIFO_OVF);
1192
1193         if (tqspi->cur_direction & DATA_DIR_RX)
1194                 tqspi->rx_status = tqspi->status_reg & (QSPI_RX_FIFO_OVF | QSPI_RX_FIFO_UNF);
1195
1196         tegra_qspi_mask_clear_irq(tqspi);
1197
1198         if (!tqspi->is_curr_dma_xfer)
1199                 return handle_cpu_based_xfer(tqspi);
1200
1201         return handle_dma_based_xfer(tqspi);
1202 }
1203
1204 static const struct of_device_id tegra_qspi_of_match[] = {
1205         { .compatible = "nvidia,tegra210-qspi", },
1206         { .compatible = "nvidia,tegra186-qspi", },
1207         { .compatible = "nvidia,tegra194-qspi", },
1208         {}
1209 };
1210
1211 MODULE_DEVICE_TABLE(of, tegra_qspi_of_match);
1212
1213 static int tegra_qspi_probe(struct platform_device *pdev)
1214 {
1215         struct spi_master       *master;
1216         struct tegra_qspi       *tqspi;
1217         struct resource         *r;
1218         int ret, qspi_irq;
1219         int bus_num;
1220
1221         master = devm_spi_alloc_master(&pdev->dev, sizeof(*tqspi));
1222         if (!master)
1223                 return -ENOMEM;
1224
1225         platform_set_drvdata(pdev, master);
1226         tqspi = spi_master_get_devdata(master);
1227
1228         master->mode_bits = SPI_MODE_0 | SPI_MODE_3 | SPI_CS_HIGH |
1229                             SPI_TX_DUAL | SPI_RX_DUAL | SPI_TX_QUAD | SPI_RX_QUAD;
1230         master->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(16) | SPI_BPW_MASK(8);
1231         master->setup = tegra_qspi_setup;
1232         master->cleanup = tegra_qspi_cleanup;
1233         master->transfer_one_message = tegra_qspi_transfer_one_message;
1234         master->num_chipselect = 1;
1235         master->auto_runtime_pm = true;
1236
1237         bus_num = of_alias_get_id(pdev->dev.of_node, "spi");
1238         if (bus_num >= 0)
1239                 master->bus_num = bus_num;
1240
1241         tqspi->master = master;
1242         tqspi->dev = &pdev->dev;
1243         spin_lock_init(&tqspi->lock);
1244
1245         r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1246         tqspi->base = devm_ioremap_resource(&pdev->dev, r);
1247         if (IS_ERR(tqspi->base))
1248                 return PTR_ERR(tqspi->base);
1249
1250         tqspi->phys = r->start;
1251         qspi_irq = platform_get_irq(pdev, 0);
1252         tqspi->irq = qspi_irq;
1253
1254         tqspi->clk = devm_clk_get(&pdev->dev, "qspi");
1255         if (IS_ERR(tqspi->clk)) {
1256                 ret = PTR_ERR(tqspi->clk);
1257                 dev_err(&pdev->dev, "failed to get clock: %d\n", ret);
1258                 return ret;
1259         }
1260
1261         tqspi->rst = devm_reset_control_get_exclusive(&pdev->dev, NULL);
1262         if (IS_ERR(tqspi->rst)) {
1263                 ret = PTR_ERR(tqspi->rst);
1264                 dev_err(&pdev->dev, "failed to get reset control: %d\n", ret);
1265                 return ret;
1266         }
1267
1268         tqspi->max_buf_size = QSPI_FIFO_DEPTH << 2;
1269         tqspi->dma_buf_size = DEFAULT_QSPI_DMA_BUF_LEN;
1270
1271         ret = tegra_qspi_init_dma(tqspi);
1272         if (ret < 0)
1273                 return ret;
1274
1275         if (tqspi->use_dma)
1276                 tqspi->max_buf_size = tqspi->dma_buf_size;
1277
1278         init_completion(&tqspi->tx_dma_complete);
1279         init_completion(&tqspi->rx_dma_complete);
1280         init_completion(&tqspi->xfer_completion);
1281
1282         pm_runtime_enable(&pdev->dev);
1283         ret = pm_runtime_resume_and_get(&pdev->dev);
1284         if (ret < 0) {
1285                 dev_err(&pdev->dev, "failed to get runtime PM: %d\n", ret);
1286                 goto exit_pm_disable;
1287         }
1288
1289         reset_control_assert(tqspi->rst);
1290         udelay(2);
1291         reset_control_deassert(tqspi->rst);
1292
1293         tqspi->def_command1_reg = QSPI_M_S | QSPI_CS_SW_HW |  QSPI_CS_SW_VAL;
1294         tegra_qspi_writel(tqspi, tqspi->def_command1_reg, QSPI_COMMAND1);
1295         tqspi->spi_cs_timing1 = tegra_qspi_readl(tqspi, QSPI_CS_TIMING1);
1296         tqspi->spi_cs_timing2 = tegra_qspi_readl(tqspi, QSPI_CS_TIMING2);
1297         tqspi->def_command2_reg = tegra_qspi_readl(tqspi, QSPI_COMMAND2);
1298
1299         pm_runtime_put(&pdev->dev);
1300
1301         ret = request_threaded_irq(tqspi->irq, NULL,
1302                                    tegra_qspi_isr_thread, IRQF_ONESHOT,
1303                                    dev_name(&pdev->dev), tqspi);
1304         if (ret < 0) {
1305                 dev_err(&pdev->dev, "failed to request IRQ#%u: %d\n", tqspi->irq, ret);
1306                 goto exit_pm_disable;
1307         }
1308
1309         master->dev.of_node = pdev->dev.of_node;
1310         ret = spi_register_master(master);
1311         if (ret < 0) {
1312                 dev_err(&pdev->dev, "failed to register master: %d\n", ret);
1313                 goto exit_free_irq;
1314         }
1315
1316         return 0;
1317
1318 exit_free_irq:
1319         free_irq(qspi_irq, tqspi);
1320 exit_pm_disable:
1321         pm_runtime_disable(&pdev->dev);
1322         tegra_qspi_deinit_dma(tqspi);
1323         return ret;
1324 }
1325
1326 static int tegra_qspi_remove(struct platform_device *pdev)
1327 {
1328         struct spi_master *master = platform_get_drvdata(pdev);
1329         struct tegra_qspi *tqspi = spi_master_get_devdata(master);
1330
1331         spi_unregister_master(master);
1332         free_irq(tqspi->irq, tqspi);
1333         pm_runtime_disable(&pdev->dev);
1334         tegra_qspi_deinit_dma(tqspi);
1335
1336         return 0;
1337 }
1338
1339 static int __maybe_unused tegra_qspi_suspend(struct device *dev)
1340 {
1341         struct spi_master *master = dev_get_drvdata(dev);
1342
1343         return spi_master_suspend(master);
1344 }
1345
1346 static int __maybe_unused tegra_qspi_resume(struct device *dev)
1347 {
1348         struct spi_master *master = dev_get_drvdata(dev);
1349         struct tegra_qspi *tqspi = spi_master_get_devdata(master);
1350         int ret;
1351
1352         ret = pm_runtime_resume_and_get(dev);
1353         if (ret < 0) {
1354                 dev_err(dev, "failed to get runtime PM: %d\n", ret);
1355                 return ret;
1356         }
1357
1358         tegra_qspi_writel(tqspi, tqspi->command1_reg, QSPI_COMMAND1);
1359         tegra_qspi_writel(tqspi, tqspi->def_command2_reg, QSPI_COMMAND2);
1360         pm_runtime_put(dev);
1361
1362         return spi_master_resume(master);
1363 }
1364
1365 static int __maybe_unused tegra_qspi_runtime_suspend(struct device *dev)
1366 {
1367         struct spi_master *master = dev_get_drvdata(dev);
1368         struct tegra_qspi *tqspi = spi_master_get_devdata(master);
1369
1370         /* flush all write which are in PPSB queue by reading back */
1371         tegra_qspi_readl(tqspi, QSPI_COMMAND1);
1372
1373         clk_disable_unprepare(tqspi->clk);
1374
1375         return 0;
1376 }
1377
1378 static int __maybe_unused tegra_qspi_runtime_resume(struct device *dev)
1379 {
1380         struct spi_master *master = dev_get_drvdata(dev);
1381         struct tegra_qspi *tqspi = spi_master_get_devdata(master);
1382         int ret;
1383
1384         ret = clk_prepare_enable(tqspi->clk);
1385         if (ret < 0)
1386                 dev_err(tqspi->dev, "failed to enable clock: %d\n", ret);
1387
1388         return ret;
1389 }
1390
1391 static const struct dev_pm_ops tegra_qspi_pm_ops = {
1392         SET_RUNTIME_PM_OPS(tegra_qspi_runtime_suspend, tegra_qspi_runtime_resume, NULL)
1393         SET_SYSTEM_SLEEP_PM_OPS(tegra_qspi_suspend, tegra_qspi_resume)
1394 };
1395
1396 static struct platform_driver tegra_qspi_driver = {
1397         .driver = {
1398                 .name           = "tegra-qspi",
1399                 .pm             = &tegra_qspi_pm_ops,
1400                 .of_match_table = tegra_qspi_of_match,
1401         },
1402         .probe =        tegra_qspi_probe,
1403         .remove =       tegra_qspi_remove,
1404 };
1405 module_platform_driver(tegra_qspi_driver);
1406
1407 MODULE_ALIAS("platform:qspi-tegra");
1408 MODULE_DESCRIPTION("NVIDIA Tegra QSPI Controller Driver");
1409 MODULE_AUTHOR("Sowjanya Komatineni <skomatineni@nvidia.com>");
1410 MODULE_LICENSE("GPL v2");