zynq_qspi.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2013 Xilinx, Inc.
  4. * (C) Copyright 2015 Jagan Teki <jteki@openedev.com>
  5. *
  6. * Xilinx Zynq Quad-SPI(QSPI) controller driver (master mode only)
  7. */
  8. #include <clk.h>
  9. #include <common.h>
  10. #include <dm.h>
  11. #include <dm/device_compat.h>
  12. #include <log.h>
  13. #include <malloc.h>
  14. #include <spi.h>
  15. #include <asm/global_data.h>
  16. #include <asm/io.h>
  17. #include <linux/bitops.h>
  18. #include <spi-mem.h>
  19. DECLARE_GLOBAL_DATA_PTR;
  20. /* zynq qspi register bit masks ZYNQ_QSPI_<REG>_<BIT>_MASK */
  21. #define ZYNQ_QSPI_CR_IFMODE_MASK BIT(31) /* Flash intrface mode*/
  22. #define ZYNQ_QSPI_CR_MSA_MASK BIT(15) /* Manual start enb */
  23. #define ZYNQ_QSPI_CR_MCS_MASK BIT(14) /* Manual chip select */
  24. #define ZYNQ_QSPI_CR_PCS_MASK BIT(10) /* Peri chip select */
  25. #define ZYNQ_QSPI_CR_FW_MASK GENMASK(7, 6) /* FIFO width */
  26. #define ZYNQ_QSPI_CR_SS_MASK GENMASK(13, 10) /* Slave Select */
  27. #define ZYNQ_QSPI_CR_BAUD_MASK GENMASK(5, 3) /* Baud rate div */
  28. #define ZYNQ_QSPI_CR_CPHA_MASK BIT(2) /* Clock phase */
  29. #define ZYNQ_QSPI_CR_CPOL_MASK BIT(1) /* Clock polarity */
  30. #define ZYNQ_QSPI_CR_MSTREN_MASK BIT(0) /* Mode select */
  31. #define ZYNQ_QSPI_IXR_RXNEMPTY_MASK BIT(4) /* RX_FIFO_not_empty */
  32. #define ZYNQ_QSPI_IXR_TXOW_MASK BIT(2) /* TX_FIFO_not_full */
  33. #define ZYNQ_QSPI_IXR_ALL_MASK GENMASK(6, 0) /* All IXR bits */
  34. #define ZYNQ_QSPI_ENR_SPI_EN_MASK BIT(0) /* SPI Enable */
  35. #define ZYNQ_QSPI_LQSPICFG_LQMODE_MASK BIT(31) /* Linear QSPI Mode */
  36. /* zynq qspi Transmit Data Register */
  37. #define ZYNQ_QSPI_TXD_00_00_OFFSET 0x1C /* Transmit 4-byte inst */
  38. #define ZYNQ_QSPI_TXD_00_01_OFFSET 0x80 /* Transmit 1-byte inst */
  39. #define ZYNQ_QSPI_TXD_00_10_OFFSET 0x84 /* Transmit 2-byte inst */
  40. #define ZYNQ_QSPI_TXD_00_11_OFFSET 0x88 /* Transmit 3-byte inst */
  41. #define ZYNQ_QSPI_TXFIFO_THRESHOLD 1 /* Tx FIFO threshold level*/
  42. #define ZYNQ_QSPI_RXFIFO_THRESHOLD 32 /* Rx FIFO threshold level */
  43. #define ZYNQ_QSPI_CR_BAUD_MAX 8 /* Baud rate divisor max val */
  44. #define ZYNQ_QSPI_CR_BAUD_SHIFT 3 /* Baud rate divisor shift */
  45. #define ZYNQ_QSPI_CR_SS_SHIFT 10 /* Slave select shift */
  46. #define ZYNQ_QSPI_MAX_BAUD_RATE 0x7
  47. #define ZYNQ_QSPI_DEFAULT_BAUD_RATE 0x2
  48. #define ZYNQ_QSPI_FIFO_DEPTH 63
  49. #define ZYNQ_QSPI_WAIT (CONFIG_SYS_HZ / 100) /* 10 ms */
  50. /* zynq qspi register set */
  51. struct zynq_qspi_regs {
  52. u32 cr; /* 0x00 */
  53. u32 isr; /* 0x04 */
  54. u32 ier; /* 0x08 */
  55. u32 idr; /* 0x0C */
  56. u32 imr; /* 0x10 */
  57. u32 enr; /* 0x14 */
  58. u32 dr; /* 0x18 */
  59. u32 txd0r; /* 0x1C */
  60. u32 drxr; /* 0x20 */
  61. u32 sicr; /* 0x24 */
  62. u32 txftr; /* 0x28 */
  63. u32 rxftr; /* 0x2C */
  64. u32 gpior; /* 0x30 */
  65. u32 reserved0[19];
  66. u32 txd1r; /* 0x80 */
  67. u32 txd2r; /* 0x84 */
  68. u32 txd3r; /* 0x88 */
  69. u32 reserved1[5];
  70. u32 lqspicfg; /* 0xA0 */
  71. u32 lqspists; /* 0xA4 */
  72. };
  73. /* zynq qspi platform data */
  74. struct zynq_qspi_plat {
  75. struct zynq_qspi_regs *regs;
  76. u32 frequency; /* input frequency */
  77. u32 speed_hz;
  78. };
  79. /* zynq qspi priv */
  80. struct zynq_qspi_priv {
  81. struct zynq_qspi_regs *regs;
  82. u8 cs;
  83. u8 mode;
  84. u8 fifo_depth;
  85. u32 freq; /* required frequency */
  86. u32 max_hz;
  87. const void *tx_buf;
  88. void *rx_buf;
  89. unsigned len;
  90. int bytes_to_transfer;
  91. int bytes_to_receive;
  92. unsigned int is_inst;
  93. unsigned cs_change:1;
  94. };
  95. static int zynq_qspi_of_to_plat(struct udevice *bus)
  96. {
  97. struct zynq_qspi_plat *plat = dev_get_plat(bus);
  98. const void *blob = gd->fdt_blob;
  99. int node = dev_of_offset(bus);
  100. plat->regs = (struct zynq_qspi_regs *)fdtdec_get_addr(blob,
  101. node, "reg");
  102. return 0;
  103. }
  104. /**
  105. * zynq_qspi_init_hw - Initialize the hardware
  106. * @priv: Pointer to the zynq_qspi_priv structure
  107. *
  108. * The default settings of the QSPI controller's configurable parameters on
  109. * reset are
  110. * - Master mode
  111. * - Baud rate divisor is set to 2
  112. * - Threshold value for TX FIFO not full interrupt is set to 1
  113. * - Flash memory interface mode enabled
  114. * - Size of the word to be transferred as 8 bit
  115. * This function performs the following actions
  116. * - Disable and clear all the interrupts
  117. * - Enable manual slave select
  118. * - Enable auto start
  119. * - Deselect all the chip select lines
  120. * - Set the size of the word to be transferred as 32 bit
  121. * - Set the little endian mode of TX FIFO and
  122. * - Enable the QSPI controller
  123. */
  124. static void zynq_qspi_init_hw(struct zynq_qspi_priv *priv)
  125. {
  126. struct zynq_qspi_regs *regs = priv->regs;
  127. u32 confr;
  128. /* Disable QSPI */
  129. writel(~ZYNQ_QSPI_ENR_SPI_EN_MASK, &regs->enr);
  130. /* Disable Interrupts */
  131. writel(ZYNQ_QSPI_IXR_ALL_MASK, &regs->idr);
  132. /* Clear the TX and RX threshold reg */
  133. writel(ZYNQ_QSPI_TXFIFO_THRESHOLD, &regs->txftr);
  134. writel(ZYNQ_QSPI_RXFIFO_THRESHOLD, &regs->rxftr);
  135. /* Clear the RX FIFO */
  136. while (readl(&regs->isr) & ZYNQ_QSPI_IXR_RXNEMPTY_MASK)
  137. readl(&regs->drxr);
  138. /* Clear Interrupts */
  139. writel(ZYNQ_QSPI_IXR_ALL_MASK, &regs->isr);
  140. /* Manual slave select and Auto start */
  141. confr = readl(&regs->cr);
  142. confr &= ~ZYNQ_QSPI_CR_MSA_MASK;
  143. confr |= ZYNQ_QSPI_CR_IFMODE_MASK | ZYNQ_QSPI_CR_MCS_MASK |
  144. ZYNQ_QSPI_CR_PCS_MASK | ZYNQ_QSPI_CR_FW_MASK |
  145. ZYNQ_QSPI_CR_MSTREN_MASK;
  146. writel(confr, &regs->cr);
  147. /* Disable the LQSPI feature */
  148. confr = readl(&regs->lqspicfg);
  149. confr &= ~ZYNQ_QSPI_LQSPICFG_LQMODE_MASK;
  150. writel(confr, &regs->lqspicfg);
  151. /* Enable SPI */
  152. writel(ZYNQ_QSPI_ENR_SPI_EN_MASK, &regs->enr);
  153. }
  154. static int zynq_qspi_child_pre_probe(struct udevice *bus)
  155. {
  156. struct spi_slave *slave = dev_get_parent_priv(bus);
  157. struct zynq_qspi_priv *priv = dev_get_priv(bus->parent);
  158. priv->max_hz = slave->max_hz;
  159. return 0;
  160. }
  161. static int zynq_qspi_probe(struct udevice *bus)
  162. {
  163. struct zynq_qspi_plat *plat = dev_get_plat(bus);
  164. struct zynq_qspi_priv *priv = dev_get_priv(bus);
  165. struct clk clk;
  166. unsigned long clock;
  167. int ret;
  168. priv->regs = plat->regs;
  169. priv->fifo_depth = ZYNQ_QSPI_FIFO_DEPTH;
  170. ret = clk_get_by_name(bus, "ref_clk", &clk);
  171. if (ret < 0) {
  172. dev_err(bus, "failed to get clock\n");
  173. return ret;
  174. }
  175. clock = clk_get_rate(&clk);
  176. if (IS_ERR_VALUE(clock)) {
  177. dev_err(bus, "failed to get rate\n");
  178. return clock;
  179. }
  180. ret = clk_enable(&clk);
  181. if (ret) {
  182. dev_err(bus, "failed to enable clock\n");
  183. return ret;
  184. }
  185. /* init the zynq spi hw */
  186. zynq_qspi_init_hw(priv);
  187. plat->frequency = clock;
  188. plat->speed_hz = plat->frequency / 2;
  189. debug("%s: max-frequency=%d\n", __func__, plat->speed_hz);
  190. return 0;
  191. }
  192. /**
  193. * zynq_qspi_read_data - Copy data to RX buffer
  194. * @priv: Pointer to the zynq_qspi_priv structure
  195. * @data: The 32 bit variable where data is stored
  196. * @size: Number of bytes to be copied from data to RX buffer
  197. */
  198. static void zynq_qspi_read_data(struct zynq_qspi_priv *priv, u32 data, u8 size)
  199. {
  200. u8 byte3;
  201. debug("%s: data 0x%04x rx_buf addr: 0x%08x size %d\n", __func__ ,
  202. data, (unsigned)(priv->rx_buf), size);
  203. if (priv->rx_buf) {
  204. switch (size) {
  205. case 1:
  206. *((u8 *)priv->rx_buf) = data;
  207. priv->rx_buf += 1;
  208. break;
  209. case 2:
  210. *((u8 *)priv->rx_buf) = data;
  211. priv->rx_buf += 1;
  212. *((u8 *)priv->rx_buf) = (u8)(data >> 8);
  213. priv->rx_buf += 1;
  214. break;
  215. case 3:
  216. *((u8 *)priv->rx_buf) = data;
  217. priv->rx_buf += 1;
  218. *((u8 *)priv->rx_buf) = (u8)(data >> 8);
  219. priv->rx_buf += 1;
  220. byte3 = (u8)(data >> 16);
  221. *((u8 *)priv->rx_buf) = byte3;
  222. priv->rx_buf += 1;
  223. break;
  224. case 4:
  225. /* Can not assume word aligned buffer */
  226. memcpy(priv->rx_buf, &data, size);
  227. priv->rx_buf += 4;
  228. break;
  229. default:
  230. /* This will never execute */
  231. break;
  232. }
  233. }
  234. priv->bytes_to_receive -= size;
  235. if (priv->bytes_to_receive < 0)
  236. priv->bytes_to_receive = 0;
  237. }
  238. /**
  239. * zynq_qspi_write_data - Copy data from TX buffer
  240. * @priv: Pointer to the zynq_qspi_priv structure
  241. * @data: Pointer to the 32 bit variable where data is to be copied
  242. * @size: Number of bytes to be copied from TX buffer to data
  243. */
  244. static void zynq_qspi_write_data(struct zynq_qspi_priv *priv,
  245. u32 *data, u8 size)
  246. {
  247. if (priv->tx_buf) {
  248. switch (size) {
  249. case 1:
  250. *data = *((u8 *)priv->tx_buf);
  251. priv->tx_buf += 1;
  252. *data |= 0xFFFFFF00;
  253. break;
  254. case 2:
  255. *data = *((u8 *)priv->tx_buf);
  256. priv->tx_buf += 1;
  257. *data |= (*((u8 *)priv->tx_buf) << 8);
  258. priv->tx_buf += 1;
  259. *data |= 0xFFFF0000;
  260. break;
  261. case 3:
  262. *data = *((u8 *)priv->tx_buf);
  263. priv->tx_buf += 1;
  264. *data |= (*((u8 *)priv->tx_buf) << 8);
  265. priv->tx_buf += 1;
  266. *data |= (*((u8 *)priv->tx_buf) << 16);
  267. priv->tx_buf += 1;
  268. *data |= 0xFF000000;
  269. break;
  270. case 4:
  271. /* Can not assume word aligned buffer */
  272. memcpy(data, priv->tx_buf, size);
  273. priv->tx_buf += 4;
  274. break;
  275. default:
  276. /* This will never execute */
  277. break;
  278. }
  279. } else {
  280. *data = 0;
  281. }
  282. debug("%s: data 0x%08x tx_buf addr: 0x%08x size %d\n", __func__,
  283. *data, (u32)priv->tx_buf, size);
  284. priv->bytes_to_transfer -= size;
  285. if (priv->bytes_to_transfer < 0)
  286. priv->bytes_to_transfer = 0;
  287. }
  288. /**
  289. * zynq_qspi_chipselect - Select or deselect the chip select line
  290. * @priv: Pointer to the zynq_qspi_priv structure
  291. * @is_on: Select(1) or deselect (0) the chip select line
  292. */
  293. static void zynq_qspi_chipselect(struct zynq_qspi_priv *priv, int is_on)
  294. {
  295. u32 confr;
  296. struct zynq_qspi_regs *regs = priv->regs;
  297. confr = readl(&regs->cr);
  298. if (is_on) {
  299. /* Select the slave */
  300. confr &= ~ZYNQ_QSPI_CR_SS_MASK;
  301. confr |= (~(1 << priv->cs) << ZYNQ_QSPI_CR_SS_SHIFT) &
  302. ZYNQ_QSPI_CR_SS_MASK;
  303. } else
  304. /* Deselect the slave */
  305. confr |= ZYNQ_QSPI_CR_SS_MASK;
  306. writel(confr, &regs->cr);
  307. }
  308. /**
  309. * zynq_qspi_fill_tx_fifo - Fills the TX FIFO with as many bytes as possible
  310. * @priv: Pointer to the zynq_qspi_priv structure
  311. * @size: Number of bytes to be copied to fifo
  312. */
  313. static void zynq_qspi_fill_tx_fifo(struct zynq_qspi_priv *priv, u32 size)
  314. {
  315. u32 data = 0;
  316. u32 fifocount = 0;
  317. unsigned len, offset;
  318. struct zynq_qspi_regs *regs = priv->regs;
  319. static const unsigned offsets[4] = {
  320. ZYNQ_QSPI_TXD_00_00_OFFSET, ZYNQ_QSPI_TXD_00_01_OFFSET,
  321. ZYNQ_QSPI_TXD_00_10_OFFSET, ZYNQ_QSPI_TXD_00_11_OFFSET };
  322. while ((fifocount < size) &&
  323. (priv->bytes_to_transfer > 0)) {
  324. if (priv->bytes_to_transfer >= 4) {
  325. if (priv->tx_buf) {
  326. memcpy(&data, priv->tx_buf, 4);
  327. priv->tx_buf += 4;
  328. } else {
  329. data = 0;
  330. }
  331. writel(data, &regs->txd0r);
  332. priv->bytes_to_transfer -= 4;
  333. fifocount++;
  334. } else {
  335. /* Write TXD1, TXD2, TXD3 only if TxFIFO is empty. */
  336. if (!(readl(&regs->isr)
  337. & ZYNQ_QSPI_IXR_TXOW_MASK) &&
  338. !priv->rx_buf)
  339. return;
  340. len = priv->bytes_to_transfer;
  341. zynq_qspi_write_data(priv, &data, len);
  342. offset = (priv->rx_buf) ? offsets[0] : offsets[len];
  343. writel(data, &regs->cr + (offset / 4));
  344. }
  345. }
  346. }
  347. /**
  348. * zynq_qspi_irq_poll - Interrupt service routine of the QSPI controller
  349. * @priv: Pointer to the zynq_qspi structure
  350. *
  351. * This function handles TX empty and Mode Fault interrupts only.
  352. * On TX empty interrupt this function reads the received data from RX FIFO and
  353. * fills the TX FIFO if there is any data remaining to be transferred.
  354. * On Mode Fault interrupt this function indicates that transfer is completed,
  355. * the SPI subsystem will identify the error as the remaining bytes to be
  356. * transferred is non-zero.
  357. *
  358. * returns: 0 for poll timeout
  359. * 1 transfer operation complete
  360. */
  361. static int zynq_qspi_irq_poll(struct zynq_qspi_priv *priv)
  362. {
  363. struct zynq_qspi_regs *regs = priv->regs;
  364. u32 rxindex = 0;
  365. u32 rxcount;
  366. u32 status, timeout;
  367. /* Poll until any of the interrupt status bits are set */
  368. timeout = get_timer(0);
  369. do {
  370. status = readl(&regs->isr);
  371. } while ((status == 0) &&
  372. (get_timer(timeout) < ZYNQ_QSPI_WAIT));
  373. if (status == 0) {
  374. printf("zynq_qspi_irq_poll: Timeout!\n");
  375. return -ETIMEDOUT;
  376. }
  377. writel(status, &regs->isr);
  378. /* Disable all interrupts */
  379. writel(ZYNQ_QSPI_IXR_ALL_MASK, &regs->idr);
  380. if ((status & ZYNQ_QSPI_IXR_TXOW_MASK) ||
  381. (status & ZYNQ_QSPI_IXR_RXNEMPTY_MASK)) {
  382. /*
  383. * This bit is set when Tx FIFO has < THRESHOLD entries. We have
  384. * the THRESHOLD value set to 1, so this bit indicates Tx FIFO
  385. * is empty
  386. */
  387. rxcount = priv->bytes_to_receive - priv->bytes_to_transfer;
  388. rxcount = (rxcount % 4) ? ((rxcount/4)+1) : (rxcount/4);
  389. while ((rxindex < rxcount) &&
  390. (rxindex < ZYNQ_QSPI_RXFIFO_THRESHOLD)) {
  391. /* Read out the data from the RX FIFO */
  392. u32 data;
  393. data = readl(&regs->drxr);
  394. if (priv->bytes_to_receive >= 4) {
  395. if (priv->rx_buf) {
  396. memcpy(priv->rx_buf, &data, 4);
  397. priv->rx_buf += 4;
  398. }
  399. priv->bytes_to_receive -= 4;
  400. } else {
  401. zynq_qspi_read_data(priv, data,
  402. priv->bytes_to_receive);
  403. }
  404. rxindex++;
  405. }
  406. if (priv->bytes_to_transfer) {
  407. /* There is more data to send */
  408. zynq_qspi_fill_tx_fifo(priv,
  409. ZYNQ_QSPI_RXFIFO_THRESHOLD);
  410. writel(ZYNQ_QSPI_IXR_ALL_MASK, &regs->ier);
  411. } else {
  412. /*
  413. * If transfer and receive is completed then only send
  414. * complete signal
  415. */
  416. if (!priv->bytes_to_receive) {
  417. /* return operation complete */
  418. writel(ZYNQ_QSPI_IXR_ALL_MASK,
  419. &regs->idr);
  420. return 1;
  421. }
  422. }
  423. }
  424. return 0;
  425. }
  426. /**
  427. * zynq_qspi_start_transfer - Initiates the QSPI transfer
  428. * @priv: Pointer to the zynq_qspi_priv structure
  429. *
  430. * This function fills the TX FIFO, starts the QSPI transfer, and waits for the
  431. * transfer to be completed.
  432. *
  433. * returns: Number of bytes transferred in the last transfer
  434. */
  435. static int zynq_qspi_start_transfer(struct zynq_qspi_priv *priv)
  436. {
  437. u32 data = 0;
  438. struct zynq_qspi_regs *regs = priv->regs;
  439. debug("%s: qspi: 0x%08x transfer: 0x%08x len: %d\n", __func__,
  440. (u32)priv, (u32)priv, priv->len);
  441. priv->bytes_to_transfer = priv->len;
  442. priv->bytes_to_receive = priv->len;
  443. if (priv->len < 4)
  444. zynq_qspi_fill_tx_fifo(priv, priv->len);
  445. else
  446. zynq_qspi_fill_tx_fifo(priv, priv->fifo_depth);
  447. writel(ZYNQ_QSPI_IXR_ALL_MASK, &regs->ier);
  448. /* wait for completion */
  449. do {
  450. data = zynq_qspi_irq_poll(priv);
  451. } while (data == 0);
  452. return (priv->len) - (priv->bytes_to_transfer);
  453. }
  454. static int zynq_qspi_transfer(struct zynq_qspi_priv *priv)
  455. {
  456. unsigned cs_change = 1;
  457. int status = 0;
  458. while (1) {
  459. /* Select the chip if required */
  460. if (cs_change)
  461. zynq_qspi_chipselect(priv, 1);
  462. cs_change = priv->cs_change;
  463. if (!priv->tx_buf && !priv->rx_buf && priv->len) {
  464. status = -1;
  465. break;
  466. }
  467. /* Request the transfer */
  468. if (priv->len) {
  469. status = zynq_qspi_start_transfer(priv);
  470. priv->is_inst = 0;
  471. }
  472. if (status != priv->len) {
  473. if (status > 0)
  474. status = -EMSGSIZE;
  475. debug("zynq_qspi_transfer:%d len:%d\n",
  476. status, priv->len);
  477. break;
  478. }
  479. status = 0;
  480. if (cs_change)
  481. /* Deselect the chip */
  482. zynq_qspi_chipselect(priv, 0);
  483. break;
  484. }
  485. return status;
  486. }
  487. static int zynq_qspi_claim_bus(struct udevice *dev)
  488. {
  489. struct udevice *bus = dev->parent;
  490. struct zynq_qspi_priv *priv = dev_get_priv(bus);
  491. struct zynq_qspi_regs *regs = priv->regs;
  492. writel(ZYNQ_QSPI_ENR_SPI_EN_MASK, &regs->enr);
  493. return 0;
  494. }
  495. static int zynq_qspi_release_bus(struct udevice *dev)
  496. {
  497. struct udevice *bus = dev->parent;
  498. struct zynq_qspi_priv *priv = dev_get_priv(bus);
  499. struct zynq_qspi_regs *regs = priv->regs;
  500. writel(~ZYNQ_QSPI_ENR_SPI_EN_MASK, &regs->enr);
  501. return 0;
  502. }
  503. static int zynq_qspi_xfer(struct udevice *dev, unsigned int bitlen,
  504. const void *dout, void *din, unsigned long flags)
  505. {
  506. struct udevice *bus = dev->parent;
  507. struct zynq_qspi_priv *priv = dev_get_priv(bus);
  508. struct dm_spi_slave_plat *slave_plat = dev_get_parent_plat(dev);
  509. priv->cs = slave_plat->cs;
  510. priv->tx_buf = dout;
  511. priv->rx_buf = din;
  512. priv->len = bitlen / 8;
  513. debug("zynq_qspi_xfer: bus:%i cs:%i bitlen:%i len:%i flags:%lx\n",
  514. dev_seq(bus), slave_plat->cs, bitlen, priv->len, flags);
  515. /*
  516. * Festering sore.
  517. * Assume that the beginning of a transfer with bits to
  518. * transmit must contain a device command.
  519. */
  520. if (dout && flags & SPI_XFER_BEGIN)
  521. priv->is_inst = 1;
  522. else
  523. priv->is_inst = 0;
  524. if (flags & SPI_XFER_END)
  525. priv->cs_change = 1;
  526. else
  527. priv->cs_change = 0;
  528. zynq_qspi_transfer(priv);
  529. return 0;
  530. }
  531. static int zynq_qspi_set_speed(struct udevice *bus, uint speed)
  532. {
  533. struct zynq_qspi_plat *plat = dev_get_plat(bus);
  534. struct zynq_qspi_priv *priv = dev_get_priv(bus);
  535. struct zynq_qspi_regs *regs = priv->regs;
  536. uint32_t confr;
  537. u8 baud_rate_val = 0;
  538. if (!speed || speed > priv->max_hz)
  539. speed = priv->max_hz;
  540. /* Set the clock frequency */
  541. confr = readl(&regs->cr);
  542. if (plat->speed_hz != speed) {
  543. while ((baud_rate_val < ZYNQ_QSPI_CR_BAUD_MAX) &&
  544. ((plat->frequency /
  545. (2 << baud_rate_val)) > speed))
  546. baud_rate_val++;
  547. if (baud_rate_val > ZYNQ_QSPI_MAX_BAUD_RATE)
  548. baud_rate_val = ZYNQ_QSPI_DEFAULT_BAUD_RATE;
  549. plat->speed_hz = speed / (2 << baud_rate_val);
  550. }
  551. confr &= ~ZYNQ_QSPI_CR_BAUD_MASK;
  552. confr |= (baud_rate_val << ZYNQ_QSPI_CR_BAUD_SHIFT);
  553. writel(confr, &regs->cr);
  554. priv->freq = speed;
  555. debug("%s: regs=%p, speed=%d\n", __func__, priv->regs, priv->freq);
  556. return 0;
  557. }
  558. static int zynq_qspi_set_mode(struct udevice *bus, uint mode)
  559. {
  560. struct zynq_qspi_priv *priv = dev_get_priv(bus);
  561. struct zynq_qspi_regs *regs = priv->regs;
  562. uint32_t confr;
  563. /* Set the SPI Clock phase and polarities */
  564. confr = readl(&regs->cr);
  565. confr &= ~(ZYNQ_QSPI_CR_CPHA_MASK | ZYNQ_QSPI_CR_CPOL_MASK);
  566. if (mode & SPI_CPHA)
  567. confr |= ZYNQ_QSPI_CR_CPHA_MASK;
  568. if (mode & SPI_CPOL)
  569. confr |= ZYNQ_QSPI_CR_CPOL_MASK;
  570. writel(confr, &regs->cr);
  571. priv->mode = mode;
  572. debug("%s: regs=%p, mode=%d\n", __func__, priv->regs, priv->mode);
  573. return 0;
  574. }
  575. static int zynq_qspi_exec_op(struct spi_slave *slave,
  576. const struct spi_mem_op *op)
  577. {
  578. int op_len, pos = 0, ret, i;
  579. unsigned int flag = 0;
  580. const u8 *tx_buf = NULL;
  581. u8 *rx_buf = NULL;
  582. if (op->data.nbytes) {
  583. if (op->data.dir == SPI_MEM_DATA_IN)
  584. rx_buf = op->data.buf.in;
  585. else
  586. tx_buf = op->data.buf.out;
  587. }
  588. op_len = op->cmd.nbytes + op->addr.nbytes + op->dummy.nbytes;
  589. u8 op_buf[op_len];
  590. op_buf[pos++] = op->cmd.opcode;
  591. if (op->addr.nbytes) {
  592. for (i = 0; i < op->addr.nbytes; i++)
  593. op_buf[pos + i] = op->addr.val >>
  594. (8 * (op->addr.nbytes - i - 1));
  595. pos += op->addr.nbytes;
  596. }
  597. if (op->dummy.nbytes)
  598. memset(op_buf + pos, 0xff, op->dummy.nbytes);
  599. /* 1st transfer: opcode + address + dummy cycles */
  600. /* Make sure to set END bit if no tx or rx data messages follow */
  601. if (!tx_buf && !rx_buf)
  602. flag |= SPI_XFER_END;
  603. ret = zynq_qspi_xfer(slave->dev, op_len * 8, op_buf, NULL,
  604. flag | SPI_XFER_BEGIN);
  605. if (ret)
  606. return ret;
  607. /* 2nd transfer: rx or tx data path */
  608. if (tx_buf || rx_buf) {
  609. ret = zynq_qspi_xfer(slave->dev, op->data.nbytes * 8, tx_buf,
  610. rx_buf, flag | SPI_XFER_END);
  611. if (ret)
  612. return ret;
  613. }
  614. spi_release_bus(slave);
  615. return 0;
  616. }
  617. static int zynq_qspi_check_buswidth(struct spi_slave *slave, u8 width)
  618. {
  619. u32 mode = slave->mode;
  620. switch (width) {
  621. case 1:
  622. return 0;
  623. case 2:
  624. if (mode & SPI_RX_DUAL)
  625. return 0;
  626. break;
  627. case 4:
  628. if (mode & SPI_RX_QUAD)
  629. return 0;
  630. break;
  631. }
  632. return -EOPNOTSUPP;
  633. }
  634. static bool zynq_qspi_mem_exec_op(struct spi_slave *slave,
  635. const struct spi_mem_op *op)
  636. {
  637. if (zynq_qspi_check_buswidth(slave, op->cmd.buswidth))
  638. return false;
  639. if (op->addr.nbytes &&
  640. zynq_qspi_check_buswidth(slave, op->addr.buswidth))
  641. return false;
  642. if (op->dummy.nbytes &&
  643. zynq_qspi_check_buswidth(slave, op->dummy.buswidth))
  644. return false;
  645. if (op->data.dir != SPI_MEM_NO_DATA &&
  646. zynq_qspi_check_buswidth(slave, op->data.buswidth))
  647. return false;
  648. return true;
  649. }
  650. static const struct spi_controller_mem_ops zynq_qspi_mem_ops = {
  651. .exec_op = zynq_qspi_exec_op,
  652. .supports_op = zynq_qspi_mem_exec_op,
  653. };
  654. static const struct dm_spi_ops zynq_qspi_ops = {
  655. .claim_bus = zynq_qspi_claim_bus,
  656. .release_bus = zynq_qspi_release_bus,
  657. .xfer = zynq_qspi_xfer,
  658. .set_speed = zynq_qspi_set_speed,
  659. .set_mode = zynq_qspi_set_mode,
  660. .mem_ops = &zynq_qspi_mem_ops,
  661. };
  662. static const struct udevice_id zynq_qspi_ids[] = {
  663. { .compatible = "xlnx,zynq-qspi-1.0" },
  664. { }
  665. };
  666. U_BOOT_DRIVER(zynq_qspi) = {
  667. .name = "zynq_qspi",
  668. .id = UCLASS_SPI,
  669. .of_match = zynq_qspi_ids,
  670. .ops = &zynq_qspi_ops,
  671. .of_to_plat = zynq_qspi_of_to_plat,
  672. .plat_auto = sizeof(struct zynq_qspi_plat),
  673. .priv_auto = sizeof(struct zynq_qspi_priv),
  674. .probe = zynq_qspi_probe,
  675. .child_pre_probe = zynq_qspi_child_pre_probe,
  676. };