kvaser_pciefd.c 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907
  1. // SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
  2. /* Copyright (C) 2018 KVASER AB, Sweden. All rights reserved.
  3. * Parts of this driver are based on the following:
  4. * - Kvaser linux pciefd driver (version 5.42)
  5. * - PEAK linux canfd driver
  6. */
  7. #include <linux/bitfield.h>
  8. #include <linux/can/dev.h>
  9. #include <linux/device.h>
  10. #include <linux/ethtool.h>
  11. #include <linux/iopoll.h>
  12. #include <linux/kernel.h>
  13. #include <linux/minmax.h>
  14. #include <linux/module.h>
  15. #include <linux/netdevice.h>
  16. #include <linux/pci.h>
  17. #include <linux/timer.h>
  18. #include <net/netdev_queues.h>
  19. MODULE_LICENSE("Dual BSD/GPL");
  20. MODULE_AUTHOR("Kvaser AB <support@kvaser.com>");
  21. MODULE_DESCRIPTION("CAN driver for Kvaser CAN/PCIe devices");
  22. #define KVASER_PCIEFD_DRV_NAME "kvaser_pciefd"
  23. #define KVASER_PCIEFD_WAIT_TIMEOUT msecs_to_jiffies(1000)
  24. #define KVASER_PCIEFD_BEC_POLL_FREQ (jiffies + msecs_to_jiffies(200))
  25. #define KVASER_PCIEFD_MAX_ERR_REP 256U
  26. #define KVASER_PCIEFD_CAN_TX_MAX_COUNT 17U
  27. #define KVASER_PCIEFD_MAX_CAN_CHANNELS 8UL
  28. #define KVASER_PCIEFD_DMA_COUNT 2U
  29. #define KVASER_PCIEFD_DMA_SIZE (4U * 1024U)
  30. #define KVASER_PCIEFD_VENDOR 0x1a07
  31. /* Altera based devices */
  32. #define KVASER_PCIEFD_4HS_DEVICE_ID 0x000d
  33. #define KVASER_PCIEFD_2HS_V2_DEVICE_ID 0x000e
  34. #define KVASER_PCIEFD_HS_V2_DEVICE_ID 0x000f
  35. #define KVASER_PCIEFD_MINIPCIE_HS_V2_DEVICE_ID 0x0010
  36. #define KVASER_PCIEFD_MINIPCIE_2HS_V2_DEVICE_ID 0x0011
  37. /* SmartFusion2 based devices */
  38. #define KVASER_PCIEFD_2CAN_V3_DEVICE_ID 0x0012
  39. #define KVASER_PCIEFD_1CAN_V3_DEVICE_ID 0x0013
  40. #define KVASER_PCIEFD_4CAN_V2_DEVICE_ID 0x0014
  41. #define KVASER_PCIEFD_MINIPCIE_2CAN_V3_DEVICE_ID 0x0015
  42. #define KVASER_PCIEFD_MINIPCIE_1CAN_V3_DEVICE_ID 0x0016
  43. /* Xilinx based devices */
  44. #define KVASER_PCIEFD_M2_4CAN_DEVICE_ID 0x0017
  45. #define KVASER_PCIEFD_8CAN_DEVICE_ID 0x0019
  46. /* Altera SerDes Enable 64-bit DMA address translation */
  47. #define KVASER_PCIEFD_ALTERA_DMA_64BIT BIT(0)
  48. /* SmartFusion2 SerDes LSB address translation mask */
  49. #define KVASER_PCIEFD_SF2_DMA_LSB_MASK GENMASK(31, 12)
  50. /* Xilinx SerDes LSB address translation mask */
  51. #define KVASER_PCIEFD_XILINX_DMA_LSB_MASK GENMASK(31, 12)
  52. /* Kvaser KCAN CAN controller registers */
  53. #define KVASER_PCIEFD_KCAN_FIFO_REG 0x100
  54. #define KVASER_PCIEFD_KCAN_FIFO_LAST_REG 0x180
  55. #define KVASER_PCIEFD_KCAN_CTRL_REG 0x2c0
  56. #define KVASER_PCIEFD_KCAN_CMD_REG 0x400
  57. #define KVASER_PCIEFD_KCAN_IEN_REG 0x408
  58. #define KVASER_PCIEFD_KCAN_IRQ_REG 0x410
  59. #define KVASER_PCIEFD_KCAN_TX_NR_PACKETS_REG 0x414
  60. #define KVASER_PCIEFD_KCAN_STAT_REG 0x418
  61. #define KVASER_PCIEFD_KCAN_MODE_REG 0x41c
  62. #define KVASER_PCIEFD_KCAN_BTRN_REG 0x420
  63. #define KVASER_PCIEFD_KCAN_BUS_LOAD_REG 0x424
  64. #define KVASER_PCIEFD_KCAN_BTRD_REG 0x428
  65. #define KVASER_PCIEFD_KCAN_PWM_REG 0x430
  66. /* System identification and information registers */
  67. #define KVASER_PCIEFD_SYSID_VERSION_REG 0x8
  68. #define KVASER_PCIEFD_SYSID_CANFREQ_REG 0xc
  69. #define KVASER_PCIEFD_SYSID_BUSFREQ_REG 0x10
  70. #define KVASER_PCIEFD_SYSID_BUILD_REG 0x14
  71. /* Shared receive buffer FIFO registers */
  72. #define KVASER_PCIEFD_SRB_FIFO_LAST_REG 0x1f4
  73. /* Shared receive buffer registers */
  74. #define KVASER_PCIEFD_SRB_CMD_REG 0x0
  75. #define KVASER_PCIEFD_SRB_IEN_REG 0x04
  76. #define KVASER_PCIEFD_SRB_IRQ_REG 0x0c
  77. #define KVASER_PCIEFD_SRB_STAT_REG 0x10
  78. #define KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG 0x14
  79. #define KVASER_PCIEFD_SRB_CTRL_REG 0x18
  80. /* System build information fields */
  81. #define KVASER_PCIEFD_SYSID_VERSION_NR_CHAN_MASK GENMASK(31, 24)
  82. #define KVASER_PCIEFD_SYSID_VERSION_MAJOR_MASK GENMASK(23, 16)
  83. #define KVASER_PCIEFD_SYSID_VERSION_MINOR_MASK GENMASK(7, 0)
  84. #define KVASER_PCIEFD_SYSID_BUILD_SEQ_MASK GENMASK(15, 1)
  85. /* Reset DMA buffer 0, 1 and FIFO offset */
  86. #define KVASER_PCIEFD_SRB_CMD_RDB1 BIT(5)
  87. #define KVASER_PCIEFD_SRB_CMD_RDB0 BIT(4)
  88. #define KVASER_PCIEFD_SRB_CMD_FOR BIT(0)
  89. /* DMA underflow, buffer 0 and 1 */
  90. #define KVASER_PCIEFD_SRB_IRQ_DUF1 BIT(13)
  91. #define KVASER_PCIEFD_SRB_IRQ_DUF0 BIT(12)
  92. /* DMA overflow, buffer 0 and 1 */
  93. #define KVASER_PCIEFD_SRB_IRQ_DOF1 BIT(11)
  94. #define KVASER_PCIEFD_SRB_IRQ_DOF0 BIT(10)
  95. /* DMA packet done, buffer 0 and 1 */
  96. #define KVASER_PCIEFD_SRB_IRQ_DPD1 BIT(9)
  97. #define KVASER_PCIEFD_SRB_IRQ_DPD0 BIT(8)
  98. /* Got DMA support */
  99. #define KVASER_PCIEFD_SRB_STAT_DMA BIT(24)
  100. /* DMA idle */
  101. #define KVASER_PCIEFD_SRB_STAT_DI BIT(15)
  102. /* SRB current packet level */
  103. #define KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK GENMASK(7, 0)
  104. /* DMA Enable */
  105. #define KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE BIT(0)
  106. /* KCAN CTRL packet types */
  107. #define KVASER_PCIEFD_KCAN_CTRL_TYPE_MASK GENMASK(31, 29)
  108. #define KVASER_PCIEFD_KCAN_CTRL_TYPE_EFLUSH 0x4
  109. #define KVASER_PCIEFD_KCAN_CTRL_TYPE_EFRAME 0x5
  110. /* Command sequence number */
  111. #define KVASER_PCIEFD_KCAN_CMD_SEQ_MASK GENMASK(23, 16)
  112. /* Command bits */
  113. #define KVASER_PCIEFD_KCAN_CMD_MASK GENMASK(5, 0)
  114. /* Abort, flush and reset */
  115. #define KVASER_PCIEFD_KCAN_CMD_AT BIT(1)
  116. /* Request status packet */
  117. #define KVASER_PCIEFD_KCAN_CMD_SRQ BIT(0)
  118. /* Transmitter unaligned */
  119. #define KVASER_PCIEFD_KCAN_IRQ_TAL BIT(17)
  120. /* Tx FIFO empty */
  121. #define KVASER_PCIEFD_KCAN_IRQ_TE BIT(16)
  122. /* Tx FIFO overflow */
  123. #define KVASER_PCIEFD_KCAN_IRQ_TOF BIT(15)
  124. /* Tx buffer flush done */
  125. #define KVASER_PCIEFD_KCAN_IRQ_TFD BIT(14)
  126. /* Abort done */
  127. #define KVASER_PCIEFD_KCAN_IRQ_ABD BIT(13)
  128. /* Rx FIFO overflow */
  129. #define KVASER_PCIEFD_KCAN_IRQ_ROF BIT(5)
  130. /* FDF bit when controller is in classic CAN mode */
  131. #define KVASER_PCIEFD_KCAN_IRQ_FDIC BIT(3)
  132. /* Bus parameter protection error */
  133. #define KVASER_PCIEFD_KCAN_IRQ_BPP BIT(2)
  134. /* Tx FIFO unaligned end */
  135. #define KVASER_PCIEFD_KCAN_IRQ_TAE BIT(1)
  136. /* Tx FIFO unaligned read */
  137. #define KVASER_PCIEFD_KCAN_IRQ_TAR BIT(0)
  138. /* Tx FIFO size */
  139. #define KVASER_PCIEFD_KCAN_TX_NR_PACKETS_MAX_MASK GENMASK(23, 16)
  140. /* Tx FIFO current packet level */
  141. #define KVASER_PCIEFD_KCAN_TX_NR_PACKETS_CURRENT_MASK GENMASK(7, 0)
  142. /* Current status packet sequence number */
  143. #define KVASER_PCIEFD_KCAN_STAT_SEQNO_MASK GENMASK(31, 24)
  144. /* Controller got CAN FD capability */
  145. #define KVASER_PCIEFD_KCAN_STAT_FD BIT(19)
  146. /* Controller got one-shot capability */
  147. #define KVASER_PCIEFD_KCAN_STAT_CAP BIT(16)
  148. /* Controller in reset mode */
  149. #define KVASER_PCIEFD_KCAN_STAT_IRM BIT(15)
  150. /* Reset mode request */
  151. #define KVASER_PCIEFD_KCAN_STAT_RMR BIT(14)
  152. /* Bus off */
  153. #define KVASER_PCIEFD_KCAN_STAT_BOFF BIT(11)
  154. /* Idle state. Controller in reset mode and no abort or flush pending */
  155. #define KVASER_PCIEFD_KCAN_STAT_IDLE BIT(10)
  156. /* Abort request */
  157. #define KVASER_PCIEFD_KCAN_STAT_AR BIT(7)
  158. /* Controller is bus off */
  159. #define KVASER_PCIEFD_KCAN_STAT_BUS_OFF_MASK \
  160. (KVASER_PCIEFD_KCAN_STAT_AR | KVASER_PCIEFD_KCAN_STAT_BOFF | \
  161. KVASER_PCIEFD_KCAN_STAT_RMR | KVASER_PCIEFD_KCAN_STAT_IRM)
  162. /* Classic CAN mode */
  163. #define KVASER_PCIEFD_KCAN_MODE_CCM BIT(31)
  164. /* Active error flag enable. Clear to force error passive */
  165. #define KVASER_PCIEFD_KCAN_MODE_EEN BIT(23)
  166. /* Acknowledgment packet type */
  167. #define KVASER_PCIEFD_KCAN_MODE_APT BIT(20)
  168. /* CAN FD non-ISO */
  169. #define KVASER_PCIEFD_KCAN_MODE_NIFDEN BIT(15)
  170. /* Error packet enable */
  171. #define KVASER_PCIEFD_KCAN_MODE_EPEN BIT(12)
  172. /* Listen only mode */
  173. #define KVASER_PCIEFD_KCAN_MODE_LOM BIT(9)
  174. /* Reset mode */
  175. #define KVASER_PCIEFD_KCAN_MODE_RM BIT(8)
  176. /* BTRN and BTRD fields */
  177. #define KVASER_PCIEFD_KCAN_BTRN_TSEG2_MASK GENMASK(30, 26)
  178. #define KVASER_PCIEFD_KCAN_BTRN_TSEG1_MASK GENMASK(25, 17)
  179. #define KVASER_PCIEFD_KCAN_BTRN_SJW_MASK GENMASK(16, 13)
  180. #define KVASER_PCIEFD_KCAN_BTRN_BRP_MASK GENMASK(12, 0)
  181. /* PWM Control fields */
  182. #define KVASER_PCIEFD_KCAN_PWM_TOP_MASK GENMASK(23, 16)
  183. #define KVASER_PCIEFD_KCAN_PWM_TRIGGER_MASK GENMASK(7, 0)
  184. /* KCAN packet type IDs */
  185. #define KVASER_PCIEFD_PACK_TYPE_DATA 0x0
  186. #define KVASER_PCIEFD_PACK_TYPE_ACK 0x1
  187. #define KVASER_PCIEFD_PACK_TYPE_TXRQ 0x2
  188. #define KVASER_PCIEFD_PACK_TYPE_ERROR 0x3
  189. #define KVASER_PCIEFD_PACK_TYPE_EFLUSH_ACK 0x4
  190. #define KVASER_PCIEFD_PACK_TYPE_EFRAME_ACK 0x5
  191. #define KVASER_PCIEFD_PACK_TYPE_ACK_DATA 0x6
  192. #define KVASER_PCIEFD_PACK_TYPE_STATUS 0x8
  193. #define KVASER_PCIEFD_PACK_TYPE_BUS_LOAD 0x9
  194. /* Common KCAN packet definitions, second word */
  195. #define KVASER_PCIEFD_PACKET_TYPE_MASK GENMASK(31, 28)
  196. #define KVASER_PCIEFD_PACKET_CHID_MASK GENMASK(27, 25)
  197. #define KVASER_PCIEFD_PACKET_SEQ_MASK GENMASK(7, 0)
  198. /* KCAN Transmit/Receive data packet, first word */
  199. #define KVASER_PCIEFD_RPACKET_IDE BIT(30)
  200. #define KVASER_PCIEFD_RPACKET_RTR BIT(29)
  201. #define KVASER_PCIEFD_RPACKET_ID_MASK GENMASK(28, 0)
  202. /* KCAN Transmit data packet, second word */
  203. #define KVASER_PCIEFD_TPACKET_AREQ BIT(31)
  204. #define KVASER_PCIEFD_TPACKET_SMS BIT(16)
  205. /* KCAN Transmit/Receive data packet, second word */
  206. #define KVASER_PCIEFD_RPACKET_FDF BIT(15)
  207. #define KVASER_PCIEFD_RPACKET_BRS BIT(14)
  208. #define KVASER_PCIEFD_RPACKET_ESI BIT(13)
  209. #define KVASER_PCIEFD_RPACKET_DLC_MASK GENMASK(11, 8)
  210. /* KCAN Transmit acknowledge packet, first word */
  211. #define KVASER_PCIEFD_APACKET_NACK BIT(11)
  212. #define KVASER_PCIEFD_APACKET_ABL BIT(10)
  213. #define KVASER_PCIEFD_APACKET_CT BIT(9)
  214. #define KVASER_PCIEFD_APACKET_FLU BIT(8)
  215. /* KCAN Status packet, first word */
  216. #define KVASER_PCIEFD_SPACK_RMCD BIT(22)
  217. #define KVASER_PCIEFD_SPACK_IRM BIT(21)
  218. #define KVASER_PCIEFD_SPACK_IDET BIT(20)
  219. #define KVASER_PCIEFD_SPACK_BOFF BIT(16)
  220. #define KVASER_PCIEFD_SPACK_RXERR_MASK GENMASK(15, 8)
  221. #define KVASER_PCIEFD_SPACK_TXERR_MASK GENMASK(7, 0)
  222. /* KCAN Status packet, second word */
  223. #define KVASER_PCIEFD_SPACK_EPLR BIT(24)
  224. #define KVASER_PCIEFD_SPACK_EWLR BIT(23)
  225. #define KVASER_PCIEFD_SPACK_AUTO BIT(21)
  226. /* KCAN Error detected packet, second word */
  227. #define KVASER_PCIEFD_EPACK_DIR_TX BIT(0)
  228. /* Macros for calculating addresses of registers */
  229. #define KVASER_PCIEFD_GET_BLOCK_ADDR(pcie, block) \
  230. ((pcie)->reg_base + (pcie)->driver_data->address_offset->block)
  231. #define KVASER_PCIEFD_PCI_IEN_ADDR(pcie) \
  232. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), pci_ien))
  233. #define KVASER_PCIEFD_PCI_IRQ_ADDR(pcie) \
  234. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), pci_irq))
  235. #define KVASER_PCIEFD_SERDES_ADDR(pcie) \
  236. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), serdes))
  237. #define KVASER_PCIEFD_SYSID_ADDR(pcie) \
  238. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), sysid))
  239. #define KVASER_PCIEFD_LOOPBACK_ADDR(pcie) \
  240. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), loopback))
  241. #define KVASER_PCIEFD_SRB_FIFO_ADDR(pcie) \
  242. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_srb_fifo))
  243. #define KVASER_PCIEFD_SRB_ADDR(pcie) \
  244. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_srb))
  245. #define KVASER_PCIEFD_KCAN_CH0_ADDR(pcie) \
  246. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_ch0))
  247. #define KVASER_PCIEFD_KCAN_CH1_ADDR(pcie) \
  248. (KVASER_PCIEFD_GET_BLOCK_ADDR((pcie), kcan_ch1))
  249. #define KVASER_PCIEFD_KCAN_CHANNEL_SPAN(pcie) \
  250. (KVASER_PCIEFD_KCAN_CH1_ADDR((pcie)) - KVASER_PCIEFD_KCAN_CH0_ADDR((pcie)))
  251. #define KVASER_PCIEFD_KCAN_CHX_ADDR(pcie, i) \
  252. (KVASER_PCIEFD_KCAN_CH0_ADDR((pcie)) + (i) * KVASER_PCIEFD_KCAN_CHANNEL_SPAN((pcie)))
  253. struct kvaser_pciefd;
  254. static void kvaser_pciefd_write_dma_map_altera(struct kvaser_pciefd *pcie,
  255. dma_addr_t addr, int index);
  256. static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
  257. dma_addr_t addr, int index);
  258. static void kvaser_pciefd_write_dma_map_xilinx(struct kvaser_pciefd *pcie,
  259. dma_addr_t addr, int index);
  260. struct kvaser_pciefd_address_offset {
  261. u32 serdes;
  262. u32 pci_ien;
  263. u32 pci_irq;
  264. u32 sysid;
  265. u32 loopback;
  266. u32 kcan_srb_fifo;
  267. u32 kcan_srb;
  268. u32 kcan_ch0;
  269. u32 kcan_ch1;
  270. };
  271. struct kvaser_pciefd_dev_ops {
  272. void (*kvaser_pciefd_write_dma_map)(struct kvaser_pciefd *pcie,
  273. dma_addr_t addr, int index);
  274. };
  275. struct kvaser_pciefd_irq_mask {
  276. u32 kcan_rx0;
  277. u32 kcan_tx[KVASER_PCIEFD_MAX_CAN_CHANNELS];
  278. u32 all;
  279. };
  280. struct kvaser_pciefd_driver_data {
  281. const struct kvaser_pciefd_address_offset *address_offset;
  282. const struct kvaser_pciefd_irq_mask *irq_mask;
  283. const struct kvaser_pciefd_dev_ops *ops;
  284. };
  285. static const struct kvaser_pciefd_address_offset kvaser_pciefd_altera_address_offset = {
  286. .serdes = 0x1000,
  287. .pci_ien = 0x50,
  288. .pci_irq = 0x40,
  289. .sysid = 0x1f020,
  290. .loopback = 0x1f000,
  291. .kcan_srb_fifo = 0x1f200,
  292. .kcan_srb = 0x1f400,
  293. .kcan_ch0 = 0x10000,
  294. .kcan_ch1 = 0x11000,
  295. };
  296. static const struct kvaser_pciefd_address_offset kvaser_pciefd_sf2_address_offset = {
  297. .serdes = 0x280c8,
  298. .pci_ien = 0x102004,
  299. .pci_irq = 0x102008,
  300. .sysid = 0x100000,
  301. .loopback = 0x103000,
  302. .kcan_srb_fifo = 0x120000,
  303. .kcan_srb = 0x121000,
  304. .kcan_ch0 = 0x140000,
  305. .kcan_ch1 = 0x142000,
  306. };
  307. static const struct kvaser_pciefd_address_offset kvaser_pciefd_xilinx_address_offset = {
  308. .serdes = 0x00208,
  309. .pci_ien = 0x102004,
  310. .pci_irq = 0x102008,
  311. .sysid = 0x100000,
  312. .loopback = 0x103000,
  313. .kcan_srb_fifo = 0x120000,
  314. .kcan_srb = 0x121000,
  315. .kcan_ch0 = 0x140000,
  316. .kcan_ch1 = 0x142000,
  317. };
  318. static const struct kvaser_pciefd_irq_mask kvaser_pciefd_altera_irq_mask = {
  319. .kcan_rx0 = BIT(4),
  320. .kcan_tx = { BIT(0), BIT(1), BIT(2), BIT(3) },
  321. .all = GENMASK(4, 0),
  322. };
  323. static const struct kvaser_pciefd_irq_mask kvaser_pciefd_sf2_irq_mask = {
  324. .kcan_rx0 = BIT(4),
  325. .kcan_tx = { BIT(16), BIT(17), BIT(18), BIT(19) },
  326. .all = GENMASK(19, 16) | BIT(4),
  327. };
  328. static const struct kvaser_pciefd_irq_mask kvaser_pciefd_xilinx_irq_mask = {
  329. .kcan_rx0 = BIT(4),
  330. .kcan_tx = { BIT(16), BIT(17), BIT(18), BIT(19), BIT(20), BIT(21), BIT(22), BIT(23) },
  331. .all = GENMASK(23, 16) | BIT(4),
  332. };
  333. static const struct kvaser_pciefd_dev_ops kvaser_pciefd_altera_dev_ops = {
  334. .kvaser_pciefd_write_dma_map = kvaser_pciefd_write_dma_map_altera,
  335. };
  336. static const struct kvaser_pciefd_dev_ops kvaser_pciefd_sf2_dev_ops = {
  337. .kvaser_pciefd_write_dma_map = kvaser_pciefd_write_dma_map_sf2,
  338. };
  339. static const struct kvaser_pciefd_dev_ops kvaser_pciefd_xilinx_dev_ops = {
  340. .kvaser_pciefd_write_dma_map = kvaser_pciefd_write_dma_map_xilinx,
  341. };
  342. static const struct kvaser_pciefd_driver_data kvaser_pciefd_altera_driver_data = {
  343. .address_offset = &kvaser_pciefd_altera_address_offset,
  344. .irq_mask = &kvaser_pciefd_altera_irq_mask,
  345. .ops = &kvaser_pciefd_altera_dev_ops,
  346. };
  347. static const struct kvaser_pciefd_driver_data kvaser_pciefd_sf2_driver_data = {
  348. .address_offset = &kvaser_pciefd_sf2_address_offset,
  349. .irq_mask = &kvaser_pciefd_sf2_irq_mask,
  350. .ops = &kvaser_pciefd_sf2_dev_ops,
  351. };
  352. static const struct kvaser_pciefd_driver_data kvaser_pciefd_xilinx_driver_data = {
  353. .address_offset = &kvaser_pciefd_xilinx_address_offset,
  354. .irq_mask = &kvaser_pciefd_xilinx_irq_mask,
  355. .ops = &kvaser_pciefd_xilinx_dev_ops,
  356. };
  357. struct kvaser_pciefd_can {
  358. struct can_priv can;
  359. struct kvaser_pciefd *kv_pcie;
  360. void __iomem *reg_base;
  361. struct can_berr_counter bec;
  362. u8 cmd_seq;
  363. u8 tx_max_count;
  364. u8 tx_idx;
  365. u8 ack_idx;
  366. int err_rep_cnt;
  367. unsigned int completed_tx_pkts;
  368. unsigned int completed_tx_bytes;
  369. spinlock_t lock; /* Locks sensitive registers (e.g. MODE) */
  370. struct timer_list bec_poll_timer;
  371. struct completion start_comp, flush_comp;
  372. };
  373. struct kvaser_pciefd {
  374. struct pci_dev *pci;
  375. void __iomem *reg_base;
  376. struct kvaser_pciefd_can *can[KVASER_PCIEFD_MAX_CAN_CHANNELS];
  377. const struct kvaser_pciefd_driver_data *driver_data;
  378. void *dma_data[KVASER_PCIEFD_DMA_COUNT];
  379. u8 nr_channels;
  380. u32 bus_freq;
  381. u32 freq;
  382. u32 freq_to_ticks_div;
  383. };
  384. struct kvaser_pciefd_rx_packet {
  385. u32 header[2];
  386. u64 timestamp;
  387. };
  388. struct kvaser_pciefd_tx_packet {
  389. u32 header[2];
  390. u8 data[64];
  391. };
  392. static const struct can_bittiming_const kvaser_pciefd_bittiming_const = {
  393. .name = KVASER_PCIEFD_DRV_NAME,
  394. .tseg1_min = 1,
  395. .tseg1_max = 512,
  396. .tseg2_min = 1,
  397. .tseg2_max = 32,
  398. .sjw_max = 16,
  399. .brp_min = 1,
  400. .brp_max = 8192,
  401. .brp_inc = 1,
  402. };
  403. static struct pci_device_id kvaser_pciefd_id_table[] = {
  404. {
  405. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_4HS_DEVICE_ID),
  406. .driver_data = (kernel_ulong_t)&kvaser_pciefd_altera_driver_data,
  407. },
  408. {
  409. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_2HS_V2_DEVICE_ID),
  410. .driver_data = (kernel_ulong_t)&kvaser_pciefd_altera_driver_data,
  411. },
  412. {
  413. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_HS_V2_DEVICE_ID),
  414. .driver_data = (kernel_ulong_t)&kvaser_pciefd_altera_driver_data,
  415. },
  416. {
  417. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_MINIPCIE_HS_V2_DEVICE_ID),
  418. .driver_data = (kernel_ulong_t)&kvaser_pciefd_altera_driver_data,
  419. },
  420. {
  421. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_MINIPCIE_2HS_V2_DEVICE_ID),
  422. .driver_data = (kernel_ulong_t)&kvaser_pciefd_altera_driver_data,
  423. },
  424. {
  425. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_2CAN_V3_DEVICE_ID),
  426. .driver_data = (kernel_ulong_t)&kvaser_pciefd_sf2_driver_data,
  427. },
  428. {
  429. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_1CAN_V3_DEVICE_ID),
  430. .driver_data = (kernel_ulong_t)&kvaser_pciefd_sf2_driver_data,
  431. },
  432. {
  433. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_4CAN_V2_DEVICE_ID),
  434. .driver_data = (kernel_ulong_t)&kvaser_pciefd_sf2_driver_data,
  435. },
  436. {
  437. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_MINIPCIE_2CAN_V3_DEVICE_ID),
  438. .driver_data = (kernel_ulong_t)&kvaser_pciefd_sf2_driver_data,
  439. },
  440. {
  441. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_MINIPCIE_1CAN_V3_DEVICE_ID),
  442. .driver_data = (kernel_ulong_t)&kvaser_pciefd_sf2_driver_data,
  443. },
  444. {
  445. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_M2_4CAN_DEVICE_ID),
  446. .driver_data = (kernel_ulong_t)&kvaser_pciefd_xilinx_driver_data,
  447. },
  448. {
  449. PCI_DEVICE(KVASER_PCIEFD_VENDOR, KVASER_PCIEFD_8CAN_DEVICE_ID),
  450. .driver_data = (kernel_ulong_t)&kvaser_pciefd_xilinx_driver_data,
  451. },
  452. {
  453. 0,
  454. },
  455. };
  456. MODULE_DEVICE_TABLE(pci, kvaser_pciefd_id_table);
  457. static inline void kvaser_pciefd_send_kcan_cmd(struct kvaser_pciefd_can *can, u32 cmd)
  458. {
  459. iowrite32(FIELD_PREP(KVASER_PCIEFD_KCAN_CMD_MASK, cmd) |
  460. FIELD_PREP(KVASER_PCIEFD_KCAN_CMD_SEQ_MASK, ++can->cmd_seq),
  461. can->reg_base + KVASER_PCIEFD_KCAN_CMD_REG);
  462. }
  463. static inline void kvaser_pciefd_request_status(struct kvaser_pciefd_can *can)
  464. {
  465. kvaser_pciefd_send_kcan_cmd(can, KVASER_PCIEFD_KCAN_CMD_SRQ);
  466. }
  467. static inline void kvaser_pciefd_abort_flush_reset(struct kvaser_pciefd_can *can)
  468. {
  469. kvaser_pciefd_send_kcan_cmd(can, KVASER_PCIEFD_KCAN_CMD_AT);
  470. }
  471. static void kvaser_pciefd_enable_err_gen(struct kvaser_pciefd_can *can)
  472. {
  473. u32 mode;
  474. unsigned long irq;
  475. spin_lock_irqsave(&can->lock, irq);
  476. mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  477. if (!(mode & KVASER_PCIEFD_KCAN_MODE_EPEN)) {
  478. mode |= KVASER_PCIEFD_KCAN_MODE_EPEN;
  479. iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  480. }
  481. spin_unlock_irqrestore(&can->lock, irq);
  482. }
  483. static void kvaser_pciefd_disable_err_gen(struct kvaser_pciefd_can *can)
  484. {
  485. u32 mode;
  486. unsigned long irq;
  487. spin_lock_irqsave(&can->lock, irq);
  488. mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  489. mode &= ~KVASER_PCIEFD_KCAN_MODE_EPEN;
  490. iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  491. spin_unlock_irqrestore(&can->lock, irq);
  492. }
  493. static inline void kvaser_pciefd_set_tx_irq(struct kvaser_pciefd_can *can)
  494. {
  495. u32 msk;
  496. msk = KVASER_PCIEFD_KCAN_IRQ_TE | KVASER_PCIEFD_KCAN_IRQ_ROF |
  497. KVASER_PCIEFD_KCAN_IRQ_TOF | KVASER_PCIEFD_KCAN_IRQ_ABD |
  498. KVASER_PCIEFD_KCAN_IRQ_TAE | KVASER_PCIEFD_KCAN_IRQ_TAL |
  499. KVASER_PCIEFD_KCAN_IRQ_FDIC | KVASER_PCIEFD_KCAN_IRQ_BPP |
  500. KVASER_PCIEFD_KCAN_IRQ_TAR;
  501. iowrite32(msk, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  502. }
  503. static inline void kvaser_pciefd_set_skb_timestamp(const struct kvaser_pciefd *pcie,
  504. struct sk_buff *skb, u64 timestamp)
  505. {
  506. skb_hwtstamps(skb)->hwtstamp =
  507. ns_to_ktime(div_u64(timestamp * 1000, pcie->freq_to_ticks_div));
  508. }
  509. static void kvaser_pciefd_setup_controller(struct kvaser_pciefd_can *can)
  510. {
  511. u32 mode;
  512. unsigned long irq;
  513. spin_lock_irqsave(&can->lock, irq);
  514. mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  515. if (can->can.ctrlmode & CAN_CTRLMODE_FD) {
  516. mode &= ~KVASER_PCIEFD_KCAN_MODE_CCM;
  517. if (can->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)
  518. mode |= KVASER_PCIEFD_KCAN_MODE_NIFDEN;
  519. else
  520. mode &= ~KVASER_PCIEFD_KCAN_MODE_NIFDEN;
  521. } else {
  522. mode |= KVASER_PCIEFD_KCAN_MODE_CCM;
  523. mode &= ~KVASER_PCIEFD_KCAN_MODE_NIFDEN;
  524. }
  525. if (can->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
  526. mode |= KVASER_PCIEFD_KCAN_MODE_LOM;
  527. else
  528. mode &= ~KVASER_PCIEFD_KCAN_MODE_LOM;
  529. mode |= KVASER_PCIEFD_KCAN_MODE_EEN;
  530. mode |= KVASER_PCIEFD_KCAN_MODE_EPEN;
  531. /* Use ACK packet type */
  532. mode &= ~KVASER_PCIEFD_KCAN_MODE_APT;
  533. mode &= ~KVASER_PCIEFD_KCAN_MODE_RM;
  534. iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  535. spin_unlock_irqrestore(&can->lock, irq);
  536. }
  537. static void kvaser_pciefd_start_controller_flush(struct kvaser_pciefd_can *can)
  538. {
  539. u32 status;
  540. unsigned long irq;
  541. spin_lock_irqsave(&can->lock, irq);
  542. iowrite32(GENMASK(31, 0), can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  543. iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD,
  544. can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  545. status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG);
  546. if (status & KVASER_PCIEFD_KCAN_STAT_IDLE) {
  547. /* If controller is already idle, run abort, flush and reset */
  548. kvaser_pciefd_abort_flush_reset(can);
  549. } else if (!(status & KVASER_PCIEFD_KCAN_STAT_RMR)) {
  550. u32 mode;
  551. /* Put controller in reset mode */
  552. mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  553. mode |= KVASER_PCIEFD_KCAN_MODE_RM;
  554. iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  555. }
  556. spin_unlock_irqrestore(&can->lock, irq);
  557. }
  558. static int kvaser_pciefd_bus_on(struct kvaser_pciefd_can *can)
  559. {
  560. u32 mode;
  561. unsigned long irq;
  562. del_timer(&can->bec_poll_timer);
  563. if (!completion_done(&can->flush_comp))
  564. kvaser_pciefd_start_controller_flush(can);
  565. if (!wait_for_completion_timeout(&can->flush_comp,
  566. KVASER_PCIEFD_WAIT_TIMEOUT)) {
  567. netdev_err(can->can.dev, "Timeout during bus on flush\n");
  568. return -ETIMEDOUT;
  569. }
  570. spin_lock_irqsave(&can->lock, irq);
  571. iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  572. iowrite32(GENMASK(31, 0), can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  573. iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD,
  574. can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  575. mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  576. mode &= ~KVASER_PCIEFD_KCAN_MODE_RM;
  577. iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  578. spin_unlock_irqrestore(&can->lock, irq);
  579. if (!wait_for_completion_timeout(&can->start_comp,
  580. KVASER_PCIEFD_WAIT_TIMEOUT)) {
  581. netdev_err(can->can.dev, "Timeout during bus on reset\n");
  582. return -ETIMEDOUT;
  583. }
  584. /* Reset interrupt handling */
  585. iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  586. iowrite32(GENMASK(31, 0), can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  587. kvaser_pciefd_set_tx_irq(can);
  588. kvaser_pciefd_setup_controller(can);
  589. can->can.state = CAN_STATE_ERROR_ACTIVE;
  590. netif_wake_queue(can->can.dev);
  591. can->bec.txerr = 0;
  592. can->bec.rxerr = 0;
  593. can->err_rep_cnt = 0;
  594. return 0;
  595. }
  596. static void kvaser_pciefd_pwm_stop(struct kvaser_pciefd_can *can)
  597. {
  598. u8 top;
  599. u32 pwm_ctrl;
  600. unsigned long irq;
  601. spin_lock_irqsave(&can->lock, irq);
  602. pwm_ctrl = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
  603. top = FIELD_GET(KVASER_PCIEFD_KCAN_PWM_TOP_MASK, pwm_ctrl);
  604. /* Set duty cycle to zero */
  605. pwm_ctrl |= FIELD_PREP(KVASER_PCIEFD_KCAN_PWM_TRIGGER_MASK, top);
  606. iowrite32(pwm_ctrl, can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
  607. spin_unlock_irqrestore(&can->lock, irq);
  608. }
  609. static void kvaser_pciefd_pwm_start(struct kvaser_pciefd_can *can)
  610. {
  611. int top, trigger;
  612. u32 pwm_ctrl;
  613. unsigned long irq;
  614. kvaser_pciefd_pwm_stop(can);
  615. spin_lock_irqsave(&can->lock, irq);
  616. /* Set frequency to 500 KHz */
  617. top = can->kv_pcie->bus_freq / (2 * 500000) - 1;
  618. pwm_ctrl = FIELD_PREP(KVASER_PCIEFD_KCAN_PWM_TRIGGER_MASK, top);
  619. pwm_ctrl |= FIELD_PREP(KVASER_PCIEFD_KCAN_PWM_TOP_MASK, top);
  620. iowrite32(pwm_ctrl, can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
  621. /* Set duty cycle to 95 */
  622. trigger = (100 * top - 95 * (top + 1) + 50) / 100;
  623. pwm_ctrl = FIELD_PREP(KVASER_PCIEFD_KCAN_PWM_TRIGGER_MASK, trigger);
  624. pwm_ctrl |= FIELD_PREP(KVASER_PCIEFD_KCAN_PWM_TOP_MASK, top);
  625. iowrite32(pwm_ctrl, can->reg_base + KVASER_PCIEFD_KCAN_PWM_REG);
  626. spin_unlock_irqrestore(&can->lock, irq);
  627. }
  628. static int kvaser_pciefd_open(struct net_device *netdev)
  629. {
  630. int ret;
  631. struct kvaser_pciefd_can *can = netdev_priv(netdev);
  632. can->tx_idx = 0;
  633. can->ack_idx = 0;
  634. ret = open_candev(netdev);
  635. if (ret)
  636. return ret;
  637. ret = kvaser_pciefd_bus_on(can);
  638. if (ret) {
  639. close_candev(netdev);
  640. return ret;
  641. }
  642. return 0;
  643. }
  644. static int kvaser_pciefd_stop(struct net_device *netdev)
  645. {
  646. struct kvaser_pciefd_can *can = netdev_priv(netdev);
  647. int ret = 0;
  648. /* Don't interrupt ongoing flush */
  649. if (!completion_done(&can->flush_comp))
  650. kvaser_pciefd_start_controller_flush(can);
  651. if (!wait_for_completion_timeout(&can->flush_comp,
  652. KVASER_PCIEFD_WAIT_TIMEOUT)) {
  653. netdev_err(can->can.dev, "Timeout during stop\n");
  654. ret = -ETIMEDOUT;
  655. } else {
  656. iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  657. del_timer(&can->bec_poll_timer);
  658. }
  659. can->can.state = CAN_STATE_STOPPED;
  660. netdev_reset_queue(netdev);
  661. close_candev(netdev);
  662. return ret;
  663. }
  664. static unsigned int kvaser_pciefd_tx_avail(const struct kvaser_pciefd_can *can)
  665. {
  666. return can->tx_max_count - (READ_ONCE(can->tx_idx) - READ_ONCE(can->ack_idx));
  667. }
  668. static int kvaser_pciefd_prepare_tx_packet(struct kvaser_pciefd_tx_packet *p,
  669. struct can_priv *can, u8 seq,
  670. struct sk_buff *skb)
  671. {
  672. struct canfd_frame *cf = (struct canfd_frame *)skb->data;
  673. int packet_size;
  674. memset(p, 0, sizeof(*p));
  675. if (can->ctrlmode & CAN_CTRLMODE_ONE_SHOT)
  676. p->header[1] |= KVASER_PCIEFD_TPACKET_SMS;
  677. if (cf->can_id & CAN_RTR_FLAG)
  678. p->header[0] |= KVASER_PCIEFD_RPACKET_RTR;
  679. if (cf->can_id & CAN_EFF_FLAG)
  680. p->header[0] |= KVASER_PCIEFD_RPACKET_IDE;
  681. p->header[0] |= FIELD_PREP(KVASER_PCIEFD_RPACKET_ID_MASK, cf->can_id);
  682. p->header[1] |= KVASER_PCIEFD_TPACKET_AREQ;
  683. if (can_is_canfd_skb(skb)) {
  684. p->header[1] |= FIELD_PREP(KVASER_PCIEFD_RPACKET_DLC_MASK,
  685. can_fd_len2dlc(cf->len));
  686. p->header[1] |= KVASER_PCIEFD_RPACKET_FDF;
  687. if (cf->flags & CANFD_BRS)
  688. p->header[1] |= KVASER_PCIEFD_RPACKET_BRS;
  689. if (cf->flags & CANFD_ESI)
  690. p->header[1] |= KVASER_PCIEFD_RPACKET_ESI;
  691. } else {
  692. p->header[1] |=
  693. FIELD_PREP(KVASER_PCIEFD_RPACKET_DLC_MASK,
  694. can_get_cc_dlc((struct can_frame *)cf, can->ctrlmode));
  695. }
  696. p->header[1] |= FIELD_PREP(KVASER_PCIEFD_PACKET_SEQ_MASK, seq);
  697. packet_size = cf->len;
  698. memcpy(p->data, cf->data, packet_size);
  699. return DIV_ROUND_UP(packet_size, 4);
  700. }
  701. static netdev_tx_t kvaser_pciefd_start_xmit(struct sk_buff *skb,
  702. struct net_device *netdev)
  703. {
  704. struct kvaser_pciefd_can *can = netdev_priv(netdev);
  705. struct kvaser_pciefd_tx_packet packet;
  706. unsigned int seq = can->tx_idx & (can->can.echo_skb_max - 1);
  707. unsigned int frame_len;
  708. int nr_words;
  709. if (can_dev_dropped_skb(netdev, skb))
  710. return NETDEV_TX_OK;
  711. if (!netif_subqueue_maybe_stop(netdev, 0, kvaser_pciefd_tx_avail(can), 1, 1))
  712. return NETDEV_TX_BUSY;
  713. nr_words = kvaser_pciefd_prepare_tx_packet(&packet, &can->can, seq, skb);
  714. /* Prepare and save echo skb in internal slot */
  715. WRITE_ONCE(can->can.echo_skb[seq], NULL);
  716. frame_len = can_skb_get_frame_len(skb);
  717. can_put_echo_skb(skb, netdev, seq, frame_len);
  718. netdev_sent_queue(netdev, frame_len);
  719. WRITE_ONCE(can->tx_idx, can->tx_idx + 1);
  720. /* Write header to fifo */
  721. iowrite32(packet.header[0],
  722. can->reg_base + KVASER_PCIEFD_KCAN_FIFO_REG);
  723. iowrite32(packet.header[1],
  724. can->reg_base + KVASER_PCIEFD_KCAN_FIFO_REG);
  725. if (nr_words) {
  726. u32 data_last = ((u32 *)packet.data)[nr_words - 1];
  727. /* Write data to fifo, except last word */
  728. iowrite32_rep(can->reg_base +
  729. KVASER_PCIEFD_KCAN_FIFO_REG, packet.data,
  730. nr_words - 1);
  731. /* Write last word to end of fifo */
  732. __raw_writel(data_last, can->reg_base +
  733. KVASER_PCIEFD_KCAN_FIFO_LAST_REG);
  734. } else {
  735. /* Complete write to fifo */
  736. __raw_writel(0, can->reg_base +
  737. KVASER_PCIEFD_KCAN_FIFO_LAST_REG);
  738. }
  739. netif_subqueue_maybe_stop(netdev, 0, kvaser_pciefd_tx_avail(can), 1, 1);
  740. return NETDEV_TX_OK;
  741. }
  742. static int kvaser_pciefd_set_bittiming(struct kvaser_pciefd_can *can, bool data)
  743. {
  744. u32 mode, test, btrn;
  745. unsigned long irq_flags;
  746. int ret;
  747. struct can_bittiming *bt;
  748. if (data)
  749. bt = &can->can.data_bittiming;
  750. else
  751. bt = &can->can.bittiming;
  752. btrn = FIELD_PREP(KVASER_PCIEFD_KCAN_BTRN_TSEG2_MASK, bt->phase_seg2 - 1) |
  753. FIELD_PREP(KVASER_PCIEFD_KCAN_BTRN_TSEG1_MASK, bt->prop_seg + bt->phase_seg1 - 1) |
  754. FIELD_PREP(KVASER_PCIEFD_KCAN_BTRN_SJW_MASK, bt->sjw - 1) |
  755. FIELD_PREP(KVASER_PCIEFD_KCAN_BTRN_BRP_MASK, bt->brp - 1);
  756. spin_lock_irqsave(&can->lock, irq_flags);
  757. mode = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  758. /* Put the circuit in reset mode */
  759. iowrite32(mode | KVASER_PCIEFD_KCAN_MODE_RM,
  760. can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  761. /* Can only set bittiming if in reset mode */
  762. ret = readl_poll_timeout(can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG,
  763. test, test & KVASER_PCIEFD_KCAN_MODE_RM, 0, 10);
  764. if (ret) {
  765. spin_unlock_irqrestore(&can->lock, irq_flags);
  766. return -EBUSY;
  767. }
  768. if (data)
  769. iowrite32(btrn, can->reg_base + KVASER_PCIEFD_KCAN_BTRD_REG);
  770. else
  771. iowrite32(btrn, can->reg_base + KVASER_PCIEFD_KCAN_BTRN_REG);
  772. /* Restore previous reset mode status */
  773. iowrite32(mode, can->reg_base + KVASER_PCIEFD_KCAN_MODE_REG);
  774. spin_unlock_irqrestore(&can->lock, irq_flags);
  775. return 0;
  776. }
  777. static int kvaser_pciefd_set_nominal_bittiming(struct net_device *ndev)
  778. {
  779. return kvaser_pciefd_set_bittiming(netdev_priv(ndev), false);
  780. }
  781. static int kvaser_pciefd_set_data_bittiming(struct net_device *ndev)
  782. {
  783. return kvaser_pciefd_set_bittiming(netdev_priv(ndev), true);
  784. }
  785. static int kvaser_pciefd_set_mode(struct net_device *ndev, enum can_mode mode)
  786. {
  787. struct kvaser_pciefd_can *can = netdev_priv(ndev);
  788. int ret = 0;
  789. switch (mode) {
  790. case CAN_MODE_START:
  791. if (!can->can.restart_ms)
  792. ret = kvaser_pciefd_bus_on(can);
  793. break;
  794. default:
  795. return -EOPNOTSUPP;
  796. }
  797. return ret;
  798. }
  799. static int kvaser_pciefd_get_berr_counter(const struct net_device *ndev,
  800. struct can_berr_counter *bec)
  801. {
  802. struct kvaser_pciefd_can *can = netdev_priv(ndev);
  803. bec->rxerr = can->bec.rxerr;
  804. bec->txerr = can->bec.txerr;
  805. return 0;
  806. }
  807. static void kvaser_pciefd_bec_poll_timer(struct timer_list *data)
  808. {
  809. struct kvaser_pciefd_can *can = from_timer(can, data, bec_poll_timer);
  810. kvaser_pciefd_enable_err_gen(can);
  811. kvaser_pciefd_request_status(can);
  812. can->err_rep_cnt = 0;
  813. }
  814. static const struct net_device_ops kvaser_pciefd_netdev_ops = {
  815. .ndo_open = kvaser_pciefd_open,
  816. .ndo_stop = kvaser_pciefd_stop,
  817. .ndo_eth_ioctl = can_eth_ioctl_hwts,
  818. .ndo_start_xmit = kvaser_pciefd_start_xmit,
  819. .ndo_change_mtu = can_change_mtu,
  820. };
  821. static const struct ethtool_ops kvaser_pciefd_ethtool_ops = {
  822. .get_ts_info = can_ethtool_op_get_ts_info_hwts,
  823. };
  824. static int kvaser_pciefd_setup_can_ctrls(struct kvaser_pciefd *pcie)
  825. {
  826. int i;
  827. for (i = 0; i < pcie->nr_channels; i++) {
  828. struct net_device *netdev;
  829. struct kvaser_pciefd_can *can;
  830. u32 status, tx_nr_packets_max;
  831. netdev = alloc_candev(sizeof(struct kvaser_pciefd_can),
  832. roundup_pow_of_two(KVASER_PCIEFD_CAN_TX_MAX_COUNT));
  833. if (!netdev)
  834. return -ENOMEM;
  835. can = netdev_priv(netdev);
  836. netdev->netdev_ops = &kvaser_pciefd_netdev_ops;
  837. netdev->ethtool_ops = &kvaser_pciefd_ethtool_ops;
  838. can->reg_base = KVASER_PCIEFD_KCAN_CHX_ADDR(pcie, i);
  839. can->kv_pcie = pcie;
  840. can->cmd_seq = 0;
  841. can->err_rep_cnt = 0;
  842. can->completed_tx_pkts = 0;
  843. can->completed_tx_bytes = 0;
  844. can->bec.txerr = 0;
  845. can->bec.rxerr = 0;
  846. can->can.dev->dev_port = i;
  847. init_completion(&can->start_comp);
  848. init_completion(&can->flush_comp);
  849. timer_setup(&can->bec_poll_timer, kvaser_pciefd_bec_poll_timer, 0);
  850. /* Disable Bus load reporting */
  851. iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_BUS_LOAD_REG);
  852. tx_nr_packets_max =
  853. FIELD_GET(KVASER_PCIEFD_KCAN_TX_NR_PACKETS_MAX_MASK,
  854. ioread32(can->reg_base + KVASER_PCIEFD_KCAN_TX_NR_PACKETS_REG));
  855. can->tx_max_count = min(KVASER_PCIEFD_CAN_TX_MAX_COUNT, tx_nr_packets_max - 1);
  856. can->can.clock.freq = pcie->freq;
  857. spin_lock_init(&can->lock);
  858. can->can.bittiming_const = &kvaser_pciefd_bittiming_const;
  859. can->can.data_bittiming_const = &kvaser_pciefd_bittiming_const;
  860. can->can.do_set_bittiming = kvaser_pciefd_set_nominal_bittiming;
  861. can->can.do_set_data_bittiming = kvaser_pciefd_set_data_bittiming;
  862. can->can.do_set_mode = kvaser_pciefd_set_mode;
  863. can->can.do_get_berr_counter = kvaser_pciefd_get_berr_counter;
  864. can->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
  865. CAN_CTRLMODE_FD |
  866. CAN_CTRLMODE_FD_NON_ISO |
  867. CAN_CTRLMODE_CC_LEN8_DLC;
  868. status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG);
  869. if (!(status & KVASER_PCIEFD_KCAN_STAT_FD)) {
  870. dev_err(&pcie->pci->dev,
  871. "CAN FD not supported as expected %d\n", i);
  872. free_candev(netdev);
  873. return -ENODEV;
  874. }
  875. if (status & KVASER_PCIEFD_KCAN_STAT_CAP)
  876. can->can.ctrlmode_supported |= CAN_CTRLMODE_ONE_SHOT;
  877. netdev->flags |= IFF_ECHO;
  878. SET_NETDEV_DEV(netdev, &pcie->pci->dev);
  879. iowrite32(GENMASK(31, 0), can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  880. iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD,
  881. can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  882. pcie->can[i] = can;
  883. kvaser_pciefd_pwm_start(can);
  884. }
  885. return 0;
  886. }
  887. static int kvaser_pciefd_reg_candev(struct kvaser_pciefd *pcie)
  888. {
  889. int i;
  890. for (i = 0; i < pcie->nr_channels; i++) {
  891. int ret = register_candev(pcie->can[i]->can.dev);
  892. if (ret) {
  893. int j;
  894. /* Unregister all successfully registered devices. */
  895. for (j = 0; j < i; j++)
  896. unregister_candev(pcie->can[j]->can.dev);
  897. return ret;
  898. }
  899. }
  900. return 0;
  901. }
  902. static void kvaser_pciefd_write_dma_map_altera(struct kvaser_pciefd *pcie,
  903. dma_addr_t addr, int index)
  904. {
  905. void __iomem *serdes_base;
  906. u32 word1, word2;
  907. if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT)) {
  908. word1 = lower_32_bits(addr) | KVASER_PCIEFD_ALTERA_DMA_64BIT;
  909. word2 = upper_32_bits(addr);
  910. } else {
  911. word1 = addr;
  912. word2 = 0;
  913. }
  914. serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x8 * index;
  915. iowrite32(word1, serdes_base);
  916. iowrite32(word2, serdes_base + 0x4);
  917. }
  918. static void kvaser_pciefd_write_dma_map_sf2(struct kvaser_pciefd *pcie,
  919. dma_addr_t addr, int index)
  920. {
  921. void __iomem *serdes_base;
  922. u32 lsb = addr & KVASER_PCIEFD_SF2_DMA_LSB_MASK;
  923. u32 msb = 0x0;
  924. if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))
  925. msb = upper_32_bits(addr);
  926. serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x10 * index;
  927. iowrite32(lsb, serdes_base);
  928. iowrite32(msb, serdes_base + 0x4);
  929. }
  930. static void kvaser_pciefd_write_dma_map_xilinx(struct kvaser_pciefd *pcie,
  931. dma_addr_t addr, int index)
  932. {
  933. void __iomem *serdes_base;
  934. u32 lsb = addr & KVASER_PCIEFD_XILINX_DMA_LSB_MASK;
  935. u32 msb = 0x0;
  936. if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))
  937. msb = upper_32_bits(addr);
  938. serdes_base = KVASER_PCIEFD_SERDES_ADDR(pcie) + 0x8 * index;
  939. iowrite32(msb, serdes_base);
  940. iowrite32(lsb, serdes_base + 0x4);
  941. }
  942. static int kvaser_pciefd_setup_dma(struct kvaser_pciefd *pcie)
  943. {
  944. int i;
  945. u32 srb_status;
  946. u32 srb_packet_count;
  947. dma_addr_t dma_addr[KVASER_PCIEFD_DMA_COUNT];
  948. /* Disable the DMA */
  949. iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
  950. dma_set_mask_and_coherent(&pcie->pci->dev, DMA_BIT_MASK(64));
  951. for (i = 0; i < KVASER_PCIEFD_DMA_COUNT; i++) {
  952. pcie->dma_data[i] = dmam_alloc_coherent(&pcie->pci->dev,
  953. KVASER_PCIEFD_DMA_SIZE,
  954. &dma_addr[i],
  955. GFP_KERNEL);
  956. if (!pcie->dma_data[i] || !dma_addr[i]) {
  957. dev_err(&pcie->pci->dev, "Rx dma_alloc(%u) failure\n",
  958. KVASER_PCIEFD_DMA_SIZE);
  959. return -ENOMEM;
  960. }
  961. pcie->driver_data->ops->kvaser_pciefd_write_dma_map(pcie, dma_addr[i], i);
  962. }
  963. /* Reset Rx FIFO, and both DMA buffers */
  964. iowrite32(KVASER_PCIEFD_SRB_CMD_FOR | KVASER_PCIEFD_SRB_CMD_RDB0 |
  965. KVASER_PCIEFD_SRB_CMD_RDB1,
  966. KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
  967. /* Empty Rx FIFO */
  968. srb_packet_count =
  969. FIELD_GET(KVASER_PCIEFD_SRB_RX_NR_PACKETS_MASK,
  970. ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) +
  971. KVASER_PCIEFD_SRB_RX_NR_PACKETS_REG));
  972. while (srb_packet_count) {
  973. /* Drop current packet in FIFO */
  974. ioread32(KVASER_PCIEFD_SRB_FIFO_ADDR(pcie) + KVASER_PCIEFD_SRB_FIFO_LAST_REG);
  975. srb_packet_count--;
  976. }
  977. srb_status = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_STAT_REG);
  978. if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DI)) {
  979. dev_err(&pcie->pci->dev, "DMA not idle before enabling\n");
  980. return -EIO;
  981. }
  982. /* Enable the DMA */
  983. iowrite32(KVASER_PCIEFD_SRB_CTRL_DMA_ENABLE,
  984. KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
  985. return 0;
  986. }
  987. static int kvaser_pciefd_setup_board(struct kvaser_pciefd *pcie)
  988. {
  989. u32 version, srb_status, build;
  990. version = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_VERSION_REG);
  991. pcie->nr_channels = min(KVASER_PCIEFD_MAX_CAN_CHANNELS,
  992. FIELD_GET(KVASER_PCIEFD_SYSID_VERSION_NR_CHAN_MASK, version));
  993. build = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_BUILD_REG);
  994. dev_dbg(&pcie->pci->dev, "Version %lu.%lu.%lu\n",
  995. FIELD_GET(KVASER_PCIEFD_SYSID_VERSION_MAJOR_MASK, version),
  996. FIELD_GET(KVASER_PCIEFD_SYSID_VERSION_MINOR_MASK, version),
  997. FIELD_GET(KVASER_PCIEFD_SYSID_BUILD_SEQ_MASK, build));
  998. srb_status = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_STAT_REG);
  999. if (!(srb_status & KVASER_PCIEFD_SRB_STAT_DMA)) {
  1000. dev_err(&pcie->pci->dev, "Hardware without DMA is not supported\n");
  1001. return -ENODEV;
  1002. }
  1003. pcie->bus_freq = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_BUSFREQ_REG);
  1004. pcie->freq = ioread32(KVASER_PCIEFD_SYSID_ADDR(pcie) + KVASER_PCIEFD_SYSID_CANFREQ_REG);
  1005. pcie->freq_to_ticks_div = pcie->freq / 1000000;
  1006. if (pcie->freq_to_ticks_div == 0)
  1007. pcie->freq_to_ticks_div = 1;
  1008. /* Turn off all loopback functionality */
  1009. iowrite32(0, KVASER_PCIEFD_LOOPBACK_ADDR(pcie));
  1010. return 0;
  1011. }
  1012. static int kvaser_pciefd_handle_data_packet(struct kvaser_pciefd *pcie,
  1013. struct kvaser_pciefd_rx_packet *p,
  1014. __le32 *data)
  1015. {
  1016. struct sk_buff *skb;
  1017. struct canfd_frame *cf;
  1018. struct can_priv *priv;
  1019. u8 ch_id = FIELD_GET(KVASER_PCIEFD_PACKET_CHID_MASK, p->header[1]);
  1020. u8 dlc;
  1021. if (ch_id >= pcie->nr_channels)
  1022. return -EIO;
  1023. priv = &pcie->can[ch_id]->can;
  1024. dlc = FIELD_GET(KVASER_PCIEFD_RPACKET_DLC_MASK, p->header[1]);
  1025. if (p->header[1] & KVASER_PCIEFD_RPACKET_FDF) {
  1026. skb = alloc_canfd_skb(priv->dev, &cf);
  1027. if (!skb) {
  1028. priv->dev->stats.rx_dropped++;
  1029. return 0;
  1030. }
  1031. cf->len = can_fd_dlc2len(dlc);
  1032. if (p->header[1] & KVASER_PCIEFD_RPACKET_BRS)
  1033. cf->flags |= CANFD_BRS;
  1034. if (p->header[1] & KVASER_PCIEFD_RPACKET_ESI)
  1035. cf->flags |= CANFD_ESI;
  1036. } else {
  1037. skb = alloc_can_skb(priv->dev, (struct can_frame **)&cf);
  1038. if (!skb) {
  1039. priv->dev->stats.rx_dropped++;
  1040. return 0;
  1041. }
  1042. can_frame_set_cc_len((struct can_frame *)cf, dlc, priv->ctrlmode);
  1043. }
  1044. cf->can_id = FIELD_GET(KVASER_PCIEFD_RPACKET_ID_MASK, p->header[0]);
  1045. if (p->header[0] & KVASER_PCIEFD_RPACKET_IDE)
  1046. cf->can_id |= CAN_EFF_FLAG;
  1047. if (p->header[0] & KVASER_PCIEFD_RPACKET_RTR) {
  1048. cf->can_id |= CAN_RTR_FLAG;
  1049. } else {
  1050. memcpy(cf->data, data, cf->len);
  1051. priv->dev->stats.rx_bytes += cf->len;
  1052. }
  1053. priv->dev->stats.rx_packets++;
  1054. kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
  1055. netif_rx(skb);
  1056. return 0;
  1057. }
  1058. static void kvaser_pciefd_change_state(struct kvaser_pciefd_can *can,
  1059. struct can_frame *cf,
  1060. enum can_state new_state,
  1061. enum can_state tx_state,
  1062. enum can_state rx_state)
  1063. {
  1064. can_change_state(can->can.dev, cf, tx_state, rx_state);
  1065. if (new_state == CAN_STATE_BUS_OFF) {
  1066. struct net_device *ndev = can->can.dev;
  1067. unsigned long irq_flags;
  1068. spin_lock_irqsave(&can->lock, irq_flags);
  1069. netif_stop_queue(can->can.dev);
  1070. spin_unlock_irqrestore(&can->lock, irq_flags);
  1071. /* Prevent CAN controller from auto recover from bus off */
  1072. if (!can->can.restart_ms) {
  1073. kvaser_pciefd_start_controller_flush(can);
  1074. can_bus_off(ndev);
  1075. }
  1076. }
  1077. }
  1078. static void kvaser_pciefd_packet_to_state(struct kvaser_pciefd_rx_packet *p,
  1079. struct can_berr_counter *bec,
  1080. enum can_state *new_state,
  1081. enum can_state *tx_state,
  1082. enum can_state *rx_state)
  1083. {
  1084. if (p->header[0] & KVASER_PCIEFD_SPACK_BOFF ||
  1085. p->header[0] & KVASER_PCIEFD_SPACK_IRM)
  1086. *new_state = CAN_STATE_BUS_OFF;
  1087. else if (bec->txerr >= 255 || bec->rxerr >= 255)
  1088. *new_state = CAN_STATE_BUS_OFF;
  1089. else if (p->header[1] & KVASER_PCIEFD_SPACK_EPLR)
  1090. *new_state = CAN_STATE_ERROR_PASSIVE;
  1091. else if (bec->txerr >= 128 || bec->rxerr >= 128)
  1092. *new_state = CAN_STATE_ERROR_PASSIVE;
  1093. else if (p->header[1] & KVASER_PCIEFD_SPACK_EWLR)
  1094. *new_state = CAN_STATE_ERROR_WARNING;
  1095. else if (bec->txerr >= 96 || bec->rxerr >= 96)
  1096. *new_state = CAN_STATE_ERROR_WARNING;
  1097. else
  1098. *new_state = CAN_STATE_ERROR_ACTIVE;
  1099. *tx_state = bec->txerr >= bec->rxerr ? *new_state : 0;
  1100. *rx_state = bec->txerr <= bec->rxerr ? *new_state : 0;
  1101. }
  1102. static int kvaser_pciefd_rx_error_frame(struct kvaser_pciefd_can *can,
  1103. struct kvaser_pciefd_rx_packet *p)
  1104. {
  1105. struct can_berr_counter bec;
  1106. enum can_state old_state, new_state, tx_state, rx_state;
  1107. struct net_device *ndev = can->can.dev;
  1108. struct sk_buff *skb;
  1109. struct can_frame *cf = NULL;
  1110. old_state = can->can.state;
  1111. bec.txerr = FIELD_GET(KVASER_PCIEFD_SPACK_TXERR_MASK, p->header[0]);
  1112. bec.rxerr = FIELD_GET(KVASER_PCIEFD_SPACK_RXERR_MASK, p->header[0]);
  1113. kvaser_pciefd_packet_to_state(p, &bec, &new_state, &tx_state, &rx_state);
  1114. skb = alloc_can_err_skb(ndev, &cf);
  1115. if (new_state != old_state) {
  1116. kvaser_pciefd_change_state(can, cf, new_state, tx_state, rx_state);
  1117. if (old_state == CAN_STATE_BUS_OFF &&
  1118. new_state == CAN_STATE_ERROR_ACTIVE &&
  1119. can->can.restart_ms) {
  1120. can->can.can_stats.restarts++;
  1121. if (skb)
  1122. cf->can_id |= CAN_ERR_RESTARTED;
  1123. }
  1124. }
  1125. can->err_rep_cnt++;
  1126. can->can.can_stats.bus_error++;
  1127. if (p->header[1] & KVASER_PCIEFD_EPACK_DIR_TX)
  1128. ndev->stats.tx_errors++;
  1129. else
  1130. ndev->stats.rx_errors++;
  1131. can->bec.txerr = bec.txerr;
  1132. can->bec.rxerr = bec.rxerr;
  1133. if (!skb) {
  1134. ndev->stats.rx_dropped++;
  1135. return -ENOMEM;
  1136. }
  1137. kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp);
  1138. cf->can_id |= CAN_ERR_BUSERROR | CAN_ERR_CNT;
  1139. cf->data[6] = bec.txerr;
  1140. cf->data[7] = bec.rxerr;
  1141. netif_rx(skb);
  1142. return 0;
  1143. }
  1144. static int kvaser_pciefd_handle_error_packet(struct kvaser_pciefd *pcie,
  1145. struct kvaser_pciefd_rx_packet *p)
  1146. {
  1147. struct kvaser_pciefd_can *can;
  1148. u8 ch_id = FIELD_GET(KVASER_PCIEFD_PACKET_CHID_MASK, p->header[1]);
  1149. if (ch_id >= pcie->nr_channels)
  1150. return -EIO;
  1151. can = pcie->can[ch_id];
  1152. kvaser_pciefd_rx_error_frame(can, p);
  1153. if (can->err_rep_cnt >= KVASER_PCIEFD_MAX_ERR_REP)
  1154. /* Do not report more errors, until bec_poll_timer expires */
  1155. kvaser_pciefd_disable_err_gen(can);
  1156. /* Start polling the error counters */
  1157. mod_timer(&can->bec_poll_timer, KVASER_PCIEFD_BEC_POLL_FREQ);
  1158. return 0;
  1159. }
  1160. static int kvaser_pciefd_handle_status_resp(struct kvaser_pciefd_can *can,
  1161. struct kvaser_pciefd_rx_packet *p)
  1162. {
  1163. struct can_berr_counter bec;
  1164. enum can_state old_state, new_state, tx_state, rx_state;
  1165. old_state = can->can.state;
  1166. bec.txerr = FIELD_GET(KVASER_PCIEFD_SPACK_TXERR_MASK, p->header[0]);
  1167. bec.rxerr = FIELD_GET(KVASER_PCIEFD_SPACK_RXERR_MASK, p->header[0]);
  1168. kvaser_pciefd_packet_to_state(p, &bec, &new_state, &tx_state, &rx_state);
  1169. if (new_state != old_state) {
  1170. struct net_device *ndev = can->can.dev;
  1171. struct sk_buff *skb;
  1172. struct can_frame *cf;
  1173. skb = alloc_can_err_skb(ndev, &cf);
  1174. if (!skb) {
  1175. ndev->stats.rx_dropped++;
  1176. return -ENOMEM;
  1177. }
  1178. kvaser_pciefd_change_state(can, cf, new_state, tx_state, rx_state);
  1179. if (old_state == CAN_STATE_BUS_OFF &&
  1180. new_state == CAN_STATE_ERROR_ACTIVE &&
  1181. can->can.restart_ms) {
  1182. can->can.can_stats.restarts++;
  1183. cf->can_id |= CAN_ERR_RESTARTED;
  1184. }
  1185. kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp);
  1186. cf->data[6] = bec.txerr;
  1187. cf->data[7] = bec.rxerr;
  1188. netif_rx(skb);
  1189. }
  1190. can->bec.txerr = bec.txerr;
  1191. can->bec.rxerr = bec.rxerr;
  1192. /* Check if we need to poll the error counters */
  1193. if (bec.txerr || bec.rxerr)
  1194. mod_timer(&can->bec_poll_timer, KVASER_PCIEFD_BEC_POLL_FREQ);
  1195. return 0;
  1196. }
  1197. static int kvaser_pciefd_handle_status_packet(struct kvaser_pciefd *pcie,
  1198. struct kvaser_pciefd_rx_packet *p)
  1199. {
  1200. struct kvaser_pciefd_can *can;
  1201. u8 cmdseq;
  1202. u32 status;
  1203. u8 ch_id = FIELD_GET(KVASER_PCIEFD_PACKET_CHID_MASK, p->header[1]);
  1204. if (ch_id >= pcie->nr_channels)
  1205. return -EIO;
  1206. can = pcie->can[ch_id];
  1207. status = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_STAT_REG);
  1208. cmdseq = FIELD_GET(KVASER_PCIEFD_KCAN_STAT_SEQNO_MASK, status);
  1209. /* Reset done, start abort and flush */
  1210. if (p->header[0] & KVASER_PCIEFD_SPACK_IRM &&
  1211. p->header[0] & KVASER_PCIEFD_SPACK_RMCD &&
  1212. p->header[1] & KVASER_PCIEFD_SPACK_AUTO &&
  1213. cmdseq == FIELD_GET(KVASER_PCIEFD_PACKET_SEQ_MASK, p->header[1]) &&
  1214. status & KVASER_PCIEFD_KCAN_STAT_IDLE) {
  1215. iowrite32(KVASER_PCIEFD_KCAN_IRQ_ABD,
  1216. can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  1217. kvaser_pciefd_abort_flush_reset(can);
  1218. } else if (p->header[0] & KVASER_PCIEFD_SPACK_IDET &&
  1219. p->header[0] & KVASER_PCIEFD_SPACK_IRM &&
  1220. cmdseq == FIELD_GET(KVASER_PCIEFD_PACKET_SEQ_MASK, p->header[1]) &&
  1221. status & KVASER_PCIEFD_KCAN_STAT_IDLE) {
  1222. /* Reset detected, send end of flush if no packet are in FIFO */
  1223. u8 count;
  1224. count = FIELD_GET(KVASER_PCIEFD_KCAN_TX_NR_PACKETS_CURRENT_MASK,
  1225. ioread32(can->reg_base + KVASER_PCIEFD_KCAN_TX_NR_PACKETS_REG));
  1226. if (!count)
  1227. iowrite32(FIELD_PREP(KVASER_PCIEFD_KCAN_CTRL_TYPE_MASK,
  1228. KVASER_PCIEFD_KCAN_CTRL_TYPE_EFLUSH),
  1229. can->reg_base + KVASER_PCIEFD_KCAN_CTRL_REG);
  1230. } else if (!(p->header[1] & KVASER_PCIEFD_SPACK_AUTO) &&
  1231. cmdseq == FIELD_GET(KVASER_PCIEFD_PACKET_SEQ_MASK, p->header[1])) {
  1232. /* Response to status request received */
  1233. kvaser_pciefd_handle_status_resp(can, p);
  1234. if (can->can.state != CAN_STATE_BUS_OFF &&
  1235. can->can.state != CAN_STATE_ERROR_ACTIVE) {
  1236. mod_timer(&can->bec_poll_timer, KVASER_PCIEFD_BEC_POLL_FREQ);
  1237. }
  1238. } else if (p->header[0] & KVASER_PCIEFD_SPACK_RMCD &&
  1239. !(status & KVASER_PCIEFD_KCAN_STAT_BUS_OFF_MASK)) {
  1240. /* Reset to bus on detected */
  1241. if (!completion_done(&can->start_comp))
  1242. complete(&can->start_comp);
  1243. }
  1244. return 0;
  1245. }
  1246. static void kvaser_pciefd_handle_nack_packet(struct kvaser_pciefd_can *can,
  1247. struct kvaser_pciefd_rx_packet *p)
  1248. {
  1249. struct sk_buff *skb;
  1250. struct can_frame *cf;
  1251. skb = alloc_can_err_skb(can->can.dev, &cf);
  1252. can->can.dev->stats.tx_errors++;
  1253. if (p->header[0] & KVASER_PCIEFD_APACKET_ABL) {
  1254. if (skb)
  1255. cf->can_id |= CAN_ERR_LOSTARB;
  1256. can->can.can_stats.arbitration_lost++;
  1257. } else if (skb) {
  1258. cf->can_id |= CAN_ERR_ACK;
  1259. }
  1260. if (skb) {
  1261. cf->can_id |= CAN_ERR_BUSERROR;
  1262. kvaser_pciefd_set_skb_timestamp(can->kv_pcie, skb, p->timestamp);
  1263. netif_rx(skb);
  1264. } else {
  1265. can->can.dev->stats.rx_dropped++;
  1266. netdev_warn(can->can.dev, "No memory left for err_skb\n");
  1267. }
  1268. }
  1269. static int kvaser_pciefd_handle_ack_packet(struct kvaser_pciefd *pcie,
  1270. struct kvaser_pciefd_rx_packet *p)
  1271. {
  1272. struct kvaser_pciefd_can *can;
  1273. bool one_shot_fail = false;
  1274. u8 ch_id = FIELD_GET(KVASER_PCIEFD_PACKET_CHID_MASK, p->header[1]);
  1275. if (ch_id >= pcie->nr_channels)
  1276. return -EIO;
  1277. can = pcie->can[ch_id];
  1278. /* Ignore control packet ACK */
  1279. if (p->header[0] & KVASER_PCIEFD_APACKET_CT)
  1280. return 0;
  1281. if (p->header[0] & KVASER_PCIEFD_APACKET_NACK) {
  1282. kvaser_pciefd_handle_nack_packet(can, p);
  1283. one_shot_fail = true;
  1284. }
  1285. if (p->header[0] & KVASER_PCIEFD_APACKET_FLU) {
  1286. netdev_dbg(can->can.dev, "Packet was flushed\n");
  1287. } else {
  1288. int echo_idx = FIELD_GET(KVASER_PCIEFD_PACKET_SEQ_MASK, p->header[0]);
  1289. unsigned int len, frame_len = 0;
  1290. struct sk_buff *skb;
  1291. if (echo_idx != (can->ack_idx & (can->can.echo_skb_max - 1)))
  1292. return 0;
  1293. skb = can->can.echo_skb[echo_idx];
  1294. if (!skb)
  1295. return 0;
  1296. kvaser_pciefd_set_skb_timestamp(pcie, skb, p->timestamp);
  1297. len = can_get_echo_skb(can->can.dev, echo_idx, &frame_len);
  1298. /* Pairs with barrier in kvaser_pciefd_start_xmit() */
  1299. smp_store_release(&can->ack_idx, can->ack_idx + 1);
  1300. can->completed_tx_pkts++;
  1301. can->completed_tx_bytes += frame_len;
  1302. if (!one_shot_fail) {
  1303. can->can.dev->stats.tx_bytes += len;
  1304. can->can.dev->stats.tx_packets++;
  1305. }
  1306. }
  1307. return 0;
  1308. }
  1309. static int kvaser_pciefd_handle_eflush_packet(struct kvaser_pciefd *pcie,
  1310. struct kvaser_pciefd_rx_packet *p)
  1311. {
  1312. struct kvaser_pciefd_can *can;
  1313. u8 ch_id = FIELD_GET(KVASER_PCIEFD_PACKET_CHID_MASK, p->header[1]);
  1314. if (ch_id >= pcie->nr_channels)
  1315. return -EIO;
  1316. can = pcie->can[ch_id];
  1317. if (!completion_done(&can->flush_comp))
  1318. complete(&can->flush_comp);
  1319. return 0;
  1320. }
  1321. static int kvaser_pciefd_read_packet(struct kvaser_pciefd *pcie, int *start_pos,
  1322. int dma_buf)
  1323. {
  1324. __le32 *buffer = pcie->dma_data[dma_buf];
  1325. __le64 timestamp;
  1326. struct kvaser_pciefd_rx_packet packet;
  1327. struct kvaser_pciefd_rx_packet *p = &packet;
  1328. u8 type;
  1329. int pos = *start_pos;
  1330. int size;
  1331. int ret = 0;
  1332. size = le32_to_cpu(buffer[pos++]);
  1333. if (!size) {
  1334. *start_pos = 0;
  1335. return 0;
  1336. }
  1337. p->header[0] = le32_to_cpu(buffer[pos++]);
  1338. p->header[1] = le32_to_cpu(buffer[pos++]);
  1339. /* Read 64-bit timestamp */
  1340. memcpy(&timestamp, &buffer[pos], sizeof(__le64));
  1341. pos += 2;
  1342. p->timestamp = le64_to_cpu(timestamp);
  1343. type = FIELD_GET(KVASER_PCIEFD_PACKET_TYPE_MASK, p->header[1]);
  1344. switch (type) {
  1345. case KVASER_PCIEFD_PACK_TYPE_DATA:
  1346. ret = kvaser_pciefd_handle_data_packet(pcie, p, &buffer[pos]);
  1347. if (!(p->header[0] & KVASER_PCIEFD_RPACKET_RTR)) {
  1348. u8 data_len;
  1349. data_len = can_fd_dlc2len(FIELD_GET(KVASER_PCIEFD_RPACKET_DLC_MASK,
  1350. p->header[1]));
  1351. pos += DIV_ROUND_UP(data_len, 4);
  1352. }
  1353. break;
  1354. case KVASER_PCIEFD_PACK_TYPE_ACK:
  1355. ret = kvaser_pciefd_handle_ack_packet(pcie, p);
  1356. break;
  1357. case KVASER_PCIEFD_PACK_TYPE_STATUS:
  1358. ret = kvaser_pciefd_handle_status_packet(pcie, p);
  1359. break;
  1360. case KVASER_PCIEFD_PACK_TYPE_ERROR:
  1361. ret = kvaser_pciefd_handle_error_packet(pcie, p);
  1362. break;
  1363. case KVASER_PCIEFD_PACK_TYPE_EFLUSH_ACK:
  1364. ret = kvaser_pciefd_handle_eflush_packet(pcie, p);
  1365. break;
  1366. case KVASER_PCIEFD_PACK_TYPE_ACK_DATA:
  1367. case KVASER_PCIEFD_PACK_TYPE_BUS_LOAD:
  1368. case KVASER_PCIEFD_PACK_TYPE_EFRAME_ACK:
  1369. case KVASER_PCIEFD_PACK_TYPE_TXRQ:
  1370. dev_info(&pcie->pci->dev,
  1371. "Received unexpected packet type 0x%08X\n", type);
  1372. break;
  1373. default:
  1374. dev_err(&pcie->pci->dev, "Unknown packet type 0x%08X\n", type);
  1375. ret = -EIO;
  1376. break;
  1377. }
  1378. if (ret)
  1379. return ret;
  1380. /* Position does not point to the end of the package,
  1381. * corrupted packet size?
  1382. */
  1383. if (unlikely((*start_pos + size) != pos))
  1384. return -EIO;
  1385. /* Point to the next packet header, if any */
  1386. *start_pos = pos;
  1387. return ret;
  1388. }
  1389. static int kvaser_pciefd_read_buffer(struct kvaser_pciefd *pcie, int dma_buf)
  1390. {
  1391. int pos = 0;
  1392. int res = 0;
  1393. unsigned int i;
  1394. do {
  1395. res = kvaser_pciefd_read_packet(pcie, &pos, dma_buf);
  1396. } while (!res && pos > 0 && pos < KVASER_PCIEFD_DMA_SIZE);
  1397. /* Report ACKs in this buffer to BQL en masse for correct periods */
  1398. for (i = 0; i < pcie->nr_channels; ++i) {
  1399. struct kvaser_pciefd_can *can = pcie->can[i];
  1400. if (!can->completed_tx_pkts)
  1401. continue;
  1402. netif_subqueue_completed_wake(can->can.dev, 0,
  1403. can->completed_tx_pkts,
  1404. can->completed_tx_bytes,
  1405. kvaser_pciefd_tx_avail(can), 1);
  1406. can->completed_tx_pkts = 0;
  1407. can->completed_tx_bytes = 0;
  1408. }
  1409. return res;
  1410. }
  1411. static void kvaser_pciefd_receive_irq(struct kvaser_pciefd *pcie)
  1412. {
  1413. void __iomem *srb_cmd_reg = KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG;
  1414. u32 irq = ioread32(KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
  1415. iowrite32(irq, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
  1416. if (irq & KVASER_PCIEFD_SRB_IRQ_DPD0) {
  1417. kvaser_pciefd_read_buffer(pcie, 0);
  1418. iowrite32(KVASER_PCIEFD_SRB_CMD_RDB0, srb_cmd_reg); /* Rearm buffer */
  1419. }
  1420. if (irq & KVASER_PCIEFD_SRB_IRQ_DPD1) {
  1421. kvaser_pciefd_read_buffer(pcie, 1);
  1422. iowrite32(KVASER_PCIEFD_SRB_CMD_RDB1, srb_cmd_reg); /* Rearm buffer */
  1423. }
  1424. if (unlikely(irq & KVASER_PCIEFD_SRB_IRQ_DOF0 ||
  1425. irq & KVASER_PCIEFD_SRB_IRQ_DOF1 ||
  1426. irq & KVASER_PCIEFD_SRB_IRQ_DUF0 ||
  1427. irq & KVASER_PCIEFD_SRB_IRQ_DUF1))
  1428. dev_err(&pcie->pci->dev, "DMA IRQ error 0x%08X\n", irq);
  1429. }
  1430. static void kvaser_pciefd_transmit_irq(struct kvaser_pciefd_can *can)
  1431. {
  1432. u32 irq = ioread32(can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  1433. if (irq & KVASER_PCIEFD_KCAN_IRQ_TOF)
  1434. netdev_err(can->can.dev, "Tx FIFO overflow\n");
  1435. if (irq & KVASER_PCIEFD_KCAN_IRQ_BPP)
  1436. netdev_err(can->can.dev,
  1437. "Fail to change bittiming, when not in reset mode\n");
  1438. if (irq & KVASER_PCIEFD_KCAN_IRQ_FDIC)
  1439. netdev_err(can->can.dev, "CAN FD frame in CAN mode\n");
  1440. if (irq & KVASER_PCIEFD_KCAN_IRQ_ROF)
  1441. netdev_err(can->can.dev, "Rx FIFO overflow\n");
  1442. iowrite32(irq, can->reg_base + KVASER_PCIEFD_KCAN_IRQ_REG);
  1443. }
  1444. static irqreturn_t kvaser_pciefd_irq_handler(int irq, void *dev)
  1445. {
  1446. struct kvaser_pciefd *pcie = (struct kvaser_pciefd *)dev;
  1447. const struct kvaser_pciefd_irq_mask *irq_mask = pcie->driver_data->irq_mask;
  1448. u32 pci_irq = ioread32(KVASER_PCIEFD_PCI_IRQ_ADDR(pcie));
  1449. int i;
  1450. if (!(pci_irq & irq_mask->all))
  1451. return IRQ_NONE;
  1452. iowrite32(0, KVASER_PCIEFD_PCI_IEN_ADDR(pcie));
  1453. if (pci_irq & irq_mask->kcan_rx0)
  1454. kvaser_pciefd_receive_irq(pcie);
  1455. for (i = 0; i < pcie->nr_channels; i++) {
  1456. if (pci_irq & irq_mask->kcan_tx[i])
  1457. kvaser_pciefd_transmit_irq(pcie->can[i]);
  1458. }
  1459. iowrite32(irq_mask->all, KVASER_PCIEFD_PCI_IEN_ADDR(pcie));
  1460. return IRQ_HANDLED;
  1461. }
  1462. static void kvaser_pciefd_teardown_can_ctrls(struct kvaser_pciefd *pcie)
  1463. {
  1464. int i;
  1465. for (i = 0; i < pcie->nr_channels; i++) {
  1466. struct kvaser_pciefd_can *can = pcie->can[i];
  1467. if (can) {
  1468. iowrite32(0, can->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  1469. kvaser_pciefd_pwm_stop(can);
  1470. free_candev(can->can.dev);
  1471. }
  1472. }
  1473. }
  1474. static void kvaser_pciefd_disable_irq_srcs(struct kvaser_pciefd *pcie)
  1475. {
  1476. unsigned int i;
  1477. /* Masking PCI_IRQ is insufficient as running ISR will unmask it */
  1478. iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IEN_REG);
  1479. for (i = 0; i < pcie->nr_channels; ++i)
  1480. iowrite32(0, pcie->can[i]->reg_base + KVASER_PCIEFD_KCAN_IEN_REG);
  1481. }
  1482. static int kvaser_pciefd_probe(struct pci_dev *pdev,
  1483. const struct pci_device_id *id)
  1484. {
  1485. int ret;
  1486. struct kvaser_pciefd *pcie;
  1487. const struct kvaser_pciefd_irq_mask *irq_mask;
  1488. pcie = devm_kzalloc(&pdev->dev, sizeof(*pcie), GFP_KERNEL);
  1489. if (!pcie)
  1490. return -ENOMEM;
  1491. pci_set_drvdata(pdev, pcie);
  1492. pcie->pci = pdev;
  1493. pcie->driver_data = (const struct kvaser_pciefd_driver_data *)id->driver_data;
  1494. irq_mask = pcie->driver_data->irq_mask;
  1495. ret = pci_enable_device(pdev);
  1496. if (ret)
  1497. return ret;
  1498. ret = pci_request_regions(pdev, KVASER_PCIEFD_DRV_NAME);
  1499. if (ret)
  1500. goto err_disable_pci;
  1501. pcie->reg_base = pci_iomap(pdev, 0, 0);
  1502. if (!pcie->reg_base) {
  1503. ret = -ENOMEM;
  1504. goto err_release_regions;
  1505. }
  1506. ret = kvaser_pciefd_setup_board(pcie);
  1507. if (ret)
  1508. goto err_pci_iounmap;
  1509. ret = kvaser_pciefd_setup_dma(pcie);
  1510. if (ret)
  1511. goto err_pci_iounmap;
  1512. pci_set_master(pdev);
  1513. ret = kvaser_pciefd_setup_can_ctrls(pcie);
  1514. if (ret)
  1515. goto err_teardown_can_ctrls;
  1516. ret = pci_alloc_irq_vectors(pcie->pci, 1, 1, PCI_IRQ_INTX | PCI_IRQ_MSI);
  1517. if (ret < 0) {
  1518. dev_err(&pcie->pci->dev, "Failed to allocate IRQ vectors.\n");
  1519. goto err_teardown_can_ctrls;
  1520. }
  1521. ret = pci_irq_vector(pcie->pci, 0);
  1522. if (ret < 0)
  1523. goto err_pci_free_irq_vectors;
  1524. pcie->pci->irq = ret;
  1525. ret = request_irq(pcie->pci->irq, kvaser_pciefd_irq_handler,
  1526. IRQF_SHARED, KVASER_PCIEFD_DRV_NAME, pcie);
  1527. if (ret) {
  1528. dev_err(&pcie->pci->dev, "Failed to request IRQ %d\n", pcie->pci->irq);
  1529. goto err_pci_free_irq_vectors;
  1530. }
  1531. iowrite32(KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1,
  1532. KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IRQ_REG);
  1533. iowrite32(KVASER_PCIEFD_SRB_IRQ_DPD0 | KVASER_PCIEFD_SRB_IRQ_DPD1 |
  1534. KVASER_PCIEFD_SRB_IRQ_DOF0 | KVASER_PCIEFD_SRB_IRQ_DOF1 |
  1535. KVASER_PCIEFD_SRB_IRQ_DUF0 | KVASER_PCIEFD_SRB_IRQ_DUF1,
  1536. KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_IEN_REG);
  1537. /* Enable PCI interrupts */
  1538. iowrite32(irq_mask->all, KVASER_PCIEFD_PCI_IEN_ADDR(pcie));
  1539. /* Ready the DMA buffers */
  1540. iowrite32(KVASER_PCIEFD_SRB_CMD_RDB0,
  1541. KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
  1542. iowrite32(KVASER_PCIEFD_SRB_CMD_RDB1,
  1543. KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CMD_REG);
  1544. ret = kvaser_pciefd_reg_candev(pcie);
  1545. if (ret)
  1546. goto err_free_irq;
  1547. return 0;
  1548. err_free_irq:
  1549. kvaser_pciefd_disable_irq_srcs(pcie);
  1550. free_irq(pcie->pci->irq, pcie);
  1551. err_pci_free_irq_vectors:
  1552. pci_free_irq_vectors(pcie->pci);
  1553. err_teardown_can_ctrls:
  1554. kvaser_pciefd_teardown_can_ctrls(pcie);
  1555. iowrite32(0, KVASER_PCIEFD_SRB_ADDR(pcie) + KVASER_PCIEFD_SRB_CTRL_REG);
  1556. pci_clear_master(pdev);
  1557. err_pci_iounmap:
  1558. pci_iounmap(pdev, pcie->reg_base);
  1559. err_release_regions:
  1560. pci_release_regions(pdev);
  1561. err_disable_pci:
  1562. pci_disable_device(pdev);
  1563. return ret;
  1564. }
  1565. static void kvaser_pciefd_remove(struct pci_dev *pdev)
  1566. {
  1567. struct kvaser_pciefd *pcie = pci_get_drvdata(pdev);
  1568. unsigned int i;
  1569. for (i = 0; i < pcie->nr_channels; ++i) {
  1570. struct kvaser_pciefd_can *can = pcie->can[i];
  1571. unregister_candev(can->can.dev);
  1572. del_timer(&can->bec_poll_timer);
  1573. kvaser_pciefd_pwm_stop(can);
  1574. }
  1575. kvaser_pciefd_disable_irq_srcs(pcie);
  1576. free_irq(pcie->pci->irq, pcie);
  1577. pci_free_irq_vectors(pcie->pci);
  1578. for (i = 0; i < pcie->nr_channels; ++i)
  1579. free_candev(pcie->can[i]->can.dev);
  1580. pci_iounmap(pdev, pcie->reg_base);
  1581. pci_release_regions(pdev);
  1582. pci_disable_device(pdev);
  1583. }
  1584. static struct pci_driver kvaser_pciefd = {
  1585. .name = KVASER_PCIEFD_DRV_NAME,
  1586. .id_table = kvaser_pciefd_id_table,
  1587. .probe = kvaser_pciefd_probe,
  1588. .remove = kvaser_pciefd_remove,
  1589. };
  1590. module_pci_driver(kvaser_pciefd)