spi-rspi.c 27 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030
  1. /*
  2. * SH RSPI driver
  3. *
  4. * Copyright (C) 2012 Renesas Solutions Corp.
  5. *
  6. * Based on spi-sh.c:
  7. * Copyright (C) 2011 Renesas Solutions Corp.
  8. *
  9. * This program is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation; version 2 of the License.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  21. *
  22. */
  23. #include <linux/module.h>
  24. #include <linux/kernel.h>
  25. #include <linux/sched.h>
  26. #include <linux/errno.h>
  27. #include <linux/interrupt.h>
  28. #include <linux/platform_device.h>
  29. #include <linux/io.h>
  30. #include <linux/clk.h>
  31. #include <linux/dmaengine.h>
  32. #include <linux/dma-mapping.h>
  33. #include <linux/sh_dma.h>
  34. #include <linux/spi/spi.h>
  35. #include <linux/spi/rspi.h>
  36. #define RSPI_SPCR 0x00 /* Control Register */
  37. #define RSPI_SSLP 0x01 /* Slave Select Polarity Register */
  38. #define RSPI_SPPCR 0x02 /* Pin Control Register */
  39. #define RSPI_SPSR 0x03 /* Status Register */
  40. #define RSPI_SPDR 0x04 /* Data Register */
  41. #define RSPI_SPSCR 0x08 /* Sequence Control Register */
  42. #define RSPI_SPSSR 0x09 /* Sequence Status Register */
  43. #define RSPI_SPBR 0x0a /* Bit Rate Register */
  44. #define RSPI_SPDCR 0x0b /* Data Control Register */
  45. #define RSPI_SPCKD 0x0c /* Clock Delay Register */
  46. #define RSPI_SSLND 0x0d /* Slave Select Negation Delay Register */
  47. #define RSPI_SPND 0x0e /* Next-Access Delay Register */
  48. #define RSPI_SPCR2 0x0f /* Control Register 2 */
  49. #define RSPI_SPCMD0 0x10 /* Command Register 0 */
  50. #define RSPI_SPCMD1 0x12 /* Command Register 1 */
  51. #define RSPI_SPCMD2 0x14 /* Command Register 2 */
  52. #define RSPI_SPCMD3 0x16 /* Command Register 3 */
  53. #define RSPI_SPCMD4 0x18 /* Command Register 4 */
  54. #define RSPI_SPCMD5 0x1a /* Command Register 5 */
  55. #define RSPI_SPCMD6 0x1c /* Command Register 6 */
  56. #define RSPI_SPCMD7 0x1e /* Command Register 7 */
  57. #define RSPI_SPBFCR 0x20 /* Buffer Control Register */
  58. #define RSPI_SPBFDR 0x22 /* Buffer Data Count Setting Register */
  59. /*qspi only */
  60. #define QSPI_SPBFCR 0x18 /* Buffer Control Register */
  61. #define QSPI_SPBDCR 0x1a /* Buffer Data Count Register */
  62. #define QSPI_SPBMUL0 0x1c /* Transfer Data Length Multiplier Setting Register 0 */
  63. #define QSPI_SPBMUL1 0x20 /* Transfer Data Length Multiplier Setting Register 1 */
  64. #define QSPI_SPBMUL2 0x24 /* Transfer Data Length Multiplier Setting Register 2 */
  65. #define QSPI_SPBMUL3 0x28 /* Transfer Data Length Multiplier Setting Register 3 */
  66. /* SPCR - Control Register */
  67. #define SPCR_SPRIE 0x80 /* Receive Interrupt Enable */
  68. #define SPCR_SPE 0x40 /* Function Enable */
  69. #define SPCR_SPTIE 0x20 /* Transmit Interrupt Enable */
  70. #define SPCR_SPEIE 0x10 /* Error Interrupt Enable */
  71. #define SPCR_MSTR 0x08 /* Master/Slave Mode Select */
  72. #define SPCR_MODFEN 0x04 /* Mode Fault Error Detection Enable */
  73. /* RSPI on SH only */
  74. #define SPCR_TXMD 0x02 /* TX Only Mode (vs. Full Duplex) */
  75. #define SPCR_SPMS 0x01 /* 3-wire Mode (vs. 4-wire) */
  76. /* QSPI on R-Car M2 only */
  77. #define SPCR_WSWAP 0x02 /* Word Swap of read-data for DMAC */
  78. #define SPCR_BSWAP 0x01 /* Byte Swap of read-data for DMAC */
  79. /* SSLP - Slave Select Polarity Register */
  80. #define SSLP_SSL1P 0x02 /* SSL1 Signal Polarity Setting */
  81. #define SSLP_SSL0P 0x01 /* SSL0 Signal Polarity Setting */
  82. /* SPPCR - Pin Control Register */
  83. #define SPPCR_MOIFE 0x20 /* MOSI Idle Value Fixing Enable */
  84. #define SPPCR_MOIFV 0x10 /* MOSI Idle Fixed Value */
  85. #define SPPCR_SPOM 0x04
  86. #define SPPCR_SPLP2 0x02 /* Loopback Mode 2 (non-inverting) */
  87. #define SPPCR_SPLP 0x01 /* Loopback Mode (inverting) */
  88. #define SPPCR_IO3FV 0x04 /* Single-/Dual-SPI Mode IO3 Output Fixed Value */
  89. #define SPPCR_IO2FV 0x04 /* Single-/Dual-SPI Mode IO2 Output Fixed Value */
  90. /* SPSR - Status Register */
  91. #define SPSR_SPRF 0x80 /* Receive Buffer Full Flag */
  92. #define SPSR_TEND 0x40 /* Transmit End */
  93. #define SPSR_SPTEF 0x20 /* Transmit Buffer Empty Flag */
  94. #define SPSR_PERF 0x08 /* Parity Error Flag */
  95. #define SPSR_MODF 0x04 /* Mode Fault Error Flag */
  96. #define SPSR_IDLNF 0x02 /* RSPI Idle Flag */
  97. #define SPSR_OVRF 0x01 /* Overrun Error Flag */
  98. /* SPSCR - Sequence Control Register */
  99. #define SPSCR_SPSLN_MASK 0x07 /* Sequence Length Specification */
  100. /* SPSSR - Sequence Status Register */
  101. #define SPSSR_SPECM_MASK 0x70 /* Command Error Mask */
  102. #define SPSSR_SPCP_MASK 0x07 /* Command Pointer Mask */
  103. /* SPDCR - Data Control Register */
  104. #define SPDCR_TXDMY 0x80 /* Dummy Data Transmission Enable */
  105. #define SPDCR_SPLW1 0x40 /* Access Width Specification (RZ) */
  106. #define SPDCR_SPLW0 0x20 /* Access Width Specification (RZ) */
  107. #define SPDCR_SPLLWORD (SPDCR_SPLW1 | SPDCR_SPLW0)
  108. #define SPDCR_SPLWORD SPDCR_SPLW1
  109. #define SPDCR_SPLBYTE SPDCR_SPLW0
  110. #define SPDCR_SPLW 0x20 /* Access Width Specification (SH) */
  111. #define SPDCR_SPRDTD 0x10 /* Receive Transmit Data Select */
  112. #define SPDCR_SLSEL1 0x08
  113. #define SPDCR_SLSEL0 0x04
  114. #define SPDCR_SLSEL_MASK 0x0c /* SSL1 Output Select */
  115. #define SPDCR_SPFC1 0x02
  116. #define SPDCR_SPFC0 0x01
  117. #define SPDCR_SPFC_MASK 0x03 /* Frame Count Setting (1-4) */
  118. /* SPCKD - Clock Delay Register */
  119. #define SPCKD_SCKDL_MASK 0x07 /* Clock Delay Setting (1-8) */
  120. /* SSLND - Slave Select Negation Delay Register */
  121. #define SSLND_SLNDL_MASK 0x07 /* SSL Negation Delay Setting (1-8) */
  122. /* SPND - Next-Access Delay Register */
  123. #define SPND_SPNDL_MASK 0x07 /* Next-Access Delay Setting (1-8) */
  124. /* SPCR2 - Control Register 2 */
  125. #define SPCR2_PTE 0x08 /* Parity Self-Test Enable */
  126. #define SPCR2_SPIE 0x04 /* Idle Interrupt Enable */
  127. #define SPCR2_SPOE 0x02 /* Odd Parity Enable (vs. Even) */
  128. #define SPCR2_SPPE 0x01 /* Parity Enable */
  129. /* SPCMDn - Command Registers */
  130. #define SPCMD_SCKDEN 0x8000 /* Clock Delay Setting Enable */
  131. #define SPCMD_SLNDEN 0x4000 /* SSL Negation Delay Setting Enable */
  132. #define SPCMD_SPNDEN 0x2000 /* Next-Access Delay Enable */
  133. #define SPCMD_LSBF 0x1000 /* LSB First */
  134. #define SPCMD_SPB_MASK 0x0f00 /* Data Length Setting */
  135. #define SPCMD_SPB_8_TO_16(bit) (((bit - 1) << 8) & SPCMD_SPB_MASK)
  136. #define SPCMD_SPB_8BIT 0x0000 /* qspi only */
  137. #define SPCMD_SPB_16BIT 0x0100
  138. #define SPCMD_SPB_20BIT 0x0000
  139. #define SPCMD_SPB_24BIT 0x0100
  140. #define SPCMD_SPB_32BIT 0x0200
  141. #define SPCMD_SSLKP 0x0080 /* SSL Signal Level Keeping */
  142. #define SPCMD_SPIMOD_MASK 0x0060 /* SPI Operating Mode (QSPI only) */
  143. #define SPCMD_SPIMOD1 0x0040
  144. #define SPCMD_SPIMOD0 0x0020
  145. #define SPCMD_SPIMOD_SINGLE 0
  146. #define SPCMD_SPIMOD_DUAL SPCMD_SPIMOD0
  147. #define SPCMD_SPIMOD_QUAD SPCMD_SPIMOD1
  148. #define SPCMD_SPRW 0x0010 /* SPI Read/Write Access (Dual/Quad) */
  149. #define SPCMD_SSLA_MASK 0x0030 /* SSL Assert Signal Setting (RSPI) */
  150. #define SPCMD_BRDV_MASK 0x000c /* Bit Rate Division Setting */
  151. #define SPCMD_CPOL 0x0002 /* Clock Polarity Setting */
  152. #define SPCMD_CPHA 0x0001 /* Clock Phase Setting */
  153. /* SPBFCR - Buffer Control Register */
  154. #define SPBFCR_TXRST 0x80 /* Transmit Buffer Data Reset (qspi only) */
  155. #define SPBFCR_RXRST 0x40 /* Receive Buffer Data Reset (qspi only) */
  156. #define SPBFCR_TXTRG_MASK 0x30 /* Transmit Buffer Data Triggering Number */
  157. #define SPBFCR_RXTRG_MASK 0x07 /* Receive Buffer Data Triggering Number */
  158. #define DUMMY_DATA 0x00
  159. struct rspi_data {
  160. void __iomem *addr;
  161. u32 max_speed_hz;
  162. struct spi_master *master;
  163. wait_queue_head_t wait;
  164. struct clk *clk;
  165. u8 spsr;
  166. u16 spcmd;
  167. const struct spi_ops *ops;
  168. /* for dmaengine */
  169. struct dma_chan *chan_tx;
  170. struct dma_chan *chan_rx;
  171. int irq;
  172. unsigned dma_width_16bit:1;
  173. unsigned dma_callbacked:1;
  174. unsigned byte_access:1;
  175. };
  176. static void rspi_write8(const struct rspi_data *rspi, u8 data, u16 offset)
  177. {
  178. iowrite8(data, rspi->addr + offset);
  179. }
  180. static void rspi_write16(const struct rspi_data *rspi, u16 data, u16 offset)
  181. {
  182. iowrite16(data, rspi->addr + offset);
  183. }
  184. static void rspi_write32(const struct rspi_data *rspi, u32 data, u16 offset)
  185. {
  186. iowrite32(data, rspi->addr + offset);
  187. }
  188. static u8 rspi_read8(const struct rspi_data *rspi, u16 offset)
  189. {
  190. return ioread8(rspi->addr + offset);
  191. }
  192. static u16 rspi_read16(const struct rspi_data *rspi, u16 offset)
  193. {
  194. return ioread16(rspi->addr + offset);
  195. }
  196. static void rspi_write_data(const struct rspi_data *rspi, u16 data)
  197. {
  198. if (rspi->byte_access)
  199. rspi_write8(rspi, data, RSPI_SPDR);
  200. else /* 16 bit */
  201. rspi_write16(rspi, data, RSPI_SPDR);
  202. }
  203. static u16 rspi_read_data(const struct rspi_data *rspi)
  204. {
  205. if (rspi->byte_access)
  206. return rspi_read8(rspi, RSPI_SPDR);
  207. else /* 16 bit */
  208. return rspi_read16(rspi, RSPI_SPDR);
  209. }
  210. /* optional functions */
  211. struct spi_ops {
  212. int (*set_config_register)(struct rspi_data *rspi, int access_size);
  213. int (*send_pio)(struct rspi_data *rspi, struct spi_transfer *t);
  214. int (*receive_pio)(struct rspi_data *rspi, struct spi_transfer *t);
  215. };
  216. /*
  217. * functions for RSPI
  218. */
  219. static int rspi_set_config_register(struct rspi_data *rspi, int access_size)
  220. {
  221. int spbr;
  222. /* Sets output mode(CMOS) and MOSI signal(from previous transfer) */
  223. rspi_write8(rspi, 0x00, RSPI_SPPCR);
  224. /* Sets transfer bit rate */
  225. spbr = clk_get_rate(rspi->clk) / (2 * rspi->max_speed_hz) - 1;
  226. rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR);
  227. /* Disable dummy transmission, set 16-bit word access, 1 frame */
  228. rspi_write8(rspi, 0, RSPI_SPDCR);
  229. rspi->byte_access = 0;
  230. /* Sets RSPCK, SSL, next-access delay value */
  231. rspi_write8(rspi, 0x00, RSPI_SPCKD);
  232. rspi_write8(rspi, 0x00, RSPI_SSLND);
  233. rspi_write8(rspi, 0x00, RSPI_SPND);
  234. /* Sets parity, interrupt mask */
  235. rspi_write8(rspi, 0x00, RSPI_SPCR2);
  236. /* Sets SPCMD */
  237. rspi_write16(rspi, SPCMD_SPB_8_TO_16(access_size) | rspi->spcmd,
  238. RSPI_SPCMD0);
  239. /* Sets RSPI mode */
  240. rspi_write8(rspi, SPCR_MSTR, RSPI_SPCR);
  241. return 0;
  242. }
  243. /*
  244. * functions for QSPI
  245. */
  246. static int qspi_set_config_register(struct rspi_data *rspi, int access_size)
  247. {
  248. u16 spcmd;
  249. int spbr;
  250. /* Sets output mode(CMOS) and MOSI signal(from previous transfer) */
  251. rspi_write8(rspi, 0x00, RSPI_SPPCR);
  252. /* Sets transfer bit rate */
  253. spbr = clk_get_rate(rspi->clk) / (2 * rspi->max_speed_hz);
  254. rspi_write8(rspi, clamp(spbr, 0, 255), RSPI_SPBR);
  255. /* Disable dummy transmission, set byte access */
  256. rspi_write8(rspi, 0, RSPI_SPDCR);
  257. rspi->byte_access = 1;
  258. /* Sets RSPCK, SSL, next-access delay value */
  259. rspi_write8(rspi, 0x00, RSPI_SPCKD);
  260. rspi_write8(rspi, 0x00, RSPI_SSLND);
  261. rspi_write8(rspi, 0x00, RSPI_SPND);
  262. /* Data Length Setting */
  263. if (access_size == 8)
  264. spcmd = SPCMD_SPB_8BIT;
  265. else if (access_size == 16)
  266. spcmd = SPCMD_SPB_16BIT;
  267. else
  268. spcmd = SPCMD_SPB_32BIT;
  269. spcmd |= SPCMD_SCKDEN | SPCMD_SLNDEN | rspi->spcmd | SPCMD_SPNDEN;
  270. /* Resets transfer data length */
  271. rspi_write32(rspi, 0, QSPI_SPBMUL0);
  272. /* Resets transmit and receive buffer */
  273. rspi_write8(rspi, SPBFCR_TXRST | SPBFCR_RXRST, QSPI_SPBFCR);
  274. /* Sets buffer to allow normal operation */
  275. rspi_write8(rspi, 0x00, QSPI_SPBFCR);
  276. /* Sets SPCMD */
  277. rspi_write16(rspi, spcmd, RSPI_SPCMD0);
  278. /* Enables SPI function in a master mode */
  279. rspi_write8(rspi, SPCR_SPE | SPCR_MSTR, RSPI_SPCR);
  280. return 0;
  281. }
  282. #define set_config_register(spi, n) spi->ops->set_config_register(spi, n)
  283. static void rspi_enable_irq(const struct rspi_data *rspi, u8 enable)
  284. {
  285. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | enable, RSPI_SPCR);
  286. }
  287. static void rspi_disable_irq(const struct rspi_data *rspi, u8 disable)
  288. {
  289. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~disable, RSPI_SPCR);
  290. }
  291. static int rspi_wait_for_interrupt(struct rspi_data *rspi, u8 wait_mask,
  292. u8 enable_bit)
  293. {
  294. int ret;
  295. rspi->spsr = rspi_read8(rspi, RSPI_SPSR);
  296. rspi_enable_irq(rspi, enable_bit);
  297. ret = wait_event_timeout(rspi->wait, rspi->spsr & wait_mask, HZ);
  298. if (ret == 0 && !(rspi->spsr & wait_mask))
  299. return -ETIMEDOUT;
  300. return 0;
  301. }
  302. static int rspi_send_pio(struct rspi_data *rspi, struct spi_transfer *t)
  303. {
  304. int remain = t->len;
  305. const u8 *data = t->tx_buf;
  306. while (remain > 0) {
  307. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_TXMD,
  308. RSPI_SPCR);
  309. if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) {
  310. dev_err(&rspi->master->dev,
  311. "%s: tx empty timeout\n", __func__);
  312. return -ETIMEDOUT;
  313. }
  314. rspi_write_data(rspi, *data);
  315. data++;
  316. remain--;
  317. }
  318. /* Waiting for the last transmission */
  319. rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE);
  320. return 0;
  321. }
  322. static int qspi_send_pio(struct rspi_data *rspi, struct spi_transfer *t)
  323. {
  324. int remain = t->len;
  325. const u8 *data = t->tx_buf;
  326. rspi_write8(rspi, SPBFCR_TXRST, QSPI_SPBFCR);
  327. rspi_write8(rspi, 0x00, QSPI_SPBFCR);
  328. while (remain > 0) {
  329. if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) {
  330. dev_err(&rspi->master->dev,
  331. "%s: tx empty timeout\n", __func__);
  332. return -ETIMEDOUT;
  333. }
  334. rspi_write_data(rspi, *data++);
  335. if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) {
  336. dev_err(&rspi->master->dev,
  337. "%s: receive timeout\n", __func__);
  338. return -ETIMEDOUT;
  339. }
  340. rspi_read_data(rspi);
  341. remain--;
  342. }
  343. /* Waiting for the last transmission */
  344. rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE);
  345. return 0;
  346. }
  347. #define send_pio(spi, t) spi->ops->send_pio(spi, t)
  348. static void rspi_dma_complete(void *arg)
  349. {
  350. struct rspi_data *rspi = arg;
  351. rspi->dma_callbacked = 1;
  352. wake_up_interruptible(&rspi->wait);
  353. }
  354. static int rspi_dma_map_sg(struct scatterlist *sg, const void *buf,
  355. unsigned len, struct dma_chan *chan,
  356. enum dma_transfer_direction dir)
  357. {
  358. sg_init_table(sg, 1);
  359. sg_set_buf(sg, buf, len);
  360. sg_dma_len(sg) = len;
  361. return dma_map_sg(chan->device->dev, sg, 1, dir);
  362. }
  363. static void rspi_dma_unmap_sg(struct scatterlist *sg, struct dma_chan *chan,
  364. enum dma_transfer_direction dir)
  365. {
  366. dma_unmap_sg(chan->device->dev, sg, 1, dir);
  367. }
  368. static void rspi_memory_to_8bit(void *buf, const void *data, unsigned len)
  369. {
  370. u16 *dst = buf;
  371. const u8 *src = data;
  372. while (len) {
  373. *dst++ = (u16)(*src++);
  374. len--;
  375. }
  376. }
  377. static void rspi_memory_from_8bit(void *buf, const void *data, unsigned len)
  378. {
  379. u8 *dst = buf;
  380. const u16 *src = data;
  381. while (len) {
  382. *dst++ = (u8)*src++;
  383. len--;
  384. }
  385. }
  386. static int rspi_send_dma(struct rspi_data *rspi, struct spi_transfer *t)
  387. {
  388. struct scatterlist sg;
  389. const void *buf = NULL;
  390. struct dma_async_tx_descriptor *desc;
  391. unsigned len;
  392. int ret = 0;
  393. if (rspi->dma_width_16bit) {
  394. void *tmp;
  395. /*
  396. * If DMAC bus width is 16-bit, the driver allocates a dummy
  397. * buffer. And, the driver converts original data into the
  398. * DMAC data as the following format:
  399. * original data: 1st byte, 2nd byte ...
  400. * DMAC data: 1st byte, dummy, 2nd byte, dummy ...
  401. */
  402. len = t->len * 2;
  403. tmp = kmalloc(len, GFP_KERNEL);
  404. if (!tmp)
  405. return -ENOMEM;
  406. rspi_memory_to_8bit(tmp, t->tx_buf, t->len);
  407. buf = tmp;
  408. } else {
  409. len = t->len;
  410. buf = t->tx_buf;
  411. }
  412. if (!rspi_dma_map_sg(&sg, buf, len, rspi->chan_tx, DMA_TO_DEVICE)) {
  413. ret = -EFAULT;
  414. goto end_nomap;
  415. }
  416. desc = dmaengine_prep_slave_sg(rspi->chan_tx, &sg, 1, DMA_TO_DEVICE,
  417. DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
  418. if (!desc) {
  419. ret = -EIO;
  420. goto end;
  421. }
  422. /*
  423. * DMAC needs SPTIE, but if SPTIE is set, this IRQ routine will be
  424. * called. So, this driver disables the IRQ while DMA transfer.
  425. */
  426. disable_irq(rspi->irq);
  427. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_TXMD, RSPI_SPCR);
  428. rspi_enable_irq(rspi, SPCR_SPTIE);
  429. rspi->dma_callbacked = 0;
  430. desc->callback = rspi_dma_complete;
  431. desc->callback_param = rspi;
  432. dmaengine_submit(desc);
  433. dma_async_issue_pending(rspi->chan_tx);
  434. ret = wait_event_interruptible_timeout(rspi->wait,
  435. rspi->dma_callbacked, HZ);
  436. if (ret > 0 && rspi->dma_callbacked)
  437. ret = 0;
  438. else if (!ret)
  439. ret = -ETIMEDOUT;
  440. rspi_disable_irq(rspi, SPCR_SPTIE);
  441. enable_irq(rspi->irq);
  442. end:
  443. rspi_dma_unmap_sg(&sg, rspi->chan_tx, DMA_TO_DEVICE);
  444. end_nomap:
  445. if (rspi->dma_width_16bit)
  446. kfree(buf);
  447. return ret;
  448. }
  449. static void rspi_receive_init(const struct rspi_data *rspi)
  450. {
  451. u8 spsr;
  452. spsr = rspi_read8(rspi, RSPI_SPSR);
  453. if (spsr & SPSR_SPRF)
  454. rspi_read_data(rspi); /* dummy read */
  455. if (spsr & SPSR_OVRF)
  456. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPSR) & ~SPSR_OVRF,
  457. RSPI_SPSR);
  458. }
  459. static int rspi_receive_pio(struct rspi_data *rspi, struct spi_transfer *t)
  460. {
  461. int remain = t->len;
  462. u8 *data;
  463. rspi_receive_init(rspi);
  464. data = t->rx_buf;
  465. while (remain > 0) {
  466. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_TXMD,
  467. RSPI_SPCR);
  468. if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) {
  469. dev_err(&rspi->master->dev,
  470. "%s: tx empty timeout\n", __func__);
  471. return -ETIMEDOUT;
  472. }
  473. /* dummy write for generate clock */
  474. rspi_write_data(rspi, DUMMY_DATA);
  475. if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) {
  476. dev_err(&rspi->master->dev,
  477. "%s: receive timeout\n", __func__);
  478. return -ETIMEDOUT;
  479. }
  480. *data = rspi_read_data(rspi);
  481. data++;
  482. remain--;
  483. }
  484. return 0;
  485. }
  486. static void qspi_receive_init(const struct rspi_data *rspi)
  487. {
  488. u8 spsr;
  489. spsr = rspi_read8(rspi, RSPI_SPSR);
  490. if (spsr & SPSR_SPRF)
  491. rspi_read_data(rspi); /* dummy read */
  492. rspi_write8(rspi, SPBFCR_TXRST | SPBFCR_RXRST, QSPI_SPBFCR);
  493. rspi_write8(rspi, 0x00, QSPI_SPBFCR);
  494. }
  495. static int qspi_receive_pio(struct rspi_data *rspi, struct spi_transfer *t)
  496. {
  497. int remain = t->len;
  498. u8 *data;
  499. qspi_receive_init(rspi);
  500. data = t->rx_buf;
  501. while (remain > 0) {
  502. if (rspi_wait_for_interrupt(rspi, SPSR_SPTEF, SPCR_SPTIE) < 0) {
  503. dev_err(&rspi->master->dev,
  504. "%s: tx empty timeout\n", __func__);
  505. return -ETIMEDOUT;
  506. }
  507. /* dummy write for generate clock */
  508. rspi_write_data(rspi, DUMMY_DATA);
  509. if (rspi_wait_for_interrupt(rspi, SPSR_SPRF, SPCR_SPRIE) < 0) {
  510. dev_err(&rspi->master->dev,
  511. "%s: receive timeout\n", __func__);
  512. return -ETIMEDOUT;
  513. }
  514. *data++ = rspi_read_data(rspi);
  515. remain--;
  516. }
  517. return 0;
  518. }
  519. #define receive_pio(spi, t) spi->ops->receive_pio(spi, t)
  520. static int rspi_receive_dma(struct rspi_data *rspi, struct spi_transfer *t)
  521. {
  522. struct scatterlist sg, sg_dummy;
  523. void *dummy = NULL, *rx_buf = NULL;
  524. struct dma_async_tx_descriptor *desc, *desc_dummy;
  525. unsigned len;
  526. int ret = 0;
  527. if (rspi->dma_width_16bit) {
  528. /*
  529. * If DMAC bus width is 16-bit, the driver allocates a dummy
  530. * buffer. And, finally the driver converts the DMAC data into
  531. * actual data as the following format:
  532. * DMAC data: 1st byte, dummy, 2nd byte, dummy ...
  533. * actual data: 1st byte, 2nd byte ...
  534. */
  535. len = t->len * 2;
  536. rx_buf = kmalloc(len, GFP_KERNEL);
  537. if (!rx_buf)
  538. return -ENOMEM;
  539. } else {
  540. len = t->len;
  541. rx_buf = t->rx_buf;
  542. }
  543. /* prepare dummy transfer to generate SPI clocks */
  544. dummy = kzalloc(len, GFP_KERNEL);
  545. if (!dummy) {
  546. ret = -ENOMEM;
  547. goto end_nomap;
  548. }
  549. if (!rspi_dma_map_sg(&sg_dummy, dummy, len, rspi->chan_tx,
  550. DMA_TO_DEVICE)) {
  551. ret = -EFAULT;
  552. goto end_nomap;
  553. }
  554. desc_dummy = dmaengine_prep_slave_sg(rspi->chan_tx, &sg_dummy, 1,
  555. DMA_TO_DEVICE, DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
  556. if (!desc_dummy) {
  557. ret = -EIO;
  558. goto end_dummy_mapped;
  559. }
  560. /* prepare receive transfer */
  561. if (!rspi_dma_map_sg(&sg, rx_buf, len, rspi->chan_rx,
  562. DMA_FROM_DEVICE)) {
  563. ret = -EFAULT;
  564. goto end_dummy_mapped;
  565. }
  566. desc = dmaengine_prep_slave_sg(rspi->chan_rx, &sg, 1, DMA_FROM_DEVICE,
  567. DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
  568. if (!desc) {
  569. ret = -EIO;
  570. goto end;
  571. }
  572. rspi_receive_init(rspi);
  573. /*
  574. * DMAC needs SPTIE, but if SPTIE is set, this IRQ routine will be
  575. * called. So, this driver disables the IRQ while DMA transfer.
  576. */
  577. disable_irq(rspi->irq);
  578. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_TXMD, RSPI_SPCR);
  579. rspi_enable_irq(rspi, SPCR_SPTIE | SPCR_SPRIE);
  580. rspi->dma_callbacked = 0;
  581. desc->callback = rspi_dma_complete;
  582. desc->callback_param = rspi;
  583. dmaengine_submit(desc);
  584. dma_async_issue_pending(rspi->chan_rx);
  585. desc_dummy->callback = NULL; /* No callback */
  586. dmaengine_submit(desc_dummy);
  587. dma_async_issue_pending(rspi->chan_tx);
  588. ret = wait_event_interruptible_timeout(rspi->wait,
  589. rspi->dma_callbacked, HZ);
  590. if (ret > 0 && rspi->dma_callbacked)
  591. ret = 0;
  592. else if (!ret)
  593. ret = -ETIMEDOUT;
  594. rspi_disable_irq(rspi, SPCR_SPTIE | SPCR_SPRIE);
  595. enable_irq(rspi->irq);
  596. end:
  597. rspi_dma_unmap_sg(&sg, rspi->chan_rx, DMA_FROM_DEVICE);
  598. end_dummy_mapped:
  599. rspi_dma_unmap_sg(&sg_dummy, rspi->chan_tx, DMA_TO_DEVICE);
  600. end_nomap:
  601. if (rspi->dma_width_16bit) {
  602. if (!ret)
  603. rspi_memory_from_8bit(t->rx_buf, rx_buf, t->len);
  604. kfree(rx_buf);
  605. }
  606. kfree(dummy);
  607. return ret;
  608. }
  609. static int rspi_is_dma(const struct rspi_data *rspi, struct spi_transfer *t)
  610. {
  611. if (t->tx_buf && rspi->chan_tx)
  612. return 1;
  613. /* If the module receives data by DMAC, it also needs TX DMAC */
  614. if (t->rx_buf && rspi->chan_tx && rspi->chan_rx)
  615. return 1;
  616. return 0;
  617. }
  618. static int rspi_transfer_one(struct spi_master *master, struct spi_device *spi,
  619. struct spi_transfer *xfer)
  620. {
  621. struct rspi_data *rspi = spi_master_get_devdata(master);
  622. int ret = 0;
  623. if (xfer->tx_buf) {
  624. if (rspi_is_dma(rspi, xfer))
  625. ret = rspi_send_dma(rspi, xfer);
  626. else
  627. ret = send_pio(rspi, xfer);
  628. if (ret < 0)
  629. return ret;
  630. }
  631. if (xfer->rx_buf) {
  632. if (rspi_is_dma(rspi, xfer))
  633. ret = rspi_receive_dma(rspi, xfer);
  634. else
  635. ret = receive_pio(rspi, xfer);
  636. }
  637. return ret;
  638. }
  639. static int rspi_setup(struct spi_device *spi)
  640. {
  641. struct rspi_data *rspi = spi_master_get_devdata(spi->master);
  642. rspi->max_speed_hz = spi->max_speed_hz;
  643. rspi->spcmd = SPCMD_SSLKP;
  644. if (spi->mode & SPI_CPOL)
  645. rspi->spcmd |= SPCMD_CPOL;
  646. if (spi->mode & SPI_CPHA)
  647. rspi->spcmd |= SPCMD_CPHA;
  648. set_config_register(rspi, 8);
  649. return 0;
  650. }
  651. static void rspi_cleanup(struct spi_device *spi)
  652. {
  653. }
  654. static int rspi_prepare_message(struct spi_master *master,
  655. struct spi_message *message)
  656. {
  657. struct rspi_data *rspi = spi_master_get_devdata(master);
  658. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) | SPCR_SPE, RSPI_SPCR);
  659. return 0;
  660. }
  661. static int rspi_unprepare_message(struct spi_master *master,
  662. struct spi_message *message)
  663. {
  664. struct rspi_data *rspi = spi_master_get_devdata(master);
  665. rspi_write8(rspi, rspi_read8(rspi, RSPI_SPCR) & ~SPCR_SPE, RSPI_SPCR);
  666. return 0;
  667. }
  668. static irqreturn_t rspi_irq(int irq, void *_sr)
  669. {
  670. struct rspi_data *rspi = _sr;
  671. u8 spsr;
  672. irqreturn_t ret = IRQ_NONE;
  673. u8 disable_irq = 0;
  674. rspi->spsr = spsr = rspi_read8(rspi, RSPI_SPSR);
  675. if (spsr & SPSR_SPRF)
  676. disable_irq |= SPCR_SPRIE;
  677. if (spsr & SPSR_SPTEF)
  678. disable_irq |= SPCR_SPTIE;
  679. if (disable_irq) {
  680. ret = IRQ_HANDLED;
  681. rspi_disable_irq(rspi, disable_irq);
  682. wake_up(&rspi->wait);
  683. }
  684. return ret;
  685. }
  686. static int rspi_request_dma(struct rspi_data *rspi,
  687. struct platform_device *pdev)
  688. {
  689. const struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev);
  690. struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  691. dma_cap_mask_t mask;
  692. struct dma_slave_config cfg;
  693. int ret;
  694. if (!res || !rspi_pd)
  695. return 0; /* The driver assumes no error. */
  696. rspi->dma_width_16bit = rspi_pd->dma_width_16bit;
  697. /* If the module receives data by DMAC, it also needs TX DMAC */
  698. if (rspi_pd->dma_rx_id && rspi_pd->dma_tx_id) {
  699. dma_cap_zero(mask);
  700. dma_cap_set(DMA_SLAVE, mask);
  701. rspi->chan_rx = dma_request_channel(mask, shdma_chan_filter,
  702. (void *)rspi_pd->dma_rx_id);
  703. if (rspi->chan_rx) {
  704. cfg.slave_id = rspi_pd->dma_rx_id;
  705. cfg.direction = DMA_DEV_TO_MEM;
  706. cfg.dst_addr = 0;
  707. cfg.src_addr = res->start + RSPI_SPDR;
  708. ret = dmaengine_slave_config(rspi->chan_rx, &cfg);
  709. if (!ret)
  710. dev_info(&pdev->dev, "Use DMA when rx.\n");
  711. else
  712. return ret;
  713. }
  714. }
  715. if (rspi_pd->dma_tx_id) {
  716. dma_cap_zero(mask);
  717. dma_cap_set(DMA_SLAVE, mask);
  718. rspi->chan_tx = dma_request_channel(mask, shdma_chan_filter,
  719. (void *)rspi_pd->dma_tx_id);
  720. if (rspi->chan_tx) {
  721. cfg.slave_id = rspi_pd->dma_tx_id;
  722. cfg.direction = DMA_MEM_TO_DEV;
  723. cfg.dst_addr = res->start + RSPI_SPDR;
  724. cfg.src_addr = 0;
  725. ret = dmaengine_slave_config(rspi->chan_tx, &cfg);
  726. if (!ret)
  727. dev_info(&pdev->dev, "Use DMA when tx\n");
  728. else
  729. return ret;
  730. }
  731. }
  732. return 0;
  733. }
  734. static void rspi_release_dma(struct rspi_data *rspi)
  735. {
  736. if (rspi->chan_tx)
  737. dma_release_channel(rspi->chan_tx);
  738. if (rspi->chan_rx)
  739. dma_release_channel(rspi->chan_rx);
  740. }
  741. static int rspi_remove(struct platform_device *pdev)
  742. {
  743. struct rspi_data *rspi = platform_get_drvdata(pdev);
  744. rspi_release_dma(rspi);
  745. clk_disable(rspi->clk);
  746. return 0;
  747. }
  748. static int rspi_probe(struct platform_device *pdev)
  749. {
  750. struct resource *res;
  751. struct spi_master *master;
  752. struct rspi_data *rspi;
  753. int ret, irq;
  754. char clk_name[16];
  755. const struct rspi_plat_data *rspi_pd = dev_get_platdata(&pdev->dev);
  756. const struct spi_ops *ops;
  757. const struct platform_device_id *id_entry = pdev->id_entry;
  758. ops = (struct spi_ops *)id_entry->driver_data;
  759. /* ops parameter check */
  760. if (!ops->set_config_register) {
  761. dev_err(&pdev->dev, "there is no set_config_register\n");
  762. return -ENODEV;
  763. }
  764. irq = platform_get_irq(pdev, 0);
  765. if (irq < 0) {
  766. dev_err(&pdev->dev, "platform_get_irq error\n");
  767. return -ENODEV;
  768. }
  769. master = spi_alloc_master(&pdev->dev, sizeof(struct rspi_data));
  770. if (master == NULL) {
  771. dev_err(&pdev->dev, "spi_alloc_master error.\n");
  772. return -ENOMEM;
  773. }
  774. rspi = spi_master_get_devdata(master);
  775. platform_set_drvdata(pdev, rspi);
  776. rspi->ops = ops;
  777. rspi->master = master;
  778. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  779. rspi->addr = devm_ioremap_resource(&pdev->dev, res);
  780. if (IS_ERR(rspi->addr)) {
  781. ret = PTR_ERR(rspi->addr);
  782. goto error1;
  783. }
  784. snprintf(clk_name, sizeof(clk_name), "%s%d", id_entry->name, pdev->id);
  785. rspi->clk = devm_clk_get(&pdev->dev, clk_name);
  786. if (IS_ERR(rspi->clk)) {
  787. dev_err(&pdev->dev, "cannot get clock\n");
  788. ret = PTR_ERR(rspi->clk);
  789. goto error1;
  790. }
  791. clk_enable(rspi->clk);
  792. init_waitqueue_head(&rspi->wait);
  793. if (rspi_pd && rspi_pd->num_chipselect)
  794. master->num_chipselect = rspi_pd->num_chipselect;
  795. else
  796. master->num_chipselect = 2; /* default */
  797. master->bus_num = pdev->id;
  798. master->setup = rspi_setup;
  799. master->transfer_one = rspi_transfer_one;
  800. master->cleanup = rspi_cleanup;
  801. master->prepare_message = rspi_prepare_message;
  802. master->unprepare_message = rspi_unprepare_message;
  803. master->mode_bits = SPI_CPHA | SPI_CPOL;
  804. ret = devm_request_irq(&pdev->dev, irq, rspi_irq, 0,
  805. dev_name(&pdev->dev), rspi);
  806. if (ret < 0) {
  807. dev_err(&pdev->dev, "request_irq error\n");
  808. goto error2;
  809. }
  810. rspi->irq = irq;
  811. ret = rspi_request_dma(rspi, pdev);
  812. if (ret < 0) {
  813. dev_err(&pdev->dev, "rspi_request_dma failed.\n");
  814. goto error3;
  815. }
  816. ret = devm_spi_register_master(&pdev->dev, master);
  817. if (ret < 0) {
  818. dev_err(&pdev->dev, "spi_register_master error.\n");
  819. goto error3;
  820. }
  821. dev_info(&pdev->dev, "probed\n");
  822. return 0;
  823. error3:
  824. rspi_release_dma(rspi);
  825. error2:
  826. clk_disable(rspi->clk);
  827. error1:
  828. spi_master_put(master);
  829. return ret;
  830. }
  831. static struct spi_ops rspi_ops = {
  832. .set_config_register = rspi_set_config_register,
  833. .send_pio = rspi_send_pio,
  834. .receive_pio = rspi_receive_pio,
  835. };
  836. static struct spi_ops qspi_ops = {
  837. .set_config_register = qspi_set_config_register,
  838. .send_pio = qspi_send_pio,
  839. .receive_pio = qspi_receive_pio,
  840. };
  841. static struct platform_device_id spi_driver_ids[] = {
  842. { "rspi", (kernel_ulong_t)&rspi_ops },
  843. { "qspi", (kernel_ulong_t)&qspi_ops },
  844. {},
  845. };
  846. MODULE_DEVICE_TABLE(platform, spi_driver_ids);
  847. static struct platform_driver rspi_driver = {
  848. .probe = rspi_probe,
  849. .remove = rspi_remove,
  850. .id_table = spi_driver_ids,
  851. .driver = {
  852. .name = "renesas_spi",
  853. .owner = THIS_MODULE,
  854. },
  855. };
  856. module_platform_driver(rspi_driver);
  857. MODULE_DESCRIPTION("Renesas RSPI bus driver");
  858. MODULE_LICENSE("GPL v2");
  859. MODULE_AUTHOR("Yoshihiro Shimoda");
  860. MODULE_ALIAS("platform:rspi");