Merge remote-tracking branch 'spi/for-5.9' into spi-next
[linux-2.6-microblaze.git] / drivers / spi / spi-geni-qcom.c
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2017-2018, The Linux foundation. All rights reserved.
3
4 #include <linux/clk.h>
5 #include <linux/interrupt.h>
6 #include <linux/io.h>
7 #include <linux/log2.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/pm_runtime.h>
11 #include <linux/qcom-geni-se.h>
12 #include <linux/spi/spi.h>
13 #include <linux/spinlock.h>
14
15 /* SPI SE specific registers and respective register fields */
16 #define SE_SPI_CPHA             0x224
17 #define CPHA                    BIT(0)
18
19 #define SE_SPI_LOOPBACK         0x22c
20 #define LOOPBACK_ENABLE         0x1
21 #define NORMAL_MODE             0x0
22 #define LOOPBACK_MSK            GENMASK(1, 0)
23
24 #define SE_SPI_CPOL             0x230
25 #define CPOL                    BIT(2)
26
27 #define SE_SPI_DEMUX_OUTPUT_INV 0x24c
28 #define CS_DEMUX_OUTPUT_INV_MSK GENMASK(3, 0)
29
30 #define SE_SPI_DEMUX_SEL        0x250
31 #define CS_DEMUX_OUTPUT_SEL     GENMASK(3, 0)
32
33 #define SE_SPI_TRANS_CFG        0x25c
34 #define CS_TOGGLE               BIT(0)
35
36 #define SE_SPI_WORD_LEN         0x268
37 #define WORD_LEN_MSK            GENMASK(9, 0)
38 #define MIN_WORD_LEN            4
39
40 #define SE_SPI_TX_TRANS_LEN     0x26c
41 #define SE_SPI_RX_TRANS_LEN     0x270
42 #define TRANS_LEN_MSK           GENMASK(23, 0)
43
44 #define SE_SPI_PRE_POST_CMD_DLY 0x274
45
46 #define SE_SPI_DELAY_COUNTERS   0x278
47 #define SPI_INTER_WORDS_DELAY_MSK       GENMASK(9, 0)
48 #define SPI_CS_CLK_DELAY_MSK            GENMASK(19, 10)
49 #define SPI_CS_CLK_DELAY_SHFT           10
50
51 /* M_CMD OP codes for SPI */
52 #define SPI_TX_ONLY             1
53 #define SPI_RX_ONLY             2
54 #define SPI_TX_RX               7
55 #define SPI_CS_ASSERT           8
56 #define SPI_CS_DEASSERT         9
57 #define SPI_SCK_ONLY            10
58 /* M_CMD params for SPI */
59 #define SPI_PRE_CMD_DELAY       BIT(0)
60 #define TIMESTAMP_BEFORE        BIT(1)
61 #define FRAGMENTATION           BIT(2)
62 #define TIMESTAMP_AFTER         BIT(3)
63 #define POST_CMD_DELAY          BIT(4)
64
65 struct spi_geni_master {
66         struct geni_se se;
67         struct device *dev;
68         u32 tx_fifo_depth;
69         u32 fifo_width_bits;
70         u32 tx_wm;
71         unsigned long cur_speed_hz;
72         unsigned int cur_bits_per_word;
73         unsigned int tx_rem_bytes;
74         unsigned int rx_rem_bytes;
75         const struct spi_transfer *cur_xfer;
76         struct completion cs_done;
77         struct completion cancel_done;
78         struct completion abort_done;
79         unsigned int oversampling;
80         spinlock_t lock;
81         int irq;
82         bool cs_flag;
83 };
84
85 static int get_spi_clk_cfg(unsigned int speed_hz,
86                         struct spi_geni_master *mas,
87                         unsigned int *clk_idx,
88                         unsigned int *clk_div)
89 {
90         unsigned long sclk_freq;
91         unsigned int actual_hz;
92         struct geni_se *se = &mas->se;
93         int ret;
94
95         ret = geni_se_clk_freq_match(&mas->se,
96                                 speed_hz * mas->oversampling,
97                                 clk_idx, &sclk_freq, false);
98         if (ret) {
99                 dev_err(mas->dev, "Failed(%d) to find src clk for %dHz\n",
100                                                         ret, speed_hz);
101                 return ret;
102         }
103
104         *clk_div = DIV_ROUND_UP(sclk_freq, mas->oversampling * speed_hz);
105         actual_hz = sclk_freq / (mas->oversampling * *clk_div);
106
107         dev_dbg(mas->dev, "req %u=>%u sclk %lu, idx %d, div %d\n", speed_hz,
108                                 actual_hz, sclk_freq, *clk_idx, *clk_div);
109         ret = clk_set_rate(se->clk, sclk_freq);
110         if (ret)
111                 dev_err(mas->dev, "clk_set_rate failed %d\n", ret);
112         return ret;
113 }
114
115 static void handle_fifo_timeout(struct spi_master *spi,
116                                 struct spi_message *msg)
117 {
118         struct spi_geni_master *mas = spi_master_get_devdata(spi);
119         unsigned long time_left;
120         struct geni_se *se = &mas->se;
121
122         spin_lock_irq(&mas->lock);
123         reinit_completion(&mas->cancel_done);
124         writel(0, se->base + SE_GENI_TX_WATERMARK_REG);
125         mas->cur_xfer = NULL;
126         geni_se_cancel_m_cmd(se);
127         spin_unlock_irq(&mas->lock);
128
129         time_left = wait_for_completion_timeout(&mas->cancel_done, HZ);
130         if (time_left)
131                 return;
132
133         spin_lock_irq(&mas->lock);
134         reinit_completion(&mas->abort_done);
135         geni_se_abort_m_cmd(se);
136         spin_unlock_irq(&mas->lock);
137
138         time_left = wait_for_completion_timeout(&mas->abort_done, HZ);
139         if (!time_left)
140                 dev_err(mas->dev, "Failed to cancel/abort m_cmd\n");
141 }
142
143 static void spi_geni_set_cs(struct spi_device *slv, bool set_flag)
144 {
145         struct spi_geni_master *mas = spi_master_get_devdata(slv->master);
146         struct spi_master *spi = dev_get_drvdata(mas->dev);
147         struct geni_se *se = &mas->se;
148         unsigned long time_left;
149
150         if (!(slv->mode & SPI_CS_HIGH))
151                 set_flag = !set_flag;
152
153         if (set_flag == mas->cs_flag)
154                 return;
155
156         mas->cs_flag = set_flag;
157
158         pm_runtime_get_sync(mas->dev);
159         spin_lock_irq(&mas->lock);
160         reinit_completion(&mas->cs_done);
161         if (set_flag)
162                 geni_se_setup_m_cmd(se, SPI_CS_ASSERT, 0);
163         else
164                 geni_se_setup_m_cmd(se, SPI_CS_DEASSERT, 0);
165         spin_unlock_irq(&mas->lock);
166
167         time_left = wait_for_completion_timeout(&mas->cs_done, HZ);
168         if (!time_left)
169                 handle_fifo_timeout(spi, NULL);
170
171         pm_runtime_put(mas->dev);
172 }
173
174 static void spi_setup_word_len(struct spi_geni_master *mas, u16 mode,
175                                         unsigned int bits_per_word)
176 {
177         unsigned int pack_words;
178         bool msb_first = (mode & SPI_LSB_FIRST) ? false : true;
179         struct geni_se *se = &mas->se;
180         u32 word_len;
181
182         word_len = readl(se->base + SE_SPI_WORD_LEN);
183
184         /*
185          * If bits_per_word isn't a byte aligned value, set the packing to be
186          * 1 SPI word per FIFO word.
187          */
188         if (!(mas->fifo_width_bits % bits_per_word))
189                 pack_words = mas->fifo_width_bits / bits_per_word;
190         else
191                 pack_words = 1;
192         word_len &= ~WORD_LEN_MSK;
193         word_len |= ((bits_per_word - MIN_WORD_LEN) & WORD_LEN_MSK);
194         geni_se_config_packing(&mas->se, bits_per_word, pack_words, msb_first,
195                                                                 true, true);
196         writel(word_len, se->base + SE_SPI_WORD_LEN);
197 }
198
199 static int setup_fifo_params(struct spi_device *spi_slv,
200                                         struct spi_master *spi)
201 {
202         struct spi_geni_master *mas = spi_master_get_devdata(spi);
203         struct geni_se *se = &mas->se;
204         u32 loopback_cfg, cpol, cpha, demux_output_inv;
205         u32 demux_sel, clk_sel, m_clk_cfg, idx, div;
206         int ret;
207
208         loopback_cfg = readl(se->base + SE_SPI_LOOPBACK);
209         cpol = readl(se->base + SE_SPI_CPOL);
210         cpha = readl(se->base + SE_SPI_CPHA);
211         demux_output_inv = 0;
212         loopback_cfg &= ~LOOPBACK_MSK;
213         cpol &= ~CPOL;
214         cpha &= ~CPHA;
215
216         if (spi_slv->mode & SPI_LOOP)
217                 loopback_cfg |= LOOPBACK_ENABLE;
218
219         if (spi_slv->mode & SPI_CPOL)
220                 cpol |= CPOL;
221
222         if (spi_slv->mode & SPI_CPHA)
223                 cpha |= CPHA;
224
225         if (spi_slv->mode & SPI_CS_HIGH)
226                 demux_output_inv = BIT(spi_slv->chip_select);
227
228         demux_sel = spi_slv->chip_select;
229         mas->cur_speed_hz = spi_slv->max_speed_hz;
230         mas->cur_bits_per_word = spi_slv->bits_per_word;
231
232         ret = get_spi_clk_cfg(mas->cur_speed_hz, mas, &idx, &div);
233         if (ret) {
234                 dev_err(mas->dev, "Err setting clks ret(%d) for %ld\n",
235                                                         ret, mas->cur_speed_hz);
236                 return ret;
237         }
238
239         clk_sel = idx & CLK_SEL_MSK;
240         m_clk_cfg = (div << CLK_DIV_SHFT) | SER_CLK_EN;
241         spi_setup_word_len(mas, spi_slv->mode, spi_slv->bits_per_word);
242         writel(loopback_cfg, se->base + SE_SPI_LOOPBACK);
243         writel(demux_sel, se->base + SE_SPI_DEMUX_SEL);
244         writel(cpha, se->base + SE_SPI_CPHA);
245         writel(cpol, se->base + SE_SPI_CPOL);
246         writel(demux_output_inv, se->base + SE_SPI_DEMUX_OUTPUT_INV);
247         writel(clk_sel, se->base + SE_GENI_CLK_SEL);
248         writel(m_clk_cfg, se->base + GENI_SER_M_CLK_CFG);
249         return 0;
250 }
251
252 static int spi_geni_prepare_message(struct spi_master *spi,
253                                         struct spi_message *spi_msg)
254 {
255         int ret;
256         struct spi_geni_master *mas = spi_master_get_devdata(spi);
257         struct geni_se *se = &mas->se;
258
259         geni_se_select_mode(se, GENI_SE_FIFO);
260         ret = setup_fifo_params(spi_msg->spi, spi);
261         if (ret)
262                 dev_err(mas->dev, "Couldn't select mode %d\n", ret);
263         return ret;
264 }
265
266 static int spi_geni_init(struct spi_geni_master *mas)
267 {
268         struct geni_se *se = &mas->se;
269         unsigned int proto, major, minor, ver;
270
271         pm_runtime_get_sync(mas->dev);
272
273         proto = geni_se_read_proto(se);
274         if (proto != GENI_SE_SPI) {
275                 dev_err(mas->dev, "Invalid proto %d\n", proto);
276                 pm_runtime_put(mas->dev);
277                 return -ENXIO;
278         }
279         mas->tx_fifo_depth = geni_se_get_tx_fifo_depth(se);
280
281         /* Width of Tx and Rx FIFO is same */
282         mas->fifo_width_bits = geni_se_get_tx_fifo_width(se);
283
284         /*
285          * Hardware programming guide suggests to configure
286          * RX FIFO RFR level to fifo_depth-2.
287          */
288         geni_se_init(se, mas->tx_fifo_depth / 2, mas->tx_fifo_depth - 2);
289         /* Transmit an entire FIFO worth of data per IRQ */
290         mas->tx_wm = 1;
291         ver = geni_se_get_qup_hw_version(se);
292         major = GENI_SE_VERSION_MAJOR(ver);
293         minor = GENI_SE_VERSION_MINOR(ver);
294
295         if (major == 1 && minor == 0)
296                 mas->oversampling = 2;
297         else
298                 mas->oversampling = 1;
299
300         pm_runtime_put(mas->dev);
301         return 0;
302 }
303
304 static void setup_fifo_xfer(struct spi_transfer *xfer,
305                                 struct spi_geni_master *mas,
306                                 u16 mode, struct spi_master *spi)
307 {
308         u32 m_cmd = 0;
309         u32 spi_tx_cfg, len;
310         struct geni_se *se = &mas->se;
311
312         /*
313          * Ensure that our interrupt handler isn't still running from some
314          * prior command before we start messing with the hardware behind
315          * its back.  We don't need to _keep_ the lock here since we're only
316          * worried about racing with out interrupt handler.  The SPI core
317          * already handles making sure that we're not trying to do two
318          * transfers at once or setting a chip select and doing a transfer
319          * concurrently.
320          *
321          * NOTE: we actually _can't_ hold the lock here because possibly we
322          * might call clk_set_rate() which needs to be able to sleep.
323          */
324         spin_lock_irq(&mas->lock);
325         spin_unlock_irq(&mas->lock);
326
327         spi_tx_cfg = readl(se->base + SE_SPI_TRANS_CFG);
328         if (xfer->bits_per_word != mas->cur_bits_per_word) {
329                 spi_setup_word_len(mas, mode, xfer->bits_per_word);
330                 mas->cur_bits_per_word = xfer->bits_per_word;
331         }
332
333         /* Speed and bits per word can be overridden per transfer */
334         if (xfer->speed_hz != mas->cur_speed_hz) {
335                 int ret;
336                 u32 clk_sel, m_clk_cfg;
337                 unsigned int idx, div;
338
339                 ret = get_spi_clk_cfg(xfer->speed_hz, mas, &idx, &div);
340                 if (ret) {
341                         dev_err(mas->dev, "Err setting clks:%d\n", ret);
342                         return;
343                 }
344                 /*
345                  * SPI core clock gets configured with the requested frequency
346                  * or the frequency closer to the requested frequency.
347                  * For that reason requested frequency is stored in the
348                  * cur_speed_hz and referred in the consecutive transfer instead
349                  * of calling clk_get_rate() API.
350                  */
351                 mas->cur_speed_hz = xfer->speed_hz;
352                 clk_sel = idx & CLK_SEL_MSK;
353                 m_clk_cfg = (div << CLK_DIV_SHFT) | SER_CLK_EN;
354                 writel(clk_sel, se->base + SE_GENI_CLK_SEL);
355                 writel(m_clk_cfg, se->base + GENI_SER_M_CLK_CFG);
356         }
357
358         mas->tx_rem_bytes = 0;
359         mas->rx_rem_bytes = 0;
360
361         spi_tx_cfg &= ~CS_TOGGLE;
362
363         if (!(mas->cur_bits_per_word % MIN_WORD_LEN))
364                 len = xfer->len * BITS_PER_BYTE / mas->cur_bits_per_word;
365         else
366                 len = xfer->len / (mas->cur_bits_per_word / BITS_PER_BYTE + 1);
367         len &= TRANS_LEN_MSK;
368
369         mas->cur_xfer = xfer;
370         if (xfer->tx_buf) {
371                 m_cmd |= SPI_TX_ONLY;
372                 mas->tx_rem_bytes = xfer->len;
373                 writel(len, se->base + SE_SPI_TX_TRANS_LEN);
374         }
375
376         if (xfer->rx_buf) {
377                 m_cmd |= SPI_RX_ONLY;
378                 writel(len, se->base + SE_SPI_RX_TRANS_LEN);
379                 mas->rx_rem_bytes = xfer->len;
380         }
381         writel(spi_tx_cfg, se->base + SE_SPI_TRANS_CFG);
382
383         /*
384          * Lock around right before we start the transfer since our
385          * interrupt could come in at any time now.
386          */
387         spin_lock_irq(&mas->lock);
388         geni_se_setup_m_cmd(se, m_cmd, FRAGMENTATION);
389
390         /*
391          * TX_WATERMARK_REG should be set after SPI configuration and
392          * setting up GENI SE engine, as driver starts data transfer
393          * for the watermark interrupt.
394          */
395         if (m_cmd & SPI_TX_ONLY)
396                 writel(mas->tx_wm, se->base + SE_GENI_TX_WATERMARK_REG);
397         spin_unlock_irq(&mas->lock);
398 }
399
400 static int spi_geni_transfer_one(struct spi_master *spi,
401                                 struct spi_device *slv,
402                                 struct spi_transfer *xfer)
403 {
404         struct spi_geni_master *mas = spi_master_get_devdata(spi);
405
406         /* Terminate and return success for 0 byte length transfer */
407         if (!xfer->len)
408                 return 0;
409
410         setup_fifo_xfer(xfer, mas, slv->mode, spi);
411         return 1;
412 }
413
414 static unsigned int geni_byte_per_fifo_word(struct spi_geni_master *mas)
415 {
416         /*
417          * Calculate how many bytes we'll put in each FIFO word.  If the
418          * transfer words don't pack cleanly into a FIFO word we'll just put
419          * one transfer word in each FIFO word.  If they do pack we'll pack 'em.
420          */
421         if (mas->fifo_width_bits % mas->cur_bits_per_word)
422                 return roundup_pow_of_two(DIV_ROUND_UP(mas->cur_bits_per_word,
423                                                        BITS_PER_BYTE));
424
425         return mas->fifo_width_bits / BITS_PER_BYTE;
426 }
427
428 static void geni_spi_handle_tx(struct spi_geni_master *mas)
429 {
430         struct geni_se *se = &mas->se;
431         unsigned int max_bytes;
432         const u8 *tx_buf;
433         unsigned int bytes_per_fifo_word = geni_byte_per_fifo_word(mas);
434         unsigned int i = 0;
435
436         max_bytes = (mas->tx_fifo_depth - mas->tx_wm) * bytes_per_fifo_word;
437         if (mas->tx_rem_bytes < max_bytes)
438                 max_bytes = mas->tx_rem_bytes;
439
440         tx_buf = mas->cur_xfer->tx_buf + mas->cur_xfer->len - mas->tx_rem_bytes;
441         while (i < max_bytes) {
442                 unsigned int j;
443                 unsigned int bytes_to_write;
444                 u32 fifo_word = 0;
445                 u8 *fifo_byte = (u8 *)&fifo_word;
446
447                 bytes_to_write = min(bytes_per_fifo_word, max_bytes - i);
448                 for (j = 0; j < bytes_to_write; j++)
449                         fifo_byte[j] = tx_buf[i++];
450                 iowrite32_rep(se->base + SE_GENI_TX_FIFOn, &fifo_word, 1);
451         }
452         mas->tx_rem_bytes -= max_bytes;
453         if (!mas->tx_rem_bytes)
454                 writel(0, se->base + SE_GENI_TX_WATERMARK_REG);
455 }
456
457 static void geni_spi_handle_rx(struct spi_geni_master *mas)
458 {
459         struct geni_se *se = &mas->se;
460         u32 rx_fifo_status;
461         unsigned int rx_bytes;
462         unsigned int rx_last_byte_valid;
463         u8 *rx_buf;
464         unsigned int bytes_per_fifo_word = geni_byte_per_fifo_word(mas);
465         unsigned int i = 0;
466
467         rx_fifo_status = readl(se->base + SE_GENI_RX_FIFO_STATUS);
468         rx_bytes = (rx_fifo_status & RX_FIFO_WC_MSK) * bytes_per_fifo_word;
469         if (rx_fifo_status & RX_LAST) {
470                 rx_last_byte_valid = rx_fifo_status & RX_LAST_BYTE_VALID_MSK;
471                 rx_last_byte_valid >>= RX_LAST_BYTE_VALID_SHFT;
472                 if (rx_last_byte_valid && rx_last_byte_valid < 4)
473                         rx_bytes -= bytes_per_fifo_word - rx_last_byte_valid;
474         }
475         if (mas->rx_rem_bytes < rx_bytes)
476                 rx_bytes = mas->rx_rem_bytes;
477
478         rx_buf = mas->cur_xfer->rx_buf + mas->cur_xfer->len - mas->rx_rem_bytes;
479         while (i < rx_bytes) {
480                 u32 fifo_word = 0;
481                 u8 *fifo_byte = (u8 *)&fifo_word;
482                 unsigned int bytes_to_read;
483                 unsigned int j;
484
485                 bytes_to_read = min(bytes_per_fifo_word, rx_bytes - i);
486                 ioread32_rep(se->base + SE_GENI_RX_FIFOn, &fifo_word, 1);
487                 for (j = 0; j < bytes_to_read; j++)
488                         rx_buf[i++] = fifo_byte[j];
489         }
490         mas->rx_rem_bytes -= rx_bytes;
491 }
492
493 static irqreturn_t geni_spi_isr(int irq, void *data)
494 {
495         struct spi_master *spi = data;
496         struct spi_geni_master *mas = spi_master_get_devdata(spi);
497         struct geni_se *se = &mas->se;
498         u32 m_irq;
499
500         m_irq = readl(se->base + SE_GENI_M_IRQ_STATUS);
501         if (!m_irq)
502                 return IRQ_NONE;
503
504         if (m_irq & (M_CMD_OVERRUN_EN | M_ILLEGAL_CMD_EN | M_CMD_FAILURE_EN |
505                      M_RX_FIFO_RD_ERR_EN | M_RX_FIFO_WR_ERR_EN |
506                      M_TX_FIFO_RD_ERR_EN | M_TX_FIFO_WR_ERR_EN))
507                 dev_warn(mas->dev, "Unexpected IRQ err status %#010x\n", m_irq);
508
509         spin_lock(&mas->lock);
510
511         if ((m_irq & M_RX_FIFO_WATERMARK_EN) || (m_irq & M_RX_FIFO_LAST_EN))
512                 geni_spi_handle_rx(mas);
513
514         if (m_irq & M_TX_FIFO_WATERMARK_EN)
515                 geni_spi_handle_tx(mas);
516
517         if (m_irq & M_CMD_DONE_EN) {
518                 if (mas->cur_xfer) {
519                         spi_finalize_current_transfer(spi);
520                         mas->cur_xfer = NULL;
521                         /*
522                          * If this happens, then a CMD_DONE came before all the
523                          * Tx buffer bytes were sent out. This is unusual, log
524                          * this condition and disable the WM interrupt to
525                          * prevent the system from stalling due an interrupt
526                          * storm.
527                          *
528                          * If this happens when all Rx bytes haven't been
529                          * received, log the condition. The only known time
530                          * this can happen is if bits_per_word != 8 and some
531                          * registers that expect xfer lengths in num spi_words
532                          * weren't written correctly.
533                          */
534                         if (mas->tx_rem_bytes) {
535                                 writel(0, se->base + SE_GENI_TX_WATERMARK_REG);
536                                 dev_err(mas->dev, "Premature done. tx_rem = %d bpw%d\n",
537                                         mas->tx_rem_bytes, mas->cur_bits_per_word);
538                         }
539                         if (mas->rx_rem_bytes)
540                                 dev_err(mas->dev, "Premature done. rx_rem = %d bpw%d\n",
541                                         mas->rx_rem_bytes, mas->cur_bits_per_word);
542                 } else {
543                         complete(&mas->cs_done);
544                 }
545         }
546
547         if (m_irq & M_CMD_CANCEL_EN)
548                 complete(&mas->cancel_done);
549         if (m_irq & M_CMD_ABORT_EN)
550                 complete(&mas->abort_done);
551
552         /*
553          * It's safe or a good idea to Ack all of our our interrupts at the
554          * end of the function. Specifically:
555          * - M_CMD_DONE_EN / M_RX_FIFO_LAST_EN: Edge triggered interrupts and
556          *   clearing Acks. Clearing at the end relies on nobody else having
557          *   started a new transfer yet or else we could be clearing _their_
558          *   done bit, but everyone grabs the spinlock before starting a new
559          *   transfer.
560          * - M_RX_FIFO_WATERMARK_EN / M_TX_FIFO_WATERMARK_EN: These appear
561          *   to be "latched level" interrupts so it's important to clear them
562          *   _after_ you've handled the condition and always safe to do so
563          *   since they'll re-assert if they're still happening.
564          */
565         writel(m_irq, se->base + SE_GENI_M_IRQ_CLEAR);
566
567         spin_unlock(&mas->lock);
568
569         return IRQ_HANDLED;
570 }
571
572 static int spi_geni_probe(struct platform_device *pdev)
573 {
574         int ret, irq;
575         struct spi_master *spi;
576         struct spi_geni_master *mas;
577         void __iomem *base;
578         struct clk *clk;
579         struct device *dev = &pdev->dev;
580
581         irq = platform_get_irq(pdev, 0);
582         if (irq < 0)
583                 return irq;
584
585         base = devm_platform_ioremap_resource(pdev, 0);
586         if (IS_ERR(base))
587                 return PTR_ERR(base);
588
589         clk = devm_clk_get(dev, "se");
590         if (IS_ERR(clk))
591                 return PTR_ERR(clk);
592
593         spi = spi_alloc_master(dev, sizeof(*mas));
594         if (!spi)
595                 return -ENOMEM;
596
597         platform_set_drvdata(pdev, spi);
598         mas = spi_master_get_devdata(spi);
599         mas->irq = irq;
600         mas->dev = dev;
601         mas->se.dev = dev;
602         mas->se.wrapper = dev_get_drvdata(dev->parent);
603         mas->se.base = base;
604         mas->se.clk = clk;
605
606         spi->bus_num = -1;
607         spi->dev.of_node = dev->of_node;
608         spi->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_CS_HIGH;
609         spi->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
610         spi->num_chipselect = 4;
611         spi->max_speed_hz = 50000000;
612         spi->prepare_message = spi_geni_prepare_message;
613         spi->transfer_one = spi_geni_transfer_one;
614         spi->auto_runtime_pm = true;
615         spi->handle_err = handle_fifo_timeout;
616         spi->set_cs = spi_geni_set_cs;
617
618         init_completion(&mas->cs_done);
619         init_completion(&mas->cancel_done);
620         init_completion(&mas->abort_done);
621         spin_lock_init(&mas->lock);
622         pm_runtime_use_autosuspend(&pdev->dev);
623         pm_runtime_set_autosuspend_delay(&pdev->dev, 250);
624         pm_runtime_enable(dev);
625
626         ret = spi_geni_init(mas);
627         if (ret)
628                 goto spi_geni_probe_runtime_disable;
629
630         ret = request_irq(mas->irq, geni_spi_isr, 0, dev_name(dev), spi);
631         if (ret)
632                 goto spi_geni_probe_runtime_disable;
633
634         ret = spi_register_master(spi);
635         if (ret)
636                 goto spi_geni_probe_free_irq;
637
638         return 0;
639 spi_geni_probe_free_irq:
640         free_irq(mas->irq, spi);
641 spi_geni_probe_runtime_disable:
642         pm_runtime_disable(dev);
643         spi_master_put(spi);
644         return ret;
645 }
646
647 static int spi_geni_remove(struct platform_device *pdev)
648 {
649         struct spi_master *spi = platform_get_drvdata(pdev);
650         struct spi_geni_master *mas = spi_master_get_devdata(spi);
651
652         /* Unregister _before_ disabling pm_runtime() so we stop transfers */
653         spi_unregister_master(spi);
654
655         free_irq(mas->irq, spi);
656         pm_runtime_disable(&pdev->dev);
657         return 0;
658 }
659
660 static int __maybe_unused spi_geni_runtime_suspend(struct device *dev)
661 {
662         struct spi_master *spi = dev_get_drvdata(dev);
663         struct spi_geni_master *mas = spi_master_get_devdata(spi);
664
665         return geni_se_resources_off(&mas->se);
666 }
667
668 static int __maybe_unused spi_geni_runtime_resume(struct device *dev)
669 {
670         struct spi_master *spi = dev_get_drvdata(dev);
671         struct spi_geni_master *mas = spi_master_get_devdata(spi);
672
673         return geni_se_resources_on(&mas->se);
674 }
675
676 static int __maybe_unused spi_geni_suspend(struct device *dev)
677 {
678         struct spi_master *spi = dev_get_drvdata(dev);
679         int ret;
680
681         ret = spi_master_suspend(spi);
682         if (ret)
683                 return ret;
684
685         ret = pm_runtime_force_suspend(dev);
686         if (ret)
687                 spi_master_resume(spi);
688
689         return ret;
690 }
691
692 static int __maybe_unused spi_geni_resume(struct device *dev)
693 {
694         struct spi_master *spi = dev_get_drvdata(dev);
695         int ret;
696
697         ret = pm_runtime_force_resume(dev);
698         if (ret)
699                 return ret;
700
701         ret = spi_master_resume(spi);
702         if (ret)
703                 pm_runtime_force_suspend(dev);
704
705         return ret;
706 }
707
708 static const struct dev_pm_ops spi_geni_pm_ops = {
709         SET_RUNTIME_PM_OPS(spi_geni_runtime_suspend,
710                                         spi_geni_runtime_resume, NULL)
711         SET_SYSTEM_SLEEP_PM_OPS(spi_geni_suspend, spi_geni_resume)
712 };
713
714 static const struct of_device_id spi_geni_dt_match[] = {
715         { .compatible = "qcom,geni-spi" },
716         {}
717 };
718 MODULE_DEVICE_TABLE(of, spi_geni_dt_match);
719
720 static struct platform_driver spi_geni_driver = {
721         .probe  = spi_geni_probe,
722         .remove = spi_geni_remove,
723         .driver = {
724                 .name = "geni_spi",
725                 .pm = &spi_geni_pm_ops,
726                 .of_match_table = spi_geni_dt_match,
727         },
728 };
729 module_platform_driver(spi_geni_driver);
730
731 MODULE_DESCRIPTION("SPI driver for GENI based QUP cores");
732 MODULE_LICENSE("GPL v2");