mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
drm/amdgpu/gfx: add amdgpu_gfx_off_ctrl_immediate()
Same as amdgpu_gfx_off_ctrl(), but without the delay for gfxoff disallow. Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Suggested-by: Błażej Szczygieł <mumei6102@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
1c687c0da9
commit
250d9769ee
|
|
@ -771,18 +771,8 @@ int amdgpu_gfx_enable_kgq(struct amdgpu_device *adev, int xcc_id)
|
|||
return r;
|
||||
}
|
||||
|
||||
/* amdgpu_gfx_off_ctrl - Handle gfx off feature enable/disable
|
||||
*
|
||||
* @adev: amdgpu_device pointer
|
||||
* @bool enable true: enable gfx off feature, false: disable gfx off feature
|
||||
*
|
||||
* 1. gfx off feature will be enabled by gfx ip after gfx cg gp enabled.
|
||||
* 2. other client can send request to disable gfx off feature, the request should be honored.
|
||||
* 3. other client can cancel their request of disable gfx off feature
|
||||
* 4. other client should not send request to enable gfx off feature before disable gfx off feature.
|
||||
*/
|
||||
|
||||
void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
|
||||
static void amdgpu_gfx_do_off_ctrl(struct amdgpu_device *adev, bool enable,
|
||||
bool no_delay)
|
||||
{
|
||||
unsigned long delay = GFX_OFF_DELAY_ENABLE;
|
||||
|
||||
|
|
@ -804,7 +794,7 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
|
|||
if (adev->gfx.gfx_off_req_count == 0 &&
|
||||
!adev->gfx.gfx_off_state) {
|
||||
/* If going to s2idle, no need to wait */
|
||||
if (adev->in_s0ix) {
|
||||
if (no_delay) {
|
||||
if (!amdgpu_dpm_set_powergating_by_smu(adev,
|
||||
AMD_IP_BLOCK_TYPE_GFX, true, 0))
|
||||
adev->gfx.gfx_off_state = true;
|
||||
|
|
@ -836,6 +826,43 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
|
|||
mutex_unlock(&adev->gfx.gfx_off_mutex);
|
||||
}
|
||||
|
||||
/* amdgpu_gfx_off_ctrl - Handle gfx off feature enable/disable
|
||||
*
|
||||
* @adev: amdgpu_device pointer
|
||||
* @bool enable true: enable gfx off feature, false: disable gfx off feature
|
||||
*
|
||||
* 1. gfx off feature will be enabled by gfx ip after gfx cg pg enabled.
|
||||
* 2. other client can send request to disable gfx off feature, the request should be honored.
|
||||
* 3. other client can cancel their request of disable gfx off feature
|
||||
* 4. other client should not send request to enable gfx off feature before disable gfx off feature.
|
||||
*
|
||||
* gfx off allow will be delayed by GFX_OFF_DELAY_ENABLE ms.
|
||||
*/
|
||||
void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable)
|
||||
{
|
||||
/* If going to s2idle, no need to wait */
|
||||
bool no_delay = adev->in_s0ix ? true : false;
|
||||
|
||||
amdgpu_gfx_do_off_ctrl(adev, enable, no_delay);
|
||||
}
|
||||
|
||||
/* amdgpu_gfx_off_ctrl_immediate - Handle gfx off feature enable/disable
|
||||
*
|
||||
* @adev: amdgpu_device pointer
|
||||
* @bool enable true: enable gfx off feature, false: disable gfx off feature
|
||||
*
|
||||
* 1. gfx off feature will be enabled by gfx ip after gfx cg pg enabled.
|
||||
* 2. other client can send request to disable gfx off feature, the request should be honored.
|
||||
* 3. other client can cancel their request of disable gfx off feature
|
||||
* 4. other client should not send request to enable gfx off feature before disable gfx off feature.
|
||||
*
|
||||
* gfx off allow will be issued immediately.
|
||||
*/
|
||||
void amdgpu_gfx_off_ctrl_immediate(struct amdgpu_device *adev, bool enable)
|
||||
{
|
||||
amdgpu_gfx_do_off_ctrl(adev, enable, true);
|
||||
}
|
||||
|
||||
int amdgpu_set_gfx_off_residency(struct amdgpu_device *adev, bool value)
|
||||
{
|
||||
int r = 0;
|
||||
|
|
|
|||
|
|
@ -553,6 +553,7 @@ int amdgpu_gfx_me_queue_to_bit(struct amdgpu_device *adev, int me,
|
|||
bool amdgpu_gfx_is_me_queue_enabled(struct amdgpu_device *adev, int me,
|
||||
int pipe, int queue);
|
||||
void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable);
|
||||
void amdgpu_gfx_off_ctrl_immediate(struct amdgpu_device *adev, bool enable);
|
||||
int amdgpu_get_gfx_off_status(struct amdgpu_device *adev, uint32_t *value);
|
||||
int amdgpu_gfx_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *ras_block);
|
||||
void amdgpu_gfx_ras_fini(struct amdgpu_device *adev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user