Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'linux-can-next-for-6.17-20250618' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next

Marc Kleine-Budde says:

====================
pull-request: can-next 2025-06-18

All 10 patches are by Geert Uytterhoeven, target the rcar_canfd
driver, first cleanup/refactor the driver and then add support for
Transceiver Delay Compensation.

* tag 'linux-can-next-for-6.17-20250618' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next:
can: rcar_canfd: Add support for Transceiver Delay Compensation
can: rcar_canfd: Return early in rcar_canfd_set_bittiming() when not FD
can: rcar_canfd: Share config code in rcar_canfd_set_bittiming()
can: rcar_canfd: Rename rcar_canfd_setrnc() to rcar_canfd_set_rnc()
can: rcar_canfd: Repurpose f_dcfg base for other registers
can: rcar_canfd: Simplify data access in rcar_canfd_{ge,pu}t_data()
can: rcar_canfd: Add helper variable dev to rcar_canfd_reset_controller()
can: rcar_canfd: Add helper variable ndev to rcar_canfd_rx_pkt()
can: rcar_canfd: Remove bittiming debug prints
can: rcar_canfd: Consistently use ndev for net_device pointers
====================

Link: https://patch.msgid.link/20250618092336.2175168-1-mkl@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+158 -74
+158 -74
drivers/net/can/rcar/rcar_canfd.c
··· 191 191 /* RSCFDnCFDCmFDCFG */ 192 192 #define RCANFD_GEN4_FDCFG_CLOE BIT(30) 193 193 #define RCANFD_GEN4_FDCFG_FDOE BIT(28) 194 + #define RCANFD_FDCFG_TDCO GENMASK(23, 16) 194 195 #define RCANFD_FDCFG_TDCE BIT(9) 195 196 #define RCANFD_FDCFG_TDCOC BIT(8) 196 - #define RCANFD_FDCFG_TDCO(x) (((x) & 0x7f) >> 16) 197 + 198 + /* RSCFDnCFDCmFDSTS */ 199 + #define RCANFD_FDSTS_SOC GENMASK(31, 24) 200 + #define RCANFD_FDSTS_EOC GENMASK(23, 16) 201 + #define RCANFD_GEN4_FDSTS_TDCVF BIT(15) 202 + #define RCANFD_GEN4_FDSTS_PNSTS GENMASK(13, 12) 203 + #define RCANFD_FDSTS_SOCO BIT(9) 204 + #define RCANFD_FDSTS_EOCO BIT(8) 205 + #define RCANFD_FDSTS_TDCVF BIT(7) 206 + #define RCANFD_FDSTS_TDCR GENMASK(7, 0) 197 207 198 208 /* RSCFDnCFDRFCCx */ 199 209 #define RCANFD_RFCC_RFIM BIT(12) ··· 435 425 #define RCANFD_C_RPGACC(r) (0x1900 + (0x04 * (r))) 436 426 437 427 /* R-Car Gen4 Classical and CAN FD mode specific register map */ 438 - #define RCANFD_GEN4_FDCFG(m) (0x1404 + (0x20 * (m))) 439 - 440 428 #define RCANFD_GEN4_GAFL_OFFSET (0x1800) 441 429 442 430 /* CAN FD mode specific register map */ 443 - 444 - /* RSCFDnCFDCmXXX -> RCANFD_F_XXX(m) */ 445 - #define RCANFD_F_DCFG(gpriv, m) ((gpriv)->info->regs->f_dcfg + (0x20 * (m))) 446 - #define RCANFD_F_CFDCFG(m) (0x0504 + (0x20 * (m))) 447 - #define RCANFD_F_CFDCTR(m) (0x0508 + (0x20 * (m))) 448 - #define RCANFD_F_CFDSTS(m) (0x050c + (0x20 * (m))) 449 - #define RCANFD_F_CFDCRC(m) (0x0510 + (0x20 * (m))) 450 431 451 432 /* RSCFDnCFDGAFLXXXj offset */ 452 433 #define RCANFD_F_GAFL_OFFSET (0x1000) ··· 511 510 u16 cfcc; /* Common FIFO Configuration/Control Register */ 512 511 u16 cfsts; /* Common FIFO Status Register */ 513 512 u16 cfpctr; /* Common FIFO Pointer Control Register */ 514 - u16 f_dcfg; /* Global FD Configuration Register */ 513 + u16 coffset; /* Channel Data Bitrate Configuration Register */ 515 514 u16 rfoffset; /* Receive FIFO buffer access ID register */ 516 515 u16 cfoffset; /* Transmit/receive FIFO buffer access ID register */ 517 516 }; ··· 530 529 struct rcar_canfd_hw_info { 531 530 const struct can_bittiming_const *nom_bittiming; 532 531 const struct can_bittiming_const *data_bittiming; 532 + const struct can_tdc_const *tdc_const; 533 533 const struct rcar_canfd_regs *regs; 534 534 const struct rcar_canfd_shift_data *sh; 535 535 u8 rnc_field_width; ··· 638 636 .brp_inc = 1, 639 637 }; 640 638 639 + /* CAN FD Transmission Delay Compensation constants */ 640 + static const struct can_tdc_const rcar_canfd_gen3_tdc_const = { 641 + .tdcv_min = 1, 642 + .tdcv_max = 128, 643 + .tdco_min = 1, 644 + .tdco_max = 128, 645 + .tdcf_min = 0, /* Filter window not supported */ 646 + .tdcf_max = 0, 647 + }; 648 + 649 + static const struct can_tdc_const rcar_canfd_gen4_tdc_const = { 650 + .tdcv_min = 1, 651 + .tdcv_max = 256, 652 + .tdco_min = 1, 653 + .tdco_max = 256, 654 + .tdcf_min = 0, /* Filter window not supported */ 655 + .tdcf_max = 0, 656 + }; 657 + 641 658 static const struct rcar_canfd_regs rcar_gen3_regs = { 642 659 .rfcc = 0x00b8, 643 660 .cfcc = 0x0118, 644 661 .cfsts = 0x0178, 645 662 .cfpctr = 0x01d8, 646 - .f_dcfg = 0x0500, 663 + .coffset = 0x0500, 647 664 .rfoffset = 0x3000, 648 665 .cfoffset = 0x3400, 649 666 }; ··· 672 651 .cfcc = 0x0120, 673 652 .cfsts = 0x01e0, 674 653 .cfpctr = 0x0240, 675 - .f_dcfg = 0x1400, 654 + .coffset = 0x1400, 676 655 .rfoffset = 0x6000, 677 656 .cfoffset = 0x6400, 678 657 }; ··· 702 681 static const struct rcar_canfd_hw_info rcar_gen3_hw_info = { 703 682 .nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const, 704 683 .data_bittiming = &rcar_canfd_gen3_data_bittiming_const, 684 + .tdc_const = &rcar_canfd_gen3_tdc_const, 705 685 .regs = &rcar_gen3_regs, 706 686 .sh = &rcar_gen3_shift_data, 707 687 .rnc_field_width = 8, ··· 719 697 static const struct rcar_canfd_hw_info rcar_gen4_hw_info = { 720 698 .nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const, 721 699 .data_bittiming = &rcar_canfd_gen4_data_bittiming_const, 700 + .tdc_const = &rcar_canfd_gen4_tdc_const, 722 701 .regs = &rcar_gen4_regs, 723 702 .sh = &rcar_gen4_shift_data, 724 703 .rnc_field_width = 16, ··· 736 713 static const struct rcar_canfd_hw_info rzg2l_hw_info = { 737 714 .nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const, 738 715 .data_bittiming = &rcar_canfd_gen3_data_bittiming_const, 716 + .tdc_const = &rcar_canfd_gen3_tdc_const, 739 717 .regs = &rcar_gen3_regs, 740 718 .sh = &rcar_gen3_shift_data, 741 719 .rnc_field_width = 8, ··· 753 729 static const struct rcar_canfd_hw_info r9a09g047_hw_info = { 754 730 .nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const, 755 731 .data_bittiming = &rcar_canfd_gen4_data_bittiming_const, 732 + .tdc_const = &rcar_canfd_gen4_tdc_const, 756 733 .regs = &rcar_gen4_regs, 757 734 .sh = &rcar_gen4_shift_data, 758 735 .rnc_field_width = 16, ··· 806 781 static void rcar_canfd_get_data(struct rcar_canfd_channel *priv, 807 782 struct canfd_frame *cf, u32 off) 808 783 { 784 + u32 *data = (u32 *)cf->data; 809 785 u32 i, lwords; 810 786 811 787 lwords = DIV_ROUND_UP(cf->len, sizeof(u32)); 812 788 for (i = 0; i < lwords; i++) 813 - *((u32 *)cf->data + i) = 814 - rcar_canfd_read(priv->base, off + i * sizeof(u32)); 789 + data[i] = rcar_canfd_read(priv->base, off + i * sizeof(u32)); 815 790 } 816 791 817 792 static void rcar_canfd_put_data(struct rcar_canfd_channel *priv, 818 793 struct canfd_frame *cf, u32 off) 819 794 { 795 + const u32 *data = (u32 *)cf->data; 820 796 u32 i, lwords; 821 797 822 798 lwords = DIV_ROUND_UP(cf->len, sizeof(u32)); 823 799 for (i = 0; i < lwords; i++) 824 - rcar_canfd_write(priv->base, off + i * sizeof(u32), 825 - *((u32 *)cf->data + i)); 800 + rcar_canfd_write(priv->base, off + i * sizeof(u32), data[i]); 801 + } 802 + 803 + /* RSCFDnCFDCmXXX -> rcar_canfd_f_xxx(gpriv, ch) */ 804 + static inline unsigned int rcar_canfd_f_dcfg(struct rcar_canfd_global *gpriv, 805 + unsigned int ch) 806 + { 807 + return gpriv->info->regs->coffset + 0x00 + 0x20 * ch; 808 + } 809 + 810 + static inline unsigned int rcar_canfd_f_cfdcfg(struct rcar_canfd_global *gpriv, 811 + unsigned int ch) 812 + { 813 + return gpriv->info->regs->coffset + 0x04 + 0x20 * ch; 814 + } 815 + 816 + static inline unsigned int rcar_canfd_f_cfdctr(struct rcar_canfd_global *gpriv, 817 + unsigned int ch) 818 + { 819 + return gpriv->info->regs->coffset + 0x08 + 0x20 * ch; 820 + } 821 + 822 + static inline unsigned int rcar_canfd_f_cfdsts(struct rcar_canfd_global *gpriv, 823 + unsigned int ch) 824 + { 825 + return gpriv->info->regs->coffset + 0x0c + 0x20 * ch; 826 + } 827 + 828 + static inline unsigned int rcar_canfd_f_cfdcrc(struct rcar_canfd_global *gpriv, 829 + unsigned int ch) 830 + { 831 + return gpriv->info->regs->coffset + 0x10 + 0x20 * ch; 826 832 } 827 833 828 834 static void rcar_canfd_tx_failure_cleanup(struct net_device *ndev) ··· 864 808 can_free_echo_skb(ndev, i, NULL); 865 809 } 866 810 867 - static void rcar_canfd_setrnc(struct rcar_canfd_global *gpriv, unsigned int ch, 868 - unsigned int num_rules) 811 + static void rcar_canfd_set_rnc(struct rcar_canfd_global *gpriv, unsigned int ch, 812 + unsigned int num_rules) 869 813 { 870 814 unsigned int rnc_stride = 32 / gpriv->info->rnc_field_width; 871 815 unsigned int shift = 32 - (ch % rnc_stride + 1) * gpriv->info->rnc_field_width; ··· 883 827 884 828 for_each_set_bit(ch, &gpriv->channels_mask, 885 829 gpriv->info->max_channels) 886 - rcar_canfd_set_bit(gpriv->base, RCANFD_GEN4_FDCFG(ch), 887 - val); 830 + rcar_canfd_set_bit(gpriv->base, 831 + rcar_canfd_f_cfdcfg(gpriv, ch), val); 888 832 } else { 889 833 if (gpriv->fdmode) 890 834 rcar_canfd_set_bit(gpriv->base, RCANFD_GRMCFG, ··· 897 841 898 842 static int rcar_canfd_reset_controller(struct rcar_canfd_global *gpriv) 899 843 { 844 + struct device *dev = &gpriv->pdev->dev; 900 845 u32 sts, ch; 901 846 int err; 902 847 ··· 907 850 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts, 908 851 !(sts & RCANFD_GSTS_GRAMINIT), 2, 500000); 909 852 if (err) { 910 - dev_dbg(&gpriv->pdev->dev, "global raminit failed\n"); 853 + dev_dbg(dev, "global raminit failed\n"); 911 854 return err; 912 855 } 913 856 ··· 920 863 err = readl_poll_timeout((gpriv->base + RCANFD_GSTS), sts, 921 864 (sts & RCANFD_GSTS_GRSTSTS), 2, 500000); 922 865 if (err) { 923 - dev_dbg(&gpriv->pdev->dev, "global reset failed\n"); 866 + dev_dbg(dev, "global reset failed\n"); 924 867 return err; 925 868 } 926 869 ··· 944 887 (sts & RCANFD_CSTS_CRSTSTS), 945 888 2, 500000); 946 889 if (err) { 947 - dev_dbg(&gpriv->pdev->dev, 948 - "channel %u reset failed\n", ch); 890 + dev_dbg(dev, "channel %u reset failed\n", ch); 949 891 return err; 950 892 } 951 893 } ··· 994 938 RCANFD_GAFLECTR_AFLDAE)); 995 939 996 940 /* Write number of rules for channel */ 997 - rcar_canfd_setrnc(gpriv, ch, num_rules); 941 + rcar_canfd_set_rnc(gpriv, ch, num_rules); 998 942 if (gpriv->info->shared_can_regs) 999 943 offset = RCANFD_GEN4_GAFL_OFFSET; 1000 944 else if (gpriv->fdmode) ··· 1492 1436 return IRQ_HANDLED; 1493 1437 } 1494 1438 1495 - static void rcar_canfd_set_bittiming(struct net_device *dev) 1439 + static void rcar_canfd_set_bittiming(struct net_device *ndev) 1496 1440 { 1497 - struct rcar_canfd_channel *priv = netdev_priv(dev); 1441 + u32 mask = RCANFD_FDCFG_TDCO | RCANFD_FDCFG_TDCE | RCANFD_FDCFG_TDCOC; 1442 + struct rcar_canfd_channel *priv = netdev_priv(ndev); 1498 1443 struct rcar_canfd_global *gpriv = priv->gpriv; 1499 1444 const struct can_bittiming *bt = &priv->can.bittiming; 1500 1445 const struct can_bittiming *dbt = &priv->can.fd.data_bittiming; 1446 + const struct can_tdc_const *tdc_const = priv->can.fd.tdc_const; 1447 + const struct can_tdc *tdc = &priv->can.fd.tdc; 1448 + u32 cfg, tdcmode = 0, tdco = 0; 1501 1449 u16 brp, sjw, tseg1, tseg2; 1502 - u32 cfg; 1503 1450 u32 ch = priv->channel; 1504 1451 1505 1452 /* Nominal bit timing settings */ ··· 1511 1452 tseg1 = bt->prop_seg + bt->phase_seg1 - 1; 1512 1453 tseg2 = bt->phase_seg2 - 1; 1513 1454 1514 - if (priv->can.ctrlmode & CAN_CTRLMODE_FD) { 1515 - /* CAN FD only mode */ 1455 + if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || gpriv->info->shared_can_regs) { 1516 1456 cfg = (RCANFD_NCFG_NTSEG1(gpriv, tseg1) | RCANFD_NCFG_NBRP(brp) | 1517 1457 RCANFD_NCFG_NSJW(gpriv, sjw) | RCANFD_NCFG_NTSEG2(gpriv, tseg2)); 1518 - 1519 - rcar_canfd_write(priv->base, RCANFD_CCFG(ch), cfg); 1520 - netdev_dbg(priv->ndev, "nrate: brp %u, sjw %u, tseg1 %u, tseg2 %u\n", 1521 - brp, sjw, tseg1, tseg2); 1522 - 1523 - /* Data bit timing settings */ 1524 - brp = dbt->brp - 1; 1525 - sjw = dbt->sjw - 1; 1526 - tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1; 1527 - tseg2 = dbt->phase_seg2 - 1; 1528 - 1529 - cfg = (RCANFD_DCFG_DTSEG1(gpriv, tseg1) | RCANFD_DCFG_DBRP(brp) | 1530 - RCANFD_DCFG_DSJW(gpriv, sjw) | RCANFD_DCFG_DTSEG2(gpriv, tseg2)); 1531 - 1532 - rcar_canfd_write(priv->base, RCANFD_F_DCFG(gpriv, ch), cfg); 1533 - netdev_dbg(priv->ndev, "drate: brp %u, sjw %u, tseg1 %u, tseg2 %u\n", 1534 - brp, sjw, tseg1, tseg2); 1535 1458 } else { 1536 - /* Classical CAN only mode */ 1537 - if (gpriv->info->shared_can_regs) { 1538 - cfg = (RCANFD_NCFG_NTSEG1(gpriv, tseg1) | 1539 - RCANFD_NCFG_NBRP(brp) | 1540 - RCANFD_NCFG_NSJW(gpriv, sjw) | 1541 - RCANFD_NCFG_NTSEG2(gpriv, tseg2)); 1542 - } else { 1543 - cfg = (RCANFD_CFG_TSEG1(tseg1) | 1544 - RCANFD_CFG_BRP(brp) | 1545 - RCANFD_CFG_SJW(sjw) | 1546 - RCANFD_CFG_TSEG2(tseg2)); 1547 - } 1548 - 1549 - rcar_canfd_write(priv->base, RCANFD_CCFG(ch), cfg); 1550 - netdev_dbg(priv->ndev, 1551 - "rate: brp %u, sjw %u, tseg1 %u, tseg2 %u\n", 1552 - brp, sjw, tseg1, tseg2); 1459 + cfg = (RCANFD_CFG_TSEG1(tseg1) | RCANFD_CFG_BRP(brp) | 1460 + RCANFD_CFG_SJW(sjw) | RCANFD_CFG_TSEG2(tseg2)); 1553 1461 } 1462 + 1463 + rcar_canfd_write(priv->base, RCANFD_CCFG(ch), cfg); 1464 + 1465 + if (!(priv->can.ctrlmode & CAN_CTRLMODE_FD)) 1466 + return; 1467 + 1468 + /* Data bit timing settings */ 1469 + brp = dbt->brp - 1; 1470 + sjw = dbt->sjw - 1; 1471 + tseg1 = dbt->prop_seg + dbt->phase_seg1 - 1; 1472 + tseg2 = dbt->phase_seg2 - 1; 1473 + 1474 + cfg = (RCANFD_DCFG_DTSEG1(gpriv, tseg1) | RCANFD_DCFG_DBRP(brp) | 1475 + RCANFD_DCFG_DSJW(gpriv, sjw) | RCANFD_DCFG_DTSEG2(gpriv, tseg2)); 1476 + 1477 + rcar_canfd_write(priv->base, rcar_canfd_f_dcfg(gpriv, ch), cfg); 1478 + 1479 + /* Transceiver Delay Compensation */ 1480 + if (priv->can.ctrlmode & CAN_CTRLMODE_TDC_AUTO) { 1481 + /* TDC enabled, measured + offset */ 1482 + tdcmode = RCANFD_FDCFG_TDCE; 1483 + tdco = tdc->tdco - 1; 1484 + } else if (priv->can.ctrlmode & CAN_CTRLMODE_TDC_MANUAL) { 1485 + /* TDC enabled, offset only */ 1486 + tdcmode = RCANFD_FDCFG_TDCE | RCANFD_FDCFG_TDCOC; 1487 + tdco = min(tdc->tdcv + tdc->tdco, tdc_const->tdco_max) - 1; 1488 + } 1489 + 1490 + rcar_canfd_update_bit(gpriv->base, rcar_canfd_f_cfdcfg(gpriv, ch), mask, 1491 + tdcmode | FIELD_PREP(RCANFD_FDCFG_TDCO, tdco)); 1554 1492 } 1555 1493 1556 1494 static int rcar_canfd_start(struct net_device *ndev) ··· 1747 1691 1748 1692 static void rcar_canfd_rx_pkt(struct rcar_canfd_channel *priv) 1749 1693 { 1750 - struct net_device_stats *stats = &priv->ndev->stats; 1694 + struct net_device *ndev = priv->ndev; 1695 + struct net_device_stats *stats = &ndev->stats; 1751 1696 struct rcar_canfd_global *gpriv = priv->gpriv; 1752 1697 struct canfd_frame *cf; 1753 1698 struct sk_buff *skb; ··· 1764 1707 1765 1708 if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) && 1766 1709 sts & RCANFD_RFFDSTS_RFFDF) 1767 - skb = alloc_canfd_skb(priv->ndev, &cf); 1710 + skb = alloc_canfd_skb(ndev, &cf); 1768 1711 else 1769 - skb = alloc_can_skb(priv->ndev, 1770 - (struct can_frame **)&cf); 1712 + skb = alloc_can_skb(ndev, (struct can_frame **)&cf); 1771 1713 } else { 1772 1714 id = rcar_canfd_read(priv->base, RCANFD_C_RFID(ridx)); 1773 1715 dlc = rcar_canfd_read(priv->base, RCANFD_C_RFPTR(ridx)); 1774 - skb = alloc_can_skb(priv->ndev, (struct can_frame **)&cf); 1716 + skb = alloc_can_skb(ndev, (struct can_frame **)&cf); 1775 1717 } 1776 1718 1777 1719 if (!skb) { ··· 1791 1735 1792 1736 if (sts & RCANFD_RFFDSTS_RFESI) { 1793 1737 cf->flags |= CANFD_ESI; 1794 - netdev_dbg(priv->ndev, "ESI Error\n"); 1738 + netdev_dbg(ndev, "ESI Error\n"); 1795 1739 } 1796 1740 1797 1741 if (!(sts & RCANFD_RFFDSTS_RFFDF) && (id & RCANFD_RFID_RFRTR)) { ··· 1858 1802 return num_pkts; 1859 1803 } 1860 1804 1805 + static unsigned int rcar_canfd_get_tdcr(struct rcar_canfd_global *gpriv, 1806 + unsigned int ch) 1807 + { 1808 + u32 sts = rcar_canfd_read(gpriv->base, rcar_canfd_f_cfdsts(gpriv, ch)); 1809 + u32 tdcr = FIELD_GET(RCANFD_FDSTS_TDCR, sts); 1810 + 1811 + return tdcr & (gpriv->info->tdc_const->tdcv_max - 1); 1812 + } 1813 + 1814 + static int rcar_canfd_get_auto_tdcv(const struct net_device *ndev, u32 *tdcv) 1815 + { 1816 + struct rcar_canfd_channel *priv = netdev_priv(ndev); 1817 + u32 tdco = priv->can.fd.tdc.tdco; 1818 + u32 tdcr; 1819 + 1820 + /* Transceiver Delay Compensation Result */ 1821 + tdcr = rcar_canfd_get_tdcr(priv->gpriv, priv->channel) + 1; 1822 + 1823 + *tdcv = tdcr < tdco ? 0 : tdcr - tdco; 1824 + 1825 + return 0; 1826 + } 1827 + 1861 1828 static int rcar_canfd_do_set_mode(struct net_device *ndev, enum can_mode mode) 1862 1829 { 1863 1830 int err; ··· 1897 1818 } 1898 1819 } 1899 1820 1900 - static int rcar_canfd_get_berr_counter(const struct net_device *dev, 1821 + static int rcar_canfd_get_berr_counter(const struct net_device *ndev, 1901 1822 struct can_berr_counter *bec) 1902 1823 { 1903 - struct rcar_canfd_channel *priv = netdev_priv(dev); 1824 + struct rcar_canfd_channel *priv = netdev_priv(ndev); 1904 1825 u32 val, ch = priv->channel; 1905 1826 1906 1827 /* Peripheral clock is already enabled in probe */ ··· 2003 1924 if (gpriv->fdmode) { 2004 1925 priv->can.bittiming_const = gpriv->info->nom_bittiming; 2005 1926 priv->can.fd.data_bittiming_const = gpriv->info->data_bittiming; 1927 + priv->can.fd.tdc_const = gpriv->info->tdc_const; 2006 1928 2007 1929 /* Controller starts in CAN FD only mode */ 2008 1930 err = can_set_static_ctrlmode(ndev, CAN_CTRLMODE_FD); 2009 1931 if (err) 2010 1932 goto fail; 2011 - priv->can.ctrlmode_supported = CAN_CTRLMODE_BERR_REPORTING; 1933 + 1934 + priv->can.ctrlmode_supported = CAN_CTRLMODE_BERR_REPORTING | 1935 + CAN_CTRLMODE_TDC_AUTO | 1936 + CAN_CTRLMODE_TDC_MANUAL; 1937 + priv->can.fd.do_get_auto_tdcv = rcar_canfd_get_auto_tdcv; 2012 1938 } else { 2013 1939 /* Controller starts in Classical CAN only mode */ 2014 1940 priv->can.bittiming_const = &rcar_canfd_bittiming_const;