Lines Matching +full:clock +full:- +full:mult

1 // SPDX-License-Identifier: GPL-2.0
4 // Marc Kleine-Budde <kernel@pengutronix.de>
24 ns = timecounter_cyc2time(&priv->tc, timestamp);
26 hwtstamps->hwtstamp = ns_to_ktime(ns);
35 timecounter_read(&priv->tc);
37 schedule_delayed_work(&priv->timestamp, priv->work_delay_jiffies);
42 const struct can_bittiming *dbt = &priv->can.fd.data_bittiming;
43 const struct can_bittiming *bt = &priv->can.bittiming;
44 struct cyclecounter *cc = &priv->cc;
49 /* At the standard clock rate of 300Mhz on the rk3658, the 32
56 bitrate = max(bt->bitrate, dbt->bitrate);
57 div = min(DIV_ROUND_UP(priv->can.clock.freq, bitrate * 2),
61 div - 1) |
65 cc->read = rkcanfd_timestamp_read;
66 cc->mask = CYCLECOUNTER_MASK(32);
68 rate = priv->can.clock.freq / div;
69 clocks_calc_mult_shift(&cc->mult, &cc->shift, rate, NSEC_PER_SEC,
72 max_cycles = div_u64(ULLONG_MAX, cc->mult);
73 max_cycles = min(max_cycles, cc->mask);
74 work_delay_ns = clocksource_cyc2ns(max_cycles, cc->mult, cc->shift);
75 priv->work_delay_jiffies = div_u64(work_delay_ns, 3u * NSEC_PER_SEC / HZ);
76 INIT_DELAYED_WORK(&priv->timestamp, rkcanfd_timestamp_work);
78 netdev_dbg(priv->ndev, "clock=%lu.%02luMHz bitrate=%lu.%02luMBit/s div=%u rate=%lu.%02luMHz mult=%u shift=%u delay=%lus\n",
79 priv->can.clock.freq / MEGA,
80 priv->can.clock.freq % MEGA / KILO / 10,
86 cc->mult, cc->shift,
87 priv->work_delay_jiffies / HZ);
92 timecounter_init(&priv->tc, &priv->cc, ktime_get_real_ns());
94 schedule_delayed_work(&priv->timestamp, priv->work_delay_jiffies);
99 cancel_delayed_work(&priv->timestamp);
104 cancel_delayed_work_sync(&priv->timestamp);