Lines Matching full:vc4
103 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_v3d_debugfs_ident() local
104 int ret = vc4_v3d_pm_get(vc4); in vc4_v3d_debugfs_ident()
119 vc4_v3d_pm_put(vc4); in vc4_v3d_debugfs_ident()
130 vc4_v3d_pm_get(struct vc4_dev *vc4) in vc4_v3d_pm_get() argument
132 mutex_lock(&vc4->power_lock); in vc4_v3d_pm_get()
133 if (vc4->power_refcount++ == 0) { in vc4_v3d_pm_get()
134 int ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev); in vc4_v3d_pm_get()
137 vc4->power_refcount--; in vc4_v3d_pm_get()
138 mutex_unlock(&vc4->power_lock); in vc4_v3d_pm_get()
142 mutex_unlock(&vc4->power_lock); in vc4_v3d_pm_get()
148 vc4_v3d_pm_put(struct vc4_dev *vc4) in vc4_v3d_pm_put() argument
150 mutex_lock(&vc4->power_lock); in vc4_v3d_pm_put()
151 if (--vc4->power_refcount == 0) { in vc4_v3d_pm_put()
152 pm_runtime_mark_last_busy(&vc4->v3d->pdev->dev); in vc4_v3d_pm_put()
153 pm_runtime_put_autosuspend(&vc4->v3d->pdev->dev); in vc4_v3d_pm_put()
155 mutex_unlock(&vc4->power_lock); in vc4_v3d_pm_put()
160 struct vc4_dev *vc4 = to_vc4_dev(dev); in vc4_v3d_init_hw() local
169 int vc4_v3d_get_bin_slot(struct vc4_dev *vc4) in vc4_v3d_get_bin_slot() argument
171 struct drm_device *dev = &vc4->base; in vc4_v3d_get_bin_slot()
178 spin_lock_irqsave(&vc4->job_lock, irqflags); in vc4_v3d_get_bin_slot()
179 slot = ffs(~vc4->bin_alloc_used); in vc4_v3d_get_bin_slot()
183 vc4->bin_alloc_used |= BIT(slot); in vc4_v3d_get_bin_slot()
184 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_v3d_get_bin_slot()
191 exec = vc4_last_render_job(vc4); in vc4_v3d_get_bin_slot()
194 spin_unlock_irqrestore(&vc4->job_lock, irqflags); in vc4_v3d_get_bin_slot()
230 static int bin_bo_alloc(struct vc4_dev *vc4) in bin_bo_alloc() argument
232 struct vc4_v3d *v3d = vc4->v3d; in bin_bo_alloc()
249 struct vc4_bo *bo = vc4_bo_create(&vc4->base, size, true, in bin_bo_alloc()
266 vc4->bin_bo = bo; in bin_bo_alloc()
284 vc4->bin_alloc_size = 512 * 1024; in bin_bo_alloc()
285 vc4->bin_alloc_used = 0; in bin_bo_alloc()
286 vc4->bin_alloc_overflow = 0; in bin_bo_alloc()
287 WARN_ON_ONCE(sizeof(vc4->bin_alloc_used) * 8 != in bin_bo_alloc()
288 bo->base.base.size / vc4->bin_alloc_size); in bin_bo_alloc()
290 kref_init(&vc4->bin_bo_kref); in bin_bo_alloc()
317 int vc4_v3d_bin_bo_get(struct vc4_dev *vc4, bool *used) in vc4_v3d_bin_bo_get() argument
321 mutex_lock(&vc4->bin_bo_lock); in vc4_v3d_bin_bo_get()
326 if (vc4->bin_bo) in vc4_v3d_bin_bo_get()
327 kref_get(&vc4->bin_bo_kref); in vc4_v3d_bin_bo_get()
329 ret = bin_bo_alloc(vc4); in vc4_v3d_bin_bo_get()
335 mutex_unlock(&vc4->bin_bo_lock); in vc4_v3d_bin_bo_get()
342 struct vc4_dev *vc4 = container_of(ref, struct vc4_dev, bin_bo_kref); in bin_bo_release() local
344 if (WARN_ON_ONCE(!vc4->bin_bo)) in bin_bo_release()
347 drm_gem_object_put(&vc4->bin_bo->base.base); in bin_bo_release()
348 vc4->bin_bo = NULL; in bin_bo_release()
351 void vc4_v3d_bin_bo_put(struct vc4_dev *vc4) in vc4_v3d_bin_bo_put() argument
353 mutex_lock(&vc4->bin_bo_lock); in vc4_v3d_bin_bo_put()
354 kref_put(&vc4->bin_bo_kref, bin_bo_release); in vc4_v3d_bin_bo_put()
355 mutex_unlock(&vc4->bin_bo_lock); in vc4_v3d_bin_bo_put()
362 struct vc4_dev *vc4 = v3d->vc4; in vc4_v3d_runtime_suspend() local
364 vc4_irq_uninstall(&vc4->base); in vc4_v3d_runtime_suspend()
374 struct vc4_dev *vc4 = v3d->vc4; in vc4_v3d_runtime_resume() local
381 vc4_v3d_init_hw(&vc4->base); in vc4_v3d_runtime_resume()
384 enable_irq(vc4->base.irq); in vc4_v3d_runtime_resume()
385 vc4_irq_postinstall(&vc4->base); in vc4_v3d_runtime_resume()
395 struct vc4_dev *vc4 = to_vc4_dev(drm); in vc4_v3d_bind() local
414 vc4->v3d = v3d; in vc4_v3d_bind()
415 v3d->vc4 = vc4; in vc4_v3d_bind()
472 struct vc4_dev *vc4 = to_vc4_dev(drm); in vc4_v3d_unbind() local
485 vc4->v3d = NULL; in vc4_v3d_unbind()
511 { .compatible = "brcm,vc4-v3d" },