summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c87
1 files changed, 17 insertions, 70 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
index 7f001c32e911..179b892fb410 100644
--- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
@@ -115,6 +115,19 @@ static int vcn_v4_0_3_early_init(struct amdgpu_ip_block *ip_block)
struct amdgpu_device *adev = ip_block->adev;
int i, r;
+ switch (amdgpu_user_queue) {
+ case -1:
+ case 0:
+ default:
+ adev->vcn.disable_kq = false;
+ adev->vcn.disable_uq = true;
+ break;
+ case 2:
+ adev->vcn.disable_kq = true;
+ adev->vcn.disable_uq = true;
+ break;
+ }
+
for (i = 0; i < adev->vcn.num_vcn_inst; ++i)
/* re-use enc ring as unified ring */
adev->vcn.inst[i].num_enc_rings = 1;
@@ -217,6 +230,10 @@ static int vcn_v4_0_3_sw_init(struct amdgpu_ip_block *ip_block)
ring = &adev->vcn.inst[i].ring_enc[0];
ring->use_doorbell = true;
+ if (adev->vcn.disable_kq) {
+ ring->no_scheduler = true;
+ ring->no_user_submission = true;
+ }
if (!amdgpu_sriov_vf(adev))
ring->doorbell_index =
@@ -2146,71 +2163,6 @@ static const struct amdgpu_ras_block_hw_ops vcn_v4_0_3_ras_hw_ops = {
.query_poison_status = vcn_v4_0_3_query_poison_status,
};
-static int vcn_v4_0_3_aca_bank_parser(struct aca_handle *handle, struct aca_bank *bank,
- enum aca_smu_type type, void *data)
-{
- struct aca_bank_info info;
- u64 misc0;
- int ret;
-
- ret = aca_bank_info_decode(bank, &info);
- if (ret)
- return ret;
-
- misc0 = bank->regs[ACA_REG_IDX_MISC0];
- switch (type) {
- case ACA_SMU_TYPE_UE:
- bank->aca_err_type = ACA_ERROR_TYPE_UE;
- ret = aca_error_cache_log_bank_error(handle, &info, ACA_ERROR_TYPE_UE,
- 1ULL);
- break;
- case ACA_SMU_TYPE_CE:
- bank->aca_err_type = ACA_ERROR_TYPE_CE;
- ret = aca_error_cache_log_bank_error(handle, &info, bank->aca_err_type,
- ACA_REG__MISC0__ERRCNT(misc0));
- break;
- default:
- return -EINVAL;
- }
-
- return ret;
-}
-
-/* reference to smu driver if header file */
-static int vcn_v4_0_3_err_codes[] = {
- 14, 15, /* VCN */
-};
-
-static bool vcn_v4_0_3_aca_bank_is_valid(struct aca_handle *handle, struct aca_bank *bank,
- enum aca_smu_type type, void *data)
-{
- u32 instlo;
-
- instlo = ACA_REG__IPID__INSTANCEIDLO(bank->regs[ACA_REG_IDX_IPID]);
- instlo &= GENMASK(31, 1);
-
- if (instlo != mmSMNAID_AID0_MCA_SMU)
- return false;
-
- if (aca_bank_check_error_codes(handle->adev, bank,
- vcn_v4_0_3_err_codes,
- ARRAY_SIZE(vcn_v4_0_3_err_codes)))
- return false;
-
- return true;
-}
-
-static const struct aca_bank_ops vcn_v4_0_3_aca_bank_ops = {
- .aca_bank_parser = vcn_v4_0_3_aca_bank_parser,
- .aca_bank_is_valid = vcn_v4_0_3_aca_bank_is_valid,
-};
-
-static const struct aca_info vcn_v4_0_3_aca_info = {
- .hwip = ACA_HWIP_TYPE_SMU,
- .mask = ACA_ERROR_UE_MASK,
- .bank_ops = &vcn_v4_0_3_aca_bank_ops,
-};
-
static int vcn_v4_0_3_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *ras_block)
{
int r;
@@ -2226,11 +2178,6 @@ static int vcn_v4_0_3_ras_late_init(struct amdgpu_device *adev, struct ras_commo
goto late_fini;
}
- r = amdgpu_ras_bind_aca(adev, AMDGPU_RAS_BLOCK__VCN,
- &vcn_v4_0_3_aca_info, NULL);
- if (r)
- goto late_fini;
-
return 0;
late_fini: