spi-fsl-espi.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772
  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. #include "spi-fsl-lib.h"
  26. /* eSPI Controller registers */
  27. #define ESPI_SPMODE 0x00 /* eSPI mode register */
  28. #define ESPI_SPIE 0x04 /* eSPI event register */
  29. #define ESPI_SPIM 0x08 /* eSPI mask register */
  30. #define ESPI_SPCOM 0x0c /* eSPI command register */
  31. #define ESPI_SPITF 0x10 /* eSPI transmit FIFO access register*/
  32. #define ESPI_SPIRF 0x14 /* eSPI receive FIFO access register*/
  33. #define ESPI_SPMODE0 0x20 /* eSPI cs0 mode register */
  34. #define ESPI_SPMODEx(x) (ESPI_SPMODE0 + (x) * 4)
  35. /* eSPI Controller mode register definitions */
  36. #define SPMODE_ENABLE BIT(31)
  37. #define SPMODE_LOOP BIT(30)
  38. #define SPMODE_TXTHR(x) ((x) << 8)
  39. #define SPMODE_RXTHR(x) ((x) << 0)
  40. /* eSPI Controller CS mode register definitions */
  41. #define CSMODE_CI_INACTIVEHIGH BIT(31)
  42. #define CSMODE_CP_BEGIN_EDGECLK BIT(30)
  43. #define CSMODE_REV BIT(29)
  44. #define CSMODE_DIV16 BIT(28)
  45. #define CSMODE_PM(x) ((x) << 24)
  46. #define CSMODE_POL_1 BIT(20)
  47. #define CSMODE_LEN(x) ((x) << 16)
  48. #define CSMODE_BEF(x) ((x) << 12)
  49. #define CSMODE_AFT(x) ((x) << 8)
  50. #define CSMODE_CG(x) ((x) << 3)
  51. #define FSL_ESPI_FIFO_SIZE 32
  52. #define FSL_ESPI_RXTHR 15
  53. /* Default mode/csmode for eSPI controller */
  54. #define SPMODE_INIT_VAL (SPMODE_TXTHR(4) | SPMODE_RXTHR(FSL_ESPI_RXTHR))
  55. #define CSMODE_INIT_VAL (CSMODE_POL_1 | CSMODE_BEF(0) \
  56. | CSMODE_AFT(0) | CSMODE_CG(1))
  57. /* SPIE register values */
  58. #define SPIE_RXCNT(reg) ((reg >> 24) & 0x3F)
  59. #define SPIE_TXCNT(reg) ((reg >> 16) & 0x3F)
  60. #define SPIE_TXE BIT(15) /* TX FIFO empty */
  61. #define SPIE_DON BIT(14) /* TX done */
  62. #define SPIE_RXT BIT(13) /* RX FIFO threshold */
  63. #define SPIE_RXF BIT(12) /* RX FIFO full */
  64. #define SPIE_TXT BIT(11) /* TX FIFO threshold*/
  65. #define SPIE_RNE BIT(9) /* RX FIFO not empty */
  66. #define SPIE_TNF BIT(8) /* TX FIFO not full */
  67. /* SPIM register values */
  68. #define SPIM_TXE BIT(15) /* TX FIFO empty */
  69. #define SPIM_DON BIT(14) /* TX done */
  70. #define SPIM_RXT BIT(13) /* RX FIFO threshold */
  71. #define SPIM_RXF BIT(12) /* RX FIFO full */
  72. #define SPIM_TXT BIT(11) /* TX FIFO threshold*/
  73. #define SPIM_RNE BIT(9) /* RX FIFO not empty */
  74. #define SPIM_TNF BIT(8) /* TX FIFO not full */
  75. /* SPCOM register values */
  76. #define SPCOM_CS(x) ((x) << 30)
  77. #define SPCOM_DO BIT(28) /* Dual output */
  78. #define SPCOM_TO BIT(27) /* TX only */
  79. #define SPCOM_RXSKIP(x) ((x) << 16)
  80. #define SPCOM_TRANLEN(x) ((x) << 0)
  81. #define SPCOM_TRANLEN_MAX 0x10000 /* Max transaction length */
  82. #define AUTOSUSPEND_TIMEOUT 2000
  83. static inline u32 fsl_espi_read_reg(struct mpc8xxx_spi *mspi, int offset)
  84. {
  85. return ioread32be(mspi->reg_base + offset);
  86. }
  87. static inline u8 fsl_espi_read_reg8(struct mpc8xxx_spi *mspi, int offset)
  88. {
  89. return ioread8(mspi->reg_base + offset);
  90. }
  91. static inline void fsl_espi_write_reg(struct mpc8xxx_spi *mspi, int offset,
  92. u32 val)
  93. {
  94. iowrite32be(val, mspi->reg_base + offset);
  95. }
  96. static inline void fsl_espi_write_reg8(struct mpc8xxx_spi *mspi, int offset,
  97. u8 val)
  98. {
  99. iowrite8(val, mspi->reg_base + offset);
  100. }
  101. static void fsl_espi_memcpy_swab(void *to, const void *from,
  102. struct spi_message *m,
  103. struct spi_transfer *t)
  104. {
  105. unsigned int len = t->len;
  106. if (!(m->spi->mode & SPI_LSB_FIRST) || t->bits_per_word <= 8) {
  107. memcpy(to, from, len);
  108. return;
  109. }
  110. /* In case of LSB-first and bits_per_word > 8 byte-swap all words */
  111. while (len)
  112. if (len >= 4) {
  113. *(u32 *)to = swahb32p(from);
  114. to += 4;
  115. from += 4;
  116. len -= 4;
  117. } else {
  118. *(u16 *)to = swab16p(from);
  119. to += 2;
  120. from += 2;
  121. len -= 2;
  122. }
  123. }
  124. static void fsl_espi_copy_to_buf(struct spi_message *m,
  125. struct mpc8xxx_spi *mspi)
  126. {
  127. struct spi_transfer *t;
  128. u8 *buf = mspi->local_buf;
  129. list_for_each_entry(t, &m->transfers, transfer_list) {
  130. if (t->tx_buf)
  131. fsl_espi_memcpy_swab(buf, t->tx_buf, m, t);
  132. else
  133. memset(buf, 0, t->len);
  134. buf += t->len;
  135. }
  136. }
  137. static void fsl_espi_copy_from_buf(struct spi_message *m,
  138. struct mpc8xxx_spi *mspi)
  139. {
  140. struct spi_transfer *t;
  141. u8 *buf = mspi->local_buf;
  142. list_for_each_entry(t, &m->transfers, transfer_list) {
  143. if (t->rx_buf)
  144. fsl_espi_memcpy_swab(t->rx_buf, buf, m, t);
  145. buf += t->len;
  146. }
  147. }
  148. static int fsl_espi_check_message(struct spi_message *m)
  149. {
  150. struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
  151. struct spi_transfer *t, *first;
  152. if (m->frame_length > SPCOM_TRANLEN_MAX) {
  153. dev_err(mspi->dev, "message too long, size is %u bytes\n",
  154. m->frame_length);
  155. return -EMSGSIZE;
  156. }
  157. first = list_first_entry(&m->transfers, struct spi_transfer,
  158. transfer_list);
  159. list_for_each_entry(t, &m->transfers, transfer_list) {
  160. if (first->bits_per_word != t->bits_per_word ||
  161. first->speed_hz != t->speed_hz) {
  162. dev_err(mspi->dev, "bits_per_word/speed_hz should be the same for all transfers\n");
  163. return -EINVAL;
  164. }
  165. }
  166. /* ESPI supports MSB-first transfers for word size 8 / 16 only */
  167. if (!(m->spi->mode & SPI_LSB_FIRST) && first->bits_per_word != 8 &&
  168. first->bits_per_word != 16) {
  169. dev_err(mspi->dev,
  170. "MSB-first transfer not supported for wordsize %u\n",
  171. first->bits_per_word);
  172. return -EINVAL;
  173. }
  174. return 0;
  175. }
  176. static void fsl_espi_fill_tx_fifo(struct mpc8xxx_spi *mspi, u32 events)
  177. {
  178. u32 tx_fifo_avail;
  179. /* if events is zero transfer has not started and tx fifo is empty */
  180. tx_fifo_avail = events ? SPIE_TXCNT(events) : FSL_ESPI_FIFO_SIZE;
  181. while (tx_fifo_avail >= min(4U, mspi->tx_len) && mspi->tx_len)
  182. if (mspi->tx_len >= 4) {
  183. fsl_espi_write_reg(mspi, ESPI_SPITF, *(u32 *)mspi->tx);
  184. mspi->tx += 4;
  185. mspi->tx_len -= 4;
  186. tx_fifo_avail -= 4;
  187. } else {
  188. fsl_espi_write_reg8(mspi, ESPI_SPITF, *(u8 *)mspi->tx);
  189. mspi->tx += 1;
  190. mspi->tx_len -= 1;
  191. tx_fifo_avail -= 1;
  192. }
  193. }
  194. static void fsl_espi_read_rx_fifo(struct mpc8xxx_spi *mspi, u32 events)
  195. {
  196. u32 rx_fifo_avail = SPIE_RXCNT(events);
  197. while (rx_fifo_avail >= min(4U, mspi->rx_len) && mspi->rx_len)
  198. if (mspi->rx_len >= 4) {
  199. *(u32 *)mspi->rx = fsl_espi_read_reg(mspi, ESPI_SPIRF);
  200. mspi->rx += 4;
  201. mspi->rx_len -= 4;
  202. rx_fifo_avail -= 4;
  203. } else {
  204. *(u8 *)mspi->rx = fsl_espi_read_reg8(mspi, ESPI_SPIRF);
  205. mspi->rx += 1;
  206. mspi->rx_len -= 1;
  207. rx_fifo_avail -= 1;
  208. }
  209. }
  210. static void fsl_espi_setup_transfer(struct spi_device *spi,
  211. struct spi_transfer *t)
  212. {
  213. struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
  214. int bits_per_word = t ? t->bits_per_word : spi->bits_per_word;
  215. u32 pm, hz = t ? t->speed_hz : spi->max_speed_hz;
  216. struct spi_mpc8xxx_cs *cs = spi->controller_state;
  217. u32 hw_mode_old = cs->hw_mode;
  218. /* mask out bits we are going to set */
  219. cs->hw_mode &= ~(CSMODE_LEN(0xF) | CSMODE_DIV16 | CSMODE_PM(0xF));
  220. cs->hw_mode |= CSMODE_LEN(bits_per_word - 1);
  221. pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 4) - 1;
  222. if (pm > 15) {
  223. cs->hw_mode |= CSMODE_DIV16;
  224. pm = DIV_ROUND_UP(mpc8xxx_spi->spibrg, hz * 16 * 4) - 1;
  225. WARN_ONCE(pm > 15,
  226. "%s: Requested speed is too low: %u Hz. Will use %u Hz instead.\n",
  227. dev_name(&spi->dev), hz,
  228. mpc8xxx_spi->spibrg / (4 * 16 * (15 + 1)));
  229. if (pm > 15)
  230. pm = 15;
  231. }
  232. cs->hw_mode |= CSMODE_PM(pm);
  233. /* don't write the mode register if the mode doesn't change */
  234. if (cs->hw_mode != hw_mode_old)
  235. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(spi->chip_select),
  236. cs->hw_mode);
  237. }
  238. static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)
  239. {
  240. struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
  241. u32 mask;
  242. int ret;
  243. mpc8xxx_spi->rx_len = t->len;
  244. mpc8xxx_spi->tx_len = t->len;
  245. mpc8xxx_spi->tx = t->tx_buf;
  246. mpc8xxx_spi->rx = t->rx_buf;
  247. reinit_completion(&mpc8xxx_spi->done);
  248. /* Set SPCOM[CS] and SPCOM[TRANLEN] field */
  249. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM,
  250. (SPCOM_CS(spi->chip_select) | SPCOM_TRANLEN(t->len - 1)));
  251. /* enable interrupts */
  252. mask = SPIM_DON;
  253. if (mpc8xxx_spi->rx_len > FSL_ESPI_FIFO_SIZE)
  254. mask |= SPIM_RXT;
  255. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, mask);
  256. /* Prevent filling the fifo from getting interrupted */
  257. spin_lock_irq(&mpc8xxx_spi->lock);
  258. fsl_espi_fill_tx_fifo(mpc8xxx_spi, 0);
  259. spin_unlock_irq(&mpc8xxx_spi->lock);
  260. /* Won't hang up forever, SPI bus sometimes got lost interrupts... */
  261. ret = wait_for_completion_timeout(&mpc8xxx_spi->done, 2 * HZ);
  262. if (ret == 0)
  263. dev_err(mpc8xxx_spi->dev,
  264. "Transaction hanging up (left %u tx bytes, %u rx bytes)\n",
  265. mpc8xxx_spi->tx_len, mpc8xxx_spi->rx_len);
  266. /* disable rx ints */
  267. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0);
  268. return ret == 0 ? -ETIMEDOUT : 0;
  269. }
  270. static int fsl_espi_trans(struct spi_message *m, struct spi_transfer *trans)
  271. {
  272. struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
  273. struct spi_device *spi = m->spi;
  274. int ret;
  275. fsl_espi_copy_to_buf(m, mspi);
  276. fsl_espi_setup_transfer(spi, trans);
  277. ret = fsl_espi_bufs(spi, trans);
  278. if (trans->delay_usecs)
  279. udelay(trans->delay_usecs);
  280. if (!ret)
  281. fsl_espi_copy_from_buf(m, mspi);
  282. return ret;
  283. }
  284. static int fsl_espi_do_one_msg(struct spi_master *master,
  285. struct spi_message *m)
  286. {
  287. struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
  288. unsigned int delay_usecs = 0;
  289. struct spi_transfer *t, trans = {};
  290. int ret;
  291. ret = fsl_espi_check_message(m);
  292. if (ret)
  293. goto out;
  294. list_for_each_entry(t, &m->transfers, transfer_list) {
  295. if (t->delay_usecs > delay_usecs)
  296. delay_usecs = t->delay_usecs;
  297. }
  298. t = list_first_entry(&m->transfers, struct spi_transfer,
  299. transfer_list);
  300. trans.len = m->frame_length;
  301. trans.speed_hz = t->speed_hz;
  302. trans.bits_per_word = t->bits_per_word;
  303. trans.delay_usecs = delay_usecs;
  304. trans.tx_buf = mspi->local_buf;
  305. trans.rx_buf = mspi->local_buf;
  306. if (trans.len)
  307. ret = fsl_espi_trans(m, &trans);
  308. m->actual_length = ret ? 0 : trans.len;
  309. out:
  310. if (m->status == -EINPROGRESS)
  311. m->status = ret;
  312. spi_finalize_current_message(master);
  313. return ret;
  314. }
  315. static int fsl_espi_setup(struct spi_device *spi)
  316. {
  317. struct mpc8xxx_spi *mpc8xxx_spi;
  318. u32 loop_mode;
  319. struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
  320. if (!spi->max_speed_hz)
  321. return -EINVAL;
  322. if (!cs) {
  323. cs = kzalloc(sizeof(*cs), GFP_KERNEL);
  324. if (!cs)
  325. return -ENOMEM;
  326. spi_set_ctldata(spi, cs);
  327. }
  328. mpc8xxx_spi = spi_master_get_devdata(spi->master);
  329. pm_runtime_get_sync(mpc8xxx_spi->dev);
  330. cs->hw_mode = fsl_espi_read_reg(mpc8xxx_spi,
  331. ESPI_SPMODEx(spi->chip_select));
  332. /* mask out bits we are going to set */
  333. cs->hw_mode &= ~(CSMODE_CP_BEGIN_EDGECLK | CSMODE_CI_INACTIVEHIGH
  334. | CSMODE_REV);
  335. if (spi->mode & SPI_CPHA)
  336. cs->hw_mode |= CSMODE_CP_BEGIN_EDGECLK;
  337. if (spi->mode & SPI_CPOL)
  338. cs->hw_mode |= CSMODE_CI_INACTIVEHIGH;
  339. if (!(spi->mode & SPI_LSB_FIRST))
  340. cs->hw_mode |= CSMODE_REV;
  341. /* Handle the loop mode */
  342. loop_mode = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE);
  343. loop_mode &= ~SPMODE_LOOP;
  344. if (spi->mode & SPI_LOOP)
  345. loop_mode |= SPMODE_LOOP;
  346. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, loop_mode);
  347. fsl_espi_setup_transfer(spi, NULL);
  348. pm_runtime_mark_last_busy(mpc8xxx_spi->dev);
  349. pm_runtime_put_autosuspend(mpc8xxx_spi->dev);
  350. return 0;
  351. }
  352. static void fsl_espi_cleanup(struct spi_device *spi)
  353. {
  354. struct spi_mpc8xxx_cs *cs = spi_get_ctldata(spi);
  355. kfree(cs);
  356. spi_set_ctldata(spi, NULL);
  357. }
  358. static void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events)
  359. {
  360. if (mspi->rx_len)
  361. fsl_espi_read_rx_fifo(mspi, events);
  362. if (mspi->tx_len)
  363. fsl_espi_fill_tx_fifo(mspi, events);
  364. if (mspi->tx_len || mspi->rx_len)
  365. return;
  366. /* we're done, but check for errors before returning */
  367. events = fsl_espi_read_reg(mspi, ESPI_SPIE);
  368. if (!(events & SPIE_DON))
  369. dev_err(mspi->dev,
  370. "Transfer done but SPIE_DON isn't set!\n");
  371. if (SPIE_RXCNT(events) || SPIE_TXCNT(events) != FSL_ESPI_FIFO_SIZE)
  372. dev_err(mspi->dev, "Transfer done but rx/tx fifo's aren't empty!\n");
  373. complete(&mspi->done);
  374. }
  375. static irqreturn_t fsl_espi_irq(s32 irq, void *context_data)
  376. {
  377. struct mpc8xxx_spi *mspi = context_data;
  378. u32 events;
  379. spin_lock(&mspi->lock);
  380. /* Get interrupt events(tx/rx) */
  381. events = fsl_espi_read_reg(mspi, ESPI_SPIE);
  382. if (!events) {
  383. spin_unlock(&mspi->lock);
  384. return IRQ_NONE;
  385. }
  386. dev_vdbg(mspi->dev, "%s: events %x\n", __func__, events);
  387. fsl_espi_cpu_irq(mspi, events);
  388. /* Clear the events */
  389. fsl_espi_write_reg(mspi, ESPI_SPIE, events);
  390. spin_unlock(&mspi->lock);
  391. return IRQ_HANDLED;
  392. }
  393. #ifdef CONFIG_PM
  394. static int fsl_espi_runtime_suspend(struct device *dev)
  395. {
  396. struct spi_master *master = dev_get_drvdata(dev);
  397. struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
  398. u32 regval;
  399. regval = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE);
  400. regval &= ~SPMODE_ENABLE;
  401. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
  402. return 0;
  403. }
  404. static int fsl_espi_runtime_resume(struct device *dev)
  405. {
  406. struct spi_master *master = dev_get_drvdata(dev);
  407. struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
  408. u32 regval;
  409. regval = fsl_espi_read_reg(mpc8xxx_spi, ESPI_SPMODE);
  410. regval |= SPMODE_ENABLE;
  411. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
  412. return 0;
  413. }
  414. #endif
  415. static size_t fsl_espi_max_message_size(struct spi_device *spi)
  416. {
  417. return SPCOM_TRANLEN_MAX;
  418. }
  419. static int fsl_espi_probe(struct device *dev, struct resource *mem,
  420. unsigned int irq)
  421. {
  422. struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
  423. struct spi_master *master;
  424. struct mpc8xxx_spi *mpc8xxx_spi;
  425. struct device_node *nc;
  426. u32 regval, csmode, cs, prop;
  427. int ret;
  428. master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi));
  429. if (!master)
  430. return -ENOMEM;
  431. dev_set_drvdata(dev, master);
  432. mpc8xxx_spi_probe(dev, mem, irq);
  433. master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16);
  434. master->setup = fsl_espi_setup;
  435. master->cleanup = fsl_espi_cleanup;
  436. master->transfer_one_message = fsl_espi_do_one_msg;
  437. master->auto_runtime_pm = true;
  438. master->max_message_size = fsl_espi_max_message_size;
  439. mpc8xxx_spi = spi_master_get_devdata(master);
  440. spin_lock_init(&mpc8xxx_spi->lock);
  441. mpc8xxx_spi->local_buf =
  442. devm_kmalloc(dev, SPCOM_TRANLEN_MAX, GFP_KERNEL);
  443. if (!mpc8xxx_spi->local_buf) {
  444. ret = -ENOMEM;
  445. goto err_probe;
  446. }
  447. mpc8xxx_spi->reg_base = devm_ioremap_resource(dev, mem);
  448. if (IS_ERR(mpc8xxx_spi->reg_base)) {
  449. ret = PTR_ERR(mpc8xxx_spi->reg_base);
  450. goto err_probe;
  451. }
  452. /* Register for SPI Interrupt */
  453. ret = devm_request_irq(dev, mpc8xxx_spi->irq, fsl_espi_irq,
  454. 0, "fsl_espi", mpc8xxx_spi);
  455. if (ret)
  456. goto err_probe;
  457. if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
  458. dev_err(dev, "SPI_QE_CPU_MODE is not supported on ESPI!\n");
  459. ret = -EINVAL;
  460. goto err_probe;
  461. }
  462. /* SPI controller initializations */
  463. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, 0);
  464. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0);
  465. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 0);
  466. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIE, 0xffffffff);
  467. /* Init eSPI CS mode register */
  468. for_each_available_child_of_node(master->dev.of_node, nc) {
  469. /* get chip select */
  470. ret = of_property_read_u32(nc, "reg", &cs);
  471. if (ret || cs >= pdata->max_chipselect)
  472. continue;
  473. csmode = CSMODE_INIT_VAL;
  474. /* check if CSBEF is set in device tree */
  475. ret = of_property_read_u32(nc, "fsl,csbef", &prop);
  476. if (!ret) {
  477. csmode &= ~(CSMODE_BEF(0xf));
  478. csmode |= CSMODE_BEF(prop);
  479. }
  480. /* check if CSAFT is set in device tree */
  481. ret = of_property_read_u32(nc, "fsl,csaft", &prop);
  482. if (!ret) {
  483. csmode &= ~(CSMODE_AFT(0xf));
  484. csmode |= CSMODE_AFT(prop);
  485. }
  486. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(cs), csmode);
  487. dev_info(dev, "cs=%u, init_csmode=0x%x\n", cs, csmode);
  488. }
  489. /* Enable SPI interface */
  490. regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
  491. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
  492. pm_runtime_set_autosuspend_delay(dev, AUTOSUSPEND_TIMEOUT);
  493. pm_runtime_use_autosuspend(dev);
  494. pm_runtime_set_active(dev);
  495. pm_runtime_enable(dev);
  496. pm_runtime_get_sync(dev);
  497. ret = devm_spi_register_master(dev, master);
  498. if (ret < 0)
  499. goto err_pm;
  500. dev_info(dev, "at 0x%p (irq = %d)\n", mpc8xxx_spi->reg_base,
  501. mpc8xxx_spi->irq);
  502. pm_runtime_mark_last_busy(dev);
  503. pm_runtime_put_autosuspend(dev);
  504. return 0;
  505. err_pm:
  506. pm_runtime_put_noidle(dev);
  507. pm_runtime_disable(dev);
  508. pm_runtime_set_suspended(dev);
  509. err_probe:
  510. spi_master_put(master);
  511. return ret;
  512. }
  513. static int of_fsl_espi_get_chipselects(struct device *dev)
  514. {
  515. struct device_node *np = dev->of_node;
  516. struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
  517. u32 num_cs;
  518. int ret;
  519. ret = of_property_read_u32(np, "fsl,espi-num-chipselects", &num_cs);
  520. if (ret) {
  521. dev_err(dev, "No 'fsl,espi-num-chipselects' property\n");
  522. return -EINVAL;
  523. }
  524. pdata->max_chipselect = num_cs;
  525. pdata->cs_control = NULL;
  526. return 0;
  527. }
  528. static int of_fsl_espi_probe(struct platform_device *ofdev)
  529. {
  530. struct device *dev = &ofdev->dev;
  531. struct device_node *np = ofdev->dev.of_node;
  532. struct resource mem;
  533. unsigned int irq;
  534. int ret;
  535. ret = of_mpc8xxx_spi_probe(ofdev);
  536. if (ret)
  537. return ret;
  538. ret = of_fsl_espi_get_chipselects(dev);
  539. if (ret)
  540. return ret;
  541. ret = of_address_to_resource(np, 0, &mem);
  542. if (ret)
  543. return ret;
  544. irq = irq_of_parse_and_map(np, 0);
  545. if (!irq)
  546. return -EINVAL;
  547. return fsl_espi_probe(dev, &mem, irq);
  548. }
  549. static int of_fsl_espi_remove(struct platform_device *dev)
  550. {
  551. pm_runtime_disable(&dev->dev);
  552. return 0;
  553. }
  554. #ifdef CONFIG_PM_SLEEP
  555. static int of_fsl_espi_suspend(struct device *dev)
  556. {
  557. struct spi_master *master = dev_get_drvdata(dev);
  558. int ret;
  559. ret = spi_master_suspend(master);
  560. if (ret) {
  561. dev_warn(dev, "cannot suspend master\n");
  562. return ret;
  563. }
  564. ret = pm_runtime_force_suspend(dev);
  565. if (ret < 0)
  566. return ret;
  567. return 0;
  568. }
  569. static int of_fsl_espi_resume(struct device *dev)
  570. {
  571. struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
  572. struct spi_master *master = dev_get_drvdata(dev);
  573. struct mpc8xxx_spi *mpc8xxx_spi;
  574. u32 regval;
  575. int i, ret;
  576. mpc8xxx_spi = spi_master_get_devdata(master);
  577. /* SPI controller initializations */
  578. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, 0);
  579. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, 0);
  580. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM, 0);
  581. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIE, 0xffffffff);
  582. /* Init eSPI CS mode register */
  583. for (i = 0; i < pdata->max_chipselect; i++)
  584. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODEx(i),
  585. CSMODE_INIT_VAL);
  586. /* Enable SPI interface */
  587. regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
  588. fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPMODE, regval);
  589. ret = pm_runtime_force_resume(dev);
  590. if (ret < 0)
  591. return ret;
  592. return spi_master_resume(master);
  593. }
  594. #endif /* CONFIG_PM_SLEEP */
  595. static const struct dev_pm_ops espi_pm = {
  596. SET_RUNTIME_PM_OPS(fsl_espi_runtime_suspend,
  597. fsl_espi_runtime_resume, NULL)
  598. SET_SYSTEM_SLEEP_PM_OPS(of_fsl_espi_suspend, of_fsl_espi_resume)
  599. };
  600. static const struct of_device_id of_fsl_espi_match[] = {
  601. { .compatible = "fsl,mpc8536-espi" },
  602. {}
  603. };
  604. MODULE_DEVICE_TABLE(of, of_fsl_espi_match);
  605. static struct platform_driver fsl_espi_driver = {
  606. .driver = {
  607. .name = "fsl_espi",
  608. .of_match_table = of_fsl_espi_match,
  609. .pm = &espi_pm,
  610. },
  611. .probe = of_fsl_espi_probe,
  612. .remove = of_fsl_espi_remove,
  613. };
  614. module_platform_driver(fsl_espi_driver);
  615. MODULE_AUTHOR("Mingkai Hu");
  616. MODULE_DESCRIPTION("Enhanced Freescale SPI Driver");
  617. MODULE_LICENSE("GPL");