Lines Matching defs:vc4

101 	struct vc4_dev *vc4 = to_vc4_dev(dev);
102 int ret = vc4_v3d_pm_get(vc4);
117 vc4_v3d_pm_put(vc4);
128 vc4_v3d_pm_get(struct vc4_dev *vc4)
130 if (WARN_ON_ONCE(vc4->is_vc5))
133 mutex_lock(&vc4->power_lock);
134 if (vc4->power_refcount++ == 0) {
135 int ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev);
138 vc4->power_refcount--;
139 mutex_unlock(&vc4->power_lock);
143 mutex_unlock(&vc4->power_lock);
149 vc4_v3d_pm_put(struct vc4_dev *vc4)
151 if (WARN_ON_ONCE(vc4->is_vc5))
154 mutex_lock(&vc4->power_lock);
155 if (--vc4->power_refcount == 0) {
156 pm_runtime_mark_last_busy(&vc4->v3d->pdev->dev);
157 pm_runtime_put_autosuspend(&vc4->v3d->pdev->dev);
159 mutex_unlock(&vc4->power_lock);
164 struct vc4_dev *vc4 = to_vc4_dev(dev);
173 int vc4_v3d_get_bin_slot(struct vc4_dev *vc4)
175 struct drm_device *dev = &vc4->base;
181 if (WARN_ON_ONCE(vc4->is_vc5))
185 spin_lock_irqsave(&vc4->job_lock, irqflags);
186 slot = ffs(~vc4->bin_alloc_used);
190 vc4->bin_alloc_used |= BIT(slot);
191 spin_unlock_irqrestore(&vc4->job_lock, irqflags);
198 exec = vc4_last_render_job(vc4);
201 spin_unlock_irqrestore(&vc4->job_lock, irqflags);
237 static int bin_bo_alloc(struct vc4_dev *vc4)
239 struct vc4_v3d *v3d = vc4->v3d;
256 struct vc4_bo *bo = vc4_bo_create(&vc4->base, size, true,
273 vc4->bin_bo = bo;
291 vc4->bin_alloc_size = 512 * 1024;
292 vc4->bin_alloc_used = 0;
293 vc4->bin_alloc_overflow = 0;
294 WARN_ON_ONCE(sizeof(vc4->bin_alloc_used) * 8 !=
295 bo->base.base.size / vc4->bin_alloc_size);
297 kref_init(&vc4->bin_bo_kref);
324 int vc4_v3d_bin_bo_get(struct vc4_dev *vc4, bool *used)
328 if (WARN_ON_ONCE(vc4->is_vc5))
331 mutex_lock(&vc4->bin_bo_lock);
336 if (vc4->bin_bo)
337 kref_get(&vc4->bin_bo_kref);
339 ret = bin_bo_alloc(vc4);
345 mutex_unlock(&vc4->bin_bo_lock);
352 struct vc4_dev *vc4 = container_of(ref, struct vc4_dev, bin_bo_kref);
354 if (WARN_ON_ONCE(!vc4->bin_bo))
357 drm_gem_object_put(&vc4->bin_bo->base.base);
358 vc4->bin_bo = NULL;
361 void vc4_v3d_bin_bo_put(struct vc4_dev *vc4)
363 if (WARN_ON_ONCE(vc4->is_vc5))
366 mutex_lock(&vc4->bin_bo_lock);
367 kref_put(&vc4->bin_bo_kref, bin_bo_release);
368 mutex_unlock(&vc4->bin_bo_lock);
375 struct vc4_dev *vc4 = v3d->vc4;
377 vc4_irq_disable(&vc4->base);
387 struct vc4_dev *vc4 = v3d->vc4;
394 vc4_v3d_init_hw(&vc4->base);
396 vc4_irq_enable(&vc4->base);
405 struct vc4_dev *vc4 = to_vc4_dev(drm);
406 struct vc4_v3d *v3d = vc4->v3d;
408 if (!vc4->v3d)
422 struct vc4_dev *vc4 = to_vc4_dev(drm);
441 vc4->v3d = v3d;
442 v3d->vc4 = vc4;
463 vc4->irq = ret;
486 ret = vc4_irq_install(drm, vc4->irq);
507 struct vc4_dev *vc4 = to_vc4_dev(drm);
518 vc4->v3d = NULL;
543 { .compatible = "brcm,vc4-v3d" },