Symbol: cpts
drivers/net/ethernet/ti/am65-cpsw-ethtool.c
717
info->phc_index = am65_cpts_phc_index(common->cpts);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
1355
am65_cpts_rx_timestamp(common->cpts, skb);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
1498
am65_cpts_tx_timestamp(tx_chn->common->cpts, skb);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
1610
am65_cpts_prep_tx_timestamp(common->cpts, skb);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
2560
struct am65_cpts *cpts;
drivers/net/ethernet/ti/am65-cpsw-nuss.c
2573
cpts = am65_cpts_create(dev, reg_base, node);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
2574
if (IS_ERR(cpts)) {
drivers/net/ethernet/ti/am65-cpsw-nuss.c
2575
int ret = PTR_ERR(cpts);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
2581
common->cpts = cpts;
drivers/net/ethernet/ti/am65-cpsw-nuss.c
3660
am65_cpts_release(common->cpts);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
3699
am65_cpts_release(common->cpts);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
3740
am65_cpts_suspend(common->cpts);
drivers/net/ethernet/ti/am65-cpsw-nuss.c
3771
am65_cpts_resume(common->cpts);
drivers/net/ethernet/ti/am65-cpsw-nuss.h
180
struct am65_cpts *cpts;
drivers/net/ethernet/ti/am65-cpsw-qos.c
769
struct am65_cpts *cpts = common->cpts;
drivers/net/ethernet/ti/am65-cpsw-qos.c
775
return am65_cpts_estf_enable(cpts, port->port_id - 1, &cfg);
drivers/net/ethernet/ti/am65-cpsw-qos.c
781
struct am65_cpts *cpts = port->common->cpts;
drivers/net/ethernet/ti/am65-cpsw-qos.c
783
am65_cpts_estf_disable(cpts, port->port_id - 1);
drivers/net/ethernet/ti/am65-cpsw-qos.c
791
struct am65_cpts *cpts = port->common->cpts;
drivers/net/ethernet/ti/am65-cpsw-qos.c
817
cur_time = am65_cpts_ns_gettime(cpts);
drivers/net/ethernet/ti/am65-cpsw-qos.c
862
struct am65_cpts *cpts = common->cpts;
drivers/net/ethernet/ti/am65-cpsw-qos.c
925
cur_time = am65_cpts_ns_gettime(cpts);
drivers/net/ethernet/ti/am65-cpts.c
1004
skb_queue_tail(&cpts->txq, skb);
drivers/net/ethernet/ti/am65-cpts.c
1005
ptp_schedule_worker(cpts->ptp_clock, 0);
drivers/net/ethernet/ti/am65-cpts.c
1018
void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/am65-cpts.c
1036
int am65_cpts_phc_index(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
1038
return cpts->phc_index;
drivers/net/ethernet/ti/am65-cpts.c
1044
struct am65_cpts *cpts = data;
drivers/net/ethernet/ti/am65-cpts.c
1046
of_clk_del_provider(cpts->clk_mux_np);
drivers/net/ethernet/ti/am65-cpts.c
1047
clk_hw_unregister_mux(cpts->clk_mux_hw);
drivers/net/ethernet/ti/am65-cpts.c
1048
of_node_put(cpts->clk_mux_np);
drivers/net/ethernet/ti/am65-cpts.c
1051
static int cpts_of_mux_clk_setup(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
1060
cpts->clk_mux_np = of_get_child_by_name(node, "refclk-mux");
drivers/net/ethernet/ti/am65-cpts.c
1061
if (!cpts->clk_mux_np)
drivers/net/ethernet/ti/am65-cpts.c
1064
num_parents = of_clk_get_parent_count(cpts->clk_mux_np);
drivers/net/ethernet/ti/am65-cpts.c
1066
dev_err(cpts->dev, "mux-clock %pOF must have parents\n",
drivers/net/ethernet/ti/am65-cpts.c
1067
cpts->clk_mux_np);
drivers/net/ethernet/ti/am65-cpts.c
1071
parent_names = devm_kcalloc(cpts->dev, sizeof(char *), num_parents,
drivers/net/ethernet/ti/am65-cpts.c
1078
of_clk_parent_fill(cpts->clk_mux_np, parent_names, num_parents);
drivers/net/ethernet/ti/am65-cpts.c
1080
clk_mux_name = devm_kasprintf(cpts->dev, GFP_KERNEL, "%s.%pOFn",
drivers/net/ethernet/ti/am65-cpts.c
1081
dev_name(cpts->dev), cpts->clk_mux_np);
drivers/net/ethernet/ti/am65-cpts.c
1087
reg = &cpts->reg->rftclk_sel;
drivers/net/ethernet/ti/am65-cpts.c
1091
cpts->clk_mux_hw = clk_hw_register_mux(NULL, clk_mux_name,
drivers/net/ethernet/ti/am65-cpts.c
1094
if (IS_ERR(cpts->clk_mux_hw)) {
drivers/net/ethernet/ti/am65-cpts.c
1095
ret = PTR_ERR(cpts->clk_mux_hw);
drivers/net/ethernet/ti/am65-cpts.c
1099
ret = of_clk_add_hw_provider(cpts->clk_mux_np, of_clk_hw_simple_get,
drivers/net/ethernet/ti/am65-cpts.c
1100
cpts->clk_mux_hw);
drivers/net/ethernet/ti/am65-cpts.c
1104
ret = devm_add_action_or_reset(cpts->dev, cpts_free_clk_mux, cpts);
drivers/net/ethernet/ti/am65-cpts.c
1106
dev_err(cpts->dev, "failed to add clkmux reset action %d", ret);
drivers/net/ethernet/ti/am65-cpts.c
1111
clk_hw_unregister_mux(cpts->clk_mux_hw);
drivers/net/ethernet/ti/am65-cpts.c
1113
of_node_put(cpts->clk_mux_np);
drivers/net/ethernet/ti/am65-cpts.c
1117
static int am65_cpts_of_parse(struct am65_cpts *cpts, struct device_node *node)
drivers/net/ethernet/ti/am65-cpts.c
1122
cpts->ext_ts_inputs = prop[0];
drivers/net/ethernet/ti/am65-cpts.c
1125
cpts->genf_num = prop[0];
drivers/net/ethernet/ti/am65-cpts.c
1128
cpts->pps_present = true;
drivers/net/ethernet/ti/am65-cpts.c
1131
dev_err(cpts->dev, "invalid HWx_TS_PUSH index: %u provided\n", prop[0]);
drivers/net/ethernet/ti/am65-cpts.c
1132
cpts->pps_present = false;
drivers/net/ethernet/ti/am65-cpts.c
1135
dev_err(cpts->dev, "invalid GENFy index: %u provided\n", prop[1]);
drivers/net/ethernet/ti/am65-cpts.c
1136
cpts->pps_present = false;
drivers/net/ethernet/ti/am65-cpts.c
1138
if (cpts->pps_present) {
drivers/net/ethernet/ti/am65-cpts.c
1139
cpts->pps_hw_ts_idx = prop[0];
drivers/net/ethernet/ti/am65-cpts.c
1140
cpts->pps_genf_idx = prop[1];
drivers/net/ethernet/ti/am65-cpts.c
1144
return cpts_of_mux_clk_setup(cpts, node);
drivers/net/ethernet/ti/am65-cpts.c
1147
void am65_cpts_release(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
1149
ptp_clock_unregister(cpts->ptp_clock);
drivers/net/ethernet/ti/am65-cpts.c
1150
am65_cpts_disable(cpts);
drivers/net/ethernet/ti/am65-cpts.c
1151
clk_disable_unprepare(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1158
struct am65_cpts *cpts;
drivers/net/ethernet/ti/am65-cpts.c
1161
cpts = devm_kzalloc(dev, sizeof(*cpts), GFP_KERNEL);
drivers/net/ethernet/ti/am65-cpts.c
1162
if (!cpts)
drivers/net/ethernet/ti/am65-cpts.c
1165
cpts->dev = dev;
drivers/net/ethernet/ti/am65-cpts.c
1166
cpts->reg = (struct am65_cpts_regs __iomem *)regs;
drivers/net/ethernet/ti/am65-cpts.c
1168
cpts->irq = of_irq_get_byname(node, "cpts");
drivers/net/ethernet/ti/am65-cpts.c
1169
if (cpts->irq <= 0) {
drivers/net/ethernet/ti/am65-cpts.c
1170
ret = cpts->irq ?: -ENXIO;
drivers/net/ethernet/ti/am65-cpts.c
1175
ret = am65_cpts_of_parse(cpts, node);
drivers/net/ethernet/ti/am65-cpts.c
1179
mutex_init(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
1180
INIT_LIST_HEAD(&cpts->events_tx);
drivers/net/ethernet/ti/am65-cpts.c
1181
INIT_LIST_HEAD(&cpts->events_rx);
drivers/net/ethernet/ti/am65-cpts.c
1182
INIT_LIST_HEAD(&cpts->pool);
drivers/net/ethernet/ti/am65-cpts.c
1183
spin_lock_init(&cpts->lock);
drivers/net/ethernet/ti/am65-cpts.c
1184
skb_queue_head_init(&cpts->txq);
drivers/net/ethernet/ti/am65-cpts.c
1187
list_add(&cpts->pool_data[i].list, &cpts->pool);
drivers/net/ethernet/ti/am65-cpts.c
1189
cpts->refclk = devm_get_clk_from_child(dev, node, "cpts");
drivers/net/ethernet/ti/am65-cpts.c
1190
if (IS_ERR(cpts->refclk)) {
drivers/net/ethernet/ti/am65-cpts.c
1191
ret = PTR_ERR(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1196
ret = clk_prepare_enable(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1202
cpts->refclk_freq = clk_get_rate(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1204
am65_ptp_info.max_adj = cpts->refclk_freq / AM65_CPTS_MIN_PPM;
drivers/net/ethernet/ti/am65-cpts.c
1205
cpts->ptp_info = am65_ptp_info;
drivers/net/ethernet/ti/am65-cpts.c
1207
if (cpts->ext_ts_inputs)
drivers/net/ethernet/ti/am65-cpts.c
1208
cpts->ptp_info.n_ext_ts = cpts->ext_ts_inputs;
drivers/net/ethernet/ti/am65-cpts.c
1209
if (cpts->genf_num)
drivers/net/ethernet/ti/am65-cpts.c
1210
cpts->ptp_info.n_per_out = cpts->genf_num;
drivers/net/ethernet/ti/am65-cpts.c
1211
if (cpts->pps_present)
drivers/net/ethernet/ti/am65-cpts.c
1212
cpts->ptp_info.pps = 1;
drivers/net/ethernet/ti/am65-cpts.c
1214
am65_cpts_set_add_val(cpts);
drivers/net/ethernet/ti/am65-cpts.c
1216
am65_cpts_write32(cpts, AM65_CPTS_CONTROL_EN |
drivers/net/ethernet/ti/am65-cpts.c
1220
am65_cpts_write32(cpts, AM65_CPTS_INT_ENABLE_TS_PEND_EN, int_enable);
drivers/net/ethernet/ti/am65-cpts.c
1223
am65_cpts_settime(cpts, ktime_to_ns(ktime_get_real()));
drivers/net/ethernet/ti/am65-cpts.c
1225
cpts->ptp_clock = ptp_clock_register(&cpts->ptp_info, cpts->dev);
drivers/net/ethernet/ti/am65-cpts.c
1226
if (IS_ERR_OR_NULL(cpts->ptp_clock)) {
drivers/net/ethernet/ti/am65-cpts.c
1228
PTR_ERR(cpts->ptp_clock));
drivers/net/ethernet/ti/am65-cpts.c
1229
ret = cpts->ptp_clock ? PTR_ERR(cpts->ptp_clock) : -ENODEV;
drivers/net/ethernet/ti/am65-cpts.c
1232
cpts->phc_index = ptp_clock_index(cpts->ptp_clock);
drivers/net/ethernet/ti/am65-cpts.c
1234
ret = devm_request_threaded_irq(dev, cpts->irq, NULL,
drivers/net/ethernet/ti/am65-cpts.c
1236
IRQF_ONESHOT, dev_name(dev), cpts);
drivers/net/ethernet/ti/am65-cpts.c
1238
dev_err(cpts->dev, "error attaching irq %d\n", ret);
drivers/net/ethernet/ti/am65-cpts.c
1243
am65_cpts_read32(cpts, idver),
drivers/net/ethernet/ti/am65-cpts.c
1244
cpts->refclk_freq, cpts->ts_add_val, cpts->pps_present);
drivers/net/ethernet/ti/am65-cpts.c
1246
return cpts;
drivers/net/ethernet/ti/am65-cpts.c
1249
am65_cpts_release(cpts);
drivers/net/ethernet/ti/am65-cpts.c
1251
clk_disable_unprepare(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1256
void am65_cpts_suspend(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
1259
cpts->sr_control = am65_cpts_read32(cpts, control);
drivers/net/ethernet/ti/am65-cpts.c
1260
cpts->sr_int_enable = am65_cpts_read32(cpts, int_enable);
drivers/net/ethernet/ti/am65-cpts.c
1261
cpts->sr_rftclk_sel = am65_cpts_read32(cpts, rftclk_sel);
drivers/net/ethernet/ti/am65-cpts.c
1262
cpts->sr_ts_ppm_hi = am65_cpts_read32(cpts, ts_ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
1263
cpts->sr_ts_ppm_low = am65_cpts_read32(cpts, ts_ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
1264
cpts->sr_cpts_ns = am65_cpts_gettime(cpts, NULL);
drivers/net/ethernet/ti/am65-cpts.c
1265
cpts->sr_ktime_ns = ktime_to_ns(ktime_get_real());
drivers/net/ethernet/ti/am65-cpts.c
1266
am65_cpts_disable(cpts);
drivers/net/ethernet/ti/am65-cpts.c
1267
clk_disable(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1270
memcpy_fromio(&cpts->sr_genf, &cpts->reg->genf, sizeof(cpts->sr_genf));
drivers/net/ethernet/ti/am65-cpts.c
1273
memcpy_fromio(&cpts->sr_estf, &cpts->reg->estf, sizeof(cpts->sr_estf));
drivers/net/ethernet/ti/am65-cpts.c
1277
void am65_cpts_resume(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
1283
clk_enable(cpts->refclk);
drivers/net/ethernet/ti/am65-cpts.c
1284
am65_cpts_write32(cpts, cpts->sr_rftclk_sel, rftclk_sel);
drivers/net/ethernet/ti/am65-cpts.c
1285
am65_cpts_set_add_val(cpts);
drivers/net/ethernet/ti/am65-cpts.c
1286
am65_cpts_write32(cpts, cpts->sr_control, control);
drivers/net/ethernet/ti/am65-cpts.c
1287
am65_cpts_write32(cpts, cpts->sr_int_enable, int_enable);
drivers/net/ethernet/ti/am65-cpts.c
1291
ktime_ns -= cpts->sr_ktime_ns;
drivers/net/ethernet/ti/am65-cpts.c
1292
am65_cpts_settime(cpts, cpts->sr_cpts_ns + ktime_ns);
drivers/net/ethernet/ti/am65-cpts.c
1295
am65_cpts_write32(cpts, cpts->sr_ts_ppm_hi, ts_ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
1296
am65_cpts_write32(cpts, cpts->sr_ts_ppm_low, ts_ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
1300
am65_cpts_write32(cpts, 0, genf[i].length); /* TRM sequence */
drivers/net/ethernet/ti/am65-cpts.c
1301
am65_cpts_write32(cpts, cpts->sr_genf[i].comp_hi, genf[i].comp_hi);
drivers/net/ethernet/ti/am65-cpts.c
1302
am65_cpts_write32(cpts, cpts->sr_genf[i].comp_lo, genf[i].comp_lo);
drivers/net/ethernet/ti/am65-cpts.c
1303
am65_cpts_write32(cpts, cpts->sr_genf[i].length, genf[i].length);
drivers/net/ethernet/ti/am65-cpts.c
1304
am65_cpts_write32(cpts, cpts->sr_genf[i].control, genf[i].control);
drivers/net/ethernet/ti/am65-cpts.c
1305
am65_cpts_write32(cpts, cpts->sr_genf[i].ppm_hi, genf[i].ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
1306
am65_cpts_write32(cpts, cpts->sr_genf[i].ppm_low, genf[i].ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
1311
am65_cpts_write32(cpts, 0, estf[i].length); /* TRM sequence */
drivers/net/ethernet/ti/am65-cpts.c
1312
am65_cpts_write32(cpts, cpts->sr_estf[i].comp_hi, estf[i].comp_hi);
drivers/net/ethernet/ti/am65-cpts.c
1313
am65_cpts_write32(cpts, cpts->sr_estf[i].comp_lo, estf[i].comp_lo);
drivers/net/ethernet/ti/am65-cpts.c
1314
am65_cpts_write32(cpts, cpts->sr_estf[i].length, estf[i].length);
drivers/net/ethernet/ti/am65-cpts.c
1315
am65_cpts_write32(cpts, cpts->sr_estf[i].control, estf[i].control);
drivers/net/ethernet/ti/am65-cpts.c
1316
am65_cpts_write32(cpts, cpts->sr_estf[i].ppm_hi, estf[i].ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
1317
am65_cpts_write32(cpts, cpts->sr_estf[i].ppm_low, estf[i].ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
1326
struct am65_cpts *cpts;
drivers/net/ethernet/ti/am65-cpts.c
1333
cpts = am65_cpts_create(dev, base, node);
drivers/net/ethernet/ti/am65-cpts.c
1334
return PTR_ERR_OR_ZERO(cpts);
drivers/net/ethernet/ti/am65-cpts.c
206
static void am65_cpts_settime(struct am65_cpts *cpts, u64 start_tstamp)
drivers/net/ethernet/ti/am65-cpts.c
211
am65_cpts_write32(cpts, val, ts_load_val_hi);
drivers/net/ethernet/ti/am65-cpts.c
213
am65_cpts_write32(cpts, val, ts_load_val_lo);
drivers/net/ethernet/ti/am65-cpts.c
215
am65_cpts_write32(cpts, AM65_CPTS_TS_LOAD_EN, ts_load_en);
drivers/net/ethernet/ti/am65-cpts.c
218
static void am65_cpts_set_add_val(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
221
cpts->ts_add_val = (NSEC_PER_SEC / cpts->refclk_freq - 1) & 0x7;
drivers/net/ethernet/ti/am65-cpts.c
223
am65_cpts_write32(cpts, cpts->ts_add_val, ts_add_val);
drivers/net/ethernet/ti/am65-cpts.c
226
static void am65_cpts_disable(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
228
am65_cpts_write32(cpts, 0, control);
drivers/net/ethernet/ti/am65-cpts.c
229
am65_cpts_write32(cpts, 0, int_enable);
drivers/net/ethernet/ti/am65-cpts.c
232
static int am65_cpts_purge_event_list(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
243
list_add(&event->list, &cpts->pool);
drivers/net/ethernet/ti/am65-cpts.c
262
static int am65_cpts_purge_events(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
266
removed += am65_cpts_purge_event_list(cpts, &cpts->events_tx);
drivers/net/ethernet/ti/am65-cpts.c
267
removed += am65_cpts_purge_event_list(cpts, &cpts->events_rx);
drivers/net/ethernet/ti/am65-cpts.c
270
dev_dbg(cpts->dev, "event pool cleaned up %d\n", removed);
drivers/net/ethernet/ti/am65-cpts.c
274
static bool am65_cpts_fifo_pop_event(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
277
u32 r = am65_cpts_read32(cpts, intstat_raw);
drivers/net/ethernet/ti/am65-cpts.c
280
event->timestamp = am65_cpts_read32(cpts, event_0);
drivers/net/ethernet/ti/am65-cpts.c
281
event->event1 = am65_cpts_read32(cpts, event_1);
drivers/net/ethernet/ti/am65-cpts.c
282
event->event2 = am65_cpts_read32(cpts, event_2);
drivers/net/ethernet/ti/am65-cpts.c
283
event->timestamp |= (u64)am65_cpts_read32(cpts, event_3) << 32;
drivers/net/ethernet/ti/am65-cpts.c
284
am65_cpts_write32(cpts, AM65_CPTS_EVENT_POP, event_pop);
drivers/net/ethernet/ti/am65-cpts.c
290
static int __am65_cpts_fifo_read(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
298
event = list_first_entry_or_null(&cpts->pool,
drivers/net/ethernet/ti/am65-cpts.c
302
if (am65_cpts_purge_events(cpts)) {
drivers/net/ethernet/ti/am65-cpts.c
303
dev_err(cpts->dev, "cpts: event pool empty\n");
drivers/net/ethernet/ti/am65-cpts.c
310
if (am65_cpts_fifo_pop_event(cpts, event))
drivers/net/ethernet/ti/am65-cpts.c
316
cpts->timestamp = event->timestamp;
drivers/net/ethernet/ti/am65-cpts.c
317
dev_dbg(cpts->dev, "AM65_CPTS_EV_PUSH t:%llu\n",
drivers/net/ethernet/ti/am65-cpts.c
318
cpts->timestamp);
drivers/net/ethernet/ti/am65-cpts.c
324
list_move_tail(&event->list, &cpts->events_rx);
drivers/net/ethernet/ti/am65-cpts.c
326
dev_dbg(cpts->dev,
drivers/net/ethernet/ti/am65-cpts.c
335
list_move_tail(&event->list, &cpts->events_tx);
drivers/net/ethernet/ti/am65-cpts.c
337
dev_dbg(cpts->dev,
drivers/net/ethernet/ti/am65-cpts.c
346
if (cpts->pps_enabled && pevent.index == cpts->pps_hw_ts_idx) {
drivers/net/ethernet/ti/am65-cpts.c
352
dev_dbg(cpts->dev, "AM65_CPTS_EV_HW:%s p:%d t:%llu\n",
drivers/net/ethernet/ti/am65-cpts.c
357
ptp_clock_event(cpts->ptp_clock, &pevent);
drivers/net/ethernet/ti/am65-cpts.c
364
dev_dbg(cpts->dev,
drivers/net/ethernet/ti/am65-cpts.c
371
dev_err(cpts->dev, "cpts: unknown event type\n");
drivers/net/ethernet/ti/am65-cpts.c
379
ptp_schedule_worker(cpts->ptp_clock, 0);
drivers/net/ethernet/ti/am65-cpts.c
384
static int am65_cpts_fifo_read(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
389
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
390
ret = __am65_cpts_fifo_read(cpts);
drivers/net/ethernet/ti/am65-cpts.c
391
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
396
static u64 am65_cpts_gettime(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
405
am65_cpts_write32(cpts, 0, int_enable);
drivers/net/ethernet/ti/am65-cpts.c
408
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
410
am65_cpts_write32(cpts, AM65_CPTS_TS_PUSH, ts_push);
drivers/net/ethernet/ti/am65-cpts.c
411
am65_cpts_read32(cpts, ts_push);
drivers/net/ethernet/ti/am65-cpts.c
413
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
415
am65_cpts_fifo_read(cpts);
drivers/net/ethernet/ti/am65-cpts.c
417
am65_cpts_write32(cpts, AM65_CPTS_INT_ENABLE_TS_PEND_EN, int_enable);
drivers/net/ethernet/ti/am65-cpts.c
419
val = cpts->timestamp;
drivers/net/ethernet/ti/am65-cpts.c
426
struct am65_cpts *cpts = dev_id;
drivers/net/ethernet/ti/am65-cpts.c
428
if (am65_cpts_fifo_read(cpts))
drivers/net/ethernet/ti/am65-cpts.c
429
dev_dbg(cpts->dev, "cpts: unable to obtain a time stamp\n");
drivers/net/ethernet/ti/am65-cpts.c
437
struct am65_cpts *cpts = container_of(ptp, struct am65_cpts, ptp_info);
drivers/net/ethernet/ti/am65-cpts.c
440
int pps_index = cpts->pps_genf_idx;
drivers/net/ethernet/ti/am65-cpts.c
460
adj_period = div_u64(cpts->refclk_freq, ppb);
drivers/net/ethernet/ti/am65-cpts.c
462
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
464
ctrl_val = am65_cpts_read32(cpts, control);
drivers/net/ethernet/ti/am65-cpts.c
473
if (cpts->pps_enabled) {
drivers/net/ethernet/ti/am65-cpts.c
474
estf_ctrl_val = am65_cpts_read32(cpts, genf[pps_index].control);
drivers/net/ethernet/ti/am65-cpts.c
484
pps_adj_period = adj_period * (cpts->ts_add_val + 1);
drivers/net/ethernet/ti/am65-cpts.c
489
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
499
am65_cpts_write32(cpts, ctrl_val, control);
drivers/net/ethernet/ti/am65-cpts.c
500
am65_cpts_write32(cpts, ppm_hi, ts_ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
501
am65_cpts_write32(cpts, ppm_low, ts_ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
503
if (cpts->pps_enabled) {
drivers/net/ethernet/ti/am65-cpts.c
504
am65_cpts_write32(cpts, estf_ctrl_val, genf[pps_index].control);
drivers/net/ethernet/ti/am65-cpts.c
505
am65_cpts_write32(cpts, estf_ppm_hi, genf[pps_index].ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
506
am65_cpts_write32(cpts, estf_ppm_low, genf[pps_index].ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
510
if (cpts->estf_enable & BIT(i)) {
drivers/net/ethernet/ti/am65-cpts.c
511
am65_cpts_write32(cpts, estf_ctrl_val, estf[i].control);
drivers/net/ethernet/ti/am65-cpts.c
512
am65_cpts_write32(cpts, estf_ppm_hi, estf[i].ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
513
am65_cpts_write32(cpts, estf_ppm_low, estf[i].ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
517
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
519
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
526
struct am65_cpts *cpts = container_of(ptp, struct am65_cpts, ptp_info);
drivers/net/ethernet/ti/am65-cpts.c
529
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
530
ns = am65_cpts_gettime(cpts, NULL);
drivers/net/ethernet/ti/am65-cpts.c
532
am65_cpts_settime(cpts, ns);
drivers/net/ethernet/ti/am65-cpts.c
533
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
542
struct am65_cpts *cpts = container_of(ptp, struct am65_cpts, ptp_info);
drivers/net/ethernet/ti/am65-cpts.c
545
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
546
ns = am65_cpts_gettime(cpts, sts);
drivers/net/ethernet/ti/am65-cpts.c
547
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
553
u64 am65_cpts_ns_gettime(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
558
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
559
ns = am65_cpts_gettime(cpts, NULL);
drivers/net/ethernet/ti/am65-cpts.c
560
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
569
struct am65_cpts *cpts = container_of(ptp, struct am65_cpts, ptp_info);
drivers/net/ethernet/ti/am65-cpts.c
573
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
574
am65_cpts_settime(cpts, ns);
drivers/net/ethernet/ti/am65-cpts.c
575
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
580
static void am65_cpts_extts_enable_hw(struct am65_cpts *cpts, u32 index, int on)
drivers/net/ethernet/ti/am65-cpts.c
584
v = am65_cpts_read32(cpts, control);
drivers/net/ethernet/ti/am65-cpts.c
587
cpts->hw_ts_enable |= BIT(index);
drivers/net/ethernet/ti/am65-cpts.c
590
cpts->hw_ts_enable &= ~BIT(index);
drivers/net/ethernet/ti/am65-cpts.c
592
am65_cpts_write32(cpts, v, control);
drivers/net/ethernet/ti/am65-cpts.c
595
static int am65_cpts_extts_enable(struct am65_cpts *cpts, u32 index, int on)
drivers/net/ethernet/ti/am65-cpts.c
597
if (index >= cpts->ptp_info.n_ext_ts)
drivers/net/ethernet/ti/am65-cpts.c
600
if (cpts->pps_present && index == cpts->pps_hw_ts_idx)
drivers/net/ethernet/ti/am65-cpts.c
603
if (((cpts->hw_ts_enable & BIT(index)) >> index) == on)
drivers/net/ethernet/ti/am65-cpts.c
606
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
607
am65_cpts_extts_enable_hw(cpts, index, on);
drivers/net/ethernet/ti/am65-cpts.c
608
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
610
dev_dbg(cpts->dev, "%s: ExtTS:%u %s\n",
drivers/net/ethernet/ti/am65-cpts.c
616
int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
drivers/net/ethernet/ti/am65-cpts.c
622
cycles = cfg->ns_period * cpts->refclk_freq;
drivers/net/ethernet/ti/am65-cpts.c
628
am65_cpts_write32(cpts, 0, estf[idx].length);
drivers/net/ethernet/ti/am65-cpts.c
631
am65_cpts_write32(cpts, val, estf[idx].comp_hi);
drivers/net/ethernet/ti/am65-cpts.c
633
am65_cpts_write32(cpts, val, estf[idx].comp_lo);
drivers/net/ethernet/ti/am65-cpts.c
635
am65_cpts_write32(cpts, val, estf[idx].length);
drivers/net/ethernet/ti/am65-cpts.c
636
am65_cpts_write32(cpts, 0, estf[idx].control);
drivers/net/ethernet/ti/am65-cpts.c
637
am65_cpts_write32(cpts, 0, estf[idx].ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
638
am65_cpts_write32(cpts, 0, estf[idx].ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
640
cpts->estf_enable |= BIT(idx);
drivers/net/ethernet/ti/am65-cpts.c
642
dev_dbg(cpts->dev, "%s: ESTF:%u enabled\n", __func__, idx);
drivers/net/ethernet/ti/am65-cpts.c
648
void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx)
drivers/net/ethernet/ti/am65-cpts.c
650
am65_cpts_write32(cpts, 0, estf[idx].length);
drivers/net/ethernet/ti/am65-cpts.c
651
cpts->estf_enable &= ~BIT(idx);
drivers/net/ethernet/ti/am65-cpts.c
653
dev_dbg(cpts->dev, "%s: ESTF:%u disabled\n", __func__, idx);
drivers/net/ethernet/ti/am65-cpts.c
657
static void am65_cpts_perout_enable_hw(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
669
cycles = (ns_period * cpts->refclk_freq) / NSEC_PER_SEC;
drivers/net/ethernet/ti/am65-cpts.c
676
am65_cpts_write32(cpts, val, genf[req->index].comp_hi);
drivers/net/ethernet/ti/am65-cpts.c
678
am65_cpts_write32(cpts, val, genf[req->index].comp_lo);
drivers/net/ethernet/ti/am65-cpts.c
680
am65_cpts_write32(cpts, val, genf[req->index].length);
drivers/net/ethernet/ti/am65-cpts.c
682
am65_cpts_write32(cpts, 0, genf[req->index].control);
drivers/net/ethernet/ti/am65-cpts.c
683
am65_cpts_write32(cpts, 0, genf[req->index].ppm_hi);
drivers/net/ethernet/ti/am65-cpts.c
684
am65_cpts_write32(cpts, 0, genf[req->index].ppm_low);
drivers/net/ethernet/ti/am65-cpts.c
686
cpts->genf_enable |= BIT(req->index);
drivers/net/ethernet/ti/am65-cpts.c
688
am65_cpts_write32(cpts, 0, genf[req->index].length);
drivers/net/ethernet/ti/am65-cpts.c
690
cpts->genf_enable &= ~BIT(req->index);
drivers/net/ethernet/ti/am65-cpts.c
694
static int am65_cpts_perout_enable(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
697
if (req->index >= cpts->ptp_info.n_per_out)
drivers/net/ethernet/ti/am65-cpts.c
700
if (cpts->pps_present && req->index == cpts->pps_genf_idx)
drivers/net/ethernet/ti/am65-cpts.c
703
if (!!(cpts->genf_enable & BIT(req->index)) == !!on)
drivers/net/ethernet/ti/am65-cpts.c
706
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
707
am65_cpts_perout_enable_hw(cpts, req, on);
drivers/net/ethernet/ti/am65-cpts.c
708
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
710
dev_dbg(cpts->dev, "%s: GenF:%u %s\n",
drivers/net/ethernet/ti/am65-cpts.c
716
static int am65_cpts_pps_enable(struct am65_cpts *cpts, int on)
drivers/net/ethernet/ti/am65-cpts.c
723
if (!cpts->pps_present)
drivers/net/ethernet/ti/am65-cpts.c
726
if (cpts->pps_enabled == !!on)
drivers/net/ethernet/ti/am65-cpts.c
729
mutex_lock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
732
am65_cpts_extts_enable_hw(cpts, cpts->pps_hw_ts_idx, on);
drivers/net/ethernet/ti/am65-cpts.c
734
ns = am65_cpts_gettime(cpts, NULL);
drivers/net/ethernet/ti/am65-cpts.c
740
rq.perout.index = cpts->pps_genf_idx;
drivers/net/ethernet/ti/am65-cpts.c
742
am65_cpts_perout_enable_hw(cpts, &rq.perout, on);
drivers/net/ethernet/ti/am65-cpts.c
743
cpts->pps_enabled = true;
drivers/net/ethernet/ti/am65-cpts.c
745
rq.perout.index = cpts->pps_genf_idx;
drivers/net/ethernet/ti/am65-cpts.c
746
am65_cpts_perout_enable_hw(cpts, &rq.perout, on);
drivers/net/ethernet/ti/am65-cpts.c
747
am65_cpts_extts_enable_hw(cpts, cpts->pps_hw_ts_idx, on);
drivers/net/ethernet/ti/am65-cpts.c
748
cpts->pps_enabled = false;
drivers/net/ethernet/ti/am65-cpts.c
751
mutex_unlock(&cpts->ptp_clk_lock);
drivers/net/ethernet/ti/am65-cpts.c
753
dev_dbg(cpts->dev, "%s: pps: %s\n",
drivers/net/ethernet/ti/am65-cpts.c
761
struct am65_cpts *cpts = container_of(ptp, struct am65_cpts, ptp_info);
drivers/net/ethernet/ti/am65-cpts.c
765
return am65_cpts_extts_enable(cpts, rq->extts.index, on);
drivers/net/ethernet/ti/am65-cpts.c
767
return am65_cpts_perout_enable(cpts, &rq->perout, on);
drivers/net/ethernet/ti/am65-cpts.c
769
return am65_cpts_pps_enable(cpts, on);
drivers/net/ethernet/ti/am65-cpts.c
790
static bool am65_cpts_match_tx_ts(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.c
806
spin_lock_irqsave(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
807
skb_queue_splice_init(&cpts->txq, &txq_list);
drivers/net/ethernet/ti/am65-cpts.c
808
spin_unlock_irqrestore(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
830
dev_dbg(cpts->dev,
drivers/net/ethernet/ti/am65-cpts.c
838
dev_dbg(cpts->dev,
drivers/net/ethernet/ti/am65-cpts.c
846
spin_lock_irqsave(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
847
skb_queue_splice(&txq_list, &cpts->txq);
drivers/net/ethernet/ti/am65-cpts.c
848
spin_unlock_irqrestore(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
853
static void am65_cpts_find_tx_ts(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.c
861
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
862
list_splice_init(&cpts->events_tx, &events);
drivers/net/ethernet/ti/am65-cpts.c
863
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
867
if (am65_cpts_match_tx_ts(cpts, event) ||
drivers/net/ethernet/ti/am65-cpts.c
874
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
875
list_splice_tail(&events, &cpts->events_tx);
drivers/net/ethernet/ti/am65-cpts.c
876
list_splice_tail(&events_free, &cpts->pool);
drivers/net/ethernet/ti/am65-cpts.c
877
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
882
struct am65_cpts *cpts = container_of(ptp, struct am65_cpts, ptp_info);
drivers/net/ethernet/ti/am65-cpts.c
886
am65_cpts_find_tx_ts(cpts);
drivers/net/ethernet/ti/am65-cpts.c
888
spin_lock_irqsave(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
889
if (!skb_queue_empty(&cpts->txq))
drivers/net/ethernet/ti/am65-cpts.c
891
spin_unlock_irqrestore(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
920
static u64 am65_cpts_find_rx_ts(struct am65_cpts *cpts, u32 skb_mtype_seqid)
drivers/net/ethernet/ti/am65-cpts.c
928
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
929
__am65_cpts_fifo_read(cpts);
drivers/net/ethernet/ti/am65-cpts.c
930
list_for_each_safe(this, next, &cpts->events_rx) {
drivers/net/ethernet/ti/am65-cpts.c
933
list_move(&event->list, &cpts->pool);
drivers/net/ethernet/ti/am65-cpts.c
944
list_move(&event->list, &cpts->pool);
drivers/net/ethernet/ti/am65-cpts.c
948
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/am65-cpts.c
953
void am65_cpts_rx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/am65-cpts.c
971
dev_dbg(cpts->dev, "%s mtype seqid %08x\n", __func__, skb_cb->skb_mtype_seqid);
drivers/net/ethernet/ti/am65-cpts.c
973
ns = am65_cpts_find_rx_ts(cpts, skb_cb->skb_mtype_seqid);
drivers/net/ethernet/ti/am65-cpts.c
991
void am65_cpts_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/am65-cpts.h
21
void am65_cpts_release(struct am65_cpts *cpts);
drivers/net/ethernet/ti/am65-cpts.h
24
int am65_cpts_phc_index(struct am65_cpts *cpts);
drivers/net/ethernet/ti/am65-cpts.h
25
void am65_cpts_rx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
drivers/net/ethernet/ti/am65-cpts.h
26
void am65_cpts_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
drivers/net/ethernet/ti/am65-cpts.h
27
void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
drivers/net/ethernet/ti/am65-cpts.h
28
u64 am65_cpts_ns_gettime(struct am65_cpts *cpts);
drivers/net/ethernet/ti/am65-cpts.h
29
int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
drivers/net/ethernet/ti/am65-cpts.h
31
void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx);
drivers/net/ethernet/ti/am65-cpts.h
32
void am65_cpts_suspend(struct am65_cpts *cpts);
drivers/net/ethernet/ti/am65-cpts.h
33
void am65_cpts_resume(struct am65_cpts *cpts);
drivers/net/ethernet/ti/am65-cpts.h
35
static inline void am65_cpts_release(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.h
46
static inline int am65_cpts_phc_index(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.h
51
static inline void am65_cpts_rx_timestamp(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.h
56
static inline void am65_cpts_tx_timestamp(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.h
61
static inline void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts,
drivers/net/ethernet/ti/am65-cpts.h
66
static inline s64 am65_cpts_ns_gettime(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.h
71
static inline int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
drivers/net/ethernet/ti/am65-cpts.h
77
static inline void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx)
drivers/net/ethernet/ti/am65-cpts.h
81
static inline void am65_cpts_suspend(struct am65_cpts *cpts)
drivers/net/ethernet/ti/am65-cpts.h
85
static inline void am65_cpts_resume(struct am65_cpts *cpts)
drivers/net/ethernet/ti/cpsw.c
1744
if (!cpsw->cpts)
drivers/net/ethernet/ti/cpsw.c
1755
cpts_set_irqpoll(cpsw->cpts, false);
drivers/net/ethernet/ti/cpsw.c
1769
cpts_release(cpsw->cpts);
drivers/net/ethernet/ti/cpsw.c
1806
cpts_release(cpsw->cpts);
drivers/net/ethernet/ti/cpsw.c
453
cpts_rx_timestamp(cpsw->cpts, skb);
drivers/net/ethernet/ti/cpsw.c
858
if (cpsw->cpts) {
drivers/net/ethernet/ti/cpsw.c
859
if (cpts_register(cpsw->cpts))
drivers/net/ethernet/ti/cpsw.c
909
cpts_unregister(cpsw->cpts);
drivers/net/ethernet/ti/cpsw.c
930
struct cpts *cpts = cpsw->cpts;
drivers/net/ethernet/ti/cpsw.c
942
priv->tx_ts_enabled && cpts_can_timestamp(cpts, skb))
drivers/net/ethernet/ti/cpsw_ethtool.c
714
info->phc_index = cpsw->cpts->phc_index;
drivers/net/ethernet/ti/cpsw_new.c
2029
if (!cpsw->cpts)
drivers/net/ethernet/ti/cpsw_new.c
2040
cpts_set_irqpoll(cpsw->cpts, false);
drivers/net/ethernet/ti/cpsw_new.c
2068
cpts_release(cpsw->cpts);
drivers/net/ethernet/ti/cpsw_new.c
2096
cpts_release(cpsw->cpts);
drivers/net/ethernet/ti/cpsw_new.c
397
cpts_rx_timestamp(cpsw->cpts, skb);
drivers/net/ethernet/ti/cpsw_new.c
837
cpts_unregister(cpsw->cpts);
drivers/net/ethernet/ti/cpsw_new.c
895
if (cpsw->cpts) {
drivers/net/ethernet/ti/cpsw_new.c
896
if (cpts_register(cpsw->cpts))
drivers/net/ethernet/ti/cpsw_new.c
945
struct cpts *cpts = cpsw->cpts;
drivers/net/ethernet/ti/cpsw_new.c
957
priv->tx_ts_enabled && cpts_can_timestamp(cpts, skb))
drivers/net/ethernet/ti/cpsw_priv.c
124
cpts_misc_interrupt(cpsw->cpts);
drivers/net/ethernet/ti/cpsw_priv.c
541
cpsw->cpts = cpts_create(cpsw->dev, cpts_regs, cpts_node,
drivers/net/ethernet/ti/cpsw_priv.c
543
if (IS_ERR(cpsw->cpts)) {
drivers/net/ethernet/ti/cpsw_priv.c
544
ret = PTR_ERR(cpsw->cpts);
drivers/net/ethernet/ti/cpsw_priv.c
71
cpts_tx_timestamp(ndev_to_cpsw(ndev)->cpts, skb);
drivers/net/ethernet/ti/cpsw_priv.h
355
struct cpts *cpts;
drivers/net/ethernet/ti/cpts.c
105
static int cpts_fifo_read(struct cpts *cpts, int match)
drivers/net/ethernet/ti/cpts.c
114
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
117
if (cpts_fifo_pop(cpts, &hi, &lo))
drivers/net/ethernet/ti/cpts.c
120
if (list_empty(&cpts->pool) && cpts_purge_events(cpts)) {
drivers/net/ethernet/ti/cpts.c
121
dev_warn(cpts->dev, "cpts: event pool empty\n");
drivers/net/ethernet/ti/cpts.c
125
event = list_first_entry(&cpts->pool, struct cpts_event, list);
drivers/net/ethernet/ti/cpts.c
128
event->timestamp = timecounter_cyc2time(&cpts->tc, event->low);
drivers/net/ethernet/ti/cpts.c
131
dev_dbg(cpts->dev, "CPTS_EV: %d high:%08X low:%08x\n",
drivers/net/ethernet/ti/cpts.c
135
WRITE_ONCE(cpts->cur_timestamp, lo);
drivers/net/ethernet/ti/cpts.c
136
timecounter_read(&cpts->tc);
drivers/net/ethernet/ti/cpts.c
137
if (cpts->mult_new) {
drivers/net/ethernet/ti/cpts.c
138
cpts->cc.mult = cpts->mult_new;
drivers/net/ethernet/ti/cpts.c
139
cpts->mult_new = 0;
drivers/net/ethernet/ti/cpts.c
141
if (!cpts->irq_poll)
drivers/net/ethernet/ti/cpts.c
142
complete(&cpts->ts_push_complete);
drivers/net/ethernet/ti/cpts.c
150
list_add_tail(&event->list, &cpts->events);
drivers/net/ethernet/ti/cpts.c
160
ptp_clock_event(cpts->clock, &pevent);
drivers/net/ethernet/ti/cpts.c
163
dev_err(cpts->dev, "cpts: unknown event type\n");
drivers/net/ethernet/ti/cpts.c
170
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
172
if (!cpts->irq_poll && need_schedule)
drivers/net/ethernet/ti/cpts.c
173
ptp_schedule_worker(cpts->clock, 0);
drivers/net/ethernet/ti/cpts.c
178
void cpts_misc_interrupt(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
180
cpts_fifo_read(cpts, -1);
drivers/net/ethernet/ti/cpts.c
186
struct cpts *cpts = container_of(cc, struct cpts, cc);
drivers/net/ethernet/ti/cpts.c
188
return READ_ONCE(cpts->cur_timestamp);
drivers/net/ethernet/ti/cpts.c
191
static void cpts_update_cur_time(struct cpts *cpts, int match,
drivers/net/ethernet/ti/cpts.c
196
reinit_completion(&cpts->ts_push_complete);
drivers/net/ethernet/ti/cpts.c
199
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
201
cpts_write32(cpts, TS_PUSH, ts_push);
drivers/net/ethernet/ti/cpts.c
202
cpts_read32(cpts, ts_push);
drivers/net/ethernet/ti/cpts.c
204
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
206
if (cpts->irq_poll && cpts_fifo_read(cpts, match) && match != -1)
drivers/net/ethernet/ti/cpts.c
207
dev_err(cpts->dev, "cpts: unable to obtain a time stamp\n");
drivers/net/ethernet/ti/cpts.c
209
if (!cpts->irq_poll &&
drivers/net/ethernet/ti/cpts.c
210
!wait_for_completion_timeout(&cpts->ts_push_complete, HZ))
drivers/net/ethernet/ti/cpts.c
211
dev_err(cpts->dev, "cpts: obtain a time stamp timeout\n");
drivers/net/ethernet/ti/cpts.c
218
struct cpts *cpts = container_of(ptp, struct cpts, info);
drivers/net/ethernet/ti/cpts.c
220
mutex_lock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
222
cpts->mult_new = adjust_by_scaled_ppm(cpts->cc_mult, scaled_ppm);
drivers/net/ethernet/ti/cpts.c
224
cpts_update_cur_time(cpts, CPTS_EV_PUSH, NULL);
drivers/net/ethernet/ti/cpts.c
226
mutex_unlock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
232
struct cpts *cpts = container_of(ptp, struct cpts, info);
drivers/net/ethernet/ti/cpts.c
234
mutex_lock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
235
timecounter_adjtime(&cpts->tc, delta);
drivers/net/ethernet/ti/cpts.c
236
mutex_unlock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
245
struct cpts *cpts = container_of(ptp, struct cpts, info);
drivers/net/ethernet/ti/cpts.c
248
mutex_lock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
250
cpts_update_cur_time(cpts, CPTS_EV_PUSH, sts);
drivers/net/ethernet/ti/cpts.c
252
ns = timecounter_read(&cpts->tc);
drivers/net/ethernet/ti/cpts.c
253
mutex_unlock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
263
struct cpts *cpts = container_of(ptp, struct cpts, info);
drivers/net/ethernet/ti/cpts.c
268
mutex_lock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
269
timecounter_init(&cpts->tc, &cpts->cc, ns);
drivers/net/ethernet/ti/cpts.c
270
mutex_unlock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
275
static int cpts_extts_enable(struct cpts *cpts, u32 index, int on)
drivers/net/ethernet/ti/cpts.c
279
if (((cpts->hw_ts_enable & BIT(index)) >> index) == on)
drivers/net/ethernet/ti/cpts.c
282
mutex_lock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
284
v = cpts_read32(cpts, control);
drivers/net/ethernet/ti/cpts.c
287
cpts->hw_ts_enable |= BIT(index);
drivers/net/ethernet/ti/cpts.c
290
cpts->hw_ts_enable &= ~BIT(index);
drivers/net/ethernet/ti/cpts.c
292
cpts_write32(cpts, v, control);
drivers/net/ethernet/ti/cpts.c
294
mutex_unlock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
302
struct cpts *cpts = container_of(ptp, struct cpts, info);
drivers/net/ethernet/ti/cpts.c
306
return cpts_extts_enable(cpts, rq->extts.index, on);
drivers/net/ethernet/ti/cpts.c
314
static bool cpts_match_tx_ts(struct cpts *cpts, struct cpts_event *event)
drivers/net/ethernet/ti/cpts.c
329
spin_lock_irqsave(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/cpts.c
330
skb_queue_splice_init(&cpts->txq, &txq_list);
drivers/net/ethernet/ti/cpts.c
331
spin_unlock_irqrestore(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/cpts.c
345
dev_dbg(cpts->dev, "match tx timestamp mtype_seqid %08x\n",
drivers/net/ethernet/ti/cpts.c
352
dev_dbg(cpts->dev, "expiring tx timestamp from txq\n");
drivers/net/ethernet/ti/cpts.c
358
spin_lock_irqsave(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/cpts.c
359
skb_queue_splice(&txq_list, &cpts->txq);
drivers/net/ethernet/ti/cpts.c
360
spin_unlock_irqrestore(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/cpts.c
365
static void cpts_process_events(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
373
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
374
list_splice_init(&cpts->events, &events);
drivers/net/ethernet/ti/cpts.c
375
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
379
if (cpts_match_tx_ts(cpts, event) ||
drivers/net/ethernet/ti/cpts.c
386
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
387
list_splice_tail(&events, &cpts->events);
drivers/net/ethernet/ti/cpts.c
388
list_splice_tail(&events_free, &cpts->pool);
drivers/net/ethernet/ti/cpts.c
389
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
394
struct cpts *cpts = container_of(ptp, struct cpts, info);
drivers/net/ethernet/ti/cpts.c
395
unsigned long delay = cpts->ov_check_period;
drivers/net/ethernet/ti/cpts.c
399
mutex_lock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
401
cpts_update_cur_time(cpts, -1, NULL);
drivers/net/ethernet/ti/cpts.c
402
ns = timecounter_read(&cpts->tc);
drivers/net/ethernet/ti/cpts.c
404
cpts_process_events(cpts);
drivers/net/ethernet/ti/cpts.c
406
spin_lock_irqsave(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/cpts.c
407
if (!skb_queue_empty(&cpts->txq)) {
drivers/net/ethernet/ti/cpts.c
408
cpts_purge_txq(cpts);
drivers/net/ethernet/ti/cpts.c
409
if (!skb_queue_empty(&cpts->txq))
drivers/net/ethernet/ti/cpts.c
412
spin_unlock_irqrestore(&cpts->txq.lock, flags);
drivers/net/ethernet/ti/cpts.c
414
dev_dbg(cpts->dev, "cpts overflow check at %lld\n", ns);
drivers/net/ethernet/ti/cpts.c
415
mutex_unlock(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
457
static u64 cpts_find_ts(struct cpts *cpts, struct sk_buff *skb,
drivers/net/ethernet/ti/cpts.c
466
cpts_fifo_read(cpts, -1);
drivers/net/ethernet/ti/cpts.c
467
spin_lock_irqsave(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
468
list_for_each_safe(this, next, &cpts->events) {
drivers/net/ethernet/ti/cpts.c
472
list_add(&event->list, &cpts->pool);
drivers/net/ethernet/ti/cpts.c
484
list_add(&event->list, &cpts->pool);
drivers/net/ethernet/ti/cpts.c
488
spin_unlock_irqrestore(&cpts->lock, flags);
drivers/net/ethernet/ti/cpts.c
493
void cpts_rx_timestamp(struct cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/cpts.c
50
static int cpts_fifo_pop(struct cpts *cpts, u32 *high, u32 *low)
drivers/net/ethernet/ti/cpts.c
511
dev_dbg(cpts->dev, "%s mtype seqid %08x\n",
drivers/net/ethernet/ti/cpts.c
514
ns = cpts_find_ts(cpts, skb, CPTS_EV_RX, skb_cb->skb_mtype_seqid);
drivers/net/ethernet/ti/cpts.c
52
u32 r = cpts_read32(cpts, intstat_raw);
drivers/net/ethernet/ti/cpts.c
523
void cpts_tx_timestamp(struct cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/cpts.c
537
dev_dbg(cpts->dev, "%s mtype seqid %08x\n",
drivers/net/ethernet/ti/cpts.c
544
skb_queue_tail(&cpts->txq, skb);
drivers/net/ethernet/ti/cpts.c
545
ptp_schedule_worker(cpts->clock, 0);
drivers/net/ethernet/ti/cpts.c
549
int cpts_register(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
55
*high = cpts_read32(cpts, event_high);
drivers/net/ethernet/ti/cpts.c
553
skb_queue_head_init(&cpts->txq);
drivers/net/ethernet/ti/cpts.c
554
INIT_LIST_HEAD(&cpts->events);
drivers/net/ethernet/ti/cpts.c
555
INIT_LIST_HEAD(&cpts->pool);
drivers/net/ethernet/ti/cpts.c
557
list_add(&cpts->pool_data[i].list, &cpts->pool);
drivers/net/ethernet/ti/cpts.c
559
err = clk_enable(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
56
*low = cpts_read32(cpts, event_low);
drivers/net/ethernet/ti/cpts.c
563
cpts_write32(cpts, CPTS_EN, control);
drivers/net/ethernet/ti/cpts.c
564
cpts_write32(cpts, TS_PEND_EN, int_enable);
drivers/net/ethernet/ti/cpts.c
566
timecounter_init(&cpts->tc, &cpts->cc, ktime_get_real_ns());
drivers/net/ethernet/ti/cpts.c
568
cpts->clock = ptp_clock_register(&cpts->info, cpts->dev);
drivers/net/ethernet/ti/cpts.c
569
if (IS_ERR(cpts->clock)) {
drivers/net/ethernet/ti/cpts.c
57
cpts_write32(cpts, EVENT_POP, event_pop);
drivers/net/ethernet/ti/cpts.c
570
err = PTR_ERR(cpts->clock);
drivers/net/ethernet/ti/cpts.c
571
cpts->clock = NULL;
drivers/net/ethernet/ti/cpts.c
574
cpts->phc_index = ptp_clock_index(cpts->clock);
drivers/net/ethernet/ti/cpts.c
576
ptp_schedule_worker(cpts->clock, cpts->ov_check_period);
drivers/net/ethernet/ti/cpts.c
580
clk_disable(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
585
void cpts_unregister(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
587
if (WARN_ON(!cpts->clock))
drivers/net/ethernet/ti/cpts.c
590
ptp_clock_unregister(cpts->clock);
drivers/net/ethernet/ti/cpts.c
591
cpts->clock = NULL;
drivers/net/ethernet/ti/cpts.c
592
cpts->phc_index = -1;
drivers/net/ethernet/ti/cpts.c
594
cpts_write32(cpts, 0, int_enable);
drivers/net/ethernet/ti/cpts.c
595
cpts_write32(cpts, 0, control);
drivers/net/ethernet/ti/cpts.c
598
skb_queue_purge(&cpts->txq);
drivers/net/ethernet/ti/cpts.c
600
clk_disable(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
604
static void cpts_calc_mult_shift(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
609
freq = clk_get_rate(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
614
maxsec = cpts->cc.mask;
drivers/net/ethernet/ti/cpts.c
623
cpts->ov_check_period = (HZ * maxsec) / 2;
drivers/net/ethernet/ti/cpts.c
624
dev_info(cpts->dev, "cpts: overflow check period %lu (jiffies)\n",
drivers/net/ethernet/ti/cpts.c
625
cpts->ov_check_period);
drivers/net/ethernet/ti/cpts.c
627
if (cpts->cc.mult || cpts->cc.shift)
drivers/net/ethernet/ti/cpts.c
63
static int cpts_purge_events(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
630
clocks_calc_mult_shift(&cpts->cc.mult, &cpts->cc.shift,
drivers/net/ethernet/ti/cpts.c
634
ns = cyclecounter_cyc2ns(&cpts->cc, freq, cpts->cc.mask, &frac);
drivers/net/ethernet/ti/cpts.c
636
dev_info(cpts->dev,
drivers/net/ethernet/ti/cpts.c
638
freq, cpts->cc.mult, cpts->cc.shift, (ns - NSEC_PER_SEC));
drivers/net/ethernet/ti/cpts.c
651
static int cpts_of_mux_clk_setup(struct cpts *cpts, struct device_node *node)
drivers/net/ethernet/ti/cpts.c
667
dev_err(cpts->dev, "mux-clock %s must have parents\n",
drivers/net/ethernet/ti/cpts.c
672
parent_names = devm_kcalloc(cpts->dev, num_parents,
drivers/net/ethernet/ti/cpts.c
675
mux_table = devm_kcalloc(cpts->dev, num_parents, sizeof(*mux_table),
drivers/net/ethernet/ti/cpts.c
69
list_for_each_safe(this, next, &cpts->events) {
drivers/net/ethernet/ti/cpts.c
690
clk_hw = clk_hw_register_mux_table(cpts->dev, refclk_np->name,
drivers/net/ethernet/ti/cpts.c
693
&cpts->reg->rftclk_sel, 0, 0x1F,
drivers/net/ethernet/ti/cpts.c
700
ret = devm_add_action_or_reset(cpts->dev, cpts_clk_unregister, clk_hw);
drivers/net/ethernet/ti/cpts.c
702
dev_err(cpts->dev, "add clkmux unreg action %d", ret);
drivers/net/ethernet/ti/cpts.c
710
ret = devm_add_action_or_reset(cpts->dev, cpts_clk_del_provider,
drivers/net/ethernet/ti/cpts.c
713
dev_err(cpts->dev, "add clkmux provider unreg action %d", ret);
drivers/net/ethernet/ti/cpts.c
724
static int cpts_of_parse(struct cpts *cpts, struct device_node *node)
drivers/net/ethernet/ti/cpts.c
73
list_add(&event->list, &cpts->pool);
drivers/net/ethernet/ti/cpts.c
730
cpts->cc.mult = prop;
drivers/net/ethernet/ti/cpts.c
733
cpts->cc.shift = prop;
drivers/net/ethernet/ti/cpts.c
735
if ((cpts->cc.mult && !cpts->cc.shift) ||
drivers/net/ethernet/ti/cpts.c
736
(!cpts->cc.mult && cpts->cc.shift))
drivers/net/ethernet/ti/cpts.c
739
return cpts_of_mux_clk_setup(cpts, node);
drivers/net/ethernet/ti/cpts.c
742
dev_err(cpts->dev, "CPTS: Missing property in the DT.\n");
drivers/net/ethernet/ti/cpts.c
746
struct cpts *cpts_create(struct device *dev, void __iomem *regs,
drivers/net/ethernet/ti/cpts.c
749
struct cpts *cpts;
drivers/net/ethernet/ti/cpts.c
752
cpts = devm_kzalloc(dev, sizeof(*cpts), GFP_KERNEL);
drivers/net/ethernet/ti/cpts.c
753
if (!cpts)
drivers/net/ethernet/ti/cpts.c
756
cpts->dev = dev;
drivers/net/ethernet/ti/cpts.c
757
cpts->reg = (struct cpsw_cpts __iomem *)regs;
drivers/net/ethernet/ti/cpts.c
758
cpts->irq_poll = true;
drivers/net/ethernet/ti/cpts.c
759
spin_lock_init(&cpts->lock);
drivers/net/ethernet/ti/cpts.c
760
mutex_init(&cpts->ptp_clk_mutex);
drivers/net/ethernet/ti/cpts.c
761
init_completion(&cpts->ts_push_complete);
drivers/net/ethernet/ti/cpts.c
763
ret = cpts_of_parse(cpts, node);
drivers/net/ethernet/ti/cpts.c
767
cpts->refclk = devm_get_clk_from_child(dev, node, "cpts");
drivers/net/ethernet/ti/cpts.c
768
if (IS_ERR(cpts->refclk))
drivers/net/ethernet/ti/cpts.c
770
cpts->refclk = devm_clk_get(dev, "cpts");
drivers/net/ethernet/ti/cpts.c
772
if (IS_ERR(cpts->refclk)) {
drivers/net/ethernet/ti/cpts.c
774
PTR_ERR(cpts->refclk));
drivers/net/ethernet/ti/cpts.c
775
return ERR_CAST(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
778
ret = clk_prepare(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
782
cpts->cc.read = cpts_systim_read;
drivers/net/ethernet/ti/cpts.c
783
cpts->cc.mask = CLOCKSOURCE_MASK(32);
drivers/net/ethernet/ti/cpts.c
784
cpts->info = cpts_info;
drivers/net/ethernet/ti/cpts.c
785
cpts->phc_index = -1;
drivers/net/ethernet/ti/cpts.c
788
cpts->info.n_ext_ts = n_ext_ts;
drivers/net/ethernet/ti/cpts.c
79
dev_dbg(cpts->dev, "cpts: event pool cleaned up %d\n", removed);
drivers/net/ethernet/ti/cpts.c
790
cpts_calc_mult_shift(cpts);
drivers/net/ethernet/ti/cpts.c
794
cpts->cc_mult = cpts->cc.mult;
drivers/net/ethernet/ti/cpts.c
796
return cpts;
drivers/net/ethernet/ti/cpts.c
800
void cpts_release(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
802
if (!cpts)
drivers/net/ethernet/ti/cpts.c
805
if (WARN_ON(!cpts->refclk))
drivers/net/ethernet/ti/cpts.c
808
clk_unprepare(cpts->refclk);
drivers/net/ethernet/ti/cpts.c
83
static void cpts_purge_txq(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.c
89
skb_queue_walk_safe(&cpts->txq, skb, tmp) {
drivers/net/ethernet/ti/cpts.c
92
__skb_unlink(skb, &cpts->txq);
drivers/net/ethernet/ti/cpts.c
99
dev_dbg(cpts->dev, "txq cleaned up %d\n", removed);
drivers/net/ethernet/ti/cpts.h
126
void cpts_rx_timestamp(struct cpts *cpts, struct sk_buff *skb);
drivers/net/ethernet/ti/cpts.h
127
void cpts_tx_timestamp(struct cpts *cpts, struct sk_buff *skb);
drivers/net/ethernet/ti/cpts.h
128
int cpts_register(struct cpts *cpts);
drivers/net/ethernet/ti/cpts.h
129
void cpts_unregister(struct cpts *cpts);
drivers/net/ethernet/ti/cpts.h
130
struct cpts *cpts_create(struct device *dev, void __iomem *regs,
drivers/net/ethernet/ti/cpts.h
132
void cpts_release(struct cpts *cpts);
drivers/net/ethernet/ti/cpts.h
133
void cpts_misc_interrupt(struct cpts *cpts);
drivers/net/ethernet/ti/cpts.h
135
static inline bool cpts_can_timestamp(struct cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/cpts.h
145
static inline void cpts_set_irqpoll(struct cpts *cpts, bool en)
drivers/net/ethernet/ti/cpts.h
147
cpts->irq_poll = en;
drivers/net/ethernet/ti/cpts.h
151
struct cpts;
drivers/net/ethernet/ti/cpts.h
153
static inline void cpts_rx_timestamp(struct cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/cpts.h
156
static inline void cpts_tx_timestamp(struct cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/cpts.h
161
struct cpts *cpts_create(struct device *dev, void __iomem *regs,
drivers/net/ethernet/ti/cpts.h
167
static inline void cpts_release(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.h
172
cpts_register(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.h
177
static inline void cpts_unregister(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.h
181
static inline bool cpts_can_timestamp(struct cpts *cpts, struct sk_buff *skb)
drivers/net/ethernet/ti/cpts.h
186
static inline void cpts_misc_interrupt(struct cpts *cpts)
drivers/net/ethernet/ti/cpts.h
190
static inline void cpts_set_irqpoll(struct cpts *cpts, bool en)
drivers/net/ethernet/ti/netcp_ethss.c
2008
if (!gbe_intf || !gbe_intf->gbe_dev->cpts)
drivers/net/ethernet/ti/netcp_ethss.c
2016
info->phc_index = gbe_intf->gbe_dev->cpts->phc_index;
drivers/net/ethernet/ti/netcp_ethss.c
2534
cpts_tx_timestamp(gbe_dev->cpts, skb);
drivers/net/ethernet/ti/netcp_ethss.c
2542
return cpts_can_timestamp(gbe_intf->gbe_dev->cpts, skb);
drivers/net/ethernet/ti/netcp_ethss.c
2587
cpts_rx_timestamp(gbe_dev->cpts, p_info->skb);
drivers/net/ethernet/ti/netcp_ethss.c
2602
if (!gbe_dev->cpts)
drivers/net/ethernet/ti/netcp_ethss.c
2655
if (!gbe_dev->cpts)
drivers/net/ethernet/ti/netcp_ethss.c
2706
if (!gbe_dev->cpts)
drivers/net/ethernet/ti/netcp_ethss.c
2712
if (cpts_register(gbe_dev->cpts)) {
drivers/net/ethernet/ti/netcp_ethss.c
2723
if (!gbe_dev->cpts || (gbe_dev->cpts_registered <= 0))
drivers/net/ethernet/ti/netcp_ethss.c
2729
cpts_unregister(gbe_dev->cpts);
drivers/net/ethernet/ti/netcp_ethss.c
3710
gbe_dev->cpts = cpts_create(gbe_dev->dev, gbe_dev->cpts_reg,
drivers/net/ethernet/ti/netcp_ethss.c
3713
if (IS_ENABLED(CONFIG_TI_CPTS) && IS_ERR(gbe_dev->cpts)) {
drivers/net/ethernet/ti/netcp_ethss.c
3714
ret = PTR_ERR(gbe_dev->cpts);
drivers/net/ethernet/ti/netcp_ethss.c
3804
cpts_release(gbe_dev->cpts);
drivers/net/ethernet/ti/netcp_ethss.c
754
struct cpts *cpts;