Lines Matching refs:drvdata

19 static void __tmc_etb_enable_hw(struct tmc_drvdata *drvdata)  in __tmc_etb_enable_hw()  argument
21 CS_UNLOCK(drvdata->base); in __tmc_etb_enable_hw()
24 tmc_wait_for_tmcready(drvdata); in __tmc_etb_enable_hw()
26 writel_relaxed(TMC_MODE_CIRCULAR_BUFFER, drvdata->base + TMC_MODE); in __tmc_etb_enable_hw()
30 drvdata->base + TMC_FFCR); in __tmc_etb_enable_hw()
32 writel_relaxed(drvdata->trigger_cntr, drvdata->base + TMC_TRG); in __tmc_etb_enable_hw()
33 tmc_enable_hw(drvdata); in __tmc_etb_enable_hw()
35 CS_LOCK(drvdata->base); in __tmc_etb_enable_hw()
38 static int tmc_etb_enable_hw(struct tmc_drvdata *drvdata) in tmc_etb_enable_hw() argument
40 int rc = coresight_claim_device(drvdata->base); in tmc_etb_enable_hw()
45 __tmc_etb_enable_hw(drvdata); in tmc_etb_enable_hw()
49 static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata) in tmc_etb_dump_hw() argument
55 lost = readl_relaxed(drvdata->base + TMC_STS) & TMC_STS_FULL; in tmc_etb_dump_hw()
56 bufp = drvdata->buf; in tmc_etb_dump_hw()
57 drvdata->len = 0; in tmc_etb_dump_hw()
59 read_data = readl_relaxed(drvdata->base + TMC_RRD); in tmc_etb_dump_hw()
64 drvdata->len += 4; in tmc_etb_dump_hw()
68 coresight_insert_barrier_packet(drvdata->buf); in tmc_etb_dump_hw()
72 static void __tmc_etb_disable_hw(struct tmc_drvdata *drvdata) in __tmc_etb_disable_hw() argument
74 CS_UNLOCK(drvdata->base); in __tmc_etb_disable_hw()
76 tmc_flush_and_stop(drvdata); in __tmc_etb_disable_hw()
81 if (drvdata->mode == CS_MODE_SYSFS) in __tmc_etb_disable_hw()
82 tmc_etb_dump_hw(drvdata); in __tmc_etb_disable_hw()
83 tmc_disable_hw(drvdata); in __tmc_etb_disable_hw()
85 CS_LOCK(drvdata->base); in __tmc_etb_disable_hw()
88 static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata) in tmc_etb_disable_hw() argument
90 __tmc_etb_disable_hw(drvdata); in tmc_etb_disable_hw()
91 coresight_disclaim_device(drvdata->base); in tmc_etb_disable_hw()
94 static void __tmc_etf_enable_hw(struct tmc_drvdata *drvdata) in __tmc_etf_enable_hw() argument
96 CS_UNLOCK(drvdata->base); in __tmc_etf_enable_hw()
99 tmc_wait_for_tmcready(drvdata); in __tmc_etf_enable_hw()
101 writel_relaxed(TMC_MODE_HARDWARE_FIFO, drvdata->base + TMC_MODE); in __tmc_etf_enable_hw()
103 drvdata->base + TMC_FFCR); in __tmc_etf_enable_hw()
104 writel_relaxed(0x0, drvdata->base + TMC_BUFWM); in __tmc_etf_enable_hw()
105 tmc_enable_hw(drvdata); in __tmc_etf_enable_hw()
107 CS_LOCK(drvdata->base); in __tmc_etf_enable_hw()
110 static int tmc_etf_enable_hw(struct tmc_drvdata *drvdata) in tmc_etf_enable_hw() argument
112 int rc = coresight_claim_device(drvdata->base); in tmc_etf_enable_hw()
117 __tmc_etf_enable_hw(drvdata); in tmc_etf_enable_hw()
121 static void tmc_etf_disable_hw(struct tmc_drvdata *drvdata) in tmc_etf_disable_hw() argument
123 CS_UNLOCK(drvdata->base); in tmc_etf_disable_hw()
125 tmc_flush_and_stop(drvdata); in tmc_etf_disable_hw()
126 tmc_disable_hw(drvdata); in tmc_etf_disable_hw()
127 coresight_disclaim_device_unlocked(drvdata->base); in tmc_etf_disable_hw()
128 CS_LOCK(drvdata->base); in tmc_etf_disable_hw()
136 ssize_t tmc_etb_get_sysfs_trace(struct tmc_drvdata *drvdata, in tmc_etb_get_sysfs_trace() argument
142 if (pos + actual > drvdata->len) in tmc_etb_get_sysfs_trace()
143 actual = drvdata->len - pos; in tmc_etb_get_sysfs_trace()
145 *bufpp = drvdata->buf + pos; in tmc_etb_get_sysfs_trace()
155 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_sink_sysfs() local
161 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
162 if (!drvdata->buf) { in tmc_enable_etf_sink_sysfs()
163 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
166 buf = kzalloc(drvdata->size, GFP_KERNEL); in tmc_enable_etf_sink_sysfs()
171 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
174 if (drvdata->reading) { in tmc_enable_etf_sink_sysfs()
184 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_enable_etf_sink_sysfs()
198 if (drvdata->buf) { in tmc_enable_etf_sink_sysfs()
199 memset(drvdata->buf, 0, drvdata->size); in tmc_enable_etf_sink_sysfs()
202 drvdata->buf = buf; in tmc_enable_etf_sink_sysfs()
205 ret = tmc_etb_enable_hw(drvdata); in tmc_enable_etf_sink_sysfs()
207 drvdata->mode = CS_MODE_SYSFS; in tmc_enable_etf_sink_sysfs()
214 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_sink_sysfs()
228 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_sink_perf() local
231 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_sink_perf()
234 if (drvdata->reading) in tmc_enable_etf_sink_perf()
240 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_enable_etf_sink_perf()
248 if (drvdata->pid != -1 && drvdata->pid != pid) { in tmc_enable_etf_sink_perf()
261 if (drvdata->pid == pid) { in tmc_enable_etf_sink_perf()
266 ret = tmc_etb_enable_hw(drvdata); in tmc_enable_etf_sink_perf()
269 drvdata->pid = pid; in tmc_enable_etf_sink_perf()
270 drvdata->mode = CS_MODE_PERF; in tmc_enable_etf_sink_perf()
274 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_sink_perf()
307 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_disable_etf_sink() local
309 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
311 if (drvdata->reading) { in tmc_disable_etf_sink()
312 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
317 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
322 WARN_ON_ONCE(drvdata->mode == CS_MODE_DISABLED); in tmc_disable_etf_sink()
323 tmc_etb_disable_hw(drvdata); in tmc_disable_etf_sink()
325 drvdata->pid = -1; in tmc_disable_etf_sink()
326 drvdata->mode = CS_MODE_DISABLED; in tmc_disable_etf_sink()
328 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_sink()
339 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etf_link() local
342 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etf_link()
343 if (drvdata->reading) { in tmc_enable_etf_link()
344 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_link()
349 ret = tmc_etf_enable_hw(drvdata); in tmc_enable_etf_link()
351 drvdata->mode = CS_MODE_SYSFS; in tmc_enable_etf_link()
357 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etf_link()
368 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_disable_etf_link() local
371 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_disable_etf_link()
372 if (drvdata->reading) { in tmc_disable_etf_link()
373 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_link()
378 tmc_etf_disable_hw(drvdata); in tmc_disable_etf_link()
379 drvdata->mode = CS_MODE_DISABLED; in tmc_disable_etf_link()
382 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etf_link()
452 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_update_etf_buffer() local
458 if (WARN_ON_ONCE(drvdata->mode != CS_MODE_PERF)) in tmc_update_etf_buffer()
461 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_update_etf_buffer()
467 CS_UNLOCK(drvdata->base); in tmc_update_etf_buffer()
469 tmc_flush_and_stop(drvdata); in tmc_update_etf_buffer()
471 read_ptr = tmc_read_rrp(drvdata); in tmc_update_etf_buffer()
472 write_ptr = tmc_read_rwp(drvdata); in tmc_update_etf_buffer()
478 status = readl_relaxed(drvdata->base + TMC_STS); in tmc_update_etf_buffer()
481 to_read = drvdata->size; in tmc_update_etf_buffer()
483 to_read = CIRC_CNT(write_ptr, read_ptr, drvdata->size); in tmc_update_etf_buffer()
494 u32 mask = tmc_get_memwidth_mask(drvdata); in tmc_update_etf_buffer()
502 read_ptr = (write_ptr + drvdata->size) - to_read; in tmc_update_etf_buffer()
504 if (read_ptr > (drvdata->size - 1)) in tmc_update_etf_buffer()
505 read_ptr -= drvdata->size; in tmc_update_etf_buffer()
507 tmc_write_rrp(drvdata, read_ptr); in tmc_update_etf_buffer()
527 *buf_ptr = readl_relaxed(drvdata->base + TMC_RRD); in tmc_update_etf_buffer()
552 CS_LOCK(drvdata->base); in tmc_update_etf_buffer()
554 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_update_etf_buffer()
581 int tmc_read_prepare_etb(struct tmc_drvdata *drvdata) in tmc_read_prepare_etb() argument
588 if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETB && in tmc_read_prepare_etb()
589 drvdata->config_type != TMC_CONFIG_TYPE_ETF)) in tmc_read_prepare_etb()
592 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_read_prepare_etb()
594 if (drvdata->reading) { in tmc_read_prepare_etb()
600 if (drvdata->mode == CS_MODE_PERF) { in tmc_read_prepare_etb()
606 if (drvdata->buf == NULL) { in tmc_read_prepare_etb()
612 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_read_prepare_etb()
614 mode = readl_relaxed(drvdata->base + TMC_MODE); in tmc_read_prepare_etb()
619 __tmc_etb_disable_hw(drvdata); in tmc_read_prepare_etb()
622 drvdata->reading = true; in tmc_read_prepare_etb()
624 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_prepare_etb()
629 int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) in tmc_read_unprepare_etb() argument
636 if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETB && in tmc_read_unprepare_etb()
637 drvdata->config_type != TMC_CONFIG_TYPE_ETF)) in tmc_read_unprepare_etb()
640 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_read_unprepare_etb()
643 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_read_unprepare_etb()
645 mode = readl_relaxed(drvdata->base + TMC_MODE); in tmc_read_unprepare_etb()
647 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_unprepare_etb()
658 memset(drvdata->buf, 0, drvdata->size); in tmc_read_unprepare_etb()
659 __tmc_etb_enable_hw(drvdata); in tmc_read_unprepare_etb()
665 buf = drvdata->buf; in tmc_read_unprepare_etb()
666 drvdata->buf = NULL; in tmc_read_unprepare_etb()
669 drvdata->reading = false; in tmc_read_unprepare_etb()
670 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_unprepare_etb()