PageRenderTime 30ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/spi/spi-zynqmp-gqspi.c

https://github.com/mturquette/linux
C | 1120 lines | 719 code | 123 blank | 278 comment | 85 complexity | e2d3dc9a6ef858647784d154ecb1e194 MD5 | raw file
  1. /*
  2. * Xilinx Zynq UltraScale+ MPSoC Quad-SPI (QSPI) controller driver
  3. * (master mode only)
  4. *
  5. * Copyright (C) 2009 - 2015 Xilinx, Inc.
  6. *
  7. * This program is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU General Public License version 2 as published
  9. * by the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. */
  12. #include <linux/clk.h>
  13. #include <linux/delay.h>
  14. #include <linux/dma-mapping.h>
  15. #include <linux/dmaengine.h>
  16. #include <linux/interrupt.h>
  17. #include <linux/io.h>
  18. #include <linux/module.h>
  19. #include <linux/of_irq.h>
  20. #include <linux/of_address.h>
  21. #include <linux/platform_device.h>
  22. #include <linux/spi/spi.h>
  23. #include <linux/spinlock.h>
  24. #include <linux/workqueue.h>
  25. /* Generic QSPI register offsets */
  26. #define GQSPI_CONFIG_OFST 0x00000100
  27. #define GQSPI_ISR_OFST 0x00000104
  28. #define GQSPI_IDR_OFST 0x0000010C
  29. #define GQSPI_IER_OFST 0x00000108
  30. #define GQSPI_IMASK_OFST 0x00000110
  31. #define GQSPI_EN_OFST 0x00000114
  32. #define GQSPI_TXD_OFST 0x0000011C
  33. #define GQSPI_RXD_OFST 0x00000120
  34. #define GQSPI_TX_THRESHOLD_OFST 0x00000128
  35. #define GQSPI_RX_THRESHOLD_OFST 0x0000012C
  36. #define GQSPI_LPBK_DLY_ADJ_OFST 0x00000138
  37. #define GQSPI_GEN_FIFO_OFST 0x00000140
  38. #define GQSPI_SEL_OFST 0x00000144
  39. #define GQSPI_GF_THRESHOLD_OFST 0x00000150
  40. #define GQSPI_FIFO_CTRL_OFST 0x0000014C
  41. #define GQSPI_QSPIDMA_DST_CTRL_OFST 0x0000080C
  42. #define GQSPI_QSPIDMA_DST_SIZE_OFST 0x00000804
  43. #define GQSPI_QSPIDMA_DST_STS_OFST 0x00000808
  44. #define GQSPI_QSPIDMA_DST_I_STS_OFST 0x00000814
  45. #define GQSPI_QSPIDMA_DST_I_EN_OFST 0x00000818
  46. #define GQSPI_QSPIDMA_DST_I_DIS_OFST 0x0000081C
  47. #define GQSPI_QSPIDMA_DST_I_MASK_OFST 0x00000820
  48. #define GQSPI_QSPIDMA_DST_ADDR_OFST 0x00000800
  49. #define GQSPI_QSPIDMA_DST_ADDR_MSB_OFST 0x00000828
  50. /* GQSPI register bit masks */
  51. #define GQSPI_SEL_MASK 0x00000001
  52. #define GQSPI_EN_MASK 0x00000001
  53. #define GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK 0x00000020
  54. #define GQSPI_ISR_WR_TO_CLR_MASK 0x00000002
  55. #define GQSPI_IDR_ALL_MASK 0x00000FBE
  56. #define GQSPI_CFG_MODE_EN_MASK 0xC0000000
  57. #define GQSPI_CFG_GEN_FIFO_START_MODE_MASK 0x20000000
  58. #define GQSPI_CFG_ENDIAN_MASK 0x04000000
  59. #define GQSPI_CFG_EN_POLL_TO_MASK 0x00100000
  60. #define GQSPI_CFG_WP_HOLD_MASK 0x00080000
  61. #define GQSPI_CFG_BAUD_RATE_DIV_MASK 0x00000038
  62. #define GQSPI_CFG_CLK_PHA_MASK 0x00000004
  63. #define GQSPI_CFG_CLK_POL_MASK 0x00000002
  64. #define GQSPI_CFG_START_GEN_FIFO_MASK 0x10000000
  65. #define GQSPI_GENFIFO_IMM_DATA_MASK 0x000000FF
  66. #define GQSPI_GENFIFO_DATA_XFER 0x00000100
  67. #define GQSPI_GENFIFO_EXP 0x00000200
  68. #define GQSPI_GENFIFO_MODE_SPI 0x00000400
  69. #define GQSPI_GENFIFO_MODE_DUALSPI 0x00000800
  70. #define GQSPI_GENFIFO_MODE_QUADSPI 0x00000C00
  71. #define GQSPI_GENFIFO_MODE_MASK 0x00000C00
  72. #define GQSPI_GENFIFO_CS_LOWER 0x00001000
  73. #define GQSPI_GENFIFO_CS_UPPER 0x00002000
  74. #define GQSPI_GENFIFO_BUS_LOWER 0x00004000
  75. #define GQSPI_GENFIFO_BUS_UPPER 0x00008000
  76. #define GQSPI_GENFIFO_BUS_BOTH 0x0000C000
  77. #define GQSPI_GENFIFO_BUS_MASK 0x0000C000
  78. #define GQSPI_GENFIFO_TX 0x00010000
  79. #define GQSPI_GENFIFO_RX 0x00020000
  80. #define GQSPI_GENFIFO_STRIPE 0x00040000
  81. #define GQSPI_GENFIFO_POLL 0x00080000
  82. #define GQSPI_GENFIFO_EXP_START 0x00000100
  83. #define GQSPI_FIFO_CTRL_RST_RX_FIFO_MASK 0x00000004
  84. #define GQSPI_FIFO_CTRL_RST_TX_FIFO_MASK 0x00000002
  85. #define GQSPI_FIFO_CTRL_RST_GEN_FIFO_MASK 0x00000001
  86. #define GQSPI_ISR_RXEMPTY_MASK 0x00000800
  87. #define GQSPI_ISR_GENFIFOFULL_MASK 0x00000400
  88. #define GQSPI_ISR_GENFIFONOT_FULL_MASK 0x00000200
  89. #define GQSPI_ISR_TXEMPTY_MASK 0x00000100
  90. #define GQSPI_ISR_GENFIFOEMPTY_MASK 0x00000080
  91. #define GQSPI_ISR_RXFULL_MASK 0x00000020
  92. #define GQSPI_ISR_RXNEMPTY_MASK 0x00000010
  93. #define GQSPI_ISR_TXFULL_MASK 0x00000008
  94. #define GQSPI_ISR_TXNOT_FULL_MASK 0x00000004
  95. #define GQSPI_ISR_POLL_TIME_EXPIRE_MASK 0x00000002
  96. #define GQSPI_IER_TXNOT_FULL_MASK 0x00000004
  97. #define GQSPI_IER_RXEMPTY_MASK 0x00000800
  98. #define GQSPI_IER_POLL_TIME_EXPIRE_MASK 0x00000002
  99. #define GQSPI_IER_RXNEMPTY_MASK 0x00000010
  100. #define GQSPI_IER_GENFIFOEMPTY_MASK 0x00000080
  101. #define GQSPI_IER_TXEMPTY_MASK 0x00000100
  102. #define GQSPI_QSPIDMA_DST_INTR_ALL_MASK 0x000000FE
  103. #define GQSPI_QSPIDMA_DST_STS_WTC 0x0000E000
  104. #define GQSPI_CFG_MODE_EN_DMA_MASK 0x80000000
  105. #define GQSPI_ISR_IDR_MASK 0x00000994
  106. #define GQSPI_QSPIDMA_DST_I_EN_DONE_MASK 0x00000002
  107. #define GQSPI_QSPIDMA_DST_I_STS_DONE_MASK 0x00000002
  108. #define GQSPI_IRQ_MASK 0x00000980
  109. #define GQSPI_CFG_BAUD_RATE_DIV_SHIFT 3
  110. #define GQSPI_GENFIFO_CS_SETUP 0x4
  111. #define GQSPI_GENFIFO_CS_HOLD 0x3
  112. #define GQSPI_TXD_DEPTH 64
  113. #define GQSPI_RX_FIFO_THRESHOLD 32
  114. #define GQSPI_RX_FIFO_FILL (GQSPI_RX_FIFO_THRESHOLD * 4)
  115. #define GQSPI_TX_FIFO_THRESHOLD_RESET_VAL 32
  116. #define GQSPI_TX_FIFO_FILL (GQSPI_TXD_DEPTH -\
  117. GQSPI_TX_FIFO_THRESHOLD_RESET_VAL)
  118. #define GQSPI_GEN_FIFO_THRESHOLD_RESET_VAL 0X10
  119. #define GQSPI_QSPIDMA_DST_CTRL_RESET_VAL 0x803FFA00
  120. #define GQSPI_SELECT_FLASH_CS_LOWER 0x1
  121. #define GQSPI_SELECT_FLASH_CS_UPPER 0x2
  122. #define GQSPI_SELECT_FLASH_CS_BOTH 0x3
  123. #define GQSPI_SELECT_FLASH_BUS_LOWER 0x1
  124. #define GQSPI_SELECT_FLASH_BUS_UPPER 0x2
  125. #define GQSPI_SELECT_FLASH_BUS_BOTH 0x3
  126. #define GQSPI_BAUD_DIV_MAX 7 /* Baud rate divisor maximum */
  127. #define GQSPI_BAUD_DIV_SHIFT 2 /* Baud rate divisor shift */
  128. #define GQSPI_SELECT_MODE_SPI 0x1
  129. #define GQSPI_SELECT_MODE_DUALSPI 0x2
  130. #define GQSPI_SELECT_MODE_QUADSPI 0x4
  131. #define GQSPI_DMA_UNALIGN 0x3
  132. #define GQSPI_DEFAULT_NUM_CS 1 /* Default number of chip selects */
  133. enum mode_type {GQSPI_MODE_IO, GQSPI_MODE_DMA};
  134. /**
  135. * struct zynqmp_qspi - Defines qspi driver instance
  136. * @regs: Virtual address of the QSPI controller registers
  137. * @refclk: Pointer to the peripheral clock
  138. * @pclk: Pointer to the APB clock
  139. * @irq: IRQ number
  140. * @dev: Pointer to struct device
  141. * @txbuf: Pointer to the TX buffer
  142. * @rxbuf: Pointer to the RX buffer
  143. * @bytes_to_transfer: Number of bytes left to transfer
  144. * @bytes_to_receive: Number of bytes left to receive
  145. * @genfifocs: Used for chip select
  146. * @genfifobus: Used to select the upper or lower bus
  147. * @dma_rx_bytes: Remaining bytes to receive by DMA mode
  148. * @dma_addr: DMA address after mapping the kernel buffer
  149. * @genfifoentry: Used for storing the genfifoentry instruction.
  150. * @mode: Defines the mode in which QSPI is operating
  151. */
  152. struct zynqmp_qspi {
  153. void __iomem *regs;
  154. struct clk *refclk;
  155. struct clk *pclk;
  156. int irq;
  157. struct device *dev;
  158. const void *txbuf;
  159. void *rxbuf;
  160. int bytes_to_transfer;
  161. int bytes_to_receive;
  162. u32 genfifocs;
  163. u32 genfifobus;
  164. u32 dma_rx_bytes;
  165. dma_addr_t dma_addr;
  166. u32 genfifoentry;
  167. enum mode_type mode;
  168. };
  169. /**
  170. * zynqmp_gqspi_read: For GQSPI controller read operation
  171. * @xqspi: Pointer to the zynqmp_qspi structure
  172. * @offset: Offset from where to read
  173. */
  174. static u32 zynqmp_gqspi_read(struct zynqmp_qspi *xqspi, u32 offset)
  175. {
  176. return readl_relaxed(xqspi->regs + offset);
  177. }
  178. /**
  179. * zynqmp_gqspi_write: For GQSPI controller write operation
  180. * @xqspi: Pointer to the zynqmp_qspi structure
  181. * @offset: Offset where to write
  182. * @val: Value to be written
  183. */
  184. static inline void zynqmp_gqspi_write(struct zynqmp_qspi *xqspi, u32 offset,
  185. u32 val)
  186. {
  187. writel_relaxed(val, (xqspi->regs + offset));
  188. }
  189. /**
  190. * zynqmp_gqspi_selectslave: For selection of slave device
  191. * @instanceptr: Pointer to the zynqmp_qspi structure
  192. * @flashcs: For chip select
  193. * @flashbus: To check which bus is selected- upper or lower
  194. */
  195. static void zynqmp_gqspi_selectslave(struct zynqmp_qspi *instanceptr,
  196. u8 slavecs, u8 slavebus)
  197. {
  198. /*
  199. * Bus and CS lines selected here will be updated in the instance and
  200. * used for subsequent GENFIFO entries during transfer.
  201. */
  202. /* Choose slave select line */
  203. switch (slavecs) {
  204. case GQSPI_SELECT_FLASH_CS_BOTH:
  205. instanceptr->genfifocs = GQSPI_GENFIFO_CS_LOWER |
  206. GQSPI_GENFIFO_CS_UPPER;
  207. break;
  208. case GQSPI_SELECT_FLASH_CS_UPPER:
  209. instanceptr->genfifocs = GQSPI_GENFIFO_CS_UPPER;
  210. break;
  211. case GQSPI_SELECT_FLASH_CS_LOWER:
  212. instanceptr->genfifocs = GQSPI_GENFIFO_CS_LOWER;
  213. break;
  214. default:
  215. dev_warn(instanceptr->dev, "Invalid slave select\n");
  216. }
  217. /* Choose the bus */
  218. switch (slavebus) {
  219. case GQSPI_SELECT_FLASH_BUS_BOTH:
  220. instanceptr->genfifobus = GQSPI_GENFIFO_BUS_LOWER |
  221. GQSPI_GENFIFO_BUS_UPPER;
  222. break;
  223. case GQSPI_SELECT_FLASH_BUS_UPPER:
  224. instanceptr->genfifobus = GQSPI_GENFIFO_BUS_UPPER;
  225. break;
  226. case GQSPI_SELECT_FLASH_BUS_LOWER:
  227. instanceptr->genfifobus = GQSPI_GENFIFO_BUS_LOWER;
  228. break;
  229. default:
  230. dev_warn(instanceptr->dev, "Invalid slave bus\n");
  231. }
  232. }
  233. /**
  234. * zynqmp_qspi_init_hw: Initialize the hardware
  235. * @xqspi: Pointer to the zynqmp_qspi structure
  236. *
  237. * The default settings of the QSPI controller's configurable parameters on
  238. * reset are
  239. * - Master mode
  240. * - TX threshold set to 1
  241. * - RX threshold set to 1
  242. * - Flash memory interface mode enabled
  243. * This function performs the following actions
  244. * - Disable and clear all the interrupts
  245. * - Enable manual slave select
  246. * - Enable manual start
  247. * - Deselect all the chip select lines
  248. * - Set the little endian mode of TX FIFO and
  249. * - Enable the QSPI controller
  250. */
  251. static void zynqmp_qspi_init_hw(struct zynqmp_qspi *xqspi)
  252. {
  253. u32 config_reg;
  254. /* Select the GQSPI mode */
  255. zynqmp_gqspi_write(xqspi, GQSPI_SEL_OFST, GQSPI_SEL_MASK);
  256. /* Clear and disable interrupts */
  257. zynqmp_gqspi_write(xqspi, GQSPI_ISR_OFST,
  258. zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST) |
  259. GQSPI_ISR_WR_TO_CLR_MASK);
  260. /* Clear the DMA STS */
  261. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_I_STS_OFST,
  262. zynqmp_gqspi_read(xqspi,
  263. GQSPI_QSPIDMA_DST_I_STS_OFST));
  264. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_STS_OFST,
  265. zynqmp_gqspi_read(xqspi,
  266. GQSPI_QSPIDMA_DST_STS_OFST) |
  267. GQSPI_QSPIDMA_DST_STS_WTC);
  268. zynqmp_gqspi_write(xqspi, GQSPI_IDR_OFST, GQSPI_IDR_ALL_MASK);
  269. zynqmp_gqspi_write(xqspi,
  270. GQSPI_QSPIDMA_DST_I_DIS_OFST,
  271. GQSPI_QSPIDMA_DST_INTR_ALL_MASK);
  272. /* Disable the GQSPI */
  273. zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0);
  274. config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST);
  275. config_reg &= ~GQSPI_CFG_MODE_EN_MASK;
  276. /* Manual start */
  277. config_reg |= GQSPI_CFG_GEN_FIFO_START_MODE_MASK;
  278. /* Little endian by default */
  279. config_reg &= ~GQSPI_CFG_ENDIAN_MASK;
  280. /* Disable poll time out */
  281. config_reg &= ~GQSPI_CFG_EN_POLL_TO_MASK;
  282. /* Set hold bit */
  283. config_reg |= GQSPI_CFG_WP_HOLD_MASK;
  284. /* Clear pre-scalar by default */
  285. config_reg &= ~GQSPI_CFG_BAUD_RATE_DIV_MASK;
  286. /* CPHA 0 */
  287. config_reg &= ~GQSPI_CFG_CLK_PHA_MASK;
  288. /* CPOL 0 */
  289. config_reg &= ~GQSPI_CFG_CLK_POL_MASK;
  290. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg);
  291. /* Clear the TX and RX FIFO */
  292. zynqmp_gqspi_write(xqspi, GQSPI_FIFO_CTRL_OFST,
  293. GQSPI_FIFO_CTRL_RST_RX_FIFO_MASK |
  294. GQSPI_FIFO_CTRL_RST_TX_FIFO_MASK |
  295. GQSPI_FIFO_CTRL_RST_GEN_FIFO_MASK);
  296. /* Set by default to allow for high frequencies */
  297. zynqmp_gqspi_write(xqspi, GQSPI_LPBK_DLY_ADJ_OFST,
  298. zynqmp_gqspi_read(xqspi, GQSPI_LPBK_DLY_ADJ_OFST) |
  299. GQSPI_LPBK_DLY_ADJ_USE_LPBK_MASK);
  300. /* Reset thresholds */
  301. zynqmp_gqspi_write(xqspi, GQSPI_TX_THRESHOLD_OFST,
  302. GQSPI_TX_FIFO_THRESHOLD_RESET_VAL);
  303. zynqmp_gqspi_write(xqspi, GQSPI_RX_THRESHOLD_OFST,
  304. GQSPI_RX_FIFO_THRESHOLD);
  305. zynqmp_gqspi_write(xqspi, GQSPI_GF_THRESHOLD_OFST,
  306. GQSPI_GEN_FIFO_THRESHOLD_RESET_VAL);
  307. zynqmp_gqspi_selectslave(xqspi,
  308. GQSPI_SELECT_FLASH_CS_LOWER,
  309. GQSPI_SELECT_FLASH_BUS_LOWER);
  310. /* Initialize DMA */
  311. zynqmp_gqspi_write(xqspi,
  312. GQSPI_QSPIDMA_DST_CTRL_OFST,
  313. GQSPI_QSPIDMA_DST_CTRL_RESET_VAL);
  314. /* Enable the GQSPI */
  315. zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, GQSPI_EN_MASK);
  316. }
  317. /**
  318. * zynqmp_qspi_copy_read_data: Copy data to RX buffer
  319. * @xqspi: Pointer to the zynqmp_qspi structure
  320. * @data: The variable where data is stored
  321. * @size: Number of bytes to be copied from data to RX buffer
  322. */
  323. static void zynqmp_qspi_copy_read_data(struct zynqmp_qspi *xqspi,
  324. ulong data, u8 size)
  325. {
  326. memcpy(xqspi->rxbuf, &data, size);
  327. xqspi->rxbuf += size;
  328. xqspi->bytes_to_receive -= size;
  329. }
  330. /**
  331. * zynqmp_prepare_transfer_hardware: Prepares hardware for transfer.
  332. * @master: Pointer to the spi_master structure which provides
  333. * information about the controller.
  334. *
  335. * This function enables SPI master controller.
  336. *
  337. * Return: 0 on success; error value otherwise
  338. */
  339. static int zynqmp_prepare_transfer_hardware(struct spi_master *master)
  340. {
  341. struct zynqmp_qspi *xqspi = spi_master_get_devdata(master);
  342. int ret;
  343. ret = clk_enable(xqspi->refclk);
  344. if (ret)
  345. return ret;
  346. ret = clk_enable(xqspi->pclk);
  347. if (ret)
  348. goto clk_err;
  349. zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, GQSPI_EN_MASK);
  350. return 0;
  351. clk_err:
  352. clk_disable(xqspi->refclk);
  353. return ret;
  354. }
  355. /**
  356. * zynqmp_unprepare_transfer_hardware: Relaxes hardware after transfer
  357. * @master: Pointer to the spi_master structure which provides
  358. * information about the controller.
  359. *
  360. * This function disables the SPI master controller.
  361. *
  362. * Return: Always 0
  363. */
  364. static int zynqmp_unprepare_transfer_hardware(struct spi_master *master)
  365. {
  366. struct zynqmp_qspi *xqspi = spi_master_get_devdata(master);
  367. zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0);
  368. clk_disable(xqspi->refclk);
  369. clk_disable(xqspi->pclk);
  370. return 0;
  371. }
  372. /**
  373. * zynqmp_qspi_chipselect: Select or deselect the chip select line
  374. * @qspi: Pointer to the spi_device structure
  375. * @is_high: Select(0) or deselect (1) the chip select line
  376. */
  377. static void zynqmp_qspi_chipselect(struct spi_device *qspi, bool is_high)
  378. {
  379. struct zynqmp_qspi *xqspi = spi_master_get_devdata(qspi->master);
  380. ulong timeout;
  381. u32 genfifoentry = 0x0, statusreg;
  382. genfifoentry |= GQSPI_GENFIFO_MODE_SPI;
  383. genfifoentry |= xqspi->genfifobus;
  384. if (!is_high) {
  385. genfifoentry |= xqspi->genfifocs;
  386. genfifoentry |= GQSPI_GENFIFO_CS_SETUP;
  387. } else {
  388. genfifoentry |= GQSPI_GENFIFO_CS_HOLD;
  389. }
  390. zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry);
  391. /* Dummy generic FIFO entry */
  392. zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0);
  393. /* Manually start the generic FIFO command */
  394. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST,
  395. zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) |
  396. GQSPI_CFG_START_GEN_FIFO_MASK);
  397. timeout = jiffies + msecs_to_jiffies(1000);
  398. /* Wait until the generic FIFO command is empty */
  399. do {
  400. statusreg = zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST);
  401. if ((statusreg & GQSPI_ISR_GENFIFOEMPTY_MASK) &&
  402. (statusreg & GQSPI_ISR_TXEMPTY_MASK))
  403. break;
  404. else
  405. cpu_relax();
  406. } while (!time_after_eq(jiffies, timeout));
  407. if (time_after_eq(jiffies, timeout))
  408. dev_err(xqspi->dev, "Chip select timed out\n");
  409. }
  410. /**
  411. * zynqmp_qspi_setup_transfer: Configure QSPI controller for specified
  412. * transfer
  413. * @qspi: Pointer to the spi_device structure
  414. * @transfer: Pointer to the spi_transfer structure which provides
  415. * information about next transfer setup parameters
  416. *
  417. * Sets the operational mode of QSPI controller for the next QSPI transfer and
  418. * sets the requested clock frequency.
  419. *
  420. * Return: Always 0
  421. *
  422. * Note:
  423. * If the requested frequency is not an exact match with what can be
  424. * obtained using the pre-scalar value, the driver sets the clock
  425. * frequency which is lower than the requested frequency (maximum lower)
  426. * for the transfer.
  427. *
  428. * If the requested frequency is higher or lower than that is supported
  429. * by the QSPI controller the driver will set the highest or lowest
  430. * frequency supported by controller.
  431. */
  432. static int zynqmp_qspi_setup_transfer(struct spi_device *qspi,
  433. struct spi_transfer *transfer)
  434. {
  435. struct zynqmp_qspi *xqspi = spi_master_get_devdata(qspi->master);
  436. ulong clk_rate;
  437. u32 config_reg, req_hz, baud_rate_val = 0;
  438. if (transfer)
  439. req_hz = transfer->speed_hz;
  440. else
  441. req_hz = qspi->max_speed_hz;
  442. /* Set the clock frequency */
  443. /* If req_hz == 0, default to lowest speed */
  444. clk_rate = clk_get_rate(xqspi->refclk);
  445. while ((baud_rate_val < GQSPI_BAUD_DIV_MAX) &&
  446. (clk_rate /
  447. (GQSPI_BAUD_DIV_SHIFT << baud_rate_val)) > req_hz)
  448. baud_rate_val++;
  449. config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST);
  450. /* Set the QSPI clock phase and clock polarity */
  451. config_reg &= (~GQSPI_CFG_CLK_PHA_MASK) & (~GQSPI_CFG_CLK_POL_MASK);
  452. if (qspi->mode & SPI_CPHA)
  453. config_reg |= GQSPI_CFG_CLK_PHA_MASK;
  454. if (qspi->mode & SPI_CPOL)
  455. config_reg |= GQSPI_CFG_CLK_POL_MASK;
  456. config_reg &= ~GQSPI_CFG_BAUD_RATE_DIV_MASK;
  457. config_reg |= (baud_rate_val << GQSPI_CFG_BAUD_RATE_DIV_SHIFT);
  458. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg);
  459. return 0;
  460. }
  461. /**
  462. * zynqmp_qspi_setup: Configure the QSPI controller
  463. * @qspi: Pointer to the spi_device structure
  464. *
  465. * Sets the operational mode of QSPI controller for the next QSPI transfer,
  466. * baud rate and divisor value to setup the requested qspi clock.
  467. *
  468. * Return: 0 on success; error value otherwise.
  469. */
  470. static int zynqmp_qspi_setup(struct spi_device *qspi)
  471. {
  472. if (qspi->master->busy)
  473. return -EBUSY;
  474. return 0;
  475. }
  476. /**
  477. * zynqmp_qspi_filltxfifo: Fills the TX FIFO as long as there is room in
  478. * the FIFO or the bytes required to be
  479. * transmitted.
  480. * @xqspi: Pointer to the zynqmp_qspi structure
  481. * @size: Number of bytes to be copied from TX buffer to TX FIFO
  482. */
  483. static void zynqmp_qspi_filltxfifo(struct zynqmp_qspi *xqspi, int size)
  484. {
  485. u32 count = 0, intermediate;
  486. while ((xqspi->bytes_to_transfer > 0) && (count < size)) {
  487. memcpy(&intermediate, xqspi->txbuf, 4);
  488. zynqmp_gqspi_write(xqspi, GQSPI_TXD_OFST, intermediate);
  489. if (xqspi->bytes_to_transfer >= 4) {
  490. xqspi->txbuf += 4;
  491. xqspi->bytes_to_transfer -= 4;
  492. } else {
  493. xqspi->txbuf += xqspi->bytes_to_transfer;
  494. xqspi->bytes_to_transfer = 0;
  495. }
  496. count++;
  497. }
  498. }
  499. /**
  500. * zynqmp_qspi_readrxfifo: Fills the RX FIFO as long as there is room in
  501. * the FIFO.
  502. * @xqspi: Pointer to the zynqmp_qspi structure
  503. * @size: Number of bytes to be copied from RX buffer to RX FIFO
  504. */
  505. static void zynqmp_qspi_readrxfifo(struct zynqmp_qspi *xqspi, u32 size)
  506. {
  507. ulong data;
  508. int count = 0;
  509. while ((count < size) && (xqspi->bytes_to_receive > 0)) {
  510. if (xqspi->bytes_to_receive >= 4) {
  511. (*(u32 *) xqspi->rxbuf) =
  512. zynqmp_gqspi_read(xqspi, GQSPI_RXD_OFST);
  513. xqspi->rxbuf += 4;
  514. xqspi->bytes_to_receive -= 4;
  515. count += 4;
  516. } else {
  517. data = zynqmp_gqspi_read(xqspi, GQSPI_RXD_OFST);
  518. count += xqspi->bytes_to_receive;
  519. zynqmp_qspi_copy_read_data(xqspi, data,
  520. xqspi->bytes_to_receive);
  521. xqspi->bytes_to_receive = 0;
  522. }
  523. }
  524. }
  525. /**
  526. * zynqmp_process_dma_irq: Handler for DMA done interrupt of QSPI
  527. * controller
  528. * @xqspi: zynqmp_qspi instance pointer
  529. *
  530. * This function handles DMA interrupt only.
  531. */
  532. static void zynqmp_process_dma_irq(struct zynqmp_qspi *xqspi)
  533. {
  534. u32 config_reg, genfifoentry;
  535. dma_unmap_single(xqspi->dev, xqspi->dma_addr,
  536. xqspi->dma_rx_bytes, DMA_FROM_DEVICE);
  537. xqspi->rxbuf += xqspi->dma_rx_bytes;
  538. xqspi->bytes_to_receive -= xqspi->dma_rx_bytes;
  539. xqspi->dma_rx_bytes = 0;
  540. /* Disabling the DMA interrupts */
  541. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_I_DIS_OFST,
  542. GQSPI_QSPIDMA_DST_I_EN_DONE_MASK);
  543. if (xqspi->bytes_to_receive > 0) {
  544. /* Switch to IO mode,for remaining bytes to receive */
  545. config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST);
  546. config_reg &= ~GQSPI_CFG_MODE_EN_MASK;
  547. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg);
  548. /* Initiate the transfer of remaining bytes */
  549. genfifoentry = xqspi->genfifoentry;
  550. genfifoentry |= xqspi->bytes_to_receive;
  551. zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry);
  552. /* Dummy generic FIFO entry */
  553. zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0);
  554. /* Manual start */
  555. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST,
  556. (zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) |
  557. GQSPI_CFG_START_GEN_FIFO_MASK));
  558. /* Enable the RX interrupts for IO mode */
  559. zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST,
  560. GQSPI_IER_GENFIFOEMPTY_MASK |
  561. GQSPI_IER_RXNEMPTY_MASK |
  562. GQSPI_IER_RXEMPTY_MASK);
  563. }
  564. }
  565. /**
  566. * zynqmp_qspi_irq: Interrupt service routine of the QSPI controller
  567. * @irq: IRQ number
  568. * @dev_id: Pointer to the xqspi structure
  569. *
  570. * This function handles TX empty only.
  571. * On TX empty interrupt this function reads the received data from RX FIFO
  572. * and fills the TX FIFO if there is any data remaining to be transferred.
  573. *
  574. * Return: IRQ_HANDLED when interrupt is handled
  575. * IRQ_NONE otherwise.
  576. */
  577. static irqreturn_t zynqmp_qspi_irq(int irq, void *dev_id)
  578. {
  579. struct spi_master *master = dev_id;
  580. struct zynqmp_qspi *xqspi = spi_master_get_devdata(master);
  581. int ret = IRQ_NONE;
  582. u32 status, mask, dma_status = 0;
  583. status = zynqmp_gqspi_read(xqspi, GQSPI_ISR_OFST);
  584. zynqmp_gqspi_write(xqspi, GQSPI_ISR_OFST, status);
  585. mask = (status & ~(zynqmp_gqspi_read(xqspi, GQSPI_IMASK_OFST)));
  586. /* Read and clear DMA status */
  587. if (xqspi->mode == GQSPI_MODE_DMA) {
  588. dma_status =
  589. zynqmp_gqspi_read(xqspi, GQSPI_QSPIDMA_DST_I_STS_OFST);
  590. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_I_STS_OFST,
  591. dma_status);
  592. }
  593. if (mask & GQSPI_ISR_TXNOT_FULL_MASK) {
  594. zynqmp_qspi_filltxfifo(xqspi, GQSPI_TX_FIFO_FILL);
  595. ret = IRQ_HANDLED;
  596. }
  597. if (dma_status & GQSPI_QSPIDMA_DST_I_STS_DONE_MASK) {
  598. zynqmp_process_dma_irq(xqspi);
  599. ret = IRQ_HANDLED;
  600. } else if (!(mask & GQSPI_IER_RXEMPTY_MASK) &&
  601. (mask & GQSPI_IER_GENFIFOEMPTY_MASK)) {
  602. zynqmp_qspi_readrxfifo(xqspi, GQSPI_RX_FIFO_FILL);
  603. ret = IRQ_HANDLED;
  604. }
  605. if ((xqspi->bytes_to_receive == 0) && (xqspi->bytes_to_transfer == 0)
  606. && ((status & GQSPI_IRQ_MASK) == GQSPI_IRQ_MASK)) {
  607. zynqmp_gqspi_write(xqspi, GQSPI_IDR_OFST, GQSPI_ISR_IDR_MASK);
  608. spi_finalize_current_transfer(master);
  609. ret = IRQ_HANDLED;
  610. }
  611. return ret;
  612. }
  613. /**
  614. * zynqmp_qspi_selectspimode: Selects SPI mode - x1 or x2 or x4.
  615. * @xqspi: xqspi is a pointer to the GQSPI instance
  616. * @spimode: spimode - SPI or DUAL or QUAD.
  617. * Return: Mask to set desired SPI mode in GENFIFO entry.
  618. */
  619. static inline u32 zynqmp_qspi_selectspimode(struct zynqmp_qspi *xqspi,
  620. u8 spimode)
  621. {
  622. u32 mask = 0;
  623. switch (spimode) {
  624. case GQSPI_SELECT_MODE_DUALSPI:
  625. mask = GQSPI_GENFIFO_MODE_DUALSPI;
  626. break;
  627. case GQSPI_SELECT_MODE_QUADSPI:
  628. mask = GQSPI_GENFIFO_MODE_QUADSPI;
  629. break;
  630. case GQSPI_SELECT_MODE_SPI:
  631. mask = GQSPI_GENFIFO_MODE_SPI;
  632. break;
  633. default:
  634. dev_warn(xqspi->dev, "Invalid SPI mode\n");
  635. }
  636. return mask;
  637. }
  638. /**
  639. * zynq_qspi_setuprxdma: This function sets up the RX DMA operation
  640. * @xqspi: xqspi is a pointer to the GQSPI instance.
  641. */
  642. static void zynq_qspi_setuprxdma(struct zynqmp_qspi *xqspi)
  643. {
  644. u32 rx_bytes, rx_rem, config_reg;
  645. dma_addr_t addr;
  646. u64 dma_align = (u64)(uintptr_t)xqspi->rxbuf;
  647. if ((xqspi->bytes_to_receive < 8) ||
  648. ((dma_align & GQSPI_DMA_UNALIGN) != 0x0)) {
  649. /* Setting to IO mode */
  650. config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST);
  651. config_reg &= ~GQSPI_CFG_MODE_EN_MASK;
  652. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg);
  653. xqspi->mode = GQSPI_MODE_IO;
  654. xqspi->dma_rx_bytes = 0;
  655. return;
  656. }
  657. rx_rem = xqspi->bytes_to_receive % 4;
  658. rx_bytes = (xqspi->bytes_to_receive - rx_rem);
  659. addr = dma_map_single(xqspi->dev, (void *)xqspi->rxbuf,
  660. rx_bytes, DMA_FROM_DEVICE);
  661. if (dma_mapping_error(xqspi->dev, addr))
  662. dev_err(xqspi->dev, "ERR:rxdma:memory not mapped\n");
  663. xqspi->dma_rx_bytes = rx_bytes;
  664. xqspi->dma_addr = addr;
  665. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_ADDR_OFST,
  666. (u32)(addr & 0xffffffff));
  667. addr = ((addr >> 16) >> 16);
  668. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_ADDR_MSB_OFST,
  669. ((u32)addr) & 0xfff);
  670. /* Enabling the DMA mode */
  671. config_reg = zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST);
  672. config_reg &= ~GQSPI_CFG_MODE_EN_MASK;
  673. config_reg |= GQSPI_CFG_MODE_EN_DMA_MASK;
  674. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST, config_reg);
  675. /* Switch to DMA mode */
  676. xqspi->mode = GQSPI_MODE_DMA;
  677. /* Write the number of bytes to transfer */
  678. zynqmp_gqspi_write(xqspi, GQSPI_QSPIDMA_DST_SIZE_OFST, rx_bytes);
  679. }
  680. /**
  681. * zynqmp_qspi_txrxsetup: This function checks the TX/RX buffers in
  682. * the transfer and sets up the GENFIFO entries,
  683. * TX FIFO as required.
  684. * @xqspi: xqspi is a pointer to the GQSPI instance.
  685. * @transfer: It is a pointer to the structure containing transfer data.
  686. * @genfifoentry: genfifoentry is pointer to the variable in which
  687. * GENFIFO mask is returned to calling function
  688. */
  689. static void zynqmp_qspi_txrxsetup(struct zynqmp_qspi *xqspi,
  690. struct spi_transfer *transfer,
  691. u32 *genfifoentry)
  692. {
  693. u32 config_reg;
  694. /* Transmit */
  695. if ((xqspi->txbuf != NULL) && (xqspi->rxbuf == NULL)) {
  696. /* Setup data to be TXed */
  697. *genfifoentry &= ~GQSPI_GENFIFO_RX;
  698. *genfifoentry |= GQSPI_GENFIFO_DATA_XFER;
  699. *genfifoentry |= GQSPI_GENFIFO_TX;
  700. *genfifoentry |=
  701. zynqmp_qspi_selectspimode(xqspi, transfer->tx_nbits);
  702. xqspi->bytes_to_transfer = transfer->len;
  703. if (xqspi->mode == GQSPI_MODE_DMA) {
  704. config_reg = zynqmp_gqspi_read(xqspi,
  705. GQSPI_CONFIG_OFST);
  706. config_reg &= ~GQSPI_CFG_MODE_EN_MASK;
  707. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST,
  708. config_reg);
  709. xqspi->mode = GQSPI_MODE_IO;
  710. }
  711. zynqmp_qspi_filltxfifo(xqspi, GQSPI_TXD_DEPTH);
  712. /* Discard RX data */
  713. xqspi->bytes_to_receive = 0;
  714. } else if ((xqspi->txbuf == NULL) && (xqspi->rxbuf != NULL)) {
  715. /* Receive */
  716. /* TX auto fill */
  717. *genfifoentry &= ~GQSPI_GENFIFO_TX;
  718. /* Setup RX */
  719. *genfifoentry |= GQSPI_GENFIFO_DATA_XFER;
  720. *genfifoentry |= GQSPI_GENFIFO_RX;
  721. *genfifoentry |=
  722. zynqmp_qspi_selectspimode(xqspi, transfer->rx_nbits);
  723. xqspi->bytes_to_transfer = 0;
  724. xqspi->bytes_to_receive = transfer->len;
  725. zynq_qspi_setuprxdma(xqspi);
  726. }
  727. }
  728. /**
  729. * zynqmp_qspi_start_transfer: Initiates the QSPI transfer
  730. * @master: Pointer to the spi_master structure which provides
  731. * information about the controller.
  732. * @qspi: Pointer to the spi_device structure
  733. * @transfer: Pointer to the spi_transfer structure which provide information
  734. * about next transfer parameters
  735. *
  736. * This function fills the TX FIFO, starts the QSPI transfer, and waits for the
  737. * transfer to be completed.
  738. *
  739. * Return: Number of bytes transferred in the last transfer
  740. */
  741. static int zynqmp_qspi_start_transfer(struct spi_master *master,
  742. struct spi_device *qspi,
  743. struct spi_transfer *transfer)
  744. {
  745. struct zynqmp_qspi *xqspi = spi_master_get_devdata(master);
  746. u32 genfifoentry = 0x0, transfer_len;
  747. xqspi->txbuf = transfer->tx_buf;
  748. xqspi->rxbuf = transfer->rx_buf;
  749. zynqmp_qspi_setup_transfer(qspi, transfer);
  750. genfifoentry |= xqspi->genfifocs;
  751. genfifoentry |= xqspi->genfifobus;
  752. zynqmp_qspi_txrxsetup(xqspi, transfer, &genfifoentry);
  753. if (xqspi->mode == GQSPI_MODE_DMA)
  754. transfer_len = xqspi->dma_rx_bytes;
  755. else
  756. transfer_len = transfer->len;
  757. xqspi->genfifoentry = genfifoentry;
  758. if ((transfer_len) < GQSPI_GENFIFO_IMM_DATA_MASK) {
  759. genfifoentry &= ~GQSPI_GENFIFO_IMM_DATA_MASK;
  760. genfifoentry |= transfer_len;
  761. zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, genfifoentry);
  762. } else {
  763. int tempcount = transfer_len;
  764. u32 exponent = 8; /* 2^8 = 256 */
  765. u8 imm_data = tempcount & 0xFF;
  766. tempcount &= ~(tempcount & 0xFF);
  767. /* Immediate entry */
  768. if (tempcount != 0) {
  769. /* Exponent entries */
  770. genfifoentry |= GQSPI_GENFIFO_EXP;
  771. while (tempcount != 0) {
  772. if (tempcount & GQSPI_GENFIFO_EXP_START) {
  773. genfifoentry &=
  774. ~GQSPI_GENFIFO_IMM_DATA_MASK;
  775. genfifoentry |= exponent;
  776. zynqmp_gqspi_write(xqspi,
  777. GQSPI_GEN_FIFO_OFST,
  778. genfifoentry);
  779. }
  780. tempcount = tempcount >> 1;
  781. exponent++;
  782. }
  783. }
  784. if (imm_data != 0) {
  785. genfifoentry &= ~GQSPI_GENFIFO_EXP;
  786. genfifoentry &= ~GQSPI_GENFIFO_IMM_DATA_MASK;
  787. genfifoentry |= (u8) (imm_data & 0xFF);
  788. zynqmp_gqspi_write(xqspi,
  789. GQSPI_GEN_FIFO_OFST, genfifoentry);
  790. }
  791. }
  792. if ((xqspi->mode == GQSPI_MODE_IO) &&
  793. (xqspi->rxbuf != NULL)) {
  794. /* Dummy generic FIFO entry */
  795. zynqmp_gqspi_write(xqspi, GQSPI_GEN_FIFO_OFST, 0x0);
  796. }
  797. /* Since we are using manual mode */
  798. zynqmp_gqspi_write(xqspi, GQSPI_CONFIG_OFST,
  799. zynqmp_gqspi_read(xqspi, GQSPI_CONFIG_OFST) |
  800. GQSPI_CFG_START_GEN_FIFO_MASK);
  801. if (xqspi->txbuf != NULL)
  802. /* Enable interrupts for TX */
  803. zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST,
  804. GQSPI_IER_TXEMPTY_MASK |
  805. GQSPI_IER_GENFIFOEMPTY_MASK |
  806. GQSPI_IER_TXNOT_FULL_MASK);
  807. if (xqspi->rxbuf != NULL) {
  808. /* Enable interrupts for RX */
  809. if (xqspi->mode == GQSPI_MODE_DMA) {
  810. /* Enable DMA interrupts */
  811. zynqmp_gqspi_write(xqspi,
  812. GQSPI_QSPIDMA_DST_I_EN_OFST,
  813. GQSPI_QSPIDMA_DST_I_EN_DONE_MASK);
  814. } else {
  815. zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST,
  816. GQSPI_IER_GENFIFOEMPTY_MASK |
  817. GQSPI_IER_RXNEMPTY_MASK |
  818. GQSPI_IER_RXEMPTY_MASK);
  819. }
  820. }
  821. return transfer->len;
  822. }
  823. /**
  824. * zynqmp_qspi_suspend: Suspend method for the QSPI driver
  825. * @_dev: Address of the platform_device structure
  826. *
  827. * This function stops the QSPI driver queue and disables the QSPI controller
  828. *
  829. * Return: Always 0
  830. */
  831. static int __maybe_unused zynqmp_qspi_suspend(struct device *dev)
  832. {
  833. struct platform_device *pdev = to_platform_device(dev);
  834. struct spi_master *master = platform_get_drvdata(pdev);
  835. spi_master_suspend(master);
  836. zynqmp_unprepare_transfer_hardware(master);
  837. return 0;
  838. }
  839. /**
  840. * zynqmp_qspi_resume: Resume method for the QSPI driver
  841. * @dev: Address of the platform_device structure
  842. *
  843. * The function starts the QSPI driver queue and initializes the QSPI
  844. * controller
  845. *
  846. * Return: 0 on success; error value otherwise
  847. */
  848. static int __maybe_unused zynqmp_qspi_resume(struct device *dev)
  849. {
  850. struct platform_device *pdev = to_platform_device(dev);
  851. struct spi_master *master = platform_get_drvdata(pdev);
  852. struct zynqmp_qspi *xqspi = spi_master_get_devdata(master);
  853. int ret = 0;
  854. ret = clk_enable(xqspi->pclk);
  855. if (ret) {
  856. dev_err(dev, "Cannot enable APB clock.\n");
  857. return ret;
  858. }
  859. ret = clk_enable(xqspi->refclk);
  860. if (ret) {
  861. dev_err(dev, "Cannot enable device clock.\n");
  862. clk_disable(xqspi->pclk);
  863. return ret;
  864. }
  865. spi_master_resume(master);
  866. return 0;
  867. }
  868. static SIMPLE_DEV_PM_OPS(zynqmp_qspi_dev_pm_ops, zynqmp_qspi_suspend,
  869. zynqmp_qspi_resume);
  870. /**
  871. * zynqmp_qspi_probe: Probe method for the QSPI driver
  872. * @pdev: Pointer to the platform_device structure
  873. *
  874. * This function initializes the driver data structures and the hardware.
  875. *
  876. * Return: 0 on success; error value otherwise
  877. */
  878. static int zynqmp_qspi_probe(struct platform_device *pdev)
  879. {
  880. int ret = 0;
  881. struct spi_master *master;
  882. struct zynqmp_qspi *xqspi;
  883. struct resource *res;
  884. struct device *dev = &pdev->dev;
  885. master = spi_alloc_master(&pdev->dev, sizeof(*xqspi));
  886. if (!master)
  887. return -ENOMEM;
  888. xqspi = spi_master_get_devdata(master);
  889. master->dev.of_node = pdev->dev.of_node;
  890. platform_set_drvdata(pdev, master);
  891. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  892. xqspi->regs = devm_ioremap_resource(&pdev->dev, res);
  893. if (IS_ERR(xqspi->regs)) {
  894. ret = PTR_ERR(xqspi->regs);
  895. goto remove_master;
  896. }
  897. xqspi->dev = dev;
  898. xqspi->pclk = devm_clk_get(&pdev->dev, "pclk");
  899. if (IS_ERR(xqspi->pclk)) {
  900. dev_err(dev, "pclk clock not found.\n");
  901. ret = PTR_ERR(xqspi->pclk);
  902. goto remove_master;
  903. }
  904. ret = clk_prepare_enable(xqspi->pclk);
  905. if (ret) {
  906. dev_err(dev, "Unable to enable APB clock.\n");
  907. goto remove_master;
  908. }
  909. xqspi->refclk = devm_clk_get(&pdev->dev, "ref_clk");
  910. if (IS_ERR(xqspi->refclk)) {
  911. dev_err(dev, "ref_clk clock not found.\n");
  912. ret = PTR_ERR(xqspi->refclk);
  913. goto clk_dis_pclk;
  914. }
  915. ret = clk_prepare_enable(xqspi->refclk);
  916. if (ret) {
  917. dev_err(dev, "Unable to enable device clock.\n");
  918. goto clk_dis_pclk;
  919. }
  920. /* QSPI controller initializations */
  921. zynqmp_qspi_init_hw(xqspi);
  922. xqspi->irq = platform_get_irq(pdev, 0);
  923. if (xqspi->irq <= 0) {
  924. ret = -ENXIO;
  925. dev_err(dev, "irq resource not found\n");
  926. goto clk_dis_all;
  927. }
  928. ret = devm_request_irq(&pdev->dev, xqspi->irq, zynqmp_qspi_irq,
  929. 0, pdev->name, master);
  930. if (ret != 0) {
  931. ret = -ENXIO;
  932. dev_err(dev, "request_irq failed\n");
  933. goto clk_dis_all;
  934. }
  935. master->num_chipselect = GQSPI_DEFAULT_NUM_CS;
  936. master->setup = zynqmp_qspi_setup;
  937. master->set_cs = zynqmp_qspi_chipselect;
  938. master->transfer_one = zynqmp_qspi_start_transfer;
  939. master->prepare_transfer_hardware = zynqmp_prepare_transfer_hardware;
  940. master->unprepare_transfer_hardware =
  941. zynqmp_unprepare_transfer_hardware;
  942. master->max_speed_hz = clk_get_rate(xqspi->refclk) / 2;
  943. master->bits_per_word_mask = SPI_BPW_MASK(8);
  944. master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_RX_DUAL | SPI_RX_QUAD |
  945. SPI_TX_DUAL | SPI_TX_QUAD;
  946. if (master->dev.parent == NULL)
  947. master->dev.parent = &master->dev;
  948. ret = spi_register_master(master);
  949. if (ret)
  950. goto clk_dis_all;
  951. return 0;
  952. clk_dis_all:
  953. clk_disable_unprepare(xqspi->refclk);
  954. clk_dis_pclk:
  955. clk_disable_unprepare(xqspi->pclk);
  956. remove_master:
  957. spi_master_put(master);
  958. return ret;
  959. }
  960. /**
  961. * zynqmp_qspi_remove: Remove method for the QSPI driver
  962. * @pdev: Pointer to the platform_device structure
  963. *
  964. * This function is called if a device is physically removed from the system or
  965. * if the driver module is being unloaded. It frees all resources allocated to
  966. * the device.
  967. *
  968. * Return: 0 Always
  969. */
  970. static int zynqmp_qspi_remove(struct platform_device *pdev)
  971. {
  972. struct spi_master *master = platform_get_drvdata(pdev);
  973. struct zynqmp_qspi *xqspi = spi_master_get_devdata(master);
  974. zynqmp_gqspi_write(xqspi, GQSPI_EN_OFST, 0x0);
  975. clk_disable_unprepare(xqspi->refclk);
  976. clk_disable_unprepare(xqspi->pclk);
  977. spi_unregister_master(master);
  978. return 0;
  979. }
  980. static const struct of_device_id zynqmp_qspi_of_match[] = {
  981. { .compatible = "xlnx,zynqmp-qspi-1.0", },
  982. { /* End of table */ }
  983. };
  984. MODULE_DEVICE_TABLE(of, zynqmp_qspi_of_match);
  985. static struct platform_driver zynqmp_qspi_driver = {
  986. .probe = zynqmp_qspi_probe,
  987. .remove = zynqmp_qspi_remove,
  988. .driver = {
  989. .name = "zynqmp-qspi",
  990. .of_match_table = zynqmp_qspi_of_match,
  991. .pm = &zynqmp_qspi_dev_pm_ops,
  992. },
  993. };
  994. module_platform_driver(zynqmp_qspi_driver);
  995. MODULE_AUTHOR("Xilinx, Inc.");
  996. MODULE_DESCRIPTION("Xilinx Zynqmp QSPI driver");
  997. MODULE_LICENSE("GPL");