for in_s0ix to be set the activate function needs to
call the pmops wrappers

that may help

amdgpu_pm_ops contains other function pointers that may
also be of interest

Index: sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c,v
diff -u -p -r1.44 amdgpu_drv.c
--- sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c     14 May 2024 04:55:42 -0000      
1.44
+++ sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c     15 Aug 2024 03:45:44 -0000
@@ -2412,9 +2412,10 @@ static void amdgpu_pmops_complete(struct
        /* nothing to do */
 }
 
-static int amdgpu_pmops_suspend(struct device *dev)
+#endif /* notyet */
+
+static int amdgpu_pmops_suspend(struct drm_device *drm_dev)
 {
-       struct drm_device *drm_dev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(drm_dev);
 
        adev->suspend_complete = false;
@@ -2427,9 +2428,8 @@ static int amdgpu_pmops_suspend(struct d
        return amdgpu_device_suspend(drm_dev, true);
 }
 
-static int amdgpu_pmops_suspend_noirq(struct device *dev)
+static int amdgpu_pmops_suspend_noirq(struct drm_device *drm_dev)
 {
-       struct drm_device *drm_dev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(drm_dev);
 
        adev->suspend_complete = true;
@@ -2439,18 +2439,19 @@ static int amdgpu_pmops_suspend_noirq(st
        return 0;
 }
 
-static int amdgpu_pmops_resume(struct device *dev)
+static int amdgpu_pmops_resume(struct drm_device *drm_dev)
 {
-       struct drm_device *drm_dev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(drm_dev);
        int r;
 
        if (!adev->in_s0ix && !adev->in_s3)
                return 0;
 
+#ifdef notyet
        /* Avoids registers access if device is physically gone */
        if (!pci_device_is_present(adev->pdev))
                adev->no_hw_access = true;
+#endif
 
        r = amdgpu_device_resume(drm_dev, true);
        if (amdgpu_acpi_is_s0ix_active(adev))
@@ -2460,6 +2461,8 @@ static int amdgpu_pmops_resume(struct de
        return r;
 }
 
+#ifdef notyet
+
 static int amdgpu_pmops_freeze(struct device *dev)
 {
        struct drm_device *drm_dev = dev_get_drvdata(dev);
@@ -3672,14 +3675,15 @@ amdgpu_activate(struct device *self, int
        case DVACT_QUIESCE:
                rv = config_activate_children(self, act);
                amdgpu_device_prepare(dev);
-               amdgpu_device_suspend(dev, true);
+               amdgpu_pmops_suspend(dev);
                break;
        case DVACT_SUSPEND:
+               amdgpu_pmops_suspend_noirq(dev);
                break;
        case DVACT_RESUME:
                break;
        case DVACT_WAKEUP:
-               amdgpu_device_resume(dev, true);
+               amdgpu_pmops_resume(dev);
                rv = config_activate_children(self, act);
                break;
        }

Reply via email to