Lines Matching refs:drvdata

112 static void debug_os_unlock(struct debug_drvdata *drvdata)  in debug_os_unlock()  argument
115 writel_relaxed(0x0, drvdata->base + EDOSLAR); in debug_os_unlock()
132 static bool debug_access_permitted(struct debug_drvdata *drvdata) in debug_access_permitted() argument
135 if (!(drvdata->edprsr & EDPRSR_PU)) in debug_access_permitted()
139 if (drvdata->edprsr & EDPRSR_DLK) in debug_access_permitted()
145 static void debug_force_cpu_powered_up(struct debug_drvdata *drvdata) in debug_force_cpu_powered_up() argument
157 edprcr = readl_relaxed(drvdata->base + EDPRCR); in debug_force_cpu_powered_up()
159 writel_relaxed(edprcr, drvdata->base + EDPRCR); in debug_force_cpu_powered_up()
162 if (readx_poll_timeout_atomic(readl_relaxed, drvdata->base + EDPRSR, in debug_force_cpu_powered_up()
163 drvdata->edprsr, (drvdata->edprsr & EDPRSR_PU), in debug_force_cpu_powered_up()
171 dev_err(drvdata->dev, "%s: power up request for CPU%d failed\n", in debug_force_cpu_powered_up()
172 __func__, drvdata->cpu); in debug_force_cpu_powered_up()
180 edprcr = readl_relaxed(drvdata->base + EDPRCR); in debug_force_cpu_powered_up()
182 writel_relaxed(edprcr, drvdata->base + EDPRCR); in debug_force_cpu_powered_up()
184 drvdata->edprsr = readl_relaxed(drvdata->base + EDPRSR); in debug_force_cpu_powered_up()
187 if (unlikely(!(drvdata->edprsr & EDPRSR_PU))) in debug_force_cpu_powered_up()
191 static void debug_read_regs(struct debug_drvdata *drvdata) in debug_read_regs() argument
195 CS_UNLOCK(drvdata->base); in debug_read_regs()
198 debug_os_unlock(drvdata); in debug_read_regs()
201 save_edprcr = readl_relaxed(drvdata->base + EDPRCR); in debug_read_regs()
207 debug_force_cpu_powered_up(drvdata); in debug_read_regs()
209 if (!debug_access_permitted(drvdata)) in debug_read_regs()
212 drvdata->edpcsr = readl_relaxed(drvdata->base + EDPCSR); in debug_read_regs()
221 if (drvdata->edpcsr == EDPCSR_PROHIBITED) in debug_read_regs()
230 drvdata->edpcsr_hi = readl_relaxed(drvdata->base + EDPCSR_HI); in debug_read_regs()
232 if (drvdata->edcidsr_present) in debug_read_regs()
233 drvdata->edcidsr = readl_relaxed(drvdata->base + EDCIDSR); in debug_read_regs()
235 if (drvdata->edvidsr_present) in debug_read_regs()
236 drvdata->edvidsr = readl_relaxed(drvdata->base + EDVIDSR); in debug_read_regs()
240 writel_relaxed(save_edprcr, drvdata->base + EDPRCR); in debug_read_regs()
242 CS_LOCK(drvdata->base); in debug_read_regs()
246 static unsigned long debug_adjust_pc(struct debug_drvdata *drvdata) in debug_adjust_pc() argument
248 return (unsigned long)drvdata->edpcsr_hi << 32 | in debug_adjust_pc()
249 (unsigned long)drvdata->edpcsr; in debug_adjust_pc()
252 static unsigned long debug_adjust_pc(struct debug_drvdata *drvdata) in debug_adjust_pc() argument
257 pc = (unsigned long)drvdata->edpcsr; in debug_adjust_pc()
259 if (drvdata->pc_has_offset) { in debug_adjust_pc()
277 dev_emerg(drvdata->dev, in debug_adjust_pc()
286 static void debug_dump_regs(struct debug_drvdata *drvdata) in debug_dump_regs() argument
288 struct device *dev = drvdata->dev; in debug_dump_regs()
292 drvdata->edprsr, in debug_dump_regs()
293 drvdata->edprsr & EDPRSR_PU ? "On" : "Off", in debug_dump_regs()
294 drvdata->edprsr & EDPRSR_DLK ? "Lock" : "Unlock"); in debug_dump_regs()
296 if (!debug_access_permitted(drvdata)) { in debug_dump_regs()
301 if (drvdata->edpcsr == EDPCSR_PROHIBITED) { in debug_dump_regs()
306 pc = debug_adjust_pc(drvdata); in debug_dump_regs()
309 if (drvdata->edcidsr_present) in debug_dump_regs()
310 dev_emerg(dev, " EDCIDSR: %08x\n", drvdata->edcidsr); in debug_dump_regs()
312 if (drvdata->edvidsr_present) in debug_dump_regs()
314 drvdata->edvidsr, in debug_dump_regs()
315 drvdata->edvidsr & EDVIDSR_NS ? in debug_dump_regs()
317 drvdata->edvidsr & EDVIDSR_E3 ? "EL3" : in debug_dump_regs()
318 (drvdata->edvidsr & EDVIDSR_E2 ? in debug_dump_regs()
320 drvdata->edvidsr & EDVIDSR_HV ? 64 : 32, in debug_dump_regs()
321 drvdata->edvidsr & (u32)EDVIDSR_VMID); in debug_dump_regs()
326 struct debug_drvdata *drvdata = info; in debug_init_arch_data() local
330 CS_UNLOCK(drvdata->base); in debug_init_arch_data()
333 eddevid = readl_relaxed(drvdata->base + EDDEVID); in debug_init_arch_data()
334 eddevid1 = readl_relaxed(drvdata->base + EDDEVID1); in debug_init_arch_data()
336 CS_LOCK(drvdata->base); in debug_init_arch_data()
342 drvdata->edpcsr_present = false; in debug_init_arch_data()
343 drvdata->edcidsr_present = false; in debug_init_arch_data()
344 drvdata->edvidsr_present = false; in debug_init_arch_data()
345 drvdata->pc_has_offset = false; in debug_init_arch_data()
349 drvdata->edvidsr_present = true; in debug_init_arch_data()
352 drvdata->edcidsr_present = true; in debug_init_arch_data()
362 drvdata->edpcsr_present = in debug_init_arch_data()
366 drvdata->pc_has_offset = in debug_init_arch_data()
381 struct debug_drvdata *drvdata; in debug_notifier_call() local
393 drvdata = per_cpu(debug_drvdata, cpu); in debug_notifier_call()
394 if (!drvdata) in debug_notifier_call()
397 dev_emerg(drvdata->dev, "CPU[%d]:\n", drvdata->cpu); in debug_notifier_call()
399 debug_read_regs(drvdata); in debug_notifier_call()
400 debug_dump_regs(drvdata); in debug_notifier_call()
414 struct debug_drvdata *drvdata; in debug_enable_func() local
425 drvdata = per_cpu(debug_drvdata, cpu); in debug_enable_func()
426 if (!drvdata) in debug_enable_func()
429 ret = pm_runtime_get_sync(drvdata->dev); in debug_enable_func()
444 drvdata = per_cpu(debug_drvdata, cpu); in debug_enable_func()
445 pm_runtime_put_noidle(drvdata->dev); in debug_enable_func()
453 struct debug_drvdata *drvdata; in debug_disable_func() local
462 drvdata = per_cpu(debug_drvdata, cpu); in debug_disable_func()
463 if (!drvdata) in debug_disable_func()
466 ret = pm_runtime_put(drvdata->dev); in debug_disable_func()
564 struct debug_drvdata *drvdata; in debug_probe() local
568 drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); in debug_probe()
569 if (!drvdata) in debug_probe()
572 drvdata->cpu = coresight_get_cpu(dev); in debug_probe()
573 if (drvdata->cpu < 0) in debug_probe()
574 return drvdata->cpu; in debug_probe()
576 if (per_cpu(debug_drvdata, drvdata->cpu)) { in debug_probe()
578 drvdata->cpu); in debug_probe()
582 drvdata->dev = &adev->dev; in debug_probe()
583 amba_set_drvdata(adev, drvdata); in debug_probe()
590 drvdata->base = base; in debug_probe()
593 per_cpu(debug_drvdata, drvdata->cpu) = drvdata; in debug_probe()
594 ret = smp_call_function_single(drvdata->cpu, debug_init_arch_data, in debug_probe()
595 drvdata, 1); in debug_probe()
599 dev_err(dev, "CPU%d debug arch init failed\n", drvdata->cpu); in debug_probe()
603 if (!drvdata->edpcsr_present) { in debug_probe()
605 drvdata->cpu); in debug_probe()
622 dev_info(dev, "Coresight debug-CPU%d initialized\n", drvdata->cpu); in debug_probe()
628 per_cpu(debug_drvdata, drvdata->cpu) = NULL; in debug_probe()
635 struct debug_drvdata *drvdata = amba_get_drvdata(adev); in debug_remove() local
637 per_cpu(debug_drvdata, drvdata->cpu) = NULL; in debug_remove()