| /kernel/linux/linux-6.6/drivers/gpu/drm/v3d/ |
| D | v3d_irq.c | 5 * DOC: Interrupt management for the V3D engine 39 struct v3d_dev *v3d = in v3d_overflow_mem_work() local 41 struct drm_device *dev = &v3d->drm; in v3d_overflow_mem_work() 61 spin_lock_irqsave(&v3d->job_lock, irqflags); in v3d_overflow_mem_work() 62 if (!v3d->bin_job) { in v3d_overflow_mem_work() 63 spin_unlock_irqrestore(&v3d->job_lock, irqflags); in v3d_overflow_mem_work() 68 list_add_tail(&bo->unref_head, &v3d->bin_job->render->unref_list); in v3d_overflow_mem_work() 69 spin_unlock_irqrestore(&v3d->job_lock, irqflags); in v3d_overflow_mem_work() 81 struct v3d_dev *v3d = arg; in v3d_irq() local 93 * add more memory. Also, as of V3D 4.1, FLDONE won't in v3d_irq() [all …]
|
| D | v3d_drv.c | 5 * DOC: Broadcom V3D Graphics Driver 7 * This driver supports the Broadcom V3D 3.3 and 4.1 OpenGL ES GPUs. 8 * For V3D 2.x support, see the VC4 driver. 10 * The V3D GPU includes a tiled render (composed of a bin and render 31 #define DRIVER_NAME "v3d" 32 #define DRIVER_DESC "Broadcom V3D graphics" 41 struct v3d_dev *v3d = to_v3d_dev(dev); in v3d_get_param_ioctl() local 82 args->value = v3d_has_csd(v3d); in v3d_get_param_ioctl() 88 args->value = (v3d->ver >= 40); in v3d_get_param_ioctl() 102 struct v3d_dev *v3d = to_v3d_dev(dev); in v3d_open() local [all …]
|
| D | v3d_sched.c | 5 * DOC: Broadcom V3D scheduling 66 v3d_switch_perfmon(struct v3d_dev *v3d, struct v3d_job *job) in v3d_switch_perfmon() argument 68 if (job->perfmon != v3d->active_perfmon) in v3d_switch_perfmon() 69 v3d_perfmon_stop(v3d, v3d->active_perfmon, true); in v3d_switch_perfmon() 71 if (job->perfmon && v3d->active_perfmon != job->perfmon) in v3d_switch_perfmon() 72 v3d_perfmon_start(v3d, job->perfmon); in v3d_switch_perfmon() 78 struct v3d_dev *v3d = job->base.v3d; in v3d_bin_job_run() local 79 struct drm_device *dev = &v3d->drm; in v3d_bin_job_run() 89 spin_lock_irqsave(&v3d->job_lock, irqflags); in v3d_bin_job_run() 90 v3d->bin_job = job; in v3d_bin_job_run() [all …]
|
| D | v3d_gem.c | 22 v3d_init_core(struct v3d_dev *v3d, int core) in v3d_init_core() argument 30 if (v3d->ver < 40) in v3d_init_core() 42 v3d_init_hw_state(struct v3d_dev *v3d) in v3d_init_hw_state() argument 44 v3d_init_core(v3d, 0); in v3d_init_hw_state() 48 v3d_idle_axi(struct v3d_dev *v3d, int core) in v3d_idle_axi() argument 61 v3d_idle_gca(struct v3d_dev *v3d) in v3d_idle_gca() argument 63 if (v3d->ver >= 41) in v3d_idle_gca() 76 v3d_reset_by_bridge(struct v3d_dev *v3d) in v3d_reset_by_bridge() argument 99 v3d_reset_v3d(struct v3d_dev *v3d) in v3d_reset_v3d() argument 101 if (v3d->reset) in v3d_reset_v3d() [all …]
|
| D | v3d_mmu.c | 5 * DOC: Broadcom V3D MMU 7 * The V3D 3.x hardware (compared to VC4) now includes an MMU. It has 8 * a single level of page tables for the V3D's 4GB address space to 33 static int v3d_mmu_flush_all(struct v3d_dev *v3d) in v3d_mmu_flush_all() argument 43 dev_err(v3d->drm.dev, "MMUC flush wait idle failed\n"); in v3d_mmu_flush_all() 53 dev_err(v3d->drm.dev, "MMU TLB clear wait idle failed\n"); in v3d_mmu_flush_all() 58 int v3d_mmu_set_page_table(struct v3d_dev *v3d) in v3d_mmu_set_page_table() argument 60 V3D_WRITE(V3D_MMU_PT_PA_BASE, v3d->pt_paddr >> V3D_MMU_PAGE_SHIFT); in v3d_mmu_set_page_table() 71 (v3d->mmu_scratch_paddr >> V3D_MMU_PAGE_SHIFT) | in v3d_mmu_set_page_table() 75 return v3d_mmu_flush_all(v3d); in v3d_mmu_set_page_table() [all …]
|
| D | v3d_drv.h | 74 /* Short representation (e.g. 33, 41) of the V3D tech version 99 /* virtual address bits from V3D to the MMU. */ 102 /* Number of V3D cores. */ 161 v3d_has_csd(struct v3d_dev *v3d) in v3d_has_csd() argument 163 return v3d->ver >= 41; in v3d_has_csd() 166 #define v3d_to_pdev(v3d) to_platform_device((v3d)->drm.dev) argument 170 struct v3d_dev *v3d; member 200 /* v3d seqno for signaled() test */ 211 #define V3D_READ(offset) readl(v3d->hub_regs + offset) 212 #define V3D_WRITE(offset, val) writel(val, v3d->hub_regs + offset) [all …]
|
| D | v3d_bo.c | 5 * DOC: V3D GEM BO management support 7 * Compared to VC4 (V3D 2.x), V3D 3.3 introduces an MMU between the 11 * Physically contiguous objects may still be imported to V3D, but the 15 * driver) for an example of how to integrate with V3D. 33 struct v3d_dev *v3d = to_v3d_dev(obj->dev); in v3d_free_object() local 38 mutex_lock(&v3d->bo_lock); in v3d_free_object() 39 v3d->bo_stats.num_allocated--; in v3d_free_object() 40 v3d->bo_stats.pages_allocated -= obj->size >> PAGE_SHIFT; in v3d_free_object() 41 mutex_unlock(&v3d->bo_lock); in v3d_free_object() 43 spin_lock(&v3d->mm_lock); in v3d_free_object() [all …]
|
| D | v3d_fence.c | 6 struct dma_fence *v3d_fence_create(struct v3d_dev *v3d, enum v3d_queue queue) in v3d_fence_create() argument 14 fence->dev = &v3d->drm; in v3d_fence_create() 16 fence->seqno = ++v3d->queue[queue].emit_seqno; in v3d_fence_create() 17 dma_fence_init(&fence->base, &v3d_fence_ops, &v3d->job_lock, in v3d_fence_create() 18 v3d->queue[queue].fence_context, fence->seqno); in v3d_fence_create() 25 return "v3d"; in v3d_fence_get_driver_name() 34 return "v3d-bin"; in v3d_fence_get_timeline_name() 36 return "v3d-render"; in v3d_fence_get_timeline_name() 38 return "v3d-tfu"; in v3d_fence_get_timeline_name() 40 return "v3d-csd"; in v3d_fence_get_timeline_name()
|
| D | v3d_perfmon.c | 26 void v3d_perfmon_start(struct v3d_dev *v3d, struct v3d_perfmon *perfmon) in v3d_perfmon_start() argument 32 if (WARN_ON_ONCE(!perfmon || v3d->active_perfmon)) in v3d_perfmon_start() 58 v3d->active_perfmon = perfmon; in v3d_perfmon_start() 61 void v3d_perfmon_stop(struct v3d_dev *v3d, struct v3d_perfmon *perfmon, in v3d_perfmon_stop() argument 66 if (!perfmon || !v3d->active_perfmon) in v3d_perfmon_stop() 70 if (perfmon != v3d->active_perfmon) { in v3d_perfmon_stop() 81 v3d->active_perfmon = NULL; in v3d_perfmon_stop() 106 struct v3d_dev *v3d = (struct v3d_dev *)data; in v3d_perfmon_idr_del() local 109 if (perfmon == v3d->active_perfmon) in v3d_perfmon_idr_del() 110 v3d_perfmon_stop(v3d, perfmon, false); in v3d_perfmon_idr_del() [all …]
|
| /kernel/linux/linux-5.10/drivers/gpu/drm/v3d/ |
| D | v3d_drv.c | 5 * DOC: Broadcom V3D Graphics Driver 7 * This driver supports the Broadcom V3D 3.3 and 4.1 OpenGL ES GPUs. 8 * For V3D 2.x support, see the VC4 driver. 10 * The V3D GPU includes a tiled render (composed of a bin and render 34 #define DRIVER_NAME "v3d" 35 #define DRIVER_DESC "Broadcom V3D graphics" 45 struct v3d_dev *v3d = to_v3d_dev(drm); in v3d_runtime_suspend() local 47 v3d_irq_disable(v3d); in v3d_runtime_suspend() 49 clk_disable_unprepare(v3d->clk); in v3d_runtime_suspend() 57 struct v3d_dev *v3d = to_v3d_dev(drm); in v3d_runtime_resume() local [all …]
|
| D | v3d_irq.c | 5 * DOC: Interrupt management for the V3D engine 39 struct v3d_dev *v3d = in v3d_overflow_mem_work() local 41 struct drm_device *dev = &v3d->drm; in v3d_overflow_mem_work() 61 spin_lock_irqsave(&v3d->job_lock, irqflags); in v3d_overflow_mem_work() 62 if (!v3d->bin_job) { in v3d_overflow_mem_work() 63 spin_unlock_irqrestore(&v3d->job_lock, irqflags); in v3d_overflow_mem_work() 68 list_add_tail(&bo->unref_head, &v3d->bin_job->render->unref_list); in v3d_overflow_mem_work() 69 spin_unlock_irqrestore(&v3d->job_lock, irqflags); in v3d_overflow_mem_work() 81 struct v3d_dev *v3d = arg; in v3d_irq() local 93 * add more memory. Also, as of V3D 4.1, FLDONE won't in v3d_irq() [all …]
|
| D | v3d_sched.c | 5 * DOC: Broadcom V3D scheduling 91 struct v3d_dev *v3d = job->base.v3d; in v3d_bin_job_run() local 92 struct drm_device *dev = &v3d->drm; in v3d_bin_job_run() 102 spin_lock_irqsave(&v3d->job_lock, irqflags); in v3d_bin_job_run() 103 v3d->bin_job = job; in v3d_bin_job_run() 108 spin_unlock_irqrestore(&v3d->job_lock, irqflags); in v3d_bin_job_run() 110 v3d_invalidate_caches(v3d); in v3d_bin_job_run() 112 fence = v3d_fence_create(v3d, V3D_BIN); in v3d_bin_job_run() 144 struct v3d_dev *v3d = job->base.v3d; in v3d_render_job_run() local 145 struct drm_device *dev = &v3d->drm; in v3d_render_job_run() [all …]
|
| D | v3d_gem.c | 22 v3d_init_core(struct v3d_dev *v3d, int core) in v3d_init_core() argument 30 if (v3d->ver < 40) in v3d_init_core() 42 v3d_init_hw_state(struct v3d_dev *v3d) in v3d_init_hw_state() argument 44 v3d_init_core(v3d, 0); in v3d_init_hw_state() 48 v3d_idle_axi(struct v3d_dev *v3d, int core) in v3d_idle_axi() argument 61 v3d_idle_gca(struct v3d_dev *v3d) in v3d_idle_gca() argument 63 if (v3d->ver >= 41) in v3d_idle_gca() 76 v3d_reset_by_bridge(struct v3d_dev *v3d) in v3d_reset_by_bridge() argument 99 v3d_reset_v3d(struct v3d_dev *v3d) in v3d_reset_v3d() argument 101 if (v3d->reset) in v3d_reset_v3d() [all …]
|
| D | v3d_mmu.c | 5 * DOC: Broadcom V3D MMU 7 * The V3D 3.x hardware (compared to VC4) now includes an MMU. It has 8 * a single level of page tables for the V3D's 4GB address space to 33 static int v3d_mmu_flush_all(struct v3d_dev *v3d) in v3d_mmu_flush_all() argument 43 dev_err(v3d->drm.dev, "TLB clear wait idle pre-wait failed\n"); in v3d_mmu_flush_all() 55 dev_err(v3d->drm.dev, "TLB clear wait idle failed\n"); in v3d_mmu_flush_all() 62 dev_err(v3d->drm.dev, "MMUC flush wait idle failed\n"); in v3d_mmu_flush_all() 67 int v3d_mmu_set_page_table(struct v3d_dev *v3d) in v3d_mmu_set_page_table() argument 69 V3D_WRITE(V3D_MMU_PT_PA_BASE, v3d->pt_paddr >> V3D_MMU_PAGE_SHIFT); in v3d_mmu_set_page_table() 80 (v3d->mmu_scratch_paddr >> V3D_MMU_PAGE_SHIFT) | in v3d_mmu_set_page_table() [all …]
|
| D | v3d_drv.h | 22 /* Enum for each of the V3D queues. */ 43 /* Short representation (e.g. 33, 41) of the V3D tech version 66 /* virtual address bits from V3D to the MMU. */ 69 /* Number of V3D cores. */ 125 v3d_has_csd(struct v3d_dev *v3d) in v3d_has_csd() argument 127 return v3d->ver >= 41; in v3d_has_csd() 130 #define v3d_to_pdev(v3d) to_platform_device((v3d)->drm.dev) argument 134 struct v3d_dev *v3d; member 159 /* v3d seqno for signaled() test */ 170 #define V3D_READ(offset) readl(v3d->hub_regs + offset) [all …]
|
| D | v3d_bo.c | 5 * DOC: V3D GEM BO management support 7 * Compared to VC4 (V3D 2.x), V3D 3.3 introduces an MMU between the 11 * Physically contiguous objects may still be imported to V3D, but the 15 * driver) for an example of how to integrate with V3D. 33 struct v3d_dev *v3d = to_v3d_dev(obj->dev); in v3d_free_object() local 38 mutex_lock(&v3d->bo_lock); in v3d_free_object() 39 v3d->bo_stats.num_allocated--; in v3d_free_object() 40 v3d->bo_stats.pages_allocated -= obj->size >> PAGE_SHIFT; in v3d_free_object() 41 mutex_unlock(&v3d->bo_lock); in v3d_free_object() 43 spin_lock(&v3d->mm_lock); in v3d_free_object() [all …]
|
| D | v3d_fence.c | 6 struct dma_fence *v3d_fence_create(struct v3d_dev *v3d, enum v3d_queue queue) in v3d_fence_create() argument 14 fence->dev = &v3d->drm; in v3d_fence_create() 16 fence->seqno = ++v3d->queue[queue].emit_seqno; in v3d_fence_create() 17 dma_fence_init(&fence->base, &v3d_fence_ops, &v3d->job_lock, in v3d_fence_create() 18 v3d->queue[queue].fence_context, fence->seqno); in v3d_fence_create() 25 return "v3d"; in v3d_fence_get_driver_name() 34 return "v3d-bin"; in v3d_fence_get_timeline_name() 36 return "v3d-render"; in v3d_fence_get_timeline_name() 38 return "v3d-tfu"; in v3d_fence_get_timeline_name() 40 return "v3d-csd"; in v3d_fence_get_timeline_name()
|
| D | v3d_debugfs.c | 84 struct v3d_dev *v3d = to_v3d_dev(dev); in v3d_v3d_debugfs_regs() local 93 if (v3d->ver < 41) { in v3d_v3d_debugfs_regs() 102 for (core = 0; core < v3d->cores; core++) { in v3d_v3d_debugfs_regs() 112 if (v3d_has_csd(v3d)) { in v3d_v3d_debugfs_regs() 131 struct v3d_dev *v3d = to_v3d_dev(dev); in v3d_v3d_debugfs_ident() local 135 ret = pm_runtime_get_sync(v3d->drm.dev); in v3d_v3d_debugfs_ident() 190 pm_runtime_mark_last_busy(v3d->drm.dev); in v3d_v3d_debugfs_ident() 191 pm_runtime_put_autosuspend(v3d->drm.dev); in v3d_v3d_debugfs_ident() 200 struct v3d_dev *v3d = to_v3d_dev(dev); in v3d_debugfs_bo_stats() local 202 mutex_lock(&v3d->bo_lock); in v3d_debugfs_bo_stats() [all …]
|
| /kernel/linux/linux-6.6/drivers/gpu/drm/vc4/ |
| D | vc4_v3d.c | 135 int ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev); in vc4_v3d_pm_get() 156 pm_runtime_mark_last_busy(&vc4->v3d->pdev->dev); in vc4_v3d_pm_put() 157 pm_runtime_put_autosuspend(&vc4->v3d->pdev->dev); in vc4_v3d_pm_put() 225 * To work around this, we allocate a single large buffer while V3D is 239 struct vc4_v3d *v3d = vc4->v3d; in bin_bo_alloc() local 244 if (!v3d) in bin_bo_alloc() 262 dev_err(&v3d->pdev->dev, in bin_bo_alloc() 374 struct vc4_v3d *v3d = dev_get_drvdata(dev); in vc4_v3d_runtime_suspend() local 375 struct vc4_dev *vc4 = v3d->vc4; in vc4_v3d_runtime_suspend() 379 clk_disable_unprepare(v3d->clk); in vc4_v3d_runtime_suspend() [all …]
|
| /kernel/linux/linux-5.10/drivers/gpu/drm/vc4/ |
| D | vc4_v3d.c | 134 int ret = pm_runtime_get_sync(&vc4->v3d->pdev->dev); in vc4_v3d_pm_get() 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() 218 * To work around this, we allocate a single large buffer while V3D is 232 struct vc4_v3d *v3d = vc4->v3d; in bin_bo_alloc() local 237 if (!v3d) in bin_bo_alloc() 255 dev_err(&v3d->pdev->dev, in bin_bo_alloc() 361 struct vc4_v3d *v3d = dev_get_drvdata(dev); in vc4_v3d_runtime_suspend() local 362 struct vc4_dev *vc4 = v3d->vc4; in vc4_v3d_runtime_suspend() 366 clk_disable_unprepare(v3d->clk); in vc4_v3d_runtime_suspend() [all …]
|
| /kernel/linux/linux-5.10/Documentation/gpu/ |
| D | v3d.rst | 2 drm/v3d Broadcom V3D Graphics Driver 5 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_drv.c 6 :doc: Broadcom V3D Graphics Driver 11 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_bo.c 12 :doc: V3D GEM BO management support 16 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_mmu.c 17 :doc: Broadcom V3D MMU 21 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_sched.c 22 :doc: Broadcom V3D scheduling 27 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_irq.c [all …]
|
| /kernel/linux/linux-6.6/Documentation/gpu/ |
| D | v3d.rst | 2 drm/v3d Broadcom V3D Graphics Driver 5 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_drv.c 6 :doc: Broadcom V3D Graphics Driver 11 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_bo.c 12 :doc: V3D GEM BO management support 16 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_mmu.c 17 :doc: Broadcom V3D MMU 21 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_sched.c 22 :doc: Broadcom V3D scheduling 27 .. kernel-doc:: drivers/gpu/drm/v3d/v3d_irq.c [all …]
|
| /kernel/linux/linux-5.10/Documentation/devicetree/bindings/gpu/ |
| D | brcm,bcm-v3d.txt | 1 Broadcom V3D GPU 3 Only the Broadcom V3D 3.x and newer GPUs are covered by this binding. 4 For V3D 2.x, see brcm,bcm-vc4.txt. 7 - compatible: Should be "brcm,7268-v3d" or "brcm,7278-v3d" 21 - resets: The reset line for v3d, if not using a mapping of the bridge 24 v3d { 25 compatible = "brcm,7268-v3d";
|
| /kernel/linux/linux-5.10/Documentation/devicetree/bindings/display/ |
| D | brcm,bcm2835-v3d.yaml | 4 $id: http://devicetree.org/schemas/display/brcm,bcm2835-v3d.yaml# 7 title: Broadcom VC4 (VideoCore4) V3D GPU 15 - brcm,bcm2835-v3d 16 - brcm,cygnus-v3d 36 v3d: v3d@7ec00000 { 37 compatible = "brcm,bcm2835-v3d";
|
| /kernel/linux/linux-6.6/Documentation/devicetree/bindings/display/ |
| D | brcm,bcm2835-v3d.yaml | 4 $id: http://devicetree.org/schemas/display/brcm,bcm2835-v3d.yaml# 7 title: Broadcom VC4 (VideoCore4) V3D GPU 15 - brcm,bcm2835-v3d 16 - brcm,cygnus-v3d 39 v3d: v3d@7ec00000 { 40 compatible = "brcm,bcm2835-v3d";
|