bxcan.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101
  1. // SPDX-License-Identifier: GPL-2.0
  2. //
  3. // bxcan.c - STM32 Basic Extended CAN controller driver
  4. //
  5. // Copyright (c) 2022 Dario Binacchi <dario.binacchi@amarulasolutions.com>
  6. //
  7. // NOTE: The ST documentation uses the terms master/slave instead of
  8. // primary/secondary.
  9. #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  10. #include <linux/bitfield.h>
  11. #include <linux/can.h>
  12. #include <linux/can/dev.h>
  13. #include <linux/can/error.h>
  14. #include <linux/can/rx-offload.h>
  15. #include <linux/clk.h>
  16. #include <linux/ethtool.h>
  17. #include <linux/interrupt.h>
  18. #include <linux/io.h>
  19. #include <linux/iopoll.h>
  20. #include <linux/kernel.h>
  21. #include <linux/mfd/syscon.h>
  22. #include <linux/module.h>
  23. #include <linux/of.h>
  24. #include <linux/platform_device.h>
  25. #include <linux/regmap.h>
  26. #define BXCAN_NAPI_WEIGHT 3
  27. #define BXCAN_TIMEOUT_US 10000
  28. #define BXCAN_RX_MB_NUM 2
  29. #define BXCAN_TX_MB_NUM 3
  30. /* Primary control register (MCR) bits */
  31. #define BXCAN_MCR_RESET BIT(15)
  32. #define BXCAN_MCR_TTCM BIT(7)
  33. #define BXCAN_MCR_ABOM BIT(6)
  34. #define BXCAN_MCR_AWUM BIT(5)
  35. #define BXCAN_MCR_NART BIT(4)
  36. #define BXCAN_MCR_RFLM BIT(3)
  37. #define BXCAN_MCR_TXFP BIT(2)
  38. #define BXCAN_MCR_SLEEP BIT(1)
  39. #define BXCAN_MCR_INRQ BIT(0)
  40. /* Primary status register (MSR) bits */
  41. #define BXCAN_MSR_ERRI BIT(2)
  42. #define BXCAN_MSR_SLAK BIT(1)
  43. #define BXCAN_MSR_INAK BIT(0)
  44. /* Transmit status register (TSR) bits */
  45. #define BXCAN_TSR_RQCP2 BIT(16)
  46. #define BXCAN_TSR_RQCP1 BIT(8)
  47. #define BXCAN_TSR_RQCP0 BIT(0)
  48. /* Receive FIFO 0 register (RF0R) bits */
  49. #define BXCAN_RF0R_RFOM0 BIT(5)
  50. #define BXCAN_RF0R_FMP0_MASK GENMASK(1, 0)
  51. /* Interrupt enable register (IER) bits */
  52. #define BXCAN_IER_SLKIE BIT(17)
  53. #define BXCAN_IER_WKUIE BIT(16)
  54. #define BXCAN_IER_ERRIE BIT(15)
  55. #define BXCAN_IER_LECIE BIT(11)
  56. #define BXCAN_IER_BOFIE BIT(10)
  57. #define BXCAN_IER_EPVIE BIT(9)
  58. #define BXCAN_IER_EWGIE BIT(8)
  59. #define BXCAN_IER_FOVIE1 BIT(6)
  60. #define BXCAN_IER_FFIE1 BIT(5)
  61. #define BXCAN_IER_FMPIE1 BIT(4)
  62. #define BXCAN_IER_FOVIE0 BIT(3)
  63. #define BXCAN_IER_FFIE0 BIT(2)
  64. #define BXCAN_IER_FMPIE0 BIT(1)
  65. #define BXCAN_IER_TMEIE BIT(0)
  66. /* Error status register (ESR) bits */
  67. #define BXCAN_ESR_REC_MASK GENMASK(31, 24)
  68. #define BXCAN_ESR_TEC_MASK GENMASK(23, 16)
  69. #define BXCAN_ESR_LEC_MASK GENMASK(6, 4)
  70. #define BXCAN_ESR_BOFF BIT(2)
  71. #define BXCAN_ESR_EPVF BIT(1)
  72. #define BXCAN_ESR_EWGF BIT(0)
  73. /* Bit timing register (BTR) bits */
  74. #define BXCAN_BTR_SILM BIT(31)
  75. #define BXCAN_BTR_LBKM BIT(30)
  76. #define BXCAN_BTR_SJW_MASK GENMASK(25, 24)
  77. #define BXCAN_BTR_TS2_MASK GENMASK(22, 20)
  78. #define BXCAN_BTR_TS1_MASK GENMASK(19, 16)
  79. #define BXCAN_BTR_BRP_MASK GENMASK(9, 0)
  80. /* TX mailbox identifier register (TIxR, x = 0..2) bits */
  81. #define BXCAN_TIxR_STID_MASK GENMASK(31, 21)
  82. #define BXCAN_TIxR_EXID_MASK GENMASK(31, 3)
  83. #define BXCAN_TIxR_IDE BIT(2)
  84. #define BXCAN_TIxR_RTR BIT(1)
  85. #define BXCAN_TIxR_TXRQ BIT(0)
  86. /* TX mailbox data length and time stamp register (TDTxR, x = 0..2 bits */
  87. #define BXCAN_TDTxR_DLC_MASK GENMASK(3, 0)
  88. /* RX FIFO mailbox identifier register (RIxR, x = 0..1 */
  89. #define BXCAN_RIxR_STID_MASK GENMASK(31, 21)
  90. #define BXCAN_RIxR_EXID_MASK GENMASK(31, 3)
  91. #define BXCAN_RIxR_IDE BIT(2)
  92. #define BXCAN_RIxR_RTR BIT(1)
  93. /* RX FIFO mailbox data length and timestamp register (RDTxR, x = 0..1) bits */
  94. #define BXCAN_RDTxR_TIME_MASK GENMASK(31, 16)
  95. #define BXCAN_RDTxR_DLC_MASK GENMASK(3, 0)
  96. #define BXCAN_FMR_REG 0x00
  97. #define BXCAN_FM1R_REG 0x04
  98. #define BXCAN_FS1R_REG 0x0c
  99. #define BXCAN_FFA1R_REG 0x14
  100. #define BXCAN_FA1R_REG 0x1c
  101. #define BXCAN_FiR1_REG(b) (0x40 + (b) * 8)
  102. #define BXCAN_FiR2_REG(b) (0x44 + (b) * 8)
  103. #define BXCAN_FILTER_ID(cfg) ((cfg) == BXCAN_CFG_DUAL_SECONDARY ? 14 : 0)
  104. /* Filter primary register (FMR) bits */
  105. #define BXCAN_FMR_CANSB_MASK GENMASK(13, 8)
  106. #define BXCAN_FMR_FINIT BIT(0)
  107. enum bxcan_lec_code {
  108. BXCAN_LEC_NO_ERROR = 0,
  109. BXCAN_LEC_STUFF_ERROR,
  110. BXCAN_LEC_FORM_ERROR,
  111. BXCAN_LEC_ACK_ERROR,
  112. BXCAN_LEC_BIT1_ERROR,
  113. BXCAN_LEC_BIT0_ERROR,
  114. BXCAN_LEC_CRC_ERROR,
  115. BXCAN_LEC_UNUSED
  116. };
  117. enum bxcan_cfg {
  118. BXCAN_CFG_SINGLE = 0,
  119. BXCAN_CFG_DUAL_PRIMARY,
  120. BXCAN_CFG_DUAL_SECONDARY
  121. };
  122. /* Structure of the message buffer */
  123. struct bxcan_mb {
  124. u32 id; /* can identifier */
  125. u32 dlc; /* data length control and timestamp */
  126. u32 data[2]; /* data */
  127. };
  128. /* Structure of the hardware registers */
  129. struct bxcan_regs {
  130. u32 mcr; /* 0x00 - primary control */
  131. u32 msr; /* 0x04 - primary status */
  132. u32 tsr; /* 0x08 - transmit status */
  133. u32 rf0r; /* 0x0c - FIFO 0 */
  134. u32 rf1r; /* 0x10 - FIFO 1 */
  135. u32 ier; /* 0x14 - interrupt enable */
  136. u32 esr; /* 0x18 - error status */
  137. u32 btr; /* 0x1c - bit timing*/
  138. u32 reserved0[88]; /* 0x20 */
  139. struct bxcan_mb tx_mb[BXCAN_TX_MB_NUM]; /* 0x180 - tx mailbox */
  140. struct bxcan_mb rx_mb[BXCAN_RX_MB_NUM]; /* 0x1b0 - rx mailbox */
  141. };
  142. struct bxcan_priv {
  143. struct can_priv can;
  144. struct can_rx_offload offload;
  145. struct device *dev;
  146. struct net_device *ndev;
  147. struct bxcan_regs __iomem *regs;
  148. struct regmap *gcan;
  149. int tx_irq;
  150. int sce_irq;
  151. enum bxcan_cfg cfg;
  152. struct clk *clk;
  153. spinlock_t rmw_lock; /* lock for read-modify-write operations */
  154. unsigned int tx_head;
  155. unsigned int tx_tail;
  156. u32 timestamp;
  157. };
  158. static const struct can_bittiming_const bxcan_bittiming_const = {
  159. .name = KBUILD_MODNAME,
  160. .tseg1_min = 1,
  161. .tseg1_max = 16,
  162. .tseg2_min = 1,
  163. .tseg2_max = 8,
  164. .sjw_max = 4,
  165. .brp_min = 1,
  166. .brp_max = 1024,
  167. .brp_inc = 1,
  168. };
  169. static inline void bxcan_rmw(struct bxcan_priv *priv, void __iomem *addr,
  170. u32 clear, u32 set)
  171. {
  172. unsigned long flags;
  173. u32 old, val;
  174. spin_lock_irqsave(&priv->rmw_lock, flags);
  175. old = readl(addr);
  176. val = (old & ~clear) | set;
  177. if (val != old)
  178. writel(val, addr);
  179. spin_unlock_irqrestore(&priv->rmw_lock, flags);
  180. }
  181. static void bxcan_disable_filters(struct bxcan_priv *priv, enum bxcan_cfg cfg)
  182. {
  183. unsigned int fid = BXCAN_FILTER_ID(cfg);
  184. u32 fmask = BIT(fid);
  185. regmap_update_bits(priv->gcan, BXCAN_FA1R_REG, fmask, 0);
  186. }
  187. static void bxcan_enable_filters(struct bxcan_priv *priv, enum bxcan_cfg cfg)
  188. {
  189. unsigned int fid = BXCAN_FILTER_ID(cfg);
  190. u32 fmask = BIT(fid);
  191. /* Filter settings:
  192. *
  193. * Accept all messages.
  194. * Assign filter 0 to CAN1 and filter 14 to CAN2 in identifier
  195. * mask mode with 32 bits width.
  196. */
  197. /* Enter filter initialization mode and assign filters to CAN
  198. * controllers.
  199. */
  200. regmap_update_bits(priv->gcan, BXCAN_FMR_REG,
  201. BXCAN_FMR_CANSB_MASK | BXCAN_FMR_FINIT,
  202. FIELD_PREP(BXCAN_FMR_CANSB_MASK, 14) |
  203. BXCAN_FMR_FINIT);
  204. /* Deactivate filter */
  205. regmap_update_bits(priv->gcan, BXCAN_FA1R_REG, fmask, 0);
  206. /* Two 32-bit registers in identifier mask mode */
  207. regmap_update_bits(priv->gcan, BXCAN_FM1R_REG, fmask, 0);
  208. /* Single 32-bit scale configuration */
  209. regmap_update_bits(priv->gcan, BXCAN_FS1R_REG, fmask, fmask);
  210. /* Assign filter to FIFO 0 */
  211. regmap_update_bits(priv->gcan, BXCAN_FFA1R_REG, fmask, 0);
  212. /* Accept all messages */
  213. regmap_write(priv->gcan, BXCAN_FiR1_REG(fid), 0);
  214. regmap_write(priv->gcan, BXCAN_FiR2_REG(fid), 0);
  215. /* Activate filter */
  216. regmap_update_bits(priv->gcan, BXCAN_FA1R_REG, fmask, fmask);
  217. /* Exit filter initialization mode */
  218. regmap_update_bits(priv->gcan, BXCAN_FMR_REG, BXCAN_FMR_FINIT, 0);
  219. }
  220. static inline u8 bxcan_get_tx_head(const struct bxcan_priv *priv)
  221. {
  222. return priv->tx_head % BXCAN_TX_MB_NUM;
  223. }
  224. static inline u8 bxcan_get_tx_tail(const struct bxcan_priv *priv)
  225. {
  226. return priv->tx_tail % BXCAN_TX_MB_NUM;
  227. }
  228. static inline u8 bxcan_get_tx_free(const struct bxcan_priv *priv)
  229. {
  230. return BXCAN_TX_MB_NUM - (priv->tx_head - priv->tx_tail);
  231. }
  232. static bool bxcan_tx_busy(const struct bxcan_priv *priv)
  233. {
  234. if (bxcan_get_tx_free(priv) > 0)
  235. return false;
  236. netif_stop_queue(priv->ndev);
  237. /* Memory barrier before checking tx_free (head and tail) */
  238. smp_mb();
  239. if (bxcan_get_tx_free(priv) == 0) {
  240. netdev_dbg(priv->ndev,
  241. "Stopping tx-queue (tx_head=0x%08x, tx_tail=0x%08x, len=%d).\n",
  242. priv->tx_head, priv->tx_tail,
  243. priv->tx_head - priv->tx_tail);
  244. return true;
  245. }
  246. netif_start_queue(priv->ndev);
  247. return false;
  248. }
  249. static int bxcan_chip_softreset(struct bxcan_priv *priv)
  250. {
  251. struct bxcan_regs __iomem *regs = priv->regs;
  252. u32 value;
  253. bxcan_rmw(priv, &regs->mcr, 0, BXCAN_MCR_RESET);
  254. return readx_poll_timeout(readl, &regs->msr, value,
  255. value & BXCAN_MSR_SLAK, BXCAN_TIMEOUT_US,
  256. USEC_PER_SEC);
  257. }
  258. static int bxcan_enter_init_mode(struct bxcan_priv *priv)
  259. {
  260. struct bxcan_regs __iomem *regs = priv->regs;
  261. u32 value;
  262. bxcan_rmw(priv, &regs->mcr, 0, BXCAN_MCR_INRQ);
  263. return readx_poll_timeout(readl, &regs->msr, value,
  264. value & BXCAN_MSR_INAK, BXCAN_TIMEOUT_US,
  265. USEC_PER_SEC);
  266. }
  267. static int bxcan_leave_init_mode(struct bxcan_priv *priv)
  268. {
  269. struct bxcan_regs __iomem *regs = priv->regs;
  270. u32 value;
  271. bxcan_rmw(priv, &regs->mcr, BXCAN_MCR_INRQ, 0);
  272. return readx_poll_timeout(readl, &regs->msr, value,
  273. !(value & BXCAN_MSR_INAK), BXCAN_TIMEOUT_US,
  274. USEC_PER_SEC);
  275. }
  276. static int bxcan_enter_sleep_mode(struct bxcan_priv *priv)
  277. {
  278. struct bxcan_regs __iomem *regs = priv->regs;
  279. u32 value;
  280. bxcan_rmw(priv, &regs->mcr, 0, BXCAN_MCR_SLEEP);
  281. return readx_poll_timeout(readl, &regs->msr, value,
  282. value & BXCAN_MSR_SLAK, BXCAN_TIMEOUT_US,
  283. USEC_PER_SEC);
  284. }
  285. static int bxcan_leave_sleep_mode(struct bxcan_priv *priv)
  286. {
  287. struct bxcan_regs __iomem *regs = priv->regs;
  288. u32 value;
  289. bxcan_rmw(priv, &regs->mcr, BXCAN_MCR_SLEEP, 0);
  290. return readx_poll_timeout(readl, &regs->msr, value,
  291. !(value & BXCAN_MSR_SLAK), BXCAN_TIMEOUT_US,
  292. USEC_PER_SEC);
  293. }
  294. static inline
  295. struct bxcan_priv *rx_offload_to_priv(struct can_rx_offload *offload)
  296. {
  297. return container_of(offload, struct bxcan_priv, offload);
  298. }
  299. static struct sk_buff *bxcan_mailbox_read(struct can_rx_offload *offload,
  300. unsigned int mbxno, u32 *timestamp,
  301. bool drop)
  302. {
  303. struct bxcan_priv *priv = rx_offload_to_priv(offload);
  304. struct bxcan_regs __iomem *regs = priv->regs;
  305. struct bxcan_mb __iomem *mb_regs = &regs->rx_mb[0];
  306. struct sk_buff *skb = NULL;
  307. struct can_frame *cf;
  308. u32 rf0r, id, dlc;
  309. rf0r = readl(&regs->rf0r);
  310. if (unlikely(drop)) {
  311. skb = ERR_PTR(-ENOBUFS);
  312. goto mark_as_read;
  313. }
  314. if (!(rf0r & BXCAN_RF0R_FMP0_MASK))
  315. goto mark_as_read;
  316. skb = alloc_can_skb(offload->dev, &cf);
  317. if (unlikely(!skb)) {
  318. skb = ERR_PTR(-ENOMEM);
  319. goto mark_as_read;
  320. }
  321. id = readl(&mb_regs->id);
  322. if (id & BXCAN_RIxR_IDE)
  323. cf->can_id = FIELD_GET(BXCAN_RIxR_EXID_MASK, id) | CAN_EFF_FLAG;
  324. else
  325. cf->can_id = FIELD_GET(BXCAN_RIxR_STID_MASK, id) & CAN_SFF_MASK;
  326. dlc = readl(&mb_regs->dlc);
  327. priv->timestamp = FIELD_GET(BXCAN_RDTxR_TIME_MASK, dlc);
  328. cf->len = can_cc_dlc2len(FIELD_GET(BXCAN_RDTxR_DLC_MASK, dlc));
  329. if (id & BXCAN_RIxR_RTR) {
  330. cf->can_id |= CAN_RTR_FLAG;
  331. } else {
  332. int i, j;
  333. for (i = 0, j = 0; i < cf->len; i += 4, j++)
  334. *(u32 *)(cf->data + i) = readl(&mb_regs->data[j]);
  335. }
  336. mark_as_read:
  337. rf0r |= BXCAN_RF0R_RFOM0;
  338. writel(rf0r, &regs->rf0r);
  339. return skb;
  340. }
  341. static irqreturn_t bxcan_rx_isr(int irq, void *dev_id)
  342. {
  343. struct net_device *ndev = dev_id;
  344. struct bxcan_priv *priv = netdev_priv(ndev);
  345. struct bxcan_regs __iomem *regs = priv->regs;
  346. u32 rf0r;
  347. rf0r = readl(&regs->rf0r);
  348. if (!(rf0r & BXCAN_RF0R_FMP0_MASK))
  349. return IRQ_NONE;
  350. can_rx_offload_irq_offload_fifo(&priv->offload);
  351. can_rx_offload_irq_finish(&priv->offload);
  352. return IRQ_HANDLED;
  353. }
  354. static irqreturn_t bxcan_tx_isr(int irq, void *dev_id)
  355. {
  356. struct net_device *ndev = dev_id;
  357. struct bxcan_priv *priv = netdev_priv(ndev);
  358. struct bxcan_regs __iomem *regs = priv->regs;
  359. struct net_device_stats *stats = &ndev->stats;
  360. u32 tsr, rqcp_bit;
  361. int idx;
  362. tsr = readl(&regs->tsr);
  363. if (!(tsr & (BXCAN_TSR_RQCP0 | BXCAN_TSR_RQCP1 | BXCAN_TSR_RQCP2)))
  364. return IRQ_NONE;
  365. while (priv->tx_head - priv->tx_tail > 0) {
  366. idx = bxcan_get_tx_tail(priv);
  367. rqcp_bit = BXCAN_TSR_RQCP0 << (idx << 3);
  368. if (!(tsr & rqcp_bit))
  369. break;
  370. stats->tx_packets++;
  371. stats->tx_bytes += can_get_echo_skb(ndev, idx, NULL);
  372. priv->tx_tail++;
  373. }
  374. writel(tsr, &regs->tsr);
  375. if (bxcan_get_tx_free(priv)) {
  376. /* Make sure that anybody stopping the queue after
  377. * this sees the new tx_ring->tail.
  378. */
  379. smp_mb();
  380. netif_wake_queue(ndev);
  381. }
  382. return IRQ_HANDLED;
  383. }
  384. static void bxcan_handle_state_change(struct net_device *ndev, u32 esr)
  385. {
  386. struct bxcan_priv *priv = netdev_priv(ndev);
  387. enum can_state new_state = priv->can.state;
  388. struct can_berr_counter bec;
  389. enum can_state rx_state, tx_state;
  390. struct sk_buff *skb;
  391. struct can_frame *cf;
  392. /* Early exit if no error flag is set */
  393. if (!(esr & (BXCAN_ESR_EWGF | BXCAN_ESR_EPVF | BXCAN_ESR_BOFF)))
  394. return;
  395. bec.txerr = FIELD_GET(BXCAN_ESR_TEC_MASK, esr);
  396. bec.rxerr = FIELD_GET(BXCAN_ESR_REC_MASK, esr);
  397. if (esr & BXCAN_ESR_BOFF)
  398. new_state = CAN_STATE_BUS_OFF;
  399. else if (esr & BXCAN_ESR_EPVF)
  400. new_state = CAN_STATE_ERROR_PASSIVE;
  401. else if (esr & BXCAN_ESR_EWGF)
  402. new_state = CAN_STATE_ERROR_WARNING;
  403. /* state hasn't changed */
  404. if (unlikely(new_state == priv->can.state))
  405. return;
  406. skb = alloc_can_err_skb(ndev, &cf);
  407. tx_state = bec.txerr >= bec.rxerr ? new_state : 0;
  408. rx_state = bec.txerr <= bec.rxerr ? new_state : 0;
  409. can_change_state(ndev, cf, tx_state, rx_state);
  410. if (new_state == CAN_STATE_BUS_OFF) {
  411. can_bus_off(ndev);
  412. } else if (skb) {
  413. cf->can_id |= CAN_ERR_CNT;
  414. cf->data[6] = bec.txerr;
  415. cf->data[7] = bec.rxerr;
  416. }
  417. if (skb) {
  418. int err;
  419. err = can_rx_offload_queue_timestamp(&priv->offload, skb,
  420. priv->timestamp);
  421. if (err)
  422. ndev->stats.rx_fifo_errors++;
  423. }
  424. }
  425. static void bxcan_handle_bus_err(struct net_device *ndev, u32 esr)
  426. {
  427. struct bxcan_priv *priv = netdev_priv(ndev);
  428. enum bxcan_lec_code lec_code;
  429. struct can_frame *cf;
  430. struct sk_buff *skb;
  431. lec_code = FIELD_GET(BXCAN_ESR_LEC_MASK, esr);
  432. /* Early exit if no lec update or no error.
  433. * No lec update means that no CAN bus event has been detected
  434. * since CPU wrote BXCAN_LEC_UNUSED value to status reg.
  435. */
  436. if (lec_code == BXCAN_LEC_UNUSED || lec_code == BXCAN_LEC_NO_ERROR)
  437. return;
  438. /* Common for all type of bus errors */
  439. priv->can.can_stats.bus_error++;
  440. /* Propagate the error condition to the CAN stack */
  441. skb = alloc_can_err_skb(ndev, &cf);
  442. if (skb)
  443. cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
  444. switch (lec_code) {
  445. case BXCAN_LEC_STUFF_ERROR:
  446. netdev_dbg(ndev, "Stuff error\n");
  447. ndev->stats.rx_errors++;
  448. if (skb)
  449. cf->data[2] |= CAN_ERR_PROT_STUFF;
  450. break;
  451. case BXCAN_LEC_FORM_ERROR:
  452. netdev_dbg(ndev, "Form error\n");
  453. ndev->stats.rx_errors++;
  454. if (skb)
  455. cf->data[2] |= CAN_ERR_PROT_FORM;
  456. break;
  457. case BXCAN_LEC_ACK_ERROR:
  458. netdev_dbg(ndev, "Ack error\n");
  459. ndev->stats.tx_errors++;
  460. if (skb) {
  461. cf->can_id |= CAN_ERR_ACK;
  462. cf->data[3] = CAN_ERR_PROT_LOC_ACK;
  463. }
  464. break;
  465. case BXCAN_LEC_BIT1_ERROR:
  466. netdev_dbg(ndev, "Bit error (recessive)\n");
  467. ndev->stats.tx_errors++;
  468. if (skb)
  469. cf->data[2] |= CAN_ERR_PROT_BIT1;
  470. break;
  471. case BXCAN_LEC_BIT0_ERROR:
  472. netdev_dbg(ndev, "Bit error (dominant)\n");
  473. ndev->stats.tx_errors++;
  474. if (skb)
  475. cf->data[2] |= CAN_ERR_PROT_BIT0;
  476. break;
  477. case BXCAN_LEC_CRC_ERROR:
  478. netdev_dbg(ndev, "CRC error\n");
  479. ndev->stats.rx_errors++;
  480. if (skb) {
  481. cf->data[2] |= CAN_ERR_PROT_BIT;
  482. cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
  483. }
  484. break;
  485. default:
  486. break;
  487. }
  488. if (skb) {
  489. int err;
  490. err = can_rx_offload_queue_timestamp(&priv->offload, skb,
  491. priv->timestamp);
  492. if (err)
  493. ndev->stats.rx_fifo_errors++;
  494. }
  495. }
  496. static irqreturn_t bxcan_state_change_isr(int irq, void *dev_id)
  497. {
  498. struct net_device *ndev = dev_id;
  499. struct bxcan_priv *priv = netdev_priv(ndev);
  500. struct bxcan_regs __iomem *regs = priv->regs;
  501. u32 msr, esr;
  502. msr = readl(&regs->msr);
  503. if (!(msr & BXCAN_MSR_ERRI))
  504. return IRQ_NONE;
  505. esr = readl(&regs->esr);
  506. bxcan_handle_state_change(ndev, esr);
  507. if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
  508. bxcan_handle_bus_err(ndev, esr);
  509. msr |= BXCAN_MSR_ERRI;
  510. writel(msr, &regs->msr);
  511. can_rx_offload_irq_finish(&priv->offload);
  512. return IRQ_HANDLED;
  513. }
  514. static int bxcan_chip_start(struct net_device *ndev)
  515. {
  516. struct bxcan_priv *priv = netdev_priv(ndev);
  517. struct bxcan_regs __iomem *regs = priv->regs;
  518. struct can_bittiming *bt = &priv->can.bittiming;
  519. u32 clr, set;
  520. int err;
  521. err = bxcan_chip_softreset(priv);
  522. if (err) {
  523. netdev_err(ndev, "failed to reset chip, error %pe\n",
  524. ERR_PTR(err));
  525. return err;
  526. }
  527. err = bxcan_leave_sleep_mode(priv);
  528. if (err) {
  529. netdev_err(ndev, "failed to leave sleep mode, error %pe\n",
  530. ERR_PTR(err));
  531. goto failed_leave_sleep;
  532. }
  533. err = bxcan_enter_init_mode(priv);
  534. if (err) {
  535. netdev_err(ndev, "failed to enter init mode, error %pe\n",
  536. ERR_PTR(err));
  537. goto failed_enter_init;
  538. }
  539. /* MCR
  540. *
  541. * select request order priority
  542. * enable time triggered mode
  543. * bus-off state left on sw request
  544. * sleep mode left on sw request
  545. * retransmit automatically on error
  546. * do not lock RX FIFO on overrun
  547. */
  548. bxcan_rmw(priv, &regs->mcr,
  549. BXCAN_MCR_ABOM | BXCAN_MCR_AWUM | BXCAN_MCR_NART |
  550. BXCAN_MCR_RFLM, BXCAN_MCR_TTCM | BXCAN_MCR_TXFP);
  551. /* Bit timing register settings */
  552. set = FIELD_PREP(BXCAN_BTR_BRP_MASK, bt->brp - 1) |
  553. FIELD_PREP(BXCAN_BTR_TS1_MASK, bt->phase_seg1 +
  554. bt->prop_seg - 1) |
  555. FIELD_PREP(BXCAN_BTR_TS2_MASK, bt->phase_seg2 - 1) |
  556. FIELD_PREP(BXCAN_BTR_SJW_MASK, bt->sjw - 1);
  557. /* loopback + silent mode put the controller in test mode,
  558. * useful for hot self-test
  559. */
  560. if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
  561. set |= BXCAN_BTR_LBKM;
  562. if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
  563. set |= BXCAN_BTR_SILM;
  564. bxcan_rmw(priv, &regs->btr, BXCAN_BTR_SILM | BXCAN_BTR_LBKM |
  565. BXCAN_BTR_BRP_MASK | BXCAN_BTR_TS1_MASK | BXCAN_BTR_TS2_MASK |
  566. BXCAN_BTR_SJW_MASK, set);
  567. bxcan_enable_filters(priv, priv->cfg);
  568. /* Clear all internal status */
  569. priv->tx_head = 0;
  570. priv->tx_tail = 0;
  571. err = bxcan_leave_init_mode(priv);
  572. if (err) {
  573. netdev_err(ndev, "failed to leave init mode, error %pe\n",
  574. ERR_PTR(err));
  575. goto failed_leave_init;
  576. }
  577. /* Set a `lec` value so that we can check for updates later */
  578. bxcan_rmw(priv, &regs->esr, BXCAN_ESR_LEC_MASK,
  579. FIELD_PREP(BXCAN_ESR_LEC_MASK, BXCAN_LEC_UNUSED));
  580. /* IER
  581. *
  582. * Enable interrupt for:
  583. * bus-off
  584. * passive error
  585. * warning error
  586. * last error code
  587. * RX FIFO pending message
  588. * TX mailbox empty
  589. */
  590. clr = BXCAN_IER_WKUIE | BXCAN_IER_SLKIE | BXCAN_IER_FOVIE1 |
  591. BXCAN_IER_FFIE1 | BXCAN_IER_FMPIE1 | BXCAN_IER_FOVIE0 |
  592. BXCAN_IER_FFIE0;
  593. set = BXCAN_IER_ERRIE | BXCAN_IER_BOFIE | BXCAN_IER_EPVIE |
  594. BXCAN_IER_EWGIE | BXCAN_IER_FMPIE0 | BXCAN_IER_TMEIE;
  595. if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
  596. set |= BXCAN_IER_LECIE;
  597. else
  598. clr |= BXCAN_IER_LECIE;
  599. bxcan_rmw(priv, &regs->ier, clr, set);
  600. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  601. return 0;
  602. failed_leave_init:
  603. failed_enter_init:
  604. failed_leave_sleep:
  605. bxcan_chip_softreset(priv);
  606. return err;
  607. }
  608. static int bxcan_open(struct net_device *ndev)
  609. {
  610. struct bxcan_priv *priv = netdev_priv(ndev);
  611. int err;
  612. err = clk_prepare_enable(priv->clk);
  613. if (err) {
  614. netdev_err(ndev, "failed to enable clock, error %pe\n",
  615. ERR_PTR(err));
  616. return err;
  617. }
  618. err = open_candev(ndev);
  619. if (err) {
  620. netdev_err(ndev, "open_candev() failed, error %pe\n",
  621. ERR_PTR(err));
  622. goto out_disable_clock;
  623. }
  624. can_rx_offload_enable(&priv->offload);
  625. err = request_irq(ndev->irq, bxcan_rx_isr, IRQF_SHARED, ndev->name,
  626. ndev);
  627. if (err) {
  628. netdev_err(ndev, "failed to register rx irq(%d), error %pe\n",
  629. ndev->irq, ERR_PTR(err));
  630. goto out_close_candev;
  631. }
  632. err = request_irq(priv->tx_irq, bxcan_tx_isr, IRQF_SHARED, ndev->name,
  633. ndev);
  634. if (err) {
  635. netdev_err(ndev, "failed to register tx irq(%d), error %pe\n",
  636. priv->tx_irq, ERR_PTR(err));
  637. goto out_free_rx_irq;
  638. }
  639. err = request_irq(priv->sce_irq, bxcan_state_change_isr, IRQF_SHARED,
  640. ndev->name, ndev);
  641. if (err) {
  642. netdev_err(ndev, "failed to register sce irq(%d), error %pe\n",
  643. priv->sce_irq, ERR_PTR(err));
  644. goto out_free_tx_irq;
  645. }
  646. err = bxcan_chip_start(ndev);
  647. if (err)
  648. goto out_free_sce_irq;
  649. netif_start_queue(ndev);
  650. return 0;
  651. out_free_sce_irq:
  652. free_irq(priv->sce_irq, ndev);
  653. out_free_tx_irq:
  654. free_irq(priv->tx_irq, ndev);
  655. out_free_rx_irq:
  656. free_irq(ndev->irq, ndev);
  657. out_close_candev:
  658. can_rx_offload_disable(&priv->offload);
  659. close_candev(ndev);
  660. out_disable_clock:
  661. clk_disable_unprepare(priv->clk);
  662. return err;
  663. }
  664. static void bxcan_chip_stop(struct net_device *ndev)
  665. {
  666. struct bxcan_priv *priv = netdev_priv(ndev);
  667. struct bxcan_regs __iomem *regs = priv->regs;
  668. /* disable all interrupts */
  669. bxcan_rmw(priv, &regs->ier, BXCAN_IER_SLKIE | BXCAN_IER_WKUIE |
  670. BXCAN_IER_ERRIE | BXCAN_IER_LECIE | BXCAN_IER_BOFIE |
  671. BXCAN_IER_EPVIE | BXCAN_IER_EWGIE | BXCAN_IER_FOVIE1 |
  672. BXCAN_IER_FFIE1 | BXCAN_IER_FMPIE1 | BXCAN_IER_FOVIE0 |
  673. BXCAN_IER_FFIE0 | BXCAN_IER_FMPIE0 | BXCAN_IER_TMEIE, 0);
  674. bxcan_disable_filters(priv, priv->cfg);
  675. bxcan_enter_sleep_mode(priv);
  676. priv->can.state = CAN_STATE_STOPPED;
  677. }
  678. static int bxcan_stop(struct net_device *ndev)
  679. {
  680. struct bxcan_priv *priv = netdev_priv(ndev);
  681. netif_stop_queue(ndev);
  682. bxcan_chip_stop(ndev);
  683. free_irq(ndev->irq, ndev);
  684. free_irq(priv->tx_irq, ndev);
  685. free_irq(priv->sce_irq, ndev);
  686. can_rx_offload_disable(&priv->offload);
  687. close_candev(ndev);
  688. clk_disable_unprepare(priv->clk);
  689. return 0;
  690. }
  691. static netdev_tx_t bxcan_start_xmit(struct sk_buff *skb,
  692. struct net_device *ndev)
  693. {
  694. struct bxcan_priv *priv = netdev_priv(ndev);
  695. struct can_frame *cf = (struct can_frame *)skb->data;
  696. struct bxcan_regs __iomem *regs = priv->regs;
  697. struct bxcan_mb __iomem *mb_regs;
  698. unsigned int idx;
  699. u32 id;
  700. int i, j;
  701. if (can_dev_dropped_skb(ndev, skb))
  702. return NETDEV_TX_OK;
  703. if (bxcan_tx_busy(priv))
  704. return NETDEV_TX_BUSY;
  705. idx = bxcan_get_tx_head(priv);
  706. priv->tx_head++;
  707. if (bxcan_get_tx_free(priv) == 0)
  708. netif_stop_queue(ndev);
  709. mb_regs = &regs->tx_mb[idx];
  710. if (cf->can_id & CAN_EFF_FLAG)
  711. id = FIELD_PREP(BXCAN_TIxR_EXID_MASK, cf->can_id) |
  712. BXCAN_TIxR_IDE;
  713. else
  714. id = FIELD_PREP(BXCAN_TIxR_STID_MASK, cf->can_id);
  715. if (cf->can_id & CAN_RTR_FLAG) { /* Remote transmission request */
  716. id |= BXCAN_TIxR_RTR;
  717. } else {
  718. for (i = 0, j = 0; i < cf->len; i += 4, j++)
  719. writel(*(u32 *)(cf->data + i), &mb_regs->data[j]);
  720. }
  721. writel(FIELD_PREP(BXCAN_TDTxR_DLC_MASK, cf->len), &mb_regs->dlc);
  722. can_put_echo_skb(skb, ndev, idx, 0);
  723. /* Start transmission */
  724. writel(id | BXCAN_TIxR_TXRQ, &mb_regs->id);
  725. return NETDEV_TX_OK;
  726. }
  727. static const struct net_device_ops bxcan_netdev_ops = {
  728. .ndo_open = bxcan_open,
  729. .ndo_stop = bxcan_stop,
  730. .ndo_start_xmit = bxcan_start_xmit,
  731. };
  732. static const struct ethtool_ops bxcan_ethtool_ops = {
  733. .get_ts_info = ethtool_op_get_ts_info,
  734. };
  735. static int bxcan_do_set_mode(struct net_device *ndev, enum can_mode mode)
  736. {
  737. int err;
  738. switch (mode) {
  739. case CAN_MODE_START:
  740. err = bxcan_chip_start(ndev);
  741. if (err)
  742. return err;
  743. netif_wake_queue(ndev);
  744. break;
  745. default:
  746. return -EOPNOTSUPP;
  747. }
  748. return 0;
  749. }
  750. static int bxcan_get_berr_counter(const struct net_device *ndev,
  751. struct can_berr_counter *bec)
  752. {
  753. struct bxcan_priv *priv = netdev_priv(ndev);
  754. struct bxcan_regs __iomem *regs = priv->regs;
  755. u32 esr;
  756. int err;
  757. err = clk_prepare_enable(priv->clk);
  758. if (err)
  759. return err;
  760. esr = readl(&regs->esr);
  761. bec->txerr = FIELD_GET(BXCAN_ESR_TEC_MASK, esr);
  762. bec->rxerr = FIELD_GET(BXCAN_ESR_REC_MASK, esr);
  763. clk_disable_unprepare(priv->clk);
  764. return 0;
  765. }
  766. static int bxcan_probe(struct platform_device *pdev)
  767. {
  768. struct device_node *np = pdev->dev.of_node;
  769. struct device *dev = &pdev->dev;
  770. struct net_device *ndev;
  771. struct bxcan_priv *priv;
  772. struct clk *clk = NULL;
  773. void __iomem *regs;
  774. struct regmap *gcan;
  775. enum bxcan_cfg cfg;
  776. int err, rx_irq, tx_irq, sce_irq;
  777. regs = devm_platform_ioremap_resource(pdev, 0);
  778. if (IS_ERR(regs)) {
  779. dev_err(dev, "failed to get base address\n");
  780. return PTR_ERR(regs);
  781. }
  782. gcan = syscon_regmap_lookup_by_phandle(np, "st,gcan");
  783. if (IS_ERR(gcan)) {
  784. dev_err(dev, "failed to get shared memory base address\n");
  785. return PTR_ERR(gcan);
  786. }
  787. if (of_property_read_bool(np, "st,can-primary"))
  788. cfg = BXCAN_CFG_DUAL_PRIMARY;
  789. else if (of_property_read_bool(np, "st,can-secondary"))
  790. cfg = BXCAN_CFG_DUAL_SECONDARY;
  791. else
  792. cfg = BXCAN_CFG_SINGLE;
  793. clk = devm_clk_get(dev, NULL);
  794. if (IS_ERR(clk)) {
  795. dev_err(dev, "failed to get clock\n");
  796. return PTR_ERR(clk);
  797. }
  798. rx_irq = platform_get_irq_byname(pdev, "rx0");
  799. if (rx_irq < 0)
  800. return rx_irq;
  801. tx_irq = platform_get_irq_byname(pdev, "tx");
  802. if (tx_irq < 0)
  803. return tx_irq;
  804. sce_irq = platform_get_irq_byname(pdev, "sce");
  805. if (sce_irq < 0)
  806. return sce_irq;
  807. ndev = alloc_candev(sizeof(struct bxcan_priv), BXCAN_TX_MB_NUM);
  808. if (!ndev) {
  809. dev_err(dev, "alloc_candev() failed\n");
  810. return -ENOMEM;
  811. }
  812. priv = netdev_priv(ndev);
  813. platform_set_drvdata(pdev, ndev);
  814. SET_NETDEV_DEV(ndev, dev);
  815. ndev->netdev_ops = &bxcan_netdev_ops;
  816. ndev->ethtool_ops = &bxcan_ethtool_ops;
  817. ndev->irq = rx_irq;
  818. ndev->flags |= IFF_ECHO;
  819. priv->dev = dev;
  820. priv->ndev = ndev;
  821. priv->regs = regs;
  822. priv->gcan = gcan;
  823. priv->clk = clk;
  824. priv->tx_irq = tx_irq;
  825. priv->sce_irq = sce_irq;
  826. priv->cfg = cfg;
  827. priv->can.clock.freq = clk_get_rate(clk);
  828. spin_lock_init(&priv->rmw_lock);
  829. priv->tx_head = 0;
  830. priv->tx_tail = 0;
  831. priv->can.bittiming_const = &bxcan_bittiming_const;
  832. priv->can.do_set_mode = bxcan_do_set_mode;
  833. priv->can.do_get_berr_counter = bxcan_get_berr_counter;
  834. priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
  835. CAN_CTRLMODE_LISTENONLY | CAN_CTRLMODE_BERR_REPORTING;
  836. priv->offload.mailbox_read = bxcan_mailbox_read;
  837. err = can_rx_offload_add_fifo(ndev, &priv->offload, BXCAN_NAPI_WEIGHT);
  838. if (err) {
  839. dev_err(dev, "failed to add FIFO rx_offload\n");
  840. goto out_free_candev;
  841. }
  842. err = register_candev(ndev);
  843. if (err) {
  844. dev_err(dev, "failed to register netdev\n");
  845. goto out_can_rx_offload_del;
  846. }
  847. dev_info(dev, "clk: %d Hz, IRQs: %d, %d, %d\n", priv->can.clock.freq,
  848. tx_irq, rx_irq, sce_irq);
  849. return 0;
  850. out_can_rx_offload_del:
  851. can_rx_offload_del(&priv->offload);
  852. out_free_candev:
  853. free_candev(ndev);
  854. return err;
  855. }
  856. static void bxcan_remove(struct platform_device *pdev)
  857. {
  858. struct net_device *ndev = platform_get_drvdata(pdev);
  859. struct bxcan_priv *priv = netdev_priv(ndev);
  860. unregister_candev(ndev);
  861. clk_disable_unprepare(priv->clk);
  862. can_rx_offload_del(&priv->offload);
  863. free_candev(ndev);
  864. }
  865. static int __maybe_unused bxcan_suspend(struct device *dev)
  866. {
  867. struct net_device *ndev = dev_get_drvdata(dev);
  868. struct bxcan_priv *priv = netdev_priv(ndev);
  869. if (!netif_running(ndev))
  870. return 0;
  871. netif_stop_queue(ndev);
  872. netif_device_detach(ndev);
  873. bxcan_enter_sleep_mode(priv);
  874. priv->can.state = CAN_STATE_SLEEPING;
  875. clk_disable_unprepare(priv->clk);
  876. return 0;
  877. }
  878. static int __maybe_unused bxcan_resume(struct device *dev)
  879. {
  880. struct net_device *ndev = dev_get_drvdata(dev);
  881. struct bxcan_priv *priv = netdev_priv(ndev);
  882. if (!netif_running(ndev))
  883. return 0;
  884. clk_prepare_enable(priv->clk);
  885. bxcan_leave_sleep_mode(priv);
  886. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  887. netif_device_attach(ndev);
  888. netif_start_queue(ndev);
  889. return 0;
  890. }
  891. static SIMPLE_DEV_PM_OPS(bxcan_pm_ops, bxcan_suspend, bxcan_resume);
  892. static const struct of_device_id bxcan_of_match[] = {
  893. {.compatible = "st,stm32f4-bxcan"},
  894. { /* sentinel */ },
  895. };
  896. MODULE_DEVICE_TABLE(of, bxcan_of_match);
  897. static struct platform_driver bxcan_driver = {
  898. .driver = {
  899. .name = KBUILD_MODNAME,
  900. .pm = &bxcan_pm_ops,
  901. .of_match_table = bxcan_of_match,
  902. },
  903. .probe = bxcan_probe,
  904. .remove = bxcan_remove,
  905. };
  906. module_platform_driver(bxcan_driver);
  907. MODULE_AUTHOR("Dario Binacchi <dario.binacchi@amarulasolutions.com>");
  908. MODULE_DESCRIPTION("STMicroelectronics Basic Extended CAN controller driver");
  909. MODULE_LICENSE("GPL");