• Home
  • Raw
  • Download

Lines Matching refs:drvdata

39 	struct tmc_drvdata	*drvdata;  member
596 static int tmc_etr_alloc_flat_buf(struct tmc_drvdata *drvdata, in tmc_etr_alloc_flat_buf() argument
601 struct device *real_dev = drvdata->csdev->dev.parent; in tmc_etr_alloc_flat_buf()
620 flat_buf->dev = &drvdata->csdev->dev; in tmc_etr_alloc_flat_buf()
694 static int tmc_etr_alloc_sg_buf(struct tmc_drvdata *drvdata, in tmc_etr_alloc_sg_buf() argument
699 struct device *dev = &drvdata->csdev->dev; in tmc_etr_alloc_sg_buf()
777 tmc_etr_get_catu_device(struct tmc_drvdata *drvdata) in tmc_etr_get_catu_device() argument
780 struct coresight_device *tmp, *etr = drvdata->csdev; in tmc_etr_get_catu_device()
795 static inline int tmc_etr_enable_catu(struct tmc_drvdata *drvdata, in tmc_etr_enable_catu() argument
798 struct coresight_device *catu = tmc_etr_get_catu_device(drvdata); in tmc_etr_enable_catu()
805 static inline void tmc_etr_disable_catu(struct tmc_drvdata *drvdata) in tmc_etr_disable_catu() argument
807 struct coresight_device *catu = tmc_etr_get_catu_device(drvdata); in tmc_etr_disable_catu()
810 helper_ops(catu)->disable(catu, drvdata->etr_buf); in tmc_etr_disable_catu()
832 struct tmc_drvdata *drvdata, in tmc_etr_mode_alloc_buf() argument
843 rc = etr_buf_ops[mode]->alloc(drvdata, etr_buf, in tmc_etr_mode_alloc_buf()
861 static struct etr_buf *tmc_alloc_etr_buf(struct tmc_drvdata *drvdata, in tmc_alloc_etr_buf() argument
869 struct device *dev = &drvdata->csdev->dev; in tmc_alloc_etr_buf()
871 has_etr_sg = tmc_etr_has_cap(drvdata, TMC_ETR_SG); in tmc_alloc_etr_buf()
873 has_catu = !!tmc_etr_get_catu_device(drvdata); in tmc_alloc_etr_buf()
897 rc = tmc_etr_mode_alloc_buf(ETR_MODE_FLAT, drvdata, in tmc_alloc_etr_buf()
900 rc = tmc_etr_mode_alloc_buf(ETR_MODE_ETR_SG, drvdata, in tmc_alloc_etr_buf()
903 rc = tmc_etr_mode_alloc_buf(ETR_MODE_CATU, drvdata, in tmc_alloc_etr_buf()
958 static void tmc_sync_etr_buf(struct tmc_drvdata *drvdata) in tmc_sync_etr_buf() argument
960 struct etr_buf *etr_buf = drvdata->etr_buf; in tmc_sync_etr_buf()
964 rrp = tmc_read_rrp(drvdata); in tmc_sync_etr_buf()
965 rwp = tmc_read_rwp(drvdata); in tmc_sync_etr_buf()
966 status = readl_relaxed(drvdata->base + TMC_STS); in tmc_sync_etr_buf()
973 dev_dbg(&drvdata->csdev->dev, in tmc_sync_etr_buf()
987 static int __tmc_etr_enable_hw(struct tmc_drvdata *drvdata) in __tmc_etr_enable_hw() argument
990 struct etr_buf *etr_buf = drvdata->etr_buf; in __tmc_etr_enable_hw()
993 CS_UNLOCK(drvdata->base); in __tmc_etr_enable_hw()
996 rc = tmc_wait_for_tmcready(drvdata); in __tmc_etr_enable_hw()
998 dev_err(&drvdata->csdev->dev, in __tmc_etr_enable_hw()
1000 CS_LOCK(drvdata->base); in __tmc_etr_enable_hw()
1004 writel_relaxed(etr_buf->size / 4, drvdata->base + TMC_RSZ); in __tmc_etr_enable_hw()
1005 writel_relaxed(TMC_MODE_CIRCULAR_BUFFER, drvdata->base + TMC_MODE); in __tmc_etr_enable_hw()
1007 axictl = readl_relaxed(drvdata->base + TMC_AXICTL); in __tmc_etr_enable_hw()
1010 axictl |= TMC_AXICTL_WR_BURST(drvdata->max_burst_size); in __tmc_etr_enable_hw()
1013 if (tmc_etr_has_cap(drvdata, TMC_ETR_AXI_ARCACHE)) { in __tmc_etr_enable_hw()
1021 writel_relaxed(axictl, drvdata->base + TMC_AXICTL); in __tmc_etr_enable_hw()
1022 tmc_write_dba(drvdata, etr_buf->hwaddr); in __tmc_etr_enable_hw()
1028 if (tmc_etr_has_cap(drvdata, TMC_ETR_SAVE_RESTORE)) { in __tmc_etr_enable_hw()
1029 tmc_write_rrp(drvdata, etr_buf->hwaddr); in __tmc_etr_enable_hw()
1030 tmc_write_rwp(drvdata, etr_buf->hwaddr); in __tmc_etr_enable_hw()
1031 sts = readl_relaxed(drvdata->base + TMC_STS) & ~TMC_STS_FULL; in __tmc_etr_enable_hw()
1032 writel_relaxed(sts, drvdata->base + TMC_STS); in __tmc_etr_enable_hw()
1038 drvdata->base + TMC_FFCR); in __tmc_etr_enable_hw()
1039 writel_relaxed(drvdata->trigger_cntr, drvdata->base + TMC_TRG); in __tmc_etr_enable_hw()
1040 tmc_enable_hw(drvdata); in __tmc_etr_enable_hw()
1042 CS_LOCK(drvdata->base); in __tmc_etr_enable_hw()
1046 static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, in tmc_etr_enable_hw() argument
1056 WARN_ON(!tmc_etr_has_cap(drvdata, TMC_ETR_SG))) in tmc_etr_enable_hw()
1059 if (WARN_ON(drvdata->etr_buf)) in tmc_etr_enable_hw()
1066 rc = tmc_etr_enable_catu(drvdata, etr_buf); in tmc_etr_enable_hw()
1069 rc = coresight_claim_device(drvdata->csdev); in tmc_etr_enable_hw()
1071 drvdata->etr_buf = etr_buf; in tmc_etr_enable_hw()
1072 rc = __tmc_etr_enable_hw(drvdata); in tmc_etr_enable_hw()
1074 drvdata->etr_buf = NULL; in tmc_etr_enable_hw()
1075 coresight_disclaim_device(drvdata->csdev); in tmc_etr_enable_hw()
1076 tmc_etr_disable_catu(drvdata); in tmc_etr_enable_hw()
1093 ssize_t tmc_etr_get_sysfs_trace(struct tmc_drvdata *drvdata, in tmc_etr_get_sysfs_trace() argument
1098 struct etr_buf *etr_buf = drvdata->sysfs_buf; in tmc_etr_get_sysfs_trace()
1113 tmc_etr_setup_sysfs_buf(struct tmc_drvdata *drvdata) in tmc_etr_setup_sysfs_buf() argument
1115 return tmc_alloc_etr_buf(drvdata, drvdata->size, in tmc_etr_setup_sysfs_buf()
1126 static void tmc_etr_sync_sysfs_buf(struct tmc_drvdata *drvdata) in tmc_etr_sync_sysfs_buf() argument
1128 struct etr_buf *etr_buf = drvdata->etr_buf; in tmc_etr_sync_sysfs_buf()
1130 if (WARN_ON(drvdata->sysfs_buf != etr_buf)) { in tmc_etr_sync_sysfs_buf()
1131 tmc_etr_free_sysfs_buf(drvdata->sysfs_buf); in tmc_etr_sync_sysfs_buf()
1132 drvdata->sysfs_buf = NULL; in tmc_etr_sync_sysfs_buf()
1134 tmc_sync_etr_buf(drvdata); in tmc_etr_sync_sysfs_buf()
1145 static void __tmc_etr_disable_hw(struct tmc_drvdata *drvdata) in __tmc_etr_disable_hw() argument
1147 CS_UNLOCK(drvdata->base); in __tmc_etr_disable_hw()
1149 tmc_flush_and_stop(drvdata); in __tmc_etr_disable_hw()
1154 if (drvdata->mode == CS_MODE_SYSFS) in __tmc_etr_disable_hw()
1155 tmc_etr_sync_sysfs_buf(drvdata); in __tmc_etr_disable_hw()
1157 tmc_disable_hw(drvdata); in __tmc_etr_disable_hw()
1159 CS_LOCK(drvdata->base); in __tmc_etr_disable_hw()
1163 void tmc_etr_disable_hw(struct tmc_drvdata *drvdata) in tmc_etr_disable_hw() argument
1165 __tmc_etr_disable_hw(drvdata); in tmc_etr_disable_hw()
1167 tmc_etr_disable_catu(drvdata); in tmc_etr_disable_hw()
1168 coresight_disclaim_device(drvdata->csdev); in tmc_etr_disable_hw()
1170 drvdata->etr_buf = NULL; in tmc_etr_disable_hw()
1177 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etr_sink_sysfs() local
1188 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etr_sink_sysfs()
1189 sysfs_buf = READ_ONCE(drvdata->sysfs_buf); in tmc_enable_etr_sink_sysfs()
1190 if (!sysfs_buf || (sysfs_buf->size != drvdata->size)) { in tmc_enable_etr_sink_sysfs()
1191 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etr_sink_sysfs()
1194 free_buf = new_buf = tmc_etr_setup_sysfs_buf(drvdata); in tmc_enable_etr_sink_sysfs()
1199 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etr_sink_sysfs()
1202 if (drvdata->reading || drvdata->mode == CS_MODE_PERF) { in tmc_enable_etr_sink_sysfs()
1212 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_enable_etr_sink_sysfs()
1221 sysfs_buf = READ_ONCE(drvdata->sysfs_buf); in tmc_enable_etr_sink_sysfs()
1224 drvdata->sysfs_buf = new_buf; in tmc_enable_etr_sink_sysfs()
1227 ret = tmc_etr_enable_hw(drvdata, drvdata->sysfs_buf); in tmc_enable_etr_sink_sysfs()
1229 drvdata->mode = CS_MODE_SYSFS; in tmc_enable_etr_sink_sysfs()
1233 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etr_sink_sysfs()
1253 alloc_etr_buf(struct tmc_drvdata *drvdata, struct perf_event *event, in alloc_etr_buf() argument
1265 if ((nr_pages << PAGE_SHIFT) > drvdata->size) { in alloc_etr_buf()
1266 etr_buf = tmc_alloc_etr_buf(drvdata, ((ssize_t)nr_pages << PAGE_SHIFT), in alloc_etr_buf()
1276 size = drvdata->size; in alloc_etr_buf()
1278 etr_buf = tmc_alloc_etr_buf(drvdata, size, 0, node, NULL); in alloc_etr_buf()
1291 get_perf_etr_buf_cpu_wide(struct tmc_drvdata *drvdata, in get_perf_etr_buf_cpu_wide() argument
1318 mutex_lock(&drvdata->idr_mutex); in get_perf_etr_buf_cpu_wide()
1319 etr_buf = idr_find(&drvdata->idr, pid); in get_perf_etr_buf_cpu_wide()
1322 mutex_unlock(&drvdata->idr_mutex); in get_perf_etr_buf_cpu_wide()
1327 mutex_unlock(&drvdata->idr_mutex); in get_perf_etr_buf_cpu_wide()
1329 etr_buf = alloc_etr_buf(drvdata, event, nr_pages, pages, snapshot); in get_perf_etr_buf_cpu_wide()
1334 mutex_lock(&drvdata->idr_mutex); in get_perf_etr_buf_cpu_wide()
1335 ret = idr_alloc(&drvdata->idr, etr_buf, pid, pid + 1, GFP_KERNEL); in get_perf_etr_buf_cpu_wide()
1336 mutex_unlock(&drvdata->idr_mutex); in get_perf_etr_buf_cpu_wide()
1355 get_perf_etr_buf_per_thread(struct tmc_drvdata *drvdata, in get_perf_etr_buf_per_thread() argument
1363 return alloc_etr_buf(drvdata, event, nr_pages, pages, snapshot); in get_perf_etr_buf_per_thread()
1367 get_perf_etr_buf(struct tmc_drvdata *drvdata, struct perf_event *event, in get_perf_etr_buf() argument
1371 return get_perf_etr_buf_per_thread(drvdata, event, nr_pages, in get_perf_etr_buf()
1374 return get_perf_etr_buf_cpu_wide(drvdata, event, nr_pages, in get_perf_etr_buf()
1379 tmc_etr_setup_perf_buf(struct tmc_drvdata *drvdata, struct perf_event *event, in tmc_etr_setup_perf_buf() argument
1392 etr_buf = get_perf_etr_buf(drvdata, event, nr_pages, pages, snapshot); in tmc_etr_setup_perf_buf()
1404 etr_perf->drvdata = drvdata; in tmc_etr_setup_perf_buf()
1416 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_alloc_etr_buffer() local
1418 etr_perf = tmc_etr_setup_perf_buf(drvdata, event, in tmc_alloc_etr_buffer()
1436 struct tmc_drvdata *drvdata = etr_perf->drvdata; in tmc_free_etr_buffer() local
1442 mutex_lock(&drvdata->idr_mutex); in tmc_free_etr_buffer()
1445 mutex_unlock(&drvdata->idr_mutex); in tmc_free_etr_buffer()
1450 buf = idr_remove(&drvdata->idr, etr_perf->pid); in tmc_free_etr_buffer()
1451 mutex_unlock(&drvdata->idr_mutex); in tmc_free_etr_buffer()
1532 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_update_etr_buffer() local
1536 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_update_etr_buffer()
1540 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_update_etr_buffer()
1544 if (WARN_ON(drvdata->perf_buf != etr_buf)) { in tmc_update_etr_buffer()
1546 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_update_etr_buffer()
1550 CS_UNLOCK(drvdata->base); in tmc_update_etr_buffer()
1552 tmc_flush_and_stop(drvdata); in tmc_update_etr_buffer()
1553 tmc_sync_etr_buf(drvdata); in tmc_update_etr_buffer()
1555 CS_LOCK(drvdata->base); in tmc_update_etr_buffer()
1556 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_update_etr_buffer()
1570 u32 mask = tmc_get_memwidth_mask(drvdata); in tmc_update_etr_buffer()
1621 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_enable_etr_sink_perf() local
1625 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_enable_etr_sink_perf()
1627 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_enable_etr_sink_perf()
1641 if (drvdata->pid != -1 && drvdata->pid != pid) { in tmc_enable_etr_sink_perf()
1650 if (drvdata->pid == pid) { in tmc_enable_etr_sink_perf()
1655 rc = tmc_etr_enable_hw(drvdata, etr_perf->etr_buf); in tmc_enable_etr_sink_perf()
1658 drvdata->pid = pid; in tmc_enable_etr_sink_perf()
1659 drvdata->mode = CS_MODE_PERF; in tmc_enable_etr_sink_perf()
1660 drvdata->perf_buf = etr_perf->etr_buf; in tmc_enable_etr_sink_perf()
1665 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_enable_etr_sink_perf()
1686 struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in tmc_disable_etr_sink() local
1688 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_disable_etr_sink()
1690 if (drvdata->reading) { in tmc_disable_etr_sink()
1691 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etr_sink()
1696 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etr_sink()
1701 WARN_ON_ONCE(drvdata->mode == CS_MODE_DISABLED); in tmc_disable_etr_sink()
1702 tmc_etr_disable_hw(drvdata); in tmc_disable_etr_sink()
1704 drvdata->pid = -1; in tmc_disable_etr_sink()
1705 drvdata->mode = CS_MODE_DISABLED; in tmc_disable_etr_sink()
1707 drvdata->perf_buf = NULL; in tmc_disable_etr_sink()
1709 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_disable_etr_sink()
1727 int tmc_read_prepare_etr(struct tmc_drvdata *drvdata) in tmc_read_prepare_etr() argument
1733 if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETR)) in tmc_read_prepare_etr()
1736 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_read_prepare_etr()
1737 if (drvdata->reading) { in tmc_read_prepare_etr()
1747 if (!drvdata->sysfs_buf) { in tmc_read_prepare_etr()
1753 if (drvdata->mode == CS_MODE_SYSFS) in tmc_read_prepare_etr()
1754 __tmc_etr_disable_hw(drvdata); in tmc_read_prepare_etr()
1756 drvdata->reading = true; in tmc_read_prepare_etr()
1758 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_prepare_etr()
1763 int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata) in tmc_read_unprepare_etr() argument
1769 if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETR)) in tmc_read_unprepare_etr()
1772 spin_lock_irqsave(&drvdata->spinlock, flags); in tmc_read_unprepare_etr()
1775 if (drvdata->mode == CS_MODE_SYSFS) { in tmc_read_unprepare_etr()
1781 __tmc_etr_enable_hw(drvdata); in tmc_read_unprepare_etr()
1787 sysfs_buf = drvdata->sysfs_buf; in tmc_read_unprepare_etr()
1788 drvdata->sysfs_buf = NULL; in tmc_read_unprepare_etr()
1791 drvdata->reading = false; in tmc_read_unprepare_etr()
1792 spin_unlock_irqrestore(&drvdata->spinlock, flags); in tmc_read_unprepare_etr()