forward port redboot rootfs partition space expansion patch to 2.6.24
[openwrt.git] / target / linux / etrax / files / drivers / spi / spi_crisv32_sser.c
1 /*
2 * SPI port driver for ETRAX FS et al. using a synchronous serial
3 * port, but simplified by using the spi_bitbang framework.
4 *
5 * Copyright (c) 2007 Axis Communications AB
6 *
7 * Author: Hans-Peter Nilsson, though copying parts of
8 * spi_s3c24xx_gpio.c, hence also:
9 * Copyright (c) 2006 Ben Dooks
10 * Copyright (c) 2006 Simtec Electronics
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
15 *
16 * This driver restricts frequency, polarity, "word" length and endian
17 * much more than the hardware does. I'm happy to unrestrict it, but
18 * only with what I can test myself (at time of writing, just SD/MMC
19 * SPI) and what people actually test and report.
20 */
21
22 #include <linux/types.h>
23 #include <linux/device.h>
24 #include <linux/spi/spi.h>
25 #include <linux/spi/spi_bitbang.h>
26 #include <linux/delay.h>
27 #include <linux/platform_device.h>
28 #include <linux/interrupt.h>
29 #include <asm/io.h>
30 #include <asm/arch/board.h>
31 #include <asm/arch/hwregs/reg_map.h>
32 #include <asm/arch/hwregs/reg_rdwr.h>
33 #include <asm/arch/hwregs/sser_defs.h>
34 #include <asm/arch/dma.h>
35 #include <asm/arch/hwregs/dma.h>
36
37 /* A size "not much larger" than the max typical transfer size. */
38 #define DMA_CHUNKSIZ 512
39
40 /*
41 * For a transfer expected to take this long, we busy-wait instead of enabling
42 * interrupts.
43 */
44 #define IRQ_USAGE_THRESHOLD_NS 14000
45
46 /* A few register access macros to avoid verbiage and reduce typos. */
47 #define REG_RD_DI(reg) REG_RD(dma, regi_dmain, reg)
48 #define REG_RD_DO(reg) REG_RD(dma, regi_dmaout, reg)
49 #define REG_RD_SSER(reg) REG_RD(sser, regi_sser, reg)
50 #define REG_WR_DI(reg, val) REG_WR(dma, regi_dmain, reg, val)
51 #define REG_WR_DO(reg, val) REG_WR(dma, regi_dmaout, reg, val)
52 #define REG_WR_SSER(reg, val) REG_WR(sser, regi_sser, reg, val)
53 #define REG_WRINT_DI(reg, val) REG_WR_INT(dma, regi_dmain, reg, val)
54 #define REG_WRINT_DO(reg, val) REG_WR_INT(dma, regi_dmaout, reg, val)
55 #define REG_WRINT_SSER(reg, val) REG_WR_INT(sser, regi_sser, reg, val)
56 #define REG_RDINT_DI(reg) REG_RD_INT(dma, regi_dmain, reg)
57 #define REG_RDINT_DO(reg) REG_RD_INT(dma, regi_dmaout, reg)
58 #define REG_RDINT_SSER(reg) REG_RD_INT(sser, regi_sser, reg)
59
60 #define DMA_WAIT_UNTIL_RESET(inst) \
61 do { \
62 reg_dma_rw_stat r; \
63 do { \
64 r = REG_RD(dma, (inst), rw_stat); \
65 } while (r.mode != regk_dma_rst); \
66 } while (0)
67
68 #define DMA_BUSY(inst) (REG_RD(dma, inst, rw_stream_cmd)).busy
69
70 /* Our main driver state. */
71 struct crisv32_spi_hw_info {
72 struct crisv32_regi_n_int sser;
73 struct crisv32_regi_n_int dmain;
74 struct crisv32_regi_n_int dmaout;
75
76 reg_sser_rw_cfg cfg;
77 reg_sser_rw_frm_cfg frm_cfg;
78 reg_sser_rw_tr_cfg tr_cfg;
79 reg_sser_rw_rec_cfg rec_cfg;
80 reg_sser_rw_extra extra;
81
82 /* We store the speed in kHz, so we can have expressions
83 * multiplying 100MHz by * 4 before dividing by it, and still
84 * keep it in an u32. */
85 u32 effective_speed_kHz;
86
87 /*
88 * The time in 10s of nanoseconds for half a cycles.
89 * For convenience and performance; derived from the above.
90 */
91 u32 half_cycle_delay_ns;
92
93 /* This should be overridable by a module parameter. */
94 u32 max_speed_Hz;
95
96 /* Pre-computed timout for the max transfer chunk-size. */
97 u32 dma_timeout;
98
99 struct completion dma_done;
100
101 /*
102 * If we get a timeout from wait_for_completion_timeout on the
103 * above, first look at this before panicking.
104 */
105 u32 dma_actually_done;
106
107 /*
108 * Resources don't seem available at the remove call, so we
109 * have to save information we get through them.
110 */
111 struct crisv32_spi_sser_controller_data *gc;
112 };
113
114 /*
115 * The driver state hides behind the spi_bitbang state; we're
116 * responsible for allocating that, so we can get a little something
117 * for ourselves.
118 */
119 struct crisv32_spi_sser_devdata {
120 struct spi_bitbang bitbang;
121 struct crisv32_spi_hw_info hw;
122 };
123
124 /* Our DMA descriptors that need alignment. */
125 struct crisv32_spi_dma_descrs {
126 dma_descr_context in_ctxt __attribute__ ((__aligned__(32)));
127 dma_descr_context out_ctxt __attribute__ ((__aligned__(32)));
128
129 /*
130 * The code takes advantage of the fact that in_descr and
131 * out_descr are on the same cache-line when working around
132 * the cache-bug in TR 106.
133 */
134 dma_descr_data in_descr __attribute__ ((__aligned__(16)));
135 dma_descr_data out_descr __attribute__ ((__aligned__(16)));
136 };
137
138 /*
139 * Whatever needs DMA access is here, besides whatever DMA-able memory
140 * comes in transfers.
141 */
142 struct crisv32_spi_dma_cs {
143 struct crisv32_spi_dma_descrs *descrp;
144
145 /* Scratch-buffers when the original was non-DMA. */
146 u8 rx_buf[DMA_CHUNKSIZ];
147 u8 tx_buf[DMA_CHUNKSIZ];
148 };
149
150 /*
151 * Max speed. If set, we won't go faster, promise. May be useful
152 * when dealing with weak hardware; misrouted signal paths or various
153 * debug-situations.
154 */
155 static ulong crisv32_spi_speed_limit_Hz = 0;
156
157 /* Helper function getting the driver state from a spi_device. */
158
159 static inline struct crisv32_spi_hw_info *spidev_to_hw(struct spi_device *spi)
160 {
161 struct crisv32_spi_sser_devdata *dd = spi_master_get_devdata(spi->master);
162 return &dd->hw;
163 }
164
165 /* SPI-bitbang word transmit-function for non-DMA. */
166
167 static u32 crisv32_spi_sser_txrx_mode3(struct spi_device *spi,
168 unsigned nsecs, u32 word, u8 bits)
169 {
170 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
171 u32 regi_sser = hw->sser.regi;
172 reg_sser_rw_ack_intr ack_intr = { .trdy = 1, .rdav = 1 };
173 reg_sser_r_intr intr = {0};
174 reg_sser_rw_tr_data w_data = { .data = (u8) word };
175 reg_sser_r_rec_data r_data;
176 u32 i;
177
178 /*
179 * The timeout reflects one iteration per 10ns (impossible at
180 * 200MHz clock even without the ndelay) and a wait for a full
181 * byte.
182 */
183 u32 timeout = 1000000/10*8/hw->effective_speed_kHz;
184
185 BUG_ON(bits != 8);
186
187 intr = REG_RD_SSER(r_intr);
188
189 /*
190 * We should never get xruns when we control the transmitter
191 * and receiver in register mode. And if we don't have
192 * transmitter-ready and data-ready on entry, something's
193 * seriously fishy.
194 */
195 if (!intr.trdy || !intr.rdav || intr.orun || intr.urun)
196 panic("sser hardware or SPI driver broken (1) 0x%x\n",
197 REG_TYPE_CONV(u32, reg_sser_r_intr, intr));
198
199 REG_WR_SSER(rw_ack_intr, ack_intr);
200 REG_WR_SSER(rw_tr_data, w_data);
201
202 for (i = 0; i < timeout; i++) {
203 intr = REG_RD_SSER(r_intr);
204 /* Wait for received data. */
205 if (intr.rdav)
206 break;
207 ndelay(10);
208 }
209
210 if (!(intr.trdy && intr.rdav) || intr.orun || intr.urun)
211 panic("sser hardware or SPI driver broken (2) 0x%x\n",
212 REG_TYPE_CONV(u32, reg_sser_r_intr, intr));
213
214 r_data = REG_RD_SSER(r_rec_data);
215 return r_data.data & 0xff;
216 }
217
218 /*
219 * Wait for 1/2 bit-time if the transmitter or receiver is enabled.
220 * We need to do this as the data-available indications may arrive
221 * right at the edge, with half the last cycle remaining.
222 */
223 static void inline crisv32_spi_sser_wait_halfabit(struct crisv32_spi_hw_info
224 *hw)
225 {
226 if (hw->cfg.en)
227 ndelay(hw->half_cycle_delay_ns);
228 }
229
230 /*
231 * Assert or de-assert chip-select.
232 * We have two functions, with the active one assigned to the bitbang
233 * slot at setup, to avoid a performance penalty (1% on reads).
234 */
235 static void crisv32_spi_sser_chip_select_active_high(struct spi_device *spi,
236 int value)
237 {
238 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
239 u32 regi_sser = hw->sser.regi;
240
241 /*
242 * We may have received data at the "last producing clock
243 * edge". Thus we delay for another half a clock cycle.
244 */
245 crisv32_spi_sser_wait_halfabit(hw);
246
247 hw->frm_cfg.frame_pin_use
248 = value == BITBANG_CS_ACTIVE ? regk_sser_gio1 : regk_sser_gio0;
249 REG_WR_SSER(rw_frm_cfg, hw->frm_cfg);
250 }
251
252 static void crisv32_spi_sser_chip_select_active_low(struct spi_device *spi,
253 int value)
254 {
255 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
256 u32 regi_sser = hw->sser.regi;
257
258 crisv32_spi_sser_wait_halfabit(hw);
259 hw->frm_cfg.frame_pin_use
260 = value == BITBANG_CS_ACTIVE ? regk_sser_gio0 : regk_sser_gio1;
261 REG_WR_SSER(rw_frm_cfg, hw->frm_cfg);
262 }
263
264 /* Set the transmission speed in Hz. */
265
266 static int crisv32_spi_sser_set_speed_Hz(struct crisv32_spi_hw_info *hw,
267 u32 Hz)
268 {
269 u32 kHz;
270 u32 ns_delay;
271 u32 regi_sser = hw->sser.regi;
272
273 if (Hz > hw->max_speed_Hz)
274 /*
275 * Should we complain? Return error? Current caller
276 * sequences want just the max speed.
277 */
278 Hz = hw->max_speed_Hz;
279
280 kHz = Hz/1000;
281
282 /*
283 * If absolutely needed, we *could* change the base frequency
284 * and go lower. Usually, a frequency set higher than wanted
285 * is a problem but lower isn't.
286 */
287 if (Hz < 100000000 / 65536 + 1) {
288 printk(KERN_ERR "attempt to set invalid sser speed: %u Hz\n",
289 Hz);
290 Hz = 100000000 / 65536 + 1;
291 }
292
293 pr_debug("setting sser speed to %u Hz\n", Hz);
294
295 /*
296 * Avoid going above the requested speed if there's a
297 * remainder for the 100 MHz clock-divider calculation, but
298 * don't unnecessarily go below if it's even.
299 */
300 hw->cfg.clk_div = 100000000/Hz - ((100000000 % Hz) == 0);
301
302 /* Make sure there's no ongoing transmission. */
303 crisv32_spi_sser_wait_halfabit(hw);
304
305 /*
306 * Wait for 3 times max of the old and the new clock before and after
307 * changing the frequency. Not because of documentation or empirical
308 * need, but because it seems sane to do so. The three-bit-times
309 * value is because that's the documented time it takes for a reset to
310 * take effect.
311 */
312 ns_delay = 1000000*3/(kHz > hw->effective_speed_kHz
313 ? kHz : hw->effective_speed_kHz);
314 ndelay(ns_delay);
315 REG_WR_SSER(rw_cfg, hw->cfg);
316 ndelay(ns_delay);
317
318 hw->effective_speed_kHz = kHz;
319
320 /*
321 * A timeout of twice the time for the largest chunk (not
322 * counting DMA overhead) plus one jiffy, should be more than
323 * enough for the transmission.
324 */
325 hw->dma_timeout = 1 + usecs_to_jiffies(1000*2*DMA_CHUNKSIZ*8/kHz);
326
327 hw->half_cycle_delay_ns
328 = 1000000/2/hw->effective_speed_kHz;
329
330 pr_debug(".clk_div %d, half %d, eff %d\n",
331 hw->cfg.clk_div, hw->half_cycle_delay_ns,
332 hw->effective_speed_kHz);
333 return 0;
334 }
335
336 /*
337 * Set up transmitter and receiver for non-DMA access.
338 * Unfortunately, it doesn't seem like hispeed works for this mode
339 * (mea culpa), so we're stuck with lospeed-mode. A little slower,
340 * but that's what you get for not allocating DMA.
341 */
342 static int crisv32_setup_spi_sser_for_reg_access(struct crisv32_spi_hw_info *hw)
343 {
344 u32 regi_sser = hw->sser.regi;
345
346 reg_sser_rw_cfg cfg = {0};
347 reg_sser_rw_frm_cfg frm_cfg = {0};
348 reg_sser_rw_tr_cfg tr_cfg = {0};
349 reg_sser_rw_rec_cfg rec_cfg = {0};
350 reg_sser_rw_intr_mask mask = {0};
351 reg_sser_rw_extra extra = {0};
352 reg_sser_rw_tr_data tr_data = {0};
353 reg_sser_r_intr intr;
354
355 cfg.en = 0;
356 tr_cfg.tr_en = 1;
357 rec_cfg.rec_en = 1;
358 REG_WR_SSER(rw_cfg, cfg);
359 REG_WR_SSER(rw_tr_cfg, tr_cfg);
360 REG_WR_SSER(rw_rec_cfg, rec_cfg);
361 REG_WR_SSER(rw_intr_mask, mask);
362
363 /*
364 * See 23.7.2 SPI in the hardware documentation.
365 * Except our configuration uses bulk mode; MMC/SD-SPI
366 * isn't isochronous in nature.
367 * Step 1.
368 */
369 cfg.gate_clk = regk_sser_yes;
370 cfg.clkgate_in = regk_sser_no;
371 cfg.clkgate_ctrl = regk_sser_tr;
372
373 /* Step 2. */
374 cfg.out_clk_pol = regk_sser_pos;
375 cfg.out_clk_src = regk_sser_intern_clk;
376
377 /* Step 3. */
378 tr_cfg.clk_src = regk_sser_intern;
379 rec_cfg.clk_src = regk_sser_intern;
380 frm_cfg.clk_src = regk_sser_intern;
381
382 /* Step 4. */
383 tr_cfg.clk_pol = regk_sser_neg;
384 rec_cfg.clk_pol = regk_sser_pos;
385 frm_cfg.clk_pol = regk_sser_neg;
386
387 /*
388 * Step 5: frame pin (PC03 or PD03) is frame; the status pin
389 * (PC02, PD02) is configured as input.
390 */
391 frm_cfg.frame_pin_dir = regk_sser_out;
392
393 /*
394 * Contrary to the doc example, we don't generate the frame
395 * signal "automatically". This setting of the frame pin as
396 * constant 1, reflects an inactive /CS setting, for just idle
397 * clocking. When we need to transmit or receive data, we
398 * change it.
399 */
400 frm_cfg.frame_pin_use = regk_sser_gio1;
401 frm_cfg.status_pin_dir = regk_sser_in;
402
403 /*
404 * Step 6. This is probably not necessary, as we don't
405 * generate the frame signal automatically. Nevertheless,
406 * modified for bulk transmission.
407 */
408 frm_cfg.out_on = regk_sser_tr;
409 frm_cfg.out_off = regk_sser_tr;
410
411 /* Step 7. Similarly, maybe not necessary. */
412 frm_cfg.type = regk_sser_level;
413 frm_cfg.level = regk_sser_neg_lo;
414
415 /* Step 8. These we have to set according to the bulk mode,
416 * which for tr_delay is the same as for iso; a value of 1
417 * means in sync with the frame signal. For rec_delay, we
418 * start it at the same time as the transmitter. See figure
419 * 23.7 in the hw documentation. */
420 frm_cfg.tr_delay = 1;
421 frm_cfg.rec_delay = 0;
422
423 /* Step 9. */
424 tr_cfg.sample_size = 7;
425 rec_cfg.sample_size = 7;
426
427 /* Step 10. */
428 frm_cfg.wordrate = 7;
429
430 /* Step 11 (but for bulk). */
431 tr_cfg.rate_ctrl = regk_sser_bulk;
432
433 /*
434 * Step 12. Similarly, maybe not necessary; still, modified
435 * for bulk.
436 */
437 tr_cfg.frm_src = regk_sser_intern;
438 rec_cfg.frm_src = regk_sser_tx_bulk;
439
440 /* Step 13. */
441 tr_cfg.mode = regk_sser_lospeed;
442 rec_cfg.mode = regk_sser_lospeed;
443
444 /* Step 14. */
445 tr_cfg.sh_dir = regk_sser_msbfirst;
446 rec_cfg.sh_dir = regk_sser_msbfirst;
447
448 /*
449 * Extra step for bulk-specific settings and other general
450 * settings not specified in the SPI config example.
451 * It's uncertain whether all of these are needed.
452 */
453 tr_cfg.bulk_wspace = 1;
454 tr_cfg.use_dma = 0;
455
456 tr_cfg.urun_stop = 1;
457 rec_cfg.orun_stop = 1;
458 rec_cfg.use_dma = 0;
459
460 rec_cfg.fifo_thr = regk_sser_inf;
461 frm_cfg.early_wend = regk_sser_yes;
462
463 cfg.clk_dir = regk_sser_out;
464 tr_cfg.data_pin_use = regk_sser_dout;
465 cfg.base_freq = regk_sser_f100;
466
467 /* Setup for the initial frequency given to us. */
468 hw->cfg = cfg;
469 crisv32_spi_sser_set_speed_Hz(hw, hw->max_speed_Hz);
470 cfg = hw->cfg;
471
472 /*
473 * Write it all, except cfg which is already written by
474 * crisv32_spi_sser_set_speed_Hz.
475 */
476 REG_WR_SSER(rw_frm_cfg, frm_cfg);
477 REG_WR_SSER(rw_tr_cfg, tr_cfg);
478 REG_WR_SSER(rw_rec_cfg, rec_cfg);
479 REG_WR_SSER(rw_extra, extra);
480
481 /*
482 * The transmit-register needs to be written before the
483 * transmitter is enabled, and to get a valid trdy signal
484 * waiting for us when we want to transmit a byte. Because
485 * the "frame event" is that the transmitter is written, this
486 * will cause a dummy 0xff-byte to be transmitted, but that's
487 * ok, because /CS is inactive.
488 */
489 tr_data.data = 0xffff;
490 REG_WR_SSER(rw_tr_data, tr_data);
491
492 /*
493 * We ack everything interrupt-wise; left-over indicators don't have
494 * to come from *this* code.
495 */
496 REG_WRINT_SSER(rw_ack_intr, -1);
497
498 /*
499 * Wait 3 cycles before enabling, after the transmit register
500 * has been written. (This'll be just a few microseconds for
501 * e.g. 400 KHz.)
502 */
503 ndelay(3 * 2 * hw->half_cycle_delay_ns);
504 cfg.en = 1;
505
506 REG_WR_SSER(rw_cfg, cfg);
507
508 /*
509 * Now wait for 8 + 3 cycles. The 0xff byte should now have
510 * been transmitted and dummy data received.
511 */
512 ndelay((8 + 3) * 2 * hw->half_cycle_delay_ns);
513
514 /*
515 * Sanity-check that we have data-available and the
516 * transmitter is ready to send new data.
517 */
518 intr = REG_RD_SSER(r_intr);
519 if (!intr.rdav || !intr.trdy)
520 panic("sser hw or SPI driver broken (3) 0x%x",
521 REG_TYPE_CONV(u32, reg_sser_r_intr, intr));
522
523 hw->frm_cfg = frm_cfg;
524 hw->tr_cfg = tr_cfg;
525 hw->rec_cfg = rec_cfg;
526 hw->extra = extra;
527 hw->cfg = cfg;
528 return 0;
529 }
530
531 /* Initialization, maybe fault recovery. */
532
533 static void crisv32_reset_dma_hw(u32 regi)
534 {
535 REG_WR_INT(dma, regi, rw_intr_mask, 0);
536
537 DMA_RESET(regi);
538 DMA_WAIT_UNTIL_RESET(regi);
539 DMA_ENABLE(regi);
540 REG_WR_INT(dma, regi, rw_ack_intr, -1);
541
542 DMA_WR_CMD(regi, regk_dma_set_w_size1);
543 }
544
545 /* Interrupt from SSER, for use with DMA when only the transmitter is used. */
546
547 static irqreturn_t sser_interrupt(int irqno, void *arg)
548 {
549 struct crisv32_spi_hw_info *hw = arg;
550 u32 regi_sser = hw->sser.regi;
551 reg_sser_r_intr intr = REG_RD_SSER(r_intr);
552
553 if (intr.tidle == 0 && intr.urun == 0) {
554 printk(KERN_ERR
555 "sser @0x%x: spurious sser intr, flags: 0x%x\n",
556 regi_sser, REG_TYPE_CONV(u32, reg_sser_r_intr, intr));
557 } else if (intr.urun == 0) {
558 hw->dma_actually_done = 1;
559 complete(&hw->dma_done);
560 } else {
561 /*
562 * Make any reception time out and notice the error,
563 * which it might not otherwise do data was *received*
564 * successfully.
565 */
566 u32 regi_dmain = hw->dmain.regi;
567
568 /*
569 * Recommended practice before acking urun is to turn
570 * off sser. That might not be enough to stop DMA-in
571 * from signalling success if the underrun was late in
572 * the transmission, so we disable the DMA-in
573 * interrupts too.
574 */
575 REG_WRINT_SSER(rw_cfg, 0);
576 REG_WRINT_DI(rw_intr_mask, 0);
577 REG_WRINT_DI(rw_ack_intr, -1);
578 }
579
580 REG_WRINT_SSER(rw_intr_mask, 0);
581
582 /*
583 * We must at least ack urun together with tidle, but keep it
584 * simple and ack them all.
585 */
586 REG_WRINT_SSER(rw_ack_intr, -1);
587
588 return IRQ_HANDLED;
589 }
590
591 /*
592 * Interrupt from receiver DMA connected to SSER, for use when the
593 * receiver is used, with or without the transmitter.
594 */
595 static irqreturn_t rec_dma_interrupt(int irqno, void *arg)
596 {
597 struct crisv32_spi_hw_info *hw = arg;
598 u32 regi_dmain = hw->dmain.regi;
599 u32 regi_sser = hw->sser.regi;
600 reg_dma_r_intr intr = REG_RD_DI(r_intr);
601
602 if (intr.data == 0) {
603 printk(KERN_ERR
604 "sser @0x%x: spurious rec dma intr, flags: 0x%x\n",
605 regi_dmain, REG_TYPE_CONV(u32, reg_dma_r_intr, intr));
606 } else {
607 hw->dma_actually_done = 1;
608 complete(&hw->dma_done);
609 }
610
611 REG_WRINT_DI(rw_intr_mask, 0);
612
613 /* Avoid false underrun indications; stop all sser interrupts. */
614 REG_WRINT_SSER(rw_intr_mask, 0);
615 REG_WRINT_SSER(rw_ack_intr, -1);
616
617 REG_WRINT_DI(rw_ack_intr, -1);
618 return IRQ_HANDLED;
619 }
620
621 /*
622 * Set up transmitter and receiver for DMA access. We use settings
623 * from the "Atmel fast flash" example.
624 */
625 static int crisv32_setup_spi_sser_for_dma_access(struct crisv32_spi_hw_info
626 *hw)
627 {
628 int ret;
629 u32 regi_sser = hw->sser.regi;
630
631 reg_sser_rw_cfg cfg = {0};
632 reg_sser_rw_frm_cfg frm_cfg = {0};
633 reg_sser_rw_tr_cfg tr_cfg = {0};
634 reg_sser_rw_rec_cfg rec_cfg = {0};
635 reg_sser_rw_intr_mask mask = {0};
636 reg_sser_rw_extra extra = {0};
637
638 cfg.en = 0;
639 tr_cfg.tr_en = 1;
640 rec_cfg.rec_en = 1;
641 REG_WR_SSER(rw_cfg, cfg);
642 REG_WR_SSER(rw_tr_cfg, tr_cfg);
643 REG_WR_SSER(rw_rec_cfg, rec_cfg);
644 REG_WR_SSER(rw_intr_mask, mask);
645
646 /*
647 * See 23.7.5.2 (Atmel fast flash) in the hardware documentation.
648 * Step 1.
649 */
650 cfg.gate_clk = regk_sser_no;
651
652 /* Step 2. */
653 cfg.out_clk_pol = regk_sser_pos;
654
655 /* Step 3. */
656 cfg.out_clk_src = regk_sser_intern_clk;
657
658 /* Step 4. */
659 tr_cfg.sample_size = 1;
660 rec_cfg.sample_size = 1;
661
662 /* Step 5. */
663 frm_cfg.wordrate = 7;
664
665 /* Step 6. */
666 tr_cfg.clk_src = regk_sser_intern;
667 rec_cfg.clk_src = regk_sser_intern;
668 frm_cfg.clk_src = regk_sser_intern;
669 tr_cfg.clk_pol = regk_sser_neg;
670 frm_cfg.clk_pol = regk_sser_neg;
671
672 /* Step 7. */
673 rec_cfg.clk_pol = regk_sser_pos;
674
675 /* Step 8. */
676 frm_cfg.tr_delay = 1;
677
678 /* Step 9. */
679 frm_cfg.rec_delay = 1;
680
681 /* Step 10. */
682 tr_cfg.sh_dir = regk_sser_msbfirst;
683 rec_cfg.sh_dir = regk_sser_msbfirst;
684
685 /* Step 11. */
686 tr_cfg.frm_src = regk_sser_intern;
687 rec_cfg.frm_src = regk_sser_intern;
688
689 /* Step 12. */
690 tr_cfg.rate_ctrl = regk_sser_iso;
691
692 /*
693 * Step 13. Note that 0 != tx_null, so we're good regarding
694 * the descriptor .md field.
695 */
696 tr_cfg.eop_stop = 1;
697
698 /* Step 14. */
699 frm_cfg.frame_pin_use = regk_sser_gio1;
700 frm_cfg.frame_pin_dir = regk_sser_out;
701
702 /* Step 15. */
703 extra.clkon_en = 1;
704 extra.clkoff_en = 1;
705
706 /* Step 16. We'll modify this value for each "burst". */
707 extra.clkoff_cycles = 7;
708
709 /* Step 17. */
710 cfg.prepare = 1;
711
712 /*
713 * Things left out from the documented startup procedure.
714 * It's uncertain whether all of these are needed.
715 */
716 frm_cfg.status_pin_dir = regk_sser_in;
717 tr_cfg.mode = regk_sser_hispeed;
718 rec_cfg.mode = regk_sser_hispeed;
719 frm_cfg.out_on = regk_sser_intern_tb;
720 frm_cfg.out_off = regk_sser_rec;
721 frm_cfg.type = regk_sser_level;
722 tr_cfg.use_dma = 1;
723 tr_cfg.urun_stop = 1;
724 rec_cfg.orun_stop = 1;
725 rec_cfg.use_dma = 1;
726 rec_cfg.fifo_thr = regk_sser_inf;
727 frm_cfg.early_wend = regk_sser_yes;
728 cfg.clk_dir = regk_sser_out;
729
730 tr_cfg.data_pin_use = regk_sser_dout;
731 cfg.base_freq = regk_sser_f100;
732
733 REG_WR_SSER(rw_frm_cfg, frm_cfg);
734 REG_WR_SSER(rw_tr_cfg, tr_cfg);
735 REG_WR_SSER(rw_rec_cfg, rec_cfg);
736 REG_WR_SSER(rw_extra, extra);
737 REG_WR_SSER(rw_cfg, cfg);
738 hw->frm_cfg = frm_cfg;
739 hw->tr_cfg = tr_cfg;
740 hw->rec_cfg = rec_cfg;
741 hw->extra = extra;
742 hw->cfg = cfg;
743
744 crisv32_spi_sser_set_speed_Hz(hw, hw->max_speed_Hz);
745
746 ret = request_irq(hw->sser.irq, sser_interrupt, 0, "sser", hw);
747 if (ret != 0)
748 goto noirq;
749
750 ret = request_irq(hw->dmain.irq, rec_dma_interrupt, 0, "sser rec", hw);
751 if (ret != 0)
752 goto free_outirq;
753
754 crisv32_reset_dma_hw(hw->dmain.regi);
755 crisv32_reset_dma_hw(hw->dmaout.regi);
756 return 0;
757
758 free_outirq:
759 free_irq(hw->sser.irq, hw);
760 noirq:
761 return ret;
762 }
763
764 /* SPI-master setup function for non-DMA. */
765
766 static int crisv32_spi_sser_regs_master_setup(struct spi_device *spi)
767 {
768 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
769 struct spi_bitbang *bitbang = spi_master_get_devdata(spi->master);
770 int ret = 0;
771
772 /* Just do a little initial constraining checks. */
773 if (spi->bits_per_word == 0)
774 spi->bits_per_word = 8;
775
776 if (spi->bits_per_word != 8)
777 return -EINVAL;
778
779 bitbang->chipselect = (spi->mode & SPI_CS_HIGH) != 0
780 ? crisv32_spi_sser_chip_select_active_high
781 : crisv32_spi_sser_chip_select_active_low;
782
783 if (hw->max_speed_Hz == 0) {
784 u32 max_speed_Hz;
785
786 /*
787 * At this time; at the first call to the SPI master
788 * setup function, spi->max_speed_hz reflects the
789 * board-init value. It will be changed later on by
790 * the protocol master, but at the master setup call
791 * is the only time we actually get to see the hw max
792 * and thus a reasonable time to init the hw field.
793 */
794
795 /* The module parameter overrides everything. */
796 if (crisv32_spi_speed_limit_Hz != 0)
797 max_speed_Hz = crisv32_spi_speed_limit_Hz;
798 /*
799 * I never could get hispeed mode to work for non-DMA.
800 * We adjust the max speed here (where we could
801 * presumably fix it), not in the board info file.
802 */
803 else if (spi->max_speed_hz > 16667000)
804 max_speed_Hz = 16667000;
805 else
806 max_speed_Hz = spi->max_speed_hz;
807
808 hw->max_speed_Hz = max_speed_Hz;
809 spi->max_speed_hz = max_speed_Hz;
810
811 /*
812 * We also do one-time initialization of the hardware at this
813 * point. We could defer to the return to the probe-function
814 * from spi_bitbang_start, but other hardware setup (like
815 * subsequent calls to this function before that) would have
816 * to be deferred until then too.
817 */
818 ret = crisv32_setup_spi_sser_for_reg_access(hw);
819 if (ret != 0)
820 return ret;
821
822 ret = spi_bitbang_setup(spi);
823 if (ret != 0)
824 return ret;
825
826 dev_info(&spi->dev,
827 "CRIS v32 SPI driver for sser%d\n",
828 spi->master->bus_num);
829 }
830
831 return 0;
832 }
833
834 /*
835 * SPI-master setup_transfer-function used for both DMA and non-DMA
836 * (single function for DMA, together with spi_bitbang_setup_transfer
837 * for non-DMA).
838 */
839
840 static int crisv32_spi_sser_common_setup_transfer(struct spi_device *spi,
841 struct spi_transfer *t)
842 {
843 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
844 u8 bits_per_word;
845 u32 hz;
846 int ret = 0;
847
848 if (t) {
849 bits_per_word = t->bits_per_word;
850 hz = t->speed_hz;
851 } else {
852 bits_per_word = 0;
853 hz = 0;
854 }
855
856 if (bits_per_word == 0)
857 bits_per_word = spi->bits_per_word;
858
859 if (bits_per_word != 8)
860 return -EINVAL;
861
862 if (hz == 0)
863 hz = spi->max_speed_hz;
864
865 if (hz != hw->effective_speed_kHz*1000 && hz != 0)
866 ret = crisv32_spi_sser_set_speed_Hz(hw, hz);
867
868 return ret;
869 }
870
871 /* Helper for a SPI-master setup_transfer function for non-DMA. */
872
873 static int crisv32_spi_sser_regs_setup_transfer(struct spi_device *spi,
874 struct spi_transfer *t)
875 {
876 int ret = crisv32_spi_sser_common_setup_transfer(spi, t);
877
878 if (ret != 0)
879 return ret;
880
881 /* Set up the loop-over-buffer parts. */
882 return spi_bitbang_setup_transfer (spi, t);
883 }
884
885 /* SPI-master setup function for DMA. */
886
887 static int crisv32_spi_sser_dma_master_setup(struct spi_device *spi)
888 {
889 /*
890 * As we don't dispatch to the spi_bitbang default function,
891 * we need to do whatever tests it does; keep it in sync. On
892 * the bright side, we can use the spi->controller_state slot;
893 * we use it for DMA:able memory for the descriptors and
894 * temporary buffers to copy non-DMA:able transfers.
895 */
896 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
897 struct spi_bitbang *bitbang = spi_master_get_devdata(spi->master);
898 struct crisv32_spi_dma_cs *cs;
899 u32 dmasize;
900 int ret = 0;
901
902 if (hw->max_speed_Hz == 0) {
903 struct crisv32_spi_dma_descrs *descrp;
904 u32 descrp_dma;
905 u32 max_speed_Hz;
906
907 /* The module parameter overrides everything. */
908 if (crisv32_spi_speed_limit_Hz != 0)
909 max_speed_Hz = crisv32_spi_speed_limit_Hz;
910 /*
911 * See comment at corresponding statement in
912 * crisv32_spi_sser_regs_master_setup.
913 */
914 else
915 max_speed_Hz = spi->max_speed_hz;
916
917 hw->max_speed_Hz = max_speed_Hz;
918 spi->max_speed_hz = max_speed_Hz;
919
920 ret = crisv32_setup_spi_sser_for_dma_access(hw);
921 if (ret != 0)
922 return ret;
923
924 /* Allocate some extra for necessary alignment. */
925 dmasize = sizeof *cs + 31
926 + sizeof(struct crisv32_spi_dma_descrs);
927
928 cs = kzalloc(dmasize, GFP_KERNEL | GFP_DMA);
929 if (cs == NULL)
930 return -ENOMEM;
931
932 /*
933 * Make descriptors aligned within the allocated area,
934 * some-place after cs.
935 */
936 descrp = (struct crisv32_spi_dma_descrs *)
937 (((u32) (cs + 1) + 31) & ~31);
938 descrp_dma = virt_to_phys(descrp);
939
940 /* Set up the "constant" parts of the descriptors. */
941 descrp->out_descr.eol = 1;
942 descrp->out_descr.intr = 1;
943 descrp->out_descr.out_eop = 1;
944 descrp->out_ctxt.saved_data = (dma_descr_data *)
945 (descrp_dma
946 + offsetof(struct crisv32_spi_dma_descrs, out_descr));
947 descrp->out_ctxt.next = 0;
948
949 descrp->in_descr.eol = 1;
950 descrp->in_descr.intr = 1;
951 descrp->in_ctxt.saved_data = (dma_descr_data *)
952 (descrp_dma
953 + offsetof(struct crisv32_spi_dma_descrs, in_descr));
954 descrp->in_ctxt.next = 0;
955
956 cs->descrp = descrp;
957 spi->controller_state = cs;
958
959 init_completion(&hw->dma_done);
960
961 dev_info(&spi->dev,
962 "CRIS v32 SPI driver for sser%d/DMA\n",
963 spi->master->bus_num);
964 }
965
966 /* Do our extra constraining checks. */
967 if (spi->bits_per_word == 0)
968 spi->bits_per_word = 8;
969
970 if (spi->bits_per_word != 8)
971 return -EINVAL;
972
973 /* SPI_LSB_FIRST deliberately left out, and we only support mode 3. */
974 if ((spi->mode & ~(SPI_TX_1|SPI_CS_HIGH)) != SPI_MODE_3)
975 return -EINVAL;
976
977 bitbang->chipselect = (spi->mode & SPI_CS_HIGH) != 0
978 ? crisv32_spi_sser_chip_select_active_high
979 : crisv32_spi_sser_chip_select_active_low;
980
981 ret = bitbang->setup_transfer(spi, NULL);
982 if (ret != 0)
983 return ret;
984
985 /* Remember to de-assert chip-select before the first transfer. */
986 spin_lock(&bitbang->lock);
987 if (!bitbang->busy) {
988 bitbang->chipselect(spi, BITBANG_CS_INACTIVE);
989 ndelay(hw->half_cycle_delay_ns);
990 }
991 spin_unlock(&bitbang->lock);
992
993 return 0;
994 }
995
996 /* SPI-master cleanup function for DMA. */
997
998 static void crisv32_spi_sser_dma_cleanup(struct spi_device *spi)
999 {
1000 kfree(spi->controller_state);
1001 spi->controller_state = NULL;
1002 }
1003
1004 /*
1005 * Set up DMA transmitter descriptors for a chunk of data.
1006 * The caller is responsible for working around TR 106.
1007 */
1008 static void crisv32_spi_sser_setup_dma_descr_out(u32 regi,
1009 struct crisv32_spi_dma_cs *cs,
1010 u32 out_phys, u32 chunk_len)
1011 {
1012 BUG_ON(chunk_len > DMA_CHUNKSIZ);
1013 struct crisv32_spi_dma_descrs *descrp = cs->descrp;
1014 u32 descrp_dma = virt_to_phys(descrp);
1015
1016 descrp->out_descr.buf = (u8 *) out_phys;
1017 descrp->out_descr.after = (u8 *) out_phys + chunk_len;
1018 descrp->out_ctxt.saved_data_buf = (u8 *) out_phys;
1019
1020 DMA_START_CONTEXT(regi,
1021 descrp_dma
1022 + offsetof(struct crisv32_spi_dma_descrs, out_ctxt));
1023 }
1024
1025 /*
1026 * Set up DMA receiver descriptors for a chunk of data.
1027 * Also, work around TR 106.
1028 */
1029 static void crisv32_spi_sser_setup_dma_descr_in(u32 regi_dmain,
1030 struct crisv32_spi_dma_cs *cs,
1031 u32 in_phys, u32 chunk_len)
1032 {
1033 BUG_ON(chunk_len > DMA_CHUNKSIZ);
1034 struct crisv32_spi_dma_descrs *descrp = cs->descrp;
1035 u32 descrp_dma = virt_to_phys(descrp);
1036
1037 descrp->in_descr.buf = (u8 *) in_phys;
1038 descrp->in_descr.after = (u8 *) in_phys + chunk_len;
1039 descrp->in_ctxt.saved_data_buf = (u8 *) in_phys;
1040
1041 flush_dma_descr(&descrp->in_descr, 1);
1042
1043 DMA_START_CONTEXT(regi_dmain,
1044 descrp_dma
1045 + offsetof(struct crisv32_spi_dma_descrs, in_ctxt));
1046 }
1047
1048 /*
1049 * SPI-bitbang txrx_bufs function for DMA.
1050 * FIXME: We have SG DMA descriptors; use them.
1051 * (Requires abandoning the spi_bitbang framework if done reasonably.)
1052 */
1053 static int crisv32_spi_sser_dma_txrx_bufs(struct spi_device *spi,
1054 struct spi_transfer *t)
1055 {
1056 struct crisv32_spi_dma_cs *cs = spi->controller_state;
1057 struct crisv32_spi_hw_info *hw = spidev_to_hw(spi);
1058 u32 len = t->len;
1059 reg_sser_rw_cfg cfg = hw->cfg;
1060 reg_sser_rw_tr_cfg tr_cfg = hw->tr_cfg;
1061 reg_sser_rw_rec_cfg rec_cfg = hw->rec_cfg;
1062 reg_sser_rw_extra extra = hw->extra;
1063 u32 regi_sser = hw->sser.regi;
1064 u32 dmain = 0;
1065 u32 dmaout = 0;
1066 u32 regi_dmain = hw->dmain.regi;
1067 u8 *rx_buf = t->rx_buf;
1068
1069 /*
1070 * Using IRQ+completion is measured to give an overhead of 14
1071 * us, so let's instead busy-wait for the time that would be
1072 * wasted anyway, and get back sooner. We're not counting in
1073 * other overhead such as the DMA descriptor in the
1074 * time-expression, which causes us to use busy-wait for
1075 * data-lengths that actually take a bit longer than
1076 * IRQ_USAGE_THRESHOLD_NS. Still, with IRQ_USAGE_THRESHOLD_NS
1077 * = 14000, the threshold is for 20 MHz => 35 bytes, 25 => 44
1078 * and 50 => 88 and the typical SPI transfer lengths for
1079 * SDcard are { 1, 2, 7, 512 } bytes so a more complicated
1080 * would likely give nothing but worse performance due to
1081 * complexity.
1082 */
1083 int use_irq = len * hw->half_cycle_delay_ns
1084 > IRQ_USAGE_THRESHOLD_NS / 8 / 2;
1085
1086 if (len > DMA_CHUNKSIZ) {
1087 /*
1088 * It should be quite easy to adjust the code if the need
1089 * arises for something much larger than the preallocated
1090 * buffers (which could themselves easily just be increased)
1091 * but still what fits in extra.clkoff_cycles: kmalloc a
1092 * temporary dmaable buffer in this function and free it at
1093 * the end. No need to optimize rare requests. Until then,
1094 * we'll keep the code as simple as performance allows.
1095 * Alternatively or if we need to send even larger data,
1096 * consider calling self with the required number of "faked"
1097 * shorter transfers here.
1098 */
1099 dev_err(&spi->dev,
1100 "Trying to transfer %d > max %d bytes:"
1101 " need to adjust the SPI driver\n",
1102 len, DMA_CHUNKSIZ);
1103 return -EMSGSIZE;
1104 }
1105
1106 /*
1107 * Need to separately tell the hispeed machinery the number of
1108 * bits in this transmission.
1109 */
1110 extra.clkoff_cycles = len * 8 - 1;
1111
1112 if (t->tx_buf != NULL) {
1113 if (t->tx_dma == 0) {
1114 memcpy(cs->tx_buf, t->tx_buf, len);
1115 dmaout = virt_to_phys(cs->tx_buf);
1116 } else
1117 dmaout = t->tx_dma;
1118
1119 crisv32_spi_sser_setup_dma_descr_out(hw->dmaout.regi,
1120 cs, dmaout,
1121 len);
1122
1123 /* No need to do anything for TR 106; this DMA only reads. */
1124 tr_cfg.tr_en = 1;
1125 tr_cfg.data_pin_use = regk_sser_dout;
1126 } else {
1127 tr_cfg.data_pin_use = (spi->mode & SPI_TX_1)
1128 ? regk_sser_gio1 : regk_sser_gio0;
1129 tr_cfg.tr_en = 0;
1130 }
1131
1132 if (rx_buf != 0) {
1133 if (t->rx_dma == 0)
1134 dmain = virt_to_phys(cs->rx_buf);
1135 else
1136 dmain = t->rx_dma;
1137
1138 crisv32_spi_sser_setup_dma_descr_in(regi_dmain, cs,
1139 dmain, len);
1140 rec_cfg.rec_en = 1;
1141
1142 REG_WRINT_SSER(rw_ack_intr, -1);
1143 REG_WRINT_DI(rw_ack_intr, -1);
1144
1145 /*
1146 * If we're receiving, use the rec data interrupt from DMA as
1147 * a signal that the HW is done.
1148 */
1149 if (use_irq) {
1150 reg_sser_rw_intr_mask mask = { .urun = 1 };
1151 reg_dma_rw_intr_mask dmask = { .data = 1 };
1152
1153 REG_WR_DI(rw_intr_mask, dmask);
1154
1155 /*
1156 * Catch transmitter underruns too. We don't
1157 * have to conditionalize that on the
1158 * transmitter being enabled; it's off when
1159 * the transmitter is off. Any overruns will
1160 * be indicated by a timeout, so we don't have
1161 * to check for that specifically.
1162 */
1163 REG_WR_SSER(rw_intr_mask, mask);
1164 }
1165 } else {
1166 rec_cfg.rec_en = 0;
1167
1168 /*
1169 * Ack previous overrun, underrun and tidle interrupts. Or
1170 * why not all. We'll get orun and urun "normally" due to the
1171 * way hispeed is (documented to) work and need to clear them,
1172 * and we'll have a tidle from a previous transmit if we used
1173 * to both receive and transmit, but now only transmit.
1174 */
1175 REG_WRINT_SSER(rw_ack_intr, -1);
1176
1177 if (use_irq) {
1178 reg_sser_rw_intr_mask mask = { .urun = 1, .tidle = 1 };
1179 REG_WR_SSER(rw_intr_mask, mask);
1180 }
1181 }
1182
1183 REG_WR_SSER(rw_rec_cfg, rec_cfg);
1184 REG_WR_SSER(rw_tr_cfg, tr_cfg);
1185 REG_WR_SSER(rw_extra, extra);
1186
1187 /*
1188 * Barriers are needed to make sure that the completion inits don't
1189 * migrate past the register writes due to gcc scheduling.
1190 */
1191 mb();
1192 hw->dma_actually_done = 0;
1193 INIT_COMPLETION(hw->dma_done);
1194 mb();
1195
1196 /*
1197 * Wait until DMA tx FIFO has more than one byte (it reads one
1198 * directly then one "very quickly") before starting sser tx.
1199 */
1200 if (tr_cfg.tr_en) {
1201 u32 regi_dmaout = hw->dmaout.regi;
1202 u32 minlen = len > 2 ? 2 : len;
1203 while ((REG_RD_DO(rw_stat)).buf < minlen)
1204 ;
1205 }
1206
1207 /* Wait until DMA-in is finished reading the descriptors. */
1208 if (rec_cfg.rec_en)
1209 while (DMA_BUSY(regi_dmain))
1210 ;
1211 /*
1212 * Wait 3 cycles before enabling (with .prepare = 1).
1213 * FIXME: Can we cut this by some time already passed?
1214 */
1215 ndelay(3 * 2 * hw->half_cycle_delay_ns);
1216 cfg.en = 1;
1217 REG_WR_SSER(rw_cfg, cfg);
1218
1219 /*
1220 * Wait 3 more cycles plus 30 ns before letting go.
1221 * FIXME: Can we do something else before but after the
1222 * previous cfg write and cut this by the time already passed?
1223 */
1224 cfg.prepare = 0;
1225 hw->cfg = cfg;
1226 ndelay(3 * 2 * hw->half_cycle_delay_ns + 30);
1227
1228 REG_WR_SSER(rw_cfg, cfg);
1229
1230 /*, We'll disable sser next the time we change the configuration. */
1231 cfg.en = 0;
1232 cfg.prepare = 1;
1233 hw->cfg = cfg;
1234
1235 if (!use_irq) {
1236 /*
1237 * We use a timeout corresponding to one iteration per ns,
1238 * which of course is at least five * insns / loop times as
1239 * much as reality, but we'll avoid a need for reading hw
1240 * timers directly.
1241 */
1242 u32 countdown = IRQ_USAGE_THRESHOLD_NS;
1243
1244 do
1245 if (rec_cfg.rec_en == 0) {
1246 /* Using the transmitter only. */
1247 reg_sser_r_intr intr = REG_RD_SSER(r_intr);
1248
1249 if (intr.tidle != 0) {
1250 /*
1251 * Almost done... Just check if we
1252 * had a transmitter underrun too.
1253 */
1254 if (!intr.urun)
1255 goto transmission_done;
1256
1257 /*
1258 * Fall over to the "time is up" case;
1259 * no need to provide a special path
1260 * for the error case.
1261 */
1262 countdown = 1;
1263 }
1264 } else {
1265 /* Using at least the receiver. */
1266 if ((REG_RD_DI(r_intr)).data != 0) {
1267 if ((REG_RD_SSER(r_intr)).urun == 0)
1268 goto transmission_done;
1269 countdown = 1;
1270 }
1271 }
1272 while (--countdown != 0);
1273
1274 /*
1275 * The time is up. Something might be wrong, or perhaps we've
1276 * started using data lengths where the threshold was about a
1277 * magnitude wrong. Fall over to IRQ. Remember not to ack
1278 * interrupts here (but always above, before starting), else
1279 * we'll have a race condition with the interrupt.
1280 */
1281 if (!rec_cfg.rec_en) {
1282 reg_sser_rw_intr_mask mask = { .urun = 1, .tidle = 1 };
1283 REG_WR_SSER(rw_intr_mask, mask);
1284 } else {
1285 reg_dma_rw_intr_mask dmask = { .data = 1 };
1286 reg_sser_rw_intr_mask mask = { .urun = 1 };
1287
1288 /*
1289 * Never mind checking for tr being disabled; urun
1290 * won't happen then.
1291 */
1292 REG_WR_SSER(rw_intr_mask, mask);
1293 REG_WR_DI(rw_intr_mask, dmask);
1294 }
1295 }
1296
1297 if (!wait_for_completion_timeout(&hw->dma_done, hw->dma_timeout)
1298 /*
1299 * Have to keep track manually too, else we'll get a timeout
1300 * indication for being scheduled out too long, while the
1301 * completion will still have trigged.
1302 */
1303 && !hw->dma_actually_done) {
1304 u32 regi_dmaout = hw->dmaout.regi;
1305
1306 /*
1307 * Transfer timed out. Should not happen for a
1308 * working controller, except perhaps if the system is
1309 * badly conditioned, causing DMA memory bandwidth
1310 * starvation. Not much to do afterwards, but perhaps
1311 * reset DMA and sser and hope it works the next time.
1312 */
1313 REG_WRINT_SSER(rw_cfg, 0);
1314 REG_WR_SSER(rw_cfg, cfg);
1315 REG_WRINT_SSER(rw_intr_mask, 0);
1316 REG_WRINT_DI(rw_intr_mask, 0);
1317 REG_WRINT_SSER(rw_ack_intr, -1);
1318 crisv32_reset_dma_hw(hw->dmain.regi);
1319 crisv32_reset_dma_hw(hw->dmaout.regi);
1320
1321 dev_err(&spi->dev, "timeout %u bytes %u kHz\n",
1322 len, hw->effective_speed_kHz);
1323 dev_err(&spi->dev, "sser=(%x,%x,%x,%x,%x)\n",
1324 REG_RDINT_SSER(rw_cfg), REG_RDINT_SSER(rw_tr_cfg),
1325 REG_RDINT_SSER(rw_rec_cfg), REG_RDINT_SSER(rw_extra),
1326 REG_RDINT_SSER(r_intr));
1327 dev_err(&spi->dev, "tx=(%x,%x,%x,%x)\n",
1328 dmaout, REG_RDINT_DO(rw_stat), REG_RDINT_DO(rw_data),
1329 REG_RDINT_DO(r_intr));
1330 dev_err(&spi->dev, "rx=(%x,%x,%x,%x)\n",
1331 dmain, REG_RDINT_DI(rw_stat), REG_RDINT_DI(rw_data),
1332 REG_RDINT_DI(r_intr));
1333 return -EIO;
1334 }
1335
1336 transmission_done:
1337 /* Wait for the last half-cycle of the last cycle. */
1338 crisv32_spi_sser_wait_halfabit(hw);
1339
1340 /* Reset for another call. */
1341 REG_WR_SSER(rw_cfg, cfg);
1342
1343 /*
1344 * If we had to use the temp DMAable rec buffer, copy it to the right
1345 * position.
1346 */
1347 if (t->rx_buf != 0 && t->rx_dma == 0)
1348 memcpy (t->rx_buf, cs->rx_buf, len);
1349
1350 /*
1351 * All clear. The interrupt function disabled the interrupt, we don't
1352 * have to do more.
1353 */
1354 return len;
1355 }
1356
1357 /* Platform-device probe function. */
1358
1359 static int __devinit crisv32_spi_sser_probe(struct platform_device *dev)
1360 {
1361 struct spi_master *master;
1362 struct crisv32_spi_sser_devdata *dd;
1363 struct crisv32_spi_hw_info *hw;
1364 struct resource *res;
1365 struct crisv32_spi_sser_controller_data *gc;
1366 int ret;
1367
1368 /*
1369 * We need to get the controller data as a hardware resource,
1370 * or else it wouldn't be available until *after* the
1371 * spi_bitbang_start call!
1372 */
1373 res = platform_get_resource_byname(dev, 0, "controller_data_ptr");
1374 if (res == NULL) {
1375 dev_err(&dev->dev,
1376 "can't get controller_data resource at probe\n");
1377 return -EIO;
1378 }
1379
1380 gc = (struct crisv32_spi_sser_controller_data *) res->start;
1381
1382 master = spi_alloc_master(&dev->dev, sizeof *dd);
1383 if (master == NULL) {
1384 dev_err(&dev->dev, "failed to allocate spi master\n");
1385 ret = -ENOMEM;
1386 goto err;
1387 }
1388
1389 dd = spi_master_get_devdata(master);
1390 platform_set_drvdata(dev, dd);
1391
1392 /*
1393 * The device data asks for this driver, and holds the id
1394 * number, which must be unique among the same-type devices.
1395 * We use this as the number of this SPI bus.
1396 */
1397 master->bus_num = dev->id;
1398
1399 /* Setup SPI bitbang adapter hooks. */
1400 dd->bitbang.master = spi_master_get(master);
1401 dd->bitbang.chipselect = crisv32_spi_sser_chip_select_active_low;
1402
1403 hw = &dd->hw;
1404 hw->gc = gc;
1405
1406 /* Pre-spi_bitbang_start setup. */
1407 if (gc->using_dma) {
1408 /* Setup DMA and interrupts. */
1409 ret = gc->iface_allocate(&hw->sser, &hw->dmain, &hw->dmaout);
1410 if (ret != 0)
1411 goto err_no_regs;
1412
1413 dd->bitbang.master->setup = crisv32_spi_sser_dma_master_setup;
1414 dd->bitbang.setup_transfer
1415 = crisv32_spi_sser_common_setup_transfer;
1416 dd->bitbang.txrx_bufs = crisv32_spi_sser_dma_txrx_bufs;
1417 dd->bitbang.master->cleanup = crisv32_spi_sser_dma_cleanup;
1418 } else {
1419 /* Just registers, then. */
1420 ret = gc->iface_allocate(&hw->sser, NULL, NULL);
1421 if (ret != 0)
1422 goto err_no_regs;
1423
1424 dd->bitbang.master->setup
1425 = crisv32_spi_sser_regs_master_setup;
1426 dd->bitbang.setup_transfer
1427 = crisv32_spi_sser_regs_setup_transfer;
1428 dd->bitbang.master->cleanup = spi_bitbang_cleanup;
1429
1430 /*
1431 * We can do all modes pretty simply, but I have no
1432 * simple enough way to test them, so I won't.
1433 */
1434 dd->bitbang.txrx_word[SPI_MODE_3]
1435 = crisv32_spi_sser_txrx_mode3;
1436 }
1437
1438 ret = spi_bitbang_start(&dd->bitbang);
1439 if (ret)
1440 goto err_no_bitbang;
1441
1442 /*
1443 * We don't have a dev_info here, as initialization that may fail is
1444 * postponed to the first master->setup call. It's called from
1445 * spi_bitbang_start (above), where the call-chain doesn't look too
1446 * close at error return values; we'll get here successfully anyway,
1447 * so emitting a separate message here is at most confusing.
1448 */
1449 dev_dbg(&dev->dev,
1450 "CRIS v32 SPI driver for sser%d%s present\n",
1451 master->bus_num,
1452 gc->using_dma ? "/DMA" : "");
1453
1454 return 0;
1455
1456 err_no_bitbang:
1457 gc->iface_free();
1458
1459 err_no_regs:
1460 platform_set_drvdata(dev, NULL);
1461 spi_master_put(dd->bitbang.master);
1462
1463 err:
1464 return ret;
1465 }
1466
1467 /* Platform-device remove-function. */
1468
1469 static int __devexit crisv32_spi_sser_remove(struct platform_device *dev)
1470 {
1471 struct crisv32_spi_sser_devdata *dd = platform_get_drvdata(dev);
1472 struct crisv32_spi_hw_info *hw = &dd->hw;
1473 struct crisv32_spi_sser_controller_data *gc = hw->gc;
1474 int ret;
1475
1476 /* We need to stop all bitbanging activity separately. */
1477 ret = spi_bitbang_stop(&dd->bitbang);
1478 if (ret != 0)
1479 return ret;
1480
1481 spi_master_put(dd->bitbang.master);
1482
1483 /*
1484 * If we get here, the queue is empty and there's no activity;
1485 * it's safe to flip the switch on the interfaces.
1486 */
1487 if (gc->using_dma) {
1488 u32 regi_dmain = hw->dmain.regi;
1489 u32 regi_dmaout = hw->dmaout.regi;
1490 u32 regi_sser = hw->sser.regi;
1491
1492 REG_WRINT_SSER(rw_intr_mask, 0);
1493 REG_WRINT_DI(rw_intr_mask, 0);
1494 REG_WRINT_DO(rw_intr_mask, 0);
1495 hw->cfg.en = 0;
1496 REG_WR_SSER(rw_cfg, hw->cfg);
1497 DMA_RESET(regi_dmain);
1498 DMA_RESET(regi_dmaout);
1499 free_irq(hw->sser.irq, hw);
1500 free_irq(hw->dmain.irq, hw);
1501 }
1502
1503 gc->iface_free();
1504
1505 platform_set_drvdata(dev, NULL);
1506 return 0;
1507 }
1508
1509 /*
1510 * For the time being, there's no suspend/resume support to care
1511 * about, so those handlers default to NULL.
1512 */
1513 static struct platform_driver crisv32_spi_sser_drv = {
1514 .probe = crisv32_spi_sser_probe,
1515 .remove = __devexit_p(crisv32_spi_sser_remove),
1516 .driver = {
1517 .name = "spi_crisv32_sser",
1518 .owner = THIS_MODULE,
1519 },
1520 };
1521
1522 /* Module init function. */
1523
1524 static int __devinit crisv32_spi_sser_init(void)
1525 {
1526 return platform_driver_register(&crisv32_spi_sser_drv);
1527 }
1528
1529 /* Module exit function. */
1530
1531 static void __devexit crisv32_spi_sser_exit(void)
1532 {
1533 platform_driver_unregister(&crisv32_spi_sser_drv);
1534 }
1535
1536 /* Setter function for speed limit. */
1537
1538 static int crisv32_spi_speed_limit_Hz_setter(const char *val,
1539 struct kernel_param *kp)
1540 {
1541 char *endp;
1542 ulong num = simple_strtoul(val, &endp, 0);
1543 if (endp == val
1544 || *endp != 0
1545 || num <= 0
1546 /*
1547 * We can't go above 100 MHz speed. Actually we can't go
1548 * above 50 MHz using the sser support but it might make
1549 * sense trying.
1550 */
1551 || num > 100000000)
1552 return -EINVAL;
1553 *(ulong *) kp->arg = num;
1554 return 0;
1555 }
1556
1557 module_param_call(crisv32_spi_max_speed_hz,
1558 crisv32_spi_speed_limit_Hz_setter, param_get_ulong,
1559 &crisv32_spi_speed_limit_Hz, 0644);
1560
1561 module_init(crisv32_spi_sser_init);
1562 module_exit(crisv32_spi_sser_exit);
1563
1564 MODULE_DESCRIPTION("CRIS v32 SPI-SSER Driver");
1565 MODULE_AUTHOR("Hans-Peter Nilsson, <hp@axis.com>");
1566 MODULE_LICENSE("GPL");
This page took 0.106924 seconds and 5 git commands to generate.