Lines Matching refs:drvdata

14 static void tmc_etb_enable_hw(struct tmc_drvdata *drvdata)  in tmc_etb_enable_hw()  argument
16 CS_UNLOCK(drvdata->base); in tmc_etb_enable_hw()
19 tmc_wait_for_tmcready(drvdata); in tmc_etb_enable_hw()
21 writel_relaxed(TMC_MODE_CIRCULAR_BUFFER, drvdata->base + TMC_MODE); in tmc_etb_enable_hw()
25 drvdata->base + TMC_FFCR); in tmc_etb_enable_hw()
27 writel_relaxed(drvdata->trigger_cntr, drvdata->base + TMC_TRG); in tmc_etb_enable_hw()
28 tmc_enable_hw(drvdata); in tmc_etb_enable_hw()
30 CS_LOCK(drvdata->base); in tmc_etb_enable_hw()
33 static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata) in tmc_etb_dump_hw() argument
40 lost = readl_relaxed(drvdata->base + TMC_STS) & TMC_STS_FULL; in tmc_etb_dump_hw()
41 bufp = drvdata->buf; in tmc_etb_dump_hw()
42 drvdata->len = 0; in tmc_etb_dump_hw()
44 for (i = 0; i < drvdata->memwidth; i++) { in tmc_etb_dump_hw()
45 read_data = readl_relaxed(drvdata->base + TMC_RRD); in tmc_etb_dump_hw()
50 drvdata->len += 4; in tmc_etb_dump_hw()
55 coresight_insert_barrier_packet(drvdata->buf); in tmc_etb_dump_hw()
59 static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata) in tmc_etb_disable_hw() argument
61 CS_UNLOCK(drvdata->base); in tmc_etb_disable_hw()
63 tmc_flush_and_stop(drvdata); in tmc_etb_disable_hw()
68 if (drvdata->mode == CS_MODE_SYSFS) in tmc_etb_disable_hw()
69 tmc_etb_dump_hw(drvdata); in tmc_etb_disable_hw()
70 tmc_disable_hw(drvdata); in tmc_etb_disable_hw()
72 CS_LOCK(drvdata->base); in tmc_etb_disable_hw()
75 static void tmc_etf_enable_hw(struct tmc_drvdata *drvdata) in tmc_etf_enable_hw() argument
77 CS_UNLOCK(drvdata->base); in tmc_etf_enable_hw()
80 tmc_wait_for_tmcready(drvdata); in tmc_etf_enable_hw()
82 writel_relaxed(TMC_MODE_HARDWARE_FIFO, drvdata->base + TMC_MODE); in tmc_etf_enable_hw()
84 drvdata->base + TMC_FFCR); in tmc_etf_enable_hw()
85 writel_relaxed(0x0, drvdata->base + TMC_BUFWM); in tmc_etf_enable_hw()
86 tmc_enable_hw(drvdata); in tmc_etf_enable_hw()
88 CS_LOCK(drvdata->base); in tmc_etf_enable_hw()
91 static void tmc_etf_disable_hw(struct tmc_drvdata *drvdata) in tmc_etf_disable_hw() argument
93 CS_UNLOCK(drvdata->base); in tmc_etf_disable_hw()
95 tmc_flush_and_stop(drvdata); in tmc_etf_disable_hw()
96 tmc_disable_hw(drvdata); in tmc_etf_disable_hw()
98 CS_LOCK(drvdata->base); in tmc_etf_disable_hw()
106 ssize_t tmc_etb_get_sysfs_trace(struct tmc_drvdata *drvdata, in tmc_etb_get_sysfs_trace() argument
112 if (pos + actual > drvdata->len) in tmc_etb_get_sysfs_trace()
113 actual = drvdata->len - pos; in tmc_etb_get_sysfs_trace()
115 *bufpp = drvdata->buf + pos; in tmc_etb_get_sysfs_trace()
125 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_sink_sysfs() local
131 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
132 if (!drvdata->buf) { in tmc_enable_etf_sink_sysfs()
133 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
136 buf = kzalloc(drvdata->size, GFP_KERNEL); in tmc_enable_etf_sink_sysfs()
141 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
144 if (drvdata->reading) { in tmc_enable_etf_sink_sysfs()
154 if (drvdata->mode == CS_MODE_SYSFS) in tmc_enable_etf_sink_sysfs()
166 if (drvdata->buf) { in tmc_enable_etf_sink_sysfs()
167 memset(drvdata->buf, 0, drvdata->size); in tmc_enable_etf_sink_sysfs()
170 drvdata->buf = buf; in tmc_enable_etf_sink_sysfs()
173 drvdata->mode = CS_MODE_SYSFS; in tmc_enable_etf_sink_sysfs()
174 tmc_etb_enable_hw(drvdata); in tmc_enable_etf_sink_sysfs()
176 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
189 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_sink_perf() local
191 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_sink_perf()
192 if (drvdata->reading) { in tmc_enable_etf_sink_perf()
202 if (drvdata->mode != CS_MODE_DISABLED) { in tmc_enable_etf_sink_perf()
207 drvdata->mode = CS_MODE_PERF; in tmc_enable_etf_sink_perf()
208 tmc_etb_enable_hw(drvdata); in tmc_enable_etf_sink_perf()
210 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_sink_perf()
218 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_sink() local
236 dev_info(drvdata->dev, "TMC-ETB/ETF enabled\n"); in tmc_enable_etf_sink()
243 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_disable_etf_sink() local
245 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
246 if (drvdata->reading) { in tmc_disable_etf_sink()
247 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
252 if (drvdata->mode != CS_MODE_DISABLED) { in tmc_disable_etf_sink()
253 tmc_etb_disable_hw(drvdata); in tmc_disable_etf_sink()
254 drvdata->mode = CS_MODE_DISABLED; in tmc_disable_etf_sink()
257 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
259 dev_info(drvdata->dev, "TMC-ETB/ETF disabled\n"); in tmc_disable_etf_sink()
266 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_link() local
268 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_link()
269 if (drvdata->reading) { in tmc_enable_etf_link()
270 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_link()
274 tmc_etf_enable_hw(drvdata); in tmc_enable_etf_link()
275 drvdata->mode = CS_MODE_SYSFS; in tmc_enable_etf_link()
276 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_link()
278 dev_info(drvdata->dev, "TMC-ETF enabled\n"); in tmc_enable_etf_link()
286 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_disable_etf_link() local
288 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_disable_etf_link()
289 if (drvdata->reading) { in tmc_disable_etf_link()
290 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_link()
294 tmc_etf_disable_hw(drvdata); in tmc_disable_etf_link()
295 drvdata->mode = CS_MODE_DISABLED; in tmc_disable_etf_link()
296 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_link()
298 dev_info(drvdata->dev, "TMC-ETF disabled\n"); in tmc_disable_etf_link()
393 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_update_etf_buffer() local
399 if (WARN_ON_ONCE(drvdata->mode != CS_MODE_PERF)) in tmc_update_etf_buffer()
402 CS_UNLOCK(drvdata->base); in tmc_update_etf_buffer()
404 tmc_flush_and_stop(drvdata); in tmc_update_etf_buffer()
406 read_ptr = tmc_read_rrp(drvdata); in tmc_update_etf_buffer()
407 write_ptr = tmc_read_rwp(drvdata); in tmc_update_etf_buffer()
413 status = readl_relaxed(drvdata->base + TMC_STS); in tmc_update_etf_buffer()
416 to_read = drvdata->size; in tmc_update_etf_buffer()
418 to_read = CIRC_CNT(write_ptr, read_ptr, drvdata->size); in tmc_update_etf_buffer()
437 switch (drvdata->memwidth) { in tmc_update_etf_buffer()
454 read_ptr = (write_ptr + drvdata->size) - to_read; in tmc_update_etf_buffer()
456 if (read_ptr > (drvdata->size - 1)) in tmc_update_etf_buffer()
457 read_ptr -= drvdata->size; in tmc_update_etf_buffer()
459 tmc_write_rrp(drvdata, read_ptr); in tmc_update_etf_buffer()
473 *buf_ptr = readl_relaxed(drvdata->base + TMC_RRD); in tmc_update_etf_buffer()
500 CS_LOCK(drvdata->base); in tmc_update_etf_buffer()
527 int tmc_read_prepare_etb(struct tmc_drvdata *drvdata) in tmc_read_prepare_etb() argument
534 if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETB && in tmc_read_prepare_etb()
535 drvdata->config_type != TMC_CONFIG_TYPE_ETF)) in tmc_read_prepare_etb()
538 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_read_prepare_etb()
540 if (drvdata->reading) { in tmc_read_prepare_etb()
546 mode = readl_relaxed(drvdata->base + TMC_MODE); in tmc_read_prepare_etb()
553 if (drvdata->mode == CS_MODE_PERF) { in tmc_read_prepare_etb()
559 if (drvdata->buf == NULL) { in tmc_read_prepare_etb()
565 if (drvdata->mode == CS_MODE_SYSFS) in tmc_read_prepare_etb()
566 tmc_etb_disable_hw(drvdata); in tmc_read_prepare_etb()
568 drvdata->reading = true; in tmc_read_prepare_etb()
570 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_prepare_etb()
575 int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) in tmc_read_unprepare_etb() argument
582 if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETB && in tmc_read_unprepare_etb()
583 drvdata->config_type != TMC_CONFIG_TYPE_ETF)) in tmc_read_unprepare_etb()
586 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_read_unprepare_etb()
589 mode = readl_relaxed(drvdata->base + TMC_MODE); in tmc_read_unprepare_etb()
591 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_unprepare_etb()
596 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_read_unprepare_etb()
605 memset(drvdata->buf, 0, drvdata->size); in tmc_read_unprepare_etb()
606 tmc_etb_enable_hw(drvdata); in tmc_read_unprepare_etb()
612 buf = drvdata->buf; in tmc_read_unprepare_etb()
613 drvdata->buf = NULL; in tmc_read_unprepare_etb()
616 drvdata->reading = false; in tmc_read_unprepare_etb()
617 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_unprepare_etb()