drm/amdgpu: support per device powerplay enablement (v2)

The amdgu_powerplay variable is global for multiple GPU instances.

v2: fold in Flora's module option change, protect adev reference in
macros

Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 8b1ff13..637eff3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -2040,6 +2040,7 @@
 
 	/* powerplay */
 	struct amd_powerplay		powerplay;
+	bool				pp_enabled;
 
 	/* dpm */
 	struct amdgpu_pm		pm;
@@ -2268,68 +2269,68 @@
 #define amdgpu_dpm_enable_bapm(adev, e) (adev)->pm.funcs->enable_bapm((adev), (e))
 
 #define amdgpu_dpm_get_temperature(adev) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->get_temperature((adev)->powerplay.pp_handle) : \
-		(adev)->pm.funcs->get_temperature((adev))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->get_temperature((adev)->powerplay.pp_handle) : \
+	      (adev)->pm.funcs->get_temperature((adev))
 
 #define amdgpu_dpm_set_fan_control_mode(adev, m) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->set_fan_control_mode((adev)->powerplay.pp_handle, (m)) : \
-		(adev)->pm.funcs->set_fan_control_mode((adev), (m))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->set_fan_control_mode((adev)->powerplay.pp_handle, (m)) : \
+	      (adev)->pm.funcs->set_fan_control_mode((adev), (m))
 
 #define amdgpu_dpm_get_fan_control_mode(adev) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->get_fan_control_mode((adev)->powerplay.pp_handle) : \
-		(adev)->pm.funcs->get_fan_control_mode((adev))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->get_fan_control_mode((adev)->powerplay.pp_handle) : \
+	      (adev)->pm.funcs->get_fan_control_mode((adev))
 
 #define amdgpu_dpm_set_fan_speed_percent(adev, s) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->set_fan_speed_percent((adev)->powerplay.pp_handle, (s)) : \
-		(adev)->pm.funcs->set_fan_speed_percent((adev), (s))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->set_fan_speed_percent((adev)->powerplay.pp_handle, (s)) : \
+	      (adev)->pm.funcs->set_fan_speed_percent((adev), (s))
 
 #define amdgpu_dpm_get_fan_speed_percent(adev, s) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->get_fan_speed_percent((adev)->powerplay.pp_handle, (s)) : \
-		(adev)->pm.funcs->get_fan_speed_percent((adev), (s))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->get_fan_speed_percent((adev)->powerplay.pp_handle, (s)) : \
+	      (adev)->pm.funcs->get_fan_speed_percent((adev), (s))
 
 #define amdgpu_dpm_get_sclk(adev, l) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->get_sclk((adev)->powerplay.pp_handle, (l)) : \
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->get_sclk((adev)->powerplay.pp_handle, (l)) : \
 		(adev)->pm.funcs->get_sclk((adev), (l))
 
 #define amdgpu_dpm_get_mclk(adev, l)  \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->get_mclk((adev)->powerplay.pp_handle, (l)) : \
-		(adev)->pm.funcs->get_mclk((adev), (l))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->get_mclk((adev)->powerplay.pp_handle, (l)) : \
+	      (adev)->pm.funcs->get_mclk((adev), (l))
 
 
 #define amdgpu_dpm_force_performance_level(adev, l) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->force_performance_level((adev)->powerplay.pp_handle, (l)) : \
-		(adev)->pm.funcs->force_performance_level((adev), (l))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->force_performance_level((adev)->powerplay.pp_handle, (l)) : \
+	      (adev)->pm.funcs->force_performance_level((adev), (l))
 
 #define amdgpu_dpm_powergate_uvd(adev, g) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->powergate_uvd((adev)->powerplay.pp_handle, (g)) : \
-		(adev)->pm.funcs->powergate_uvd((adev), (g))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->powergate_uvd((adev)->powerplay.pp_handle, (g)) : \
+	      (adev)->pm.funcs->powergate_uvd((adev), (g))
 
 #define amdgpu_dpm_powergate_vce(adev, g) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->powergate_vce((adev)->powerplay.pp_handle, (g)) : \
-		(adev)->pm.funcs->powergate_vce((adev), (g))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->powergate_vce((adev)->powerplay.pp_handle, (g)) : \
+	      (adev)->pm.funcs->powergate_vce((adev), (g))
 
 #define amdgpu_dpm_debugfs_print_current_performance_level(adev, m) \
-		amdgpu_powerplay ? \
-		(adev)->powerplay.pp_funcs->print_current_performance_level((adev)->powerplay.pp_handle, (m)) : \
-		(adev)->pm.funcs->debugfs_print_current_performance_level((adev), (m))
+	(adev)->pp_enabled ?						\
+	      (adev)->powerplay.pp_funcs->print_current_performance_level((adev)->powerplay.pp_handle, (m)) : \
+	      (adev)->pm.funcs->debugfs_print_current_performance_level((adev), (m))
 
 #define amdgpu_dpm_get_current_power_state(adev) \
-		(adev)->powerplay.pp_funcs->get_current_power_state((adev)->powerplay.pp_handle)
+	(adev)->powerplay.pp_funcs->get_current_power_state((adev)->powerplay.pp_handle)
 
 #define amdgpu_dpm_get_performance_level(adev) \
-		(adev)->powerplay.pp_funcs->get_performance_level((adev)->powerplay.pp_handle)
+	(adev)->powerplay.pp_funcs->get_performance_level((adev)->powerplay.pp_handle)
 
-#define amdgpu_dpm_dispatch_task(adev, event_id, input, output) \
+#define amdgpu_dpm_dispatch_task(adev, event_id, input, output)		\
 	(adev)->powerplay.pp_funcs->dispatch_tasks((adev)->powerplay.pp_handle, (event_id), (input), (output))
 
 #define amdgpu_gds_switch(adev, r, v, d, w, a) (adev)->gds.funcs->patch_gds_switch((r), (v), (d), (w), (a))