This source file includes following definitions.
- kp_spi_read_reg
- kp_spi_write_reg
- kp_spi_wait_for_reg_bit
- kp_spi_txrx_pio
- kp_spi_setup
- kp_spi_transfer_one_message
- kp_spi_cleanup
- kp_spi_probe
- kp_spi_remove
1
2
3
4
5
6
7
8
9
10 #include <linux/kernel.h>
11 #include <linux/init.h>
12 #include <linux/interrupt.h>
13 #include <linux/io-64-nonatomic-lo-hi.h>
14 #include <linux/module.h>
15 #include <linux/device.h>
16 #include <linux/delay.h>
17 #include <linux/platform_device.h>
18 #include <linux/err.h>
19 #include <linux/clk.h>
20 #include <linux/io.h>
21 #include <linux/slab.h>
22 #include <linux/pm_runtime.h>
23 #include <linux/of.h>
24 #include <linux/of_device.h>
25 #include <linux/gcd.h>
26 #include <linux/spi/spi.h>
27 #include <linux/spi/flash.h>
28 #include <linux/mtd/partitions.h>
29
30 #include "kpc.h"
31
32 static struct mtd_partition p2kr0_spi0_parts[] = {
33 { .name = "SLOT_0", .size = 7798784, .offset = 0, },
34 { .name = "SLOT_1", .size = 7798784, .offset = MTDPART_OFS_NXTBLK},
35 { .name = "SLOT_2", .size = 7798784, .offset = MTDPART_OFS_NXTBLK},
36 { .name = "SLOT_3", .size = 7798784, .offset = MTDPART_OFS_NXTBLK},
37 { .name = "CS0_EXTRA", .size = MTDPART_SIZ_FULL, .offset = MTDPART_OFS_NXTBLK},
38 };
39
40 static struct mtd_partition p2kr0_spi1_parts[] = {
41 { .name = "SLOT_4", .size = 7798784, .offset = 0, },
42 { .name = "SLOT_5", .size = 7798784, .offset = MTDPART_OFS_NXTBLK},
43 { .name = "SLOT_6", .size = 7798784, .offset = MTDPART_OFS_NXTBLK},
44 { .name = "SLOT_7", .size = 7798784, .offset = MTDPART_OFS_NXTBLK},
45 { .name = "CS1_EXTRA", .size = MTDPART_SIZ_FULL, .offset = MTDPART_OFS_NXTBLK},
46 };
47
48 static struct flash_platform_data p2kr0_spi0_pdata = {
49 .name = "SPI0",
50 .nr_parts = ARRAY_SIZE(p2kr0_spi0_parts),
51 .parts = p2kr0_spi0_parts,
52 };
53 static struct flash_platform_data p2kr0_spi1_pdata = {
54 .name = "SPI1",
55 .nr_parts = ARRAY_SIZE(p2kr0_spi1_parts),
56 .parts = p2kr0_spi1_parts,
57 };
58
59 static struct spi_board_info p2kr0_board_info[] = {
60 {
61 .modalias = "n25q256a11",
62 .bus_num = 1,
63 .chip_select = 0,
64 .mode = SPI_MODE_0,
65 .platform_data = &p2kr0_spi0_pdata
66 },
67 {
68 .modalias = "n25q256a11",
69 .bus_num = 1,
70 .chip_select = 1,
71 .mode = SPI_MODE_0,
72 .platform_data = &p2kr0_spi1_pdata
73 },
74 };
75
76
77
78
79 #define KP_SPI_REG_CONFIG 0x0
80 #define KP_SPI_REG_STATUS 0x1
81 #define KP_SPI_REG_FFCTRL 0x2
82 #define KP_SPI_REG_TXDATA 0x3
83 #define KP_SPI_REG_RXDATA 0x4
84
85 #define KP_SPI_CLK 48000000
86 #define KP_SPI_MAX_FIFODEPTH 64
87 #define KP_SPI_MAX_FIFOWCNT 0xFFFF
88
89 #define KP_SPI_REG_CONFIG_TRM_TXRX 0
90 #define KP_SPI_REG_CONFIG_TRM_RX 1
91 #define KP_SPI_REG_CONFIG_TRM_TX 2
92
93 #define KP_SPI_REG_STATUS_RXS 0x01
94 #define KP_SPI_REG_STATUS_TXS 0x02
95 #define KP_SPI_REG_STATUS_EOT 0x04
96 #define KP_SPI_REG_STATUS_TXFFE 0x10
97 #define KP_SPI_REG_STATUS_TXFFF 0x20
98 #define KP_SPI_REG_STATUS_RXFFE 0x40
99 #define KP_SPI_REG_STATUS_RXFFF 0x80
100
101
102
103
104 struct kp_spi {
105 struct spi_master *master;
106 u64 __iomem *base;
107 struct device *dev;
108 };
109
110 struct kp_spi_controller_state {
111 void __iomem *base;
112 s64 conf_cache;
113 };
114
115 union kp_spi_config {
116
117 struct __packed spi_config_bitfield {
118 unsigned int pha : 1;
119 unsigned int pol : 1;
120 unsigned int epol : 1;
121 unsigned int dpe : 1;
122 unsigned int wl : 5;
123 unsigned int : 3;
124 unsigned int trm : 2;
125 unsigned int cs : 4;
126 unsigned int wcnt : 7;
127 unsigned int ffen : 1;
128 unsigned int spi_en : 1;
129 unsigned int : 5;
130 } bitfield;
131
132 u32 reg;
133 };
134
135 union kp_spi_status {
136 struct __packed spi_status_bitfield {
137 unsigned int rx : 1;
138 unsigned int tx : 1;
139 unsigned int eo : 1;
140 unsigned int : 1;
141 unsigned int txffe : 1;
142 unsigned int txfff : 1;
143 unsigned int rxffe : 1;
144 unsigned int rxfff : 1;
145 unsigned int : 24;
146 } bitfield;
147 u32 reg;
148 };
149
150 union kp_spi_ffctrl {
151 struct __packed spi_ffctrl_bitfield {
152 unsigned int ffstart : 1;
153 unsigned int : 31;
154 } bitfield;
155 u32 reg;
156 };
157
158
159
160
161 static inline u64
162 kp_spi_read_reg(struct kp_spi_controller_state *cs, int idx)
163 {
164 u64 __iomem *addr = cs->base;
165 u64 val;
166
167 addr += idx;
168 if ((idx == KP_SPI_REG_CONFIG) && (cs->conf_cache >= 0))
169 return cs->conf_cache;
170
171 val = readq(addr);
172 return val;
173 }
174
175 static inline void
176 kp_spi_write_reg(struct kp_spi_controller_state *cs, int idx, u64 val)
177 {
178 u64 __iomem *addr = cs->base;
179
180 addr += idx;
181 writeq(val, addr);
182 if (idx == KP_SPI_REG_CONFIG)
183 cs->conf_cache = val;
184 }
185
186 static int
187 kp_spi_wait_for_reg_bit(struct kp_spi_controller_state *cs, int idx,
188 unsigned long bit)
189 {
190 unsigned long timeout;
191
192 timeout = jiffies + msecs_to_jiffies(1000);
193 while (!(kp_spi_read_reg(cs, idx) & bit)) {
194 if (time_after(jiffies, timeout)) {
195 if (!(kp_spi_read_reg(cs, idx) & bit))
196 return -ETIMEDOUT;
197 else
198 return 0;
199 }
200 cpu_relax();
201 }
202 return 0;
203 }
204
205 static unsigned
206 kp_spi_txrx_pio(struct spi_device *spidev, struct spi_transfer *transfer)
207 {
208 struct kp_spi_controller_state *cs = spidev->controller_state;
209 unsigned int count = transfer->len;
210 unsigned int c = count;
211
212 int i;
213 int res;
214 u8 *rx = transfer->rx_buf;
215 const u8 *tx = transfer->tx_buf;
216 int processed = 0;
217
218 if (tx) {
219 for (i = 0 ; i < c ; i++) {
220 char val = *tx++;
221
222 res = kp_spi_wait_for_reg_bit(cs, KP_SPI_REG_STATUS,
223 KP_SPI_REG_STATUS_TXS);
224 if (res < 0)
225 goto out;
226
227 kp_spi_write_reg(cs, KP_SPI_REG_TXDATA, val);
228 processed++;
229 }
230 }
231 else if (rx) {
232 for (i = 0 ; i < c ; i++) {
233 char test = 0;
234
235 kp_spi_write_reg(cs, KP_SPI_REG_TXDATA, 0x00);
236 res = kp_spi_wait_for_reg_bit(cs, KP_SPI_REG_STATUS,
237 KP_SPI_REG_STATUS_RXS);
238 if (res < 0)
239 goto out;
240
241 test = kp_spi_read_reg(cs, KP_SPI_REG_RXDATA);
242 *rx++ = test;
243 processed++;
244 }
245 }
246
247 if (kp_spi_wait_for_reg_bit(cs, KP_SPI_REG_STATUS,
248 KP_SPI_REG_STATUS_EOT) < 0) {
249
250
251 }
252
253 out:
254 return processed;
255 }
256
257
258
259
260 static int
261 kp_spi_setup(struct spi_device *spidev)
262 {
263 union kp_spi_config sc;
264 struct kp_spi *kpspi = spi_master_get_devdata(spidev->master);
265 struct kp_spi_controller_state *cs;
266
267
268 cs = spidev->controller_state;
269 if (!cs) {
270 cs = kzalloc(sizeof(*cs), GFP_KERNEL);
271 if (!cs)
272 return -ENOMEM;
273 cs->base = kpspi->base;
274 cs->conf_cache = -1;
275 spidev->controller_state = cs;
276 }
277
278
279 sc.bitfield.wl = spidev->bits_per_word - 1;
280 sc.bitfield.cs = spidev->chip_select;
281 sc.bitfield.spi_en = 0;
282 sc.bitfield.trm = 0;
283 sc.bitfield.ffen = 0;
284 kp_spi_write_reg(spidev->controller_state, KP_SPI_REG_CONFIG, sc.reg);
285 return 0;
286 }
287
288 static int
289 kp_spi_transfer_one_message(struct spi_master *master, struct spi_message *m)
290 {
291 struct kp_spi_controller_state *cs;
292 struct spi_device *spidev;
293 struct kp_spi *kpspi;
294 struct spi_transfer *transfer;
295 union kp_spi_config sc;
296 int status = 0;
297
298 spidev = m->spi;
299 kpspi = spi_master_get_devdata(master);
300 m->actual_length = 0;
301 m->status = 0;
302
303 cs = spidev->controller_state;
304
305
306 if (list_empty(&m->transfers))
307 return -EINVAL;
308
309
310 list_for_each_entry(transfer, &m->transfers, transfer_list) {
311 const void *tx_buf = transfer->tx_buf;
312 void *rx_buf = transfer->rx_buf;
313 unsigned int len = transfer->len;
314
315 if (transfer->speed_hz > KP_SPI_CLK ||
316 (len && !(rx_buf || tx_buf))) {
317 dev_dbg(kpspi->dev, " transfer: %d Hz, %d %s%s, %d bpw\n",
318 transfer->speed_hz,
319 len,
320 tx_buf ? "tx" : "",
321 rx_buf ? "rx" : "",
322 transfer->bits_per_word);
323 dev_dbg(kpspi->dev, " transfer -EINVAL\n");
324 return -EINVAL;
325 }
326 if (transfer->speed_hz &&
327 transfer->speed_hz < (KP_SPI_CLK >> 15)) {
328 dev_dbg(kpspi->dev, "speed_hz %d below minimum %d Hz\n",
329 transfer->speed_hz,
330 KP_SPI_CLK >> 15);
331 dev_dbg(kpspi->dev, " speed_hz -EINVAL\n");
332 return -EINVAL;
333 }
334 }
335
336
337 sc.reg = kp_spi_read_reg(cs, KP_SPI_REG_CONFIG);
338 sc.bitfield.spi_en = 1;
339 kp_spi_write_reg(cs, KP_SPI_REG_CONFIG, sc.reg);
340
341
342 if (kp_spi_wait_for_reg_bit(cs, KP_SPI_REG_STATUS,
343 KP_SPI_REG_STATUS_EOT) < 0) {
344 dev_info(kpspi->dev, "EOT timed out\n");
345 goto out;
346 }
347
348
349 list_for_each_entry(transfer, &m->transfers, transfer_list) {
350 if (!transfer->tx_buf && !transfer->rx_buf &&
351 transfer->len) {
352 status = -EINVAL;
353 goto error;
354 }
355
356
357 if (transfer->len) {
358 unsigned int word_len = spidev->bits_per_word;
359 unsigned int count;
360
361
362 sc.reg = kp_spi_read_reg(cs, KP_SPI_REG_CONFIG);
363
364
365 if (transfer->tx_buf)
366 sc.bitfield.trm = KP_SPI_REG_CONFIG_TRM_TX;
367 else if (transfer->rx_buf)
368 sc.bitfield.trm = KP_SPI_REG_CONFIG_TRM_RX;
369
370
371 if (transfer->bits_per_word)
372 word_len = transfer->bits_per_word;
373 sc.bitfield.wl = word_len - 1;
374
375
376 sc.bitfield.cs = spidev->chip_select;
377
378
379 kp_spi_write_reg(cs, KP_SPI_REG_CONFIG, sc.reg);
380
381
382 count = kp_spi_txrx_pio(spidev, transfer);
383 m->actual_length += count;
384
385 if (count != transfer->len) {
386 status = -EIO;
387 goto error;
388 }
389 }
390
391 if (transfer->delay_usecs)
392 udelay(transfer->delay_usecs);
393 }
394
395
396 sc.reg = kp_spi_read_reg(cs, KP_SPI_REG_CONFIG);
397 sc.bitfield.spi_en = 0;
398 kp_spi_write_reg(cs, KP_SPI_REG_CONFIG, sc.reg);
399
400 out:
401
402 spi_finalize_current_message(master);
403 return 0;
404
405 error:
406 m->status = status;
407 return status;
408 }
409
410 static void
411 kp_spi_cleanup(struct spi_device *spidev)
412 {
413 struct kp_spi_controller_state *cs = spidev->controller_state;
414
415 kfree(cs);
416 }
417
418
419
420
421 static int
422 kp_spi_probe(struct platform_device *pldev)
423 {
424 struct kpc_core_device_platdata *drvdata;
425 struct spi_master *master;
426 struct kp_spi *kpspi;
427 struct resource *r;
428 int status = 0;
429 int i;
430
431 drvdata = pldev->dev.platform_data;
432 if (!drvdata) {
433 dev_err(&pldev->dev, "%s: platform_data is NULL\n", __func__);
434 return -ENODEV;
435 }
436
437 master = spi_alloc_master(&pldev->dev, sizeof(struct kp_spi));
438 if (!master) {
439 dev_err(&pldev->dev, "%s: master allocation failed\n",
440 __func__);
441 return -ENOMEM;
442 }
443
444
445 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
446 master->bits_per_word_mask = (unsigned int)SPI_BPW_RANGE_MASK(4, 32);
447 master->setup = kp_spi_setup;
448 master->transfer_one_message = kp_spi_transfer_one_message;
449 master->cleanup = kp_spi_cleanup;
450
451 platform_set_drvdata(pldev, master);
452
453 kpspi = spi_master_get_devdata(master);
454 kpspi->master = master;
455 kpspi->dev = &pldev->dev;
456
457 master->num_chipselect = 4;
458 if (pldev->id != -1)
459 master->bus_num = pldev->id;
460
461 r = platform_get_resource(pldev, IORESOURCE_MEM, 0);
462 if (!r) {
463 dev_err(&pldev->dev, "%s: Unable to get platform resources\n",
464 __func__);
465 status = -ENODEV;
466 goto free_master;
467 }
468
469 kpspi->base = devm_ioremap_nocache(&pldev->dev, r->start,
470 resource_size(r));
471
472 status = spi_register_master(master);
473 if (status < 0) {
474 dev_err(&pldev->dev, "Unable to register SPI device\n");
475 goto free_master;
476 }
477
478
479 #define NEW_SPI_DEVICE_FROM_BOARD_INFO_TABLE(table) \
480 for (i = 0 ; i < ARRAY_SIZE(table) ; i++) { \
481 spi_new_device(master, &(table[i])); \
482 }
483
484 switch ((drvdata->card_id & 0xFFFF0000) >> 16) {
485 case PCI_DEVICE_ID_DAKTRONICS_KADOKA_P2KR0:
486 NEW_SPI_DEVICE_FROM_BOARD_INFO_TABLE(p2kr0_board_info);
487 break;
488 default:
489 dev_err(&pldev->dev, "Unknown hardware, cant know what partition table to use!\n");
490 goto free_master;
491 }
492
493 return status;
494
495 free_master:
496 spi_master_put(master);
497 return status;
498 }
499
500 static int
501 kp_spi_remove(struct platform_device *pldev)
502 {
503 struct spi_master *master = platform_get_drvdata(pldev);
504
505 spi_unregister_master(master);
506 return 0;
507 }
508
509 static struct platform_driver kp_spi_driver = {
510 .driver = {
511 .name = KP_DRIVER_NAME_SPI,
512 },
513 .probe = kp_spi_probe,
514 .remove = kp_spi_remove,
515 };
516
517 module_platform_driver(kp_spi_driver);
518 MODULE_LICENSE("GPL");
519 MODULE_ALIAS("platform:kp_spi");