Lines Matching refs:drvdata

24 static bool smb_buffer_not_empty(struct smb_drv_data *drvdata)
26 u32 buf_status = readl(drvdata->base + SMB_LB_INT_STS_REG);
31 static void smb_update_data_size(struct smb_drv_data *drvdata)
33 struct smb_data_buffer *sdb = &drvdata->sdb;
36 buf_wrptr = readl(drvdata->base + SMB_LB_WR_ADDR_REG) -
40 if (buf_wrptr == sdb->buf_rdptr && smb_buffer_not_empty(drvdata)) {
55 static void smb_update_read_ptr(struct smb_drv_data *drvdata, u32 nbytes)
57 struct smb_data_buffer *sdb = &drvdata->sdb;
62 drvdata->base + SMB_LB_RD_ADDR_REG);
67 static void smb_reset_buffer(struct smb_drv_data *drvdata)
69 struct smb_data_buffer *sdb = &drvdata->sdb;
77 writel(SMB_LB_PURGE_PURGED, drvdata->base + SMB_LB_PURGE_REG);
80 writel(SMB_LB_INT_STS_RESET, drvdata->base + SMB_LB_INT_STS_REG);
82 write_ptr = readl(drvdata->base + SMB_LB_WR_ADDR_REG);
92 writel(write_ptr, drvdata->base + SMB_LB_RD_ADDR_REG);
98 struct smb_drv_data *drvdata = container_of(file->private_data,
101 guard(raw_spinlock)(&drvdata->spinlock);
103 if (drvdata->reading)
106 if (drvdata->csdev->refcnt)
109 smb_update_data_size(drvdata);
110 drvdata->reading = true;
118 struct smb_drv_data *drvdata = container_of(file->private_data,
120 struct smb_data_buffer *sdb = &drvdata->sdb;
121 struct device *dev = &drvdata->csdev->dev;
142 smb_update_read_ptr(drvdata, to_copy);
144 smb_reset_buffer(drvdata);
152 struct smb_drv_data *drvdata = container_of(file->private_data,
155 guard(raw_spinlock)(&drvdata->spinlock);
156 drvdata->reading = false;
171 struct smb_drv_data *drvdata = dev_get_drvdata(dev->parent);
173 return sysfs_emit(buf, "0x%lx\n", drvdata->sdb.buf_size);
195 static void smb_enable_hw(struct smb_drv_data *drvdata)
197 writel(SMB_GLB_EN_HW_ENABLE, drvdata->base + SMB_GLB_EN_REG);
200 static void smb_disable_hw(struct smb_drv_data *drvdata)
202 writel(0x0, drvdata->base + SMB_GLB_EN_REG);
207 struct smb_drv_data *drvdata = dev_get_drvdata(csdev->dev.parent);
212 smb_enable_hw(drvdata);
218 struct smb_drv_data *drvdata = dev_get_drvdata(csdev->dev.parent);
230 if (drvdata->pid != -1 && drvdata->pid != pid)
233 if (drvdata->pid == -1) {
234 smb_enable_hw(drvdata);
235 drvdata->pid = pid;
245 struct smb_drv_data *drvdata = dev_get_drvdata(csdev->dev.parent);
248 guard(raw_spinlock)(&drvdata->spinlock);
251 if (drvdata->reading)
281 struct smb_drv_data *drvdata = dev_get_drvdata(csdev->dev.parent);
283 guard(raw_spinlock)(&drvdata->spinlock);
285 if (drvdata->reading)
295 smb_disable_hw(drvdata);
298 drvdata->pid = -1;
332 static void smb_sync_perf_buffer(struct smb_drv_data *drvdata,
336 struct smb_data_buffer *sdb = &drvdata->sdb;
362 smb_update_read_ptr(drvdata, to_copy);
365 smb_reset_buffer(drvdata);
372 struct smb_drv_data *drvdata = dev_get_drvdata(csdev->dev.parent);
373 struct smb_data_buffer *sdb = &drvdata->sdb;
381 guard(raw_spinlock)(&drvdata->spinlock);
387 smb_disable_hw(drvdata);
388 smb_update_data_size(drvdata);
396 smb_update_read_ptr(drvdata, sdb->data_size - handle->size);
401 smb_sync_perf_buffer(drvdata, buf, handle->head);
452 static void smb_init_hw(struct smb_drv_data *drvdata)
454 smb_disable_hw(drvdata);
456 writel(SMB_LB_CFG_LO_DEFAULT, drvdata->base + SMB_LB_CFG_LO_REG);
457 writel(SMB_LB_CFG_HI_DEFAULT, drvdata->base + SMB_LB_CFG_HI_REG);
458 writel(SMB_GLB_CFG_DEFAULT, drvdata->base + SMB_GLB_CFG_REG);
459 writel(SMB_GLB_INT_CFG, drvdata->base + SMB_GLB_INT_REG);
460 writel(SMB_LB_INT_CTRL_CFG, drvdata->base + SMB_LB_INT_CTRL_REG);
464 struct smb_drv_data *drvdata)
485 desc.access = CSDEV_ACCESS_IOMEM(drvdata->base);
487 drvdata->csdev = coresight_register(&desc);
488 if (IS_ERR(drvdata->csdev))
489 return PTR_ERR(drvdata->csdev);
491 drvdata->miscdev.name = desc.name;
492 drvdata->miscdev.minor = MISC_DYNAMIC_MINOR;
493 drvdata->miscdev.fops = &smb_fops;
494 ret = misc_register(&drvdata->miscdev);
496 coresight_unregister(drvdata->csdev);
503 static void smb_unregister_sink(struct smb_drv_data *drvdata)
505 misc_deregister(&drvdata->miscdev);
506 coresight_unregister(drvdata->csdev);
539 struct smb_drv_data *drvdata;
542 drvdata = devm_kzalloc(dev, sizeof(*drvdata), GFP_KERNEL);
543 if (!drvdata)
546 drvdata->base = devm_platform_ioremap_resource(pdev, SMB_REG_ADDR_RES);
547 if (IS_ERR(drvdata->base)) {
549 return PTR_ERR(drvdata->base);
552 smb_init_hw(drvdata);
554 ret = smb_init_data_buffer(pdev, &drvdata->sdb);
564 smb_reset_buffer(drvdata);
565 platform_set_drvdata(pdev, drvdata);
566 raw_spin_lock_init(&drvdata->spinlock);
567 drvdata->pid = -1;
569 ret = smb_register_sink(pdev, drvdata);
581 struct smb_drv_data *drvdata = platform_get_drvdata(pdev);
583 smb_unregister_sink(drvdata);