0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #include <linux/kernel.h>
0029 #include <linux/module.h>
0030 #include <linux/interrupt.h>
0031 #include <linux/delay.h>
0032 #include <linux/netdevice.h>
0033 #include <linux/if_arp.h>
0034 #include <linux/if_ether.h>
0035 #include <linux/list.h>
0036 #include <linux/io.h>
0037 #include <linux/pm_runtime.h>
0038 #include <linux/pinctrl/consumer.h>
0039
0040 #include <linux/can.h>
0041 #include <linux/can/dev.h>
0042 #include <linux/can/error.h>
0043
0044 #include "c_can.h"
0045
0046
0047 #define IF_ENUM_REG_LEN 11
0048 #define C_CAN_IFACE(reg, iface) (C_CAN_IF1_##reg + (iface) * IF_ENUM_REG_LEN)
0049
0050
0051 #define CONTROL_EX_PDR BIT(8)
0052
0053
0054 #define CONTROL_SWR BIT(15)
0055 #define CONTROL_TEST BIT(7)
0056 #define CONTROL_CCE BIT(6)
0057 #define CONTROL_DISABLE_AR BIT(5)
0058 #define CONTROL_ENABLE_AR (0 << 5)
0059 #define CONTROL_EIE BIT(3)
0060 #define CONTROL_SIE BIT(2)
0061 #define CONTROL_IE BIT(1)
0062 #define CONTROL_INIT BIT(0)
0063
0064 #define CONTROL_IRQMSK (CONTROL_EIE | CONTROL_IE | CONTROL_SIE)
0065
0066
0067 #define TEST_RX BIT(7)
0068 #define TEST_TX1 BIT(6)
0069 #define TEST_TX2 BIT(5)
0070 #define TEST_LBACK BIT(4)
0071 #define TEST_SILENT BIT(3)
0072 #define TEST_BASIC BIT(2)
0073
0074
0075 #define STATUS_PDA BIT(10)
0076 #define STATUS_BOFF BIT(7)
0077 #define STATUS_EWARN BIT(6)
0078 #define STATUS_EPASS BIT(5)
0079 #define STATUS_RXOK BIT(4)
0080 #define STATUS_TXOK BIT(3)
0081
0082
0083 #define ERR_CNT_TEC_MASK 0xff
0084 #define ERR_CNT_TEC_SHIFT 0
0085 #define ERR_CNT_REC_SHIFT 8
0086 #define ERR_CNT_REC_MASK (0x7f << ERR_CNT_REC_SHIFT)
0087 #define ERR_CNT_RP_SHIFT 15
0088 #define ERR_CNT_RP_MASK (0x1 << ERR_CNT_RP_SHIFT)
0089
0090
0091 #define BTR_BRP_MASK 0x3f
0092 #define BTR_BRP_SHIFT 0
0093 #define BTR_SJW_SHIFT 6
0094 #define BTR_SJW_MASK (0x3 << BTR_SJW_SHIFT)
0095 #define BTR_TSEG1_SHIFT 8
0096 #define BTR_TSEG1_MASK (0xf << BTR_TSEG1_SHIFT)
0097 #define BTR_TSEG2_SHIFT 12
0098 #define BTR_TSEG2_MASK (0x7 << BTR_TSEG2_SHIFT)
0099
0100
0101 #define INT_STS_PENDING 0x8000
0102
0103
0104 #define BRP_EXT_BRPE_MASK 0x0f
0105 #define BRP_EXT_BRPE_SHIFT 0
0106
0107
0108 #define IF_COMR_BUSY BIT(15)
0109
0110
0111 #define IF_COMM_WR BIT(7)
0112 #define IF_COMM_MASK BIT(6)
0113 #define IF_COMM_ARB BIT(5)
0114 #define IF_COMM_CONTROL BIT(4)
0115 #define IF_COMM_CLR_INT_PND BIT(3)
0116 #define IF_COMM_TXRQST BIT(2)
0117 #define IF_COMM_CLR_NEWDAT IF_COMM_TXRQST
0118 #define IF_COMM_DATAA BIT(1)
0119 #define IF_COMM_DATAB BIT(0)
0120
0121
0122 #define IF_COMM_TX (IF_COMM_ARB | IF_COMM_CONTROL | \
0123 IF_COMM_TXRQST | \
0124 IF_COMM_DATAA | IF_COMM_DATAB)
0125
0126
0127 #define IF_COMM_RCV_LOW (IF_COMM_MASK | IF_COMM_ARB | \
0128 IF_COMM_CONTROL | IF_COMM_CLR_INT_PND | \
0129 IF_COMM_DATAA | IF_COMM_DATAB)
0130
0131
0132 #define IF_COMM_RCV_HIGH (IF_COMM_RCV_LOW | IF_COMM_CLR_NEWDAT)
0133
0134
0135 #define IF_COMM_RCV_SETUP (IF_COMM_MASK | IF_COMM_ARB | IF_COMM_CONTROL)
0136
0137
0138 #define IF_COMM_INVAL (IF_COMM_ARB | IF_COMM_CONTROL)
0139
0140
0141 #define IF_ARB_MSGVAL BIT(31)
0142 #define IF_ARB_MSGXTD BIT(30)
0143 #define IF_ARB_TRANSMIT BIT(29)
0144
0145
0146 #define IF_MCONT_NEWDAT BIT(15)
0147 #define IF_MCONT_MSGLST BIT(14)
0148 #define IF_MCONT_INTPND BIT(13)
0149 #define IF_MCONT_UMASK BIT(12)
0150 #define IF_MCONT_TXIE BIT(11)
0151 #define IF_MCONT_RXIE BIT(10)
0152 #define IF_MCONT_RMTEN BIT(9)
0153 #define IF_MCONT_TXRQST BIT(8)
0154 #define IF_MCONT_EOB BIT(7)
0155 #define IF_MCONT_DLC_MASK 0xf
0156
0157 #define IF_MCONT_RCV (IF_MCONT_RXIE | IF_MCONT_UMASK)
0158 #define IF_MCONT_RCV_EOB (IF_MCONT_RCV | IF_MCONT_EOB)
0159
0160 #define IF_MCONT_TX (IF_MCONT_TXIE | IF_MCONT_EOB)
0161
0162
0163 #define IF_NAPI 0
0164 #define IF_TX 1
0165
0166
0167 #define MIN_TIMEOUT_VALUE 6
0168
0169
0170 #define INIT_WAIT_MS 1000
0171
0172
0173 enum c_can_lec_type {
0174 LEC_NO_ERROR = 0,
0175 LEC_STUFF_ERROR,
0176 LEC_FORM_ERROR,
0177 LEC_ACK_ERROR,
0178 LEC_BIT1_ERROR,
0179 LEC_BIT0_ERROR,
0180 LEC_CRC_ERROR,
0181 LEC_UNUSED,
0182 LEC_MASK = LEC_UNUSED,
0183 };
0184
0185
0186
0187
0188 enum c_can_bus_error_types {
0189 C_CAN_NO_ERROR = 0,
0190 C_CAN_BUS_OFF,
0191 C_CAN_ERROR_WARNING,
0192 C_CAN_ERROR_PASSIVE,
0193 };
0194
0195 static const struct can_bittiming_const c_can_bittiming_const = {
0196 .name = KBUILD_MODNAME,
0197 .tseg1_min = 2,
0198 .tseg1_max = 16,
0199 .tseg2_min = 1,
0200 .tseg2_max = 8,
0201 .sjw_max = 4,
0202 .brp_min = 1,
0203 .brp_max = 1024,
0204 .brp_inc = 1,
0205 };
0206
0207 static inline void c_can_pm_runtime_get_sync(const struct c_can_priv *priv)
0208 {
0209 if (priv->device)
0210 pm_runtime_get_sync(priv->device);
0211 }
0212
0213 static inline void c_can_pm_runtime_put_sync(const struct c_can_priv *priv)
0214 {
0215 if (priv->device)
0216 pm_runtime_put_sync(priv->device);
0217 }
0218
0219 static inline void c_can_reset_ram(const struct c_can_priv *priv, bool enable)
0220 {
0221 if (priv->raminit)
0222 priv->raminit(priv, enable);
0223 }
0224
0225 static void c_can_irq_control(struct c_can_priv *priv, bool enable)
0226 {
0227 u32 ctrl = priv->read_reg(priv, C_CAN_CTRL_REG) & ~CONTROL_IRQMSK;
0228
0229 if (enable)
0230 ctrl |= CONTROL_IRQMSK;
0231
0232 priv->write_reg(priv, C_CAN_CTRL_REG, ctrl);
0233 }
0234
0235 static void c_can_obj_update(struct net_device *dev, int iface, u32 cmd, u32 obj)
0236 {
0237 struct c_can_priv *priv = netdev_priv(dev);
0238 int cnt, reg = C_CAN_IFACE(COMREQ_REG, iface);
0239
0240 priv->write_reg32(priv, reg, (cmd << 16) | obj);
0241
0242 for (cnt = MIN_TIMEOUT_VALUE; cnt; cnt--) {
0243 if (!(priv->read_reg(priv, reg) & IF_COMR_BUSY))
0244 return;
0245 udelay(1);
0246 }
0247 netdev_err(dev, "Updating object timed out\n");
0248 }
0249
0250 static inline void c_can_object_get(struct net_device *dev, int iface,
0251 u32 obj, u32 cmd)
0252 {
0253 c_can_obj_update(dev, iface, cmd, obj);
0254 }
0255
0256 static inline void c_can_object_put(struct net_device *dev, int iface,
0257 u32 obj, u32 cmd)
0258 {
0259 c_can_obj_update(dev, iface, cmd | IF_COMM_WR, obj);
0260 }
0261
0262
0263
0264
0265
0266 static void c_can_inval_tx_object(struct net_device *dev, int iface, int obj)
0267 {
0268 struct c_can_priv *priv = netdev_priv(dev);
0269
0270 priv->write_reg(priv, C_CAN_IFACE(MSGCTRL_REG, iface), 0);
0271 c_can_object_put(dev, iface, obj, IF_COMM_INVAL);
0272 }
0273
0274 static void c_can_inval_msg_object(struct net_device *dev, int iface, int obj)
0275 {
0276 struct c_can_priv *priv = netdev_priv(dev);
0277
0278 priv->write_reg32(priv, C_CAN_IFACE(ARB1_REG, iface), 0);
0279 c_can_inval_tx_object(dev, iface, obj);
0280 }
0281
0282 static void c_can_setup_tx_object(struct net_device *dev, int iface,
0283 struct can_frame *frame, int idx)
0284 {
0285 struct c_can_priv *priv = netdev_priv(dev);
0286 u16 ctrl = IF_MCONT_TX | frame->len;
0287 bool rtr = frame->can_id & CAN_RTR_FLAG;
0288 u32 arb = IF_ARB_MSGVAL;
0289 int i;
0290
0291 if (frame->can_id & CAN_EFF_FLAG) {
0292 arb |= frame->can_id & CAN_EFF_MASK;
0293 arb |= IF_ARB_MSGXTD;
0294 } else {
0295 arb |= (frame->can_id & CAN_SFF_MASK) << 18;
0296 }
0297
0298 if (!rtr)
0299 arb |= IF_ARB_TRANSMIT;
0300
0301
0302
0303
0304 if (rtr != (bool)test_bit(idx, &priv->tx_dir)) {
0305 u32 obj = idx + priv->msg_obj_tx_first;
0306
0307 c_can_inval_msg_object(dev, iface, obj);
0308 change_bit(idx, &priv->tx_dir);
0309 }
0310
0311 priv->write_reg32(priv, C_CAN_IFACE(ARB1_REG, iface), arb);
0312
0313 priv->write_reg(priv, C_CAN_IFACE(MSGCTRL_REG, iface), ctrl);
0314
0315 if (priv->type == BOSCH_D_CAN) {
0316 u32 data = 0, dreg = C_CAN_IFACE(DATA1_REG, iface);
0317
0318 for (i = 0; i < frame->len; i += 4, dreg += 2) {
0319 data = (u32)frame->data[i];
0320 data |= (u32)frame->data[i + 1] << 8;
0321 data |= (u32)frame->data[i + 2] << 16;
0322 data |= (u32)frame->data[i + 3] << 24;
0323 priv->write_reg32(priv, dreg, data);
0324 }
0325 } else {
0326 for (i = 0; i < frame->len; i += 2) {
0327 priv->write_reg(priv,
0328 C_CAN_IFACE(DATA1_REG, iface) + i / 2,
0329 frame->data[i] |
0330 (frame->data[i + 1] << 8));
0331 }
0332 }
0333 }
0334
0335 static int c_can_handle_lost_msg_obj(struct net_device *dev,
0336 int iface, int objno, u32 ctrl)
0337 {
0338 struct net_device_stats *stats = &dev->stats;
0339 struct c_can_priv *priv = netdev_priv(dev);
0340 struct can_frame *frame;
0341 struct sk_buff *skb;
0342
0343 ctrl &= ~(IF_MCONT_MSGLST | IF_MCONT_INTPND | IF_MCONT_NEWDAT);
0344 priv->write_reg(priv, C_CAN_IFACE(MSGCTRL_REG, iface), ctrl);
0345 c_can_object_put(dev, iface, objno, IF_COMM_CONTROL);
0346
0347 stats->rx_errors++;
0348 stats->rx_over_errors++;
0349
0350
0351 skb = alloc_can_err_skb(dev, &frame);
0352 if (unlikely(!skb))
0353 return 0;
0354
0355 frame->can_id |= CAN_ERR_CRTL;
0356 frame->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
0357
0358 netif_receive_skb(skb);
0359 return 1;
0360 }
0361
0362 static int c_can_read_msg_object(struct net_device *dev, int iface, u32 ctrl)
0363 {
0364 struct net_device_stats *stats = &dev->stats;
0365 struct c_can_priv *priv = netdev_priv(dev);
0366 struct can_frame *frame;
0367 struct sk_buff *skb;
0368 u32 arb, data;
0369
0370 skb = alloc_can_skb(dev, &frame);
0371 if (!skb) {
0372 stats->rx_dropped++;
0373 return -ENOMEM;
0374 }
0375
0376 frame->len = can_cc_dlc2len(ctrl & 0x0F);
0377
0378 arb = priv->read_reg32(priv, C_CAN_IFACE(ARB1_REG, iface));
0379
0380 if (arb & IF_ARB_MSGXTD)
0381 frame->can_id = (arb & CAN_EFF_MASK) | CAN_EFF_FLAG;
0382 else
0383 frame->can_id = (arb >> 18) & CAN_SFF_MASK;
0384
0385 if (arb & IF_ARB_TRANSMIT) {
0386 frame->can_id |= CAN_RTR_FLAG;
0387 } else {
0388 int i, dreg = C_CAN_IFACE(DATA1_REG, iface);
0389
0390 if (priv->type == BOSCH_D_CAN) {
0391 for (i = 0; i < frame->len; i += 4, dreg += 2) {
0392 data = priv->read_reg32(priv, dreg);
0393 frame->data[i] = data;
0394 frame->data[i + 1] = data >> 8;
0395 frame->data[i + 2] = data >> 16;
0396 frame->data[i + 3] = data >> 24;
0397 }
0398 } else {
0399 for (i = 0; i < frame->len; i += 2, dreg++) {
0400 data = priv->read_reg(priv, dreg);
0401 frame->data[i] = data;
0402 frame->data[i + 1] = data >> 8;
0403 }
0404 }
0405
0406 stats->rx_bytes += frame->len;
0407 }
0408 stats->rx_packets++;
0409
0410 netif_receive_skb(skb);
0411 return 0;
0412 }
0413
0414 static void c_can_setup_receive_object(struct net_device *dev, int iface,
0415 u32 obj, u32 mask, u32 id, u32 mcont)
0416 {
0417 struct c_can_priv *priv = netdev_priv(dev);
0418
0419 mask |= BIT(29);
0420 priv->write_reg32(priv, C_CAN_IFACE(MASK1_REG, iface), mask);
0421
0422 id |= IF_ARB_MSGVAL;
0423 priv->write_reg32(priv, C_CAN_IFACE(ARB1_REG, iface), id);
0424
0425 priv->write_reg(priv, C_CAN_IFACE(MSGCTRL_REG, iface), mcont);
0426 c_can_object_put(dev, iface, obj, IF_COMM_RCV_SETUP);
0427 }
0428
0429 static bool c_can_tx_busy(const struct c_can_priv *priv,
0430 const struct c_can_tx_ring *tx_ring)
0431 {
0432 if (c_can_get_tx_free(priv, tx_ring) > 0)
0433 return false;
0434
0435 netif_stop_queue(priv->dev);
0436
0437
0438 smp_mb();
0439
0440 if (c_can_get_tx_free(priv, tx_ring) == 0) {
0441 netdev_dbg(priv->dev,
0442 "Stopping tx-queue (tx_head=0x%08x, tx_tail=0x%08x, len=%d).\n",
0443 tx_ring->head, tx_ring->tail,
0444 tx_ring->head - tx_ring->tail);
0445 return true;
0446 }
0447
0448 netif_start_queue(priv->dev);
0449 return false;
0450 }
0451
0452 static netdev_tx_t c_can_start_xmit(struct sk_buff *skb,
0453 struct net_device *dev)
0454 {
0455 struct can_frame *frame = (struct can_frame *)skb->data;
0456 struct c_can_priv *priv = netdev_priv(dev);
0457 struct c_can_tx_ring *tx_ring = &priv->tx;
0458 u32 idx, obj, cmd = IF_COMM_TX;
0459
0460 if (can_dropped_invalid_skb(dev, skb))
0461 return NETDEV_TX_OK;
0462
0463 if (c_can_tx_busy(priv, tx_ring))
0464 return NETDEV_TX_BUSY;
0465
0466 idx = c_can_get_tx_head(tx_ring);
0467 tx_ring->head++;
0468 if (c_can_get_tx_free(priv, tx_ring) == 0)
0469 netif_stop_queue(dev);
0470
0471 if (idx < c_can_get_tx_tail(tx_ring))
0472 cmd &= ~IF_COMM_TXRQST;
0473
0474
0475
0476
0477
0478 c_can_setup_tx_object(dev, IF_TX, frame, idx);
0479 can_put_echo_skb(skb, dev, idx, 0);
0480 obj = idx + priv->msg_obj_tx_first;
0481 c_can_object_put(dev, IF_TX, obj, cmd);
0482
0483 return NETDEV_TX_OK;
0484 }
0485
0486 static int c_can_wait_for_ctrl_init(struct net_device *dev,
0487 struct c_can_priv *priv, u32 init)
0488 {
0489 int retry = 0;
0490
0491 while (init != (priv->read_reg(priv, C_CAN_CTRL_REG) & CONTROL_INIT)) {
0492 udelay(10);
0493 if (retry++ > 1000) {
0494 netdev_err(dev, "CCTRL: set CONTROL_INIT failed\n");
0495 return -EIO;
0496 }
0497 }
0498 return 0;
0499 }
0500
0501 static int c_can_set_bittiming(struct net_device *dev)
0502 {
0503 unsigned int reg_btr, reg_brpe, ctrl_save;
0504 u8 brp, brpe, sjw, tseg1, tseg2;
0505 u32 ten_bit_brp;
0506 struct c_can_priv *priv = netdev_priv(dev);
0507 const struct can_bittiming *bt = &priv->can.bittiming;
0508 int res;
0509
0510
0511 ten_bit_brp = bt->brp - 1;
0512 brp = ten_bit_brp & BTR_BRP_MASK;
0513 brpe = ten_bit_brp >> 6;
0514
0515 sjw = bt->sjw - 1;
0516 tseg1 = bt->prop_seg + bt->phase_seg1 - 1;
0517 tseg2 = bt->phase_seg2 - 1;
0518 reg_btr = brp | (sjw << BTR_SJW_SHIFT) | (tseg1 << BTR_TSEG1_SHIFT) |
0519 (tseg2 << BTR_TSEG2_SHIFT);
0520 reg_brpe = brpe & BRP_EXT_BRPE_MASK;
0521
0522 netdev_info(dev,
0523 "setting BTR=%04x BRPE=%04x\n", reg_btr, reg_brpe);
0524
0525 ctrl_save = priv->read_reg(priv, C_CAN_CTRL_REG);
0526 ctrl_save &= ~CONTROL_INIT;
0527 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_CCE | CONTROL_INIT);
0528 res = c_can_wait_for_ctrl_init(dev, priv, CONTROL_INIT);
0529 if (res)
0530 return res;
0531
0532 priv->write_reg(priv, C_CAN_BTR_REG, reg_btr);
0533 priv->write_reg(priv, C_CAN_BRPEXT_REG, reg_brpe);
0534 priv->write_reg(priv, C_CAN_CTRL_REG, ctrl_save);
0535
0536 return c_can_wait_for_ctrl_init(dev, priv, 0);
0537 }
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547 static void c_can_configure_msg_objects(struct net_device *dev)
0548 {
0549 struct c_can_priv *priv = netdev_priv(dev);
0550 int i;
0551
0552
0553 for (i = priv->msg_obj_rx_first; i <= priv->msg_obj_num; i++)
0554 c_can_inval_msg_object(dev, IF_NAPI, i);
0555
0556
0557 for (i = priv->msg_obj_rx_first; i < priv->msg_obj_rx_last; i++)
0558 c_can_setup_receive_object(dev, IF_NAPI, i, 0, 0, IF_MCONT_RCV);
0559
0560 c_can_setup_receive_object(dev, IF_NAPI, priv->msg_obj_rx_last, 0, 0,
0561 IF_MCONT_RCV_EOB);
0562 }
0563
0564 static int c_can_software_reset(struct net_device *dev)
0565 {
0566 struct c_can_priv *priv = netdev_priv(dev);
0567 int retry = 0;
0568
0569 if (priv->type != BOSCH_D_CAN)
0570 return 0;
0571
0572 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_SWR | CONTROL_INIT);
0573 while (priv->read_reg(priv, C_CAN_CTRL_REG) & CONTROL_SWR) {
0574 msleep(20);
0575 if (retry++ > 100) {
0576 netdev_err(dev, "CCTRL: software reset failed\n");
0577 return -EIO;
0578 }
0579 }
0580
0581 return 0;
0582 }
0583
0584
0585
0586
0587
0588
0589 static int c_can_chip_config(struct net_device *dev)
0590 {
0591 struct c_can_priv *priv = netdev_priv(dev);
0592 struct c_can_tx_ring *tx_ring = &priv->tx;
0593 int err;
0594
0595 err = c_can_software_reset(dev);
0596 if (err)
0597 return err;
0598
0599
0600 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_ENABLE_AR);
0601
0602 if ((priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) &&
0603 (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)) {
0604
0605 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_TEST);
0606 priv->write_reg(priv, C_CAN_TEST_REG, TEST_LBACK | TEST_SILENT);
0607 } else if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) {
0608
0609 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_TEST);
0610 priv->write_reg(priv, C_CAN_TEST_REG, TEST_LBACK);
0611 } else if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) {
0612
0613 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_TEST);
0614 priv->write_reg(priv, C_CAN_TEST_REG, TEST_SILENT);
0615 }
0616
0617
0618 c_can_configure_msg_objects(dev);
0619
0620
0621 priv->write_reg(priv, C_CAN_STS_REG, LEC_UNUSED);
0622
0623
0624 tx_ring->head = 0;
0625 tx_ring->tail = 0;
0626 priv->tx_dir = 0;
0627
0628
0629 return c_can_set_bittiming(dev);
0630 }
0631
0632 static int c_can_start(struct net_device *dev)
0633 {
0634 struct c_can_priv *priv = netdev_priv(dev);
0635 int err;
0636 struct pinctrl *p;
0637
0638
0639 err = c_can_chip_config(dev);
0640 if (err)
0641 return err;
0642
0643
0644 priv->comm_rcv_high = priv->type != BOSCH_D_CAN ?
0645 IF_COMM_RCV_LOW : IF_COMM_RCV_HIGH;
0646
0647 priv->can.state = CAN_STATE_ERROR_ACTIVE;
0648
0649
0650 p = pinctrl_get_select(priv->device, "active");
0651 if (!IS_ERR(p))
0652 pinctrl_put(p);
0653 else
0654 pinctrl_pm_select_default_state(priv->device);
0655
0656 return 0;
0657 }
0658
0659 static void c_can_stop(struct net_device *dev)
0660 {
0661 struct c_can_priv *priv = netdev_priv(dev);
0662
0663 c_can_irq_control(priv, false);
0664
0665
0666 priv->write_reg(priv, C_CAN_CTRL_REG, CONTROL_INIT);
0667
0668
0669 pinctrl_pm_select_sleep_state(dev->dev.parent);
0670 priv->can.state = CAN_STATE_STOPPED;
0671 }
0672
0673 static int c_can_set_mode(struct net_device *dev, enum can_mode mode)
0674 {
0675 struct c_can_priv *priv = netdev_priv(dev);
0676 int err;
0677
0678 switch (mode) {
0679 case CAN_MODE_START:
0680 err = c_can_start(dev);
0681 if (err)
0682 return err;
0683 netif_wake_queue(dev);
0684 c_can_irq_control(priv, true);
0685 break;
0686 default:
0687 return -EOPNOTSUPP;
0688 }
0689
0690 return 0;
0691 }
0692
0693 static int __c_can_get_berr_counter(const struct net_device *dev,
0694 struct can_berr_counter *bec)
0695 {
0696 unsigned int reg_err_counter;
0697 struct c_can_priv *priv = netdev_priv(dev);
0698
0699 reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
0700 bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
0701 ERR_CNT_REC_SHIFT;
0702 bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
0703
0704 return 0;
0705 }
0706
0707 static int c_can_get_berr_counter(const struct net_device *dev,
0708 struct can_berr_counter *bec)
0709 {
0710 struct c_can_priv *priv = netdev_priv(dev);
0711 int err;
0712
0713 c_can_pm_runtime_get_sync(priv);
0714 err = __c_can_get_berr_counter(dev, bec);
0715 c_can_pm_runtime_put_sync(priv);
0716
0717 return err;
0718 }
0719
0720 static void c_can_do_tx(struct net_device *dev)
0721 {
0722 struct c_can_priv *priv = netdev_priv(dev);
0723 struct c_can_tx_ring *tx_ring = &priv->tx;
0724 struct net_device_stats *stats = &dev->stats;
0725 u32 idx, obj, pkts = 0, bytes = 0, pend;
0726 u8 tail;
0727
0728 if (priv->msg_obj_tx_last > 32)
0729 pend = priv->read_reg32(priv, C_CAN_INTPND3_REG);
0730 else
0731 pend = priv->read_reg(priv, C_CAN_INTPND2_REG);
0732
0733 while ((idx = ffs(pend))) {
0734 idx--;
0735 pend &= ~BIT(idx);
0736 obj = idx + priv->msg_obj_tx_first;
0737
0738
0739
0740
0741
0742 c_can_inval_tx_object(dev, IF_NAPI, obj);
0743 bytes += can_get_echo_skb(dev, idx, NULL);
0744 pkts++;
0745 }
0746
0747 if (!pkts)
0748 return;
0749
0750 tx_ring->tail += pkts;
0751 if (c_can_get_tx_free(priv, tx_ring)) {
0752
0753
0754
0755 smp_mb();
0756 netif_wake_queue(priv->dev);
0757 }
0758
0759 stats->tx_bytes += bytes;
0760 stats->tx_packets += pkts;
0761
0762 tail = c_can_get_tx_tail(tx_ring);
0763 if (priv->type == BOSCH_D_CAN && tail == 0) {
0764 u8 head = c_can_get_tx_head(tx_ring);
0765
0766
0767 for (idx = tail; idx < head; idx++) {
0768 obj = idx + priv->msg_obj_tx_first;
0769 c_can_object_put(dev, IF_NAPI, obj, IF_COMM_TXRQST);
0770 }
0771 }
0772 }
0773
0774
0775
0776
0777
0778 static u32 c_can_adjust_pending(u32 pend, u32 rx_mask)
0779 {
0780 u32 weight, lasts;
0781
0782 if (pend == rx_mask)
0783 return pend;
0784
0785
0786
0787
0788 weight = hweight32(pend);
0789 lasts = fls(pend);
0790
0791
0792 if (lasts == weight)
0793 return pend;
0794
0795
0796
0797
0798 for (lasts--; pend & BIT(lasts - 1); lasts--)
0799 ;
0800
0801 return pend & ~GENMASK(lasts - 1, 0);
0802 }
0803
0804 static inline void c_can_rx_object_get(struct net_device *dev,
0805 struct c_can_priv *priv, u32 obj)
0806 {
0807 c_can_object_get(dev, IF_NAPI, obj, priv->comm_rcv_high);
0808 }
0809
0810 static inline void c_can_rx_finalize(struct net_device *dev,
0811 struct c_can_priv *priv, u32 obj)
0812 {
0813 if (priv->type != BOSCH_D_CAN)
0814 c_can_object_get(dev, IF_NAPI, obj, IF_COMM_CLR_NEWDAT);
0815 }
0816
0817 static int c_can_read_objects(struct net_device *dev, struct c_can_priv *priv,
0818 u32 pend, int quota)
0819 {
0820 u32 pkts = 0, ctrl, obj;
0821
0822 while ((obj = ffs(pend)) && quota > 0) {
0823 pend &= ~BIT(obj - 1);
0824
0825 c_can_rx_object_get(dev, priv, obj);
0826 ctrl = priv->read_reg(priv, C_CAN_IFACE(MSGCTRL_REG, IF_NAPI));
0827
0828 if (ctrl & IF_MCONT_MSGLST) {
0829 int n;
0830
0831 n = c_can_handle_lost_msg_obj(dev, IF_NAPI, obj, ctrl);
0832
0833 pkts += n;
0834 quota -= n;
0835 continue;
0836 }
0837
0838
0839
0840
0841
0842 if (!(ctrl & IF_MCONT_NEWDAT))
0843 continue;
0844
0845
0846 c_can_read_msg_object(dev, IF_NAPI, ctrl);
0847
0848 c_can_rx_finalize(dev, priv, obj);
0849
0850 pkts++;
0851 quota--;
0852 }
0853
0854 return pkts;
0855 }
0856
0857 static inline u32 c_can_get_pending(struct c_can_priv *priv)
0858 {
0859 u32 pend;
0860
0861 if (priv->msg_obj_rx_last > 16)
0862 pend = priv->read_reg32(priv, C_CAN_NEWDAT1_REG);
0863 else
0864 pend = priv->read_reg(priv, C_CAN_NEWDAT1_REG);
0865
0866 return pend;
0867 }
0868
0869
0870
0871
0872
0873
0874
0875
0876
0877
0878
0879
0880 static int c_can_do_rx_poll(struct net_device *dev, int quota)
0881 {
0882 struct c_can_priv *priv = netdev_priv(dev);
0883 u32 pkts = 0, pend = 0, toread, n;
0884
0885 while (quota > 0) {
0886 if (!pend) {
0887 pend = c_can_get_pending(priv);
0888 if (!pend)
0889 break;
0890
0891
0892
0893 toread = c_can_adjust_pending(pend,
0894 priv->msg_obj_rx_mask);
0895 } else {
0896 toread = pend;
0897 }
0898
0899 pend &= ~toread;
0900
0901 n = c_can_read_objects(dev, priv, toread, quota);
0902 pkts += n;
0903 quota -= n;
0904 }
0905
0906 return pkts;
0907 }
0908
0909 static int c_can_handle_state_change(struct net_device *dev,
0910 enum c_can_bus_error_types error_type)
0911 {
0912 unsigned int reg_err_counter;
0913 unsigned int rx_err_passive;
0914 struct c_can_priv *priv = netdev_priv(dev);
0915 struct can_frame *cf;
0916 struct sk_buff *skb;
0917 struct can_berr_counter bec;
0918
0919 switch (error_type) {
0920 case C_CAN_NO_ERROR:
0921 priv->can.state = CAN_STATE_ERROR_ACTIVE;
0922 break;
0923 case C_CAN_ERROR_WARNING:
0924
0925 priv->can.can_stats.error_warning++;
0926 priv->can.state = CAN_STATE_ERROR_WARNING;
0927 break;
0928 case C_CAN_ERROR_PASSIVE:
0929
0930 priv->can.can_stats.error_passive++;
0931 priv->can.state = CAN_STATE_ERROR_PASSIVE;
0932 break;
0933 case C_CAN_BUS_OFF:
0934
0935 priv->can.state = CAN_STATE_BUS_OFF;
0936 priv->can.can_stats.bus_off++;
0937 break;
0938 default:
0939 break;
0940 }
0941
0942
0943 skb = alloc_can_err_skb(dev, &cf);
0944 if (unlikely(!skb))
0945 return 0;
0946
0947 __c_can_get_berr_counter(dev, &bec);
0948 reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
0949 rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
0950 ERR_CNT_RP_SHIFT;
0951
0952 switch (error_type) {
0953 case C_CAN_NO_ERROR:
0954 cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
0955 cf->data[1] = CAN_ERR_CRTL_ACTIVE;
0956 cf->data[6] = bec.txerr;
0957 cf->data[7] = bec.rxerr;
0958 break;
0959 case C_CAN_ERROR_WARNING:
0960
0961 cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
0962 cf->data[1] = (bec.txerr > bec.rxerr) ?
0963 CAN_ERR_CRTL_TX_WARNING :
0964 CAN_ERR_CRTL_RX_WARNING;
0965 cf->data[6] = bec.txerr;
0966 cf->data[7] = bec.rxerr;
0967
0968 break;
0969 case C_CAN_ERROR_PASSIVE:
0970
0971 cf->can_id |= CAN_ERR_CRTL | CAN_ERR_CNT;
0972 if (rx_err_passive)
0973 cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
0974 if (bec.txerr > 127)
0975 cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;
0976
0977 cf->data[6] = bec.txerr;
0978 cf->data[7] = bec.rxerr;
0979 break;
0980 case C_CAN_BUS_OFF:
0981
0982 cf->can_id |= CAN_ERR_BUSOFF;
0983 can_bus_off(dev);
0984 break;
0985 default:
0986 break;
0987 }
0988
0989 netif_receive_skb(skb);
0990
0991 return 1;
0992 }
0993
0994 static int c_can_handle_bus_err(struct net_device *dev,
0995 enum c_can_lec_type lec_type)
0996 {
0997 struct c_can_priv *priv = netdev_priv(dev);
0998 struct net_device_stats *stats = &dev->stats;
0999 struct can_frame *cf;
1000 struct sk_buff *skb;
1001
1002
1003
1004
1005
1006 if (lec_type == LEC_UNUSED || lec_type == LEC_NO_ERROR)
1007 return 0;
1008
1009 if (!(priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING))
1010 return 0;
1011
1012
1013 priv->can.can_stats.bus_error++;
1014 stats->rx_errors++;
1015
1016
1017 skb = alloc_can_err_skb(dev, &cf);
1018 if (unlikely(!skb))
1019 return 0;
1020
1021
1022
1023
1024 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
1025
1026 switch (lec_type) {
1027 case LEC_STUFF_ERROR:
1028 netdev_dbg(dev, "stuff error\n");
1029 cf->data[2] |= CAN_ERR_PROT_STUFF;
1030 break;
1031 case LEC_FORM_ERROR:
1032 netdev_dbg(dev, "form error\n");
1033 cf->data[2] |= CAN_ERR_PROT_FORM;
1034 break;
1035 case LEC_ACK_ERROR:
1036 netdev_dbg(dev, "ack error\n");
1037 cf->data[3] = CAN_ERR_PROT_LOC_ACK;
1038 break;
1039 case LEC_BIT1_ERROR:
1040 netdev_dbg(dev, "bit1 error\n");
1041 cf->data[2] |= CAN_ERR_PROT_BIT1;
1042 break;
1043 case LEC_BIT0_ERROR:
1044 netdev_dbg(dev, "bit0 error\n");
1045 cf->data[2] |= CAN_ERR_PROT_BIT0;
1046 break;
1047 case LEC_CRC_ERROR:
1048 netdev_dbg(dev, "CRC error\n");
1049 cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
1050 break;
1051 default:
1052 break;
1053 }
1054
1055 netif_receive_skb(skb);
1056 return 1;
1057 }
1058
1059 static int c_can_poll(struct napi_struct *napi, int quota)
1060 {
1061 struct net_device *dev = napi->dev;
1062 struct c_can_priv *priv = netdev_priv(dev);
1063 u16 curr, last = priv->last_status;
1064 int work_done = 0;
1065
1066
1067 if (atomic_xchg(&priv->sie_pending, 0)) {
1068 priv->last_status = priv->read_reg(priv, C_CAN_STS_REG);
1069 curr = priv->last_status;
1070
1071 if (priv->type != BOSCH_D_CAN)
1072 priv->write_reg(priv, C_CAN_STS_REG, LEC_UNUSED);
1073 } else {
1074
1075 curr = last;
1076 }
1077
1078
1079 if ((curr & STATUS_EWARN) && (!(last & STATUS_EWARN))) {
1080 netdev_dbg(dev, "entered error warning state\n");
1081 work_done += c_can_handle_state_change(dev, C_CAN_ERROR_WARNING);
1082 }
1083
1084 if ((curr & STATUS_EPASS) && (!(last & STATUS_EPASS))) {
1085 netdev_dbg(dev, "entered error passive state\n");
1086 work_done += c_can_handle_state_change(dev, C_CAN_ERROR_PASSIVE);
1087 }
1088
1089 if ((curr & STATUS_BOFF) && (!(last & STATUS_BOFF))) {
1090 netdev_dbg(dev, "entered bus off state\n");
1091 work_done += c_can_handle_state_change(dev, C_CAN_BUS_OFF);
1092 goto end;
1093 }
1094
1095
1096 if ((!(curr & STATUS_BOFF)) && (last & STATUS_BOFF)) {
1097 netdev_dbg(dev, "left bus off state\n");
1098 work_done += c_can_handle_state_change(dev, C_CAN_ERROR_PASSIVE);
1099 }
1100
1101 if ((!(curr & STATUS_EPASS)) && (last & STATUS_EPASS)) {
1102 netdev_dbg(dev, "left error passive state\n");
1103 work_done += c_can_handle_state_change(dev, C_CAN_ERROR_WARNING);
1104 }
1105
1106 if ((!(curr & STATUS_EWARN)) && (last & STATUS_EWARN)) {
1107 netdev_dbg(dev, "left error warning state\n");
1108 work_done += c_can_handle_state_change(dev, C_CAN_NO_ERROR);
1109 }
1110
1111
1112 work_done += c_can_handle_bus_err(dev, curr & LEC_MASK);
1113
1114
1115 work_done += c_can_do_rx_poll(dev, (quota - work_done));
1116 c_can_do_tx(dev);
1117
1118 end:
1119 if (work_done < quota) {
1120 napi_complete_done(napi, work_done);
1121
1122 if (priv->can.state != CAN_STATE_BUS_OFF)
1123 c_can_irq_control(priv, true);
1124 }
1125
1126 return work_done;
1127 }
1128
1129 static irqreturn_t c_can_isr(int irq, void *dev_id)
1130 {
1131 struct net_device *dev = (struct net_device *)dev_id;
1132 struct c_can_priv *priv = netdev_priv(dev);
1133 int reg_int;
1134
1135 reg_int = priv->read_reg(priv, C_CAN_INT_REG);
1136 if (!reg_int)
1137 return IRQ_NONE;
1138
1139
1140 if (reg_int & INT_STS_PENDING)
1141 atomic_set(&priv->sie_pending, 1);
1142
1143
1144 c_can_irq_control(priv, false);
1145 napi_schedule(&priv->napi);
1146
1147 return IRQ_HANDLED;
1148 }
1149
1150 static int c_can_open(struct net_device *dev)
1151 {
1152 int err;
1153 struct c_can_priv *priv = netdev_priv(dev);
1154
1155 c_can_pm_runtime_get_sync(priv);
1156 c_can_reset_ram(priv, true);
1157
1158
1159 err = open_candev(dev);
1160 if (err) {
1161 netdev_err(dev, "failed to open can device\n");
1162 goto exit_open_fail;
1163 }
1164
1165
1166 err = request_irq(dev->irq, &c_can_isr, IRQF_SHARED, dev->name,
1167 dev);
1168 if (err < 0) {
1169 netdev_err(dev, "failed to request interrupt\n");
1170 goto exit_irq_fail;
1171 }
1172
1173
1174 err = c_can_start(dev);
1175 if (err)
1176 goto exit_start_fail;
1177
1178 napi_enable(&priv->napi);
1179
1180 c_can_irq_control(priv, true);
1181 netif_start_queue(dev);
1182
1183 return 0;
1184
1185 exit_start_fail:
1186 free_irq(dev->irq, dev);
1187 exit_irq_fail:
1188 close_candev(dev);
1189 exit_open_fail:
1190 c_can_reset_ram(priv, false);
1191 c_can_pm_runtime_put_sync(priv);
1192 return err;
1193 }
1194
1195 static int c_can_close(struct net_device *dev)
1196 {
1197 struct c_can_priv *priv = netdev_priv(dev);
1198
1199 netif_stop_queue(dev);
1200 napi_disable(&priv->napi);
1201 c_can_stop(dev);
1202 free_irq(dev->irq, dev);
1203 close_candev(dev);
1204
1205 c_can_reset_ram(priv, false);
1206 c_can_pm_runtime_put_sync(priv);
1207
1208 return 0;
1209 }
1210
1211 struct net_device *alloc_c_can_dev(int msg_obj_num)
1212 {
1213 struct net_device *dev;
1214 struct c_can_priv *priv;
1215 int msg_obj_tx_num = msg_obj_num / 2;
1216
1217 dev = alloc_candev(sizeof(*priv), msg_obj_tx_num);
1218 if (!dev)
1219 return NULL;
1220
1221 priv = netdev_priv(dev);
1222 priv->msg_obj_num = msg_obj_num;
1223 priv->msg_obj_rx_num = msg_obj_num - msg_obj_tx_num;
1224 priv->msg_obj_rx_first = 1;
1225 priv->msg_obj_rx_last =
1226 priv->msg_obj_rx_first + priv->msg_obj_rx_num - 1;
1227 priv->msg_obj_rx_mask = GENMASK(priv->msg_obj_rx_num - 1, 0);
1228
1229 priv->msg_obj_tx_num = msg_obj_tx_num;
1230 priv->msg_obj_tx_first = priv->msg_obj_rx_last + 1;
1231 priv->msg_obj_tx_last =
1232 priv->msg_obj_tx_first + priv->msg_obj_tx_num - 1;
1233
1234 priv->tx.head = 0;
1235 priv->tx.tail = 0;
1236 priv->tx.obj_num = msg_obj_tx_num;
1237
1238 netif_napi_add_weight(dev, &priv->napi, c_can_poll,
1239 priv->msg_obj_rx_num);
1240
1241 priv->dev = dev;
1242 priv->can.bittiming_const = &c_can_bittiming_const;
1243 priv->can.do_set_mode = c_can_set_mode;
1244 priv->can.do_get_berr_counter = c_can_get_berr_counter;
1245 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
1246 CAN_CTRLMODE_LISTENONLY |
1247 CAN_CTRLMODE_BERR_REPORTING;
1248
1249 return dev;
1250 }
1251 EXPORT_SYMBOL_GPL(alloc_c_can_dev);
1252
1253 #ifdef CONFIG_PM
1254 int c_can_power_down(struct net_device *dev)
1255 {
1256 u32 val;
1257 unsigned long time_out;
1258 struct c_can_priv *priv = netdev_priv(dev);
1259
1260 if (!(dev->flags & IFF_UP))
1261 return 0;
1262
1263 WARN_ON(priv->type != BOSCH_D_CAN);
1264
1265
1266 val = priv->read_reg(priv, C_CAN_CTRL_EX_REG);
1267 val |= CONTROL_EX_PDR;
1268 priv->write_reg(priv, C_CAN_CTRL_EX_REG, val);
1269
1270
1271 time_out = jiffies + msecs_to_jiffies(INIT_WAIT_MS);
1272 while (!(priv->read_reg(priv, C_CAN_STS_REG) & STATUS_PDA) &&
1273 time_after(time_out, jiffies))
1274 cpu_relax();
1275
1276 if (time_after(jiffies, time_out))
1277 return -ETIMEDOUT;
1278
1279 c_can_stop(dev);
1280
1281 c_can_reset_ram(priv, false);
1282 c_can_pm_runtime_put_sync(priv);
1283
1284 return 0;
1285 }
1286 EXPORT_SYMBOL_GPL(c_can_power_down);
1287
1288 int c_can_power_up(struct net_device *dev)
1289 {
1290 u32 val;
1291 unsigned long time_out;
1292 struct c_can_priv *priv = netdev_priv(dev);
1293 int ret;
1294
1295 if (!(dev->flags & IFF_UP))
1296 return 0;
1297
1298 WARN_ON(priv->type != BOSCH_D_CAN);
1299
1300 c_can_pm_runtime_get_sync(priv);
1301 c_can_reset_ram(priv, true);
1302
1303
1304 val = priv->read_reg(priv, C_CAN_CTRL_EX_REG);
1305 val &= ~CONTROL_EX_PDR;
1306 priv->write_reg(priv, C_CAN_CTRL_EX_REG, val);
1307 val = priv->read_reg(priv, C_CAN_CTRL_REG);
1308 val &= ~CONTROL_INIT;
1309 priv->write_reg(priv, C_CAN_CTRL_REG, val);
1310
1311
1312 time_out = jiffies + msecs_to_jiffies(INIT_WAIT_MS);
1313 while ((priv->read_reg(priv, C_CAN_STS_REG) & STATUS_PDA) &&
1314 time_after(time_out, jiffies))
1315 cpu_relax();
1316
1317 if (time_after(jiffies, time_out)) {
1318 ret = -ETIMEDOUT;
1319 goto err_out;
1320 }
1321
1322 ret = c_can_start(dev);
1323 if (ret)
1324 goto err_out;
1325
1326 c_can_irq_control(priv, true);
1327
1328 return 0;
1329
1330 err_out:
1331 c_can_reset_ram(priv, false);
1332 c_can_pm_runtime_put_sync(priv);
1333
1334 return ret;
1335 }
1336 EXPORT_SYMBOL_GPL(c_can_power_up);
1337 #endif
1338
1339 void free_c_can_dev(struct net_device *dev)
1340 {
1341 struct c_can_priv *priv = netdev_priv(dev);
1342
1343 netif_napi_del(&priv->napi);
1344 free_candev(dev);
1345 }
1346 EXPORT_SYMBOL_GPL(free_c_can_dev);
1347
1348 static const struct net_device_ops c_can_netdev_ops = {
1349 .ndo_open = c_can_open,
1350 .ndo_stop = c_can_close,
1351 .ndo_start_xmit = c_can_start_xmit,
1352 .ndo_change_mtu = can_change_mtu,
1353 };
1354
1355 int register_c_can_dev(struct net_device *dev)
1356 {
1357
1358
1359
1360
1361
1362 pinctrl_pm_select_sleep_state(dev->dev.parent);
1363
1364 dev->flags |= IFF_ECHO;
1365 dev->netdev_ops = &c_can_netdev_ops;
1366 dev->ethtool_ops = &c_can_ethtool_ops;
1367
1368 return register_candev(dev);
1369 }
1370 EXPORT_SYMBOL_GPL(register_c_can_dev);
1371
1372 void unregister_c_can_dev(struct net_device *dev)
1373 {
1374 unregister_candev(dev);
1375 }
1376 EXPORT_SYMBOL_GPL(unregister_c_can_dev);
1377
1378 MODULE_AUTHOR("Bhupesh Sharma <bhupesh.sharma@st.com>");
1379 MODULE_LICENSE("GPL v2");
1380 MODULE_DESCRIPTION("CAN bus driver for Bosch C_CAN controller");