0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <asm/unaligned.h>
0016 #include <linux/bitfield.h>
0017 #include <linux/clk.h>
0018 #include <linux/device.h>
0019 #include <linux/mod_devicetable.h>
0020 #include <linux/module.h>
0021 #include <linux/pm_runtime.h>
0022 #include <linux/property.h>
0023
0024 #include "mcp251xfd.h"
0025
0026 #define DEVICE_NAME "mcp251xfd"
0027
0028 static const struct mcp251xfd_devtype_data mcp251xfd_devtype_data_mcp2517fd = {
0029 .quirks = MCP251XFD_QUIRK_MAB_NO_WARN | MCP251XFD_QUIRK_CRC_REG |
0030 MCP251XFD_QUIRK_CRC_RX | MCP251XFD_QUIRK_CRC_TX |
0031 MCP251XFD_QUIRK_ECC,
0032 .model = MCP251XFD_MODEL_MCP2517FD,
0033 };
0034
0035 static const struct mcp251xfd_devtype_data mcp251xfd_devtype_data_mcp2518fd = {
0036 .quirks = MCP251XFD_QUIRK_CRC_REG | MCP251XFD_QUIRK_CRC_RX |
0037 MCP251XFD_QUIRK_CRC_TX | MCP251XFD_QUIRK_ECC,
0038 .model = MCP251XFD_MODEL_MCP2518FD,
0039 };
0040
0041 static const struct mcp251xfd_devtype_data mcp251xfd_devtype_data_mcp251863 = {
0042 .quirks = MCP251XFD_QUIRK_CRC_REG | MCP251XFD_QUIRK_CRC_RX |
0043 MCP251XFD_QUIRK_CRC_TX | MCP251XFD_QUIRK_ECC,
0044 .model = MCP251XFD_MODEL_MCP251863,
0045 };
0046
0047
0048 static const struct mcp251xfd_devtype_data mcp251xfd_devtype_data_mcp251xfd = {
0049 .quirks = MCP251XFD_QUIRK_CRC_REG | MCP251XFD_QUIRK_CRC_RX |
0050 MCP251XFD_QUIRK_CRC_TX | MCP251XFD_QUIRK_ECC,
0051 .model = MCP251XFD_MODEL_MCP251XFD,
0052 };
0053
0054 static const struct can_bittiming_const mcp251xfd_bittiming_const = {
0055 .name = DEVICE_NAME,
0056 .tseg1_min = 2,
0057 .tseg1_max = 256,
0058 .tseg2_min = 1,
0059 .tseg2_max = 128,
0060 .sjw_max = 128,
0061 .brp_min = 1,
0062 .brp_max = 256,
0063 .brp_inc = 1,
0064 };
0065
0066 static const struct can_bittiming_const mcp251xfd_data_bittiming_const = {
0067 .name = DEVICE_NAME,
0068 .tseg1_min = 1,
0069 .tseg1_max = 32,
0070 .tseg2_min = 1,
0071 .tseg2_max = 16,
0072 .sjw_max = 16,
0073 .brp_min = 1,
0074 .brp_max = 256,
0075 .brp_inc = 1,
0076 };
0077
0078 static const char *__mcp251xfd_get_model_str(enum mcp251xfd_model model)
0079 {
0080 switch (model) {
0081 case MCP251XFD_MODEL_MCP2517FD:
0082 return "MCP2517FD";
0083 case MCP251XFD_MODEL_MCP2518FD:
0084 return "MCP2518FD";
0085 case MCP251XFD_MODEL_MCP251863:
0086 return "MCP251863";
0087 case MCP251XFD_MODEL_MCP251XFD:
0088 return "MCP251xFD";
0089 }
0090
0091 return "<unknown>";
0092 }
0093
0094 static inline const char *
0095 mcp251xfd_get_model_str(const struct mcp251xfd_priv *priv)
0096 {
0097 return __mcp251xfd_get_model_str(priv->devtype_data.model);
0098 }
0099
0100 static const char *mcp251xfd_get_mode_str(const u8 mode)
0101 {
0102 switch (mode) {
0103 case MCP251XFD_REG_CON_MODE_MIXED:
0104 return "Mixed (CAN FD/CAN 2.0)";
0105 case MCP251XFD_REG_CON_MODE_SLEEP:
0106 return "Sleep";
0107 case MCP251XFD_REG_CON_MODE_INT_LOOPBACK:
0108 return "Internal Loopback";
0109 case MCP251XFD_REG_CON_MODE_LISTENONLY:
0110 return "Listen Only";
0111 case MCP251XFD_REG_CON_MODE_CONFIG:
0112 return "Configuration";
0113 case MCP251XFD_REG_CON_MODE_EXT_LOOPBACK:
0114 return "External Loopback";
0115 case MCP251XFD_REG_CON_MODE_CAN2_0:
0116 return "CAN 2.0";
0117 case MCP251XFD_REG_CON_MODE_RESTRICTED:
0118 return "Restricted Operation";
0119 }
0120
0121 return "<unknown>";
0122 }
0123
0124 static const char *
0125 mcp251xfd_get_osc_str(const u32 osc, const u32 osc_reference)
0126 {
0127 switch (~osc & osc_reference &
0128 (MCP251XFD_REG_OSC_OSCRDY | MCP251XFD_REG_OSC_PLLRDY)) {
0129 case MCP251XFD_REG_OSC_PLLRDY:
0130 return "PLL";
0131 case MCP251XFD_REG_OSC_OSCRDY:
0132 return "Oscillator";
0133 case MCP251XFD_REG_OSC_PLLRDY | MCP251XFD_REG_OSC_OSCRDY:
0134 return "Oscillator/PLL";
0135 }
0136
0137 return "<unknown>";
0138 }
0139
0140 static inline int mcp251xfd_vdd_enable(const struct mcp251xfd_priv *priv)
0141 {
0142 if (!priv->reg_vdd)
0143 return 0;
0144
0145 return regulator_enable(priv->reg_vdd);
0146 }
0147
0148 static inline int mcp251xfd_vdd_disable(const struct mcp251xfd_priv *priv)
0149 {
0150 if (!priv->reg_vdd)
0151 return 0;
0152
0153 return regulator_disable(priv->reg_vdd);
0154 }
0155
0156 static inline int
0157 mcp251xfd_transceiver_enable(const struct mcp251xfd_priv *priv)
0158 {
0159 if (!priv->reg_xceiver)
0160 return 0;
0161
0162 return regulator_enable(priv->reg_xceiver);
0163 }
0164
0165 static inline int
0166 mcp251xfd_transceiver_disable(const struct mcp251xfd_priv *priv)
0167 {
0168 if (!priv->reg_xceiver)
0169 return 0;
0170
0171 return regulator_disable(priv->reg_xceiver);
0172 }
0173
0174 static int mcp251xfd_clks_and_vdd_enable(const struct mcp251xfd_priv *priv)
0175 {
0176 int err;
0177
0178 err = clk_prepare_enable(priv->clk);
0179 if (err)
0180 return err;
0181
0182 err = mcp251xfd_vdd_enable(priv);
0183 if (err)
0184 clk_disable_unprepare(priv->clk);
0185
0186
0187 usleep_range(MCP251XFD_OSC_STAB_SLEEP_US,
0188 2 * MCP251XFD_OSC_STAB_SLEEP_US);
0189
0190 return err;
0191 }
0192
0193 static int mcp251xfd_clks_and_vdd_disable(const struct mcp251xfd_priv *priv)
0194 {
0195 int err;
0196
0197 err = mcp251xfd_vdd_disable(priv);
0198 if (err)
0199 return err;
0200
0201 clk_disable_unprepare(priv->clk);
0202
0203 return 0;
0204 }
0205
0206 static inline bool mcp251xfd_reg_invalid(u32 reg)
0207 {
0208 return reg == 0x0 || reg == 0xffffffff;
0209 }
0210
0211 static inline int
0212 mcp251xfd_chip_get_mode(const struct mcp251xfd_priv *priv, u8 *mode)
0213 {
0214 u32 val;
0215 int err;
0216
0217 err = regmap_read(priv->map_reg, MCP251XFD_REG_CON, &val);
0218 if (err)
0219 return err;
0220
0221 *mode = FIELD_GET(MCP251XFD_REG_CON_OPMOD_MASK, val);
0222
0223 return 0;
0224 }
0225
0226 static int
0227 __mcp251xfd_chip_set_mode(const struct mcp251xfd_priv *priv,
0228 const u8 mode_req, bool nowait)
0229 {
0230 u32 con = 0, con_reqop, osc = 0;
0231 u8 mode;
0232 int err;
0233
0234 con_reqop = FIELD_PREP(MCP251XFD_REG_CON_REQOP_MASK, mode_req);
0235 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_CON,
0236 MCP251XFD_REG_CON_REQOP_MASK, con_reqop);
0237 if (err == -EBADMSG) {
0238 netdev_err(priv->ndev,
0239 "Failed to set Requested Operation Mode.\n");
0240
0241 return -ENODEV;
0242 } else if (err) {
0243 return err;
0244 }
0245
0246 if (mode_req == MCP251XFD_REG_CON_MODE_SLEEP || nowait)
0247 return 0;
0248
0249 err = regmap_read_poll_timeout(priv->map_reg, MCP251XFD_REG_CON, con,
0250 !mcp251xfd_reg_invalid(con) &&
0251 FIELD_GET(MCP251XFD_REG_CON_OPMOD_MASK,
0252 con) == mode_req,
0253 MCP251XFD_POLL_SLEEP_US,
0254 MCP251XFD_POLL_TIMEOUT_US);
0255 if (err != -ETIMEDOUT && err != -EBADMSG)
0256 return err;
0257
0258
0259
0260
0261 regmap_read(priv->map_reg, MCP251XFD_REG_OSC, &osc);
0262
0263 if (mcp251xfd_reg_invalid(con)) {
0264 netdev_err(priv->ndev,
0265 "Failed to read CAN Control Register (con=0x%08x, osc=0x%08x).\n",
0266 con, osc);
0267
0268 return -ENODEV;
0269 }
0270
0271 mode = FIELD_GET(MCP251XFD_REG_CON_OPMOD_MASK, con);
0272 netdev_err(priv->ndev,
0273 "Controller failed to enter mode %s Mode (%u) and stays in %s Mode (%u) (con=0x%08x, osc=0x%08x).\n",
0274 mcp251xfd_get_mode_str(mode_req), mode_req,
0275 mcp251xfd_get_mode_str(mode), mode,
0276 con, osc);
0277
0278 return -ETIMEDOUT;
0279 }
0280
0281 static inline int
0282 mcp251xfd_chip_set_mode(const struct mcp251xfd_priv *priv,
0283 const u8 mode_req)
0284 {
0285 return __mcp251xfd_chip_set_mode(priv, mode_req, false);
0286 }
0287
0288 static inline int __maybe_unused
0289 mcp251xfd_chip_set_mode_nowait(const struct mcp251xfd_priv *priv,
0290 const u8 mode_req)
0291 {
0292 return __mcp251xfd_chip_set_mode(priv, mode_req, true);
0293 }
0294
0295 static int
0296 mcp251xfd_chip_wait_for_osc_ready(const struct mcp251xfd_priv *priv,
0297 u32 osc_reference, u32 osc_mask)
0298 {
0299 u32 osc;
0300 int err;
0301
0302 err = regmap_read_poll_timeout(priv->map_reg, MCP251XFD_REG_OSC, osc,
0303 !mcp251xfd_reg_invalid(osc) &&
0304 (osc & osc_mask) == osc_reference,
0305 MCP251XFD_OSC_STAB_SLEEP_US,
0306 MCP251XFD_OSC_STAB_TIMEOUT_US);
0307 if (err != -ETIMEDOUT)
0308 return err;
0309
0310 if (mcp251xfd_reg_invalid(osc)) {
0311 netdev_err(priv->ndev,
0312 "Failed to read Oscillator Configuration Register (osc=0x%08x).\n",
0313 osc);
0314 return -ENODEV;
0315 }
0316
0317 netdev_err(priv->ndev,
0318 "Timeout waiting for %s ready (osc=0x%08x, osc_reference=0x%08x, osc_mask=0x%08x).\n",
0319 mcp251xfd_get_osc_str(osc, osc_reference),
0320 osc, osc_reference, osc_mask);
0321
0322 return -ETIMEDOUT;
0323 }
0324
0325 static int mcp251xfd_chip_wake(const struct mcp251xfd_priv *priv)
0326 {
0327 u32 osc, osc_reference, osc_mask;
0328 int err;
0329
0330
0331
0332
0333
0334
0335
0336 osc = FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK,
0337 MCP251XFD_REG_OSC_CLKODIV_10);
0338
0339
0340
0341
0342
0343 osc_reference = MCP251XFD_REG_OSC_OSCRDY;
0344 osc_mask = MCP251XFD_REG_OSC_OSCRDY;
0345
0346
0347
0348
0349
0350 err = regmap_write(priv->map_reg, MCP251XFD_REG_OSC, osc);
0351 if (err)
0352 return err;
0353
0354
0355
0356
0357
0358 return mcp251xfd_chip_wait_for_osc_ready(priv, osc_reference, osc_mask);
0359 }
0360
0361 static inline int mcp251xfd_chip_sleep(const struct mcp251xfd_priv *priv)
0362 {
0363 if (priv->pll_enable) {
0364 u32 osc;
0365 int err;
0366
0367
0368 osc = FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK,
0369 MCP251XFD_REG_OSC_CLKODIV_10);
0370 err = regmap_write(priv->map_reg, MCP251XFD_REG_OSC, osc);
0371 if (err)
0372 netdev_err(priv->ndev,
0373 "Failed to disable PLL.\n");
0374
0375 priv->spi->max_speed_hz = priv->spi_max_speed_hz_slow;
0376 }
0377
0378 return mcp251xfd_chip_set_mode(priv, MCP251XFD_REG_CON_MODE_SLEEP);
0379 }
0380
0381 static int mcp251xfd_chip_softreset_do(const struct mcp251xfd_priv *priv)
0382 {
0383 const __be16 cmd = mcp251xfd_cmd_reset();
0384 int err;
0385
0386
0387
0388
0389 err = mcp251xfd_chip_wake(priv);
0390 if (err)
0391 return err;
0392
0393 err = mcp251xfd_chip_set_mode(priv, MCP251XFD_REG_CON_MODE_CONFIG);
0394 if (err)
0395 return err;
0396
0397
0398 return spi_write_then_read(priv->spi, &cmd, sizeof(cmd), NULL, 0);
0399 }
0400
0401 static int mcp251xfd_chip_softreset_check(const struct mcp251xfd_priv *priv)
0402 {
0403 u32 osc_reference, osc_mask;
0404 u8 mode;
0405 int err;
0406
0407
0408
0409
0410 osc_reference = MCP251XFD_REG_OSC_OSCRDY |
0411 FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK,
0412 MCP251XFD_REG_OSC_CLKODIV_10);
0413 osc_mask = osc_reference | MCP251XFD_REG_OSC_PLLRDY;
0414 err = mcp251xfd_chip_wait_for_osc_ready(priv, osc_reference, osc_mask);
0415 if (err)
0416 return err;
0417
0418 err = mcp251xfd_chip_get_mode(priv, &mode);
0419 if (err)
0420 return err;
0421
0422 if (mode != MCP251XFD_REG_CON_MODE_CONFIG) {
0423 netdev_info(priv->ndev,
0424 "Controller not in Config Mode after reset, but in %s Mode (%u).\n",
0425 mcp251xfd_get_mode_str(mode), mode);
0426 return -ETIMEDOUT;
0427 }
0428
0429 return 0;
0430 }
0431
0432 static int mcp251xfd_chip_softreset(const struct mcp251xfd_priv *priv)
0433 {
0434 int err, i;
0435
0436 for (i = 0; i < MCP251XFD_SOFTRESET_RETRIES_MAX; i++) {
0437 if (i)
0438 netdev_info(priv->ndev,
0439 "Retrying to reset controller.\n");
0440
0441 err = mcp251xfd_chip_softreset_do(priv);
0442 if (err == -ETIMEDOUT)
0443 continue;
0444 if (err)
0445 return err;
0446
0447 err = mcp251xfd_chip_softreset_check(priv);
0448 if (err == -ETIMEDOUT)
0449 continue;
0450 if (err)
0451 return err;
0452
0453 return 0;
0454 }
0455
0456 return err;
0457 }
0458
0459 static int mcp251xfd_chip_clock_init(const struct mcp251xfd_priv *priv)
0460 {
0461 u32 osc, osc_reference, osc_mask;
0462 int err;
0463
0464
0465
0466
0467
0468 osc = MCP251XFD_REG_OSC_LPMEN |
0469 FIELD_PREP(MCP251XFD_REG_OSC_CLKODIV_MASK,
0470 MCP251XFD_REG_OSC_CLKODIV_10);
0471 osc_reference = MCP251XFD_REG_OSC_OSCRDY;
0472 osc_mask = MCP251XFD_REG_OSC_OSCRDY | MCP251XFD_REG_OSC_PLLRDY;
0473
0474 if (priv->pll_enable) {
0475 osc |= MCP251XFD_REG_OSC_PLLEN;
0476 osc_reference |= MCP251XFD_REG_OSC_PLLRDY;
0477 }
0478
0479 err = regmap_write(priv->map_reg, MCP251XFD_REG_OSC, osc);
0480 if (err)
0481 return err;
0482
0483 err = mcp251xfd_chip_wait_for_osc_ready(priv, osc_reference, osc_mask);
0484 if (err)
0485 return err;
0486
0487 priv->spi->max_speed_hz = priv->spi_max_speed_hz_fast;
0488
0489 return 0;
0490 }
0491
0492 static int mcp251xfd_chip_timestamp_init(const struct mcp251xfd_priv *priv)
0493 {
0494
0495
0496
0497
0498
0499 return regmap_write(priv->map_reg, MCP251XFD_REG_TSCON,
0500 MCP251XFD_REG_TSCON_TBCEN);
0501 }
0502
0503 static int mcp251xfd_set_bittiming(const struct mcp251xfd_priv *priv)
0504 {
0505 const struct can_bittiming *bt = &priv->can.bittiming;
0506 const struct can_bittiming *dbt = &priv->can.data_bittiming;
0507 u32 val = 0;
0508 s8 tdco;
0509 int err;
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526
0527 val = FIELD_PREP(MCP251XFD_REG_CON_REQOP_MASK,
0528 MCP251XFD_REG_CON_MODE_CONFIG) |
0529 MCP251XFD_REG_CON_STEF |
0530 MCP251XFD_REG_CON_ESIGM |
0531 MCP251XFD_REG_CON_RTXAT |
0532 FIELD_PREP(MCP251XFD_REG_CON_WFT_MASK,
0533 MCP251XFD_REG_CON_WFT_T11FILTER) |
0534 MCP251XFD_REG_CON_WAKFIL |
0535 MCP251XFD_REG_CON_PXEDIS;
0536
0537 if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD_NON_ISO))
0538 val |= MCP251XFD_REG_CON_ISOCRCEN;
0539
0540 err = regmap_write(priv->map_reg, MCP251XFD_REG_CON, val);
0541 if (err)
0542 return err;
0543
0544
0545 val = FIELD_PREP(MCP251XFD_REG_NBTCFG_BRP_MASK, bt->brp - 1) |
0546 FIELD_PREP(MCP251XFD_REG_NBTCFG_TSEG1_MASK,
0547 bt->prop_seg + bt->phase_seg1 - 1) |
0548 FIELD_PREP(MCP251XFD_REG_NBTCFG_TSEG2_MASK,
0549 bt->phase_seg2 - 1) |
0550 FIELD_PREP(MCP251XFD_REG_NBTCFG_SJW_MASK, bt->sjw - 1);
0551
0552 err = regmap_write(priv->map_reg, MCP251XFD_REG_NBTCFG, val);
0553 if (err)
0554 return err;
0555
0556 if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD))
0557 return 0;
0558
0559
0560 val = FIELD_PREP(MCP251XFD_REG_DBTCFG_BRP_MASK, dbt->brp - 1) |
0561 FIELD_PREP(MCP251XFD_REG_DBTCFG_TSEG1_MASK,
0562 dbt->prop_seg + dbt->phase_seg1 - 1) |
0563 FIELD_PREP(MCP251XFD_REG_DBTCFG_TSEG2_MASK,
0564 dbt->phase_seg2 - 1) |
0565 FIELD_PREP(MCP251XFD_REG_DBTCFG_SJW_MASK, dbt->sjw - 1);
0566
0567 err = regmap_write(priv->map_reg, MCP251XFD_REG_DBTCFG, val);
0568 if (err)
0569 return err;
0570
0571
0572 tdco = clamp_t(int, dbt->brp * (dbt->prop_seg + dbt->phase_seg1),
0573 -64, 63);
0574 val = FIELD_PREP(MCP251XFD_REG_TDC_TDCMOD_MASK,
0575 MCP251XFD_REG_TDC_TDCMOD_AUTO) |
0576 FIELD_PREP(MCP251XFD_REG_TDC_TDCO_MASK, tdco);
0577
0578 return regmap_write(priv->map_reg, MCP251XFD_REG_TDC, val);
0579 }
0580
0581 static int mcp251xfd_chip_rx_int_enable(const struct mcp251xfd_priv *priv)
0582 {
0583 u32 val;
0584
0585 if (!priv->rx_int)
0586 return 0;
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597 val = MCP251XFD_REG_IOCON_PM0 | MCP251XFD_REG_IOCON_TRIS1 |
0598 MCP251XFD_REG_IOCON_TRIS0;
0599 return regmap_write(priv->map_reg, MCP251XFD_REG_IOCON, val);
0600 }
0601
0602 static int mcp251xfd_chip_rx_int_disable(const struct mcp251xfd_priv *priv)
0603 {
0604 u32 val;
0605
0606 if (!priv->rx_int)
0607 return 0;
0608
0609
0610
0611
0612
0613 val = MCP251XFD_REG_IOCON_PM1 | MCP251XFD_REG_IOCON_PM0 |
0614 MCP251XFD_REG_IOCON_TRIS1 | MCP251XFD_REG_IOCON_TRIS0;
0615 return regmap_write(priv->map_reg, MCP251XFD_REG_IOCON, val);
0616 }
0617
0618 static int mcp251xfd_chip_ecc_init(struct mcp251xfd_priv *priv)
0619 {
0620 struct mcp251xfd_ecc *ecc = &priv->ecc;
0621 void *ram;
0622 u32 val = 0;
0623 int err;
0624
0625 ecc->ecc_stat = 0;
0626
0627 if (priv->devtype_data.quirks & MCP251XFD_QUIRK_ECC)
0628 val = MCP251XFD_REG_ECCCON_ECCEN;
0629
0630 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_ECCCON,
0631 MCP251XFD_REG_ECCCON_ECCEN, val);
0632 if (err)
0633 return err;
0634
0635 ram = kzalloc(MCP251XFD_RAM_SIZE, GFP_KERNEL);
0636 if (!ram)
0637 return -ENOMEM;
0638
0639 err = regmap_raw_write(priv->map_reg, MCP251XFD_RAM_START, ram,
0640 MCP251XFD_RAM_SIZE);
0641 kfree(ram);
0642
0643 return err;
0644 }
0645
0646 static u8 mcp251xfd_get_normal_mode(const struct mcp251xfd_priv *priv)
0647 {
0648 u8 mode;
0649
0650 if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK)
0651 mode = MCP251XFD_REG_CON_MODE_INT_LOOPBACK;
0652 else if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY)
0653 mode = MCP251XFD_REG_CON_MODE_LISTENONLY;
0654 else if (priv->can.ctrlmode & CAN_CTRLMODE_FD)
0655 mode = MCP251XFD_REG_CON_MODE_MIXED;
0656 else
0657 mode = MCP251XFD_REG_CON_MODE_CAN2_0;
0658
0659 return mode;
0660 }
0661
0662 static int
0663 __mcp251xfd_chip_set_normal_mode(const struct mcp251xfd_priv *priv,
0664 bool nowait)
0665 {
0666 u8 mode;
0667
0668 mode = mcp251xfd_get_normal_mode(priv);
0669
0670 return __mcp251xfd_chip_set_mode(priv, mode, nowait);
0671 }
0672
0673 static inline int
0674 mcp251xfd_chip_set_normal_mode(const struct mcp251xfd_priv *priv)
0675 {
0676 return __mcp251xfd_chip_set_normal_mode(priv, false);
0677 }
0678
0679 static inline int
0680 mcp251xfd_chip_set_normal_mode_nowait(const struct mcp251xfd_priv *priv)
0681 {
0682 return __mcp251xfd_chip_set_normal_mode(priv, true);
0683 }
0684
0685 static int mcp251xfd_chip_interrupts_enable(const struct mcp251xfd_priv *priv)
0686 {
0687 u32 val;
0688 int err;
0689
0690 val = MCP251XFD_REG_CRC_FERRIE | MCP251XFD_REG_CRC_CRCERRIE;
0691 err = regmap_write(priv->map_reg, MCP251XFD_REG_CRC, val);
0692 if (err)
0693 return err;
0694
0695 val = MCP251XFD_REG_ECCCON_DEDIE | MCP251XFD_REG_ECCCON_SECIE;
0696 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_ECCCON, val, val);
0697 if (err)
0698 return err;
0699
0700 val = MCP251XFD_REG_INT_CERRIE |
0701 MCP251XFD_REG_INT_SERRIE |
0702 MCP251XFD_REG_INT_RXOVIE |
0703 MCP251XFD_REG_INT_TXATIE |
0704 MCP251XFD_REG_INT_SPICRCIE |
0705 MCP251XFD_REG_INT_ECCIE |
0706 MCP251XFD_REG_INT_TEFIE |
0707 MCP251XFD_REG_INT_MODIE |
0708 MCP251XFD_REG_INT_RXIE;
0709
0710 if (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
0711 val |= MCP251XFD_REG_INT_IVMIE;
0712
0713 return regmap_write(priv->map_reg, MCP251XFD_REG_INT, val);
0714 }
0715
0716 static int mcp251xfd_chip_interrupts_disable(const struct mcp251xfd_priv *priv)
0717 {
0718 int err;
0719 u32 mask;
0720
0721 err = regmap_write(priv->map_reg, MCP251XFD_REG_INT, 0);
0722 if (err)
0723 return err;
0724
0725 mask = MCP251XFD_REG_ECCCON_DEDIE | MCP251XFD_REG_ECCCON_SECIE;
0726 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_ECCCON,
0727 mask, 0x0);
0728 if (err)
0729 return err;
0730
0731 return regmap_write(priv->map_reg, MCP251XFD_REG_CRC, 0);
0732 }
0733
0734 static void mcp251xfd_chip_stop(struct mcp251xfd_priv *priv,
0735 const enum can_state state)
0736 {
0737 priv->can.state = state;
0738
0739 mcp251xfd_chip_interrupts_disable(priv);
0740 mcp251xfd_chip_rx_int_disable(priv);
0741 mcp251xfd_chip_sleep(priv);
0742 }
0743
0744 static int mcp251xfd_chip_start(struct mcp251xfd_priv *priv)
0745 {
0746 int err;
0747
0748 err = mcp251xfd_chip_softreset(priv);
0749 if (err)
0750 goto out_chip_stop;
0751
0752 err = mcp251xfd_chip_clock_init(priv);
0753 if (err)
0754 goto out_chip_stop;
0755
0756 err = mcp251xfd_chip_timestamp_init(priv);
0757 if (err)
0758 goto out_chip_stop;
0759
0760 err = mcp251xfd_set_bittiming(priv);
0761 if (err)
0762 goto out_chip_stop;
0763
0764 err = mcp251xfd_chip_rx_int_enable(priv);
0765 if (err)
0766 goto out_chip_stop;
0767
0768 err = mcp251xfd_chip_ecc_init(priv);
0769 if (err)
0770 goto out_chip_stop;
0771
0772 err = mcp251xfd_ring_init(priv);
0773 if (err)
0774 goto out_chip_stop;
0775
0776 err = mcp251xfd_chip_fifo_init(priv);
0777 if (err)
0778 goto out_chip_stop;
0779
0780 priv->can.state = CAN_STATE_ERROR_ACTIVE;
0781
0782 err = mcp251xfd_chip_set_normal_mode(priv);
0783 if (err)
0784 goto out_chip_stop;
0785
0786 return 0;
0787
0788 out_chip_stop:
0789 mcp251xfd_dump(priv);
0790 mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED);
0791
0792 return err;
0793 }
0794
0795 static int mcp251xfd_set_mode(struct net_device *ndev, enum can_mode mode)
0796 {
0797 struct mcp251xfd_priv *priv = netdev_priv(ndev);
0798 int err;
0799
0800 switch (mode) {
0801 case CAN_MODE_START:
0802 err = mcp251xfd_chip_start(priv);
0803 if (err)
0804 return err;
0805
0806 err = mcp251xfd_chip_interrupts_enable(priv);
0807 if (err) {
0808 mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED);
0809 return err;
0810 }
0811
0812 netif_wake_queue(ndev);
0813 break;
0814
0815 default:
0816 return -EOPNOTSUPP;
0817 }
0818
0819 return 0;
0820 }
0821
0822 static int __mcp251xfd_get_berr_counter(const struct net_device *ndev,
0823 struct can_berr_counter *bec)
0824 {
0825 const struct mcp251xfd_priv *priv = netdev_priv(ndev);
0826 u32 trec;
0827 int err;
0828
0829 err = regmap_read(priv->map_reg, MCP251XFD_REG_TREC, &trec);
0830 if (err)
0831 return err;
0832
0833 if (trec & MCP251XFD_REG_TREC_TXBO)
0834 bec->txerr = 256;
0835 else
0836 bec->txerr = FIELD_GET(MCP251XFD_REG_TREC_TEC_MASK, trec);
0837 bec->rxerr = FIELD_GET(MCP251XFD_REG_TREC_REC_MASK, trec);
0838
0839 return 0;
0840 }
0841
0842 static int mcp251xfd_get_berr_counter(const struct net_device *ndev,
0843 struct can_berr_counter *bec)
0844 {
0845 const struct mcp251xfd_priv *priv = netdev_priv(ndev);
0846
0847
0848 if (!(ndev->flags & IFF_UP))
0849 return 0;
0850
0851
0852
0853
0854 if (priv->can.state == CAN_STATE_BUS_OFF) {
0855 *bec = priv->bec;
0856 return 0;
0857 }
0858
0859 return __mcp251xfd_get_berr_counter(ndev, bec);
0860 }
0861
0862 static struct sk_buff *
0863 mcp251xfd_alloc_can_err_skb(struct mcp251xfd_priv *priv,
0864 struct can_frame **cf, u32 *timestamp)
0865 {
0866 struct sk_buff *skb;
0867 int err;
0868
0869 err = mcp251xfd_get_timestamp(priv, timestamp);
0870 if (err)
0871 return NULL;
0872
0873 skb = alloc_can_err_skb(priv->ndev, cf);
0874 if (skb)
0875 mcp251xfd_skb_set_timestamp(priv, skb, *timestamp);
0876
0877 return skb;
0878 }
0879
0880 static int mcp251xfd_handle_rxovif(struct mcp251xfd_priv *priv)
0881 {
0882 struct net_device_stats *stats = &priv->ndev->stats;
0883 struct mcp251xfd_rx_ring *ring;
0884 struct sk_buff *skb;
0885 struct can_frame *cf;
0886 u32 timestamp, rxovif;
0887 int err, i;
0888
0889 stats->rx_over_errors++;
0890 stats->rx_errors++;
0891
0892 err = regmap_read(priv->map_reg, MCP251XFD_REG_RXOVIF, &rxovif);
0893 if (err)
0894 return err;
0895
0896 mcp251xfd_for_each_rx_ring(priv, ring, i) {
0897 if (!(rxovif & BIT(ring->fifo_nr)))
0898 continue;
0899
0900
0901 if (priv->regs_status.intf & MCP251XFD_REG_INT_SERRIF) {
0902 if (net_ratelimit())
0903 netdev_dbg(priv->ndev,
0904 "RX-%d: MAB overflow detected.\n",
0905 ring->nr);
0906 } else {
0907 if (net_ratelimit())
0908 netdev_dbg(priv->ndev,
0909 "RX-%d: FIFO overflow.\n",
0910 ring->nr);
0911 }
0912
0913 err = regmap_update_bits(priv->map_reg,
0914 MCP251XFD_REG_FIFOSTA(ring->fifo_nr),
0915 MCP251XFD_REG_FIFOSTA_RXOVIF,
0916 0x0);
0917 if (err)
0918 return err;
0919 }
0920
0921 skb = mcp251xfd_alloc_can_err_skb(priv, &cf, ×tamp);
0922 if (!skb)
0923 return 0;
0924
0925 cf->can_id |= CAN_ERR_CRTL;
0926 cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW;
0927
0928 err = can_rx_offload_queue_timestamp(&priv->offload, skb, timestamp);
0929 if (err)
0930 stats->rx_fifo_errors++;
0931
0932 return 0;
0933 }
0934
0935 static int mcp251xfd_handle_txatif(struct mcp251xfd_priv *priv)
0936 {
0937 netdev_info(priv->ndev, "%s\n", __func__);
0938
0939 return 0;
0940 }
0941
0942 static int mcp251xfd_handle_ivmif(struct mcp251xfd_priv *priv)
0943 {
0944 struct net_device_stats *stats = &priv->ndev->stats;
0945 u32 bdiag1, timestamp;
0946 struct sk_buff *skb;
0947 struct can_frame *cf = NULL;
0948 int err;
0949
0950 err = mcp251xfd_get_timestamp(priv, ×tamp);
0951 if (err)
0952 return err;
0953
0954 err = regmap_read(priv->map_reg, MCP251XFD_REG_BDIAG1, &bdiag1);
0955 if (err)
0956 return err;
0957
0958
0959
0960
0961 err = regmap_write(priv->map_reg, MCP251XFD_REG_BDIAG1, 0x0);
0962 if (err)
0963 return err;
0964
0965 priv->can.can_stats.bus_error++;
0966
0967 skb = alloc_can_err_skb(priv->ndev, &cf);
0968 if (cf)
0969 cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
0970
0971
0972 if (WARN_ON(bdiag1 & MCP251XFD_REG_BDIAG1_DLCMM))
0973 netdev_err(priv->ndev,
0974 "recv'd DLC is larger than PLSIZE of FIFO element.");
0975
0976
0977 if (bdiag1 & (MCP251XFD_REG_BDIAG1_DCRCERR |
0978 MCP251XFD_REG_BDIAG1_NCRCERR)) {
0979 netdev_dbg(priv->ndev, "CRC error\n");
0980
0981 stats->rx_errors++;
0982 if (cf)
0983 cf->data[3] |= CAN_ERR_PROT_LOC_CRC_SEQ;
0984 }
0985 if (bdiag1 & (MCP251XFD_REG_BDIAG1_DSTUFERR |
0986 MCP251XFD_REG_BDIAG1_NSTUFERR)) {
0987 netdev_dbg(priv->ndev, "Stuff error\n");
0988
0989 stats->rx_errors++;
0990 if (cf)
0991 cf->data[2] |= CAN_ERR_PROT_STUFF;
0992 }
0993 if (bdiag1 & (MCP251XFD_REG_BDIAG1_DFORMERR |
0994 MCP251XFD_REG_BDIAG1_NFORMERR)) {
0995 netdev_dbg(priv->ndev, "Format error\n");
0996
0997 stats->rx_errors++;
0998 if (cf)
0999 cf->data[2] |= CAN_ERR_PROT_FORM;
1000 }
1001
1002
1003 if (bdiag1 & MCP251XFD_REG_BDIAG1_NACKERR) {
1004 netdev_dbg(priv->ndev, "NACK error\n");
1005
1006 stats->tx_errors++;
1007 if (cf) {
1008 cf->can_id |= CAN_ERR_ACK;
1009 cf->data[2] |= CAN_ERR_PROT_TX;
1010 }
1011 }
1012 if (bdiag1 & (MCP251XFD_REG_BDIAG1_DBIT1ERR |
1013 MCP251XFD_REG_BDIAG1_NBIT1ERR)) {
1014 netdev_dbg(priv->ndev, "Bit1 error\n");
1015
1016 stats->tx_errors++;
1017 if (cf)
1018 cf->data[2] |= CAN_ERR_PROT_TX | CAN_ERR_PROT_BIT1;
1019 }
1020 if (bdiag1 & (MCP251XFD_REG_BDIAG1_DBIT0ERR |
1021 MCP251XFD_REG_BDIAG1_NBIT0ERR)) {
1022 netdev_dbg(priv->ndev, "Bit0 error\n");
1023
1024 stats->tx_errors++;
1025 if (cf)
1026 cf->data[2] |= CAN_ERR_PROT_TX | CAN_ERR_PROT_BIT0;
1027 }
1028
1029 if (!cf)
1030 return 0;
1031
1032 mcp251xfd_skb_set_timestamp(priv, skb, timestamp);
1033 err = can_rx_offload_queue_timestamp(&priv->offload, skb, timestamp);
1034 if (err)
1035 stats->rx_fifo_errors++;
1036
1037 return 0;
1038 }
1039
1040 static int mcp251xfd_handle_cerrif(struct mcp251xfd_priv *priv)
1041 {
1042 struct net_device_stats *stats = &priv->ndev->stats;
1043 struct sk_buff *skb;
1044 struct can_frame *cf = NULL;
1045 enum can_state new_state, rx_state, tx_state;
1046 u32 trec, timestamp;
1047 int err;
1048
1049 err = regmap_read(priv->map_reg, MCP251XFD_REG_TREC, &trec);
1050 if (err)
1051 return err;
1052
1053 if (trec & MCP251XFD_REG_TREC_TXBO)
1054 tx_state = CAN_STATE_BUS_OFF;
1055 else if (trec & MCP251XFD_REG_TREC_TXBP)
1056 tx_state = CAN_STATE_ERROR_PASSIVE;
1057 else if (trec & MCP251XFD_REG_TREC_TXWARN)
1058 tx_state = CAN_STATE_ERROR_WARNING;
1059 else
1060 tx_state = CAN_STATE_ERROR_ACTIVE;
1061
1062 if (trec & MCP251XFD_REG_TREC_RXBP)
1063 rx_state = CAN_STATE_ERROR_PASSIVE;
1064 else if (trec & MCP251XFD_REG_TREC_RXWARN)
1065 rx_state = CAN_STATE_ERROR_WARNING;
1066 else
1067 rx_state = CAN_STATE_ERROR_ACTIVE;
1068
1069 new_state = max(tx_state, rx_state);
1070 if (new_state == priv->can.state)
1071 return 0;
1072
1073
1074
1075
1076 skb = mcp251xfd_alloc_can_err_skb(priv, &cf, ×tamp);
1077 can_change_state(priv->ndev, cf, tx_state, rx_state);
1078
1079 if (new_state == CAN_STATE_BUS_OFF) {
1080
1081
1082
1083
1084
1085 err = __mcp251xfd_get_berr_counter(priv->ndev, &priv->bec);
1086 if (err)
1087 return err;
1088
1089 mcp251xfd_chip_stop(priv, CAN_STATE_BUS_OFF);
1090 can_bus_off(priv->ndev);
1091 }
1092
1093 if (!skb)
1094 return 0;
1095
1096 if (new_state != CAN_STATE_BUS_OFF) {
1097 struct can_berr_counter bec;
1098
1099 err = mcp251xfd_get_berr_counter(priv->ndev, &bec);
1100 if (err)
1101 return err;
1102 cf->can_id |= CAN_ERR_CNT;
1103 cf->data[6] = bec.txerr;
1104 cf->data[7] = bec.rxerr;
1105 }
1106
1107 err = can_rx_offload_queue_timestamp(&priv->offload, skb, timestamp);
1108 if (err)
1109 stats->rx_fifo_errors++;
1110
1111 return 0;
1112 }
1113
1114 static int
1115 mcp251xfd_handle_modif(const struct mcp251xfd_priv *priv, bool *set_normal_mode)
1116 {
1117 const u8 mode_reference = mcp251xfd_get_normal_mode(priv);
1118 u8 mode;
1119 int err;
1120
1121 err = mcp251xfd_chip_get_mode(priv, &mode);
1122 if (err)
1123 return err;
1124
1125 if (mode == mode_reference) {
1126 netdev_dbg(priv->ndev,
1127 "Controller changed into %s Mode (%u).\n",
1128 mcp251xfd_get_mode_str(mode), mode);
1129 return 0;
1130 }
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142 if ((priv->devtype_data.quirks & MCP251XFD_QUIRK_MAB_NO_WARN) &&
1143 (mode == MCP251XFD_REG_CON_MODE_RESTRICTED ||
1144 mode == MCP251XFD_REG_CON_MODE_LISTENONLY))
1145 netdev_dbg(priv->ndev,
1146 "Controller changed into %s Mode (%u).\n",
1147 mcp251xfd_get_mode_str(mode), mode);
1148 else
1149 netdev_err(priv->ndev,
1150 "Controller changed into %s Mode (%u).\n",
1151 mcp251xfd_get_mode_str(mode), mode);
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161 if (priv->regs_status.intf & MCP251XFD_REG_INT_ECCIF) {
1162 *set_normal_mode = true;
1163 return 0;
1164 }
1165
1166 return mcp251xfd_chip_set_normal_mode_nowait(priv);
1167 }
1168
1169 static int mcp251xfd_handle_serrif(struct mcp251xfd_priv *priv)
1170 {
1171 struct mcp251xfd_ecc *ecc = &priv->ecc;
1172 struct net_device_stats *stats = &priv->ndev->stats;
1173 bool handled = false;
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197 if ((priv->regs_status.intf & MCP251XFD_REG_INT_MODIF &&
1198 priv->regs_status.intf & MCP251XFD_REG_INT_IVMIF) ||
1199 priv->regs_status.intf & MCP251XFD_REG_INT_ECCIF ||
1200 ecc->cnt) {
1201 const char *msg;
1202
1203 if (priv->regs_status.intf & MCP251XFD_REG_INT_ECCIF ||
1204 ecc->cnt)
1205 msg = "TX MAB underflow due to ECC error detected.";
1206 else
1207 msg = "TX MAB underflow detected.";
1208
1209 if (priv->devtype_data.quirks & MCP251XFD_QUIRK_MAB_NO_WARN)
1210 netdev_dbg(priv->ndev, "%s\n", msg);
1211 else
1212 netdev_info(priv->ndev, "%s\n", msg);
1213
1214 stats->tx_aborted_errors++;
1215 stats->tx_errors++;
1216 handled = true;
1217 }
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233 if (priv->regs_status.intf & MCP251XFD_REG_INT_RXOVIF ||
1234 priv->regs_status.intf & MCP251XFD_REG_INT_RXIF) {
1235 stats->rx_dropped++;
1236 handled = true;
1237 }
1238
1239 if (!handled)
1240 netdev_err(priv->ndev,
1241 "Unhandled System Error Interrupt (intf=0x%08x)!\n",
1242 priv->regs_status.intf);
1243
1244 return 0;
1245 }
1246
1247 static int
1248 mcp251xfd_handle_eccif_recover(struct mcp251xfd_priv *priv, u8 nr)
1249 {
1250 struct mcp251xfd_tx_ring *tx_ring = priv->tx;
1251 struct mcp251xfd_ecc *ecc = &priv->ecc;
1252 struct mcp251xfd_tx_obj *tx_obj;
1253 u8 chip_tx_tail, tx_tail, offset;
1254 u16 addr;
1255 int err;
1256
1257 addr = FIELD_GET(MCP251XFD_REG_ECCSTAT_ERRADDR_MASK, ecc->ecc_stat);
1258
1259 err = mcp251xfd_tx_tail_get_from_chip(priv, &chip_tx_tail);
1260 if (err)
1261 return err;
1262
1263 tx_tail = mcp251xfd_get_tx_tail(tx_ring);
1264 offset = (nr - chip_tx_tail) & (tx_ring->obj_num - 1);
1265
1266
1267
1268
1269
1270
1271 if (chip_tx_tail != tx_tail ||
1272 !(offset == 0 || (offset == 1 && (mcp251xfd_is_2518FD(priv) ||
1273 mcp251xfd_is_251863(priv))))) {
1274 netdev_err(priv->ndev,
1275 "ECC Error information inconsistent (addr=0x%04x, nr=%d, tx_tail=0x%08x(%d), chip_tx_tail=%d, offset=%d).\n",
1276 addr, nr, tx_ring->tail, tx_tail, chip_tx_tail,
1277 offset);
1278 return -EINVAL;
1279 }
1280
1281 netdev_info(priv->ndev,
1282 "Recovering %s ECC Error at address 0x%04x (in TX-RAM, tx_obj=%d, tx_tail=0x%08x(%d), offset=%d).\n",
1283 ecc->ecc_stat & MCP251XFD_REG_ECCSTAT_SECIF ?
1284 "Single" : "Double",
1285 addr, nr, tx_ring->tail, tx_tail, offset);
1286
1287
1288 tx_obj = &tx_ring->obj[nr];
1289 err = spi_sync_transfer(priv->spi, tx_obj->xfer, 1);
1290 if (err)
1291 return err;
1292
1293
1294 return mcp251xfd_chip_set_normal_mode(priv);
1295 }
1296
1297 static int
1298 mcp251xfd_handle_eccif(struct mcp251xfd_priv *priv, bool set_normal_mode)
1299 {
1300 struct mcp251xfd_ecc *ecc = &priv->ecc;
1301 const char *msg;
1302 bool in_tx_ram;
1303 u32 ecc_stat;
1304 u16 addr;
1305 u8 nr;
1306 int err;
1307
1308 err = regmap_read(priv->map_reg, MCP251XFD_REG_ECCSTAT, &ecc_stat);
1309 if (err)
1310 return err;
1311
1312 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_ECCSTAT,
1313 MCP251XFD_REG_ECCSTAT_IF_MASK, ~ecc_stat);
1314 if (err)
1315 return err;
1316
1317
1318 addr = FIELD_GET(MCP251XFD_REG_ECCSTAT_ERRADDR_MASK, ecc_stat);
1319 err = mcp251xfd_get_tx_nr_by_addr(priv->tx, &nr, addr);
1320 if (!err)
1321 in_tx_ram = true;
1322 else if (err == -ENOENT)
1323 in_tx_ram = false;
1324 else
1325 return err;
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339 if (ecc_stat & MCP251XFD_REG_ECCSTAT_SECIF)
1340 msg = "Single ECC Error detected at address";
1341 else if (ecc_stat & MCP251XFD_REG_ECCSTAT_DEDIF)
1342 msg = "Double ECC Error detected at address";
1343 else
1344 return -EINVAL;
1345
1346 if (!in_tx_ram) {
1347 ecc->ecc_stat = 0;
1348
1349 netdev_notice(priv->ndev, "%s 0x%04x.\n", msg, addr);
1350 } else {
1351
1352 if (ecc->ecc_stat == ecc_stat) {
1353 ecc->cnt++;
1354 } else {
1355 ecc->ecc_stat = ecc_stat;
1356 ecc->cnt = 1;
1357 }
1358
1359 netdev_info(priv->ndev,
1360 "%s 0x%04x (in TX-RAM, tx_obj=%d), occurred %d time%s.\n",
1361 msg, addr, nr, ecc->cnt, ecc->cnt > 1 ? "s" : "");
1362
1363 if (ecc->cnt >= MCP251XFD_ECC_CNT_MAX)
1364 return mcp251xfd_handle_eccif_recover(priv, nr);
1365 }
1366
1367 if (set_normal_mode)
1368 return mcp251xfd_chip_set_normal_mode_nowait(priv);
1369
1370 return 0;
1371 }
1372
1373 static int mcp251xfd_handle_spicrcif(struct mcp251xfd_priv *priv)
1374 {
1375 int err;
1376 u32 crc;
1377
1378 err = regmap_read(priv->map_reg, MCP251XFD_REG_CRC, &crc);
1379 if (err)
1380 return err;
1381
1382 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_CRC,
1383 MCP251XFD_REG_CRC_IF_MASK,
1384 ~crc);
1385 if (err)
1386 return err;
1387
1388 if (crc & MCP251XFD_REG_CRC_FERRIF)
1389 netdev_notice(priv->ndev, "CRC write command format error.\n");
1390 else if (crc & MCP251XFD_REG_CRC_CRCERRIF)
1391 netdev_notice(priv->ndev,
1392 "CRC write error detected. CRC=0x%04lx.\n",
1393 FIELD_GET(MCP251XFD_REG_CRC_MASK, crc));
1394
1395 return 0;
1396 }
1397
1398 static int mcp251xfd_read_regs_status(struct mcp251xfd_priv *priv)
1399 {
1400 const int val_bytes = regmap_get_val_bytes(priv->map_reg);
1401 size_t len;
1402
1403 if (priv->rx_ring_num == 1)
1404 len = sizeof(priv->regs_status.intf);
1405 else
1406 len = sizeof(priv->regs_status);
1407
1408 return regmap_bulk_read(priv->map_reg, MCP251XFD_REG_INT,
1409 &priv->regs_status, len / val_bytes);
1410 }
1411
1412 #define mcp251xfd_handle(priv, irq, ...) \
1413 ({ \
1414 struct mcp251xfd_priv *_priv = (priv); \
1415 int err; \
1416 \
1417 err = mcp251xfd_handle_##irq(_priv, ## __VA_ARGS__); \
1418 if (err) \
1419 netdev_err(_priv->ndev, \
1420 "IRQ handler mcp251xfd_handle_%s() returned %d.\n", \
1421 __stringify(irq), err); \
1422 err; \
1423 })
1424
1425 static irqreturn_t mcp251xfd_irq(int irq, void *dev_id)
1426 {
1427 struct mcp251xfd_priv *priv = dev_id;
1428 irqreturn_t handled = IRQ_NONE;
1429 int err;
1430
1431 if (priv->rx_int)
1432 do {
1433 int rx_pending;
1434
1435 rx_pending = gpiod_get_value_cansleep(priv->rx_int);
1436 if (!rx_pending)
1437 break;
1438
1439
1440
1441
1442
1443 priv->regs_status.rxif = BIT(priv->rx[0]->fifo_nr);
1444 err = mcp251xfd_handle(priv, rxif);
1445 if (err)
1446 goto out_fail;
1447
1448 handled = IRQ_HANDLED;
1449
1450
1451
1452
1453
1454 } while (priv->rx_ring_num == 1);
1455
1456 do {
1457 u32 intf_pending, intf_pending_clearable;
1458 bool set_normal_mode = false;
1459
1460 err = mcp251xfd_read_regs_status(priv);
1461 if (err)
1462 goto out_fail;
1463
1464 intf_pending = FIELD_GET(MCP251XFD_REG_INT_IF_MASK,
1465 priv->regs_status.intf) &
1466 FIELD_GET(MCP251XFD_REG_INT_IE_MASK,
1467 priv->regs_status.intf);
1468
1469 if (!(intf_pending)) {
1470 can_rx_offload_threaded_irq_finish(&priv->offload);
1471 return handled;
1472 }
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482 intf_pending_clearable = intf_pending &
1483 MCP251XFD_REG_INT_IF_CLEARABLE_MASK;
1484 if (intf_pending_clearable) {
1485 err = regmap_update_bits(priv->map_reg,
1486 MCP251XFD_REG_INT,
1487 MCP251XFD_REG_INT_IF_MASK,
1488 ~intf_pending_clearable);
1489 if (err)
1490 goto out_fail;
1491 }
1492
1493 if (intf_pending & MCP251XFD_REG_INT_MODIF) {
1494 err = mcp251xfd_handle(priv, modif, &set_normal_mode);
1495 if (err)
1496 goto out_fail;
1497 }
1498
1499 if (intf_pending & MCP251XFD_REG_INT_RXIF) {
1500 err = mcp251xfd_handle(priv, rxif);
1501 if (err)
1502 goto out_fail;
1503 }
1504
1505 if (intf_pending & MCP251XFD_REG_INT_TEFIF) {
1506 err = mcp251xfd_handle(priv, tefif);
1507 if (err)
1508 goto out_fail;
1509 }
1510
1511 if (intf_pending & MCP251XFD_REG_INT_RXOVIF) {
1512 err = mcp251xfd_handle(priv, rxovif);
1513 if (err)
1514 goto out_fail;
1515 }
1516
1517 if (intf_pending & MCP251XFD_REG_INT_TXATIF) {
1518 err = mcp251xfd_handle(priv, txatif);
1519 if (err)
1520 goto out_fail;
1521 }
1522
1523 if (intf_pending & MCP251XFD_REG_INT_IVMIF) {
1524 err = mcp251xfd_handle(priv, ivmif);
1525 if (err)
1526 goto out_fail;
1527 }
1528
1529 if (intf_pending & MCP251XFD_REG_INT_SERRIF) {
1530 err = mcp251xfd_handle(priv, serrif);
1531 if (err)
1532 goto out_fail;
1533 }
1534
1535 if (intf_pending & MCP251XFD_REG_INT_ECCIF) {
1536 err = mcp251xfd_handle(priv, eccif, set_normal_mode);
1537 if (err)
1538 goto out_fail;
1539 }
1540
1541 if (intf_pending & MCP251XFD_REG_INT_SPICRCIF) {
1542 err = mcp251xfd_handle(priv, spicrcif);
1543 if (err)
1544 goto out_fail;
1545 }
1546
1547
1548
1549
1550
1551 if (intf_pending & MCP251XFD_REG_INT_CERRIF ||
1552 priv->can.state > CAN_STATE_ERROR_ACTIVE) {
1553 err = mcp251xfd_handle(priv, cerrif);
1554 if (err)
1555 goto out_fail;
1556
1557
1558
1559
1560
1561
1562
1563
1564 if (priv->can.state == CAN_STATE_BUS_OFF) {
1565 can_rx_offload_threaded_irq_finish(&priv->offload);
1566 return IRQ_HANDLED;
1567 }
1568 }
1569
1570 handled = IRQ_HANDLED;
1571 } while (1);
1572
1573 out_fail:
1574 can_rx_offload_threaded_irq_finish(&priv->offload);
1575
1576 netdev_err(priv->ndev, "IRQ handler returned %d (intf=0x%08x).\n",
1577 err, priv->regs_status.intf);
1578 mcp251xfd_dump(priv);
1579 mcp251xfd_chip_interrupts_disable(priv);
1580 mcp251xfd_timestamp_stop(priv);
1581
1582 return handled;
1583 }
1584
1585 static int mcp251xfd_open(struct net_device *ndev)
1586 {
1587 struct mcp251xfd_priv *priv = netdev_priv(ndev);
1588 const struct spi_device *spi = priv->spi;
1589 int err;
1590
1591 err = open_candev(ndev);
1592 if (err)
1593 return err;
1594
1595 err = pm_runtime_resume_and_get(ndev->dev.parent);
1596 if (err)
1597 goto out_close_candev;
1598
1599 err = mcp251xfd_ring_alloc(priv);
1600 if (err)
1601 goto out_pm_runtime_put;
1602
1603 err = mcp251xfd_transceiver_enable(priv);
1604 if (err)
1605 goto out_mcp251xfd_ring_free;
1606
1607 err = mcp251xfd_chip_start(priv);
1608 if (err)
1609 goto out_transceiver_disable;
1610
1611 mcp251xfd_timestamp_init(priv);
1612 clear_bit(MCP251XFD_FLAGS_DOWN, priv->flags);
1613 can_rx_offload_enable(&priv->offload);
1614
1615 err = request_threaded_irq(spi->irq, NULL, mcp251xfd_irq,
1616 IRQF_SHARED | IRQF_ONESHOT,
1617 dev_name(&spi->dev), priv);
1618 if (err)
1619 goto out_can_rx_offload_disable;
1620
1621 err = mcp251xfd_chip_interrupts_enable(priv);
1622 if (err)
1623 goto out_free_irq;
1624
1625 netif_start_queue(ndev);
1626
1627 return 0;
1628
1629 out_free_irq:
1630 free_irq(spi->irq, priv);
1631 out_can_rx_offload_disable:
1632 can_rx_offload_disable(&priv->offload);
1633 set_bit(MCP251XFD_FLAGS_DOWN, priv->flags);
1634 mcp251xfd_timestamp_stop(priv);
1635 out_transceiver_disable:
1636 mcp251xfd_transceiver_disable(priv);
1637 out_mcp251xfd_ring_free:
1638 mcp251xfd_ring_free(priv);
1639 out_pm_runtime_put:
1640 mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED);
1641 pm_runtime_put(ndev->dev.parent);
1642 out_close_candev:
1643 close_candev(ndev);
1644
1645 return err;
1646 }
1647
1648 static int mcp251xfd_stop(struct net_device *ndev)
1649 {
1650 struct mcp251xfd_priv *priv = netdev_priv(ndev);
1651
1652 netif_stop_queue(ndev);
1653 set_bit(MCP251XFD_FLAGS_DOWN, priv->flags);
1654 hrtimer_cancel(&priv->rx_irq_timer);
1655 hrtimer_cancel(&priv->tx_irq_timer);
1656 mcp251xfd_chip_interrupts_disable(priv);
1657 free_irq(ndev->irq, priv);
1658 can_rx_offload_disable(&priv->offload);
1659 mcp251xfd_timestamp_stop(priv);
1660 mcp251xfd_chip_stop(priv, CAN_STATE_STOPPED);
1661 mcp251xfd_transceiver_disable(priv);
1662 mcp251xfd_ring_free(priv);
1663 close_candev(ndev);
1664
1665 pm_runtime_put(ndev->dev.parent);
1666
1667 return 0;
1668 }
1669
1670 static const struct net_device_ops mcp251xfd_netdev_ops = {
1671 .ndo_open = mcp251xfd_open,
1672 .ndo_stop = mcp251xfd_stop,
1673 .ndo_start_xmit = mcp251xfd_start_xmit,
1674 .ndo_eth_ioctl = can_eth_ioctl_hwts,
1675 .ndo_change_mtu = can_change_mtu,
1676 };
1677
1678 static void
1679 mcp251xfd_register_quirks(struct mcp251xfd_priv *priv)
1680 {
1681 const struct spi_device *spi = priv->spi;
1682 const struct spi_controller *ctlr = spi->controller;
1683
1684 if (ctlr->flags & SPI_CONTROLLER_HALF_DUPLEX)
1685 priv->devtype_data.quirks |= MCP251XFD_QUIRK_HALF_DUPLEX;
1686 }
1687
1688 static int mcp251xfd_register_chip_detect(struct mcp251xfd_priv *priv)
1689 {
1690 const struct net_device *ndev = priv->ndev;
1691 const struct mcp251xfd_devtype_data *devtype_data;
1692 u32 osc;
1693 int err;
1694
1695
1696
1697
1698 err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_OSC,
1699 MCP251XFD_REG_OSC_LPMEN,
1700 MCP251XFD_REG_OSC_LPMEN);
1701 if (err)
1702 return err;
1703
1704 err = regmap_read(priv->map_reg, MCP251XFD_REG_OSC, &osc);
1705 if (err)
1706 return err;
1707
1708 if (osc & MCP251XFD_REG_OSC_LPMEN) {
1709
1710
1711
1712
1713 if (mcp251xfd_is_251863(priv))
1714 devtype_data = &mcp251xfd_devtype_data_mcp251863;
1715 else
1716 devtype_data = &mcp251xfd_devtype_data_mcp2518fd;
1717 } else {
1718 devtype_data = &mcp251xfd_devtype_data_mcp2517fd;
1719 }
1720
1721 if (!mcp251xfd_is_251XFD(priv) &&
1722 priv->devtype_data.model != devtype_data->model) {
1723 netdev_info(ndev,
1724 "Detected %s, but firmware specifies a %s. Fixing up.\n",
1725 __mcp251xfd_get_model_str(devtype_data->model),
1726 mcp251xfd_get_model_str(priv));
1727 }
1728 priv->devtype_data = *devtype_data;
1729
1730
1731 mcp251xfd_register_quirks(priv);
1732
1733
1734 return mcp251xfd_regmap_init(priv);
1735 }
1736
1737 static int mcp251xfd_register_check_rx_int(struct mcp251xfd_priv *priv)
1738 {
1739 int err, rx_pending;
1740
1741 if (!priv->rx_int)
1742 return 0;
1743
1744 err = mcp251xfd_chip_rx_int_enable(priv);
1745 if (err)
1746 return err;
1747
1748
1749
1750
1751 rx_pending = gpiod_get_value_cansleep(priv->rx_int);
1752
1753 err = mcp251xfd_chip_rx_int_disable(priv);
1754 if (err)
1755 return err;
1756
1757 if (!rx_pending)
1758 return 0;
1759
1760 netdev_info(priv->ndev,
1761 "RX_INT active after softreset, disabling RX_INT support.\n");
1762 devm_gpiod_put(&priv->spi->dev, priv->rx_int);
1763 priv->rx_int = NULL;
1764
1765 return 0;
1766 }
1767
1768 static int
1769 mcp251xfd_register_get_dev_id(const struct mcp251xfd_priv *priv, u32 *dev_id,
1770 u32 *effective_speed_hz_slow,
1771 u32 *effective_speed_hz_fast)
1772 {
1773 struct mcp251xfd_map_buf_nocrc *buf_rx;
1774 struct mcp251xfd_map_buf_nocrc *buf_tx;
1775 struct spi_transfer xfer[2] = { };
1776 int err;
1777
1778 buf_rx = kzalloc(sizeof(*buf_rx), GFP_KERNEL);
1779 if (!buf_rx)
1780 return -ENOMEM;
1781
1782 buf_tx = kzalloc(sizeof(*buf_tx), GFP_KERNEL);
1783 if (!buf_tx) {
1784 err = -ENOMEM;
1785 goto out_kfree_buf_rx;
1786 }
1787
1788 xfer[0].tx_buf = buf_tx;
1789 xfer[0].len = sizeof(buf_tx->cmd);
1790 xfer[0].speed_hz = priv->spi_max_speed_hz_slow;
1791 xfer[1].rx_buf = buf_rx->data;
1792 xfer[1].len = sizeof(*dev_id);
1793 xfer[1].speed_hz = priv->spi_max_speed_hz_fast;
1794
1795 mcp251xfd_spi_cmd_read_nocrc(&buf_tx->cmd, MCP251XFD_REG_DEVID);
1796
1797 err = spi_sync_transfer(priv->spi, xfer, ARRAY_SIZE(xfer));
1798 if (err)
1799 goto out_kfree_buf_tx;
1800
1801 *dev_id = get_unaligned_le32(buf_rx->data);
1802 *effective_speed_hz_slow = xfer[0].effective_speed_hz;
1803 *effective_speed_hz_fast = xfer[1].effective_speed_hz;
1804
1805 out_kfree_buf_tx:
1806 kfree(buf_tx);
1807 out_kfree_buf_rx:
1808 kfree(buf_rx);
1809
1810 return err;
1811 }
1812
1813 #define MCP251XFD_QUIRK_ACTIVE(quirk) \
1814 (priv->devtype_data.quirks & MCP251XFD_QUIRK_##quirk ? '+' : '-')
1815
1816 static int
1817 mcp251xfd_register_done(const struct mcp251xfd_priv *priv)
1818 {
1819 u32 dev_id, effective_speed_hz_slow, effective_speed_hz_fast;
1820 unsigned long clk_rate;
1821 int err;
1822
1823 err = mcp251xfd_register_get_dev_id(priv, &dev_id,
1824 &effective_speed_hz_slow,
1825 &effective_speed_hz_fast);
1826 if (err)
1827 return err;
1828
1829 clk_rate = clk_get_rate(priv->clk);
1830
1831 netdev_info(priv->ndev,
1832 "%s rev%lu.%lu (%cRX_INT %cPLL %cMAB_NO_WARN %cCRC_REG %cCRC_RX %cCRC_TX %cECC %cHD o:%lu.%02luMHz c:%u.%02uMHz m:%u.%02uMHz rs:%u.%02uMHz es:%u.%02uMHz rf:%u.%02uMHz ef:%u.%02uMHz) successfully initialized.\n",
1833 mcp251xfd_get_model_str(priv),
1834 FIELD_GET(MCP251XFD_REG_DEVID_ID_MASK, dev_id),
1835 FIELD_GET(MCP251XFD_REG_DEVID_REV_MASK, dev_id),
1836 priv->rx_int ? '+' : '-',
1837 priv->pll_enable ? '+' : '-',
1838 MCP251XFD_QUIRK_ACTIVE(MAB_NO_WARN),
1839 MCP251XFD_QUIRK_ACTIVE(CRC_REG),
1840 MCP251XFD_QUIRK_ACTIVE(CRC_RX),
1841 MCP251XFD_QUIRK_ACTIVE(CRC_TX),
1842 MCP251XFD_QUIRK_ACTIVE(ECC),
1843 MCP251XFD_QUIRK_ACTIVE(HALF_DUPLEX),
1844 clk_rate / 1000000,
1845 clk_rate % 1000000 / 1000 / 10,
1846 priv->can.clock.freq / 1000000,
1847 priv->can.clock.freq % 1000000 / 1000 / 10,
1848 priv->spi_max_speed_hz_orig / 1000000,
1849 priv->spi_max_speed_hz_orig % 1000000 / 1000 / 10,
1850 priv->spi_max_speed_hz_slow / 1000000,
1851 priv->spi_max_speed_hz_slow % 1000000 / 1000 / 10,
1852 effective_speed_hz_slow / 1000000,
1853 effective_speed_hz_slow % 1000000 / 1000 / 10,
1854 priv->spi_max_speed_hz_fast / 1000000,
1855 priv->spi_max_speed_hz_fast % 1000000 / 1000 / 10,
1856 effective_speed_hz_fast / 1000000,
1857 effective_speed_hz_fast % 1000000 / 1000 / 10);
1858
1859 return 0;
1860 }
1861
1862 static int mcp251xfd_register(struct mcp251xfd_priv *priv)
1863 {
1864 struct net_device *ndev = priv->ndev;
1865 int err;
1866
1867 err = mcp251xfd_clks_and_vdd_enable(priv);
1868 if (err)
1869 return err;
1870
1871 pm_runtime_get_noresume(ndev->dev.parent);
1872 err = pm_runtime_set_active(ndev->dev.parent);
1873 if (err)
1874 goto out_runtime_put_noidle;
1875 pm_runtime_enable(ndev->dev.parent);
1876
1877 mcp251xfd_register_quirks(priv);
1878
1879 err = mcp251xfd_chip_softreset(priv);
1880 if (err == -ENODEV)
1881 goto out_runtime_disable;
1882 if (err)
1883 goto out_chip_sleep;
1884
1885 err = mcp251xfd_chip_clock_init(priv);
1886 if (err == -ENODEV)
1887 goto out_runtime_disable;
1888 if (err)
1889 goto out_chip_sleep;
1890
1891 err = mcp251xfd_register_chip_detect(priv);
1892 if (err)
1893 goto out_chip_sleep;
1894
1895 err = mcp251xfd_register_check_rx_int(priv);
1896 if (err)
1897 goto out_chip_sleep;
1898
1899 mcp251xfd_ethtool_init(priv);
1900
1901 err = register_candev(ndev);
1902 if (err)
1903 goto out_chip_sleep;
1904
1905 err = mcp251xfd_register_done(priv);
1906 if (err)
1907 goto out_unregister_candev;
1908
1909
1910
1911
1912
1913 err = mcp251xfd_chip_sleep(priv);
1914 if (err)
1915 goto out_unregister_candev;
1916
1917 pm_runtime_put(ndev->dev.parent);
1918
1919 return 0;
1920
1921 out_unregister_candev:
1922 unregister_candev(ndev);
1923 out_chip_sleep:
1924 mcp251xfd_chip_sleep(priv);
1925 out_runtime_disable:
1926 pm_runtime_disable(ndev->dev.parent);
1927 out_runtime_put_noidle:
1928 pm_runtime_put_noidle(ndev->dev.parent);
1929 mcp251xfd_clks_and_vdd_disable(priv);
1930
1931 return err;
1932 }
1933
1934 static inline void mcp251xfd_unregister(struct mcp251xfd_priv *priv)
1935 {
1936 struct net_device *ndev = priv->ndev;
1937
1938 unregister_candev(ndev);
1939
1940 if (pm_runtime_enabled(ndev->dev.parent))
1941 pm_runtime_disable(ndev->dev.parent);
1942 else
1943 mcp251xfd_clks_and_vdd_disable(priv);
1944 }
1945
1946 static const struct of_device_id mcp251xfd_of_match[] = {
1947 {
1948 .compatible = "microchip,mcp2517fd",
1949 .data = &mcp251xfd_devtype_data_mcp2517fd,
1950 }, {
1951 .compatible = "microchip,mcp2518fd",
1952 .data = &mcp251xfd_devtype_data_mcp2518fd,
1953 }, {
1954 .compatible = "microchip,mcp251863",
1955 .data = &mcp251xfd_devtype_data_mcp251863,
1956 }, {
1957 .compatible = "microchip,mcp251xfd",
1958 .data = &mcp251xfd_devtype_data_mcp251xfd,
1959 }, {
1960
1961 },
1962 };
1963 MODULE_DEVICE_TABLE(of, mcp251xfd_of_match);
1964
1965 static const struct spi_device_id mcp251xfd_id_table[] = {
1966 {
1967 .name = "mcp2517fd",
1968 .driver_data = (kernel_ulong_t)&mcp251xfd_devtype_data_mcp2517fd,
1969 }, {
1970 .name = "mcp2518fd",
1971 .driver_data = (kernel_ulong_t)&mcp251xfd_devtype_data_mcp2518fd,
1972 }, {
1973 .name = "mcp251863",
1974 .driver_data = (kernel_ulong_t)&mcp251xfd_devtype_data_mcp251863,
1975 }, {
1976 .name = "mcp251xfd",
1977 .driver_data = (kernel_ulong_t)&mcp251xfd_devtype_data_mcp251xfd,
1978 }, {
1979
1980 },
1981 };
1982 MODULE_DEVICE_TABLE(spi, mcp251xfd_id_table);
1983
1984 static int mcp251xfd_probe(struct spi_device *spi)
1985 {
1986 const void *match;
1987 struct net_device *ndev;
1988 struct mcp251xfd_priv *priv;
1989 struct gpio_desc *rx_int;
1990 struct regulator *reg_vdd, *reg_xceiver;
1991 struct clk *clk;
1992 bool pll_enable = false;
1993 u32 freq = 0;
1994 int err;
1995
1996 if (!spi->irq)
1997 return dev_err_probe(&spi->dev, -ENXIO,
1998 "No IRQ specified (maybe node \"interrupts-extended\" in DT missing)!\n");
1999
2000 rx_int = devm_gpiod_get_optional(&spi->dev, "microchip,rx-int",
2001 GPIOD_IN);
2002 if (IS_ERR(rx_int))
2003 return dev_err_probe(&spi->dev, PTR_ERR(rx_int),
2004 "Failed to get RX-INT!\n");
2005
2006 reg_vdd = devm_regulator_get_optional(&spi->dev, "vdd");
2007 if (PTR_ERR(reg_vdd) == -ENODEV)
2008 reg_vdd = NULL;
2009 else if (IS_ERR(reg_vdd))
2010 return dev_err_probe(&spi->dev, PTR_ERR(reg_vdd),
2011 "Failed to get VDD regulator!\n");
2012
2013 reg_xceiver = devm_regulator_get_optional(&spi->dev, "xceiver");
2014 if (PTR_ERR(reg_xceiver) == -ENODEV)
2015 reg_xceiver = NULL;
2016 else if (IS_ERR(reg_xceiver))
2017 return dev_err_probe(&spi->dev, PTR_ERR(reg_xceiver),
2018 "Failed to get Transceiver regulator!\n");
2019
2020 clk = devm_clk_get_optional(&spi->dev, NULL);
2021 if (IS_ERR(clk))
2022 return dev_err_probe(&spi->dev, PTR_ERR(clk),
2023 "Failed to get Oscillator (clock)!\n");
2024 if (clk) {
2025 freq = clk_get_rate(clk);
2026 } else {
2027 err = device_property_read_u32(&spi->dev, "clock-frequency",
2028 &freq);
2029 if (err)
2030 return dev_err_probe(&spi->dev, err,
2031 "Failed to get clock-frequency!\n");
2032 }
2033
2034
2035 if (freq < MCP251XFD_SYSCLOCK_HZ_MIN ||
2036 freq > MCP251XFD_SYSCLOCK_HZ_MAX) {
2037 dev_err(&spi->dev,
2038 "Oscillator frequency (%u Hz) is too low or high.\n",
2039 freq);
2040 return -ERANGE;
2041 }
2042
2043 if (freq <= MCP251XFD_SYSCLOCK_HZ_MAX / MCP251XFD_OSC_PLL_MULTIPLIER)
2044 pll_enable = true;
2045
2046 ndev = alloc_candev(sizeof(struct mcp251xfd_priv),
2047 MCP251XFD_TX_OBJ_NUM_MAX);
2048 if (!ndev)
2049 return -ENOMEM;
2050
2051 SET_NETDEV_DEV(ndev, &spi->dev);
2052
2053 ndev->netdev_ops = &mcp251xfd_netdev_ops;
2054 ndev->irq = spi->irq;
2055 ndev->flags |= IFF_ECHO;
2056
2057 priv = netdev_priv(ndev);
2058 spi_set_drvdata(spi, priv);
2059 priv->can.clock.freq = freq;
2060 if (pll_enable)
2061 priv->can.clock.freq *= MCP251XFD_OSC_PLL_MULTIPLIER;
2062 priv->can.do_set_mode = mcp251xfd_set_mode;
2063 priv->can.do_get_berr_counter = mcp251xfd_get_berr_counter;
2064 priv->can.bittiming_const = &mcp251xfd_bittiming_const;
2065 priv->can.data_bittiming_const = &mcp251xfd_data_bittiming_const;
2066 priv->can.ctrlmode_supported = CAN_CTRLMODE_LOOPBACK |
2067 CAN_CTRLMODE_LISTENONLY | CAN_CTRLMODE_BERR_REPORTING |
2068 CAN_CTRLMODE_FD | CAN_CTRLMODE_FD_NON_ISO |
2069 CAN_CTRLMODE_CC_LEN8_DLC;
2070 set_bit(MCP251XFD_FLAGS_DOWN, priv->flags);
2071 priv->ndev = ndev;
2072 priv->spi = spi;
2073 priv->rx_int = rx_int;
2074 priv->clk = clk;
2075 priv->pll_enable = pll_enable;
2076 priv->reg_vdd = reg_vdd;
2077 priv->reg_xceiver = reg_xceiver;
2078
2079 match = device_get_match_data(&spi->dev);
2080 if (match)
2081 priv->devtype_data = *(struct mcp251xfd_devtype_data *)match;
2082 else
2083 priv->devtype_data = *(struct mcp251xfd_devtype_data *)
2084 spi_get_device_id(spi)->driver_data;
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112 priv->spi_max_speed_hz_orig = spi->max_speed_hz;
2113 priv->spi_max_speed_hz_slow = min(spi->max_speed_hz,
2114 freq / 2 / 1000 * 850);
2115 if (priv->pll_enable)
2116 priv->spi_max_speed_hz_fast = min(spi->max_speed_hz,
2117 freq *
2118 MCP251XFD_OSC_PLL_MULTIPLIER /
2119 2 / 1000 * 850);
2120 else
2121 priv->spi_max_speed_hz_fast = priv->spi_max_speed_hz_slow;
2122 spi->max_speed_hz = priv->spi_max_speed_hz_slow;
2123 spi->bits_per_word = 8;
2124 spi->rt = true;
2125 err = spi_setup(spi);
2126 if (err)
2127 goto out_free_candev;
2128
2129 err = mcp251xfd_regmap_init(priv);
2130 if (err)
2131 goto out_free_candev;
2132
2133 err = can_rx_offload_add_manual(ndev, &priv->offload,
2134 MCP251XFD_NAPI_WEIGHT);
2135 if (err)
2136 goto out_free_candev;
2137
2138 err = mcp251xfd_register(priv);
2139 if (err) {
2140 dev_err_probe(&spi->dev, err, "Failed to detect %s.\n",
2141 mcp251xfd_get_model_str(priv));
2142 goto out_can_rx_offload_del;
2143 }
2144
2145 return 0;
2146
2147 out_can_rx_offload_del:
2148 can_rx_offload_del(&priv->offload);
2149 out_free_candev:
2150 spi->max_speed_hz = priv->spi_max_speed_hz_orig;
2151
2152 free_candev(ndev);
2153
2154 return err;
2155 }
2156
2157 static void mcp251xfd_remove(struct spi_device *spi)
2158 {
2159 struct mcp251xfd_priv *priv = spi_get_drvdata(spi);
2160 struct net_device *ndev = priv->ndev;
2161
2162 can_rx_offload_del(&priv->offload);
2163 mcp251xfd_unregister(priv);
2164 spi->max_speed_hz = priv->spi_max_speed_hz_orig;
2165 free_candev(ndev);
2166 }
2167
2168 static int __maybe_unused mcp251xfd_runtime_suspend(struct device *device)
2169 {
2170 const struct mcp251xfd_priv *priv = dev_get_drvdata(device);
2171
2172 return mcp251xfd_clks_and_vdd_disable(priv);
2173 }
2174
2175 static int __maybe_unused mcp251xfd_runtime_resume(struct device *device)
2176 {
2177 const struct mcp251xfd_priv *priv = dev_get_drvdata(device);
2178
2179 return mcp251xfd_clks_and_vdd_enable(priv);
2180 }
2181
2182 static const struct dev_pm_ops mcp251xfd_pm_ops = {
2183 SET_RUNTIME_PM_OPS(mcp251xfd_runtime_suspend,
2184 mcp251xfd_runtime_resume, NULL)
2185 };
2186
2187 static struct spi_driver mcp251xfd_driver = {
2188 .driver = {
2189 .name = DEVICE_NAME,
2190 .pm = &mcp251xfd_pm_ops,
2191 .of_match_table = mcp251xfd_of_match,
2192 },
2193 .probe = mcp251xfd_probe,
2194 .remove = mcp251xfd_remove,
2195 .id_table = mcp251xfd_id_table,
2196 };
2197 module_spi_driver(mcp251xfd_driver);
2198
2199 MODULE_AUTHOR("Marc Kleine-Budde <mkl@pengutronix.de>");
2200 MODULE_DESCRIPTION("Microchip MCP251xFD Family CAN controller driver");
2201 MODULE_LICENSE("GPL v2");