OSDN Git Service

drm/amdgpu/si: add PCI reset support
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 4 Feb 2021 16:13:53 +0000 (11:13 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 9 Feb 2021 20:29:57 +0000 (15:29 -0500)
Use generic PCI reset for GPU reset if the user specifies
PCI reset as the reset mechanism.  This should in general
only be used for validation.

Acked-by: Evan Quan <evan.quan@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/si.c

index 7542276..6b5cf78 100644 (file)
@@ -1299,17 +1299,6 @@ static int si_gpu_pci_config_reset(struct amdgpu_device *adev)
        return r;
 }
 
-static int si_asic_reset(struct amdgpu_device *adev)
-{
-       int r;
-
-       dev_info(adev->dev, "PCI CONFIG reset\n");
-
-       r = si_gpu_pci_config_reset(adev);
-
-       return r;
-}
-
 static bool si_asic_supports_baco(struct amdgpu_device *adev)
 {
        return false;
@@ -1318,14 +1307,34 @@ static bool si_asic_supports_baco(struct amdgpu_device *adev)
 static enum amd_reset_method
 si_asic_reset_method(struct amdgpu_device *adev)
 {
-       if (amdgpu_reset_method != AMD_RESET_METHOD_LEGACY &&
-           amdgpu_reset_method != -1)
+       if (amdgpu_reset_method == AMD_RESET_METHOD_PCI)
+               return amdgpu_reset_method;
+       else if (amdgpu_reset_method != AMD_RESET_METHOD_LEGACY &&
+                amdgpu_reset_method != -1)
                dev_warn(adev->dev, "Specified reset method:%d isn't supported, using AUTO instead.\n",
-                                 amdgpu_reset_method);
+                        amdgpu_reset_method);
 
        return AMD_RESET_METHOD_LEGACY;
 }
 
+static int si_asic_reset(struct amdgpu_device *adev)
+{
+       int r;
+
+       switch (si_asic_reset_method(adev)) {
+       case AMD_RESET_METHOD_PCI:
+               dev_info(adev->dev, "PCI reset\n");
+               r = amdgpu_device_pci_reset(adev);
+               break;
+       default:
+               dev_info(adev->dev, "PCI CONFIG reset\n");
+               r = si_gpu_pci_config_reset(adev);
+               break;
+       }
+
+       return r;
+}
+
 static u32 si_get_config_memsize(struct amdgpu_device *adev)
 {
        return RREG32(mmCONFIG_MEMSIZE);