enum AMDGPU_DEBUG_MASK {
        AMDGPU_DEBUG_VM = BIT(0),
        AMDGPU_DEBUG_LARGEBAR = BIT(1),
+       AMDGPU_DEBUG_DISABLE_GPU_SOFT_RECOVERY = BIT(2),
 };
 
 unsigned int amdgpu_vram_limit = UINT_MAX;
  * - 0x2: Enable simulating large-bar capability on non-large bar system. This
  *   limits the VRAM size reported to ROCm applications to the visible
  *   size, usually 256MB.
+ * - 0x4: Disable GPU soft recovery, always do a full reset
  */
 MODULE_PARM_DESC(debug_mask, "debug options for amdgpu, disabled by default");
 module_param_named(debug_mask, amdgpu_debug_mask, uint, 0444);
                pr_info("debug: enabled simulating large-bar capability on non-large bar system\n");
                adev->debug_largebar = true;
        }
+
+       if (amdgpu_debug_mask & AMDGPU_DEBUG_DISABLE_GPU_SOFT_RECOVERY) {
+               pr_info("debug: soft reset for GPU recovery disabled\n");
+               adev->debug_disable_soft_recovery = true;
+       }
 }
 
 static int amdgpu_pci_probe(struct pci_dev *pdev,
 
                               struct dma_fence *fence)
 {
        unsigned long flags;
+       ktime_t deadline;
 
-       ktime_t deadline = ktime_add_us(ktime_get(), 10000);
+       if (unlikely(ring->adev->debug_disable_soft_recovery))
+               return false;
+
+       deadline = ktime_add_us(ktime_get(), 10000);
 
        if (amdgpu_sriov_vf(ring->adev) || !ring->funcs->soft_recovery || !fence)
                return false;