diff options
| author | Boris Brezillon <boris.brezillon@collabora.com> | 2025-11-28 09:48:36 +0100 |
|---|---|---|
| committer | Boris Brezillon <boris.brezillon@collabora.com> | 2025-11-28 10:17:44 +0100 |
| commit | 151df689fb75e46a6cafa9a2c407d44969f4bebe (patch) | |
| tree | 406fda43afa2db36bba1d18f69404f73c7efd368 /drivers/gpu | |
| parent | d2c6fde56d451ca48a5e03428535ce3dbc8fc910 (diff) | |
drm/panthor: Kill lock_region()
The meat in lock_region() is about packing a region range into a
single u64. The rest is just a regular reg write plus a
as_send_cmd_and_wait() call that can easily be inlined in
mmu_hw_do_operation_locked().
v2:
- New patch
v3:
- Don't LOCK is the region has a zero size
v4:
- Collect R-b
Reviewed-by: Steven Price <steven.price@arm.com>
Link: https://patch.msgid.link/20251128084841.3804658-3-boris.brezillon@collabora.com
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/panthor/panthor_mmu.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/panthor/panthor_mmu.c index f59331f89b33..b88a6d3096a0 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -538,14 +538,12 @@ static int as_send_cmd_and_wait(struct panthor_device *ptdev, u32 as_nr, u32 cmd return status; } -static int lock_region(struct panthor_device *ptdev, u32 as_nr, - u64 region_start, u64 size) +static u64 pack_region_range(struct panthor_device *ptdev, u64 region_start, u64 size) { u8 region_width; - u64 region; u64 region_end = region_start + size; - if (!size) + if (drm_WARN_ON_ONCE(&ptdev->base, !size)) return 0; /* @@ -565,11 +563,7 @@ static int lock_region(struct panthor_device *ptdev, u32 as_nr, */ region_start &= GENMASK_ULL(63, region_width); - region = region_width | region_start; - - /* Lock the region that needs to be updated */ - gpu_write64(ptdev, AS_LOCKADDR(as_nr), region); - return as_send_cmd_and_wait(ptdev, as_nr, AS_COMMAND_LOCK); + return region_width | region_start; } static int mmu_hw_do_operation_locked(struct panthor_device *ptdev, int as_nr, @@ -581,6 +575,9 @@ static int mmu_hw_do_operation_locked(struct panthor_device *ptdev, int as_nr, lockdep_assert_held(&ptdev->mmu->as.slots_lock); + if (!size) + return 0; + switch (op) { case AS_COMMAND_FLUSH_MEM: lsc_flush_op = CACHE_CLEAN | CACHE_INV; @@ -602,7 +599,10 @@ static int mmu_hw_do_operation_locked(struct panthor_device *ptdev, int as_nr, * power it up */ - ret = lock_region(ptdev, as_nr, iova, size); + /* Lock the region that needs to be updated */ + gpu_write64(ptdev, AS_LOCKADDR(as_nr), + pack_region_range(ptdev, iova, size)); + ret = as_send_cmd_and_wait(ptdev, as_nr, AS_COMMAND_LOCK); if (ret) return ret; |
