| /linux/drivers/gpu/drm/panthor/ |
| H A D | panthor_device.c | 30 static int panthor_clk_init(struct panthor_device *ptdev) in panthor_clk_init() argument 32 ptdev->clks.core = devm_clk_get(ptdev->base.dev, NULL); in panthor_clk_init() 33 if (IS_ERR(ptdev->clks.core)) in panthor_clk_init() 34 return dev_err_probe(ptdev->base.dev, in panthor_clk_init() 35 PTR_ERR(ptdev->clks.core), in panthor_clk_init() 38 ptdev->clks.stacks = devm_clk_get_optional(ptdev->base.dev, "stacks"); in panthor_clk_init() 39 if (IS_ERR(ptdev->clks.stacks)) in panthor_clk_init() 40 return dev_err_probe(ptdev->base.dev, in panthor_clk_init() 41 PTR_ERR(ptdev->clks.stacks), in panthor_clk_init() 44 ptdev->clks.coregroup = devm_clk_get_optional(ptdev->base.dev, "coregroup"); in panthor_clk_init() [all …]
|
| H A D | panthor_gpu.c | 60 static void panthor_gpu_coherency_set(struct panthor_device *ptdev) in panthor_gpu_coherency_set() argument 62 gpu_write(ptdev->gpu->iomem, GPU_COHERENCY_PROTOCOL, in panthor_gpu_coherency_set() 63 ptdev->gpu_info.selected_coherency); in panthor_gpu_coherency_set() 66 static void panthor_gpu_l2_config_set(struct panthor_device *ptdev) in panthor_gpu_l2_config_set() argument 68 struct panthor_gpu *gpu = ptdev->gpu; in panthor_gpu_l2_config_set() 69 const struct panthor_soc_data *data = ptdev->soc_data; in panthor_gpu_l2_config_set() 76 if (GPU_ARCH_MAJOR(ptdev->gpu_info.gpu_id) < 11) { in panthor_gpu_l2_config_set() 77 drm_err(&ptdev->base, "Custom ASN hash not supported by the device"); in panthor_gpu_l2_config_set() 89 static void panthor_gpu_irq_handler(struct panthor_device *ptdev, u32 status) in panthor_gpu_irq_handler() argument 91 struct panthor_gpu *gpu = ptdev->gpu; in panthor_gpu_irq_handler() [all …]
|
| H A D | panthor_pwr.c | 59 static void panthor_pwr_irq_handler(struct panthor_device *ptdev, u32 status) in panthor_pwr_irq_handler() argument 61 struct panthor_pwr *pwr = ptdev->pwr; in panthor_pwr_irq_handler() 63 spin_lock(&ptdev->pwr->reqs_lock); in panthor_pwr_irq_handler() 67 drm_err(&ptdev->base, "PWR_IRQ: COMMAND_NOT_ALLOWED"); in panthor_pwr_irq_handler() 70 drm_err(&ptdev->base, "PWR_IRQ: COMMAND_INVALID"); in panthor_pwr_irq_handler() 72 if (status & ptdev->pwr->pending_reqs) { in panthor_pwr_irq_handler() 73 ptdev->pwr->pending_reqs &= ~status; in panthor_pwr_irq_handler() 74 wake_up_all(&ptdev->pwr->reqs_acked); in panthor_pwr_irq_handler() 76 spin_unlock(&ptdev->pwr->reqs_lock); in panthor_pwr_irq_handler() 80 static void panthor_pwr_write_command(struct panthor_device *ptdev, u32 command, u64 args) in panthor_pwr_write_command() argument [all …]
|
| H A D | panthor_fw.c | 276 struct panthor_vm *panthor_fw_vm(struct panthor_device *ptdev) in panthor_fw_vm() argument 278 return ptdev->fw->vm; in panthor_fw_vm() 288 panthor_fw_get_glb_iface(struct panthor_device *ptdev) in panthor_fw_get_glb_iface() argument 290 return &ptdev->fw->iface.global; in panthor_fw_get_glb_iface() 301 panthor_fw_get_csg_iface(struct panthor_device *ptdev, u32 csg_slot) in panthor_fw_get_csg_iface() argument 303 if (drm_WARN_ON(&ptdev->base, csg_slot >= MAX_CSGS)) in panthor_fw_get_csg_iface() 306 return &ptdev->fw->iface.groups[csg_slot]; in panthor_fw_get_csg_iface() 318 panthor_fw_get_cs_iface(struct panthor_device *ptdev, u32 csg_slot, u32 cs_slot) in panthor_fw_get_cs_iface() argument 320 if (drm_WARN_ON(&ptdev->base, csg_slot >= MAX_CSGS || cs_slot >= MAX_CS_PER_CSG)) in panthor_fw_get_cs_iface() 323 return &ptdev->fw->iface.streams[csg_slot][cs_slot]; in panthor_fw_get_cs_iface() [all …]
|
| H A D | panthor_mmu.c | 257 struct panthor_device *ptdev; member 461 drm_WARN_ON(&vm->ptdev->base, vm->op_ctx); in alloc_pt() 462 p = alloc_pages_node(dev_to_node(vm->ptdev->base.dev), in alloc_pt() 472 if (drm_WARN_ON(&vm->ptdev->base, size != SZ_4K)) in alloc_pt() 478 if (drm_WARN_ON(&vm->ptdev->base, !vm->op_ctx) || in alloc_pt() 479 drm_WARN_ON(&vm->ptdev->base, in alloc_pt() 514 if (drm_WARN_ON(&vm->ptdev->base, size != SZ_4K)) in free_pt() 521 static int wait_ready(struct panthor_device *ptdev, u32 as_nr) in wait_ready() argument 523 struct panthor_mmu *mmu = ptdev->mmu; in wait_ready() 534 panthor_device_schedule_reset(ptdev); in wait_ready() [all …]
|
| H A D | panthor_sched.c | 147 struct panthor_device *ptdev; member 536 struct panthor_device *ptdev; member 735 if (!queue_work((group)->ptdev->scheduler->wq, &(group)->wname ## _work)) \ 749 !panthor_device_reset_is_pending((sched)->ptdev)) \ 765 !panthor_device_reset_is_pending((sched)->ptdev)) \ 869 struct panthor_device *ptdev = group->ptdev; in panthor_queue_get_syncwait_obj() local 882 if (drm_WARN_ON(&ptdev->base, IS_ERR_OR_NULL(bo))) in panthor_queue_get_syncwait_obj() 887 if (drm_WARN_ON(&ptdev->base, ret)) in panthor_queue_get_syncwait_obj() 891 if (drm_WARN_ON(&ptdev->base, !queue->syncwait.kmap)) in panthor_queue_get_syncwait_obj() 967 struct panthor_device *ptdev = group->ptdev; in group_release() local [all …]
|
| H A D | panthor_pwr.h | 9 void panthor_pwr_unplug(struct panthor_device *ptdev); 11 int panthor_pwr_init(struct panthor_device *ptdev); 13 int panthor_pwr_reset_soft(struct panthor_device *ptdev); 15 void panthor_pwr_l2_power_off(struct panthor_device *ptdev); 17 int panthor_pwr_l2_power_on(struct panthor_device *ptdev); 19 void panthor_pwr_suspend(struct panthor_device *ptdev); 21 void panthor_pwr_resume(struct panthor_device *ptdev);
|
| H A D | panthor_device.h | 83 struct panthor_device *ptdev; member 344 struct panthor_device *ptdev; member 374 int panthor_device_init(struct panthor_device *ptdev); 375 void panthor_device_unplug(struct panthor_device *ptdev); 380 static inline void panthor_device_schedule_reset(struct panthor_device *ptdev) in panthor_device_schedule_reset() argument 382 if (!atomic_cmpxchg(&ptdev->reset.pending, 0, 1) && in panthor_device_schedule_reset() 383 atomic_read(&ptdev->pm.state) == PANTHOR_DEVICE_PM_STATE_ACTIVE) in panthor_device_schedule_reset() 384 queue_work(ptdev->reset.wq, &ptdev->reset.work); in panthor_device_schedule_reset() 392 static inline bool panthor_device_reset_is_pending(struct panthor_device *ptdev) in panthor_device_reset_is_pending() argument 394 return atomic_read(&ptdev->reset.pending) != 0; in panthor_device_reset_is_pending() [all …]
|
| H A D | panthor_gem.c | 29 void panthor_gem_init(struct panthor_device *ptdev) in panthor_gem_init() argument 37 err = drm_gem_huge_mnt_create(&ptdev->base, "within_size"); in panthor_gem_init() 38 if (drm_gem_get_huge_mnt(&ptdev->base)) in panthor_gem_init() 39 drm_info(&ptdev->base, "Using Transparent Hugepage\n"); in panthor_gem_init() 41 drm_warn(&ptdev->base, "Can't use Transparent Hugepage (%d)\n", in panthor_gem_init() 53 struct panthor_device *ptdev = container_of(bo->base.dev, in panthor_gem_debugfs_bo_add() local 59 mutex_lock(&ptdev->gems.lock); in panthor_gem_debugfs_bo_add() 60 list_add_tail(&bo->debugfs.node, &ptdev->gems.node); in panthor_gem_debugfs_bo_add() 61 mutex_unlock(&ptdev->gems.lock); in panthor_gem_debugfs_bo_add() 66 struct panthor_device *ptdev = container_of(bo->base.dev, in panthor_gem_debugfs_bo_rm() local [all …]
|