• Home
  • Raw
  • Download

Lines Matching refs:drvdata

61 static int etm4_set_event_filters(struct etmv4_drvdata *drvdata,
69 struct etmv4_drvdata *drvdata; member
82 static inline bool etm4x_sspcicrn_present(struct etmv4_drvdata *drvdata, int n) in etm4x_sspcicrn_present() argument
84 return (n < drvdata->nr_ss_cmp) && in etm4x_sspcicrn_present()
85 drvdata->nr_pe && in etm4x_sspcicrn_present()
86 (drvdata->config.ss_status[n] & TRCSSCSRn_PC); in etm4x_sspcicrn_present()
153 static void etm_detect_os_lock(struct etmv4_drvdata *drvdata, in etm_detect_os_lock() argument
158 drvdata->os_lock_model = ETM_OSLSR_OSLM(oslsr); in etm_detect_os_lock()
161 static void etm_write_os_lock(struct etmv4_drvdata *drvdata, in etm_write_os_lock() argument
166 switch (drvdata->os_lock_model) { in etm_write_os_lock()
175 smp_processor_id(), drvdata->os_lock_model); in etm_write_os_lock()
183 static inline void etm4_os_unlock_csa(struct etmv4_drvdata *drvdata, in etm4_os_unlock_csa() argument
186 WARN_ON(drvdata->cpu != smp_processor_id()); in etm4_os_unlock_csa()
189 etm_write_os_lock(drvdata, csa, 0x0); in etm4_os_unlock_csa()
190 drvdata->os_unlock = true; in etm4_os_unlock_csa()
193 static void etm4_os_unlock(struct etmv4_drvdata *drvdata) in etm4_os_unlock() argument
195 if (!WARN_ON(!drvdata->csdev)) in etm4_os_unlock()
196 etm4_os_unlock_csa(drvdata, &drvdata->csdev->access); in etm4_os_unlock()
199 static void etm4_os_lock(struct etmv4_drvdata *drvdata) in etm4_os_lock() argument
201 if (WARN_ON(!drvdata->csdev)) in etm4_os_lock()
204 etm_write_os_lock(drvdata, &drvdata->csdev->access, 0x1); in etm4_os_lock()
205 drvdata->os_unlock = false; in etm4_os_lock()
208 static void etm4_cs_lock(struct etmv4_drvdata *drvdata, in etm4_cs_lock() argument
216 static void etm4_cs_unlock(struct etmv4_drvdata *drvdata, in etm4_cs_unlock() argument
225 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_cpu_id() local
227 return drvdata->cpu; in etm4_cpu_id()
232 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_trace_id() local
234 return drvdata->trcid; in etm4_trace_id()
238 struct etmv4_drvdata *drvdata; member
247 static void etm4x_prohibit_trace(struct etmv4_drvdata *drvdata) in etm4x_prohibit_trace() argument
250 if (!drvdata->trfcr) in etm4x_prohibit_trace()
265 static void etm4x_allow_trace(struct etmv4_drvdata *drvdata) in etm4x_allow_trace() argument
267 u64 trfcr = drvdata->trfcr; in etm4x_allow_trace()
273 if (drvdata->config.mode & ETM_MODE_EXCL_KERN) in etm4x_allow_trace()
275 if (drvdata->config.mode & ETM_MODE_EXCL_USER) in etm4x_allow_trace()
325 static void etm4_enable_arch_specific(struct etmv4_drvdata *drvdata) in etm4_enable_arch_specific() argument
330 for_each_set_bit(bit, drvdata->arch_features, ETM4_IMPDEF_FEATURE_MAX) { in etm4_enable_arch_specific()
338 static void etm4_disable_arch_specific(struct etmv4_drvdata *drvdata) in etm4_disable_arch_specific() argument
343 for_each_set_bit(bit, drvdata->arch_features, ETM4_IMPDEF_FEATURE_MAX) { in etm4_disable_arch_specific()
351 static void etm4_check_arch_features(struct etmv4_drvdata *drvdata, in etm4_check_arch_features() argument
355 set_bit(ETM4_IMPDEF_HISI_CORE_COMMIT, drvdata->arch_features); in etm4_check_arch_features()
358 static void etm4_enable_arch_specific(struct etmv4_drvdata *drvdata) in etm4_enable_arch_specific() argument
362 static void etm4_disable_arch_specific(struct etmv4_drvdata *drvdata) in etm4_disable_arch_specific() argument
366 static void etm4_check_arch_features(struct etmv4_drvdata *drvdata, in etm4_check_arch_features() argument
372 static int etm4_enable_hw(struct etmv4_drvdata *drvdata) in etm4_enable_hw() argument
375 struct etmv4_config *config = &drvdata->config; in etm4_enable_hw()
376 struct coresight_device *csdev = drvdata->csdev; in etm4_enable_hw()
381 etm4_cs_unlock(drvdata, csa); in etm4_enable_hw()
382 etm4_enable_arch_specific(drvdata); in etm4_enable_hw()
384 etm4_os_unlock(drvdata); in etm4_enable_hw()
406 if (drvdata->nr_pe) in etm4_enable_hw()
413 if (drvdata->stallctl) in etm4_enable_hw()
419 etm4x_relaxed_write32(csa, drvdata->trcid, TRCTRACEIDR); in etm4_enable_hw()
423 if (drvdata->nr_pe_cmp) in etm4_enable_hw()
425 for (i = 0; i < drvdata->nrseqstate - 1; i++) in etm4_enable_hw()
427 if (drvdata->nrseqstate) { in etm4_enable_hw()
432 for (i = 0; i < drvdata->nr_cntr; i++) { in etm4_enable_hw()
442 for (i = 2; i < drvdata->nr_resource * 2; i++) in etm4_enable_hw()
445 for (i = 0; i < drvdata->nr_ss_cmp; i++) { in etm4_enable_hw()
451 if (etm4x_sspcicrn_present(drvdata, i)) in etm4_enable_hw()
454 for (i = 0; i < drvdata->nr_addr_cmp * 2; i++) { in etm4_enable_hw()
458 for (i = 0; i < drvdata->numcidc; i++) in etm4_enable_hw()
461 if (drvdata->numcidc > 4) in etm4_enable_hw()
464 for (i = 0; i < drvdata->numvmidc; i++) in etm4_enable_hw()
467 if (drvdata->numvmidc > 4) in etm4_enable_hw()
470 if (!drvdata->skip_power_up) { in etm4_enable_hw()
484 if (etm4x_is_ete(drvdata)) in etm4_enable_hw()
487 etm4x_allow_trace(drvdata); in etm4_enable_hw()
508 etm4_cs_lock(drvdata, csa); in etm4_enable_hw()
511 drvdata->cpu, rc); in etm4_enable_hw()
521 arg->rc = etm4_enable_hw(arg->drvdata); in etm4_enable_hw_smp_call()
537 static int etm4_config_timestamp_event(struct etmv4_drvdata *drvdata) in etm4_config_timestamp_event() argument
542 struct etmv4_config *config = &drvdata->config; in etm4_config_timestamp_event()
545 if (!drvdata->nr_cntr) in etm4_config_timestamp_event()
549 for (ctridx = 0; ctridx < drvdata->nr_cntr; ctridx++) in etm4_config_timestamp_event()
554 if (ctridx == drvdata->nr_cntr) { in etm4_config_timestamp_event()
566 for (rselector = 2; rselector < drvdata->nr_resource * 2; rselector++) in etm4_config_timestamp_event()
570 if (rselector == drvdata->nr_resource * 2) { in etm4_config_timestamp_event()
613 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_parse_event_config() local
614 struct etmv4_config *config = &drvdata->config; in etm4_parse_event_config()
632 ret = etm4_set_event_filters(drvdata, event); in etm4_parse_event_config()
648 ret = etm4_config_timestamp_event(drvdata); in etm4_parse_event_config()
679 if ((attr->config & BIT(ETM_OPT_RETSTK)) && drvdata->retstack) in etm4_parse_event_config()
705 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_enable_perf() local
707 if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) { in etm4_enable_perf()
717 ret = etm4_enable_hw(drvdata); in etm4_enable_perf()
725 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_enable_sysfs() local
729 spin_lock(&drvdata->spinlock); in etm4_enable_sysfs()
735 arg.drvdata = drvdata; in etm4_enable_sysfs()
736 ret = smp_call_function_single(drvdata->cpu, in etm4_enable_sysfs()
741 drvdata->sticky_enable = true; in etm4_enable_sysfs()
742 spin_unlock(&drvdata->spinlock); in etm4_enable_sysfs()
754 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_enable() local
756 val = local_cmpxchg(&drvdata->mode, CS_MODE_DISABLED, mode); in etm4_enable()
775 local_set(&drvdata->mode, CS_MODE_DISABLED); in etm4_enable()
783 struct etmv4_drvdata *drvdata = info; in etm4_disable_hw() local
784 struct etmv4_config *config = &drvdata->config; in etm4_disable_hw()
785 struct coresight_device *csdev = drvdata->csdev; in etm4_disable_hw()
790 etm4_cs_unlock(drvdata, csa); in etm4_disable_hw()
791 etm4_disable_arch_specific(drvdata); in etm4_disable_hw()
793 if (!drvdata->skip_power_up) { in etm4_disable_hw()
809 etm4x_prohibit_trace(drvdata); in etm4_disable_hw()
826 for (i = 0; i < drvdata->nr_ss_cmp; i++) { in etm4_disable_hw()
832 for (i = 0; i < drvdata->nr_cntr; i++) { in etm4_disable_hw()
838 etm4_cs_lock(drvdata, csa); in etm4_disable_hw()
840 dev_dbg(&drvdata->csdev->dev, in etm4_disable_hw()
841 "cpu: %d disable smp call done\n", drvdata->cpu); in etm4_disable_hw()
849 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_disable_perf() local
852 if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) in etm4_disable_perf()
855 etm4_disable_hw(drvdata); in etm4_disable_perf()
878 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_disable_sysfs() local
887 spin_lock(&drvdata->spinlock); in etm4_disable_sysfs()
893 smp_call_function_single(drvdata->cpu, etm4_disable_hw, drvdata, 1); in etm4_disable_sysfs()
895 spin_unlock(&drvdata->spinlock); in etm4_disable_sysfs()
905 struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etm4_disable() local
912 mode = local_read(&drvdata->mode); in etm4_disable()
926 local_set(&drvdata->mode, CS_MODE_DISABLED); in etm4_disable()
947 static bool etm4_init_sysreg_access(struct etmv4_drvdata *drvdata, in etm4_init_sysreg_access() argument
978 drvdata->arch = etm_devarch_to_arch(devarch); in etm4_init_sysreg_access()
982 static bool etm4_init_iomem_access(struct etmv4_drvdata *drvdata, in etm4_init_iomem_access() argument
985 u32 devarch = readl_relaxed(drvdata->base + TRCDEVARCH); in etm4_init_iomem_access()
1000 drvdata->arch = etm_devarch_to_arch(devarch); in etm4_init_iomem_access()
1001 *csa = CSDEV_ACCESS_IOMEM(drvdata->base); in etm4_init_iomem_access()
1005 static bool etm4_init_csdev_access(struct etmv4_drvdata *drvdata, in etm4_init_csdev_access() argument
1013 if (drvdata->base) in etm4_init_csdev_access()
1014 return etm4_init_iomem_access(drvdata, csa); in etm4_init_csdev_access()
1016 if (etm4_init_sysreg_access(drvdata, csa)) in etm4_init_csdev_access()
1022 static void cpu_detect_trace_filtering(struct etmv4_drvdata *drvdata) in cpu_detect_trace_filtering() argument
1027 drvdata->trfcr = 0; in cpu_detect_trace_filtering()
1044 drvdata->trfcr = trfcr; in cpu_detect_trace_filtering()
1055 struct etmv4_drvdata *drvdata; in etm4_init_arch_data() local
1059 drvdata = init_arg->drvdata; in etm4_init_arch_data()
1067 if (!etm4_init_csdev_access(drvdata, csa)) in etm4_init_arch_data()
1071 etm_detect_os_lock(drvdata, csa); in etm4_init_arch_data()
1074 etm4_os_unlock_csa(drvdata, csa); in etm4_init_arch_data()
1075 etm4_cs_unlock(drvdata, csa); in etm4_init_arch_data()
1077 etm4_check_arch_features(drvdata, init_arg->pid); in etm4_init_arch_data()
1084 drvdata->instrp0 = true; in etm4_init_arch_data()
1086 drvdata->instrp0 = false; in etm4_init_arch_data()
1090 drvdata->trcbb = true; in etm4_init_arch_data()
1092 drvdata->trcbb = false; in etm4_init_arch_data()
1096 drvdata->trccond = true; in etm4_init_arch_data()
1098 drvdata->trccond = false; in etm4_init_arch_data()
1102 drvdata->trccci = true; in etm4_init_arch_data()
1104 drvdata->trccci = false; in etm4_init_arch_data()
1108 drvdata->retstack = true; in etm4_init_arch_data()
1110 drvdata->retstack = false; in etm4_init_arch_data()
1113 drvdata->nr_event = BMVAL(etmidr0, 10, 11); in etm4_init_arch_data()
1115 drvdata->q_support = BMVAL(etmidr0, 15, 16); in etm4_init_arch_data()
1116 if (drvdata->q_support) in etm4_init_arch_data()
1117 drvdata->q_filt = !!(etmidr0 & TRCIDR0_QFILT); in etm4_init_arch_data()
1119 drvdata->ts_size = BMVAL(etmidr0, 24, 28); in etm4_init_arch_data()
1124 drvdata->ctxid_size = BMVAL(etmidr2, 5, 9); in etm4_init_arch_data()
1126 drvdata->vmid_size = BMVAL(etmidr2, 10, 14); in etm4_init_arch_data()
1128 drvdata->ccsize = BMVAL(etmidr2, 25, 28); in etm4_init_arch_data()
1132 drvdata->ccitmin = BMVAL(etmidr3, 0, 11); in etm4_init_arch_data()
1134 drvdata->s_ex_level = BMVAL(etmidr3, 16, 19); in etm4_init_arch_data()
1135 drvdata->config.s_ex_level = drvdata->s_ex_level; in etm4_init_arch_data()
1137 drvdata->ns_ex_level = BMVAL(etmidr3, 20, 23); in etm4_init_arch_data()
1144 drvdata->trc_error = true; in etm4_init_arch_data()
1146 drvdata->trc_error = false; in etm4_init_arch_data()
1150 drvdata->syncpr = true; in etm4_init_arch_data()
1152 drvdata->syncpr = false; in etm4_init_arch_data()
1156 drvdata->stallctl = true; in etm4_init_arch_data()
1158 drvdata->stallctl = false; in etm4_init_arch_data()
1162 drvdata->sysstall = true; in etm4_init_arch_data()
1164 drvdata->sysstall = false; in etm4_init_arch_data()
1172 drvdata->nr_pe = (BMVAL(etmidr3, 12, 13) << 3) | BMVAL(etmidr3, 28, 30); in etm4_init_arch_data()
1176 drvdata->nooverflow = true; in etm4_init_arch_data()
1178 drvdata->nooverflow = false; in etm4_init_arch_data()
1183 drvdata->nr_addr_cmp = BMVAL(etmidr4, 0, 3); in etm4_init_arch_data()
1185 drvdata->nr_pe_cmp = BMVAL(etmidr4, 12, 15); in etm4_init_arch_data()
1196 drvdata->nr_resource = BMVAL(etmidr4, 16, 19); in etm4_init_arch_data()
1197 if ((drvdata->arch < ETM_ARCH_V4_3) || (drvdata->nr_resource > 0)) in etm4_init_arch_data()
1198 drvdata->nr_resource += 1; in etm4_init_arch_data()
1204 drvdata->nr_ss_cmp = BMVAL(etmidr4, 20, 23); in etm4_init_arch_data()
1205 for (i = 0; i < drvdata->nr_ss_cmp; i++) { in etm4_init_arch_data()
1206 drvdata->config.ss_status[i] = in etm4_init_arch_data()
1210 drvdata->numcidc = BMVAL(etmidr4, 24, 27); in etm4_init_arch_data()
1212 drvdata->numvmidc = BMVAL(etmidr4, 28, 31); in etm4_init_arch_data()
1216 drvdata->nr_ext_inp = BMVAL(etmidr5, 0, 8); in etm4_init_arch_data()
1218 drvdata->trcid_size = BMVAL(etmidr5, 16, 21); in etm4_init_arch_data()
1221 drvdata->atbtrig = true; in etm4_init_arch_data()
1223 drvdata->atbtrig = false; in etm4_init_arch_data()
1228 if (BMVAL(etmidr5, 23, 23) && (!drvdata->skip_power_up)) in etm4_init_arch_data()
1229 drvdata->lpoverride = true; in etm4_init_arch_data()
1231 drvdata->lpoverride = false; in etm4_init_arch_data()
1233 drvdata->nrseqstate = BMVAL(etmidr5, 25, 27); in etm4_init_arch_data()
1235 drvdata->nr_cntr = BMVAL(etmidr5, 28, 30); in etm4_init_arch_data()
1236 etm4_cs_lock(drvdata, csa); in etm4_init_arch_data()
1237 cpu_detect_trace_filtering(drvdata); in etm4_init_arch_data()
1400 static int etm4_get_next_comparator(struct etmv4_drvdata *drvdata, u32 type) in etm4_get_next_comparator() argument
1403 struct etmv4_config *config = &drvdata->config; in etm4_get_next_comparator()
1409 nr_comparator = drvdata->nr_addr_cmp * 2; in etm4_get_next_comparator()
1439 static int etm4_set_event_filters(struct etmv4_drvdata *drvdata, in etm4_set_event_filters() argument
1444 struct etmv4_config *config = &drvdata->config; in etm4_set_event_filters()
1465 comparator = etm4_get_next_comparator(drvdata, type); in etm4_set_event_filters()
1584 static void etm4_init_trace_id(struct etmv4_drvdata *drvdata) in etm4_init_trace_id() argument
1586 drvdata->trcid = coresight_get_trace_id(drvdata->cpu); in etm4_init_trace_id()
1589 static int __etm4_cpu_save(struct etmv4_drvdata *drvdata) in __etm4_cpu_save() argument
1593 struct coresight_device *csdev = drvdata->csdev; in __etm4_cpu_save()
1610 etm4_cs_unlock(drvdata, csa); in __etm4_cpu_save()
1612 etm4_os_lock(drvdata); in __etm4_cpu_save()
1618 etm4_os_unlock(drvdata); in __etm4_cpu_save()
1623 state = drvdata->save_state; in __etm4_cpu_save()
1626 if (drvdata->nr_pe) in __etm4_cpu_save()
1632 if (drvdata->stallctl) in __etm4_cpu_save()
1639 if (drvdata->q_filt) in __etm4_cpu_save()
1645 if (drvdata->nr_pe_cmp) in __etm4_cpu_save()
1648 for (i = 0; i < drvdata->nrseqstate - 1; i++) in __etm4_cpu_save()
1651 if (drvdata->nrseqstate) { in __etm4_cpu_save()
1657 for (i = 0; i < drvdata->nr_cntr; i++) { in __etm4_cpu_save()
1664 for (i = 2; i < drvdata->nr_resource * 2; i++) in __etm4_cpu_save()
1667 for (i = 0; i < drvdata->nr_ss_cmp; i++) { in __etm4_cpu_save()
1670 if (etm4x_sspcicrn_present(drvdata, i)) in __etm4_cpu_save()
1674 for (i = 0; i < drvdata->nr_addr_cmp * 2; i++) { in __etm4_cpu_save()
1686 for (i = 0; i < drvdata->numcidc; i++) in __etm4_cpu_save()
1689 for (i = 0; i < drvdata->numvmidc; i++) in __etm4_cpu_save()
1693 if (drvdata->numcidc > 4) in __etm4_cpu_save()
1697 if (drvdata->numvmidc > 4) in __etm4_cpu_save()
1702 if (!drvdata->skip_power_up) in __etm4_cpu_save()
1709 etm4_os_unlock(drvdata); in __etm4_cpu_save()
1714 drvdata->state_needs_restore = true; in __etm4_cpu_save()
1721 if (!drvdata->skip_power_up) in __etm4_cpu_save()
1725 etm4_cs_lock(drvdata, csa); in __etm4_cpu_save()
1729 static int etm4_cpu_save(struct etmv4_drvdata *drvdata) in etm4_cpu_save() argument
1734 if (drvdata->trfcr) in etm4_cpu_save()
1735 drvdata->save_trfcr = read_trfcr(); in etm4_cpu_save()
1740 if (local_read(&drvdata->mode) && drvdata->save_state) in etm4_cpu_save()
1741 ret = __etm4_cpu_save(drvdata); in etm4_cpu_save()
1745 static void __etm4_cpu_restore(struct etmv4_drvdata *drvdata) in __etm4_cpu_restore() argument
1748 struct etmv4_save_state *state = drvdata->save_state; in __etm4_cpu_restore()
1749 struct csdev_access *csa = &drvdata->csdev->access; in __etm4_cpu_restore()
1751 if (WARN_ON(!drvdata->csdev)) in __etm4_cpu_restore()
1754 etm4_cs_unlock(drvdata, csa); in __etm4_cpu_restore()
1758 if (drvdata->nr_pe) in __etm4_cpu_restore()
1764 if (drvdata->stallctl) in __etm4_cpu_restore()
1771 if (drvdata->q_filt) in __etm4_cpu_restore()
1777 if (drvdata->nr_pe_cmp) in __etm4_cpu_restore()
1780 for (i = 0; i < drvdata->nrseqstate - 1; i++) in __etm4_cpu_restore()
1783 if (drvdata->nrseqstate) { in __etm4_cpu_restore()
1789 for (i = 0; i < drvdata->nr_cntr; i++) { in __etm4_cpu_restore()
1796 for (i = 2; i < drvdata->nr_resource * 2; i++) in __etm4_cpu_restore()
1799 for (i = 0; i < drvdata->nr_ss_cmp; i++) { in __etm4_cpu_restore()
1802 if (etm4x_sspcicrn_present(drvdata, i)) in __etm4_cpu_restore()
1806 for (i = 0; i < drvdata->nr_addr_cmp * 2; i++) { in __etm4_cpu_restore()
1811 for (i = 0; i < drvdata->numcidc; i++) in __etm4_cpu_restore()
1814 for (i = 0; i < drvdata->numvmidc; i++) in __etm4_cpu_restore()
1818 if (drvdata->numcidc > 4) in __etm4_cpu_restore()
1822 if (drvdata->numvmidc > 4) in __etm4_cpu_restore()
1827 if (!drvdata->skip_power_up) in __etm4_cpu_restore()
1830 drvdata->state_needs_restore = false; in __etm4_cpu_restore()
1840 etm4_os_unlock(drvdata); in __etm4_cpu_restore()
1841 etm4_cs_lock(drvdata, csa); in __etm4_cpu_restore()
1844 static void etm4_cpu_restore(struct etmv4_drvdata *drvdata) in etm4_cpu_restore() argument
1846 if (drvdata->trfcr) in etm4_cpu_restore()
1847 write_trfcr(drvdata->save_trfcr); in etm4_cpu_restore()
1848 if (drvdata->state_needs_restore) in etm4_cpu_restore()
1849 __etm4_cpu_restore(drvdata); in etm4_cpu_restore()
1855 struct etmv4_drvdata *drvdata; in etm4_cpu_pm_notify() local
1861 drvdata = etmdrvdata[cpu]; in etm4_cpu_pm_notify()
1863 if (WARN_ON_ONCE(drvdata->cpu != cpu)) in etm4_cpu_pm_notify()
1868 if (etm4_cpu_save(drvdata)) in etm4_cpu_pm_notify()
1873 etm4_cpu_restore(drvdata); in etm4_cpu_pm_notify()
1934 struct etmv4_drvdata *drvdata; in etm4_probe() local
1940 drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); in etm4_probe()
1941 if (!drvdata) in etm4_probe()
1944 dev_set_drvdata(dev, drvdata); in etm4_probe()
1951 drvdata->save_state = devm_kmalloc(dev, in etm4_probe()
1953 if (!drvdata->save_state) in etm4_probe()
1957 drvdata->base = base; in etm4_probe()
1959 spin_lock_init(&drvdata->spinlock); in etm4_probe()
1961 drvdata->cpu = coresight_get_cpu(dev); in etm4_probe()
1962 if (drvdata->cpu < 0) in etm4_probe()
1963 return drvdata->cpu; in etm4_probe()
1965 init_arg.drvdata = drvdata; in etm4_probe()
1969 if (smp_call_function_single(drvdata->cpu, in etm4_probe()
1973 if (!drvdata->arch) in etm4_probe()
1979 drvdata->skip_power_up = true; in etm4_probe()
1981 major = ETM_ARCH_MAJOR_VERSION(drvdata->arch); in etm4_probe()
1982 minor = ETM_ARCH_MINOR_VERSION(drvdata->arch); in etm4_probe()
1984 if (etm4x_is_ete(drvdata)) { in etm4_probe()
1993 "%s%d", type_name, drvdata->cpu); in etm4_probe()
1997 etm4_init_trace_id(drvdata); in etm4_probe()
1998 etm4_set_default(&drvdata->config); in etm4_probe()
2012 drvdata->csdev = coresight_register(&desc); in etm4_probe()
2013 if (IS_ERR(drvdata->csdev)) in etm4_probe()
2014 return PTR_ERR(drvdata->csdev); in etm4_probe()
2016 ret = etm_perf_symlink(drvdata->csdev, true); in etm4_probe()
2018 coresight_unregister(drvdata->csdev); in etm4_probe()
2023 ret = etm4_cscfg_register(drvdata->csdev); in etm4_probe()
2025 coresight_unregister(drvdata->csdev); in etm4_probe()
2029 etmdrvdata[drvdata->cpu] = drvdata; in etm4_probe()
2031 dev_info(&drvdata->csdev->dev, "CPU%d: %s v%d.%d initialized\n", in etm4_probe()
2032 drvdata->cpu, type_name, major, minor); in etm4_probe()
2035 coresight_enable(drvdata->csdev); in etm4_probe()
2036 drvdata->boot_enable = true; in etm4_probe()
2096 static void etm4_remove_dev(struct etmv4_drvdata *drvdata) in etm4_remove_dev() argument
2098 etm_perf_symlink(drvdata->csdev, false); in etm4_remove_dev()
2110 if (smp_call_function_single(drvdata->cpu, clear_etmdrvdata, &drvdata->cpu, 1)) in etm4_remove_dev()
2111 etmdrvdata[drvdata->cpu] = NULL; in etm4_remove_dev()
2115 cscfg_unregister_csdev(drvdata->csdev); in etm4_remove_dev()
2116 coresight_unregister(drvdata->csdev); in etm4_remove_dev()
2121 struct etmv4_drvdata *drvdata = dev_get_drvdata(&adev->dev); in etm4_remove_amba() local
2123 if (drvdata) in etm4_remove_amba()
2124 etm4_remove_dev(drvdata); in etm4_remove_amba()
2129 struct etmv4_drvdata *drvdata = dev_get_drvdata(&pdev->dev); in etm4_remove_platform_dev() local
2131 if (drvdata) in etm4_remove_platform_dev()
2132 etm4_remove_dev(drvdata); in etm4_remove_platform_dev()