Lines Matching refs:drvdata

38 int tmc_wait_for_tmcready(struct tmc_drvdata *drvdata)  in tmc_wait_for_tmcready()  argument
40 struct coresight_device *csdev = drvdata->csdev; in tmc_wait_for_tmcready()
52 void tmc_flush_and_stop(struct tmc_drvdata *drvdata) in tmc_flush_and_stop() argument
54 struct coresight_device *csdev = drvdata->csdev; in tmc_flush_and_stop()
58 ffcr = readl_relaxed(drvdata->base + TMC_FFCR); in tmc_flush_and_stop()
60 writel_relaxed(ffcr, drvdata->base + TMC_FFCR); in tmc_flush_and_stop()
62 writel_relaxed(ffcr, drvdata->base + TMC_FFCR); in tmc_flush_and_stop()
69 tmc_wait_for_tmcready(drvdata); in tmc_flush_and_stop()
72 void tmc_enable_hw(struct tmc_drvdata *drvdata) in tmc_enable_hw() argument
74 writel_relaxed(TMC_CTL_CAPT_EN, drvdata->base + TMC_CTL); in tmc_enable_hw()
77 void tmc_disable_hw(struct tmc_drvdata *drvdata) in tmc_disable_hw() argument
79 writel_relaxed(0x0, drvdata->base + TMC_CTL); in tmc_disable_hw()
82 u32 tmc_get_memwidth_mask(struct tmc_drvdata *drvdata) in tmc_get_memwidth_mask() argument
94 switch (drvdata->memwidth) { in tmc_get_memwidth_mask()
108 static bool is_tmc_crashdata_valid(struct tmc_drvdata *drvdata) in is_tmc_crashdata_valid() argument
112 if (!tmc_has_reserved_buffer(drvdata) || in is_tmc_crashdata_valid()
113 !tmc_has_crash_mdata_buffer(drvdata)) in is_tmc_crashdata_valid()
116 mdata = drvdata->crash_mdata.vaddr; in is_tmc_crashdata_valid()
124 dev_dbg(&drvdata->csdev->dev, in is_tmc_crashdata_valid()
134 if (drvdata->resrv_buf.paddr != mdata->trace_paddr) { in is_tmc_crashdata_valid()
135 dev_dbg(&drvdata->csdev->dev, in is_tmc_crashdata_valid()
142 dev_err(&drvdata->csdev->dev, in is_tmc_crashdata_valid()
147 if (mdata->crc32_tdata != find_crash_tracedata_crc(drvdata, mdata)) { in is_tmc_crashdata_valid()
148 dev_err(&drvdata->csdev->dev, in is_tmc_crashdata_valid()
156 static inline ssize_t tmc_get_resvbuf_trace(struct tmc_drvdata *drvdata, in tmc_get_resvbuf_trace() argument
161 struct tmc_resrv_buf *rbuf = &drvdata->resrv_buf; in tmc_get_resvbuf_trace()
182 static int tmc_prepare_crashdata(struct tmc_drvdata *drvdata) in tmc_prepare_crashdata() argument
191 mdata = drvdata->crash_mdata.vaddr; in tmc_prepare_crashdata()
192 rbuf = &drvdata->resrv_buf; in tmc_prepare_crashdata()
210 dev_dbg(&drvdata->csdev->dev, in tmc_prepare_crashdata()
216 len = tmc_get_resvbuf_trace(drvdata, 0x0, in tmc_prepare_crashdata()
221 mdata->crc32_tdata = find_crash_tracedata_crc(drvdata, in tmc_prepare_crashdata()
230 static int tmc_read_prepare(struct tmc_drvdata *drvdata) in tmc_read_prepare() argument
234 switch (drvdata->config_type) { in tmc_read_prepare()
237 ret = tmc_read_prepare_etb(drvdata); in tmc_read_prepare()
240 ret = tmc_read_prepare_etr(drvdata); in tmc_read_prepare()
247 dev_dbg(&drvdata->csdev->dev, "TMC read start\n"); in tmc_read_prepare()
252 static int tmc_read_unprepare(struct tmc_drvdata *drvdata) in tmc_read_unprepare() argument
256 switch (drvdata->config_type) { in tmc_read_unprepare()
259 ret = tmc_read_unprepare_etb(drvdata); in tmc_read_unprepare()
262 ret = tmc_read_unprepare_etr(drvdata); in tmc_read_unprepare()
269 dev_dbg(&drvdata->csdev->dev, "TMC read end\n"); in tmc_read_unprepare()
277 struct tmc_drvdata *drvdata = container_of(file->private_data, in tmc_open() local
280 ret = tmc_read_prepare(drvdata); in tmc_open()
286 dev_dbg(&drvdata->csdev->dev, "%s: successfully opened\n", __func__); in tmc_open()
290 static ssize_t tmc_get_sysfs_trace(struct tmc_drvdata *drvdata, loff_t pos, size_t len, in tmc_get_sysfs_trace() argument
293 switch (drvdata->config_type) { in tmc_get_sysfs_trace()
296 return tmc_etb_get_sysfs_trace(drvdata, pos, len, bufpp); in tmc_get_sysfs_trace()
298 return tmc_etr_get_sysfs_trace(drvdata, pos, len, bufpp); in tmc_get_sysfs_trace()
309 struct tmc_drvdata *drvdata = container_of(file->private_data, in tmc_read() local
311 actual = tmc_get_sysfs_trace(drvdata, *ppos, len, &bufp); in tmc_read()
316 dev_dbg(&drvdata->csdev->dev, in tmc_read()
322 dev_dbg(&drvdata->csdev->dev, "%zu bytes copied\n", actual); in tmc_read()
330 struct tmc_drvdata *drvdata = container_of(file->private_data, in tmc_release() local
333 ret = tmc_read_unprepare(drvdata); in tmc_release()
337 dev_dbg(&drvdata->csdev->dev, "%s: released\n", __func__); in tmc_release()
354 struct tmc_drvdata *drvdata = container_of(file->private_data, in tmc_crashdata_open() local
358 mdata = drvdata->crash_mdata.vaddr; in tmc_crashdata_open()
359 rbuf = &drvdata->resrv_buf; in tmc_crashdata_open()
361 raw_spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_crashdata_open()
366 raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_crashdata_open()
371 dev_dbg(&drvdata->csdev->dev, "%s: successfully opened\n", __func__); in tmc_crashdata_open()
381 struct tmc_drvdata *drvdata = container_of(file->private_data, in tmc_crashdata_read() local
385 actual = tmc_get_resvbuf_trace(drvdata, *ppos, len, &bufp); in tmc_crashdata_read()
390 dev_dbg(&drvdata->csdev->dev, in tmc_crashdata_read()
396 dev_dbg(&drvdata->csdev->dev, "%zu bytes copied\n", actual); in tmc_crashdata_read()
406 struct tmc_drvdata *drvdata = container_of(file->private_data, in tmc_crashdata_release() local
410 rbuf = &drvdata->resrv_buf; in tmc_crashdata_release()
411 raw_spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_crashdata_release()
413 raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_crashdata_release()
415 dev_dbg(&drvdata->csdev->dev, "%s: released\n", __func__); in tmc_crashdata_release()
480 struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); in trigger_cntr_show() local
481 unsigned long val = drvdata->trigger_cntr; in trigger_cntr_show()
492 struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); in trigger_cntr_store() local
498 drvdata->trigger_cntr = val; in trigger_cntr_store()
506 struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); in buffer_size_show() local
508 return sprintf(buf, "%#x\n", drvdata->size); in buffer_size_show()
517 struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); in buffer_size_store() local
520 if (drvdata->config_type != TMC_CONFIG_TYPE_ETR) in buffer_size_store()
529 drvdata->size = val; in buffer_size_store()
538 struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); in stop_on_flush_show() local
540 return sprintf(buf, "%#x\n", drvdata->stop_on_flush); in stop_on_flush_show()
549 struct tmc_drvdata *drvdata = dev_get_drvdata(dev->parent); in stop_on_flush_store() local
555 drvdata->stop_on_flush = true; in stop_on_flush_store()
557 drvdata->stop_on_flush = false; in stop_on_flush_store()
624 static bool tmc_etr_has_non_secure_access(struct tmc_drvdata *drvdata) in tmc_etr_has_non_secure_access() argument
626 u32 auth = readl_relaxed(drvdata->base + TMC_AUTHSTATUS); in tmc_etr_has_non_secure_access()
662 struct tmc_drvdata *drvdata = dev_get_drvdata(parent); in tmc_get_reserved_region() local
668 drvdata->resrv_buf.vaddr = memremap(res.start, in tmc_get_reserved_region()
671 if (IS_ERR_OR_NULL(drvdata->resrv_buf.vaddr)) { in tmc_get_reserved_region()
676 drvdata->resrv_buf.paddr = res.start; in tmc_get_reserved_region()
677 drvdata->resrv_buf.size = resource_size(&res); in tmc_get_reserved_region()
682 drvdata->crash_mdata.vaddr = memremap(res.start, in tmc_get_reserved_region()
685 if (IS_ERR_OR_NULL(drvdata->crash_mdata.vaddr)) { in tmc_get_reserved_region()
690 drvdata->crash_mdata.paddr = res.start; in tmc_get_reserved_region()
691 drvdata->crash_mdata.size = resource_size(&res); in tmc_get_reserved_region()
700 struct tmc_drvdata *drvdata = dev_get_drvdata(parent); in tmc_etr_setup_caps() local
703 if (!tmc_etr_has_non_secure_access(drvdata)) in tmc_etr_setup_caps()
710 tmc_etr_init_caps(drvdata, (u32)(unsigned long)dev_caps); in tmc_etr_setup_caps()
713 tmc_etr_set_cap(drvdata, TMC_ETR_SG); in tmc_etr_setup_caps()
766 static void register_crash_dev_interface(struct tmc_drvdata *drvdata, in register_crash_dev_interface() argument
769 drvdata->crashdev.name = in register_crash_dev_interface()
770 devm_kasprintf(&drvdata->csdev->dev, GFP_KERNEL, "%s_%s", "crash", name); in register_crash_dev_interface()
771 drvdata->crashdev.minor = MISC_DYNAMIC_MINOR; in register_crash_dev_interface()
772 drvdata->crashdev.fops = &tmc_crashdata_fops; in register_crash_dev_interface()
773 if (misc_register(&drvdata->crashdev)) { in register_crash_dev_interface()
774 dev_dbg(&drvdata->csdev->dev, in register_crash_dev_interface()
776 drvdata->crashdev.fops = NULL; in register_crash_dev_interface()
778 dev_info(&drvdata->csdev->dev, in register_crash_dev_interface()
788 struct tmc_drvdata *drvdata = dev_get_drvdata(dev); in __tmc_probe() local
801 drvdata->base = base; in __tmc_probe()
804 raw_spin_lock_init(&drvdata->spinlock); in __tmc_probe()
806 devid = readl_relaxed(drvdata->base + CORESIGHT_DEVID); in __tmc_probe()
807 drvdata->config_type = BMVAL(devid, 6, 7); in __tmc_probe()
808 drvdata->memwidth = tmc_get_memwidth(devid); in __tmc_probe()
810 drvdata->pid = -1; in __tmc_probe()
811 drvdata->etr_mode = ETR_MODE_AUTO; in __tmc_probe()
813 if (drvdata->config_type == TMC_CONFIG_TYPE_ETR) { in __tmc_probe()
814 drvdata->size = tmc_etr_get_default_buffer_size(dev); in __tmc_probe()
815 drvdata->max_burst_size = tmc_etr_get_max_burst_size(dev); in __tmc_probe()
817 drvdata->size = readl_relaxed(drvdata->base + TMC_RSZ) * 4; in __tmc_probe()
824 switch (drvdata->config_type) { in __tmc_probe()
840 idr_init(&drvdata->idr); in __tmc_probe()
841 mutex_init(&drvdata->idr_mutex); in __tmc_probe()
873 drvdata->csdev = coresight_register(&desc); in __tmc_probe()
874 if (IS_ERR(drvdata->csdev)) { in __tmc_probe()
875 ret = PTR_ERR(drvdata->csdev); in __tmc_probe()
879 drvdata->miscdev.name = desc.name; in __tmc_probe()
880 drvdata->miscdev.minor = MISC_DYNAMIC_MINOR; in __tmc_probe()
881 drvdata->miscdev.fops = &tmc_fops; in __tmc_probe()
882 ret = misc_register(&drvdata->miscdev); in __tmc_probe()
884 coresight_unregister(drvdata->csdev); in __tmc_probe()
889 if (is_tmc_crashdata_valid(drvdata) && in __tmc_probe()
890 !tmc_prepare_crashdata(drvdata)) in __tmc_probe()
891 register_crash_dev_interface(drvdata, desc.name); in __tmc_probe()
897 struct tmc_drvdata *drvdata; in tmc_probe() local
900 drvdata = devm_kzalloc(&adev->dev, sizeof(*drvdata), GFP_KERNEL); in tmc_probe()
901 if (!drvdata) in tmc_probe()
904 amba_set_drvdata(adev, drvdata); in tmc_probe()
915 struct tmc_drvdata *drvdata = amba_get_drvdata(adev); in tmc_shutdown() local
917 raw_spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_shutdown()
919 if (coresight_get_mode(drvdata->csdev) == CS_MODE_DISABLED) in tmc_shutdown()
922 if (drvdata->config_type == TMC_CONFIG_TYPE_ETR) in tmc_shutdown()
923 tmc_etr_disable_hw(drvdata); in tmc_shutdown()
931 raw_spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_shutdown()
936 struct tmc_drvdata *drvdata = dev_get_drvdata(dev); in __tmc_remove() local
943 misc_deregister(&drvdata->miscdev); in __tmc_remove()
944 if (drvdata->crashdev.fops) in __tmc_remove()
945 misc_deregister(&drvdata->crashdev); in __tmc_remove()
946 coresight_unregister(drvdata->csdev); in __tmc_remove()
981 struct tmc_drvdata *drvdata; in tmc_platform_probe() local
984 drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); in tmc_platform_probe()
985 if (!drvdata) in tmc_platform_probe()
988 drvdata->pclk = coresight_get_enable_apb_pclk(&pdev->dev); in tmc_platform_probe()
989 if (IS_ERR(drvdata->pclk)) in tmc_platform_probe()
992 dev_set_drvdata(&pdev->dev, drvdata); in tmc_platform_probe()
1007 struct tmc_drvdata *drvdata = dev_get_drvdata(&pdev->dev); in tmc_platform_remove() local
1009 if (WARN_ON(!drvdata)) in tmc_platform_remove()
1014 if (!IS_ERR_OR_NULL(drvdata->pclk)) in tmc_platform_remove()
1015 clk_put(drvdata->pclk); in tmc_platform_remove()
1021 struct tmc_drvdata *drvdata = dev_get_drvdata(dev); in tmc_runtime_suspend() local
1023 if (drvdata && !IS_ERR_OR_NULL(drvdata->pclk)) in tmc_runtime_suspend()
1024 clk_disable_unprepare(drvdata->pclk); in tmc_runtime_suspend()
1030 struct tmc_drvdata *drvdata = dev_get_drvdata(dev); in tmc_runtime_resume() local
1032 if (drvdata && !IS_ERR_OR_NULL(drvdata->pclk)) in tmc_runtime_resume()
1033 clk_prepare_enable(drvdata->pclk); in tmc_runtime_resume()