mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 09:09:55 -04:00
drm/amdgpu/vpe: add ring reset support
Implement ring reset for VPE. Similar to VCN and JPEG, just powergate the the IP to reset it. v2: Properly set per queue reset flag Reviewed-by: Jesse Zhang <jesse.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -379,9 +379,10 @@ static int vpe_sw_init(struct amdgpu_ip_block *ip_block)
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* TODO: Add queue reset mask when FW fully supports it */
|
||||
adev->vpe.supported_reset =
|
||||
amdgpu_get_soft_full_reset_mask(&adev->vpe.ring);
|
||||
if (!amdgpu_sriov_vf(adev))
|
||||
adev->vpe.supported_reset |= AMDGPU_RESET_TYPE_PER_QUEUE;
|
||||
ret = amdgpu_vpe_sysfs_reset_mask_init(adev);
|
||||
if (ret)
|
||||
goto out;
|
||||
@@ -874,6 +875,27 @@ static void vpe_ring_end_use(struct amdgpu_ring *ring)
|
||||
schedule_delayed_work(&adev->vpe.idle_work, VPE_IDLE_TIMEOUT);
|
||||
}
|
||||
|
||||
static int vpe_ring_reset(struct amdgpu_ring *ring,
|
||||
unsigned int vmid,
|
||||
struct amdgpu_fence *timedout_fence)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
int r;
|
||||
|
||||
amdgpu_ring_reset_helper_begin(ring, timedout_fence);
|
||||
|
||||
r = amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VPE,
|
||||
AMD_PG_STATE_GATE);
|
||||
if (r)
|
||||
return r;
|
||||
r = amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VPE,
|
||||
AMD_PG_STATE_UNGATE);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return amdgpu_ring_reset_helper_end(ring, timedout_fence);
|
||||
}
|
||||
|
||||
static ssize_t amdgpu_get_vpe_reset_mask(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
@@ -942,6 +964,7 @@ static const struct amdgpu_ring_funcs vpe_ring_funcs = {
|
||||
.preempt_ib = vpe_ring_preempt_ib,
|
||||
.begin_use = vpe_ring_begin_use,
|
||||
.end_use = vpe_ring_end_use,
|
||||
.reset = vpe_ring_reset,
|
||||
};
|
||||
|
||||
static void vpe_set_ring_funcs(struct amdgpu_device *adev)
|
||||
|
||||
Reference in New Issue
Block a user