netup_unidvb_spi.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * netup_unidvb_spi.c
  4. *
  5. * Internal SPI driver for NetUP Universal Dual DVB-CI
  6. *
  7. * Copyright (C) 2014 NetUP Inc.
  8. * Copyright (C) 2014 Sergey Kozlov <serjk@netup.ru>
  9. * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru>
  10. */
  11. #include "netup_unidvb.h"
  12. #include <linux/spi/spi.h>
  13. #include <linux/spi/flash.h>
  14. #include <linux/mtd/partitions.h>
  15. #include <mtd/mtd-abi.h>
  16. #define NETUP_SPI_CTRL_IRQ 0x1000
  17. #define NETUP_SPI_CTRL_IMASK 0x2000
  18. #define NETUP_SPI_CTRL_START 0x8000
  19. #define NETUP_SPI_CTRL_LAST_CS 0x4000
  20. #define NETUP_SPI_TIMEOUT 6000
  21. enum netup_spi_state {
  22. SPI_STATE_START,
  23. SPI_STATE_DONE,
  24. };
  25. struct netup_spi_regs {
  26. __u8 data[1024];
  27. __le16 control_stat;
  28. __le16 clock_divider;
  29. } __packed __aligned(1);
  30. struct netup_spi {
  31. struct device *dev;
  32. struct spi_controller *ctlr;
  33. struct netup_spi_regs __iomem *regs;
  34. u8 __iomem *mmio;
  35. spinlock_t lock;
  36. wait_queue_head_t waitq;
  37. enum netup_spi_state state;
  38. };
  39. static char netup_spi_name[64] = "fpga";
  40. static struct mtd_partition netup_spi_flash_partitions = {
  41. .name = netup_spi_name,
  42. .size = 0x1000000, /* 16MB */
  43. .offset = 0,
  44. .mask_flags = MTD_CAP_ROM
  45. };
  46. static struct flash_platform_data spi_flash_data = {
  47. .name = "netup0_m25p128",
  48. .parts = &netup_spi_flash_partitions,
  49. .nr_parts = 1,
  50. };
  51. static struct spi_board_info netup_spi_board = {
  52. .modalias = "m25p128",
  53. .max_speed_hz = 11000000,
  54. .chip_select = 0,
  55. .mode = SPI_MODE_0,
  56. .platform_data = &spi_flash_data,
  57. };
  58. irqreturn_t netup_spi_interrupt(struct netup_spi *spi)
  59. {
  60. u16 reg;
  61. unsigned long flags;
  62. if (!spi)
  63. return IRQ_NONE;
  64. spin_lock_irqsave(&spi->lock, flags);
  65. reg = readw(&spi->regs->control_stat);
  66. if (!(reg & NETUP_SPI_CTRL_IRQ)) {
  67. spin_unlock_irqrestore(&spi->lock, flags);
  68. dev_dbg(&spi->ctlr->dev,
  69. "%s(): not mine interrupt\n", __func__);
  70. return IRQ_NONE;
  71. }
  72. writew(reg | NETUP_SPI_CTRL_IRQ, &spi->regs->control_stat);
  73. reg = readw(&spi->regs->control_stat);
  74. writew(reg & ~NETUP_SPI_CTRL_IMASK, &spi->regs->control_stat);
  75. spi->state = SPI_STATE_DONE;
  76. wake_up(&spi->waitq);
  77. spin_unlock_irqrestore(&spi->lock, flags);
  78. dev_dbg(&spi->ctlr->dev,
  79. "%s(): SPI interrupt handled\n", __func__);
  80. return IRQ_HANDLED;
  81. }
  82. static int netup_spi_transfer(struct spi_controller *ctlr,
  83. struct spi_message *msg)
  84. {
  85. struct netup_spi *spi = spi_controller_get_devdata(ctlr);
  86. struct spi_transfer *t;
  87. int result = 0;
  88. u32 tr_size;
  89. /* reset CS */
  90. writew(NETUP_SPI_CTRL_LAST_CS, &spi->regs->control_stat);
  91. writew(0, &spi->regs->control_stat);
  92. list_for_each_entry(t, &msg->transfers, transfer_list) {
  93. tr_size = t->len;
  94. while (tr_size) {
  95. u32 frag_offset = t->len - tr_size;
  96. u32 frag_size = (tr_size > sizeof(spi->regs->data)) ?
  97. sizeof(spi->regs->data) : tr_size;
  98. int frag_last = 0;
  99. if (list_is_last(&t->transfer_list,
  100. &msg->transfers) &&
  101. frag_offset + frag_size == t->len) {
  102. frag_last = 1;
  103. }
  104. if (t->tx_buf) {
  105. memcpy_toio(spi->regs->data,
  106. t->tx_buf + frag_offset,
  107. frag_size);
  108. } else {
  109. memset_io(spi->regs->data,
  110. 0, frag_size);
  111. }
  112. spi->state = SPI_STATE_START;
  113. writew((frag_size & 0x3ff) |
  114. NETUP_SPI_CTRL_IMASK |
  115. NETUP_SPI_CTRL_START |
  116. (frag_last ? NETUP_SPI_CTRL_LAST_CS : 0),
  117. &spi->regs->control_stat);
  118. dev_dbg(&spi->ctlr->dev,
  119. "%s(): control_stat 0x%04x\n",
  120. __func__, readw(&spi->regs->control_stat));
  121. wait_event_timeout(spi->waitq,
  122. spi->state != SPI_STATE_START,
  123. msecs_to_jiffies(NETUP_SPI_TIMEOUT));
  124. if (spi->state == SPI_STATE_DONE) {
  125. if (t->rx_buf) {
  126. memcpy_fromio(t->rx_buf + frag_offset,
  127. spi->regs->data, frag_size);
  128. }
  129. } else {
  130. if (spi->state == SPI_STATE_START) {
  131. dev_dbg(&spi->ctlr->dev,
  132. "%s(): transfer timeout\n",
  133. __func__);
  134. } else {
  135. dev_dbg(&spi->ctlr->dev,
  136. "%s(): invalid state %d\n",
  137. __func__, spi->state);
  138. }
  139. result = -EIO;
  140. goto done;
  141. }
  142. tr_size -= frag_size;
  143. msg->actual_length += frag_size;
  144. }
  145. }
  146. done:
  147. msg->status = result;
  148. spi_finalize_current_message(ctlr);
  149. return result;
  150. }
  151. static int netup_spi_setup(struct spi_device *spi)
  152. {
  153. return 0;
  154. }
  155. int netup_spi_init(struct netup_unidvb_dev *ndev)
  156. {
  157. struct spi_controller *ctlr;
  158. struct netup_spi *nspi;
  159. ctlr = devm_spi_alloc_master(&ndev->pci_dev->dev,
  160. sizeof(struct netup_spi));
  161. if (!ctlr) {
  162. dev_err(&ndev->pci_dev->dev,
  163. "%s(): unable to alloc SPI master\n", __func__);
  164. return -EINVAL;
  165. }
  166. nspi = spi_controller_get_devdata(ctlr);
  167. ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
  168. ctlr->bus_num = -1;
  169. ctlr->num_chipselect = 1;
  170. ctlr->transfer_one_message = netup_spi_transfer;
  171. ctlr->setup = netup_spi_setup;
  172. spin_lock_init(&nspi->lock);
  173. init_waitqueue_head(&nspi->waitq);
  174. nspi->ctlr = ctlr;
  175. nspi->regs = (struct netup_spi_regs __iomem *)(ndev->bmmio0 + 0x4000);
  176. writew(2, &nspi->regs->clock_divider);
  177. writew(NETUP_UNIDVB_IRQ_SPI, ndev->bmmio0 + REG_IMASK_SET);
  178. ndev->spi = nspi;
  179. if (spi_register_controller(ctlr)) {
  180. ndev->spi = NULL;
  181. dev_err(&ndev->pci_dev->dev,
  182. "%s(): unable to register SPI bus\n", __func__);
  183. return -EINVAL;
  184. }
  185. snprintf(netup_spi_name,
  186. sizeof(netup_spi_name),
  187. "fpga_%02x:%02x.%01x",
  188. ndev->pci_bus,
  189. ndev->pci_slot,
  190. ndev->pci_func);
  191. if (!spi_new_device(ctlr, &netup_spi_board)) {
  192. spi_unregister_controller(ctlr);
  193. ndev->spi = NULL;
  194. dev_err(&ndev->pci_dev->dev,
  195. "%s(): unable to create SPI device\n", __func__);
  196. return -EINVAL;
  197. }
  198. dev_dbg(&ndev->pci_dev->dev, "%s(): SPI init OK\n", __func__);
  199. return 0;
  200. }
  201. void netup_spi_release(struct netup_unidvb_dev *ndev)
  202. {
  203. u16 reg;
  204. unsigned long flags;
  205. struct netup_spi *spi = ndev->spi;
  206. if (!spi)
  207. return;
  208. spi_unregister_controller(spi->ctlr);
  209. spin_lock_irqsave(&spi->lock, flags);
  210. reg = readw(&spi->regs->control_stat);
  211. writew(reg | NETUP_SPI_CTRL_IRQ, &spi->regs->control_stat);
  212. reg = readw(&spi->regs->control_stat);
  213. writew(reg & ~NETUP_SPI_CTRL_IMASK, &spi->regs->control_stat);
  214. spin_unlock_irqrestore(&spi->lock, flags);
  215. ndev->spi = NULL;
  216. }