diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch new file mode 100644 index 00000000..f3fe7ccb --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4149-drm-amdgpu-soc15-add-support-for-baco-reset-with-swS.patch @@ -0,0 +1,100 @@ +From 34656170efd682732e9b3e565cb013055295dbbe Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Tue, 15 Oct 2019 14:27:01 -0400 +Subject: [PATCH 4149/4736] drm/amdgpu/soc15: add support for baco reset with + swSMU + +Add support for vega20 when the swSMU path is used. + +Reviewed-by: Evan Quan <evan.quan@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/soc15.c | 53 ++++++++++++++++++++---------- + 1 file changed, 35 insertions(+), 18 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c +index 5fadb237d103..438722c0b76a 100644 +--- a/drivers/gpu/drm/amd/amdgpu/soc15.c ++++ b/drivers/gpu/drm/amd/amdgpu/soc15.c +@@ -477,15 +477,22 @@ static int soc15_asic_mode1_reset(struct amdgpu_device *adev) + + static int soc15_asic_get_baco_capability(struct amdgpu_device *adev, bool *cap) + { +- void *pp_handle = adev->powerplay.pp_handle; +- const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; ++ if (is_support_sw_smu(adev)) { ++ struct smu_context *smu = &adev->smu; + +- if (!pp_funcs || !pp_funcs->get_asic_baco_capability) { +- *cap = false; +- return -ENOENT; +- } ++ *cap = smu_baco_is_support(smu); ++ return 0; ++ } else { ++ void *pp_handle = adev->powerplay.pp_handle; ++ const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; ++ ++ if (!pp_funcs || !pp_funcs->get_asic_baco_capability) { ++ *cap = false; ++ return -ENOENT; ++ } + +- return pp_funcs->get_asic_baco_capability(pp_handle, cap); ++ return pp_funcs->get_asic_baco_capability(pp_handle, cap); ++ } + } + + static int soc15_asic_baco_reset(struct amdgpu_device *adev) +@@ -494,27 +501,37 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev) + const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; + struct amdgpu_ras *ras = amdgpu_ras_get_context(adev); + +- if (!pp_funcs ||!pp_funcs->get_asic_baco_state ||!pp_funcs->set_asic_baco_state) +- return -ENOENT; +- + /* avoid NBIF got stuck when do RAS recovery in BACO reset */ + if (ras && ras->supported) + adev->nbio.funcs->enable_doorbell_interrupt(adev, false); + +- /* enter BACO state */ +- if (pp_funcs->set_asic_baco_state(pp_handle, 1)) +- return -EIO; ++ dev_info(adev->dev, "GPU BACO reset\n"); ++ ++ if (is_support_sw_smu(adev)) { ++ struct smu_context *smu = &adev->smu; ++ ++ if (smu_baco_reset(smu)) ++ return -EIO; ++ } else { ++ void *pp_handle = adev->powerplay.pp_handle; ++ const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; ++ ++ if (!pp_funcs ||!pp_funcs->get_asic_baco_state ||!pp_funcs->set_asic_baco_state) ++ return -ENOENT; ++ ++ /* enter BACO state */ ++ if (pp_funcs->set_asic_baco_state(pp_handle, 1)) ++ return -EIO; + +- /* exit BACO state */ +- if (pp_funcs->set_asic_baco_state(pp_handle, 0)) +- return -EIO; ++ /* exit BACO state */ ++ if (pp_funcs->set_asic_baco_state(pp_handle, 0)) ++ return -EIO; ++ } + + /* re-enable doorbell interrupt after BACO exit */ + if (ras && ras->supported) + adev->nbio.funcs->enable_doorbell_interrupt(adev, true); + +- dev_info(adev->dev, "GPU BACO reset\n"); +- + return 0; + } + +-- +2.17.1 + |