Re: [PATCH 09/18] drm/amdgpu: add set_powergating_state_instance

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 2024-10-04 15:40, Alex Deucher wrote:
On Fri, Oct 4, 2024 at 2:45 PM <boyuan.zhang@xxxxxxx> wrote:
From: Boyuan Zhang <boyuan.zhang@xxxxxxx>

Add a new function to allow setting requested powergating state for the
given instance. If the instance value doesn't match with the one inside
ip_block, then do nothing since this request is for other instances with
the same block type.

Signed-off-by: Boyuan Zhang <boyuan.zhang@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  4 +++
  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 37 ++++++++++++++++++++++
  2 files changed, 41 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 3442564fe174..ae59497f3074 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -358,6 +358,10 @@ int amdgpu_device_ip_set_clockgating_state(void *dev,
  int amdgpu_device_ip_set_powergating_state(void *dev,
                                            enum amd_ip_block_type block_type,
                                            enum amd_powergating_state state);
+int amdgpu_device_ip_set_powergating_state_instance(void *dev,
+                                          enum amd_ip_block_type block_type,
+                                          enum amd_powergating_state state,
+                                          unsigned int inst);
  void amdgpu_device_ip_get_clockgating_state(struct amdgpu_device *adev,
                                             u64 *flags);
  int amdgpu_device_ip_wait_for_idle(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 35a3e71a5a84..f0b6a9675405 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2162,6 +2162,43 @@ int amdgpu_device_ip_set_powergating_state(void *dev,
         return r;
  }

+/**
+ * amdgpu_device_ip_set_powergating_state_instance - set the PG state
+ *
+ * @dev: amdgpu_device pointer
+ * @block_type: Type of hardware IP (SMU, GFX, UVD, etc.)
+ * @state: powergating state (gate or ungate)
+ *
+ * Sets the requested powergating state for the given instance of
+ * the hardware IP specified.
+ * Returns the error code from the last instance.
+ */
+int amdgpu_device_ip_set_powergating_state_instance(void *dev,
+                                          enum amd_ip_block_type block_type,
+                                          enum amd_powergating_state state,
+                                          unsigned int inst)
+{
+       struct amdgpu_device *adev = dev;
+       int i, r = 0;
+
+       for (i = 0; i < adev->num_ip_blocks; i++) {
+               if (!adev->ip_blocks[i].status.valid)
+                       continue;
+               if (adev->ip_blocks[i].version->type != block_type)
+                       continue;
+               if (adev->ip_blocks[i].instance != inst)
+                       continue;
+               if (!adev->ip_blocks[i].version->funcs->set_powergating_state)
+                       continue;
+               r = adev->ip_blocks[i].version->funcs->set_powergating_state(
+                       (void *)&adev->ip_blocks[i], state);
+               if (r)
+                       DRM_ERROR("set_powergating_state of IP block <%s> failed %d\n",
+                                 adev->ip_blocks[i].version->funcs->name, r);
+       }
+       return r;
+}
+
I think it would also be cleaner to update
amdgpu_device_ip_set_powergating_state() to take the instance as a new
parameter.  Same for amdgpu_device_ip_set_clockgating_state().

Alex
Removed duplicated function, and add instance parameter to existing
function in new patch set (patch 19/32)

Thanks,
Boyuan



  /**
   * amdgpu_device_ip_get_clockgating_state - get the CG state
   *
--
2.34.1




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux