Commit 6cb2d4e4 authored by Huang Rui's avatar Huang Rui Committed by Alex Deucher

drm/amdgpu: introduce an interface to get clock gating status dynamically

Signed-off-by: default avatarHuang Rui <ray.huang@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c8394f38
...@@ -194,6 +194,7 @@ int amdgpu_set_clockgating_state(struct amdgpu_device *adev, ...@@ -194,6 +194,7 @@ int amdgpu_set_clockgating_state(struct amdgpu_device *adev,
int amdgpu_set_powergating_state(struct amdgpu_device *adev, int amdgpu_set_powergating_state(struct amdgpu_device *adev,
enum amd_ip_block_type block_type, enum amd_ip_block_type block_type,
enum amd_powergating_state state); enum amd_powergating_state state);
void amdgpu_get_clockgating_state(struct amdgpu_device *adev, u32 *flags);
int amdgpu_wait_for_idle(struct amdgpu_device *adev, int amdgpu_wait_for_idle(struct amdgpu_device *adev,
enum amd_ip_block_type block_type); enum amd_ip_block_type block_type);
bool amdgpu_is_idle(struct amdgpu_device *adev, bool amdgpu_is_idle(struct amdgpu_device *adev,
......
...@@ -1131,6 +1131,18 @@ int amdgpu_set_powergating_state(struct amdgpu_device *adev, ...@@ -1131,6 +1131,18 @@ int amdgpu_set_powergating_state(struct amdgpu_device *adev,
return r; return r;
} }
void amdgpu_get_clockgating_state(struct amdgpu_device *adev, u32 *flags)
{
int i;
for (i = 0; i < adev->num_ip_blocks; i++) {
if (!adev->ip_blocks[i].status.valid)
continue;
if (adev->ip_blocks[i].version->funcs->get_clockgating_state)
adev->ip_blocks[i].version->funcs->get_clockgating_state((void *)adev, flags);
}
}
int amdgpu_wait_for_idle(struct amdgpu_device *adev, int amdgpu_wait_for_idle(struct amdgpu_device *adev,
enum amd_ip_block_type block_type) enum amd_ip_block_type block_type)
{ {
......
...@@ -1365,6 +1365,10 @@ static int amdgpu_debugfs_pm_info(struct seq_file *m, void *data) ...@@ -1365,6 +1365,10 @@ static int amdgpu_debugfs_pm_info(struct seq_file *m, void *data)
struct drm_device *dev = node->minor->dev; struct drm_device *dev = node->minor->dev;
struct amdgpu_device *adev = dev->dev_private; struct amdgpu_device *adev = dev->dev_private;
struct drm_device *ddev = adev->ddev; struct drm_device *ddev = adev->ddev;
u32 flags = 0;
amdgpu_get_clockgating_state(adev, &flags);
seq_printf(m, "Clock Gating Flags Mask: 0x%x\n", flags);
if (!adev->pm.dpm_enabled) { if (!adev->pm.dpm_enabled) {
seq_printf(m, "dpm not enabled\n"); seq_printf(m, "dpm not enabled\n");
......
...@@ -214,6 +214,8 @@ struct amd_ip_funcs { ...@@ -214,6 +214,8 @@ struct amd_ip_funcs {
/* enable/disable pg for the IP block */ /* enable/disable pg for the IP block */
int (*set_powergating_state)(void *handle, int (*set_powergating_state)(void *handle,
enum amd_powergating_state state); enum amd_powergating_state state);
/* get current clockgating status */
void (*get_clockgating_state)(void *handle, u32 *flags);
}; };
#endif /* __AMD_SHARED_H__ */ #endif /* __AMD_SHARED_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment