/**
  * amdgpu_pm_dev_state_check - Check if device can be accessed.
  * @adev: Target device.
+ * @runpm: Check runpm status for suspend state checks.
  *
  * Checks the state of the @adev for access. Return 0 if the device is
  * accessible or a negative error code otherwise.
  */
-static int amdgpu_pm_dev_state_check(struct amdgpu_device *adev)
+static int amdgpu_pm_dev_state_check(struct amdgpu_device *adev, bool runpm)
 {
+       bool runpm_check = runpm ? adev->in_runpm : false;
+
        if (amdgpu_in_reset(adev))
                return -EPERM;
-       if (adev->in_suspend && !adev->in_runpm)
+       if (adev->in_suspend && !runpm_check)
                return -EPERM;
 
        return 0;
 {
        int ret;
 
-       ret = amdgpu_pm_dev_state_check(adev);
+       ret = amdgpu_pm_dev_state_check(adev, true);
        if (ret)
                return ret;
 
 {
        int ret;
 
-       ret = amdgpu_pm_dev_state_check(adev);
+       /* Ignore runpm status. If device is in suspended state, deny access */
+       ret = amdgpu_pm_dev_state_check(adev, false);
        if (ret)
                return ret;
 
+       /*
+        * Allow only if device is active. If runpm is disabled also, as in
+        * kernels without CONFIG_PM, allow access.
+        */
        ret = pm_runtime_get_if_active(adev->dev);
-       if (ret <= 0)
-               return ret ?: -EPERM;
+       if (!ret)
+               return -EPERM;
 
        return 0;
 }
        struct amdgpu_device *adev = drm_to_adev(ddev);
        int ret;
 
-       ret = amdgpu_pm_dev_state_check(adev);
+       ret = amdgpu_pm_dev_state_check(adev, true);
        if (ret)
                return ret;
 
        struct amdgpu_device *adev = drm_to_adev(ddev);
        int r;
 
-       r = amdgpu_pm_dev_state_check(adev);
+       r = amdgpu_pm_dev_state_check(adev, true);
        if (r)
                return r;
        if (adev->unique_id)
        policy_attr =
                container_of(attr, struct amdgpu_pm_policy_attr, dev_attr);
 
-       r = amdgpu_pm_dev_state_check(adev);
+       r = amdgpu_pm_dev_state_check(adev, true);
        if (r)
                return r;
 
        void *smu_prv_buf;
        int ret = 0;
 
-       ret = amdgpu_pm_dev_state_check(adev);
+       ret = amdgpu_pm_dev_state_check(adev, true);
        if (ret)
                return ret;