m_can.c 68 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680
  1. // SPDX-License-Identifier: GPL-2.0
  2. // CAN bus driver for Bosch M_CAN controller
  3. // Copyright (C) 2014 Freescale Semiconductor, Inc.
  4. // Dong Aisheng <aisheng.dong@nxp.com>
  5. // Copyright (C) 2018-19 Texas Instruments Incorporated - http://www.ti.com/
  6. /* Bosch M_CAN user manual can be obtained from:
  7. * https://github.com/linux-can/can-doc/tree/master/m_can
  8. */
  9. #include <linux/bitfield.h>
  10. #include <linux/can/dev.h>
  11. #include <linux/ethtool.h>
  12. #include <linux/hrtimer.h>
  13. #include <linux/interrupt.h>
  14. #include <linux/io.h>
  15. #include <linux/iopoll.h>
  16. #include <linux/kernel.h>
  17. #include <linux/module.h>
  18. #include <linux/netdevice.h>
  19. #include <linux/of.h>
  20. #include <linux/phy/phy.h>
  21. #include <linux/pinctrl/consumer.h>
  22. #include <linux/platform_device.h>
  23. #include <linux/pm_runtime.h>
  24. #include <linux/reset.h>
  25. #include "m_can.h"
  26. /* registers definition */
  27. enum m_can_reg {
  28. M_CAN_CREL = 0x0,
  29. M_CAN_ENDN = 0x4,
  30. M_CAN_CUST = 0x8,
  31. M_CAN_DBTP = 0xc,
  32. M_CAN_TEST = 0x10,
  33. M_CAN_RWD = 0x14,
  34. M_CAN_CCCR = 0x18,
  35. M_CAN_NBTP = 0x1c,
  36. M_CAN_TSCC = 0x20,
  37. M_CAN_TSCV = 0x24,
  38. M_CAN_TOCC = 0x28,
  39. M_CAN_TOCV = 0x2c,
  40. M_CAN_ECR = 0x40,
  41. M_CAN_PSR = 0x44,
  42. /* TDCR Register only available for version >=3.1.x */
  43. M_CAN_TDCR = 0x48,
  44. M_CAN_IR = 0x50,
  45. M_CAN_IE = 0x54,
  46. M_CAN_ILS = 0x58,
  47. M_CAN_ILE = 0x5c,
  48. M_CAN_GFC = 0x80,
  49. M_CAN_SIDFC = 0x84,
  50. M_CAN_XIDFC = 0x88,
  51. M_CAN_XIDAM = 0x90,
  52. M_CAN_HPMS = 0x94,
  53. M_CAN_NDAT1 = 0x98,
  54. M_CAN_NDAT2 = 0x9c,
  55. M_CAN_RXF0C = 0xa0,
  56. M_CAN_RXF0S = 0xa4,
  57. M_CAN_RXF0A = 0xa8,
  58. M_CAN_RXBC = 0xac,
  59. M_CAN_RXF1C = 0xb0,
  60. M_CAN_RXF1S = 0xb4,
  61. M_CAN_RXF1A = 0xb8,
  62. M_CAN_RXESC = 0xbc,
  63. M_CAN_TXBC = 0xc0,
  64. M_CAN_TXFQS = 0xc4,
  65. M_CAN_TXESC = 0xc8,
  66. M_CAN_TXBRP = 0xcc,
  67. M_CAN_TXBAR = 0xd0,
  68. M_CAN_TXBCR = 0xd4,
  69. M_CAN_TXBTO = 0xd8,
  70. M_CAN_TXBCF = 0xdc,
  71. M_CAN_TXBTIE = 0xe0,
  72. M_CAN_TXBCIE = 0xe4,
  73. M_CAN_TXEFC = 0xf0,
  74. M_CAN_TXEFS = 0xf4,
  75. M_CAN_TXEFA = 0xf8,
  76. };
  77. /* message ram configuration data length */
  78. #define MRAM_CFG_LEN 8
  79. /* Core Release Register (CREL) */
  80. #define CREL_REL_MASK GENMASK(31, 28)
  81. #define CREL_STEP_MASK GENMASK(27, 24)
  82. #define CREL_SUBSTEP_MASK GENMASK(23, 20)
  83. /* Data Bit Timing & Prescaler Register (DBTP) */
  84. #define DBTP_TDC BIT(23)
  85. #define DBTP_DBRP_MASK GENMASK(20, 16)
  86. #define DBTP_DTSEG1_MASK GENMASK(12, 8)
  87. #define DBTP_DTSEG2_MASK GENMASK(7, 4)
  88. #define DBTP_DSJW_MASK GENMASK(3, 0)
  89. /* Transmitter Delay Compensation Register (TDCR) */
  90. #define TDCR_TDCO_MASK GENMASK(14, 8)
  91. #define TDCR_TDCF_MASK GENMASK(6, 0)
  92. /* Test Register (TEST) */
  93. #define TEST_LBCK BIT(4)
  94. /* CC Control Register (CCCR) */
  95. #define CCCR_TXP BIT(14)
  96. #define CCCR_TEST BIT(7)
  97. #define CCCR_DAR BIT(6)
  98. #define CCCR_MON BIT(5)
  99. #define CCCR_CSR BIT(4)
  100. #define CCCR_CSA BIT(3)
  101. #define CCCR_ASM BIT(2)
  102. #define CCCR_CCE BIT(1)
  103. #define CCCR_INIT BIT(0)
  104. /* for version 3.0.x */
  105. #define CCCR_CMR_MASK GENMASK(11, 10)
  106. #define CCCR_CMR_CANFD 0x1
  107. #define CCCR_CMR_CANFD_BRS 0x2
  108. #define CCCR_CMR_CAN 0x3
  109. #define CCCR_CME_MASK GENMASK(9, 8)
  110. #define CCCR_CME_CAN 0
  111. #define CCCR_CME_CANFD 0x1
  112. #define CCCR_CME_CANFD_BRS 0x2
  113. /* for version >=3.1.x */
  114. #define CCCR_EFBI BIT(13)
  115. #define CCCR_PXHD BIT(12)
  116. #define CCCR_BRSE BIT(9)
  117. #define CCCR_FDOE BIT(8)
  118. /* for version >=3.2.x */
  119. #define CCCR_NISO BIT(15)
  120. /* for version >=3.3.x */
  121. #define CCCR_WMM BIT(11)
  122. #define CCCR_UTSU BIT(10)
  123. /* Nominal Bit Timing & Prescaler Register (NBTP) */
  124. #define NBTP_NSJW_MASK GENMASK(31, 25)
  125. #define NBTP_NBRP_MASK GENMASK(24, 16)
  126. #define NBTP_NTSEG1_MASK GENMASK(15, 8)
  127. #define NBTP_NTSEG2_MASK GENMASK(6, 0)
  128. /* Timestamp Counter Configuration Register (TSCC) */
  129. #define TSCC_TCP_MASK GENMASK(19, 16)
  130. #define TSCC_TSS_MASK GENMASK(1, 0)
  131. #define TSCC_TSS_DISABLE 0x0
  132. #define TSCC_TSS_INTERNAL 0x1
  133. #define TSCC_TSS_EXTERNAL 0x2
  134. /* Timestamp Counter Value Register (TSCV) */
  135. #define TSCV_TSC_MASK GENMASK(15, 0)
  136. /* Error Counter Register (ECR) */
  137. #define ECR_RP BIT(15)
  138. #define ECR_REC_MASK GENMASK(14, 8)
  139. #define ECR_TEC_MASK GENMASK(7, 0)
  140. /* Protocol Status Register (PSR) */
  141. #define PSR_BO BIT(7)
  142. #define PSR_EW BIT(6)
  143. #define PSR_EP BIT(5)
  144. #define PSR_LEC_MASK GENMASK(2, 0)
  145. #define PSR_DLEC_MASK GENMASK(10, 8)
  146. /* Interrupt Register (IR) */
  147. #define IR_ALL_INT 0xffffffff
  148. /* Renamed bits for versions > 3.1.x */
  149. #define IR_ARA BIT(29)
  150. #define IR_PED BIT(28)
  151. #define IR_PEA BIT(27)
  152. /* Bits for version 3.0.x */
  153. #define IR_STE BIT(31)
  154. #define IR_FOE BIT(30)
  155. #define IR_ACKE BIT(29)
  156. #define IR_BE BIT(28)
  157. #define IR_CRCE BIT(27)
  158. #define IR_WDI BIT(26)
  159. #define IR_BO BIT(25)
  160. #define IR_EW BIT(24)
  161. #define IR_EP BIT(23)
  162. #define IR_ELO BIT(22)
  163. #define IR_BEU BIT(21)
  164. #define IR_BEC BIT(20)
  165. #define IR_DRX BIT(19)
  166. #define IR_TOO BIT(18)
  167. #define IR_MRAF BIT(17)
  168. #define IR_TSW BIT(16)
  169. #define IR_TEFL BIT(15)
  170. #define IR_TEFF BIT(14)
  171. #define IR_TEFW BIT(13)
  172. #define IR_TEFN BIT(12)
  173. #define IR_TFE BIT(11)
  174. #define IR_TCF BIT(10)
  175. #define IR_TC BIT(9)
  176. #define IR_HPM BIT(8)
  177. #define IR_RF1L BIT(7)
  178. #define IR_RF1F BIT(6)
  179. #define IR_RF1W BIT(5)
  180. #define IR_RF1N BIT(4)
  181. #define IR_RF0L BIT(3)
  182. #define IR_RF0F BIT(2)
  183. #define IR_RF0W BIT(1)
  184. #define IR_RF0N BIT(0)
  185. #define IR_ERR_STATE (IR_BO | IR_EW | IR_EP)
  186. /* Interrupts for version 3.0.x */
  187. #define IR_ERR_LEC_30X (IR_STE | IR_FOE | IR_ACKE | IR_BE | IR_CRCE)
  188. #define IR_ERR_BUS_30X (IR_ERR_LEC_30X | IR_WDI | IR_BEU | IR_BEC | \
  189. IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | IR_RF1L | \
  190. IR_RF0L)
  191. #define IR_ERR_ALL_30X (IR_ERR_STATE | IR_ERR_BUS_30X)
  192. /* Interrupts for version >= 3.1.x */
  193. #define IR_ERR_LEC_31X (IR_PED | IR_PEA)
  194. #define IR_ERR_BUS_31X (IR_ERR_LEC_31X | IR_WDI | IR_BEU | IR_BEC | \
  195. IR_TOO | IR_MRAF | IR_TSW | IR_TEFL | IR_RF1L | \
  196. IR_RF0L)
  197. #define IR_ERR_ALL_31X (IR_ERR_STATE | IR_ERR_BUS_31X)
  198. /* Interrupt Line Select (ILS) */
  199. #define ILS_ALL_INT0 0x0
  200. #define ILS_ALL_INT1 0xFFFFFFFF
  201. /* Interrupt Line Enable (ILE) */
  202. #define ILE_EINT1 BIT(1)
  203. #define ILE_EINT0 BIT(0)
  204. /* Rx FIFO 0/1 Configuration (RXF0C/RXF1C) */
  205. #define RXFC_FWM_MASK GENMASK(30, 24)
  206. #define RXFC_FS_MASK GENMASK(22, 16)
  207. /* Rx FIFO 0/1 Status (RXF0S/RXF1S) */
  208. #define RXFS_RFL BIT(25)
  209. #define RXFS_FF BIT(24)
  210. #define RXFS_FPI_MASK GENMASK(21, 16)
  211. #define RXFS_FGI_MASK GENMASK(13, 8)
  212. #define RXFS_FFL_MASK GENMASK(6, 0)
  213. /* Rx Buffer / FIFO Element Size Configuration (RXESC) */
  214. #define RXESC_RBDS_MASK GENMASK(10, 8)
  215. #define RXESC_F1DS_MASK GENMASK(6, 4)
  216. #define RXESC_F0DS_MASK GENMASK(2, 0)
  217. #define RXESC_64B 0x7
  218. /* Tx Buffer Configuration (TXBC) */
  219. #define TXBC_TFQS_MASK GENMASK(29, 24)
  220. #define TXBC_NDTB_MASK GENMASK(21, 16)
  221. /* Tx FIFO/Queue Status (TXFQS) */
  222. #define TXFQS_TFQF BIT(21)
  223. #define TXFQS_TFQPI_MASK GENMASK(20, 16)
  224. #define TXFQS_TFGI_MASK GENMASK(12, 8)
  225. #define TXFQS_TFFL_MASK GENMASK(5, 0)
  226. /* Tx Buffer Element Size Configuration (TXESC) */
  227. #define TXESC_TBDS_MASK GENMASK(2, 0)
  228. #define TXESC_TBDS_64B 0x7
  229. /* Tx Event FIFO Configuration (TXEFC) */
  230. #define TXEFC_EFWM_MASK GENMASK(29, 24)
  231. #define TXEFC_EFS_MASK GENMASK(21, 16)
  232. /* Tx Event FIFO Status (TXEFS) */
  233. #define TXEFS_TEFL BIT(25)
  234. #define TXEFS_EFF BIT(24)
  235. #define TXEFS_EFGI_MASK GENMASK(12, 8)
  236. #define TXEFS_EFFL_MASK GENMASK(5, 0)
  237. /* Tx Event FIFO Acknowledge (TXEFA) */
  238. #define TXEFA_EFAI_MASK GENMASK(4, 0)
  239. /* Message RAM Configuration (in bytes) */
  240. #define SIDF_ELEMENT_SIZE 4
  241. #define XIDF_ELEMENT_SIZE 8
  242. #define RXF0_ELEMENT_SIZE 72
  243. #define RXF1_ELEMENT_SIZE 72
  244. #define RXB_ELEMENT_SIZE 72
  245. #define TXE_ELEMENT_SIZE 8
  246. #define TXB_ELEMENT_SIZE 72
  247. /* Message RAM Elements */
  248. #define M_CAN_FIFO_ID 0x0
  249. #define M_CAN_FIFO_DLC 0x4
  250. #define M_CAN_FIFO_DATA 0x8
  251. /* Rx Buffer Element */
  252. /* R0 */
  253. #define RX_BUF_ESI BIT(31)
  254. #define RX_BUF_XTD BIT(30)
  255. #define RX_BUF_RTR BIT(29)
  256. /* R1 */
  257. #define RX_BUF_ANMF BIT(31)
  258. #define RX_BUF_FDF BIT(21)
  259. #define RX_BUF_BRS BIT(20)
  260. #define RX_BUF_RXTS_MASK GENMASK(15, 0)
  261. /* Tx Buffer Element */
  262. /* T0 */
  263. #define TX_BUF_ESI BIT(31)
  264. #define TX_BUF_XTD BIT(30)
  265. #define TX_BUF_RTR BIT(29)
  266. /* T1 */
  267. #define TX_BUF_EFC BIT(23)
  268. #define TX_BUF_FDF BIT(21)
  269. #define TX_BUF_BRS BIT(20)
  270. #define TX_BUF_MM_MASK GENMASK(31, 24)
  271. #define TX_BUF_DLC_MASK GENMASK(19, 16)
  272. /* Tx event FIFO Element */
  273. /* E1 */
  274. #define TX_EVENT_MM_MASK GENMASK(31, 24)
  275. #define TX_EVENT_TXTS_MASK GENMASK(15, 0)
  276. /* Hrtimer polling interval */
  277. #define HRTIMER_POLL_INTERVAL_MS 1
  278. /* The ID and DLC registers are adjacent in M_CAN FIFO memory,
  279. * and we can save a (potentially slow) bus round trip by combining
  280. * reads and writes to them.
  281. */
  282. struct id_and_dlc {
  283. u32 id;
  284. u32 dlc;
  285. };
  286. struct m_can_fifo_element {
  287. u32 id;
  288. u32 dlc;
  289. u8 data[CANFD_MAX_DLEN];
  290. };
  291. static inline u32 m_can_read(struct m_can_classdev *cdev, enum m_can_reg reg)
  292. {
  293. return cdev->ops->read_reg(cdev, reg);
  294. }
  295. static inline void m_can_write(struct m_can_classdev *cdev, enum m_can_reg reg,
  296. u32 val)
  297. {
  298. cdev->ops->write_reg(cdev, reg, val);
  299. }
  300. static int
  301. m_can_fifo_read(struct m_can_classdev *cdev,
  302. u32 fgi, unsigned int offset, void *val, size_t val_count)
  303. {
  304. u32 addr_offset = cdev->mcfg[MRAM_RXF0].off + fgi * RXF0_ELEMENT_SIZE +
  305. offset;
  306. if (val_count == 0)
  307. return 0;
  308. return cdev->ops->read_fifo(cdev, addr_offset, val, val_count);
  309. }
  310. static int
  311. m_can_fifo_write(struct m_can_classdev *cdev,
  312. u32 fpi, unsigned int offset, const void *val, size_t val_count)
  313. {
  314. u32 addr_offset = cdev->mcfg[MRAM_TXB].off + fpi * TXB_ELEMENT_SIZE +
  315. offset;
  316. if (val_count == 0)
  317. return 0;
  318. return cdev->ops->write_fifo(cdev, addr_offset, val, val_count);
  319. }
  320. static inline int m_can_fifo_write_no_off(struct m_can_classdev *cdev,
  321. u32 fpi, u32 val)
  322. {
  323. return cdev->ops->write_fifo(cdev, fpi, &val, 1);
  324. }
  325. static int
  326. m_can_txe_fifo_read(struct m_can_classdev *cdev, u32 fgi, u32 offset, u32 *val)
  327. {
  328. u32 addr_offset = cdev->mcfg[MRAM_TXE].off + fgi * TXE_ELEMENT_SIZE +
  329. offset;
  330. return cdev->ops->read_fifo(cdev, addr_offset, val, 1);
  331. }
  332. static int m_can_cccr_update_bits(struct m_can_classdev *cdev, u32 mask, u32 val)
  333. {
  334. u32 val_before = m_can_read(cdev, M_CAN_CCCR);
  335. u32 val_after = (val_before & ~mask) | val;
  336. size_t tries = 10;
  337. if (!(mask & CCCR_INIT) && !(val_before & CCCR_INIT)) {
  338. netdev_err(cdev->net,
  339. "refusing to configure device when in normal mode\n");
  340. return -EBUSY;
  341. }
  342. /* The chip should be in standby mode when changing the CCCR register,
  343. * and some chips set the CSR and CSA bits when in standby. Furthermore,
  344. * the CSR and CSA bits should be written as zeros, even when they read
  345. * ones.
  346. */
  347. val_after &= ~(CCCR_CSR | CCCR_CSA);
  348. while (tries--) {
  349. u32 val_read;
  350. /* Write the desired value in each try, as setting some bits in
  351. * the CCCR register require other bits to be set first. E.g.
  352. * setting the NISO bit requires setting the CCE bit first.
  353. */
  354. m_can_write(cdev, M_CAN_CCCR, val_after);
  355. val_read = m_can_read(cdev, M_CAN_CCCR) & ~(CCCR_CSR | CCCR_CSA);
  356. if (val_read == val_after)
  357. return 0;
  358. usleep_range(1, 5);
  359. }
  360. return -ETIMEDOUT;
  361. }
  362. static int m_can_config_enable(struct m_can_classdev *cdev)
  363. {
  364. int err;
  365. /* CCCR_INIT must be set in order to set CCCR_CCE, but access to
  366. * configuration registers should only be enabled when in standby mode,
  367. * where CCCR_INIT is always set.
  368. */
  369. err = m_can_cccr_update_bits(cdev, CCCR_CCE, CCCR_CCE);
  370. if (err)
  371. netdev_err(cdev->net, "failed to enable configuration mode\n");
  372. return err;
  373. }
  374. static int m_can_config_disable(struct m_can_classdev *cdev)
  375. {
  376. int err;
  377. /* Only clear CCCR_CCE, since CCCR_INIT cannot be cleared while in
  378. * standby mode
  379. */
  380. err = m_can_cccr_update_bits(cdev, CCCR_CCE, 0);
  381. if (err)
  382. netdev_err(cdev->net, "failed to disable configuration registers\n");
  383. return err;
  384. }
  385. static void m_can_interrupt_enable(struct m_can_classdev *cdev, u32 interrupts)
  386. {
  387. if (cdev->active_interrupts == interrupts)
  388. return;
  389. m_can_write(cdev, M_CAN_IE, interrupts);
  390. cdev->active_interrupts = interrupts;
  391. }
  392. static void m_can_coalescing_disable(struct m_can_classdev *cdev)
  393. {
  394. u32 new_interrupts = cdev->active_interrupts | IR_RF0N | IR_TEFN;
  395. if (!cdev->net->irq)
  396. return;
  397. hrtimer_cancel(&cdev->hrtimer);
  398. m_can_interrupt_enable(cdev, new_interrupts);
  399. }
  400. static inline void m_can_enable_all_interrupts(struct m_can_classdev *cdev)
  401. {
  402. if (!cdev->net->irq) {
  403. netdev_dbg(cdev->net, "Start hrtimer\n");
  404. hrtimer_start(&cdev->hrtimer,
  405. ms_to_ktime(HRTIMER_POLL_INTERVAL_MS),
  406. HRTIMER_MODE_REL_PINNED);
  407. }
  408. /* Only interrupt line 0 is used in this driver */
  409. m_can_write(cdev, M_CAN_ILE, ILE_EINT0);
  410. }
  411. static inline void m_can_disable_all_interrupts(struct m_can_classdev *cdev)
  412. {
  413. m_can_coalescing_disable(cdev);
  414. m_can_write(cdev, M_CAN_ILE, 0x0);
  415. if (!cdev->net->irq) {
  416. netdev_dbg(cdev->net, "Stop hrtimer\n");
  417. hrtimer_try_to_cancel(&cdev->hrtimer);
  418. }
  419. }
  420. /* Retrieve internal timestamp counter from TSCV.TSC, and shift it to 32-bit
  421. * width.
  422. */
  423. static u32 m_can_get_timestamp(struct m_can_classdev *cdev)
  424. {
  425. u32 tscv;
  426. u32 tsc;
  427. tscv = m_can_read(cdev, M_CAN_TSCV);
  428. tsc = FIELD_GET(TSCV_TSC_MASK, tscv);
  429. return (tsc << 16);
  430. }
  431. static void m_can_clean(struct net_device *net)
  432. {
  433. struct m_can_classdev *cdev = netdev_priv(net);
  434. unsigned long irqflags;
  435. if (cdev->tx_ops) {
  436. for (int i = 0; i != cdev->tx_fifo_size; ++i) {
  437. if (!cdev->tx_ops[i].skb)
  438. continue;
  439. net->stats.tx_errors++;
  440. cdev->tx_ops[i].skb = NULL;
  441. }
  442. }
  443. for (int i = 0; i != cdev->can.echo_skb_max; ++i)
  444. can_free_echo_skb(cdev->net, i, NULL);
  445. netdev_reset_queue(cdev->net);
  446. spin_lock_irqsave(&cdev->tx_handling_spinlock, irqflags);
  447. cdev->tx_fifo_in_flight = 0;
  448. spin_unlock_irqrestore(&cdev->tx_handling_spinlock, irqflags);
  449. }
  450. /* For peripherals, pass skb to rx-offload, which will push skb from
  451. * napi. For non-peripherals, RX is done in napi already, so push
  452. * directly. timestamp is used to ensure good skb ordering in
  453. * rx-offload and is ignored for non-peripherals.
  454. */
  455. static void m_can_receive_skb(struct m_can_classdev *cdev,
  456. struct sk_buff *skb,
  457. u32 timestamp)
  458. {
  459. if (cdev->is_peripheral) {
  460. struct net_device_stats *stats = &cdev->net->stats;
  461. int err;
  462. err = can_rx_offload_queue_timestamp(&cdev->offload, skb,
  463. timestamp);
  464. if (err)
  465. stats->rx_fifo_errors++;
  466. } else {
  467. netif_receive_skb(skb);
  468. }
  469. }
  470. static int m_can_read_fifo(struct net_device *dev, u32 fgi)
  471. {
  472. struct net_device_stats *stats = &dev->stats;
  473. struct m_can_classdev *cdev = netdev_priv(dev);
  474. struct canfd_frame *cf;
  475. struct sk_buff *skb;
  476. struct id_and_dlc fifo_header;
  477. u32 timestamp = 0;
  478. int err;
  479. err = m_can_fifo_read(cdev, fgi, M_CAN_FIFO_ID, &fifo_header, 2);
  480. if (err)
  481. goto out_fail;
  482. if (fifo_header.dlc & RX_BUF_FDF)
  483. skb = alloc_canfd_skb(dev, &cf);
  484. else
  485. skb = alloc_can_skb(dev, (struct can_frame **)&cf);
  486. if (!skb) {
  487. stats->rx_dropped++;
  488. return 0;
  489. }
  490. if (fifo_header.dlc & RX_BUF_FDF)
  491. cf->len = can_fd_dlc2len((fifo_header.dlc >> 16) & 0x0F);
  492. else
  493. cf->len = can_cc_dlc2len((fifo_header.dlc >> 16) & 0x0F);
  494. if (fifo_header.id & RX_BUF_XTD)
  495. cf->can_id = (fifo_header.id & CAN_EFF_MASK) | CAN_EFF_FLAG;
  496. else
  497. cf->can_id = (fifo_header.id >> 18) & CAN_SFF_MASK;
  498. if (fifo_header.id & RX_BUF_ESI) {
  499. cf->flags |= CANFD_ESI;
  500. netdev_dbg(dev, "ESI Error\n");
  501. }
  502. if (!(fifo_header.dlc & RX_BUF_FDF) && (fifo_header.id & RX_BUF_RTR)) {
  503. cf->can_id |= CAN_RTR_FLAG;
  504. } else {
  505. if (fifo_header.dlc & RX_BUF_BRS)
  506. cf->flags |= CANFD_BRS;
  507. err = m_can_fifo_read(cdev, fgi, M_CAN_FIFO_DATA,
  508. cf->data, DIV_ROUND_UP(cf->len, 4));
  509. if (err)
  510. goto out_free_skb;
  511. stats->rx_bytes += cf->len;
  512. }
  513. stats->rx_packets++;
  514. timestamp = FIELD_GET(RX_BUF_RXTS_MASK, fifo_header.dlc) << 16;
  515. m_can_receive_skb(cdev, skb, timestamp);
  516. return 0;
  517. out_free_skb:
  518. kfree_skb(skb);
  519. out_fail:
  520. netdev_err(dev, "FIFO read returned %d\n", err);
  521. return err;
  522. }
  523. static int m_can_do_rx_poll(struct net_device *dev, int quota)
  524. {
  525. struct m_can_classdev *cdev = netdev_priv(dev);
  526. u32 pkts = 0;
  527. u32 rxfs;
  528. u32 rx_count;
  529. u32 fgi;
  530. int ack_fgi = -1;
  531. int i;
  532. int err = 0;
  533. rxfs = m_can_read(cdev, M_CAN_RXF0S);
  534. if (!(rxfs & RXFS_FFL_MASK)) {
  535. netdev_dbg(dev, "no messages in fifo0\n");
  536. return 0;
  537. }
  538. rx_count = FIELD_GET(RXFS_FFL_MASK, rxfs);
  539. fgi = FIELD_GET(RXFS_FGI_MASK, rxfs);
  540. for (i = 0; i < rx_count && quota > 0; ++i) {
  541. err = m_can_read_fifo(dev, fgi);
  542. if (err)
  543. break;
  544. quota--;
  545. pkts++;
  546. ack_fgi = fgi;
  547. fgi = (++fgi >= cdev->mcfg[MRAM_RXF0].num ? 0 : fgi);
  548. }
  549. if (ack_fgi != -1)
  550. m_can_write(cdev, M_CAN_RXF0A, ack_fgi);
  551. if (err)
  552. return err;
  553. return pkts;
  554. }
  555. static int m_can_handle_lost_msg(struct net_device *dev)
  556. {
  557. struct m_can_classdev *cdev = netdev_priv(dev);
  558. struct net_device_stats *stats = &dev->stats;
  559. struct sk_buff *skb;
  560. struct can_frame *frame;
  561. u32 timestamp = 0;
  562. netdev_dbg(dev, "msg lost in rxf0\n");
  563. stats->rx_errors++;
  564. stats->rx_over_errors++;
  565. skb = alloc_can_err_skb(dev, &frame);
  566. if (unlikely(!skb))
  567. return 0;
  568. frame->can_id |= CAN_ERR_CRTL;
  569. frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
  570. if (cdev->is_peripheral)
  571. timestamp = m_can_get_timestamp(cdev);
  572. m_can_receive_skb(cdev, skb, timestamp);
  573. return 1;
  574. }
  575. static int m_can_handle_lec_err(struct net_device *dev,
  576. enum m_can_lec_type lec_type)
  577. {
  578. struct m_can_classdev *cdev = netdev_priv(dev);
  579. struct net_device_stats *stats = &dev->stats;
  580. struct can_frame *cf;
  581. struct sk_buff *skb;
  582. u32 timestamp = 0;
  583. cdev->can.can_stats.bus_error++;
  584. /* propagate the error condition to the CAN stack */
  585. skb = alloc_can_err_skb(dev, &cf);
  586. /* check for 'last error code' which tells us the
  587. * type of the last error to occur on the CAN bus
  588. */
  589. if (likely(skb))
  590. cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
  591. switch (lec_type) {
  592. case LEC_STUFF_ERROR:
  593. netdev_dbg(dev, "stuff error\n");
  594. stats->rx_errors++;
  595. if (likely(skb))
  596. cf->data[2] |= CAN_ERR_PROT_STUFF;
  597. break;
  598. case LEC_FORM_ERROR:
  599. netdev_dbg(dev, "form error\n");
  600. stats->rx_errors++;
  601. if (likely(skb))
  602. cf->data[2] |= CAN_ERR_PROT_FORM;
  603. break;
  604. case LEC_ACK_ERROR:
  605. netdev_dbg(dev, "ack error\n");
  606. stats->tx_errors++;
  607. if (likely(skb))
  608. cf->data[3] = CAN_ERR_PROT_LOC_ACK;
  609. break;
  610. case LEC_BIT1_ERROR:
  611. netdev_dbg(dev, "bit1 error\n");
  612. stats->tx_errors++;
  613. if (likely(skb))
  614. cf->data[2] |= CAN_ERR_PROT_BIT1;
  615. break;
  616. case LEC_BIT0_ERROR:
  617. netdev_dbg(dev, "bit0 error\n");
  618. stats->tx_errors++;
  619. if (likely(skb))
  620. cf->data[2] |= CAN_ERR_PROT_BIT0;
  621. break;
  622. case LEC_CRC_ERROR:
  623. netdev_dbg(dev, "CRC error\n");
  624. stats->rx_errors++;
  625. if (likely(skb))
  626. cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
  627. break;
  628. default:
  629. break;
  630. }
  631. if (unlikely(!skb))
  632. return 0;
  633. if (cdev->is_peripheral)
  634. timestamp = m_can_get_timestamp(cdev);
  635. m_can_receive_skb(cdev, skb, timestamp);
  636. return 1;
  637. }
  638. static int __m_can_get_berr_counter(const struct net_device *dev,
  639. struct can_berr_counter *bec)
  640. {
  641. struct m_can_classdev *cdev = netdev_priv(dev);
  642. unsigned int ecr;
  643. ecr = m_can_read(cdev, M_CAN_ECR);
  644. bec->rxerr = FIELD_GET(ECR_REC_MASK, ecr);
  645. bec->txerr = FIELD_GET(ECR_TEC_MASK, ecr);
  646. return 0;
  647. }
  648. static int m_can_clk_start(struct m_can_classdev *cdev)
  649. {
  650. if (cdev->pm_clock_support == 0)
  651. return 0;
  652. return pm_runtime_resume_and_get(cdev->dev);
  653. }
  654. static void m_can_clk_stop(struct m_can_classdev *cdev)
  655. {
  656. if (cdev->pm_clock_support)
  657. pm_runtime_put_sync(cdev->dev);
  658. }
  659. static int m_can_get_berr_counter(const struct net_device *dev,
  660. struct can_berr_counter *bec)
  661. {
  662. struct m_can_classdev *cdev = netdev_priv(dev);
  663. int err;
  664. /* Avoid waking up the controller if the interface is down */
  665. if (!(dev->flags & IFF_UP))
  666. return 0;
  667. err = m_can_clk_start(cdev);
  668. if (err)
  669. return err;
  670. __m_can_get_berr_counter(dev, bec);
  671. m_can_clk_stop(cdev);
  672. return 0;
  673. }
  674. static int m_can_handle_state_change(struct net_device *dev,
  675. enum can_state new_state)
  676. {
  677. struct m_can_classdev *cdev = netdev_priv(dev);
  678. struct can_frame *cf;
  679. struct sk_buff *skb;
  680. struct can_berr_counter bec;
  681. unsigned int ecr;
  682. u32 timestamp = 0;
  683. switch (new_state) {
  684. case CAN_STATE_ERROR_ACTIVE:
  685. cdev->can.state = CAN_STATE_ERROR_ACTIVE;
  686. break;
  687. case CAN_STATE_ERROR_WARNING:
  688. /* error warning state */
  689. cdev->can.can_stats.error_warning++;
  690. cdev->can.state = CAN_STATE_ERROR_WARNING;
  691. break;
  692. case CAN_STATE_ERROR_PASSIVE:
  693. /* error passive state */
  694. cdev->can.can_stats.error_passive++;
  695. cdev->can.state = CAN_STATE_ERROR_PASSIVE;
  696. break;
  697. case CAN_STATE_BUS_OFF:
  698. /* bus-off state */
  699. cdev->can.state = CAN_STATE_BUS_OFF;
  700. m_can_disable_all_interrupts(cdev);
  701. cdev->can.can_stats.bus_off++;
  702. can_bus_off(dev);
  703. break;
  704. default:
  705. break;
  706. }
  707. /* propagate the error condition to the CAN stack */
  708. skb = alloc_can_err_skb(dev, &cf);
  709. if (unlikely(!skb))
  710. return 0;
  711. __m_can_get_berr_counter(dev, &bec);
  712. switch (new_state) {
  713. case CAN_STATE_ERROR_ACTIVE:
  714. cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
  715. cf->data[1] = CAN_ERR_CRTL_ACTIVE;
  716. cf->data[6] = bec.txerr;
  717. cf->data[7] = bec.rxerr;
  718. break;
  719. case CAN_STATE_ERROR_WARNING:
  720. /* error warning state */
  721. cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
  722. cf->data[1] = (bec.txerr > bec.rxerr) ?
  723. CAN_ERR_CRTL_TX_WARNING :
  724. CAN_ERR_CRTL_RX_WARNING;
  725. cf->data[6] = bec.txerr;
  726. cf->data[7] = bec.rxerr;
  727. break;
  728. case CAN_STATE_ERROR_PASSIVE:
  729. /* error passive state */
  730. cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
  731. ecr = m_can_read(cdev, M_CAN_ECR);
  732. if (ecr & ECR_RP)
  733. cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
  734. if (bec.txerr > 127)
  735. cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
  736. cf->data[6] = bec.txerr;
  737. cf->data[7] = bec.rxerr;
  738. break;
  739. case CAN_STATE_BUS_OFF:
  740. /* bus-off state */
  741. cf->can_id |= CAN_ERR_BUSOFF;
  742. break;
  743. default:
  744. break;
  745. }
  746. if (cdev->is_peripheral)
  747. timestamp = m_can_get_timestamp(cdev);
  748. m_can_receive_skb(cdev, skb, timestamp);
  749. return 1;
  750. }
  751. static enum can_state
  752. m_can_state_get_by_psr(struct m_can_classdev *cdev)
  753. {
  754. u32 reg_psr;
  755. reg_psr = m_can_read(cdev, M_CAN_PSR);
  756. if (reg_psr & PSR_BO)
  757. return CAN_STATE_BUS_OFF;
  758. if (reg_psr & PSR_EP)
  759. return CAN_STATE_ERROR_PASSIVE;
  760. if (reg_psr & PSR_EW)
  761. return CAN_STATE_ERROR_WARNING;
  762. return CAN_STATE_ERROR_ACTIVE;
  763. }
  764. static int m_can_handle_state_errors(struct net_device *dev)
  765. {
  766. struct m_can_classdev *cdev = netdev_priv(dev);
  767. enum can_state new_state;
  768. new_state = m_can_state_get_by_psr(cdev);
  769. if (new_state == cdev->can.state)
  770. return 0;
  771. return m_can_handle_state_change(dev, new_state);
  772. }
  773. static void m_can_handle_other_err(struct net_device *dev, u32 irqstatus)
  774. {
  775. if (irqstatus & IR_WDI)
  776. netdev_err(dev, "Message RAM Watchdog event due to missing READY\n");
  777. if (irqstatus & IR_BEU)
  778. netdev_err(dev, "Bit Error Uncorrected\n");
  779. if (irqstatus & IR_BEC)
  780. netdev_err(dev, "Bit Error Corrected\n");
  781. if (irqstatus & IR_TOO)
  782. netdev_err(dev, "Timeout reached\n");
  783. if (irqstatus & IR_MRAF)
  784. netdev_err(dev, "Message RAM access failure occurred\n");
  785. }
  786. static inline bool is_lec_err(u8 lec)
  787. {
  788. return lec != LEC_NO_ERROR && lec != LEC_NO_CHANGE;
  789. }
  790. static inline bool m_can_is_protocol_err(u32 irqstatus)
  791. {
  792. return irqstatus & IR_ERR_LEC_31X;
  793. }
  794. static int m_can_handle_protocol_error(struct net_device *dev, u32 irqstatus)
  795. {
  796. struct net_device_stats *stats = &dev->stats;
  797. struct m_can_classdev *cdev = netdev_priv(dev);
  798. struct can_frame *cf;
  799. struct sk_buff *skb;
  800. u32 timestamp = 0;
  801. /* propagate the error condition to the CAN stack */
  802. skb = alloc_can_err_skb(dev, &cf);
  803. /* update tx error stats since there is protocol error */
  804. stats->tx_errors++;
  805. /* update arbitration lost status */
  806. if (cdev->version >= 31 && (irqstatus & IR_PEA)) {
  807. netdev_dbg(dev, "Protocol error in Arbitration fail\n");
  808. cdev->can.can_stats.arbitration_lost++;
  809. if (skb) {
  810. cf->can_id |= CAN_ERR_LOSTARB;
  811. cf->data[0] |= CAN_ERR_LOSTARB_UNSPEC;
  812. }
  813. }
  814. if (unlikely(!skb)) {
  815. netdev_dbg(dev, "allocation of skb failed\n");
  816. return 0;
  817. }
  818. if (cdev->is_peripheral)
  819. timestamp = m_can_get_timestamp(cdev);
  820. m_can_receive_skb(cdev, skb, timestamp);
  821. return 1;
  822. }
  823. static int m_can_handle_bus_errors(struct net_device *dev, u32 irqstatus,
  824. u32 psr)
  825. {
  826. struct m_can_classdev *cdev = netdev_priv(dev);
  827. int work_done = 0;
  828. if (irqstatus & IR_RF0L)
  829. work_done += m_can_handle_lost_msg(dev);
  830. /* handle lec errors on the bus */
  831. if (cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) {
  832. u8 lec = FIELD_GET(PSR_LEC_MASK, psr);
  833. u8 dlec = FIELD_GET(PSR_DLEC_MASK, psr);
  834. if (is_lec_err(lec)) {
  835. netdev_dbg(dev, "Arbitration phase error detected\n");
  836. work_done += m_can_handle_lec_err(dev, lec);
  837. }
  838. if (is_lec_err(dlec)) {
  839. netdev_dbg(dev, "Data phase error detected\n");
  840. work_done += m_can_handle_lec_err(dev, dlec);
  841. }
  842. }
  843. /* handle protocol errors in arbitration phase */
  844. if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) &&
  845. m_can_is_protocol_err(irqstatus))
  846. work_done += m_can_handle_protocol_error(dev, irqstatus);
  847. /* other unproccessed error interrupts */
  848. m_can_handle_other_err(dev, irqstatus);
  849. return work_done;
  850. }
  851. static int m_can_rx_handler(struct net_device *dev, int quota, u32 irqstatus)
  852. {
  853. struct m_can_classdev *cdev = netdev_priv(dev);
  854. int rx_work_or_err;
  855. int work_done = 0;
  856. if (!irqstatus)
  857. goto end;
  858. /* Errata workaround for issue "Needless activation of MRAF irq"
  859. * During frame reception while the MCAN is in Error Passive state
  860. * and the Receive Error Counter has the value MCAN_ECR.REC = 127,
  861. * it may happen that MCAN_IR.MRAF is set although there was no
  862. * Message RAM access failure.
  863. * If MCAN_IR.MRAF is enabled, an interrupt to the Host CPU is generated
  864. * The Message RAM Access Failure interrupt routine needs to check
  865. * whether MCAN_ECR.RP = ’1’ and MCAN_ECR.REC = 127.
  866. * In this case, reset MCAN_IR.MRAF. No further action is required.
  867. */
  868. if (cdev->version <= 31 && irqstatus & IR_MRAF &&
  869. m_can_read(cdev, M_CAN_ECR) & ECR_RP) {
  870. struct can_berr_counter bec;
  871. __m_can_get_berr_counter(dev, &bec);
  872. if (bec.rxerr == 127) {
  873. m_can_write(cdev, M_CAN_IR, IR_MRAF);
  874. irqstatus &= ~IR_MRAF;
  875. }
  876. }
  877. if (irqstatus & IR_ERR_STATE)
  878. work_done += m_can_handle_state_errors(dev);
  879. if (irqstatus & IR_ERR_BUS_30X)
  880. work_done += m_can_handle_bus_errors(dev, irqstatus,
  881. m_can_read(cdev, M_CAN_PSR));
  882. if (irqstatus & IR_RF0N) {
  883. rx_work_or_err = m_can_do_rx_poll(dev, (quota - work_done));
  884. if (rx_work_or_err < 0)
  885. return rx_work_or_err;
  886. work_done += rx_work_or_err;
  887. }
  888. end:
  889. return work_done;
  890. }
  891. static int m_can_poll(struct napi_struct *napi, int quota)
  892. {
  893. struct net_device *dev = napi->dev;
  894. struct m_can_classdev *cdev = netdev_priv(dev);
  895. int work_done;
  896. u32 irqstatus;
  897. irqstatus = cdev->irqstatus | m_can_read(cdev, M_CAN_IR);
  898. work_done = m_can_rx_handler(dev, quota, irqstatus);
  899. /* Don't re-enable interrupts if the driver had a fatal error
  900. * (e.g., FIFO read failure).
  901. */
  902. if (work_done >= 0 && work_done < quota) {
  903. napi_complete_done(napi, work_done);
  904. m_can_enable_all_interrupts(cdev);
  905. }
  906. return work_done;
  907. }
  908. /* Echo tx skb and update net stats. Peripherals use rx-offload for
  909. * echo. timestamp is used for peripherals to ensure correct ordering
  910. * by rx-offload, and is ignored for non-peripherals.
  911. */
  912. static unsigned int m_can_tx_update_stats(struct m_can_classdev *cdev,
  913. unsigned int msg_mark, u32 timestamp)
  914. {
  915. struct net_device *dev = cdev->net;
  916. struct net_device_stats *stats = &dev->stats;
  917. unsigned int frame_len;
  918. if (cdev->is_peripheral)
  919. stats->tx_bytes +=
  920. can_rx_offload_get_echo_skb_queue_timestamp(&cdev->offload,
  921. msg_mark,
  922. timestamp,
  923. &frame_len);
  924. else
  925. stats->tx_bytes += can_get_echo_skb(dev, msg_mark, &frame_len);
  926. stats->tx_packets++;
  927. return frame_len;
  928. }
  929. static void m_can_finish_tx(struct m_can_classdev *cdev, int transmitted,
  930. unsigned int transmitted_frame_len)
  931. {
  932. unsigned long irqflags;
  933. netdev_completed_queue(cdev->net, transmitted, transmitted_frame_len);
  934. spin_lock_irqsave(&cdev->tx_handling_spinlock, irqflags);
  935. if (cdev->tx_fifo_in_flight >= cdev->tx_fifo_size && transmitted > 0)
  936. netif_wake_queue(cdev->net);
  937. cdev->tx_fifo_in_flight -= transmitted;
  938. spin_unlock_irqrestore(&cdev->tx_handling_spinlock, irqflags);
  939. }
  940. static netdev_tx_t m_can_start_tx(struct m_can_classdev *cdev)
  941. {
  942. unsigned long irqflags;
  943. int tx_fifo_in_flight;
  944. spin_lock_irqsave(&cdev->tx_handling_spinlock, irqflags);
  945. tx_fifo_in_flight = cdev->tx_fifo_in_flight + 1;
  946. if (tx_fifo_in_flight >= cdev->tx_fifo_size) {
  947. netif_stop_queue(cdev->net);
  948. if (tx_fifo_in_flight > cdev->tx_fifo_size) {
  949. netdev_err_once(cdev->net, "hard_xmit called while TX FIFO full\n");
  950. spin_unlock_irqrestore(&cdev->tx_handling_spinlock, irqflags);
  951. return NETDEV_TX_BUSY;
  952. }
  953. }
  954. cdev->tx_fifo_in_flight = tx_fifo_in_flight;
  955. spin_unlock_irqrestore(&cdev->tx_handling_spinlock, irqflags);
  956. return NETDEV_TX_OK;
  957. }
  958. static int m_can_echo_tx_event(struct net_device *dev)
  959. {
  960. u32 txe_count = 0;
  961. u32 m_can_txefs;
  962. u32 fgi = 0;
  963. int ack_fgi = -1;
  964. int i = 0;
  965. int err = 0;
  966. unsigned int msg_mark;
  967. int processed = 0;
  968. unsigned int processed_frame_len = 0;
  969. struct m_can_classdev *cdev = netdev_priv(dev);
  970. /* read tx event fifo status */
  971. m_can_txefs = m_can_read(cdev, M_CAN_TXEFS);
  972. /* Get Tx Event fifo element count */
  973. txe_count = FIELD_GET(TXEFS_EFFL_MASK, m_can_txefs);
  974. fgi = FIELD_GET(TXEFS_EFGI_MASK, m_can_txefs);
  975. /* Get and process all sent elements */
  976. for (i = 0; i < txe_count; i++) {
  977. u32 txe, timestamp = 0;
  978. /* get message marker, timestamp */
  979. err = m_can_txe_fifo_read(cdev, fgi, 4, &txe);
  980. if (err) {
  981. netdev_err(dev, "TXE FIFO read returned %d\n", err);
  982. break;
  983. }
  984. msg_mark = FIELD_GET(TX_EVENT_MM_MASK, txe);
  985. timestamp = FIELD_GET(TX_EVENT_TXTS_MASK, txe) << 16;
  986. ack_fgi = fgi;
  987. fgi = (++fgi >= cdev->mcfg[MRAM_TXE].num ? 0 : fgi);
  988. /* update stats */
  989. processed_frame_len += m_can_tx_update_stats(cdev, msg_mark,
  990. timestamp);
  991. ++processed;
  992. }
  993. if (ack_fgi != -1)
  994. m_can_write(cdev, M_CAN_TXEFA, FIELD_PREP(TXEFA_EFAI_MASK,
  995. ack_fgi));
  996. m_can_finish_tx(cdev, processed, processed_frame_len);
  997. return err;
  998. }
  999. static void m_can_coalescing_update(struct m_can_classdev *cdev, u32 ir)
  1000. {
  1001. u32 new_interrupts = cdev->active_interrupts;
  1002. bool enable_rx_timer = false;
  1003. bool enable_tx_timer = false;
  1004. if (!cdev->net->irq)
  1005. return;
  1006. if (cdev->rx_coalesce_usecs_irq > 0 && (ir & (IR_RF0N | IR_RF0W))) {
  1007. enable_rx_timer = true;
  1008. new_interrupts &= ~IR_RF0N;
  1009. }
  1010. if (cdev->tx_coalesce_usecs_irq > 0 && (ir & (IR_TEFN | IR_TEFW))) {
  1011. enable_tx_timer = true;
  1012. new_interrupts &= ~IR_TEFN;
  1013. }
  1014. if (!enable_rx_timer && !hrtimer_active(&cdev->hrtimer))
  1015. new_interrupts |= IR_RF0N;
  1016. if (!enable_tx_timer && !hrtimer_active(&cdev->hrtimer))
  1017. new_interrupts |= IR_TEFN;
  1018. m_can_interrupt_enable(cdev, new_interrupts);
  1019. if (enable_rx_timer | enable_tx_timer)
  1020. hrtimer_start(&cdev->hrtimer, cdev->irq_timer_wait,
  1021. HRTIMER_MODE_REL);
  1022. }
  1023. /* This interrupt handler is called either from the interrupt thread or a
  1024. * hrtimer. This has implications like cancelling a timer won't be possible
  1025. * blocking.
  1026. */
  1027. static int m_can_interrupt_handler(struct m_can_classdev *cdev)
  1028. {
  1029. struct net_device *dev = cdev->net;
  1030. u32 ir = 0, ir_read;
  1031. int ret;
  1032. if (pm_runtime_suspended(cdev->dev))
  1033. return IRQ_NONE;
  1034. /* The m_can controller signals its interrupt status as a level, but
  1035. * depending in the integration the CPU may interpret the signal as
  1036. * edge-triggered (for example with m_can_pci). For these
  1037. * edge-triggered integrations, we must observe that IR is 0 at least
  1038. * once to be sure that the next interrupt will generate an edge.
  1039. */
  1040. while ((ir_read = m_can_read(cdev, M_CAN_IR)) != 0) {
  1041. ir |= ir_read;
  1042. /* ACK all irqs */
  1043. m_can_write(cdev, M_CAN_IR, ir);
  1044. if (!cdev->irq_edge_triggered)
  1045. break;
  1046. }
  1047. m_can_coalescing_update(cdev, ir);
  1048. if (!ir)
  1049. return IRQ_NONE;
  1050. if (cdev->ops->clear_interrupts)
  1051. cdev->ops->clear_interrupts(cdev);
  1052. /* schedule NAPI in case of
  1053. * - rx IRQ
  1054. * - state change IRQ
  1055. * - bus error IRQ and bus error reporting
  1056. */
  1057. if (ir & (IR_RF0N | IR_RF0W | IR_ERR_ALL_30X)) {
  1058. cdev->irqstatus = ir;
  1059. if (!cdev->is_peripheral) {
  1060. m_can_disable_all_interrupts(cdev);
  1061. napi_schedule(&cdev->napi);
  1062. } else {
  1063. ret = m_can_rx_handler(dev, NAPI_POLL_WEIGHT, ir);
  1064. if (ret < 0)
  1065. return ret;
  1066. }
  1067. }
  1068. if (cdev->version == 30) {
  1069. if (ir & IR_TC) {
  1070. /* Transmission Complete Interrupt*/
  1071. u32 timestamp = 0;
  1072. unsigned int frame_len;
  1073. if (cdev->is_peripheral)
  1074. timestamp = m_can_get_timestamp(cdev);
  1075. frame_len = m_can_tx_update_stats(cdev, 0, timestamp);
  1076. m_can_finish_tx(cdev, 1, frame_len);
  1077. }
  1078. } else {
  1079. if (ir & (IR_TEFN | IR_TEFW)) {
  1080. /* New TX FIFO Element arrived */
  1081. ret = m_can_echo_tx_event(dev);
  1082. if (ret != 0)
  1083. return ret;
  1084. }
  1085. }
  1086. if (cdev->is_peripheral)
  1087. can_rx_offload_threaded_irq_finish(&cdev->offload);
  1088. return IRQ_HANDLED;
  1089. }
  1090. static irqreturn_t m_can_isr(int irq, void *dev_id)
  1091. {
  1092. struct net_device *dev = (struct net_device *)dev_id;
  1093. struct m_can_classdev *cdev = netdev_priv(dev);
  1094. int ret;
  1095. ret = m_can_interrupt_handler(cdev);
  1096. if (ret < 0) {
  1097. m_can_disable_all_interrupts(cdev);
  1098. return IRQ_HANDLED;
  1099. }
  1100. return ret;
  1101. }
  1102. static enum hrtimer_restart m_can_coalescing_timer(struct hrtimer *timer)
  1103. {
  1104. struct m_can_classdev *cdev = container_of(timer, struct m_can_classdev, hrtimer);
  1105. if (cdev->can.state == CAN_STATE_BUS_OFF ||
  1106. cdev->can.state == CAN_STATE_STOPPED)
  1107. return HRTIMER_NORESTART;
  1108. irq_wake_thread(cdev->net->irq, cdev->net);
  1109. return HRTIMER_NORESTART;
  1110. }
  1111. static const struct can_bittiming_const m_can_bittiming_const_30X = {
  1112. .name = KBUILD_MODNAME,
  1113. .tseg1_min = 2, /* Time segment 1 = prop_seg + phase_seg1 */
  1114. .tseg1_max = 64,
  1115. .tseg2_min = 1, /* Time segment 2 = phase_seg2 */
  1116. .tseg2_max = 16,
  1117. .sjw_max = 16,
  1118. .brp_min = 1,
  1119. .brp_max = 1024,
  1120. .brp_inc = 1,
  1121. };
  1122. static const struct can_bittiming_const m_can_data_bittiming_const_30X = {
  1123. .name = KBUILD_MODNAME,
  1124. .tseg1_min = 2, /* Time segment 1 = prop_seg + phase_seg1 */
  1125. .tseg1_max = 16,
  1126. .tseg2_min = 1, /* Time segment 2 = phase_seg2 */
  1127. .tseg2_max = 8,
  1128. .sjw_max = 4,
  1129. .brp_min = 1,
  1130. .brp_max = 32,
  1131. .brp_inc = 1,
  1132. };
  1133. static const struct can_bittiming_const m_can_bittiming_const_31X = {
  1134. .name = KBUILD_MODNAME,
  1135. .tseg1_min = 2, /* Time segment 1 = prop_seg + phase_seg1 */
  1136. .tseg1_max = 256,
  1137. .tseg2_min = 2, /* Time segment 2 = phase_seg2 */
  1138. .tseg2_max = 128,
  1139. .sjw_max = 128,
  1140. .brp_min = 1,
  1141. .brp_max = 512,
  1142. .brp_inc = 1,
  1143. };
  1144. static const struct can_bittiming_const m_can_data_bittiming_const_31X = {
  1145. .name = KBUILD_MODNAME,
  1146. .tseg1_min = 1, /* Time segment 1 = prop_seg + phase_seg1 */
  1147. .tseg1_max = 32,
  1148. .tseg2_min = 1, /* Time segment 2 = phase_seg2 */
  1149. .tseg2_max = 16,
  1150. .sjw_max = 16,
  1151. .brp_min = 1,
  1152. .brp_max = 32,
  1153. .brp_inc = 1,
  1154. };
  1155. static int m_can_init_ram(struct m_can_classdev *cdev)
  1156. {
  1157. int end, i, start;
  1158. int err = 0;
  1159. /* initialize the entire Message RAM in use to avoid possible
  1160. * ECC/parity checksum errors when reading an uninitialized buffer
  1161. */
  1162. start = cdev->mcfg[MRAM_SIDF].off;
  1163. end = cdev->mcfg[MRAM_TXB].off +
  1164. cdev->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
  1165. for (i = start; i < end; i += 4) {
  1166. err = m_can_fifo_write_no_off(cdev, i, 0x0);
  1167. if (err)
  1168. break;
  1169. }
  1170. return err;
  1171. }
  1172. static int m_can_set_bittiming(struct net_device *dev)
  1173. {
  1174. struct m_can_classdev *cdev = netdev_priv(dev);
  1175. const struct can_bittiming *bt = &cdev->can.bittiming;
  1176. const struct can_bittiming *dbt = &cdev->can.fd.data_bittiming;
  1177. u16 brp, sjw, tseg1, tseg2;
  1178. u32 reg_btp;
  1179. brp = bt->brp - 1;
  1180. sjw = bt->sjw - 1;
  1181. tseg1 = bt->prop_seg + bt->phase_seg1 - 1;
  1182. tseg2 = bt->phase_seg2 - 1;
  1183. reg_btp = FIELD_PREP(NBTP_NBRP_MASK, brp) |
  1184. FIELD_PREP(NBTP_NSJW_MASK, sjw) |
  1185. FIELD_PREP(NBTP_NTSEG1_MASK, tseg1) |
  1186. FIELD_PREP(NBTP_NTSEG2_MASK, tseg2);
  1187. m_can_write(cdev, M_CAN_NBTP, reg_btp);
  1188. if (cdev->can.ctrlmode & CAN_CTRLMODE_FD) {
  1189. reg_btp = 0;
  1190. brp = dbt->brp - 1;
  1191. sjw = dbt->sjw - 1;
  1192. tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1;
  1193. tseg2 = dbt->phase_seg2 - 1;
  1194. /* TDC is only needed for bitrates beyond 2.5 MBit/s.
  1195. * This is mentioned in the "Bit Time Requirements for CAN FD"
  1196. * paper presented at the International CAN Conference 2013
  1197. */
  1198. if (dbt->bitrate > 2500000) {
  1199. u32 tdco, ssp;
  1200. /* Use the same value of secondary sampling point
  1201. * as the data sampling point
  1202. */
  1203. ssp = dbt->sample_point;
  1204. /* Equation based on Bosch's M_CAN User Manual's
  1205. * Transmitter Delay Compensation Section
  1206. */
  1207. tdco = (cdev->can.clock.freq / 1000) *
  1208. ssp / dbt->bitrate;
  1209. /* Max valid TDCO value is 127 */
  1210. if (tdco > 127) {
  1211. netdev_warn(dev, "TDCO value of %u is beyond maximum. Using maximum possible value\n",
  1212. tdco);
  1213. tdco = 127;
  1214. }
  1215. reg_btp |= DBTP_TDC;
  1216. m_can_write(cdev, M_CAN_TDCR,
  1217. FIELD_PREP(TDCR_TDCO_MASK, tdco));
  1218. }
  1219. reg_btp |= FIELD_PREP(DBTP_DBRP_MASK, brp) |
  1220. FIELD_PREP(DBTP_DSJW_MASK, sjw) |
  1221. FIELD_PREP(DBTP_DTSEG1_MASK, tseg1) |
  1222. FIELD_PREP(DBTP_DTSEG2_MASK, tseg2);
  1223. m_can_write(cdev, M_CAN_DBTP, reg_btp);
  1224. }
  1225. return 0;
  1226. }
  1227. /* Configure M_CAN chip:
  1228. * - set rx buffer/fifo element size
  1229. * - configure rx fifo
  1230. * - accept non-matching frame into fifo 0
  1231. * - configure tx buffer
  1232. * - >= v3.1.x: TX FIFO is used
  1233. * - configure mode
  1234. * - setup bittiming
  1235. * - configure timestamp generation
  1236. */
  1237. static int m_can_chip_config(struct net_device *dev)
  1238. {
  1239. struct m_can_classdev *cdev = netdev_priv(dev);
  1240. u32 interrupts = IR_ALL_INT;
  1241. u32 cccr, test;
  1242. int err;
  1243. err = m_can_init_ram(cdev);
  1244. if (err) {
  1245. netdev_err(dev, "Message RAM configuration failed\n");
  1246. return err;
  1247. }
  1248. /* Disable unused interrupts */
  1249. interrupts &= ~(IR_ARA | IR_ELO | IR_DRX | IR_TEFF | IR_TFE | IR_TCF |
  1250. IR_HPM | IR_RF1F | IR_RF1W | IR_RF1N | IR_RF0F |
  1251. IR_TSW);
  1252. err = m_can_config_enable(cdev);
  1253. if (err)
  1254. return err;
  1255. /* RX Buffer/FIFO Element Size 64 bytes data field */
  1256. m_can_write(cdev, M_CAN_RXESC,
  1257. FIELD_PREP(RXESC_RBDS_MASK, RXESC_64B) |
  1258. FIELD_PREP(RXESC_F1DS_MASK, RXESC_64B) |
  1259. FIELD_PREP(RXESC_F0DS_MASK, RXESC_64B));
  1260. /* Accept Non-matching Frames Into FIFO 0 */
  1261. m_can_write(cdev, M_CAN_GFC, 0x0);
  1262. if (cdev->version == 30) {
  1263. /* only support one Tx Buffer currently */
  1264. m_can_write(cdev, M_CAN_TXBC, FIELD_PREP(TXBC_NDTB_MASK, 1) |
  1265. cdev->mcfg[MRAM_TXB].off);
  1266. } else {
  1267. /* TX FIFO is used for newer IP Core versions */
  1268. m_can_write(cdev, M_CAN_TXBC,
  1269. FIELD_PREP(TXBC_TFQS_MASK,
  1270. cdev->mcfg[MRAM_TXB].num) |
  1271. cdev->mcfg[MRAM_TXB].off);
  1272. }
  1273. /* support 64 bytes payload */
  1274. m_can_write(cdev, M_CAN_TXESC,
  1275. FIELD_PREP(TXESC_TBDS_MASK, TXESC_TBDS_64B));
  1276. /* TX Event FIFO */
  1277. if (cdev->version == 30) {
  1278. m_can_write(cdev, M_CAN_TXEFC,
  1279. FIELD_PREP(TXEFC_EFS_MASK, 1) |
  1280. cdev->mcfg[MRAM_TXE].off);
  1281. } else {
  1282. /* Full TX Event FIFO is used */
  1283. m_can_write(cdev, M_CAN_TXEFC,
  1284. FIELD_PREP(TXEFC_EFWM_MASK,
  1285. cdev->tx_max_coalesced_frames_irq) |
  1286. FIELD_PREP(TXEFC_EFS_MASK,
  1287. cdev->mcfg[MRAM_TXE].num) |
  1288. cdev->mcfg[MRAM_TXE].off);
  1289. }
  1290. /* rx fifo configuration, blocking mode, fifo size 1 */
  1291. m_can_write(cdev, M_CAN_RXF0C,
  1292. FIELD_PREP(RXFC_FWM_MASK, cdev->rx_max_coalesced_frames_irq) |
  1293. FIELD_PREP(RXFC_FS_MASK, cdev->mcfg[MRAM_RXF0].num) |
  1294. cdev->mcfg[MRAM_RXF0].off);
  1295. m_can_write(cdev, M_CAN_RXF1C,
  1296. FIELD_PREP(RXFC_FS_MASK, cdev->mcfg[MRAM_RXF1].num) |
  1297. cdev->mcfg[MRAM_RXF1].off);
  1298. cccr = m_can_read(cdev, M_CAN_CCCR);
  1299. test = m_can_read(cdev, M_CAN_TEST);
  1300. test &= ~TEST_LBCK;
  1301. if (cdev->version == 30) {
  1302. /* Version 3.0.x */
  1303. cccr &= ~(CCCR_TEST | CCCR_MON | CCCR_DAR |
  1304. FIELD_PREP(CCCR_CMR_MASK, FIELD_MAX(CCCR_CMR_MASK)) |
  1305. FIELD_PREP(CCCR_CME_MASK, FIELD_MAX(CCCR_CME_MASK)));
  1306. if (cdev->can.ctrlmode & CAN_CTRLMODE_FD)
  1307. cccr |= FIELD_PREP(CCCR_CME_MASK, CCCR_CME_CANFD_BRS);
  1308. } else {
  1309. /* Version 3.1.x or 3.2.x */
  1310. cccr &= ~(CCCR_TEST | CCCR_MON | CCCR_BRSE | CCCR_FDOE |
  1311. CCCR_NISO | CCCR_DAR);
  1312. /* Only 3.2.x has NISO Bit implemented */
  1313. if (cdev->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO)
  1314. cccr |= CCCR_NISO;
  1315. if (cdev->can.ctrlmode & CAN_CTRLMODE_FD)
  1316. cccr |= (CCCR_BRSE | CCCR_FDOE);
  1317. }
  1318. /* Loopback Mode */
  1319. if (cdev->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) {
  1320. cccr |= CCCR_TEST | CCCR_MON;
  1321. test |= TEST_LBCK;
  1322. }
  1323. /* Enable Monitoring (all versions) */
  1324. if (cdev->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
  1325. cccr |= CCCR_MON;
  1326. /* Disable Auto Retransmission (all versions) */
  1327. if (cdev->can.ctrlmode & CAN_CTRLMODE_ONE_SHOT)
  1328. cccr |= CCCR_DAR;
  1329. /* Write config */
  1330. m_can_write(cdev, M_CAN_CCCR, cccr);
  1331. m_can_write(cdev, M_CAN_TEST, test);
  1332. /* Enable interrupts */
  1333. if (!(cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) {
  1334. if (cdev->version == 30)
  1335. interrupts &= ~(IR_ERR_LEC_30X);
  1336. else
  1337. interrupts &= ~(IR_ERR_LEC_31X);
  1338. }
  1339. cdev->active_interrupts = 0;
  1340. m_can_interrupt_enable(cdev, interrupts);
  1341. /* route all interrupts to INT0 */
  1342. m_can_write(cdev, M_CAN_ILS, ILS_ALL_INT0);
  1343. /* set bittiming params */
  1344. m_can_set_bittiming(dev);
  1345. /* enable internal timestamp generation, with a prescaler of 16. The
  1346. * prescaler is applied to the nominal bit timing
  1347. */
  1348. m_can_write(cdev, M_CAN_TSCC,
  1349. FIELD_PREP(TSCC_TCP_MASK, 0xf) |
  1350. FIELD_PREP(TSCC_TSS_MASK, TSCC_TSS_INTERNAL));
  1351. err = m_can_config_disable(cdev);
  1352. if (err)
  1353. return err;
  1354. if (cdev->ops->init)
  1355. cdev->ops->init(cdev);
  1356. return 0;
  1357. }
  1358. static int m_can_start(struct net_device *dev)
  1359. {
  1360. struct m_can_classdev *cdev = netdev_priv(dev);
  1361. int ret;
  1362. /* basic m_can configuration */
  1363. ret = m_can_chip_config(dev);
  1364. if (ret)
  1365. return ret;
  1366. netdev_queue_set_dql_min_limit(netdev_get_tx_queue(cdev->net, 0),
  1367. cdev->tx_max_coalesced_frames);
  1368. cdev->can.state = m_can_state_get_by_psr(cdev);
  1369. m_can_enable_all_interrupts(cdev);
  1370. if (cdev->version > 30)
  1371. cdev->tx_fifo_putidx = FIELD_GET(TXFQS_TFQPI_MASK,
  1372. m_can_read(cdev, M_CAN_TXFQS));
  1373. ret = m_can_cccr_update_bits(cdev, CCCR_INIT, 0);
  1374. if (ret)
  1375. netdev_err(dev, "failed to enter normal mode\n");
  1376. return ret;
  1377. }
  1378. static int m_can_set_mode(struct net_device *dev, enum can_mode mode)
  1379. {
  1380. switch (mode) {
  1381. case CAN_MODE_START:
  1382. m_can_clean(dev);
  1383. m_can_start(dev);
  1384. netif_wake_queue(dev);
  1385. break;
  1386. default:
  1387. return -EOPNOTSUPP;
  1388. }
  1389. return 0;
  1390. }
  1391. /* Checks core release number of M_CAN
  1392. * returns 0 if an unsupported device is detected
  1393. * else it returns the release and step coded as:
  1394. * return value = 10 * <release> + 1 * <step>
  1395. */
  1396. static int m_can_check_core_release(struct m_can_classdev *cdev)
  1397. {
  1398. u32 crel_reg;
  1399. u8 rel;
  1400. u8 step;
  1401. int res;
  1402. /* Read Core Release Version and split into version number
  1403. * Example: Version 3.2.1 => rel = 3; step = 2; substep = 1;
  1404. */
  1405. crel_reg = m_can_read(cdev, M_CAN_CREL);
  1406. rel = (u8)FIELD_GET(CREL_REL_MASK, crel_reg);
  1407. step = (u8)FIELD_GET(CREL_STEP_MASK, crel_reg);
  1408. if (rel == 3) {
  1409. /* M_CAN v3.x.y: create return value */
  1410. res = 30 + step;
  1411. } else {
  1412. /* Unsupported M_CAN version */
  1413. res = 0;
  1414. }
  1415. return res;
  1416. }
  1417. /* Selectable Non ISO support only in version 3.2.x
  1418. * Return 1 if the bit is writable, 0 if it is not, or negative on error.
  1419. */
  1420. static int m_can_niso_supported(struct m_can_classdev *cdev)
  1421. {
  1422. int ret, niso;
  1423. ret = m_can_config_enable(cdev);
  1424. if (ret)
  1425. return ret;
  1426. /* First try to set the NISO bit. */
  1427. niso = m_can_cccr_update_bits(cdev, CCCR_NISO, CCCR_NISO);
  1428. /* Then clear the it again. */
  1429. ret = m_can_cccr_update_bits(cdev, CCCR_NISO, 0);
  1430. if (ret) {
  1431. netdev_err(cdev->net, "failed to revert the NON-ISO bit in CCCR\n");
  1432. return ret;
  1433. }
  1434. ret = m_can_config_disable(cdev);
  1435. if (ret)
  1436. return ret;
  1437. return niso == 0;
  1438. }
  1439. static int m_can_dev_setup(struct m_can_classdev *cdev)
  1440. {
  1441. struct net_device *dev = cdev->net;
  1442. int m_can_version, err, niso;
  1443. m_can_version = m_can_check_core_release(cdev);
  1444. /* return if unsupported version */
  1445. if (!m_can_version) {
  1446. netdev_err(cdev->net, "Unsupported version number: %2d",
  1447. m_can_version);
  1448. return -EINVAL;
  1449. }
  1450. /* Write the INIT bit, in case no hardware reset has happened before
  1451. * the probe (for example, it was observed that the Intel Elkhart Lake
  1452. * SoCs do not properly reset the CAN controllers on reboot)
  1453. */
  1454. err = m_can_cccr_update_bits(cdev, CCCR_INIT, CCCR_INIT);
  1455. if (err)
  1456. return err;
  1457. if (!cdev->is_peripheral)
  1458. netif_napi_add(dev, &cdev->napi, m_can_poll);
  1459. /* Shared properties of all M_CAN versions */
  1460. cdev->version = m_can_version;
  1461. cdev->can.do_set_mode = m_can_set_mode;
  1462. cdev->can.do_get_berr_counter = m_can_get_berr_counter;
  1463. /* Set M_CAN supported operations */
  1464. cdev->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
  1465. CAN_CTRLMODE_LISTENONLY |
  1466. CAN_CTRLMODE_BERR_REPORTING |
  1467. CAN_CTRLMODE_FD |
  1468. CAN_CTRLMODE_ONE_SHOT;
  1469. /* Set properties depending on M_CAN version */
  1470. switch (cdev->version) {
  1471. case 30:
  1472. /* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.0.x */
  1473. err = can_set_static_ctrlmode(dev, CAN_CTRLMODE_FD_NON_ISO);
  1474. if (err)
  1475. return err;
  1476. cdev->can.bittiming_const = &m_can_bittiming_const_30X;
  1477. cdev->can.fd.data_bittiming_const = &m_can_data_bittiming_const_30X;
  1478. break;
  1479. case 31:
  1480. /* CAN_CTRLMODE_FD_NON_ISO is fixed with M_CAN IP v3.1.x */
  1481. err = can_set_static_ctrlmode(dev, CAN_CTRLMODE_FD_NON_ISO);
  1482. if (err)
  1483. return err;
  1484. cdev->can.bittiming_const = &m_can_bittiming_const_31X;
  1485. cdev->can.fd.data_bittiming_const = &m_can_data_bittiming_const_31X;
  1486. break;
  1487. case 32:
  1488. case 33:
  1489. /* Support both MCAN version v3.2.x and v3.3.0 */
  1490. cdev->can.bittiming_const = &m_can_bittiming_const_31X;
  1491. cdev->can.fd.data_bittiming_const = &m_can_data_bittiming_const_31X;
  1492. niso = m_can_niso_supported(cdev);
  1493. if (niso < 0)
  1494. return niso;
  1495. if (niso)
  1496. cdev->can.ctrlmode_supported |= CAN_CTRLMODE_FD_NON_ISO;
  1497. break;
  1498. default:
  1499. netdev_err(cdev->net, "Unsupported version number: %2d",
  1500. cdev->version);
  1501. return -EINVAL;
  1502. }
  1503. return 0;
  1504. }
  1505. static void m_can_stop(struct net_device *dev)
  1506. {
  1507. struct m_can_classdev *cdev = netdev_priv(dev);
  1508. int ret;
  1509. /* disable all interrupts */
  1510. m_can_disable_all_interrupts(cdev);
  1511. /* Set init mode to disengage from the network */
  1512. ret = m_can_cccr_update_bits(cdev, CCCR_INIT, CCCR_INIT);
  1513. if (ret)
  1514. netdev_err(dev, "failed to enter standby mode: %pe\n",
  1515. ERR_PTR(ret));
  1516. /* set the state as STOPPED */
  1517. cdev->can.state = CAN_STATE_STOPPED;
  1518. if (cdev->ops->deinit) {
  1519. ret = cdev->ops->deinit(cdev);
  1520. if (ret)
  1521. netdev_err(dev, "failed to deinitialize: %pe\n",
  1522. ERR_PTR(ret));
  1523. }
  1524. }
  1525. static int m_can_close(struct net_device *dev)
  1526. {
  1527. struct m_can_classdev *cdev = netdev_priv(dev);
  1528. netif_stop_queue(dev);
  1529. m_can_stop(dev);
  1530. if (dev->irq)
  1531. free_irq(dev->irq, dev);
  1532. m_can_clean(dev);
  1533. if (cdev->is_peripheral) {
  1534. destroy_workqueue(cdev->tx_wq);
  1535. cdev->tx_wq = NULL;
  1536. can_rx_offload_disable(&cdev->offload);
  1537. } else {
  1538. napi_disable(&cdev->napi);
  1539. }
  1540. close_candev(dev);
  1541. reset_control_assert(cdev->rst);
  1542. m_can_clk_stop(cdev);
  1543. phy_power_off(cdev->transceiver);
  1544. return 0;
  1545. }
  1546. static netdev_tx_t m_can_tx_handler(struct m_can_classdev *cdev,
  1547. struct sk_buff *skb)
  1548. {
  1549. struct canfd_frame *cf = (struct canfd_frame *)skb->data;
  1550. u8 len_padded = DIV_ROUND_UP(cf->len, 4);
  1551. struct m_can_fifo_element fifo_element;
  1552. struct net_device *dev = cdev->net;
  1553. u32 cccr, fdflags;
  1554. int err;
  1555. u32 putidx;
  1556. unsigned int frame_len = can_skb_get_frame_len(skb);
  1557. /* Generate ID field for TX buffer Element */
  1558. /* Common to all supported M_CAN versions */
  1559. if (cf->can_id & CAN_EFF_FLAG) {
  1560. fifo_element.id = cf->can_id & CAN_EFF_MASK;
  1561. fifo_element.id |= TX_BUF_XTD;
  1562. } else {
  1563. fifo_element.id = ((cf->can_id & CAN_SFF_MASK) << 18);
  1564. }
  1565. if (cf->can_id & CAN_RTR_FLAG)
  1566. fifo_element.id |= TX_BUF_RTR;
  1567. if (cdev->version == 30) {
  1568. netif_stop_queue(dev);
  1569. fifo_element.dlc = can_fd_len2dlc(cf->len) << 16;
  1570. /* Write the frame ID, DLC, and payload to the FIFO element. */
  1571. err = m_can_fifo_write(cdev, 0, M_CAN_FIFO_ID, &fifo_element, 2);
  1572. if (err)
  1573. goto out_fail;
  1574. err = m_can_fifo_write(cdev, 0, M_CAN_FIFO_DATA,
  1575. cf->data, len_padded);
  1576. if (err)
  1577. goto out_fail;
  1578. if (cdev->can.ctrlmode & CAN_CTRLMODE_FD) {
  1579. cccr = m_can_read(cdev, M_CAN_CCCR);
  1580. cccr &= ~CCCR_CMR_MASK;
  1581. if (can_is_canfd_skb(skb)) {
  1582. if (cf->flags & CANFD_BRS)
  1583. cccr |= FIELD_PREP(CCCR_CMR_MASK,
  1584. CCCR_CMR_CANFD_BRS);
  1585. else
  1586. cccr |= FIELD_PREP(CCCR_CMR_MASK,
  1587. CCCR_CMR_CANFD);
  1588. } else {
  1589. cccr |= FIELD_PREP(CCCR_CMR_MASK, CCCR_CMR_CAN);
  1590. }
  1591. m_can_write(cdev, M_CAN_CCCR, cccr);
  1592. }
  1593. m_can_write(cdev, M_CAN_TXBTIE, 0x1);
  1594. can_put_echo_skb(skb, dev, 0, frame_len);
  1595. m_can_write(cdev, M_CAN_TXBAR, 0x1);
  1596. /* End of xmit function for version 3.0.x */
  1597. } else {
  1598. /* Transmit routine for version >= v3.1.x */
  1599. /* get put index for frame */
  1600. putidx = cdev->tx_fifo_putidx;
  1601. /* Construct DLC Field, with CAN-FD configuration.
  1602. * Use the put index of the fifo as the message marker,
  1603. * used in the TX interrupt for sending the correct echo frame.
  1604. */
  1605. /* get CAN FD configuration of frame */
  1606. fdflags = 0;
  1607. if (can_is_canfd_skb(skb)) {
  1608. fdflags |= TX_BUF_FDF;
  1609. if (cf->flags & CANFD_BRS)
  1610. fdflags |= TX_BUF_BRS;
  1611. }
  1612. fifo_element.dlc = FIELD_PREP(TX_BUF_MM_MASK, putidx) |
  1613. FIELD_PREP(TX_BUF_DLC_MASK, can_fd_len2dlc(cf->len)) |
  1614. fdflags | TX_BUF_EFC;
  1615. memcpy_and_pad(fifo_element.data, CANFD_MAX_DLEN, &cf->data,
  1616. cf->len, 0);
  1617. err = m_can_fifo_write(cdev, putidx, M_CAN_FIFO_ID,
  1618. &fifo_element, 2 + len_padded);
  1619. if (err)
  1620. goto out_fail;
  1621. /* Push loopback echo.
  1622. * Will be looped back on TX interrupt based on message marker
  1623. */
  1624. can_put_echo_skb(skb, dev, putidx, frame_len);
  1625. if (cdev->is_peripheral) {
  1626. /* Delay enabling TX FIFO element */
  1627. cdev->tx_peripheral_submit |= BIT(putidx);
  1628. } else {
  1629. /* Enable TX FIFO element to start transfer */
  1630. m_can_write(cdev, M_CAN_TXBAR, BIT(putidx));
  1631. }
  1632. cdev->tx_fifo_putidx = (++cdev->tx_fifo_putidx >= cdev->can.echo_skb_max ?
  1633. 0 : cdev->tx_fifo_putidx);
  1634. }
  1635. return NETDEV_TX_OK;
  1636. out_fail:
  1637. netdev_err(dev, "FIFO write returned %d\n", err);
  1638. m_can_disable_all_interrupts(cdev);
  1639. return NETDEV_TX_BUSY;
  1640. }
  1641. static void m_can_tx_submit(struct m_can_classdev *cdev)
  1642. {
  1643. m_can_write(cdev, M_CAN_TXBAR, cdev->tx_peripheral_submit);
  1644. cdev->tx_peripheral_submit = 0;
  1645. }
  1646. static void m_can_tx_work_queue(struct work_struct *ws)
  1647. {
  1648. struct m_can_tx_op *op = container_of(ws, struct m_can_tx_op, work);
  1649. struct m_can_classdev *cdev = op->cdev;
  1650. struct sk_buff *skb = op->skb;
  1651. op->skb = NULL;
  1652. m_can_tx_handler(cdev, skb);
  1653. if (op->submit)
  1654. m_can_tx_submit(cdev);
  1655. }
  1656. static void m_can_tx_queue_skb(struct m_can_classdev *cdev, struct sk_buff *skb,
  1657. bool submit)
  1658. {
  1659. cdev->tx_ops[cdev->next_tx_op].skb = skb;
  1660. cdev->tx_ops[cdev->next_tx_op].submit = submit;
  1661. queue_work(cdev->tx_wq, &cdev->tx_ops[cdev->next_tx_op].work);
  1662. ++cdev->next_tx_op;
  1663. if (cdev->next_tx_op >= cdev->tx_fifo_size)
  1664. cdev->next_tx_op = 0;
  1665. }
  1666. static netdev_tx_t m_can_start_peripheral_xmit(struct m_can_classdev *cdev,
  1667. struct sk_buff *skb)
  1668. {
  1669. bool submit;
  1670. ++cdev->nr_txs_without_submit;
  1671. if (cdev->nr_txs_without_submit >= cdev->tx_max_coalesced_frames ||
  1672. !netdev_xmit_more()) {
  1673. cdev->nr_txs_without_submit = 0;
  1674. submit = true;
  1675. } else {
  1676. submit = false;
  1677. }
  1678. m_can_tx_queue_skb(cdev, skb, submit);
  1679. return NETDEV_TX_OK;
  1680. }
  1681. static netdev_tx_t m_can_start_xmit(struct sk_buff *skb,
  1682. struct net_device *dev)
  1683. {
  1684. struct m_can_classdev *cdev = netdev_priv(dev);
  1685. unsigned int frame_len;
  1686. netdev_tx_t ret;
  1687. if (can_dev_dropped_skb(dev, skb))
  1688. return NETDEV_TX_OK;
  1689. frame_len = can_skb_get_frame_len(skb);
  1690. if (cdev->can.state == CAN_STATE_BUS_OFF) {
  1691. m_can_clean(cdev->net);
  1692. return NETDEV_TX_OK;
  1693. }
  1694. ret = m_can_start_tx(cdev);
  1695. if (ret != NETDEV_TX_OK)
  1696. return ret;
  1697. netdev_sent_queue(dev, frame_len);
  1698. if (cdev->is_peripheral)
  1699. ret = m_can_start_peripheral_xmit(cdev, skb);
  1700. else
  1701. ret = m_can_tx_handler(cdev, skb);
  1702. if (ret != NETDEV_TX_OK)
  1703. netdev_completed_queue(dev, 1, frame_len);
  1704. return ret;
  1705. }
  1706. static enum hrtimer_restart m_can_polling_timer(struct hrtimer *timer)
  1707. {
  1708. struct m_can_classdev *cdev = container_of(timer, struct
  1709. m_can_classdev, hrtimer);
  1710. int ret;
  1711. if (cdev->can.state == CAN_STATE_BUS_OFF ||
  1712. cdev->can.state == CAN_STATE_STOPPED)
  1713. return HRTIMER_NORESTART;
  1714. ret = m_can_interrupt_handler(cdev);
  1715. /* On error or if napi is scheduled to read, stop the timer */
  1716. if (ret < 0 || napi_is_scheduled(&cdev->napi))
  1717. return HRTIMER_NORESTART;
  1718. hrtimer_forward_now(timer, ms_to_ktime(HRTIMER_POLL_INTERVAL_MS));
  1719. return HRTIMER_RESTART;
  1720. }
  1721. static int m_can_open(struct net_device *dev)
  1722. {
  1723. struct m_can_classdev *cdev = netdev_priv(dev);
  1724. int err;
  1725. err = phy_power_on(cdev->transceiver);
  1726. if (err)
  1727. return err;
  1728. err = m_can_clk_start(cdev);
  1729. if (err)
  1730. goto out_phy_power_off;
  1731. err = reset_control_deassert(cdev->rst);
  1732. if (err)
  1733. goto exit_disable_clks;
  1734. /* open the can device */
  1735. err = open_candev(dev);
  1736. if (err) {
  1737. netdev_err(dev, "failed to open can device\n");
  1738. goto out_reset_control_assert;
  1739. }
  1740. if (cdev->is_peripheral)
  1741. can_rx_offload_enable(&cdev->offload);
  1742. else
  1743. napi_enable(&cdev->napi);
  1744. /* register interrupt handler */
  1745. if (cdev->is_peripheral) {
  1746. cdev->tx_wq = alloc_ordered_workqueue("mcan_wq",
  1747. WQ_FREEZABLE | WQ_MEM_RECLAIM);
  1748. if (!cdev->tx_wq) {
  1749. err = -ENOMEM;
  1750. goto out_wq_fail;
  1751. }
  1752. for (int i = 0; i != cdev->tx_fifo_size; ++i) {
  1753. cdev->tx_ops[i].cdev = cdev;
  1754. INIT_WORK(&cdev->tx_ops[i].work, m_can_tx_work_queue);
  1755. }
  1756. err = request_threaded_irq(dev->irq, NULL, m_can_isr,
  1757. IRQF_ONESHOT,
  1758. dev->name, dev);
  1759. } else if (dev->irq) {
  1760. err = request_irq(dev->irq, m_can_isr, IRQF_SHARED, dev->name,
  1761. dev);
  1762. }
  1763. if (err < 0) {
  1764. netdev_err(dev, "failed to request interrupt\n");
  1765. goto exit_irq_fail;
  1766. }
  1767. /* start the m_can controller */
  1768. err = m_can_start(dev);
  1769. if (err)
  1770. goto exit_start_fail;
  1771. netif_start_queue(dev);
  1772. return 0;
  1773. exit_start_fail:
  1774. if (cdev->is_peripheral || dev->irq)
  1775. free_irq(dev->irq, dev);
  1776. exit_irq_fail:
  1777. if (cdev->is_peripheral)
  1778. destroy_workqueue(cdev->tx_wq);
  1779. out_wq_fail:
  1780. if (cdev->is_peripheral)
  1781. can_rx_offload_disable(&cdev->offload);
  1782. else
  1783. napi_disable(&cdev->napi);
  1784. close_candev(dev);
  1785. out_reset_control_assert:
  1786. reset_control_assert(cdev->rst);
  1787. exit_disable_clks:
  1788. m_can_clk_stop(cdev);
  1789. out_phy_power_off:
  1790. phy_power_off(cdev->transceiver);
  1791. return err;
  1792. }
  1793. static const struct net_device_ops m_can_netdev_ops = {
  1794. .ndo_open = m_can_open,
  1795. .ndo_stop = m_can_close,
  1796. .ndo_start_xmit = m_can_start_xmit,
  1797. };
  1798. static int m_can_get_coalesce(struct net_device *dev,
  1799. struct ethtool_coalesce *ec,
  1800. struct kernel_ethtool_coalesce *kec,
  1801. struct netlink_ext_ack *ext_ack)
  1802. {
  1803. struct m_can_classdev *cdev = netdev_priv(dev);
  1804. ec->rx_max_coalesced_frames_irq = cdev->rx_max_coalesced_frames_irq;
  1805. ec->rx_coalesce_usecs_irq = cdev->rx_coalesce_usecs_irq;
  1806. ec->tx_max_coalesced_frames = cdev->tx_max_coalesced_frames;
  1807. ec->tx_max_coalesced_frames_irq = cdev->tx_max_coalesced_frames_irq;
  1808. ec->tx_coalesce_usecs_irq = cdev->tx_coalesce_usecs_irq;
  1809. return 0;
  1810. }
  1811. static int m_can_set_coalesce(struct net_device *dev,
  1812. struct ethtool_coalesce *ec,
  1813. struct kernel_ethtool_coalesce *kec,
  1814. struct netlink_ext_ack *ext_ack)
  1815. {
  1816. struct m_can_classdev *cdev = netdev_priv(dev);
  1817. if (cdev->can.state != CAN_STATE_STOPPED) {
  1818. netdev_err(dev, "Device is in use, please shut it down first\n");
  1819. return -EBUSY;
  1820. }
  1821. if (ec->rx_max_coalesced_frames_irq > cdev->mcfg[MRAM_RXF0].num) {
  1822. netdev_err(dev, "rx-frames-irq %u greater than the RX FIFO %u\n",
  1823. ec->rx_max_coalesced_frames_irq,
  1824. cdev->mcfg[MRAM_RXF0].num);
  1825. return -EINVAL;
  1826. }
  1827. if ((ec->rx_max_coalesced_frames_irq == 0) != (ec->rx_coalesce_usecs_irq == 0)) {
  1828. netdev_err(dev, "rx-frames-irq and rx-usecs-irq can only be set together\n");
  1829. return -EINVAL;
  1830. }
  1831. if (ec->tx_max_coalesced_frames_irq > cdev->mcfg[MRAM_TXE].num) {
  1832. netdev_err(dev, "tx-frames-irq %u greater than the TX event FIFO %u\n",
  1833. ec->tx_max_coalesced_frames_irq,
  1834. cdev->mcfg[MRAM_TXE].num);
  1835. return -EINVAL;
  1836. }
  1837. if (ec->tx_max_coalesced_frames_irq > cdev->mcfg[MRAM_TXB].num) {
  1838. netdev_err(dev, "tx-frames-irq %u greater than the TX FIFO %u\n",
  1839. ec->tx_max_coalesced_frames_irq,
  1840. cdev->mcfg[MRAM_TXB].num);
  1841. return -EINVAL;
  1842. }
  1843. if ((ec->tx_max_coalesced_frames_irq == 0) != (ec->tx_coalesce_usecs_irq == 0)) {
  1844. netdev_err(dev, "tx-frames-irq and tx-usecs-irq can only be set together\n");
  1845. return -EINVAL;
  1846. }
  1847. if (ec->tx_max_coalesced_frames > cdev->mcfg[MRAM_TXE].num) {
  1848. netdev_err(dev, "tx-frames %u greater than the TX event FIFO %u\n",
  1849. ec->tx_max_coalesced_frames,
  1850. cdev->mcfg[MRAM_TXE].num);
  1851. return -EINVAL;
  1852. }
  1853. if (ec->tx_max_coalesced_frames > cdev->mcfg[MRAM_TXB].num) {
  1854. netdev_err(dev, "tx-frames %u greater than the TX FIFO %u\n",
  1855. ec->tx_max_coalesced_frames,
  1856. cdev->mcfg[MRAM_TXB].num);
  1857. return -EINVAL;
  1858. }
  1859. if (ec->rx_coalesce_usecs_irq != 0 && ec->tx_coalesce_usecs_irq != 0 &&
  1860. ec->rx_coalesce_usecs_irq != ec->tx_coalesce_usecs_irq) {
  1861. netdev_err(dev, "rx-usecs-irq %u needs to be equal to tx-usecs-irq %u if both are enabled\n",
  1862. ec->rx_coalesce_usecs_irq,
  1863. ec->tx_coalesce_usecs_irq);
  1864. return -EINVAL;
  1865. }
  1866. cdev->rx_max_coalesced_frames_irq = ec->rx_max_coalesced_frames_irq;
  1867. cdev->rx_coalesce_usecs_irq = ec->rx_coalesce_usecs_irq;
  1868. cdev->tx_max_coalesced_frames = ec->tx_max_coalesced_frames;
  1869. cdev->tx_max_coalesced_frames_irq = ec->tx_max_coalesced_frames_irq;
  1870. cdev->tx_coalesce_usecs_irq = ec->tx_coalesce_usecs_irq;
  1871. if (cdev->rx_coalesce_usecs_irq)
  1872. cdev->irq_timer_wait = us_to_ktime(cdev->rx_coalesce_usecs_irq);
  1873. else
  1874. cdev->irq_timer_wait = us_to_ktime(cdev->tx_coalesce_usecs_irq);
  1875. return 0;
  1876. }
  1877. static void m_can_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
  1878. {
  1879. struct m_can_classdev *cdev = netdev_priv(dev);
  1880. wol->supported = device_can_wakeup(cdev->dev) ? WAKE_PHY : 0;
  1881. wol->wolopts = device_may_wakeup(cdev->dev) ? WAKE_PHY : 0;
  1882. }
  1883. static int m_can_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
  1884. {
  1885. struct m_can_classdev *cdev = netdev_priv(dev);
  1886. bool wol_enable = !!(wol->wolopts & WAKE_PHY);
  1887. int ret;
  1888. if (wol->wolopts & ~WAKE_PHY)
  1889. return -EINVAL;
  1890. if (wol_enable == device_may_wakeup(cdev->dev))
  1891. return 0;
  1892. ret = device_set_wakeup_enable(cdev->dev, wol_enable);
  1893. if (ret) {
  1894. netdev_err(cdev->net, "Failed to set wakeup enable %pE\n",
  1895. ERR_PTR(ret));
  1896. return ret;
  1897. }
  1898. if (!IS_ERR_OR_NULL(cdev->pinctrl_state_wakeup)) {
  1899. if (wol_enable)
  1900. ret = pinctrl_select_state(cdev->pinctrl, cdev->pinctrl_state_wakeup);
  1901. else
  1902. ret = pinctrl_pm_select_default_state(cdev->dev);
  1903. if (ret) {
  1904. netdev_err(cdev->net, "Failed to select pinctrl state %pE\n",
  1905. ERR_PTR(ret));
  1906. goto err_wakeup_enable;
  1907. }
  1908. }
  1909. return 0;
  1910. err_wakeup_enable:
  1911. /* Revert wakeup enable */
  1912. device_set_wakeup_enable(cdev->dev, !wol_enable);
  1913. return ret;
  1914. }
  1915. static const struct ethtool_ops m_can_ethtool_ops_coalescing = {
  1916. .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS_IRQ |
  1917. ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ |
  1918. ETHTOOL_COALESCE_TX_USECS_IRQ |
  1919. ETHTOOL_COALESCE_TX_MAX_FRAMES |
  1920. ETHTOOL_COALESCE_TX_MAX_FRAMES_IRQ,
  1921. .get_ts_info = ethtool_op_get_ts_info,
  1922. .get_coalesce = m_can_get_coalesce,
  1923. .set_coalesce = m_can_set_coalesce,
  1924. .get_wol = m_can_get_wol,
  1925. .set_wol = m_can_set_wol,
  1926. };
  1927. static const struct ethtool_ops m_can_ethtool_ops = {
  1928. .get_ts_info = ethtool_op_get_ts_info,
  1929. .get_wol = m_can_get_wol,
  1930. .set_wol = m_can_set_wol,
  1931. };
  1932. static int register_m_can_dev(struct m_can_classdev *cdev)
  1933. {
  1934. struct net_device *dev = cdev->net;
  1935. dev->flags |= IFF_ECHO; /* we support local echo */
  1936. dev->netdev_ops = &m_can_netdev_ops;
  1937. if (dev->irq && cdev->is_peripheral)
  1938. dev->ethtool_ops = &m_can_ethtool_ops_coalescing;
  1939. else
  1940. dev->ethtool_ops = &m_can_ethtool_ops;
  1941. return register_candev(dev);
  1942. }
  1943. int m_can_check_mram_cfg(struct m_can_classdev *cdev, u32 mram_max_size)
  1944. {
  1945. u32 total_size;
  1946. total_size = cdev->mcfg[MRAM_TXB].off - cdev->mcfg[MRAM_SIDF].off +
  1947. cdev->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
  1948. if (total_size > mram_max_size) {
  1949. netdev_err(cdev->net, "Total size of mram config(%u) exceeds mram(%u)\n",
  1950. total_size, mram_max_size);
  1951. return -EINVAL;
  1952. }
  1953. return 0;
  1954. }
  1955. EXPORT_SYMBOL_GPL(m_can_check_mram_cfg);
  1956. static void m_can_of_parse_mram(struct m_can_classdev *cdev,
  1957. const u32 *mram_config_vals)
  1958. {
  1959. cdev->mcfg[MRAM_SIDF].off = mram_config_vals[0];
  1960. cdev->mcfg[MRAM_SIDF].num = mram_config_vals[1];
  1961. cdev->mcfg[MRAM_XIDF].off = cdev->mcfg[MRAM_SIDF].off +
  1962. cdev->mcfg[MRAM_SIDF].num * SIDF_ELEMENT_SIZE;
  1963. cdev->mcfg[MRAM_XIDF].num = mram_config_vals[2];
  1964. cdev->mcfg[MRAM_RXF0].off = cdev->mcfg[MRAM_XIDF].off +
  1965. cdev->mcfg[MRAM_XIDF].num * XIDF_ELEMENT_SIZE;
  1966. cdev->mcfg[MRAM_RXF0].num = mram_config_vals[3] &
  1967. FIELD_MAX(RXFC_FS_MASK);
  1968. cdev->mcfg[MRAM_RXF1].off = cdev->mcfg[MRAM_RXF0].off +
  1969. cdev->mcfg[MRAM_RXF0].num * RXF0_ELEMENT_SIZE;
  1970. cdev->mcfg[MRAM_RXF1].num = mram_config_vals[4] &
  1971. FIELD_MAX(RXFC_FS_MASK);
  1972. cdev->mcfg[MRAM_RXB].off = cdev->mcfg[MRAM_RXF1].off +
  1973. cdev->mcfg[MRAM_RXF1].num * RXF1_ELEMENT_SIZE;
  1974. cdev->mcfg[MRAM_RXB].num = mram_config_vals[5];
  1975. cdev->mcfg[MRAM_TXE].off = cdev->mcfg[MRAM_RXB].off +
  1976. cdev->mcfg[MRAM_RXB].num * RXB_ELEMENT_SIZE;
  1977. cdev->mcfg[MRAM_TXE].num = mram_config_vals[6];
  1978. cdev->mcfg[MRAM_TXB].off = cdev->mcfg[MRAM_TXE].off +
  1979. cdev->mcfg[MRAM_TXE].num * TXE_ELEMENT_SIZE;
  1980. cdev->mcfg[MRAM_TXB].num = mram_config_vals[7] &
  1981. FIELD_MAX(TXBC_NDTB_MASK);
  1982. netdev_dbg(cdev->net,
  1983. "sidf 0x%x %d xidf 0x%x %d rxf0 0x%x %d rxf1 0x%x %d rxb 0x%x %d txe 0x%x %d txb 0x%x %d\n",
  1984. cdev->mcfg[MRAM_SIDF].off, cdev->mcfg[MRAM_SIDF].num,
  1985. cdev->mcfg[MRAM_XIDF].off, cdev->mcfg[MRAM_XIDF].num,
  1986. cdev->mcfg[MRAM_RXF0].off, cdev->mcfg[MRAM_RXF0].num,
  1987. cdev->mcfg[MRAM_RXF1].off, cdev->mcfg[MRAM_RXF1].num,
  1988. cdev->mcfg[MRAM_RXB].off, cdev->mcfg[MRAM_RXB].num,
  1989. cdev->mcfg[MRAM_TXE].off, cdev->mcfg[MRAM_TXE].num,
  1990. cdev->mcfg[MRAM_TXB].off, cdev->mcfg[MRAM_TXB].num);
  1991. }
  1992. int m_can_class_get_clocks(struct m_can_classdev *cdev)
  1993. {
  1994. int ret = 0;
  1995. cdev->hclk = devm_clk_get(cdev->dev, "hclk");
  1996. cdev->cclk = devm_clk_get(cdev->dev, "cclk");
  1997. if (IS_ERR(cdev->hclk) || IS_ERR(cdev->cclk)) {
  1998. netdev_err(cdev->net, "no clock found\n");
  1999. ret = -ENODEV;
  2000. }
  2001. return ret;
  2002. }
  2003. EXPORT_SYMBOL_GPL(m_can_class_get_clocks);
  2004. static bool m_can_class_wakeup_pinctrl_enabled(struct m_can_classdev *class_dev)
  2005. {
  2006. return device_may_wakeup(class_dev->dev) && class_dev->pinctrl_state_wakeup;
  2007. }
  2008. static int m_can_class_parse_pinctrl(struct m_can_classdev *class_dev)
  2009. {
  2010. struct device *dev = class_dev->dev;
  2011. int ret;
  2012. class_dev->pinctrl = devm_pinctrl_get(dev);
  2013. if (IS_ERR(class_dev->pinctrl)) {
  2014. ret = PTR_ERR(class_dev->pinctrl);
  2015. class_dev->pinctrl = NULL;
  2016. if (ret == -ENODEV)
  2017. return 0;
  2018. return dev_err_probe(dev, ret, "Failed to get pinctrl\n");
  2019. }
  2020. class_dev->pinctrl_state_wakeup =
  2021. pinctrl_lookup_state(class_dev->pinctrl, "wakeup");
  2022. if (IS_ERR(class_dev->pinctrl_state_wakeup)) {
  2023. ret = PTR_ERR(class_dev->pinctrl_state_wakeup);
  2024. class_dev->pinctrl_state_wakeup = NULL;
  2025. if (ret == -ENODEV)
  2026. return 0;
  2027. return dev_err_probe(dev, ret, "Failed to lookup pinctrl wakeup state\n");
  2028. }
  2029. return 0;
  2030. }
  2031. struct m_can_classdev *m_can_class_allocate_dev(struct device *dev,
  2032. int sizeof_priv)
  2033. {
  2034. struct m_can_classdev *class_dev = NULL;
  2035. u32 mram_config_vals[MRAM_CFG_LEN];
  2036. struct net_device *net_dev;
  2037. u32 tx_fifo_size;
  2038. int ret;
  2039. ret = fwnode_property_read_u32_array(dev_fwnode(dev),
  2040. "bosch,mram-cfg",
  2041. mram_config_vals,
  2042. sizeof(mram_config_vals) / 4);
  2043. if (ret) {
  2044. dev_err(dev, "Could not get Message RAM configuration.");
  2045. return ERR_PTR(ret);
  2046. }
  2047. if (dev->of_node && of_property_read_bool(dev->of_node, "wakeup-source"))
  2048. device_set_wakeup_capable(dev, true);
  2049. /* Get TX FIFO size
  2050. * Defines the total amount of echo buffers for loopback
  2051. */
  2052. tx_fifo_size = mram_config_vals[7];
  2053. /* allocate the m_can device */
  2054. net_dev = alloc_candev(sizeof_priv, tx_fifo_size);
  2055. if (!net_dev) {
  2056. dev_err(dev, "Failed to allocate CAN device");
  2057. return ERR_PTR(-ENOMEM);
  2058. }
  2059. class_dev = netdev_priv(net_dev);
  2060. class_dev->net = net_dev;
  2061. class_dev->dev = dev;
  2062. SET_NETDEV_DEV(net_dev, dev);
  2063. m_can_of_parse_mram(class_dev, mram_config_vals);
  2064. spin_lock_init(&class_dev->tx_handling_spinlock);
  2065. ret = m_can_class_parse_pinctrl(class_dev);
  2066. if (ret)
  2067. goto err_free_candev;
  2068. return class_dev;
  2069. err_free_candev:
  2070. free_candev(net_dev);
  2071. return ERR_PTR(ret);
  2072. }
  2073. EXPORT_SYMBOL_GPL(m_can_class_allocate_dev);
  2074. void m_can_class_free_dev(struct net_device *net)
  2075. {
  2076. free_candev(net);
  2077. }
  2078. EXPORT_SYMBOL_GPL(m_can_class_free_dev);
  2079. int m_can_class_register(struct m_can_classdev *cdev)
  2080. {
  2081. int ret;
  2082. cdev->tx_fifo_size = max(1, min(cdev->mcfg[MRAM_TXB].num,
  2083. cdev->mcfg[MRAM_TXE].num));
  2084. if (cdev->is_peripheral) {
  2085. cdev->tx_ops =
  2086. devm_kzalloc(cdev->dev,
  2087. cdev->tx_fifo_size * sizeof(*cdev->tx_ops),
  2088. GFP_KERNEL);
  2089. if (!cdev->tx_ops)
  2090. return -ENOMEM;
  2091. }
  2092. cdev->rst = devm_reset_control_get_optional_shared(cdev->dev, NULL);
  2093. if (IS_ERR(cdev->rst))
  2094. return dev_err_probe(cdev->dev, PTR_ERR(cdev->rst),
  2095. "Failed to get reset line\n");
  2096. ret = m_can_clk_start(cdev);
  2097. if (ret)
  2098. return ret;
  2099. ret = reset_control_deassert(cdev->rst);
  2100. if (ret)
  2101. goto clk_disable;
  2102. if (cdev->is_peripheral) {
  2103. ret = can_rx_offload_add_manual(cdev->net, &cdev->offload,
  2104. NAPI_POLL_WEIGHT);
  2105. if (ret)
  2106. goto out_reset_control_assert;
  2107. }
  2108. if (!cdev->net->irq) {
  2109. netdev_dbg(cdev->net, "Polling enabled, initialize hrtimer");
  2110. hrtimer_setup(&cdev->hrtimer, m_can_polling_timer, CLOCK_MONOTONIC,
  2111. HRTIMER_MODE_REL_PINNED);
  2112. } else {
  2113. hrtimer_setup(&cdev->hrtimer, m_can_coalescing_timer, CLOCK_MONOTONIC,
  2114. HRTIMER_MODE_REL);
  2115. }
  2116. ret = m_can_dev_setup(cdev);
  2117. if (ret)
  2118. goto rx_offload_del;
  2119. ret = register_m_can_dev(cdev);
  2120. if (ret) {
  2121. netdev_err(cdev->net, "registering %s failed (err=%d)\n",
  2122. cdev->net->name, ret);
  2123. goto rx_offload_del;
  2124. }
  2125. of_can_transceiver(cdev->net);
  2126. netdev_info(cdev->net, "device registered (irq=%d, version=%d)\n",
  2127. cdev->net->irq, cdev->version);
  2128. /* Probe finished
  2129. * Assert reset and stop clocks.
  2130. * They will be reactivated once the M_CAN device is opened
  2131. */
  2132. reset_control_assert(cdev->rst);
  2133. m_can_clk_stop(cdev);
  2134. return 0;
  2135. rx_offload_del:
  2136. if (cdev->is_peripheral)
  2137. can_rx_offload_del(&cdev->offload);
  2138. out_reset_control_assert:
  2139. reset_control_assert(cdev->rst);
  2140. clk_disable:
  2141. m_can_clk_stop(cdev);
  2142. return ret;
  2143. }
  2144. EXPORT_SYMBOL_GPL(m_can_class_register);
  2145. void m_can_class_unregister(struct m_can_classdev *cdev)
  2146. {
  2147. unregister_candev(cdev->net);
  2148. if (cdev->is_peripheral)
  2149. can_rx_offload_del(&cdev->offload);
  2150. }
  2151. EXPORT_SYMBOL_GPL(m_can_class_unregister);
  2152. int m_can_class_suspend(struct device *dev)
  2153. {
  2154. struct m_can_classdev *cdev = dev_get_drvdata(dev);
  2155. struct net_device *ndev = cdev->net;
  2156. int ret = 0;
  2157. if (netif_running(ndev)) {
  2158. netif_stop_queue(ndev);
  2159. netif_device_detach(ndev);
  2160. /* leave the chip running with rx interrupt enabled if it is
  2161. * used as a wake-up source. Coalescing needs to be reset then,
  2162. * the timer is cancelled here, interrupts are done in resume.
  2163. */
  2164. if (cdev->pm_wake_source) {
  2165. hrtimer_cancel(&cdev->hrtimer);
  2166. m_can_write(cdev, M_CAN_IE, IR_RF0N);
  2167. if (cdev->ops->deinit)
  2168. ret = cdev->ops->deinit(cdev);
  2169. } else {
  2170. m_can_stop(ndev);
  2171. }
  2172. m_can_clk_stop(cdev);
  2173. cdev->can.state = CAN_STATE_SLEEPING;
  2174. }
  2175. if (!m_can_class_wakeup_pinctrl_enabled(cdev))
  2176. pinctrl_pm_select_sleep_state(dev);
  2177. return ret;
  2178. }
  2179. EXPORT_SYMBOL_GPL(m_can_class_suspend);
  2180. int m_can_class_resume(struct device *dev)
  2181. {
  2182. struct m_can_classdev *cdev = dev_get_drvdata(dev);
  2183. struct net_device *ndev = cdev->net;
  2184. int ret = 0;
  2185. if (!m_can_class_wakeup_pinctrl_enabled(cdev))
  2186. pinctrl_pm_select_default_state(dev);
  2187. if (netif_running(ndev)) {
  2188. ret = m_can_clk_start(cdev);
  2189. if (ret)
  2190. return ret;
  2191. if (cdev->pm_wake_source) {
  2192. /* Restore active interrupts but disable coalescing as
  2193. * we may have missed important waterlevel interrupts
  2194. * between suspend and resume. Timers are already
  2195. * stopped in suspend. Here we enable all interrupts
  2196. * again.
  2197. */
  2198. cdev->active_interrupts |= IR_RF0N | IR_TEFN;
  2199. if (cdev->ops->init)
  2200. ret = cdev->ops->init(cdev);
  2201. cdev->can.state = m_can_state_get_by_psr(cdev);
  2202. m_can_write(cdev, M_CAN_IE, cdev->active_interrupts);
  2203. } else {
  2204. ret = m_can_start(ndev);
  2205. if (ret) {
  2206. m_can_clk_stop(cdev);
  2207. return ret;
  2208. }
  2209. }
  2210. netif_device_attach(ndev);
  2211. netif_start_queue(ndev);
  2212. }
  2213. return ret;
  2214. }
  2215. EXPORT_SYMBOL_GPL(m_can_class_resume);
  2216. MODULE_AUTHOR("Dong Aisheng <aisheng.dong@nxp.com>");
  2217. MODULE_AUTHOR("Dan Murphy <dmurphy@ti.com>");
  2218. MODULE_LICENSE("GPL v2");
  2219. MODULE_DESCRIPTION("CAN bus driver for Bosch M_CAN controller");