1
2
3
4
5
6
7#include <linux/acpi.h>
8#include <linux/bitops.h>
9#include <linux/clk.h>
10#include <linux/delay.h>
11#include <linux/device.h>
12#include <linux/dmaengine.h>
13#include <linux/err.h>
14#include <linux/errno.h>
15#include <linux/gpio/consumer.h>
16#include <linux/gpio.h>
17#include <linux/init.h>
18#include <linux/interrupt.h>
19#include <linux/ioport.h>
20#include <linux/kernel.h>
21#include <linux/module.h>
22#include <linux/mod_devicetable.h>
23#include <linux/of.h>
24#include <linux/pci.h>
25#include <linux/platform_device.h>
26#include <linux/pm_runtime.h>
27#include <linux/property.h>
28#include <linux/slab.h>
29
30#include <linux/spi/pxa2xx_spi.h>
31#include <linux/spi/spi.h>
32
33#include "spi-pxa2xx.h"
34
35MODULE_AUTHOR("Stephen Street");
36MODULE_DESCRIPTION("PXA2xx SSP SPI Controller");
37MODULE_LICENSE("GPL");
38MODULE_ALIAS("platform:pxa2xx-spi");
39
40#define TIMOUT_DFLT 1000
41
42
43
44
45
46
47
48
49#define SSCR1_CHANGE_MASK (SSCR1_TTELP | SSCR1_TTE | SSCR1_SCFR \
50 | SSCR1_ECRA | SSCR1_ECRB | SSCR1_SCLKDIR \
51 | SSCR1_SFRMDIR | SSCR1_RWOT | SSCR1_TRAIL \
52 | SSCR1_IFS | SSCR1_STRF | SSCR1_EFWR \
53 | SSCR1_RFT | SSCR1_TFT | SSCR1_MWDS \
54 | SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)
55
56#define QUARK_X1000_SSCR1_CHANGE_MASK (QUARK_X1000_SSCR1_STRF \
57 | QUARK_X1000_SSCR1_EFWR \
58 | QUARK_X1000_SSCR1_RFT \
59 | QUARK_X1000_SSCR1_TFT \
60 | SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)
61
62#define CE4100_SSCR1_CHANGE_MASK (SSCR1_TTELP | SSCR1_TTE | SSCR1_SCFR \
63 | SSCR1_ECRA | SSCR1_ECRB | SSCR1_SCLKDIR \
64 | SSCR1_SFRMDIR | SSCR1_RWOT | SSCR1_TRAIL \
65 | SSCR1_IFS | SSCR1_STRF | SSCR1_EFWR \
66 | CE4100_SSCR1_RFT | CE4100_SSCR1_TFT | SSCR1_MWDS \
67 | SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)
68
69#define LPSS_GENERAL_REG_RXTO_HOLDOFF_DISABLE BIT(24)
70#define LPSS_CS_CONTROL_SW_MODE BIT(0)
71#define LPSS_CS_CONTROL_CS_HIGH BIT(1)
72#define LPSS_CAPS_CS_EN_SHIFT 9
73#define LPSS_CAPS_CS_EN_MASK (0xf << LPSS_CAPS_CS_EN_SHIFT)
74
75#define LPSS_PRIV_CLOCK_GATE 0x38
76#define LPSS_PRIV_CLOCK_GATE_CLK_CTL_MASK 0x3
77#define LPSS_PRIV_CLOCK_GATE_CLK_CTL_FORCE_ON 0x3
78
79struct lpss_config {
80
81 unsigned offset;
82
83 int reg_general;
84 int reg_ssp;
85 int reg_cs_ctrl;
86 int reg_capabilities;
87
88 u32 rx_threshold;
89 u32 tx_threshold_lo;
90 u32 tx_threshold_hi;
91
92 unsigned cs_sel_shift;
93 unsigned cs_sel_mask;
94 unsigned cs_num;
95
96 unsigned cs_clk_stays_gated : 1;
97};
98
99
100static const struct lpss_config lpss_platforms[] = {
101 {
102 .offset = 0x800,
103 .reg_general = 0x08,
104 .reg_ssp = 0x0c,
105 .reg_cs_ctrl = 0x18,
106 .reg_capabilities = -1,
107 .rx_threshold = 64,
108 .tx_threshold_lo = 160,
109 .tx_threshold_hi = 224,
110 },
111 {
112 .offset = 0x400,
113 .reg_general = 0x08,
114 .reg_ssp = 0x0c,
115 .reg_cs_ctrl = 0x18,
116 .reg_capabilities = -1,
117 .rx_threshold = 64,
118 .tx_threshold_lo = 160,
119 .tx_threshold_hi = 224,
120 },
121 {
122 .offset = 0x400,
123 .reg_general = 0x08,
124 .reg_ssp = 0x0c,
125 .reg_cs_ctrl = 0x18,
126 .reg_capabilities = -1,
127 .rx_threshold = 64,
128 .tx_threshold_lo = 160,
129 .tx_threshold_hi = 224,
130 .cs_sel_shift = 2,
131 .cs_sel_mask = 1 << 2,
132 .cs_num = 2,
133 },
134 {
135 .offset = 0x200,
136 .reg_general = -1,
137 .reg_ssp = 0x20,
138 .reg_cs_ctrl = 0x24,
139 .reg_capabilities = -1,
140 .rx_threshold = 1,
141 .tx_threshold_lo = 32,
142 .tx_threshold_hi = 56,
143 },
144 {
145 .offset = 0x200,
146 .reg_general = -1,
147 .reg_ssp = 0x20,
148 .reg_cs_ctrl = 0x24,
149 .reg_capabilities = 0xfc,
150 .rx_threshold = 1,
151 .tx_threshold_lo = 16,
152 .tx_threshold_hi = 48,
153 .cs_sel_shift = 8,
154 .cs_sel_mask = 3 << 8,
155 .cs_clk_stays_gated = true,
156 },
157 {
158 .offset = 0x200,
159 .reg_general = -1,
160 .reg_ssp = 0x20,
161 .reg_cs_ctrl = 0x24,
162 .reg_capabilities = 0xfc,
163 .rx_threshold = 1,
164 .tx_threshold_lo = 32,
165 .tx_threshold_hi = 56,
166 .cs_sel_shift = 8,
167 .cs_sel_mask = 3 << 8,
168 .cs_clk_stays_gated = true,
169 },
170};
171
172static inline const struct lpss_config
173*lpss_get_config(const struct driver_data *drv_data)
174{
175 return &lpss_platforms[drv_data->ssp_type - LPSS_LPT_SSP];
176}
177
178static bool is_lpss_ssp(const struct driver_data *drv_data)
179{
180 switch (drv_data->ssp_type) {
181 case LPSS_LPT_SSP:
182 case LPSS_BYT_SSP:
183 case LPSS_BSW_SSP:
184 case LPSS_SPT_SSP:
185 case LPSS_BXT_SSP:
186 case LPSS_CNL_SSP:
187 return true;
188 default:
189 return false;
190 }
191}
192
193static bool is_quark_x1000_ssp(const struct driver_data *drv_data)
194{
195 return drv_data->ssp_type == QUARK_X1000_SSP;
196}
197
198static bool is_mmp2_ssp(const struct driver_data *drv_data)
199{
200 return drv_data->ssp_type == MMP2_SSP;
201}
202
203static bool is_mrfld_ssp(const struct driver_data *drv_data)
204{
205 return drv_data->ssp_type == MRFLD_SSP;
206}
207
208static void pxa2xx_spi_update(const struct driver_data *drv_data, u32 reg, u32 mask, u32 value)
209{
210 if ((pxa2xx_spi_read(drv_data, reg) & mask) != value)
211 pxa2xx_spi_write(drv_data, reg, value & mask);
212}
213
214static u32 pxa2xx_spi_get_ssrc1_change_mask(const struct driver_data *drv_data)
215{
216 switch (drv_data->ssp_type) {
217 case QUARK_X1000_SSP:
218 return QUARK_X1000_SSCR1_CHANGE_MASK;
219 case CE4100_SSP:
220 return CE4100_SSCR1_CHANGE_MASK;
221 default:
222 return SSCR1_CHANGE_MASK;
223 }
224}
225
226static u32
227pxa2xx_spi_get_rx_default_thre(const struct driver_data *drv_data)
228{
229 switch (drv_data->ssp_type) {
230 case QUARK_X1000_SSP:
231 return RX_THRESH_QUARK_X1000_DFLT;
232 case CE4100_SSP:
233 return RX_THRESH_CE4100_DFLT;
234 default:
235 return RX_THRESH_DFLT;
236 }
237}
238
239static bool pxa2xx_spi_txfifo_full(const struct driver_data *drv_data)
240{
241 u32 mask;
242
243 switch (drv_data->ssp_type) {
244 case QUARK_X1000_SSP:
245 mask = QUARK_X1000_SSSR_TFL_MASK;
246 break;
247 case CE4100_SSP:
248 mask = CE4100_SSSR_TFL_MASK;
249 break;
250 default:
251 mask = SSSR_TFL_MASK;
252 break;
253 }
254
255 return read_SSSR_bits(drv_data, mask) == mask;
256}
257
258static void pxa2xx_spi_clear_rx_thre(const struct driver_data *drv_data,
259 u32 *sccr1_reg)
260{
261 u32 mask;
262
263 switch (drv_data->ssp_type) {
264 case QUARK_X1000_SSP:
265 mask = QUARK_X1000_SSCR1_RFT;
266 break;
267 case CE4100_SSP:
268 mask = CE4100_SSCR1_RFT;
269 break;
270 default:
271 mask = SSCR1_RFT;
272 break;
273 }
274 *sccr1_reg &= ~mask;
275}
276
277static void pxa2xx_spi_set_rx_thre(const struct driver_data *drv_data,
278 u32 *sccr1_reg, u32 threshold)
279{
280 switch (drv_data->ssp_type) {
281 case QUARK_X1000_SSP:
282 *sccr1_reg |= QUARK_X1000_SSCR1_RxTresh(threshold);
283 break;
284 case CE4100_SSP:
285 *sccr1_reg |= CE4100_SSCR1_RxTresh(threshold);
286 break;
287 default:
288 *sccr1_reg |= SSCR1_RxTresh(threshold);
289 break;
290 }
291}
292
293static u32 pxa2xx_configure_sscr0(const struct driver_data *drv_data,
294 u32 clk_div, u8 bits)
295{
296 switch (drv_data->ssp_type) {
297 case QUARK_X1000_SSP:
298 return clk_div
299 | QUARK_X1000_SSCR0_Motorola
300 | QUARK_X1000_SSCR0_DataSize(bits > 32 ? 8 : bits);
301 default:
302 return clk_div
303 | SSCR0_Motorola
304 | SSCR0_DataSize(bits > 16 ? bits - 16 : bits)
305 | (bits > 16 ? SSCR0_EDSS : 0);
306 }
307}
308
309
310
311
312
313static u32 __lpss_ssp_read_priv(struct driver_data *drv_data, unsigned offset)
314{
315 WARN_ON(!drv_data->lpss_base);
316 return readl(drv_data->lpss_base + offset);
317}
318
319static void __lpss_ssp_write_priv(struct driver_data *drv_data,
320 unsigned offset, u32 value)
321{
322 WARN_ON(!drv_data->lpss_base);
323 writel(value, drv_data->lpss_base + offset);
324}
325
326
327
328
329
330
331
332
333static void lpss_ssp_setup(struct driver_data *drv_data)
334{
335 const struct lpss_config *config;
336 u32 value;
337
338 config = lpss_get_config(drv_data);
339 drv_data->lpss_base = drv_data->ssp->mmio_base + config->offset;
340
341
342 value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);
343 value &= ~(LPSS_CS_CONTROL_SW_MODE | LPSS_CS_CONTROL_CS_HIGH);
344 value |= LPSS_CS_CONTROL_SW_MODE | LPSS_CS_CONTROL_CS_HIGH;
345 __lpss_ssp_write_priv(drv_data, config->reg_cs_ctrl, value);
346
347
348 if (drv_data->controller_info->enable_dma) {
349 __lpss_ssp_write_priv(drv_data, config->reg_ssp, 1);
350
351 if (config->reg_general >= 0) {
352 value = __lpss_ssp_read_priv(drv_data,
353 config->reg_general);
354 value |= LPSS_GENERAL_REG_RXTO_HOLDOFF_DISABLE;
355 __lpss_ssp_write_priv(drv_data,
356 config->reg_general, value);
357 }
358 }
359}
360
361static void lpss_ssp_select_cs(struct spi_device *spi,
362 const struct lpss_config *config)
363{
364 struct driver_data *drv_data =
365 spi_controller_get_devdata(spi->controller);
366 u32 value, cs;
367
368 if (!config->cs_sel_mask)
369 return;
370
371 value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);
372
373 cs = spi->chip_select;
374 cs <<= config->cs_sel_shift;
375 if (cs != (value & config->cs_sel_mask)) {
376
377
378
379
380
381
382
383 value &= ~config->cs_sel_mask;
384 value |= cs;
385 __lpss_ssp_write_priv(drv_data,
386 config->reg_cs_ctrl, value);
387 ndelay(1000000000 /
388 (drv_data->controller->max_speed_hz / 2));
389 }
390}
391
392static void lpss_ssp_cs_control(struct spi_device *spi, bool enable)
393{
394 struct driver_data *drv_data =
395 spi_controller_get_devdata(spi->controller);
396 const struct lpss_config *config;
397 u32 value;
398
399 config = lpss_get_config(drv_data);
400
401 if (enable)
402 lpss_ssp_select_cs(spi, config);
403
404 value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);
405 if (enable)
406 value &= ~LPSS_CS_CONTROL_CS_HIGH;
407 else
408 value |= LPSS_CS_CONTROL_CS_HIGH;
409 __lpss_ssp_write_priv(drv_data, config->reg_cs_ctrl, value);
410 if (config->cs_clk_stays_gated) {
411 u32 clkgate;
412
413
414
415
416
417
418
419 clkgate = __lpss_ssp_read_priv(drv_data, LPSS_PRIV_CLOCK_GATE);
420 value = (clkgate & ~LPSS_PRIV_CLOCK_GATE_CLK_CTL_MASK) |
421 LPSS_PRIV_CLOCK_GATE_CLK_CTL_FORCE_ON;
422
423 __lpss_ssp_write_priv(drv_data, LPSS_PRIV_CLOCK_GATE, value);
424 __lpss_ssp_write_priv(drv_data, LPSS_PRIV_CLOCK_GATE, clkgate);
425 }
426}
427
428static void cs_assert(struct spi_device *spi)
429{
430 struct chip_data *chip = spi_get_ctldata(spi);
431 struct driver_data *drv_data =
432 spi_controller_get_devdata(spi->controller);
433
434 if (drv_data->ssp_type == CE4100_SSP) {
435 pxa2xx_spi_write(drv_data, SSSR, spi->chip_select);
436 return;
437 }
438
439 if (chip->cs_control) {
440 chip->cs_control(PXA2XX_CS_ASSERT);
441 return;
442 }
443
444 if (is_lpss_ssp(drv_data))
445 lpss_ssp_cs_control(spi, true);
446}
447
448static void cs_deassert(struct spi_device *spi)
449{
450 struct chip_data *chip = spi_get_ctldata(spi);
451 struct driver_data *drv_data =
452 spi_controller_get_devdata(spi->controller);
453 unsigned long timeout;
454
455 if (drv_data->ssp_type == CE4100_SSP)
456 return;
457
458
459 timeout = jiffies + msecs_to_jiffies(10);
460 while (pxa2xx_spi_read(drv_data, SSSR) & SSSR_BSY &&
461 !time_after(jiffies, timeout))
462 cpu_relax();
463
464 if (chip->cs_control) {
465 chip->cs_control(PXA2XX_CS_DEASSERT);
466 return;
467 }
468
469 if (is_lpss_ssp(drv_data))
470 lpss_ssp_cs_control(spi, false);
471}
472
473static void pxa2xx_spi_set_cs(struct spi_device *spi, bool level)
474{
475 if (level)
476 cs_deassert(spi);
477 else
478 cs_assert(spi);
479}
480
481int pxa2xx_spi_flush(struct driver_data *drv_data)
482{
483 unsigned long limit = loops_per_jiffy << 1;
484
485 do {
486 while (read_SSSR_bits(drv_data, SSSR_RNE))
487 pxa2xx_spi_read(drv_data, SSDR);
488 } while ((pxa2xx_spi_read(drv_data, SSSR) & SSSR_BSY) && --limit);
489 write_SSSR_CS(drv_data, SSSR_ROR);
490
491 return limit;
492}
493
494static void pxa2xx_spi_off(struct driver_data *drv_data)
495{
496
497 if (is_mmp2_ssp(drv_data))
498 return;
499
500 pxa_ssp_disable(drv_data->ssp);
501}
502
503static int null_writer(struct driver_data *drv_data)
504{
505 u8 n_bytes = drv_data->n_bytes;
506
507 if (pxa2xx_spi_txfifo_full(drv_data)
508 || (drv_data->tx == drv_data->tx_end))
509 return 0;
510
511 pxa2xx_spi_write(drv_data, SSDR, 0);
512 drv_data->tx += n_bytes;
513
514 return 1;
515}
516
517static int null_reader(struct driver_data *drv_data)
518{
519 u8 n_bytes = drv_data->n_bytes;
520
521 while (read_SSSR_bits(drv_data, SSSR_RNE) && drv_data->rx < drv_data->rx_end) {
522 pxa2xx_spi_read(drv_data, SSDR);
523 drv_data->rx += n_bytes;
524 }
525
526 return drv_data->rx == drv_data->rx_end;
527}
528
529static int u8_writer(struct driver_data *drv_data)
530{
531 if (pxa2xx_spi_txfifo_full(drv_data)
532 || (drv_data->tx == drv_data->tx_end))
533 return 0;
534
535 pxa2xx_spi_write(drv_data, SSDR, *(u8 *)(drv_data->tx));
536 ++drv_data->tx;
537
538 return 1;
539}
540
541static int u8_reader(struct driver_data *drv_data)
542{
543 while (read_SSSR_bits(drv_data, SSSR_RNE) && drv_data->rx < drv_data->rx_end) {
544 *(u8 *)(drv_data->rx) = pxa2xx_spi_read(drv_data, SSDR);
545 ++drv_data->rx;
546 }
547
548 return drv_data->rx == drv_data->rx_end;
549}
550
551static int u16_writer(struct driver_data *drv_data)
552{
553 if (pxa2xx_spi_txfifo_full(drv_data)
554 || (drv_data->tx == drv_data->tx_end))
555 return 0;
556
557 pxa2xx_spi_write(drv_data, SSDR, *(u16 *)(drv_data->tx));
558 drv_data->tx += 2;
559
560 return 1;
561}
562
563static int u16_reader(struct driver_data *drv_data)
564{
565 while (read_SSSR_bits(drv_data, SSSR_RNE) && drv_data->rx < drv_data->rx_end) {
566 *(u16 *)(drv_data->rx) = pxa2xx_spi_read(drv_data, SSDR);
567 drv_data->rx += 2;
568 }
569
570 return drv_data->rx == drv_data->rx_end;
571}
572
573static int u32_writer(struct driver_data *drv_data)
574{
575 if (pxa2xx_spi_txfifo_full(drv_data)
576 || (drv_data->tx == drv_data->tx_end))
577 return 0;
578
579 pxa2xx_spi_write(drv_data, SSDR, *(u32 *)(drv_data->tx));
580 drv_data->tx += 4;
581
582 return 1;
583}
584
585static int u32_reader(struct driver_data *drv_data)
586{
587 while (read_SSSR_bits(drv_data, SSSR_RNE) && drv_data->rx < drv_data->rx_end) {
588 *(u32 *)(drv_data->rx) = pxa2xx_spi_read(drv_data, SSDR);
589 drv_data->rx += 4;
590 }
591
592 return drv_data->rx == drv_data->rx_end;
593}
594
595static void reset_sccr1(struct driver_data *drv_data)
596{
597 u32 mask = drv_data->int_cr1 | drv_data->dma_cr1, threshold;
598 struct chip_data *chip;
599
600 if (drv_data->controller->cur_msg) {
601 chip = spi_get_ctldata(drv_data->controller->cur_msg->spi);
602 threshold = chip->threshold;
603 } else {
604 threshold = 0;
605 }
606
607 switch (drv_data->ssp_type) {
608 case QUARK_X1000_SSP:
609 mask |= QUARK_X1000_SSCR1_RFT;
610 break;
611 case CE4100_SSP:
612 mask |= CE4100_SSCR1_RFT;
613 break;
614 default:
615 mask |= SSCR1_RFT;
616 break;
617 }
618
619 pxa2xx_spi_update(drv_data, SSCR1, mask, threshold);
620}
621
622static void int_stop_and_reset(struct driver_data *drv_data)
623{
624
625 write_SSSR_CS(drv_data, drv_data->clear_sr);
626 reset_sccr1(drv_data);
627 if (pxa25x_ssp_comp(drv_data))
628 return;
629
630 pxa2xx_spi_write(drv_data, SSTO, 0);
631}
632
633static void int_error_stop(struct driver_data *drv_data, const char *msg, int err)
634{
635 int_stop_and_reset(drv_data);
636 pxa2xx_spi_flush(drv_data);
637 pxa2xx_spi_off(drv_data);
638
639 dev_err(drv_data->ssp->dev, "%s\n", msg);
640
641 drv_data->controller->cur_msg->status = err;
642 spi_finalize_current_transfer(drv_data->controller);
643}
644
645static void int_transfer_complete(struct driver_data *drv_data)
646{
647 int_stop_and_reset(drv_data);
648
649 spi_finalize_current_transfer(drv_data->controller);
650}
651
652static irqreturn_t interrupt_transfer(struct driver_data *drv_data)
653{
654 u32 irq_status;
655
656 irq_status = read_SSSR_bits(drv_data, drv_data->mask_sr);
657 if (!(pxa2xx_spi_read(drv_data, SSCR1) & SSCR1_TIE))
658 irq_status &= ~SSSR_TFS;
659
660 if (irq_status & SSSR_ROR) {
661 int_error_stop(drv_data, "interrupt_transfer: FIFO overrun", -EIO);
662 return IRQ_HANDLED;
663 }
664
665 if (irq_status & SSSR_TUR) {
666 int_error_stop(drv_data, "interrupt_transfer: FIFO underrun", -EIO);
667 return IRQ_HANDLED;
668 }
669
670 if (irq_status & SSSR_TINT) {
671 pxa2xx_spi_write(drv_data, SSSR, SSSR_TINT);
672 if (drv_data->read(drv_data)) {
673 int_transfer_complete(drv_data);
674 return IRQ_HANDLED;
675 }
676 }
677
678
679 do {
680 if (drv_data->read(drv_data)) {
681 int_transfer_complete(drv_data);
682 return IRQ_HANDLED;
683 }
684 } while (drv_data->write(drv_data));
685
686 if (drv_data->read(drv_data)) {
687 int_transfer_complete(drv_data);
688 return IRQ_HANDLED;
689 }
690
691 if (drv_data->tx == drv_data->tx_end) {
692 u32 bytes_left;
693 u32 sccr1_reg;
694
695 sccr1_reg = pxa2xx_spi_read(drv_data, SSCR1);
696 sccr1_reg &= ~SSCR1_TIE;
697
698
699
700
701
702 if (pxa25x_ssp_comp(drv_data)) {
703 u32 rx_thre;
704
705 pxa2xx_spi_clear_rx_thre(drv_data, &sccr1_reg);
706
707 bytes_left = drv_data->rx_end - drv_data->rx;
708 switch (drv_data->n_bytes) {
709 case 4:
710 bytes_left >>= 2;
711 break;
712 case 2:
713 bytes_left >>= 1;
714 break;
715 }
716
717 rx_thre = pxa2xx_spi_get_rx_default_thre(drv_data);
718 if (rx_thre > bytes_left)
719 rx_thre = bytes_left;
720
721 pxa2xx_spi_set_rx_thre(drv_data, &sccr1_reg, rx_thre);
722 }
723 pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg);
724 }
725
726
727 return IRQ_HANDLED;
728}
729
730static void handle_bad_msg(struct driver_data *drv_data)
731{
732 int_stop_and_reset(drv_data);
733 pxa2xx_spi_off(drv_data);
734
735 dev_err(drv_data->ssp->dev, "bad message state in interrupt handler\n");
736}
737
738static irqreturn_t ssp_int(int irq, void *dev_id)
739{
740 struct driver_data *drv_data = dev_id;
741 u32 sccr1_reg;
742 u32 mask = drv_data->mask_sr;
743 u32 status;
744
745
746
747
748
749
750
751 if (pm_runtime_suspended(drv_data->ssp->dev))
752 return IRQ_NONE;
753
754
755
756
757
758
759
760 status = pxa2xx_spi_read(drv_data, SSSR);
761 if (status == ~0)
762 return IRQ_NONE;
763
764 sccr1_reg = pxa2xx_spi_read(drv_data, SSCR1);
765
766
767 if (!(sccr1_reg & SSCR1_TIE))
768 mask &= ~SSSR_TFS;
769
770
771 if (!(sccr1_reg & SSCR1_TINTE))
772 mask &= ~SSSR_TINT;
773
774 if (!(status & mask))
775 return IRQ_NONE;
776
777 pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg & ~drv_data->int_cr1);
778 pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg);
779
780 if (!drv_data->controller->cur_msg) {
781 handle_bad_msg(drv_data);
782
783 return IRQ_HANDLED;
784 }
785
786 return drv_data->transfer_handler(drv_data);
787}
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821static unsigned int quark_x1000_get_clk_div(int rate, u32 *dds)
822{
823 unsigned long xtal = 200000000;
824 unsigned long fref = xtal / 2;
825
826
827 unsigned long fref1 = fref / 2;
828 unsigned long fref2 = fref * 2 / 5;
829 unsigned long scale;
830 unsigned long q, q1, q2;
831 long r, r1, r2;
832 u32 mul;
833
834
835
836
837 mul = (1 << 24) >> 1;
838
839
840 q1 = DIV_ROUND_UP(fref1, rate);
841
842
843 if (q1 > 256) {
844
845 scale = fls_long(q1 - 1);
846 if (scale > 9) {
847 q1 >>= scale - 9;
848 mul >>= scale - 9;
849 }
850
851
852 q1 += q1 & 1;
853 }
854
855
856 scale = __ffs(q1);
857 q1 >>= scale;
858 mul >>= scale;
859
860
861 r1 = abs(fref1 / (1 << (24 - fls_long(mul))) / q1 - rate);
862
863
864
865 q2 = DIV_ROUND_UP(fref2, rate);
866 r2 = abs(fref2 / q2 - rate);
867
868
869
870
871
872
873 if (r2 >= r1 || q2 > 256) {
874
875 r = r1;
876 q = q1;
877 } else {
878
879 r = r2;
880 q = q2;
881 mul = (1 << 24) * 2 / 5;
882 }
883
884
885 if (fref / rate >= 80) {
886 u64 fssp;
887 u32 m;
888
889
890 q1 = DIV_ROUND_UP(fref, rate);
891 m = (1 << 24) / q1;
892
893
894 fssp = (u64)fref * m;
895 do_div(fssp, 1 << 24);
896 r1 = abs(fssp - rate);
897
898
899 if (r1 < r) {
900
901 q = 1;
902 mul = m;
903 }
904 }
905
906 *dds = mul;
907 return q - 1;
908}
909
910static unsigned int ssp_get_clk_div(struct driver_data *drv_data, int rate)
911{
912 unsigned long ssp_clk = drv_data->controller->max_speed_hz;
913 const struct ssp_device *ssp = drv_data->ssp;
914
915 rate = min_t(int, ssp_clk, rate);
916
917
918
919
920
921 if (ssp->type == PXA25x_SSP || ssp->type == CE4100_SSP)
922 return (DIV_ROUND_UP(ssp_clk, 2 * rate) - 1) & 0xff;
923 else
924 return (DIV_ROUND_UP(ssp_clk, rate) - 1) & 0xfff;
925}
926
927static unsigned int pxa2xx_ssp_get_clk_div(struct driver_data *drv_data,
928 int rate)
929{
930 struct chip_data *chip =
931 spi_get_ctldata(drv_data->controller->cur_msg->spi);
932 unsigned int clk_div;
933
934 switch (drv_data->ssp_type) {
935 case QUARK_X1000_SSP:
936 clk_div = quark_x1000_get_clk_div(rate, &chip->dds_rate);
937 break;
938 default:
939 clk_div = ssp_get_clk_div(drv_data, rate);
940 break;
941 }
942 return clk_div << 8;
943}
944
945static bool pxa2xx_spi_can_dma(struct spi_controller *controller,
946 struct spi_device *spi,
947 struct spi_transfer *xfer)
948{
949 struct chip_data *chip = spi_get_ctldata(spi);
950
951 return chip->enable_dma &&
952 xfer->len <= MAX_DMA_LEN &&
953 xfer->len >= chip->dma_burst_size;
954}
955
956static int pxa2xx_spi_transfer_one(struct spi_controller *controller,
957 struct spi_device *spi,
958 struct spi_transfer *transfer)
959{
960 struct driver_data *drv_data = spi_controller_get_devdata(controller);
961 struct spi_message *message = controller->cur_msg;
962 struct chip_data *chip = spi_get_ctldata(spi);
963 u32 dma_thresh = chip->dma_threshold;
964 u32 dma_burst = chip->dma_burst_size;
965 u32 change_mask = pxa2xx_spi_get_ssrc1_change_mask(drv_data);
966 u32 clk_div;
967 u8 bits;
968 u32 speed;
969 u32 cr0;
970 u32 cr1;
971 int err;
972 int dma_mapped;
973
974
975 if (transfer->len > MAX_DMA_LEN && chip->enable_dma) {
976
977
978 if (message->is_dma_mapped
979 || transfer->rx_dma || transfer->tx_dma) {
980 dev_err(&spi->dev,
981 "Mapped transfer length of %u is greater than %d\n",
982 transfer->len, MAX_DMA_LEN);
983 return -EINVAL;
984 }
985
986
987 dev_warn_ratelimited(&spi->dev,
988 "DMA disabled for transfer length %u greater than %d\n",
989 transfer->len, MAX_DMA_LEN);
990 }
991
992
993 if (pxa2xx_spi_flush(drv_data) == 0) {
994 dev_err(&spi->dev, "Flush failed\n");
995 return -EIO;
996 }
997 drv_data->n_bytes = chip->n_bytes;
998 drv_data->tx = (void *)transfer->tx_buf;
999 drv_data->tx_end = drv_data->tx + transfer->len;
1000 drv_data->rx = transfer->rx_buf;
1001 drv_data->rx_end = drv_data->rx + transfer->len;
1002 drv_data->write = drv_data->tx ? chip->write : null_writer;
1003 drv_data->read = drv_data->rx ? chip->read : null_reader;
1004
1005
1006 bits = transfer->bits_per_word;
1007 speed = transfer->speed_hz;
1008
1009 clk_div = pxa2xx_ssp_get_clk_div(drv_data, speed);
1010
1011 if (bits <= 8) {
1012 drv_data->n_bytes = 1;
1013 drv_data->read = drv_data->read != null_reader ?
1014 u8_reader : null_reader;
1015 drv_data->write = drv_data->write != null_writer ?
1016 u8_writer : null_writer;
1017 } else if (bits <= 16) {
1018 drv_data->n_bytes = 2;
1019 drv_data->read = drv_data->read != null_reader ?
1020 u16_reader : null_reader;
1021 drv_data->write = drv_data->write != null_writer ?
1022 u16_writer : null_writer;
1023 } else if (bits <= 32) {
1024 drv_data->n_bytes = 4;
1025 drv_data->read = drv_data->read != null_reader ?
1026 u32_reader : null_reader;
1027 drv_data->write = drv_data->write != null_writer ?
1028 u32_writer : null_writer;
1029 }
1030
1031
1032
1033
1034 if (chip->enable_dma) {
1035 if (pxa2xx_spi_set_dma_burst_and_threshold(chip,
1036 spi,
1037 bits, &dma_burst,
1038 &dma_thresh))
1039 dev_warn_ratelimited(&spi->dev,
1040 "DMA burst size reduced to match bits_per_word\n");
1041 }
1042
1043 dma_mapped = controller->can_dma &&
1044 controller->can_dma(controller, spi, transfer) &&
1045 controller->cur_msg_mapped;
1046 if (dma_mapped) {
1047
1048
1049 drv_data->transfer_handler = pxa2xx_spi_dma_transfer;
1050
1051 err = pxa2xx_spi_dma_prepare(drv_data, transfer);
1052 if (err)
1053 return err;
1054
1055
1056 cr1 = chip->cr1 | dma_thresh | drv_data->dma_cr1;
1057 pxa2xx_spi_write(drv_data, SSSR, drv_data->clear_sr);
1058
1059 pxa2xx_spi_dma_start(drv_data);
1060 } else {
1061
1062 drv_data->transfer_handler = interrupt_transfer;
1063
1064
1065 cr1 = chip->cr1 | chip->threshold | drv_data->int_cr1;
1066 write_SSSR_CS(drv_data, drv_data->clear_sr);
1067 }
1068
1069
1070 cr0 = pxa2xx_configure_sscr0(drv_data, clk_div, bits);
1071 if (!pxa25x_ssp_comp(drv_data))
1072 dev_dbg(&spi->dev, "%u Hz actual, %s\n",
1073 controller->max_speed_hz
1074 / (1 + ((cr0 & SSCR0_SCR(0xfff)) >> 8)),
1075 dma_mapped ? "DMA" : "PIO");
1076 else
1077 dev_dbg(&spi->dev, "%u Hz actual, %s\n",
1078 controller->max_speed_hz / 2
1079 / (1 + ((cr0 & SSCR0_SCR(0x0ff)) >> 8)),
1080 dma_mapped ? "DMA" : "PIO");
1081
1082 if (is_lpss_ssp(drv_data)) {
1083 pxa2xx_spi_update(drv_data, SSIRF, GENMASK(7, 0), chip->lpss_rx_threshold);
1084 pxa2xx_spi_update(drv_data, SSITF, GENMASK(15, 0), chip->lpss_tx_threshold);
1085 }
1086
1087 if (is_mrfld_ssp(drv_data)) {
1088 u32 mask = SFIFOTT_RFT | SFIFOTT_TFT;
1089 u32 thresh = 0;
1090
1091 thresh |= SFIFOTT_RxThresh(chip->lpss_rx_threshold);
1092 thresh |= SFIFOTT_TxThresh(chip->lpss_tx_threshold);
1093
1094 pxa2xx_spi_update(drv_data, SFIFOTT, mask, thresh);
1095 }
1096
1097 if (is_quark_x1000_ssp(drv_data))
1098 pxa2xx_spi_update(drv_data, DDS_RATE, GENMASK(23, 0), chip->dds_rate);
1099
1100
1101 if (!is_mmp2_ssp(drv_data))
1102 pxa_ssp_disable(drv_data->ssp);
1103
1104 if (!pxa25x_ssp_comp(drv_data))
1105 pxa2xx_spi_write(drv_data, SSTO, chip->timeout);
1106
1107
1108 pxa2xx_spi_update(drv_data, SSCR1, change_mask, cr1);
1109
1110
1111 pxa2xx_spi_update(drv_data, SSCR0, GENMASK(31, 0), cr0);
1112
1113
1114 pxa_ssp_enable(drv_data->ssp);
1115
1116 if (is_mmp2_ssp(drv_data)) {
1117 u8 tx_level = read_SSSR_bits(drv_data, SSSR_TFL_MASK) >> 8;
1118
1119 if (tx_level) {
1120
1121 dev_warn(&spi->dev, "%u bytes of garbage in Tx FIFO!\n", tx_level);
1122 if (tx_level > transfer->len)
1123 tx_level = transfer->len;
1124 drv_data->tx += tx_level;
1125 }
1126 }
1127
1128 if (spi_controller_is_slave(controller)) {
1129 while (drv_data->write(drv_data))
1130 ;
1131 if (drv_data->gpiod_ready) {
1132 gpiod_set_value(drv_data->gpiod_ready, 1);
1133 udelay(1);
1134 gpiod_set_value(drv_data->gpiod_ready, 0);
1135 }
1136 }
1137
1138
1139
1140
1141
1142 pxa2xx_spi_write(drv_data, SSCR1, cr1);
1143
1144 return 1;
1145}
1146
1147static int pxa2xx_spi_slave_abort(struct spi_controller *controller)
1148{
1149 struct driver_data *drv_data = spi_controller_get_devdata(controller);
1150
1151 int_error_stop(drv_data, "transfer aborted", -EINTR);
1152
1153 return 0;
1154}
1155
1156static void pxa2xx_spi_handle_err(struct spi_controller *controller,
1157 struct spi_message *msg)
1158{
1159 struct driver_data *drv_data = spi_controller_get_devdata(controller);
1160
1161 int_stop_and_reset(drv_data);
1162
1163
1164 pxa2xx_spi_off(drv_data);
1165
1166
1167
1168
1169
1170
1171
1172
1173 if (atomic_read(&drv_data->dma_running))
1174 pxa2xx_spi_dma_stop(drv_data);
1175}
1176
1177static int pxa2xx_spi_unprepare_transfer(struct spi_controller *controller)
1178{
1179 struct driver_data *drv_data = spi_controller_get_devdata(controller);
1180
1181
1182 pxa2xx_spi_off(drv_data);
1183
1184 return 0;
1185}
1186
1187static void cleanup_cs(struct spi_device *spi)
1188{
1189 if (!gpio_is_valid(spi->cs_gpio))
1190 return;
1191
1192 gpio_free(spi->cs_gpio);
1193 spi->cs_gpio = -ENOENT;
1194}
1195
1196static int setup_cs(struct spi_device *spi, struct chip_data *chip,
1197 struct pxa2xx_spi_chip *chip_info)
1198{
1199 struct driver_data *drv_data = spi_controller_get_devdata(spi->controller);
1200
1201 if (chip == NULL)
1202 return 0;
1203
1204 if (chip_info == NULL)
1205 return 0;
1206
1207 if (drv_data->ssp_type == CE4100_SSP)
1208 return 0;
1209
1210
1211
1212
1213
1214 cleanup_cs(spi);
1215
1216
1217 if (chip_info->cs_control) {
1218 chip->cs_control = chip_info->cs_control;
1219 return 0;
1220 }
1221
1222 if (gpio_is_valid(chip_info->gpio_cs)) {
1223 int gpio = chip_info->gpio_cs;
1224 int err;
1225
1226 err = gpio_request(gpio, "SPI_CS");
1227 if (err) {
1228 dev_err(&spi->dev, "failed to request chip select GPIO%d\n", gpio);
1229 return err;
1230 }
1231
1232 err = gpio_direction_output(gpio, !(spi->mode & SPI_CS_HIGH));
1233 if (err) {
1234 gpio_free(gpio);
1235 return err;
1236 }
1237
1238 spi->cs_gpio = gpio;
1239 }
1240
1241 return 0;
1242}
1243
1244static int setup(struct spi_device *spi)
1245{
1246 struct pxa2xx_spi_chip *chip_info;
1247 struct chip_data *chip;
1248 const struct lpss_config *config;
1249 struct driver_data *drv_data =
1250 spi_controller_get_devdata(spi->controller);
1251 uint tx_thres, tx_hi_thres, rx_thres;
1252 int err;
1253
1254 switch (drv_data->ssp_type) {
1255 case QUARK_X1000_SSP:
1256 tx_thres = TX_THRESH_QUARK_X1000_DFLT;
1257 tx_hi_thres = 0;
1258 rx_thres = RX_THRESH_QUARK_X1000_DFLT;
1259 break;
1260 case MRFLD_SSP:
1261 tx_thres = TX_THRESH_MRFLD_DFLT;
1262 tx_hi_thres = 0;
1263 rx_thres = RX_THRESH_MRFLD_DFLT;
1264 break;
1265 case CE4100_SSP:
1266 tx_thres = TX_THRESH_CE4100_DFLT;
1267 tx_hi_thres = 0;
1268 rx_thres = RX_THRESH_CE4100_DFLT;
1269 break;
1270 case LPSS_LPT_SSP:
1271 case LPSS_BYT_SSP:
1272 case LPSS_BSW_SSP:
1273 case LPSS_SPT_SSP:
1274 case LPSS_BXT_SSP:
1275 case LPSS_CNL_SSP:
1276 config = lpss_get_config(drv_data);
1277 tx_thres = config->tx_threshold_lo;
1278 tx_hi_thres = config->tx_threshold_hi;
1279 rx_thres = config->rx_threshold;
1280 break;
1281 default:
1282 tx_hi_thres = 0;
1283 if (spi_controller_is_slave(drv_data->controller)) {
1284 tx_thres = 1;
1285 rx_thres = 2;
1286 } else {
1287 tx_thres = TX_THRESH_DFLT;
1288 rx_thres = RX_THRESH_DFLT;
1289 }
1290 break;
1291 }
1292
1293
1294 chip = spi_get_ctldata(spi);
1295 if (!chip) {
1296 chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
1297 if (!chip)
1298 return -ENOMEM;
1299
1300 if (drv_data->ssp_type == CE4100_SSP) {
1301 if (spi->chip_select > 4) {
1302 dev_err(&spi->dev,
1303 "failed setup: cs number must not be > 4.\n");
1304 kfree(chip);
1305 return -EINVAL;
1306 }
1307 }
1308 chip->enable_dma = drv_data->controller_info->enable_dma;
1309 chip->timeout = TIMOUT_DFLT;
1310 }
1311
1312
1313
1314
1315
1316 chip_info = spi->controller_data;
1317
1318
1319 chip->cr1 = 0;
1320 if (chip_info) {
1321 if (chip_info->timeout)
1322 chip->timeout = chip_info->timeout;
1323 if (chip_info->tx_threshold)
1324 tx_thres = chip_info->tx_threshold;
1325 if (chip_info->tx_hi_threshold)
1326 tx_hi_thres = chip_info->tx_hi_threshold;
1327 if (chip_info->rx_threshold)
1328 rx_thres = chip_info->rx_threshold;
1329 chip->dma_threshold = 0;
1330 if (chip_info->enable_loopback)
1331 chip->cr1 = SSCR1_LBM;
1332 }
1333 if (spi_controller_is_slave(drv_data->controller)) {
1334 chip->cr1 |= SSCR1_SCFR;
1335 chip->cr1 |= SSCR1_SCLKDIR;
1336 chip->cr1 |= SSCR1_SFRMDIR;
1337 chip->cr1 |= SSCR1_SPH;
1338 }
1339
1340 if (is_lpss_ssp(drv_data)) {
1341 chip->lpss_rx_threshold = SSIRF_RxThresh(rx_thres);
1342 chip->lpss_tx_threshold = SSITF_TxLoThresh(tx_thres) |
1343 SSITF_TxHiThresh(tx_hi_thres);
1344 }
1345
1346 if (is_mrfld_ssp(drv_data)) {
1347 chip->lpss_rx_threshold = rx_thres;
1348 chip->lpss_tx_threshold = tx_thres;
1349 }
1350
1351
1352
1353
1354
1355
1356 if (chip->enable_dma) {
1357
1358 if (pxa2xx_spi_set_dma_burst_and_threshold(chip, spi,
1359 spi->bits_per_word,
1360 &chip->dma_burst_size,
1361 &chip->dma_threshold)) {
1362 dev_warn(&spi->dev,
1363 "in setup: DMA burst size reduced to match bits_per_word\n");
1364 }
1365 dev_dbg(&spi->dev,
1366 "in setup: DMA burst size set to %u\n",
1367 chip->dma_burst_size);
1368 }
1369
1370 switch (drv_data->ssp_type) {
1371 case QUARK_X1000_SSP:
1372 chip->threshold = (QUARK_X1000_SSCR1_RxTresh(rx_thres)
1373 & QUARK_X1000_SSCR1_RFT)
1374 | (QUARK_X1000_SSCR1_TxTresh(tx_thres)
1375 & QUARK_X1000_SSCR1_TFT);
1376 break;
1377 case CE4100_SSP:
1378 chip->threshold = (CE4100_SSCR1_RxTresh(rx_thres) & CE4100_SSCR1_RFT) |
1379 (CE4100_SSCR1_TxTresh(tx_thres) & CE4100_SSCR1_TFT);
1380 break;
1381 default:
1382 chip->threshold = (SSCR1_RxTresh(rx_thres) & SSCR1_RFT) |
1383 (SSCR1_TxTresh(tx_thres) & SSCR1_TFT);
1384 break;
1385 }
1386
1387 chip->cr1 &= ~(SSCR1_SPO | SSCR1_SPH);
1388 chip->cr1 |= ((spi->mode & SPI_CPHA) ? SSCR1_SPH : 0) |
1389 ((spi->mode & SPI_CPOL) ? SSCR1_SPO : 0);
1390
1391 if (spi->mode & SPI_LOOP)
1392 chip->cr1 |= SSCR1_LBM;
1393
1394 if (spi->bits_per_word <= 8) {
1395 chip->n_bytes = 1;
1396 chip->read = u8_reader;
1397 chip->write = u8_writer;
1398 } else if (spi->bits_per_word <= 16) {
1399 chip->n_bytes = 2;
1400 chip->read = u16_reader;
1401 chip->write = u16_writer;
1402 } else if (spi->bits_per_word <= 32) {
1403 chip->n_bytes = 4;
1404 chip->read = u32_reader;
1405 chip->write = u32_writer;
1406 }
1407
1408 spi_set_ctldata(spi, chip);
1409
1410 if (drv_data->ssp_type == CE4100_SSP)
1411 return 0;
1412
1413 err = setup_cs(spi, chip, chip_info);
1414 if (err)
1415 kfree(chip);
1416
1417 return err;
1418}
1419
1420static void cleanup(struct spi_device *spi)
1421{
1422 struct chip_data *chip = spi_get_ctldata(spi);
1423
1424 cleanup_cs(spi);
1425 kfree(chip);
1426}
1427
1428#ifdef CONFIG_ACPI
1429static const struct acpi_device_id pxa2xx_spi_acpi_match[] = {
1430 { "INT33C0", LPSS_LPT_SSP },
1431 { "INT33C1", LPSS_LPT_SSP },
1432 { "INT3430", LPSS_LPT_SSP },
1433 { "INT3431", LPSS_LPT_SSP },
1434 { "80860F0E", LPSS_BYT_SSP },
1435 { "8086228E", LPSS_BSW_SSP },
1436 { },
1437};
1438MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);
1439#endif
1440
1441
1442
1443
1444
1445
1446static const struct pci_device_id pxa2xx_spi_pci_compound_match[] = {
1447
1448 { PCI_VDEVICE(INTEL, 0x9d29), LPSS_SPT_SSP },
1449 { PCI_VDEVICE(INTEL, 0x9d2a), LPSS_SPT_SSP },
1450
1451 { PCI_VDEVICE(INTEL, 0xa129), LPSS_SPT_SSP },
1452 { PCI_VDEVICE(INTEL, 0xa12a), LPSS_SPT_SSP },
1453
1454 { PCI_VDEVICE(INTEL, 0xa2a9), LPSS_SPT_SSP },
1455 { PCI_VDEVICE(INTEL, 0xa2aa), LPSS_SPT_SSP },
1456
1457 { PCI_VDEVICE(INTEL, 0xa3a9), LPSS_SPT_SSP },
1458 { PCI_VDEVICE(INTEL, 0xa3aa), LPSS_SPT_SSP },
1459
1460 { PCI_VDEVICE(INTEL, 0x0ac2), LPSS_BXT_SSP },
1461 { PCI_VDEVICE(INTEL, 0x0ac4), LPSS_BXT_SSP },
1462 { PCI_VDEVICE(INTEL, 0x0ac6), LPSS_BXT_SSP },
1463
1464 { PCI_VDEVICE(INTEL, 0x1ac2), LPSS_BXT_SSP },
1465 { PCI_VDEVICE(INTEL, 0x1ac4), LPSS_BXT_SSP },
1466 { PCI_VDEVICE(INTEL, 0x1ac6), LPSS_BXT_SSP },
1467
1468 { PCI_VDEVICE(INTEL, 0x31c2), LPSS_BXT_SSP },
1469 { PCI_VDEVICE(INTEL, 0x31c4), LPSS_BXT_SSP },
1470 { PCI_VDEVICE(INTEL, 0x31c6), LPSS_BXT_SSP },
1471
1472 { PCI_VDEVICE(INTEL, 0x34aa), LPSS_CNL_SSP },
1473 { PCI_VDEVICE(INTEL, 0x34ab), LPSS_CNL_SSP },
1474 { PCI_VDEVICE(INTEL, 0x34fb), LPSS_CNL_SSP },
1475
1476 { PCI_VDEVICE(INTEL, 0x4b2a), LPSS_BXT_SSP },
1477 { PCI_VDEVICE(INTEL, 0x4b2b), LPSS_BXT_SSP },
1478 { PCI_VDEVICE(INTEL, 0x4b37), LPSS_BXT_SSP },
1479
1480 { PCI_VDEVICE(INTEL, 0x4daa), LPSS_CNL_SSP },
1481 { PCI_VDEVICE(INTEL, 0x4dab), LPSS_CNL_SSP },
1482 { PCI_VDEVICE(INTEL, 0x4dfb), LPSS_CNL_SSP },
1483
1484 { PCI_VDEVICE(INTEL, 0x43aa), LPSS_CNL_SSP },
1485 { PCI_VDEVICE(INTEL, 0x43ab), LPSS_CNL_SSP },
1486 { PCI_VDEVICE(INTEL, 0x43fb), LPSS_CNL_SSP },
1487 { PCI_VDEVICE(INTEL, 0x43fd), LPSS_CNL_SSP },
1488
1489 { PCI_VDEVICE(INTEL, 0x51aa), LPSS_CNL_SSP },
1490 { PCI_VDEVICE(INTEL, 0x51ab), LPSS_CNL_SSP },
1491 { PCI_VDEVICE(INTEL, 0x51fb), LPSS_CNL_SSP },
1492
1493 { PCI_VDEVICE(INTEL, 0x54aa), LPSS_CNL_SSP },
1494 { PCI_VDEVICE(INTEL, 0x54ab), LPSS_CNL_SSP },
1495 { PCI_VDEVICE(INTEL, 0x54fb), LPSS_CNL_SSP },
1496
1497 { PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP },
1498 { PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP },
1499 { PCI_VDEVICE(INTEL, 0x5ac6), LPSS_BXT_SSP },
1500
1501 { PCI_VDEVICE(INTEL, 0x7aaa), LPSS_CNL_SSP },
1502 { PCI_VDEVICE(INTEL, 0x7aab), LPSS_CNL_SSP },
1503 { PCI_VDEVICE(INTEL, 0x7af9), LPSS_CNL_SSP },
1504 { PCI_VDEVICE(INTEL, 0x7afb), LPSS_CNL_SSP },
1505
1506 { PCI_VDEVICE(INTEL, 0x9daa), LPSS_CNL_SSP },
1507 { PCI_VDEVICE(INTEL, 0x9dab), LPSS_CNL_SSP },
1508 { PCI_VDEVICE(INTEL, 0x9dfb), LPSS_CNL_SSP },
1509
1510 { PCI_VDEVICE(INTEL, 0xa32a), LPSS_CNL_SSP },
1511 { PCI_VDEVICE(INTEL, 0xa32b), LPSS_CNL_SSP },
1512 { PCI_VDEVICE(INTEL, 0xa37b), LPSS_CNL_SSP },
1513
1514 { PCI_VDEVICE(INTEL, 0x02aa), LPSS_CNL_SSP },
1515 { PCI_VDEVICE(INTEL, 0x02ab), LPSS_CNL_SSP },
1516 { PCI_VDEVICE(INTEL, 0x02fb), LPSS_CNL_SSP },
1517
1518 { PCI_VDEVICE(INTEL, 0x06aa), LPSS_CNL_SSP },
1519 { PCI_VDEVICE(INTEL, 0x06ab), LPSS_CNL_SSP },
1520 { PCI_VDEVICE(INTEL, 0x06fb), LPSS_CNL_SSP },
1521
1522 { PCI_VDEVICE(INTEL, 0xa0aa), LPSS_CNL_SSP },
1523 { PCI_VDEVICE(INTEL, 0xa0ab), LPSS_CNL_SSP },
1524 { PCI_VDEVICE(INTEL, 0xa0de), LPSS_CNL_SSP },
1525 { PCI_VDEVICE(INTEL, 0xa0df), LPSS_CNL_SSP },
1526 { PCI_VDEVICE(INTEL, 0xa0fb), LPSS_CNL_SSP },
1527 { PCI_VDEVICE(INTEL, 0xa0fd), LPSS_CNL_SSP },
1528 { PCI_VDEVICE(INTEL, 0xa0fe), LPSS_CNL_SSP },
1529 { },
1530};
1531
1532static const struct of_device_id pxa2xx_spi_of_match[] = {
1533 { .compatible = "marvell,mmp2-ssp", .data = (void *)MMP2_SSP },
1534 {},
1535};
1536MODULE_DEVICE_TABLE(of, pxa2xx_spi_of_match);
1537
1538#ifdef CONFIG_ACPI
1539
1540static int pxa2xx_spi_get_port_id(struct device *dev)
1541{
1542 struct acpi_device *adev;
1543 unsigned int devid;
1544 int port_id = -1;
1545
1546 adev = ACPI_COMPANION(dev);
1547 if (adev && adev->pnp.unique_id &&
1548 !kstrtouint(adev->pnp.unique_id, 0, &devid))
1549 port_id = devid;
1550 return port_id;
1551}
1552
1553#else
1554
1555static int pxa2xx_spi_get_port_id(struct device *dev)
1556{
1557 return -1;
1558}
1559
1560#endif
1561
1562
1563#ifdef CONFIG_PCI
1564
1565static bool pxa2xx_spi_idma_filter(struct dma_chan *chan, void *param)
1566{
1567 return param == chan->device->dev;
1568}
1569
1570#endif
1571
1572static struct pxa2xx_spi_controller *
1573pxa2xx_spi_init_pdata(struct platform_device *pdev)
1574{
1575 struct pxa2xx_spi_controller *pdata;
1576 struct ssp_device *ssp;
1577 struct resource *res;
1578 struct device *parent = pdev->dev.parent;
1579 struct pci_dev *pcidev = dev_is_pci(parent) ? to_pci_dev(parent) : NULL;
1580 const struct pci_device_id *pcidev_id = NULL;
1581 enum pxa_ssp_type type;
1582 const void *match;
1583
1584 if (pcidev)
1585 pcidev_id = pci_match_id(pxa2xx_spi_pci_compound_match, pcidev);
1586
1587 match = device_get_match_data(&pdev->dev);
1588 if (match)
1589 type = (enum pxa_ssp_type)match;
1590 else if (pcidev_id)
1591 type = (enum pxa_ssp_type)pcidev_id->driver_data;
1592 else
1593 return ERR_PTR(-EINVAL);
1594
1595 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1596 if (!pdata)
1597 return ERR_PTR(-ENOMEM);
1598
1599 ssp = &pdata->ssp;
1600
1601 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1602 ssp->mmio_base = devm_ioremap_resource(&pdev->dev, res);
1603 if (IS_ERR(ssp->mmio_base))
1604 return ERR_CAST(ssp->mmio_base);
1605
1606 ssp->phys_base = res->start;
1607
1608#ifdef CONFIG_PCI
1609 if (pcidev_id) {
1610 pdata->tx_param = parent;
1611 pdata->rx_param = parent;
1612 pdata->dma_filter = pxa2xx_spi_idma_filter;
1613 }
1614#endif
1615
1616 ssp->clk = devm_clk_get(&pdev->dev, NULL);
1617 if (IS_ERR(ssp->clk))
1618 return ERR_CAST(ssp->clk);
1619
1620 ssp->irq = platform_get_irq(pdev, 0);
1621 if (ssp->irq < 0)
1622 return ERR_PTR(ssp->irq);
1623
1624 ssp->type = type;
1625 ssp->dev = &pdev->dev;
1626 ssp->port_id = pxa2xx_spi_get_port_id(&pdev->dev);
1627
1628 pdata->is_slave = device_property_read_bool(&pdev->dev, "spi-slave");
1629 pdata->num_chipselect = 1;
1630 pdata->enable_dma = true;
1631 pdata->dma_burst_size = 1;
1632
1633 return pdata;
1634}
1635
1636static int pxa2xx_spi_fw_translate_cs(struct spi_controller *controller,
1637 unsigned int cs)
1638{
1639 struct driver_data *drv_data = spi_controller_get_devdata(controller);
1640
1641 if (has_acpi_companion(drv_data->ssp->dev)) {
1642 switch (drv_data->ssp_type) {
1643
1644
1645
1646
1647
1648 case LPSS_BYT_SSP:
1649 case LPSS_BSW_SSP:
1650 return cs - 1;
1651
1652 default:
1653 break;
1654 }
1655 }
1656
1657 return cs;
1658}
1659
1660static size_t pxa2xx_spi_max_dma_transfer_size(struct spi_device *spi)
1661{
1662 return MAX_DMA_LEN;
1663}
1664
1665static int pxa2xx_spi_probe(struct platform_device *pdev)
1666{
1667 struct device *dev = &pdev->dev;
1668 struct pxa2xx_spi_controller *platform_info;
1669 struct spi_controller *controller;
1670 struct driver_data *drv_data;
1671 struct ssp_device *ssp;
1672 const struct lpss_config *config;
1673 int status;
1674 u32 tmp;
1675
1676 platform_info = dev_get_platdata(dev);
1677 if (!platform_info) {
1678 platform_info = pxa2xx_spi_init_pdata(pdev);
1679 if (IS_ERR(platform_info)) {
1680 dev_err(&pdev->dev, "missing platform data\n");
1681 return PTR_ERR(platform_info);
1682 }
1683 }
1684
1685 ssp = pxa_ssp_request(pdev->id, pdev->name);
1686 if (!ssp)
1687 ssp = &platform_info->ssp;
1688
1689 if (!ssp->mmio_base) {
1690 dev_err(&pdev->dev, "failed to get SSP\n");
1691 return -ENODEV;
1692 }
1693
1694 if (platform_info->is_slave)
1695 controller = devm_spi_alloc_slave(dev, sizeof(*drv_data));
1696 else
1697 controller = devm_spi_alloc_master(dev, sizeof(*drv_data));
1698
1699 if (!controller) {
1700 dev_err(&pdev->dev, "cannot alloc spi_controller\n");
1701 status = -ENOMEM;
1702 goto out_error_controller_alloc;
1703 }
1704 drv_data = spi_controller_get_devdata(controller);
1705 drv_data->controller = controller;
1706 drv_data->controller_info = platform_info;
1707 drv_data->ssp = ssp;
1708
1709 controller->dev.of_node = dev->of_node;
1710 controller->dev.fwnode = dev->fwnode;
1711
1712
1713 controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
1714
1715 controller->bus_num = ssp->port_id;
1716 controller->dma_alignment = DMA_ALIGNMENT;
1717 controller->cleanup = cleanup;
1718 controller->setup = setup;
1719 controller->set_cs = pxa2xx_spi_set_cs;
1720 controller->transfer_one = pxa2xx_spi_transfer_one;
1721 controller->slave_abort = pxa2xx_spi_slave_abort;
1722 controller->handle_err = pxa2xx_spi_handle_err;
1723 controller->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer;
1724 controller->fw_translate_cs = pxa2xx_spi_fw_translate_cs;
1725 controller->auto_runtime_pm = true;
1726 controller->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX;
1727
1728 drv_data->ssp_type = ssp->type;
1729
1730 if (pxa25x_ssp_comp(drv_data)) {
1731 switch (drv_data->ssp_type) {
1732 case QUARK_X1000_SSP:
1733 controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
1734 break;
1735 default:
1736 controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16);
1737 break;
1738 }
1739
1740 drv_data->int_cr1 = SSCR1_TIE | SSCR1_RIE;
1741 drv_data->dma_cr1 = 0;
1742 drv_data->clear_sr = SSSR_ROR;
1743 drv_data->mask_sr = SSSR_RFS | SSSR_TFS | SSSR_ROR;
1744 } else {
1745 controller->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
1746 drv_data->int_cr1 = SSCR1_TIE | SSCR1_RIE | SSCR1_TINTE;
1747 drv_data->dma_cr1 = DEFAULT_DMA_CR1;
1748 drv_data->clear_sr = SSSR_ROR | SSSR_TINT;
1749 drv_data->mask_sr = SSSR_TINT | SSSR_RFS | SSSR_TFS
1750 | SSSR_ROR | SSSR_TUR;
1751 }
1752
1753 status = request_irq(ssp->irq, ssp_int, IRQF_SHARED, dev_name(dev),
1754 drv_data);
1755 if (status < 0) {
1756 dev_err(&pdev->dev, "cannot get IRQ %d\n", ssp->irq);
1757 goto out_error_controller_alloc;
1758 }
1759
1760
1761 if (platform_info->enable_dma) {
1762 status = pxa2xx_spi_dma_setup(drv_data);
1763 if (status) {
1764 dev_warn(dev, "no DMA channels available, using PIO\n");
1765 platform_info->enable_dma = false;
1766 } else {
1767 controller->can_dma = pxa2xx_spi_can_dma;
1768 controller->max_dma_len = MAX_DMA_LEN;
1769 controller->max_transfer_size =
1770 pxa2xx_spi_max_dma_transfer_size;
1771 }
1772 }
1773
1774
1775 status = clk_prepare_enable(ssp->clk);
1776 if (status)
1777 goto out_error_dma_irq_alloc;
1778
1779 controller->max_speed_hz = clk_get_rate(ssp->clk);
1780
1781
1782
1783
1784 if (!pxa25x_ssp_comp(drv_data))
1785 controller->min_speed_hz =
1786 DIV_ROUND_UP(controller->max_speed_hz, 4096);
1787 else if (!is_quark_x1000_ssp(drv_data))
1788 controller->min_speed_hz =
1789 DIV_ROUND_UP(controller->max_speed_hz, 512);
1790
1791 pxa_ssp_disable(ssp);
1792
1793
1794 switch (drv_data->ssp_type) {
1795 case QUARK_X1000_SSP:
1796 tmp = QUARK_X1000_SSCR1_RxTresh(RX_THRESH_QUARK_X1000_DFLT) |
1797 QUARK_X1000_SSCR1_TxTresh(TX_THRESH_QUARK_X1000_DFLT);
1798 pxa2xx_spi_write(drv_data, SSCR1, tmp);
1799
1800
1801 tmp = QUARK_X1000_SSCR0_Motorola | QUARK_X1000_SSCR0_DataSize(8);
1802 pxa2xx_spi_write(drv_data, SSCR0, tmp);
1803 break;
1804 case CE4100_SSP:
1805 tmp = CE4100_SSCR1_RxTresh(RX_THRESH_CE4100_DFLT) |
1806 CE4100_SSCR1_TxTresh(TX_THRESH_CE4100_DFLT);
1807 pxa2xx_spi_write(drv_data, SSCR1, tmp);
1808 tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8);
1809 pxa2xx_spi_write(drv_data, SSCR0, tmp);
1810 break;
1811 default:
1812
1813 if (spi_controller_is_slave(controller)) {
1814 tmp = SSCR1_SCFR |
1815 SSCR1_SCLKDIR |
1816 SSCR1_SFRMDIR |
1817 SSCR1_RxTresh(2) |
1818 SSCR1_TxTresh(1) |
1819 SSCR1_SPH;
1820 } else {
1821 tmp = SSCR1_RxTresh(RX_THRESH_DFLT) |
1822 SSCR1_TxTresh(TX_THRESH_DFLT);
1823 }
1824 pxa2xx_spi_write(drv_data, SSCR1, tmp);
1825 tmp = SSCR0_Motorola | SSCR0_DataSize(8);
1826 if (!spi_controller_is_slave(controller))
1827 tmp |= SSCR0_SCR(2);
1828 pxa2xx_spi_write(drv_data, SSCR0, tmp);
1829 break;
1830 }
1831
1832 if (!pxa25x_ssp_comp(drv_data))
1833 pxa2xx_spi_write(drv_data, SSTO, 0);
1834
1835 if (!is_quark_x1000_ssp(drv_data))
1836 pxa2xx_spi_write(drv_data, SSPSP, 0);
1837
1838 if (is_lpss_ssp(drv_data)) {
1839 lpss_ssp_setup(drv_data);
1840 config = lpss_get_config(drv_data);
1841 if (config->reg_capabilities >= 0) {
1842 tmp = __lpss_ssp_read_priv(drv_data,
1843 config->reg_capabilities);
1844 tmp &= LPSS_CAPS_CS_EN_MASK;
1845 tmp >>= LPSS_CAPS_CS_EN_SHIFT;
1846 platform_info->num_chipselect = ffz(tmp);
1847 } else if (config->cs_num) {
1848 platform_info->num_chipselect = config->cs_num;
1849 }
1850 }
1851 controller->num_chipselect = platform_info->num_chipselect;
1852 controller->use_gpio_descriptors = true;
1853
1854 if (platform_info->is_slave) {
1855 drv_data->gpiod_ready = devm_gpiod_get_optional(dev,
1856 "ready", GPIOD_OUT_LOW);
1857 if (IS_ERR(drv_data->gpiod_ready)) {
1858 status = PTR_ERR(drv_data->gpiod_ready);
1859 goto out_error_clock_enabled;
1860 }
1861 }
1862
1863 pm_runtime_set_autosuspend_delay(&pdev->dev, 50);
1864 pm_runtime_use_autosuspend(&pdev->dev);
1865 pm_runtime_set_active(&pdev->dev);
1866 pm_runtime_enable(&pdev->dev);
1867
1868
1869 platform_set_drvdata(pdev, drv_data);
1870 status = spi_register_controller(controller);
1871 if (status) {
1872 dev_err(&pdev->dev, "problem registering SPI controller\n");
1873 goto out_error_pm_runtime_enabled;
1874 }
1875
1876 return status;
1877
1878out_error_pm_runtime_enabled:
1879 pm_runtime_disable(&pdev->dev);
1880
1881out_error_clock_enabled:
1882 clk_disable_unprepare(ssp->clk);
1883
1884out_error_dma_irq_alloc:
1885 pxa2xx_spi_dma_release(drv_data);
1886 free_irq(ssp->irq, drv_data);
1887
1888out_error_controller_alloc:
1889 pxa_ssp_free(ssp);
1890 return status;
1891}
1892
1893static int pxa2xx_spi_remove(struct platform_device *pdev)
1894{
1895 struct driver_data *drv_data = platform_get_drvdata(pdev);
1896 struct ssp_device *ssp = drv_data->ssp;
1897
1898 pm_runtime_get_sync(&pdev->dev);
1899
1900 spi_unregister_controller(drv_data->controller);
1901
1902
1903 pxa_ssp_disable(ssp);
1904 clk_disable_unprepare(ssp->clk);
1905
1906
1907 if (drv_data->controller_info->enable_dma)
1908 pxa2xx_spi_dma_release(drv_data);
1909
1910 pm_runtime_put_noidle(&pdev->dev);
1911 pm_runtime_disable(&pdev->dev);
1912
1913
1914 free_irq(ssp->irq, drv_data);
1915
1916
1917 pxa_ssp_free(ssp);
1918
1919 return 0;
1920}
1921
1922#ifdef CONFIG_PM_SLEEP
1923static int pxa2xx_spi_suspend(struct device *dev)
1924{
1925 struct driver_data *drv_data = dev_get_drvdata(dev);
1926 struct ssp_device *ssp = drv_data->ssp;
1927 int status;
1928
1929 status = spi_controller_suspend(drv_data->controller);
1930 if (status)
1931 return status;
1932
1933 pxa_ssp_disable(ssp);
1934
1935 if (!pm_runtime_suspended(dev))
1936 clk_disable_unprepare(ssp->clk);
1937
1938 return 0;
1939}
1940
1941static int pxa2xx_spi_resume(struct device *dev)
1942{
1943 struct driver_data *drv_data = dev_get_drvdata(dev);
1944 struct ssp_device *ssp = drv_data->ssp;
1945 int status;
1946
1947
1948 if (!pm_runtime_suspended(dev)) {
1949 status = clk_prepare_enable(ssp->clk);
1950 if (status)
1951 return status;
1952 }
1953
1954
1955 return spi_controller_resume(drv_data->controller);
1956}
1957#endif
1958
1959#ifdef CONFIG_PM
1960static int pxa2xx_spi_runtime_suspend(struct device *dev)
1961{
1962 struct driver_data *drv_data = dev_get_drvdata(dev);
1963
1964 clk_disable_unprepare(drv_data->ssp->clk);
1965 return 0;
1966}
1967
1968static int pxa2xx_spi_runtime_resume(struct device *dev)
1969{
1970 struct driver_data *drv_data = dev_get_drvdata(dev);
1971 int status;
1972
1973 status = clk_prepare_enable(drv_data->ssp->clk);
1974 return status;
1975}
1976#endif
1977
1978static const struct dev_pm_ops pxa2xx_spi_pm_ops = {
1979 SET_SYSTEM_SLEEP_PM_OPS(pxa2xx_spi_suspend, pxa2xx_spi_resume)
1980 SET_RUNTIME_PM_OPS(pxa2xx_spi_runtime_suspend,
1981 pxa2xx_spi_runtime_resume, NULL)
1982};
1983
1984static struct platform_driver driver = {
1985 .driver = {
1986 .name = "pxa2xx-spi",
1987 .pm = &pxa2xx_spi_pm_ops,
1988 .acpi_match_table = ACPI_PTR(pxa2xx_spi_acpi_match),
1989 .of_match_table = of_match_ptr(pxa2xx_spi_of_match),
1990 },
1991 .probe = pxa2xx_spi_probe,
1992 .remove = pxa2xx_spi_remove,
1993};
1994
1995static int __init pxa2xx_spi_init(void)
1996{
1997 return platform_driver_register(&driver);
1998}
1999subsys_initcall(pxa2xx_spi_init);
2000
2001static void __exit pxa2xx_spi_exit(void)
2002{
2003 platform_driver_unregister(&driver);
2004}
2005module_exit(pxa2xx_spi_exit);
2006
2007MODULE_SOFTDEP("pre: dw_dmac");
2008