|
@@ -142,18 +142,12 @@ static void amdgpu_atpx_parse_functions(struct amdgpu_atpx_functions *f, u32 mas
|
|
|
*/
|
|
|
static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
|
|
|
{
|
|
|
- /* make sure required functions are enabled */
|
|
|
- /* dGPU power control is required */
|
|
|
- if (atpx->functions.power_cntl == false) {
|
|
|
- printk("ATPX dGPU power cntl not present, forcing\n");
|
|
|
- atpx->functions.power_cntl = true;
|
|
|
- }
|
|
|
+ u32 valid_bits = 0;
|
|
|
|
|
|
if (atpx->functions.px_params) {
|
|
|
union acpi_object *info;
|
|
|
struct atpx_px_params output;
|
|
|
size_t size;
|
|
|
- u32 valid_bits;
|
|
|
|
|
|
info = amdgpu_atpx_call(atpx->handle, ATPX_FUNCTION_GET_PX_PARAMETERS, NULL);
|
|
|
if (!info)
|
|
@@ -172,24 +166,37 @@ static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
|
|
|
memcpy(&output, info->buffer.pointer, size);
|
|
|
|
|
|
valid_bits = output.flags & output.valid_flags;
|
|
|
- /* if separate mux flag is set, mux controls are required */
|
|
|
- if (valid_bits & ATPX_SEPARATE_MUX_FOR_I2C) {
|
|
|
- atpx->functions.i2c_mux_cntl = true;
|
|
|
- atpx->functions.disp_mux_cntl = true;
|
|
|
- }
|
|
|
- /* if any outputs are muxed, mux controls are required */
|
|
|
- if (valid_bits & (ATPX_CRT1_RGB_SIGNAL_MUXED |
|
|
|
- ATPX_TV_SIGNAL_MUXED |
|
|
|
- ATPX_DFP_SIGNAL_MUXED))
|
|
|
- atpx->functions.disp_mux_cntl = true;
|
|
|
-
|
|
|
- if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) {
|
|
|
- printk("Hybrid Graphics, ATPX dGPU power cntl disabled\n");
|
|
|
- atpx->functions.power_cntl = false;
|
|
|
- }
|
|
|
|
|
|
kfree(info);
|
|
|
}
|
|
|
+
|
|
|
+ /* if separate mux flag is set, mux controls are required */
|
|
|
+ if (valid_bits & ATPX_SEPARATE_MUX_FOR_I2C) {
|
|
|
+ atpx->functions.i2c_mux_cntl = true;
|
|
|
+ atpx->functions.disp_mux_cntl = true;
|
|
|
+ }
|
|
|
+ /* if any outputs are muxed, mux controls are required */
|
|
|
+ if (valid_bits & (ATPX_CRT1_RGB_SIGNAL_MUXED |
|
|
|
+ ATPX_TV_SIGNAL_MUXED |
|
|
|
+ ATPX_DFP_SIGNAL_MUXED))
|
|
|
+ atpx->functions.disp_mux_cntl = true;
|
|
|
+
|
|
|
+
|
|
|
+ /* some bioses set these bits rather than flagging power_cntl as supported */
|
|
|
+ if (valid_bits & (ATPX_DYNAMIC_PX_SUPPORTED |
|
|
|
+ ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED))
|
|
|
+ atpx->functions.power_cntl = true;
|
|
|
+
|
|
|
+ if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) {
|
|
|
+ printk("Hybrid Graphics, ATPX dGPU power cntl disabled\n");
|
|
|
+ atpx->functions.power_cntl = false;
|
|
|
+ } else if (atpx->functions.power_cntl == false) {
|
|
|
+ /* make sure required functions are enabled */
|
|
|
+ /* dGPU power control is required */
|
|
|
+ printk("ATPX dGPU power cntl not present, forcing\n");
|
|
|
+ atpx->functions.power_cntl = true;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|