2 * Copyright (C) 2011-2015 Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
3 * Copyright (C) 2016 Hauke Mehrtens <hauke@hauke-m.de>
5 * This program is free software; you can distribute it and/or modify it
6 * under the terms of the GNU General Public License (Version 2) as
7 * published by the Free Software Foundation.
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/of_device.h>
13 #include <linux/clk.h>
15 #include <linux/delay.h>
16 #include <linux/interrupt.h>
17 #include <linux/sched.h>
18 #include <linux/completion.h>
19 #include <linux/spinlock.h>
20 #include <linux/err.h>
21 #include <linux/gpio.h>
22 #include <linux/pm_runtime.h>
23 #include <linux/spi/spi.h>
26 #include <lantiq_soc.h>
29 #define SPI_RX_IRQ_NAME "spi_rx"
30 #define SPI_TX_IRQ_NAME "spi_tx"
31 #define SPI_ERR_IRQ_NAME "spi_err"
32 #define SPI_FRM_IRQ_NAME "spi_frm"
35 #define SPI_PISEL 0x04
39 #define SPI_WHBSTATE 0x18
42 #define SPI_RXFCON 0x30
43 #define SPI_TXFCON 0x34
44 #define SPI_FSTAT 0x38
46 #define SPI_BRSTAT 0x44
47 #define SPI_SFCON 0x60
48 #define SPI_SFSTAT 0x64
49 #define SPI_GPOCON 0x70
50 #define SPI_GPOSTAT 0x74
52 #define SPI_RXREQ 0x80
53 #define SPI_RXCNT 0x84
54 #define SPI_DMACON 0xec
55 #define SPI_IRNEN 0xf4
56 #define SPI_IRNICR 0xf8
57 #define SPI_IRNCR 0xfc
59 #define SPI_CLC_SMC_S 16 /* Clock divider for sleep mode */
60 #define SPI_CLC_SMC_M (0xFF << SPI_CLC_SMC_S)
61 #define SPI_CLC_RMC_S 8 /* Clock divider for normal run mode */
62 #define SPI_CLC_RMC_M (0xFF << SPI_CLC_RMC_S)
63 #define SPI_CLC_DISS BIT(1) /* Disable status bit */
64 #define SPI_CLC_DISR BIT(0) /* Disable request bit */
66 #define SPI_ID_TXFS_S 24 /* Implemented TX FIFO size */
67 #define SPI_ID_TXFS_M (0x3F << SPI_ID_TXFS_S)
68 #define SPI_ID_RXFS_S 16 /* Implemented RX FIFO size */
69 #define SPI_ID_RXFS_M (0x3F << SPI_ID_RXFS_S)
70 #define SPI_ID_MOD_S 8 /* Module ID */
71 #define SPI_ID_MOD_M (0xff << SPI_ID_MOD_S)
72 #define SPI_ID_CFG_S 5 /* DMA interface support */
73 #define SPI_ID_CFG_M (1 << SPI_ID_CFG_S)
74 #define SPI_ID_REV_M 0x1F /* Hardware revision number */
76 #define SPI_CON_BM_S 16 /* Data width selection */
77 #define SPI_CON_BM_M (0x1F << SPI_CON_BM_S)
78 #define SPI_CON_EM BIT(24) /* Echo mode */
79 #define SPI_CON_IDLE BIT(23) /* Idle bit value */
80 #define SPI_CON_ENBV BIT(22) /* Enable byte valid control */
81 #define SPI_CON_RUEN BIT(12) /* Receive underflow error enable */
82 #define SPI_CON_TUEN BIT(11) /* Transmit underflow error enable */
83 #define SPI_CON_AEN BIT(10) /* Abort error enable */
84 #define SPI_CON_REN BIT(9) /* Receive overflow error enable */
85 #define SPI_CON_TEN BIT(8) /* Transmit overflow error enable */
86 #define SPI_CON_LB BIT(7) /* Loopback control */
87 #define SPI_CON_PO BIT(6) /* Clock polarity control */
88 #define SPI_CON_PH BIT(5) /* Clock phase control */
89 #define SPI_CON_HB BIT(4) /* Heading control */
90 #define SPI_CON_RXOFF BIT(1) /* Switch receiver off */
91 #define SPI_CON_TXOFF BIT(0) /* Switch transmitter off */
93 #define SPI_STAT_RXBV_S 28
94 #define SPI_STAT_RXBV_M (0x7 << SPI_STAT_RXBV_S)
95 #define SPI_STAT_BSY BIT(13) /* Busy flag */
96 #define SPI_STAT_RUE BIT(12) /* Receive underflow error flag */
97 #define SPI_STAT_TUE BIT(11) /* Transmit underflow error flag */
98 #define SPI_STAT_AE BIT(10) /* Abort error flag */
99 #define SPI_STAT_RE BIT(9) /* Receive error flag */
100 #define SPI_STAT_TE BIT(8) /* Transmit error flag */
101 #define SPI_STAT_ME BIT(7) /* Mode error flag */
102 #define SPI_STAT_MS BIT(1) /* Master/slave select bit */
103 #define SPI_STAT_EN BIT(0) /* Enable bit */
104 #define SPI_STAT_ERRORS (SPI_STAT_ME | SPI_STAT_TE | SPI_STAT_RE | \
105 SPI_STAT_AE | SPI_STAT_TUE | SPI_STAT_RUE)
107 #define SPI_WHBSTATE_SETTUE BIT(15) /* Set transmit underflow error flag */
108 #define SPI_WHBSTATE_SETAE BIT(14) /* Set abort error flag */
109 #define SPI_WHBSTATE_SETRE BIT(13) /* Set receive error flag */
110 #define SPI_WHBSTATE_SETTE BIT(12) /* Set transmit error flag */
111 #define SPI_WHBSTATE_CLRTUE BIT(11) /* Clear transmit underflow error flag */
112 #define SPI_WHBSTATE_CLRAE BIT(10) /* Clear abort error flag */
113 #define SPI_WHBSTATE_CLRRE BIT(9) /* Clear receive error flag */
114 #define SPI_WHBSTATE_CLRTE BIT(8) /* Clear transmit error flag */
115 #define SPI_WHBSTATE_SETME BIT(7) /* Set mode error flag */
116 #define SPI_WHBSTATE_CLRME BIT(6) /* Clear mode error flag */
117 #define SPI_WHBSTATE_SETRUE BIT(5) /* Set receive underflow error flag */
118 #define SPI_WHBSTATE_CLRRUE BIT(4) /* Clear receive underflow error flag */
119 #define SPI_WHBSTATE_SETMS BIT(3) /* Set master select bit */
120 #define SPI_WHBSTATE_CLRMS BIT(2) /* Clear master select bit */
121 #define SPI_WHBSTATE_SETEN BIT(1) /* Set enable bit (operational mode) */
122 #define SPI_WHBSTATE_CLREN BIT(0) /* Clear enable bit (config mode */
123 #define SPI_WHBSTATE_CLR_ERRORS (SPI_WHBSTATE_CLRRUE | SPI_WHBSTATE_CLRME | \
124 SPI_WHBSTATE_CLRTE | SPI_WHBSTATE_CLRRE | \
125 SPI_WHBSTATE_CLRAE | SPI_WHBSTATE_CLRTUE)
127 #define SPI_RXFCON_RXFITL_S 8 /* FIFO interrupt trigger level */
128 #define SPI_RXFCON_RXFITL_M (0x3F << SPI_RXFCON_RXFITL_S)
129 #define SPI_RXFCON_RXFLU BIT(1) /* FIFO flush */
130 #define SPI_RXFCON_RXFEN BIT(0) /* FIFO enable */
132 #define SPI_TXFCON_TXFITL_S 8 /* FIFO interrupt trigger level */
133 #define SPI_TXFCON_TXFITL_M (0x3F << SPI_TXFCON_TXFITL_S)
134 #define SPI_TXFCON_TXFLU BIT(1) /* FIFO flush */
135 #define SPI_TXFCON_TXFEN BIT(0) /* FIFO enable */
137 #define SPI_FSTAT_RXFFL_S 0
138 #define SPI_FSTAT_RXFFL_M (0x3f << SPI_FSTAT_RXFFL_S)
139 #define SPI_FSTAT_TXFFL_S 8
140 #define SPI_FSTAT_TXFFL_M (0x3f << SPI_FSTAT_TXFFL_S)
142 #define SPI_GPOCON_ISCSBN_S 8
143 #define SPI_GPOCON_INVOUTN_S 0
145 #define SPI_FGPO_SETOUTN_S 8
146 #define SPI_FGPO_CLROUTN_S 0
148 #define SPI_RXREQ_RXCNT_M 0xFFFF /* Receive count value */
149 #define SPI_RXCNT_TODO_M 0xFFFF /* Recevie to-do value */
151 #define SPI_IRNEN_TFI BIT(4) /* TX finished interrupt */
152 #define SPI_IRNEN_F BIT(3) /* Frame end interrupt request */
153 #define SPI_IRNEN_E BIT(2) /* Error end interrupt request */
154 #define SPI_IRNEN_T_XWAY BIT(1) /* Transmit end interrupt request */
155 #define SPI_IRNEN_R_XWAY BIT(0) /* Receive end interrupt request */
156 #define SPI_IRNEN_R_XRX BIT(1) /* Transmit end interrupt request */
157 #define SPI_IRNEN_T_XRX BIT(0) /* Receive end interrupt request */
158 #define SPI_IRNEN_ALL 0x1F
160 struct lantiq_ssc_hwcfg
{
161 unsigned int irnen_r
;
162 unsigned int irnen_t
;
165 struct lantiq_ssc_spi
{
166 struct spi_master
*master
;
168 void __iomem
*regbase
;
171 const struct lantiq_ssc_hwcfg
*hwcfg
;
174 struct workqueue_struct
*wq
;
175 struct work_struct work
;
179 unsigned int tx_todo
;
180 unsigned int rx_todo
;
181 unsigned int bits_per_word
;
182 unsigned int speed_hz
;
183 unsigned int tx_fifo_size
;
184 unsigned int rx_fifo_size
;
185 unsigned int base_cs
;
188 static u32
lantiq_ssc_readl(const struct lantiq_ssc_spi
*spi
, u32 reg
)
190 return __raw_readl(spi
->regbase
+ reg
);
193 static void lantiq_ssc_writel(const struct lantiq_ssc_spi
*spi
, u32 val
,
196 __raw_writel(val
, spi
->regbase
+ reg
);
199 static void lantiq_ssc_maskl(const struct lantiq_ssc_spi
*spi
, u32 clr
,
202 u32 val
= __raw_readl(spi
->regbase
+ reg
);
206 __raw_writel(val
, spi
->regbase
+ reg
);
209 static unsigned int tx_fifo_level(const struct lantiq_ssc_spi
*spi
)
211 u32 fstat
= lantiq_ssc_readl(spi
, SPI_FSTAT
);
213 return (fstat
& SPI_FSTAT_TXFFL_M
) >> SPI_FSTAT_TXFFL_S
;
216 static unsigned int rx_fifo_level(const struct lantiq_ssc_spi
*spi
)
218 u32 fstat
= lantiq_ssc_readl(spi
, SPI_FSTAT
);
220 return fstat
& SPI_FSTAT_RXFFL_M
;
223 static unsigned int tx_fifo_free(const struct lantiq_ssc_spi
*spi
)
225 return spi
->tx_fifo_size
- tx_fifo_level(spi
);
228 static void rx_fifo_reset(const struct lantiq_ssc_spi
*spi
)
230 u32 val
= spi
->rx_fifo_size
<< SPI_RXFCON_RXFITL_S
;
232 val
|= SPI_RXFCON_RXFEN
| SPI_RXFCON_RXFLU
;
233 lantiq_ssc_writel(spi
, val
, SPI_RXFCON
);
236 static void tx_fifo_reset(const struct lantiq_ssc_spi
*spi
)
238 u32 val
= 1 << SPI_TXFCON_TXFITL_S
;
240 val
|= SPI_TXFCON_TXFEN
| SPI_TXFCON_TXFLU
;
241 lantiq_ssc_writel(spi
, val
, SPI_TXFCON
);
244 static void rx_fifo_flush(const struct lantiq_ssc_spi
*spi
)
246 lantiq_ssc_maskl(spi
, 0, SPI_RXFCON_RXFLU
, SPI_RXFCON
);
249 static void tx_fifo_flush(const struct lantiq_ssc_spi
*spi
)
251 lantiq_ssc_maskl(spi
, 0, SPI_TXFCON_TXFLU
, SPI_TXFCON
);
254 static void hw_enter_config_mode(const struct lantiq_ssc_spi
*spi
)
256 lantiq_ssc_writel(spi
, SPI_WHBSTATE_CLREN
, SPI_WHBSTATE
);
259 static void hw_enter_active_mode(const struct lantiq_ssc_spi
*spi
)
261 lantiq_ssc_writel(spi
, SPI_WHBSTATE_SETEN
, SPI_WHBSTATE
);
264 static void hw_setup_speed_hz(const struct lantiq_ssc_spi
*spi
,
265 unsigned int max_speed_hz
)
270 * SPI module clock is derived from FPI bus clock dependent on
271 * divider value in CLC.RMS which is always set to 1.
274 * baudrate = --------------
277 spi_clk
= clk_get_rate(spi
->fpi_clk
) / 2;
279 if (max_speed_hz
> spi_clk
)
282 brt
= spi_clk
/ max_speed_hz
- 1;
287 dev_dbg(spi
->dev
, "spi_clk %u, max_speed_hz %u, brt %u\n",
288 spi_clk
, max_speed_hz
, brt
);
290 lantiq_ssc_writel(spi
, brt
, SPI_BRT
);
293 static void hw_setup_bits_per_word(const struct lantiq_ssc_spi
*spi
,
294 unsigned int bits_per_word
)
298 /* CON.BM value = bits_per_word - 1 */
299 bm
= (bits_per_word
- 1) << SPI_CON_BM_S
;
301 lantiq_ssc_maskl(spi
, SPI_CON_BM_M
, bm
, SPI_CON
);
304 static void hw_setup_clock_mode(const struct lantiq_ssc_spi
*spi
,
307 u32 con_set
= 0, con_clr
= 0;
310 * SPI mode mapping in CON register:
311 * Mode CPOL CPHA CON.PO CON.PH
318 con_clr
|= SPI_CON_PH
;
320 con_set
|= SPI_CON_PH
;
323 con_set
|= SPI_CON_PO
| SPI_CON_IDLE
;
325 con_clr
|= SPI_CON_PO
| SPI_CON_IDLE
;
327 /* Set heading control */
328 if (mode
& SPI_LSB_FIRST
)
329 con_clr
|= SPI_CON_HB
;
331 con_set
|= SPI_CON_HB
;
333 /* Set loopback mode */
335 con_set
|= SPI_CON_LB
;
337 con_clr
|= SPI_CON_LB
;
339 lantiq_ssc_maskl(spi
, con_clr
, con_set
, SPI_CON
);
342 static void lantiq_ssc_hw_init(const struct lantiq_ssc_spi
*spi
)
344 const struct lantiq_ssc_hwcfg
*hwcfg
= spi
->hwcfg
;
347 * Set clock divider for run mode to 1 to
348 * run at same frequency as FPI bus
350 lantiq_ssc_writel(spi
, 1 << SPI_CLC_RMC_S
, SPI_CLC
);
352 /* Put controller into config mode */
353 hw_enter_config_mode(spi
);
355 /* Clear error flags */
356 lantiq_ssc_maskl(spi
, 0, SPI_WHBSTATE_CLR_ERRORS
, SPI_WHBSTATE
);
358 /* Enable error checking, disable TX/RX */
359 lantiq_ssc_writel(spi
, SPI_CON_RUEN
| SPI_CON_AEN
| SPI_CON_TEN
|
360 SPI_CON_REN
| SPI_CON_TXOFF
| SPI_CON_RXOFF
, SPI_CON
);
362 /* Setup default SPI mode */
363 hw_setup_bits_per_word(spi
, spi
->bits_per_word
);
364 hw_setup_clock_mode(spi
, SPI_MODE_0
);
366 /* Enable master mode and clear error flags */
367 lantiq_ssc_writel(spi
, SPI_WHBSTATE_SETMS
| SPI_WHBSTATE_CLR_ERRORS
,
370 /* Reset GPIO/CS registers */
371 lantiq_ssc_writel(spi
, 0, SPI_GPOCON
);
372 lantiq_ssc_writel(spi
, 0xFF00, SPI_FPGO
);
374 /* Enable and flush FIFOs */
378 /* Enable interrupts */
379 lantiq_ssc_writel(spi
, hwcfg
->irnen_t
| hwcfg
->irnen_r
| SPI_IRNEN_E
,
383 static int lantiq_ssc_setup(struct spi_device
*spidev
)
385 struct spi_master
*master
= spidev
->master
;
386 struct lantiq_ssc_spi
*spi
= spi_master_get_devdata(master
);
387 unsigned int cs
= spidev
->chip_select
;
390 /* GPIOs are used for CS */
391 if (gpio_is_valid(spidev
->cs_gpio
))
394 dev_dbg(spi
->dev
, "using internal chipselect %u\n", cs
);
396 if (cs
< spi
->base_cs
) {
398 "chipselect %i too small (min %i)\n", cs
, spi
->base_cs
);
402 /* set GPO pin to CS mode */
403 gpocon
= 1 << ((cs
- spi
->base_cs
) + SPI_GPOCON_ISCSBN_S
);
406 if (spidev
->mode
& SPI_CS_HIGH
)
407 gpocon
|= 1 << (cs
- spi
->base_cs
);
409 lantiq_ssc_maskl(spi
, 0, gpocon
, SPI_GPOCON
);
414 static int lantiq_ssc_prepare_message(struct spi_master
*master
,
415 struct spi_message
*message
)
417 struct lantiq_ssc_spi
*spi
= spi_master_get_devdata(master
);
419 hw_enter_config_mode(spi
);
420 hw_setup_clock_mode(spi
, message
->spi
->mode
);
421 hw_enter_active_mode(spi
);
426 static void hw_setup_transfer(struct lantiq_ssc_spi
*spi
,
427 struct spi_device
*spidev
, struct spi_transfer
*t
)
429 unsigned int speed_hz
= t
->speed_hz
;
430 unsigned int bits_per_word
= t
->bits_per_word
;
433 if (bits_per_word
!= spi
->bits_per_word
||
434 speed_hz
!= spi
->speed_hz
) {
435 hw_enter_config_mode(spi
);
436 hw_setup_speed_hz(spi
, speed_hz
);
437 hw_setup_bits_per_word(spi
, bits_per_word
);
438 hw_enter_active_mode(spi
);
440 spi
->speed_hz
= speed_hz
;
441 spi
->bits_per_word
= bits_per_word
;
444 /* Configure transmitter and receiver */
445 con
= lantiq_ssc_readl(spi
, SPI_CON
);
447 con
&= ~SPI_CON_TXOFF
;
449 con
|= SPI_CON_TXOFF
;
452 con
&= ~SPI_CON_RXOFF
;
454 con
|= SPI_CON_RXOFF
;
456 lantiq_ssc_writel(spi
, con
, SPI_CON
);
459 static int lantiq_ssc_unprepare_message(struct spi_master
*master
,
460 struct spi_message
*message
)
462 struct lantiq_ssc_spi
*spi
= spi_master_get_devdata(master
);
464 flush_workqueue(spi
->wq
);
466 /* Disable transmitter and receiver while idle */
467 lantiq_ssc_maskl(spi
, 0, SPI_CON_TXOFF
| SPI_CON_RXOFF
, SPI_CON
);
472 static void tx_fifo_write(struct lantiq_ssc_spi
*spi
)
478 unsigned int tx_free
= tx_fifo_free(spi
);
480 while (spi
->tx_todo
&& tx_free
) {
481 switch (spi
->bits_per_word
) {
489 tx16
= (u16
*) spi
->tx
;
495 tx32
= (u32
*) spi
->tx
;
506 lantiq_ssc_writel(spi
, data
, SPI_TB
);
511 static void rx_fifo_read_full_duplex(struct lantiq_ssc_spi
*spi
)
517 unsigned int rx_fill
= rx_fifo_level(spi
);
520 data
= lantiq_ssc_readl(spi
, SPI_RB
);
522 switch (spi
->bits_per_word
) {
530 rx16
= (u16
*) spi
->rx
;
536 rx32
= (u32
*) spi
->rx
;
550 static void rx_fifo_read_half_duplex(struct lantiq_ssc_spi
*spi
)
554 unsigned int rxbv
, shift
;
555 unsigned int rx_fill
= rx_fifo_level(spi
);
558 * In RX-only mode the bits per word value is ignored by HW. A value
559 * of 32 is used instead. Thus all 4 bytes per FIFO must be read.
560 * If remaining RX bytes are less than 4, the FIFO must be read
561 * differently. The amount of received and valid bytes is indicated
562 * by STAT.RXBV register value.
565 if (spi
->rx_todo
< 4) {
566 rxbv
= (lantiq_ssc_readl(spi
, SPI_STAT
) &
567 SPI_STAT_RXBV_M
) >> SPI_STAT_RXBV_S
;
568 data
= lantiq_ssc_readl(spi
, SPI_RB
);
570 shift
= (rxbv
- 1) * 8;
574 *rx8
++ = (data
>> shift
) & 0xFF;
581 data
= lantiq_ssc_readl(spi
, SPI_RB
);
582 rx32
= (u32
*) spi
->rx
;
592 static void rx_request(struct lantiq_ssc_spi
*spi
)
594 unsigned int rxreq
, rxreq_max
;
597 * To avoid receive overflows at high clocks it is better to request
598 * only the amount of bytes that fits into all FIFOs. This value
599 * depends on the FIFO size implemented in hardware.
601 rxreq
= spi
->rx_todo
;
602 rxreq_max
= spi
->rx_fifo_size
* 4;
603 if (rxreq
> rxreq_max
)
606 lantiq_ssc_writel(spi
, rxreq
, SPI_RXREQ
);
609 static irqreturn_t
lantiq_ssc_xmit_interrupt(int irq
, void *data
)
611 struct lantiq_ssc_spi
*spi
= data
;
614 if (spi
->rx
&& spi
->rx_todo
)
615 rx_fifo_read_full_duplex(spi
);
619 else if (!tx_fifo_level(spi
))
621 } else if (spi
->rx
) {
623 rx_fifo_read_half_duplex(spi
);
637 queue_work(spi
->wq
, &spi
->work
);
642 static irqreturn_t
lantiq_ssc_err_interrupt(int irq
, void *data
)
644 struct lantiq_ssc_spi
*spi
= data
;
645 u32 stat
= lantiq_ssc_readl(spi
, SPI_STAT
);
647 if (!(stat
& SPI_STAT_ERRORS
))
650 if (stat
& SPI_STAT_RUE
)
651 dev_err(spi
->dev
, "receive underflow error\n");
652 if (stat
& SPI_STAT_TUE
)
653 dev_err(spi
->dev
, "transmit underflow error\n");
654 if (stat
& SPI_STAT_AE
)
655 dev_err(spi
->dev
, "abort error\n");
656 if (stat
& SPI_STAT_RE
)
657 dev_err(spi
->dev
, "receive overflow error\n");
658 if (stat
& SPI_STAT_TE
)
659 dev_err(spi
->dev
, "transmit overflow error\n");
660 if (stat
& SPI_STAT_ME
)
661 dev_err(spi
->dev
, "mode error\n");
663 /* Clear error flags */
664 lantiq_ssc_maskl(spi
, 0, SPI_WHBSTATE_CLR_ERRORS
, SPI_WHBSTATE
);
666 /* set bad status so it can be retried */
667 if (spi
->master
->cur_msg
)
668 spi
->master
->cur_msg
->status
= -EIO
;
669 queue_work(spi
->wq
, &spi
->work
);
674 static int transfer_start(struct lantiq_ssc_spi
*spi
, struct spi_device
*spidev
,
675 struct spi_transfer
*t
)
679 spin_lock_irqsave(&spi
->lock
, flags
);
685 spi
->tx_todo
= t
->len
;
687 /* initially fill TX FIFO */
692 spi
->rx_todo
= t
->len
;
694 /* start shift clock in RX-only mode */
699 spin_unlock_irqrestore(&spi
->lock
, flags
);
705 * The driver only gets an interrupt when the FIFO is empty, but there
706 * is an additional shift register from which the data is written to
707 * the wire. We get the last interrupt when the controller starts to
708 * write the last word to the wire, not when it is finished. Do busy
709 * waiting till it finishes.
711 static void lantiq_ssc_bussy_work(struct work_struct
*work
)
713 struct lantiq_ssc_spi
*spi
;
714 unsigned long long timeout
= 8LL * 1000LL;
717 spi
= container_of(work
, typeof(*spi
), work
);
719 do_div(timeout
, spi
->speed_hz
);
720 timeout
+= timeout
+ 100; /* some tolerance */
722 end
= jiffies
+ msecs_to_jiffies(timeout
);
724 u32 stat
= lantiq_ssc_readl(spi
, SPI_STAT
);
726 if (!(stat
& SPI_STAT_BSY
)) {
727 spi_finalize_current_transfer(spi
->master
);
732 } while (!time_after_eq(jiffies
, end
));
734 if (spi
->master
->cur_msg
)
735 spi
->master
->cur_msg
->status
= -EIO
;
736 spi_finalize_current_transfer(spi
->master
);
739 static void lantiq_ssc_handle_err(struct spi_master
*master
,
740 struct spi_message
*message
)
742 struct lantiq_ssc_spi
*spi
= spi_master_get_devdata(master
);
744 /* flush FIFOs on timeout */
749 static void lantiq_ssc_set_cs(struct spi_device
*spidev
, bool enable
)
751 struct lantiq_ssc_spi
*spi
= spi_master_get_devdata(spidev
->master
);
752 unsigned int cs
= spidev
->chip_select
;
755 if (!!(spidev
->mode
& SPI_CS_HIGH
) == enable
)
756 fgpo
= (1 << (cs
- spi
->base_cs
));
758 fgpo
= (1 << (cs
- spi
->base_cs
+ SPI_FGPO_SETOUTN_S
));
760 lantiq_ssc_writel(spi
, fgpo
, SPI_FPGO
);
763 static int lantiq_ssc_transfer_one(struct spi_master
*master
,
764 struct spi_device
*spidev
,
765 struct spi_transfer
*t
)
767 struct lantiq_ssc_spi
*spi
= spi_master_get_devdata(master
);
769 hw_setup_transfer(spi
, spidev
, t
);
771 return transfer_start(spi
, spidev
, t
);
774 static const struct lantiq_ssc_hwcfg lantiq_ssc_xway
= {
775 .irnen_r
= SPI_IRNEN_R_XWAY
,
776 .irnen_t
= SPI_IRNEN_T_XWAY
,
779 static const struct lantiq_ssc_hwcfg lantiq_ssc_xrx
= {
780 .irnen_r
= SPI_IRNEN_R_XRX
,
781 .irnen_t
= SPI_IRNEN_T_XRX
,
784 static const struct of_device_id lantiq_ssc_match
[] = {
785 { .compatible
= "lantiq,ase-spi", .data
= &lantiq_ssc_xway
, },
786 { .compatible
= "lantiq,falcon-spi", .data
= &lantiq_ssc_xrx
, },
787 { .compatible
= "lantiq,xrx100-spi", .data
= &lantiq_ssc_xrx
, },
790 MODULE_DEVICE_TABLE(of
, lantiq_ssc_match
);
792 static int lantiq_ssc_probe(struct platform_device
*pdev
)
794 struct device
*dev
= &pdev
->dev
;
795 struct spi_master
*master
;
796 struct resource
*res
;
797 struct lantiq_ssc_spi
*spi
;
798 const struct lantiq_ssc_hwcfg
*hwcfg
;
799 const struct of_device_id
*match
;
800 int err
, rx_irq
, tx_irq
, err_irq
;
801 u32 id
, supports_dma
, revision
;
804 match
= of_match_device(lantiq_ssc_match
, dev
);
806 dev_err(dev
, "no device match\n");
811 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
813 dev_err(dev
, "failed to get resources\n");
817 rx_irq
= platform_get_irq_byname(pdev
, SPI_RX_IRQ_NAME
);
819 dev_err(dev
, "failed to get %s\n", SPI_RX_IRQ_NAME
);
823 tx_irq
= platform_get_irq_byname(pdev
, SPI_TX_IRQ_NAME
);
825 dev_err(dev
, "failed to get %s\n", SPI_TX_IRQ_NAME
);
829 err_irq
= platform_get_irq_byname(pdev
, SPI_ERR_IRQ_NAME
);
831 dev_err(dev
, "failed to get %s\n", SPI_ERR_IRQ_NAME
);
835 master
= spi_alloc_master(dev
, sizeof(struct lantiq_ssc_spi
));
839 spi
= spi_master_get_devdata(master
);
840 spi
->master
= master
;
843 platform_set_drvdata(pdev
, spi
);
845 spi
->regbase
= devm_ioremap_resource(dev
, res
);
846 if (IS_ERR(spi
->regbase
)) {
847 err
= PTR_ERR(spi
->regbase
);
851 err
= devm_request_irq(dev
, rx_irq
, lantiq_ssc_xmit_interrupt
,
852 0, SPI_RX_IRQ_NAME
, spi
);
856 err
= devm_request_irq(dev
, tx_irq
, lantiq_ssc_xmit_interrupt
,
857 0, SPI_TX_IRQ_NAME
, spi
);
861 err
= devm_request_irq(dev
, err_irq
, lantiq_ssc_err_interrupt
,
862 0, SPI_ERR_IRQ_NAME
, spi
);
866 spi
->spi_clk
= devm_clk_get(dev
, "gate");
867 if (IS_ERR(spi
->spi_clk
)) {
868 err
= PTR_ERR(spi
->spi_clk
);
871 err
= clk_prepare_enable(spi
->spi_clk
);
876 * Use the old clk_get_fpi() function on Lantiq platform, till it
877 * supports common clk.
879 #if defined(CONFIG_LANTIQ) && !defined(CONFIG_COMMON_CLK)
880 spi
->fpi_clk
= clk_get_fpi();
882 spi
->fpi_clk
= clk_get(dev
, "freq");
884 if (IS_ERR(spi
->fpi_clk
)) {
885 err
= PTR_ERR(spi
->fpi_clk
);
886 goto err_clk_disable
;
890 of_property_read_u32(pdev
->dev
.of_node
, "num-cs", &num_cs
);
893 of_property_read_u32(pdev
->dev
.of_node
, "base-cs", &spi
->base_cs
);
895 spin_lock_init(&spi
->lock
);
896 spi
->bits_per_word
= 8;
899 master
->dev
.of_node
= pdev
->dev
.of_node
;
900 master
->num_chipselect
= num_cs
;
901 master
->setup
= lantiq_ssc_setup
;
902 master
->set_cs
= lantiq_ssc_set_cs
;
903 master
->handle_err
= lantiq_ssc_handle_err
;
904 master
->prepare_message
= lantiq_ssc_prepare_message
;
905 master
->unprepare_message
= lantiq_ssc_unprepare_message
;
906 master
->transfer_one
= lantiq_ssc_transfer_one
;
907 master
->mode_bits
= SPI_CPOL
| SPI_CPHA
| SPI_LSB_FIRST
| SPI_CS_HIGH
|
909 master
->bits_per_word_mask
= SPI_BPW_RANGE_MASK(2, 8) |
910 SPI_BPW_MASK(16) | SPI_BPW_MASK(32);
912 spi
->wq
= alloc_ordered_workqueue(dev_name(dev
), 0);
917 INIT_WORK(&spi
->work
, lantiq_ssc_bussy_work
);
919 id
= lantiq_ssc_readl(spi
, SPI_ID
);
920 spi
->tx_fifo_size
= (id
& SPI_ID_TXFS_M
) >> SPI_ID_TXFS_S
;
921 spi
->rx_fifo_size
= (id
& SPI_ID_RXFS_M
) >> SPI_ID_RXFS_S
;
922 supports_dma
= (id
& SPI_ID_CFG_M
) >> SPI_ID_CFG_S
;
923 revision
= id
& SPI_ID_REV_M
;
925 lantiq_ssc_hw_init(spi
);
928 "Lantiq SSC SPI controller (Rev %i, TXFS %u, RXFS %u, DMA %u)\n",
929 revision
, spi
->tx_fifo_size
, spi
->rx_fifo_size
, supports_dma
);
931 err
= devm_spi_register_master(dev
, master
);
933 dev_err(dev
, "failed to register spi_master\n");
940 destroy_workqueue(spi
->wq
);
942 clk_put(spi
->fpi_clk
);
944 clk_disable_unprepare(spi
->spi_clk
);
946 spi_master_put(master
);
951 static int lantiq_ssc_remove(struct platform_device
*pdev
)
953 struct lantiq_ssc_spi
*spi
= platform_get_drvdata(pdev
);
955 lantiq_ssc_writel(spi
, 0, SPI_IRNEN
);
956 lantiq_ssc_writel(spi
, 0, SPI_CLC
);
959 hw_enter_config_mode(spi
);
961 destroy_workqueue(spi
->wq
);
962 clk_disable_unprepare(spi
->spi_clk
);
963 clk_put(spi
->fpi_clk
);
968 static struct platform_driver lantiq_ssc_driver
= {
969 .probe
= lantiq_ssc_probe
,
970 .remove
= lantiq_ssc_remove
,
972 .name
= "spi-lantiq-ssc",
973 .owner
= THIS_MODULE
,
974 .of_match_table
= lantiq_ssc_match
,
977 module_platform_driver(lantiq_ssc_driver
);
979 MODULE_DESCRIPTION("Lantiq SSC SPI controller driver");
980 MODULE_AUTHOR("Daniel Schwierzeck <daniel.schwierzeck@gmail.com>");
981 MODULE_AUTHOR("Hauke Mehrtens <hauke@hauke-m.de>");
982 MODULE_LICENSE("GPL");
983 MODULE_ALIAS("platform:spi-lantiq-ssc");