spi: fsl-espi: improve and extend register bit definitions
[cascardo/linux.git] / drivers / spi / spi-fsl-espi.c
1 /*
2  * Freescale eSPI controller driver.
3  *
4  * Copyright 2010 Freescale Semiconductor, Inc.
5  *
6  * This program is free software; you can redistribute  it and/or modify it
7  * under  the terms of  the GNU General  Public License as published by the
8  * Free Software Foundation;  either version 2 of the  License, or (at your
9  * option) any later version.
10  */
11 #include <linux/delay.h>
12 #include <linux/err.h>
13 #include <linux/fsl_devices.h>
14 #include <linux/interrupt.h>
15 #include <linux/module.h>
16 #include <linux/mm.h>
17 #include <linux/of.h>
18 #include <linux/of_address.h>
19 #include <linux/of_irq.h>
20 #include <linux/of_platform.h>
21 #include <linux/platform_device.h>
22 #include <linux/spi/spi.h>
23 #include <linux/pm_runtime.h>
24 #include <sysdev/fsl_soc.h>
25
26 #include "spi-fsl-lib.h"
27
28 /* eSPI Controller registers */
29 #define ESPI_SPMODE     0x00    /* eSPI mode register */
30 #define ESPI_SPIE       0x04    /* eSPI event register */
31 #define ESPI_SPIM       0x08    /* eSPI mask register */
32 #define ESPI_SPCOM      0x0c    /* eSPI command register */
33 #define ESPI_SPITF      0x10    /* eSPI transmit FIFO access register*/
34 #define ESPI_SPIRF      0x14    /* eSPI receive FIFO access register*/
35 #define ESPI_SPMODE0    0x20    /* eSPI cs0 mode register */
36
37 #define ESPI_SPMODEx(x) (ESPI_SPMODE0 + (x) * 4)
38
39 /* eSPI Controller mode register definitions */
40 #define SPMODE_ENABLE           BIT(31)
41 #define SPMODE_LOOP             BIT(30)
42 #define SPMODE_TXTHR(x)         ((x) << 8)
43 #define SPMODE_RXTHR(x)         ((x) << 0)
44
45 /* eSPI Controller CS mode register definitions */
46 #define CSMODE_CI_INACTIVEHIGH  BIT(31)
47 #define CSMODE_CP_BEGIN_EDGECLK BIT(30)
48 #define CSMODE_REV              BIT(29)
49 #define CSMODE_DIV16            BIT(28)
50 #define CSMODE_PM(x)            ((x) << 24)
51 #define CSMODE_POL_1            BIT(20)
52 #define CSMODE_LEN(x)           ((x) << 16)
53 #define CSMODE_BEF(x)           ((x) << 12)
54 #define CSMODE_AFT(x)           ((x) << 8)
55 #define CSMODE_CG(x)            ((x) << 3)
56
57 /* Default mode/csmode for eSPI controller */
58 #define SPMODE_INIT_VAL (SPMODE_TXTHR(4) | SPMODE_RXTHR(3))
59 #define CSMODE_INIT_VAL (CSMODE_POL_1 | CSMODE_BEF(0) \
60                 | CSMODE_AFT(0) | CSMODE_CG(1))
61
62 /* SPIE register values */
63 #define SPIE_RXCNT(reg)     ((reg >> 24) & 0x3F)
64 #define SPIE_TXCNT(reg)     ((reg >> 16) & 0x3F)
65 #define SPIE_TXE                BIT(15) /* TX FIFO empty */
66 #define SPIE_DON                BIT(14) /* TX done */
67 #define SPIE_RXT                BIT(13) /* RX FIFO threshold */
68 #define SPIE_RXF                BIT(12) /* RX FIFO full */
69 #define SPIE_TXT                BIT(11) /* TX FIFO threshold*/
70 #define SPIE_RNE                BIT(9)  /* RX FIFO not empty */
71 #define SPIE_TNF                BIT(8)  /* TX FIFO not full */
72
73 /* SPIM register values */
74 #define SPIM_TXE                BIT(15) /* TX FIFO empty */
75 #define SPIM_DON                BIT(14) /* TX done */
76 #define SPIM_RXT                BIT(13) /* RX FIFO threshold */
77 #define SPIM_RXF                BIT(12) /* RX FIFO full */
78 #define SPIM_TXT                BIT(11) /* TX FIFO threshold*/
79 #define SPIM_RNE                BIT(9)  /* RX FIFO not empty */
80 #define SPIM_TNF                BIT(8)  /* TX FIFO not full */
81
82 /* SPCOM register values */
83 #define SPCOM_CS(x)             ((x) << 30)
84 #define SPCOM_DO                BIT(28) /* Dual output */
85 #define SPCOM_TO                BIT(27) /* TX only */
86 #define SPCOM_RXSKIP(x)         ((x) << 16)
87 #define SPCOM_TRANLEN(x)        ((x) << 0)
88
89 #define SPCOM_TRANLEN_MAX       0x10000 /* Max transaction length */
90
91 #define AUTOSUSPEND_TIMEOUT 2000
92
93 static inline u32 fsl_espi_read_reg(struct mpc8xxx_spi *mspi, int offset)
94 {
95         return ioread32be(mspi->reg_base + offset);
96 }
97
98 static inline u8 fsl_espi_read_reg8(struct mpc8xxx_spi *mspi, int offset)
99 {
100         return ioread8(mspi->reg_base + offset);
101 }
102
103 static inline void fsl_espi_write_reg(struct mpc8xxx_spi *mspi, int offset,
104                                       u32 val)
105 {
106         iowrite32be(val, mspi->reg_base + offset);
107 }
108
109 static inline void fsl_espi_write_reg8(struct mpc8xxx_spi *mspi, int offset,
110                                        u8 val)
111 {
112         iowrite8(val, mspi->reg_base + offset);
113 }
114
115 static void fsl_espi_copy_to_buf(struct spi_message *m,
116                                  struct mpc8xxx_spi *mspi)
117 {
118         struct spi_transfer *t;
119         u8 *buf = mspi->local_buf;
120
121         list_for_each_entry(t, &m->transfers, transfer_list) {
122                 if (t->tx_buf)
123                         memcpy(buf, t->tx_buf, t->len);
124                 else
125                         memset(buf, 0, t->len);
126                 buf += t->len;
127         }
128 }
129
130 static void fsl_espi_copy_from_buf(struct spi_message *m,
131                                    struct mpc8xxx_spi *mspi)
132 {
133         struct spi_transfer *t;
134         u8 *buf = mspi->local_buf;
135
136         list_for_each_entry(t, &m->transfers, transfer_list) {
137                 if (t->rx_buf)
138                         memcpy(t->rx_buf, buf, t->len);
139                 buf += t->len;
140         }
141 }
142
143 static int fsl_espi_check_message(struct spi_message *m)
144 {
145         struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
146         struct spi_transfer *t, *first;
147
148         if (m->frame_length > SPCOM_TRANLEN_MAX) {
149                 dev_err(mspi->dev, "message too long, size is %u bytes\n",
150                         m->frame_length);
151                 return -EMSGSIZE;
152         }
153
154         first = list_first_entry(&m->transfers, struct spi_transfer,
155                                  transfer_list);
156         list_for_each_entry(t, &m->transfers, transfer_list) {
157                 if (first->bits_per_word != t->bits_per_word ||
158                     first->speed_hz != t->speed_hz) {
159                         dev_err(mspi->dev, "bits_per_word/speed_hz should be the same for all transfers\n");
160                         return -EINVAL;
161                 }
162         }
163
164         return 0;
165 }
166
167 static void fsl_espi_change_mode(struct spi_device *spi)
168 {
169         struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master);
170         struct spi_mpc8xxx_cs *cs = spi->controller_state;
171         u32 tmp;
172         unsigned long flags;
173
174         /* Turn off IRQs locally to minimize time that SPI is disabled. */
175         local_irq_save(flags);
176
177         /* Turn off SPI unit prior changing mode */
178         tmp = fsl_espi_read_reg(mspi, ESPI_SPMODE);
179         fsl_espi_write_reg(mspi, ESPI_SPMODE, tmp & ~SPMODE_ENABLE);
180         fsl_espi_write_reg(mspi, ESPI_SPMODEx(spi->chip_select),
181                               cs->hw_mode);
182         fsl_espi_write_reg(mspi, ESPI_SPMODE, tmp);
183
184         local_irq_restore(flags);
185 }
186
187 static u32 fsl_espi_tx_buf_lsb(struct mpc8xxx_spi *mpc8xxx_spi)
188 {
189         u32 data;
190         u16 data_h;
191         u16 data_l;
192         const u32 *tx = mpc8xxx_spi->tx;
193
194         if (!tx)
195                 return 0;
196
197         data = *tx++ << mpc8xxx_spi->tx_shift;
198         data_l = data & 0xffff;
199         data_h = (data >> 16) & 0xffff;
200         swab16s(&data_l);
201         swab16s(&data_h);
202         data = data_h | data_l;
203
204         mpc8xxx_spi->tx = tx;
205         return data;
206 }
207
208 static void fsl_espi_setup_transfer(struct spi_device *spi,
209                                         struct spi_transfer *t)
210 {
211         struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
212         int bits_per_word = t ? t->bits_per_word : spi->bits_per_word;
213         u32 hz = t ? t->speed_hz : spi->max_speed_hz;
214         u8 pm;
215         struct spi_mpc8xxx_cs *cs = spi->controller_state;
216
217         cs->rx_shift = 0;
218         cs->tx_shift = 0;
219         cs->get_rx = mpc8xxx_spi_rx_buf_u32;
220         cs->get_tx = mpc8xxx_spi_tx_buf_u32;
221         if (bits_per_word <= 8) {
222                 cs->rx_shift = 8 - bits_per_word;
223         } else {
224                 cs->rx_shift = 16 - bits_per_word;
225                 if (spi->mode & SPI_LSB_FIRST)
226                         cs->get_tx = fsl_espi_tx_buf_lsb;
227         }
228
229         mpc8xxx_spi->rx_shift = cs->rx_shift;
230         mpc8xxx_spi->tx_shift = cs->tx_shift;
231         mpc8xxx_spi->get_rx = cs->get_rx;
232         mpc8xxx_spi->get_tx = cs->get_tx;
233
234         /* mask out bits we are going to set */
235         cs->hw_mode &= ~(CSMODE_LEN(0xF) | CSMODE_DIV16 | CSMODE_PM(0xF));
236
237         cs->hw_mode |= CSMODE_LEN(bits_per_word - 1);
238
239         if ((mpc8xxx_spi->spibrg / hz) > 64) {
240                 cs->hw_mode |= CSMODE_DIV16;
241                 pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 16 * 4);
242
243                 WARN_ONCE(pm > 33, "%s: Requested speed is too low: %d Hz. "
244                           "Will use %d Hz instead.\n", dev_name(&spi->dev),
245                                 hz, mpc8xxx_spi->spibrg / (4 * 16 * (32 + 1)));
246                 if (pm > 33)
247                         pm = 33;
248         } else {
249                 pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 4);
250         }
251         if (pm)
252                 pm--;
253         if (pm < 2)
254                 pm = 2;
255
256         cs->hw_mode |= CSMODE_PM(pm);
257
258         fsl_espi_change_mode(spi);
259 }
260
261 static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)
262 {
263         struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
264         u32 word;
265         int ret;
266
267         mpc8xxx_spi->len = t->len;
268         mpc8xxx_spi->count = roundup(t->len, 4) / 4;
269
270         mpc8xxx_spi->tx = t->tx_buf;
271         mpc8xxx_spi->rx = t->rx_buf;
272
273         reinit_completion(&mpc8xxx_spi->done);
274
275         /* Set SPCOM[CS] and SPCOM[TRANLEN] field */
276         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM,
277                 (SPCOM_CS(spi->chip_select) | SPCOM_TRANLEN(t->len - 1)));
278
279         /* enable rx ints */
280         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, SPIM_RNE);
281
282         /* transmit word */
283         word = mpc8xxx_spi->get_tx(mpc8xxx_spi);
284         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPITF, word);
285
286         /* Won't hang up forever, SPI bus sometimes got lost interrupts... */
287         ret = wait_for_completion_timeout(&mpc8xxx_spi->done, 2 * HZ);
288         if (ret == 0)
289                 dev_err(mpc8xxx_spi->dev,
290                         "Transaction hanging up (left %d bytes)\n",
291                         mpc8xxx_spi->count);
292
293         /* disable rx ints */
294         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0);
295
296         return mpc8xxx_spi->count > 0 ? -EMSGSIZE : 0;
297 }
298
299 static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans)
300 {
301         struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
302         struct spi_device *spi = m->spi;
303         int ret;
304
305         fsl_espi_copy_to_buf(m, mspi);
306         fsl_espi_setup_transfer(spi, trans);
307
308         ret = fsl_espi_bufs(spi, trans);
309
310         if (trans->delay_usecs)
311                 udelay(trans->delay_usecs);
312
313         fsl_espi_setup_transfer(spi, NULL);
314
315         if (!ret)
316                 fsl_espi_copy_from_buf(m, mspi);
317
318         return ret;
319 }
320
321 static int fsl_espi_do_one_msg(struct spi_master *master,
322                                struct spi_message *m)
323 {
324         struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
325         unsigned int delay_usecs = 0;
326         struct spi_transfer *t, trans = {};
327         int ret;
328
329         ret = fsl_espi_check_message(m);
330         if (ret)
331                 goto out;
332
333         list_for_each_entry(t, &m->transfers, transfer_list) {
334                 if (t->delay_usecs > delay_usecs)
335                         delay_usecs = t->delay_usecs;
336         }
337
338         t = list_first_entry(&m->transfers, struct spi_transfer,
339                              transfer_list);
340
341         trans.len = m->frame_length;
342         trans.speed_hz = t->speed_hz;
343         trans.bits_per_word = t->bits_per_word;
344         trans.delay_usecs = delay_usecs;
345         trans.tx_buf = mspi->local_buf;
346         trans.rx_buf = mspi->local_buf;
347
348         if (trans.len)
349                 ret = fsl_espi_trans(m, &trans);
350
351         m->actual_length = ret ? 0 : trans.len;
352 out:
353         if (m->status == -EINPROGRESS)
354                 m->status = ret;
355
356         spi_finalize_current_message(master);
357
358         return ret;
359 }
360
361 static int fsl_espi_setup(struct spi_device *spi)
362 {
363         struct mpc8xxx_spi *mpc8xxx_spi;
364         u32 hw_mode;
365         u32 loop_mode;
366         struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
367
368         if (!spi->max_speed_hz)
369                 return -EINVAL;
370
371         if (!cs) {
372                 cs = kzalloc(sizeof(*cs), GFP_KERNEL);
373                 if (!cs)
374                         return -ENOMEM;
375                 spi_set_ctldata(spi, cs);
376         }
377
378         mpc8xxx_spi = spi_master_get_devdata(spi->master);
379
380         pm_runtime_get_sync(mpc8xxx_spi->dev);
381
382         hw_mode = cs->hw_mode; /* Save original settings */
383         cs->hw_mode = fsl_espi_read_reg(mpc8xxx_spi,
384                                            ESPI_SPMODEx(spi->chip_select));
385         /* mask out bits we are going to set */
386         cs->hw_mode &= ~(CSMODE_CP_BEGIN_EDGECLK | CSMODE_CI_INACTIVEHIGH
387                          | CSMODE_REV);
388
389         if (spi->mode & SPI_CPHA)
390                 cs->hw_mode |= CSMODE_CP_BEGIN_EDGECLK;
391         if (spi->mode & SPI_CPOL)
392                 cs->hw_mode |= CSMODE_CI_INACTIVEHIGH;
393         if (!(spi->mode & SPI_LSB_FIRST))
394                 cs->hw_mode |= CSMODE_REV;
395
396         /* Handle the loop mode */
397         loop_mode = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE);
398         loop_mode &= ~SPMODE_LOOP;
399         if (spi->mode & SPI_LOOP)
400                 loop_mode |= SPMODE_LOOP;
401         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, loop_mode);
402
403         fsl_espi_setup_transfer(spi, NULL);
404
405         pm_runtime_mark_last_busy(mpc8xxx_spi->dev);
406         pm_runtime_put_autosuspend(mpc8xxx_spi->dev);
407
408         return 0;
409 }
410
411 static void fsl_espi_cleanup(struct spi_device *spi)
412 {
413         struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
414
415         kfree(cs);
416         spi_set_ctldata(spi, NULL);
417 }
418
419 static void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events)
420 {
421         /* We need handle RX first */
422         if (events & SPIE_RNE) {
423                 u32 rx_data, tmp;
424                 u8 rx_data_8;
425                 int rx_nr_bytes = 4;
426                 int ret;
427
428                 /* Spin until RX is done */
429                 if (SPIE_RXCNT(events) < min(4, mspi->len)) {
430                         ret = spin_event_timeout(
431                                 !(SPIE_RXCNT(events =
432                                 fsl_espi_read_reg(mspi, ESPI_SPIE)) <
433                                                 min(4, mspi->len)),
434                                                 10000, 0); /* 10 msec */
435                         if (!ret)
436                                 dev_err(mspi->dev,
437                                          "tired waiting for SPIE_RXCNT\n");
438                 }
439
440                 if (mspi->len >= 4) {
441                         rx_data = fsl_espi_read_reg(mspi, ESPI_SPIRF);
442                 } else if (mspi->len <= 0) {
443                         dev_err(mspi->dev,
444                                 "unexpected RX(SPIE_RNE) interrupt occurred,\n"
445                                 "(local rxlen %d bytes, reg rxlen %d bytes)\n",
446                                 min(4, mspi->len), SPIE_RXCNT(events));
447                         rx_nr_bytes = 0;
448                 } else {
449                         rx_nr_bytes = mspi->len;
450                         tmp = mspi->len;
451                         rx_data = 0;
452                         while (tmp--) {
453                                 rx_data_8 = fsl_espi_read_reg8(mspi,
454                                                                ESPI_SPIRF);
455                                 rx_data |= (rx_data_8 << (tmp * 8));
456                         }
457
458                         rx_data <<= (4 - mspi->len) * 8;
459                 }
460
461                 mspi->len -= rx_nr_bytes;
462
463                 if (mspi->rx)
464                         mspi->get_rx(rx_data, mspi);
465         }
466
467         if (!(events & SPIE_TNF)) {
468                 int ret;
469
470                 /* spin until TX is done */
471                 ret = spin_event_timeout(((events = fsl_espi_read_reg(
472                                 mspi, ESPI_SPIE)) & SPIE_TNF), 1000, 0);
473                 if (!ret) {
474                         dev_err(mspi->dev, "tired waiting for SPIE_TNF\n");
475                         complete(&mspi->done);
476                         return;
477                 }
478         }
479
480         mspi->count -= 1;
481         if (mspi->count) {
482                 u32 word = mspi->get_tx(mspi);
483
484                 fsl_espi_write_reg(mspi, ESPI_SPITF, word);
485         } else {
486                 complete(&mspi->done);
487         }
488 }
489
490 static irqreturn_t fsl_espi_irq(s32 irq, void *context_data)
491 {
492         struct mpc8xxx_spi *mspi = context_data;
493         u32 events;
494
495         /* Get interrupt events(tx/rx) */
496         events = fsl_espi_read_reg(mspi, ESPI_SPIE);
497         if (!events)
498                 return IRQ_NONE;
499
500         dev_vdbg(mspi->dev, "%s: events %x\n", __func__, events);
501
502         fsl_espi_cpu_irq(mspi, events);
503
504         /* Clear the events */
505         fsl_espi_write_reg(mspi, ESPI_SPIE, events);
506
507         return IRQ_HANDLED;
508 }
509
510 #ifdef CONFIG_PM
511 static int fsl_espi_runtime_suspend(struct device *dev)
512 {
513         struct spi_master *master = dev_get_drvdata(dev);
514         struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
515         u32 regval;
516
517         regval = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE);
518         regval &= ~SPMODE_ENABLE;
519         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
520
521         return 0;
522 }
523
524 static int fsl_espi_runtime_resume(struct device *dev)
525 {
526         struct spi_master *master = dev_get_drvdata(dev);
527         struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
528         u32 regval;
529
530         regval = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE);
531         regval |= SPMODE_ENABLE;
532         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
533
534         return 0;
535 }
536 #endif
537
538 static size_t fsl_espi_max_message_size(struct spi_device *spi)
539 {
540         return SPCOM_TRANLEN_MAX;
541 }
542
543 static struct spi_master * fsl_espi_probe(struct device *dev,
544                 struct resource *mem, unsigned int irq)
545 {
546         struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
547         struct spi_master *master;
548         struct mpc8xxx_spi *mpc8xxx_spi;
549         struct device_node *nc;
550         const __be32 *prop;
551         u32 regval, csmode;
552         int i, len, ret = 0;
553
554         master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi));
555         if (!master) {
556                 ret = -ENOMEM;
557                 goto err;
558         }
559
560         dev_set_drvdata(dev, master);
561
562         mpc8xxx_spi_probe(dev, mem, irq);
563
564         master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16);
565         master->setup = fsl_espi_setup;
566         master->cleanup = fsl_espi_cleanup;
567         master->transfer_one_message = fsl_espi_do_one_msg;
568         master->auto_runtime_pm = true;
569         master->max_message_size = fsl_espi_max_message_size;
570
571         mpc8xxx_spi = spi_master_get_devdata(master);
572
573         mpc8xxx_spi->local_buf =
574                 devm_kmalloc(dev, SPCOM_TRANLEN_MAX, GFP_KERNEL);
575         if (!mpc8xxx_spi->local_buf) {
576                 ret = -ENOMEM;
577                 goto err_probe;
578         }
579
580         mpc8xxx_spi->reg_base = devm_ioremap_resource(dev, mem);
581         if (IS_ERR(mpc8xxx_spi->reg_base)) {
582                 ret = PTR_ERR(mpc8xxx_spi->reg_base);
583                 goto err_probe;
584         }
585
586         /* Register for SPI Interrupt */
587         ret = devm_request_irq(dev, mpc8xxx_spi->irq, fsl_espi_irq,
588                           0, "fsl_espi", mpc8xxx_spi);
589         if (ret)
590                 goto err_probe;
591
592         if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
593                 mpc8xxx_spi->rx_shift = 16;
594                 mpc8xxx_spi->tx_shift = 24;
595         }
596
597         /* SPI controller initializations */
598         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, 0);
599         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0);
600         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 0);
601         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIE, 0xffffffff);
602
603         /* Init eSPI CS mode register */
604         for_each_available_child_of_node(master->dev.of_node, nc) {
605                 /* get chip select */
606                 prop = of_get_property(nc, "reg", &len);
607                 if (!prop || len < sizeof(*prop))
608                         continue;
609                 i = be32_to_cpup(prop);
610                 if (i < 0 || i >= pdata->max_chipselect)
611                         continue;
612
613                 csmode = CSMODE_INIT_VAL;
614                 /* check if CSBEF is set in device tree */
615                 prop = of_get_property(nc, "fsl,csbef", &len);
616                 if (prop && len >= sizeof(*prop)) {
617                         csmode &= ~(CSMODE_BEF(0xf));
618                         csmode |= CSMODE_BEF(be32_to_cpup(prop));
619                 }
620                 /* check if CSAFT is set in device tree */
621                 prop = of_get_property(nc, "fsl,csaft", &len);
622                 if (prop && len >= sizeof(*prop)) {
623                         csmode &= ~(CSMODE_AFT(0xf));
624                         csmode |= CSMODE_AFT(be32_to_cpup(prop));
625                 }
626                 fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(i), csmode);
627
628                 dev_info(dev, "cs=%d, init_csmode=0x%x\n", i, csmode);
629         }
630
631         /* Enable SPI interface */
632         regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
633
634         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
635
636         pm_runtime_set_autosuspend_delay(dev, AUTOSUSPEND_TIMEOUT);
637         pm_runtime_use_autosuspend(dev);
638         pm_runtime_set_active(dev);
639         pm_runtime_enable(dev);
640         pm_runtime_get_sync(dev);
641
642         ret = devm_spi_register_master(dev, master);
643         if (ret < 0)
644                 goto err_pm;
645
646         dev_info(dev, "at 0x%p (irq = %d)\n", mpc8xxx_spi->reg_base,
647                  mpc8xxx_spi->irq);
648
649         pm_runtime_mark_last_busy(dev);
650         pm_runtime_put_autosuspend(dev);
651
652         return master;
653
654 err_pm:
655         pm_runtime_put_noidle(dev);
656         pm_runtime_disable(dev);
657         pm_runtime_set_suspended(dev);
658 err_probe:
659         spi_master_put(master);
660 err:
661         return ERR_PTR(ret);
662 }
663
664 static int of_fsl_espi_get_chipselects(struct device *dev)
665 {
666         struct device_node *np = dev->of_node;
667         struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
668         const u32 *prop;
669         int len;
670
671         prop = of_get_property(np, "fsl,espi-num-chipselects", &len);
672         if (!prop || len < sizeof(*prop)) {
673                 dev_err(dev, "No 'fsl,espi-num-chipselects' property\n");
674                 return -EINVAL;
675         }
676
677         pdata->max_chipselect = *prop;
678         pdata->cs_control = NULL;
679
680         return 0;
681 }
682
683 static int of_fsl_espi_probe(struct platform_device *ofdev)
684 {
685         struct device *dev = &ofdev->dev;
686         struct device_node *np = ofdev->dev.of_node;
687         struct spi_master *master;
688         struct resource mem;
689         unsigned int irq;
690         int ret = -ENOMEM;
691
692         ret = of_mpc8xxx_spi_probe(ofdev);
693         if (ret)
694                 return ret;
695
696         ret = of_fsl_espi_get_chipselects(dev);
697         if (ret)
698                 goto err;
699
700         ret = of_address_to_resource(np, 0, &mem);
701         if (ret)
702                 goto err;
703
704         irq = irq_of_parse_and_map(np, 0);
705         if (!irq) {
706                 ret = -EINVAL;
707                 goto err;
708         }
709
710         master = fsl_espi_probe(dev, &mem, irq);
711         if (IS_ERR(master)) {
712                 ret = PTR_ERR(master);
713                 goto err;
714         }
715
716         return 0;
717
718 err:
719         return ret;
720 }
721
722 static int of_fsl_espi_remove(struct platform_device *dev)
723 {
724         pm_runtime_disable(&dev->dev);
725
726         return 0;
727 }
728
729 #ifdef CONFIG_PM_SLEEP
730 static int of_fsl_espi_suspend(struct device *dev)
731 {
732         struct spi_master *master = dev_get_drvdata(dev);
733         int ret;
734
735         ret = spi_master_suspend(master);
736         if (ret) {
737                 dev_warn(dev, "cannot suspend master\n");
738                 return ret;
739         }
740
741         ret = pm_runtime_force_suspend(dev);
742         if (ret < 0)
743                 return ret;
744
745         return 0;
746 }
747
748 static int of_fsl_espi_resume(struct device *dev)
749 {
750         struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
751         struct spi_master *master = dev_get_drvdata(dev);
752         struct mpc8xxx_spi *mpc8xxx_spi;
753         u32 regval;
754         int i, ret;
755
756         mpc8xxx_spi = spi_master_get_devdata(master);
757
758         /* SPI controller initializations */
759         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, 0);
760         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0);
761         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 0);
762         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIE, 0xffffffff);
763
764         /* Init eSPI CS mode register */
765         for (i = 0; i < pdata->max_chipselect; i++)
766                 fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(i),
767                                       CSMODE_INIT_VAL);
768
769         /* Enable SPI interface */
770         regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
771
772         fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
773
774         ret = pm_runtime_force_resume(dev);
775         if (ret < 0)
776                 return ret;
777
778         return spi_master_resume(master);
779 }
780 #endif /* CONFIG_PM_SLEEP */
781
782 static const struct dev_pm_ops espi_pm = {
783         SET_RUNTIME_PM_OPS(fsl_espi_runtime_suspend,
784                            fsl_espi_runtime_resume, NULL)
785         SET_SYSTEM_SLEEP_PM_OPS(of_fsl_espi_suspend, of_fsl_espi_resume)
786 };
787
788 static const struct of_device_id of_fsl_espi_match[] = {
789         { .compatible = "fsl,mpc8536-espi" },
790         {}
791 };
792 MODULE_DEVICE_TABLE(of, of_fsl_espi_match);
793
794 static struct platform_driver fsl_espi_driver = {
795         .driver = {
796                 .name = "fsl_espi",
797                 .of_match_table = of_fsl_espi_match,
798                 .pm = &espi_pm,
799         },
800         .probe          = of_fsl_espi_probe,
801         .remove         = of_fsl_espi_remove,
802 };
803 module_platform_driver(fsl_espi_driver);
804
805 MODULE_AUTHOR("Mingkai Hu");
806 MODULE_DESCRIPTION("Enhanced Freescale SPI Driver");
807 MODULE_LICENSE("GPL");