Lines Matching refs:drvdata
94 static unsigned int etb_get_buffer_depth(struct etb_drvdata *drvdata) in etb_get_buffer_depth() argument
98 pm_runtime_get_sync(drvdata->dev); in etb_get_buffer_depth()
101 depth = readl_relaxed(drvdata->base + ETB_RAM_DEPTH_REG); in etb_get_buffer_depth()
103 pm_runtime_put(drvdata->dev); in etb_get_buffer_depth()
107 static void etb_enable_hw(struct etb_drvdata *drvdata) in etb_enable_hw() argument
112 CS_UNLOCK(drvdata->base); in etb_enable_hw()
114 depth = drvdata->buffer_depth; in etb_enable_hw()
116 writel_relaxed(0x0, drvdata->base + ETB_RAM_WRITE_POINTER); in etb_enable_hw()
119 writel_relaxed(0x0, drvdata->base + ETB_RWD_REG); in etb_enable_hw()
122 writel_relaxed(0x0, drvdata->base + ETB_RAM_WRITE_POINTER); in etb_enable_hw()
124 writel_relaxed(0x0, drvdata->base + ETB_RAM_READ_POINTER); in etb_enable_hw()
126 writel_relaxed(drvdata->trigger_cntr, drvdata->base + ETB_TRG); in etb_enable_hw()
128 drvdata->base + ETB_FFCR); in etb_enable_hw()
130 writel_relaxed(ETB_CTL_CAPT_EN, drvdata->base + ETB_CTL_REG); in etb_enable_hw()
132 CS_LOCK(drvdata->base); in etb_enable_hw()
137 struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etb_enable() local
140 pm_runtime_get_sync(drvdata->dev); in etb_enable()
142 spin_lock_irqsave(&drvdata->spinlock, flags); in etb_enable()
143 etb_enable_hw(drvdata); in etb_enable()
144 drvdata->enable = true; in etb_enable()
145 spin_unlock_irqrestore(&drvdata->spinlock, flags); in etb_enable()
147 dev_info(drvdata->dev, "ETB enabled\n"); in etb_enable()
151 static void etb_disable_hw(struct etb_drvdata *drvdata) in etb_disable_hw() argument
155 CS_UNLOCK(drvdata->base); in etb_disable_hw()
157 ffcr = readl_relaxed(drvdata->base + ETB_FFCR); in etb_disable_hw()
160 writel_relaxed(ffcr, drvdata->base + ETB_FFCR); in etb_disable_hw()
163 writel_relaxed(ffcr, drvdata->base + ETB_FFCR); in etb_disable_hw()
165 if (coresight_timeout(drvdata->base, ETB_FFCR, ETB_FFCR_BIT, 0)) { in etb_disable_hw()
166 dev_err(drvdata->dev, in etb_disable_hw()
172 writel_relaxed(0x0, drvdata->base + ETB_CTL_REG); in etb_disable_hw()
174 if (coresight_timeout(drvdata->base, ETB_FFSR, ETB_FFSR_BIT, 1)) { in etb_disable_hw()
175 dev_err(drvdata->dev, in etb_disable_hw()
180 CS_LOCK(drvdata->base); in etb_disable_hw()
183 static void etb_dump_hw(struct etb_drvdata *drvdata) in etb_dump_hw() argument
191 CS_UNLOCK(drvdata->base); in etb_dump_hw()
193 read_ptr = readl_relaxed(drvdata->base + ETB_RAM_READ_POINTER); in etb_dump_hw()
194 write_ptr = readl_relaxed(drvdata->base + ETB_RAM_WRITE_POINTER); in etb_dump_hw()
199 dev_err(drvdata->dev, in etb_dump_hw()
202 dev_err(drvdata->dev, "frameoff: %lu, frame_endoff: %lu\n", in etb_dump_hw()
207 if ((readl_relaxed(drvdata->base + ETB_STATUS_REG) in etb_dump_hw()
209 writel_relaxed(0x0, drvdata->base + ETB_RAM_READ_POINTER); in etb_dump_hw()
211 writel_relaxed(write_ptr, drvdata->base + ETB_RAM_READ_POINTER); in etb_dump_hw()
213 depth = drvdata->buffer_depth; in etb_dump_hw()
214 buf_ptr = drvdata->buf; in etb_dump_hw()
216 read_data = readl_relaxed(drvdata->base + in etb_dump_hw()
234 writel_relaxed(read_ptr, drvdata->base + ETB_RAM_READ_POINTER); in etb_dump_hw()
236 CS_LOCK(drvdata->base); in etb_dump_hw()
241 struct etb_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); in etb_disable() local
244 spin_lock_irqsave(&drvdata->spinlock, flags); in etb_disable()
245 etb_disable_hw(drvdata); in etb_disable()
246 etb_dump_hw(drvdata); in etb_disable()
247 drvdata->enable = false; in etb_disable()
248 spin_unlock_irqrestore(&drvdata->spinlock, flags); in etb_disable()
250 pm_runtime_put(drvdata->dev); in etb_disable()
252 dev_info(drvdata->dev, "ETB disabled\n"); in etb_disable()
264 static void etb_dump(struct etb_drvdata *drvdata) in etb_dump() argument
268 spin_lock_irqsave(&drvdata->spinlock, flags); in etb_dump()
269 if (drvdata->enable) { in etb_dump()
270 etb_disable_hw(drvdata); in etb_dump()
271 etb_dump_hw(drvdata); in etb_dump()
272 etb_enable_hw(drvdata); in etb_dump()
274 spin_unlock_irqrestore(&drvdata->spinlock, flags); in etb_dump()
276 dev_info(drvdata->dev, "ETB dumped\n"); in etb_dump()
281 struct etb_drvdata *drvdata = container_of(file->private_data, in etb_open() local
284 if (atomic_cmpxchg(&drvdata->in_use, 0, 1)) in etb_open()
287 dev_dbg(drvdata->dev, "%s: successfully opened\n", __func__); in etb_open()
295 struct etb_drvdata *drvdata = container_of(file->private_data, in etb_read() local
298 etb_dump(drvdata); in etb_read()
300 depth = drvdata->buffer_depth; in etb_read()
304 if (copy_to_user(data, drvdata->buf + *ppos, len)) { in etb_read()
305 dev_dbg(drvdata->dev, "%s: copy_to_user failed\n", __func__); in etb_read()
311 dev_dbg(drvdata->dev, "%s: %zu bytes copied, %d bytes left\n", in etb_read()
318 struct etb_drvdata *drvdata = container_of(file->private_data, in etb_release() local
320 atomic_set(&drvdata->in_use, 0); in etb_release()
322 dev_dbg(drvdata->dev, "%s: released\n", __func__); in etb_release()
340 struct etb_drvdata *drvdata = dev_get_drvdata(dev->parent); in status_show() local
342 pm_runtime_get_sync(drvdata->dev); in status_show()
343 spin_lock_irqsave(&drvdata->spinlock, flags); in status_show()
344 CS_UNLOCK(drvdata->base); in status_show()
346 etb_rdr = readl_relaxed(drvdata->base + ETB_RAM_DEPTH_REG); in status_show()
347 etb_sr = readl_relaxed(drvdata->base + ETB_STATUS_REG); in status_show()
348 etb_rrp = readl_relaxed(drvdata->base + ETB_RAM_READ_POINTER); in status_show()
349 etb_rwp = readl_relaxed(drvdata->base + ETB_RAM_WRITE_POINTER); in status_show()
350 etb_trg = readl_relaxed(drvdata->base + ETB_TRG); in status_show()
351 etb_cr = readl_relaxed(drvdata->base + ETB_CTL_REG); in status_show()
352 etb_ffsr = readl_relaxed(drvdata->base + ETB_FFSR); in status_show()
353 etb_ffcr = readl_relaxed(drvdata->base + ETB_FFCR); in status_show()
355 CS_LOCK(drvdata->base); in status_show()
356 spin_unlock_irqrestore(&drvdata->spinlock, flags); in status_show()
358 pm_runtime_put(drvdata->dev); in status_show()
379 struct etb_drvdata *drvdata = dev_get_drvdata(dev->parent); in trigger_cntr_show() local
380 unsigned long val = drvdata->trigger_cntr; in trigger_cntr_show()
391 struct etb_drvdata *drvdata = dev_get_drvdata(dev->parent); in trigger_cntr_store() local
397 drvdata->trigger_cntr = val; in trigger_cntr_store()
415 struct etb_drvdata *drvdata; in etb_probe() local
427 drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL); in etb_probe()
428 if (!drvdata) in etb_probe()
431 drvdata->dev = &adev->dev; in etb_probe()
432 drvdata->atclk = devm_clk_get(&adev->dev, "atclk"); /* optional */ in etb_probe()
433 if (!IS_ERR(drvdata->atclk)) { in etb_probe()
434 ret = clk_prepare_enable(drvdata->atclk); in etb_probe()
438 dev_set_drvdata(dev, drvdata); in etb_probe()
445 drvdata->base = base; in etb_probe()
447 spin_lock_init(&drvdata->spinlock); in etb_probe()
449 drvdata->buffer_depth = etb_get_buffer_depth(drvdata); in etb_probe()
452 if (drvdata->buffer_depth & 0x80000000) in etb_probe()
455 drvdata->buf = devm_kzalloc(dev, in etb_probe()
456 drvdata->buffer_depth * 4, GFP_KERNEL); in etb_probe()
457 if (!drvdata->buf) { in etb_probe()
459 drvdata->buffer_depth * 4); in etb_probe()
473 drvdata->csdev = coresight_register(desc); in etb_probe()
474 if (IS_ERR(drvdata->csdev)) in etb_probe()
475 return PTR_ERR(drvdata->csdev); in etb_probe()
477 drvdata->miscdev.name = pdata->name; in etb_probe()
478 drvdata->miscdev.minor = MISC_DYNAMIC_MINOR; in etb_probe()
479 drvdata->miscdev.fops = &etb_fops; in etb_probe()
480 ret = misc_register(&drvdata->miscdev); in etb_probe()
488 coresight_unregister(drvdata->csdev); in etb_probe()
494 struct etb_drvdata *drvdata = amba_get_drvdata(adev); in etb_remove() local
496 misc_deregister(&drvdata->miscdev); in etb_remove()
497 coresight_unregister(drvdata->csdev); in etb_remove()
504 struct etb_drvdata *drvdata = dev_get_drvdata(dev); in etb_runtime_suspend() local
506 if (drvdata && !IS_ERR(drvdata->atclk)) in etb_runtime_suspend()
507 clk_disable_unprepare(drvdata->atclk); in etb_runtime_suspend()
514 struct etb_drvdata *drvdata = dev_get_drvdata(dev); in etb_runtime_resume() local
516 if (drvdata && !IS_ERR(drvdata->atclk)) in etb_runtime_resume()
517 clk_prepare_enable(drvdata->atclk); in etb_runtime_resume()