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