> -----Original Message----- > From: Sasha Levin [mailto:sasha.levin@xxxxxxxxxx] > Sent: Sunday, April 17, 2016 5:52 AM > To: stable@xxxxxxxxxxxxxxx; stable-commits@xxxxxxxxxxxxxxx > Cc: Deucher, Alexander; Sasha Levin > Subject: [added to the 4.1 stable tree] drm/radeon: disable runtime pm on > PX laptops without dGPU power control > > From: Alex Deucher <alexander.deucher@xxxxxxx> > > This patch has been added to the 4.1 stable tree. If you have any > objections, please let us know. > > =============== > > [ Upstream commit e64c952efb8e0c15ae82cec8e455ab4910690ef1 ] > > Some PX laptops don't provide an ACPI method to control dGPU power. On > those systems, the driver is responsible for handling the dGPU power > state. Disable runtime PM on them until support for this is implemented. > > Reviewed-by: Michel Dänzer <michel.daenzer@xxxxxxx> > Signed-off-by: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Sasha Levin <sasha.levin@xxxxxxxxxx> Please do not apply this. there have been regressions reported. Thanks, Alex > --- > drivers/gpu/drm/radeon/radeon_atpx_handler.c | 8 ++++---- > drivers/gpu/drm/radeon/radeon_device.c | 8 +++++++- > 2 files changed, 11 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c > b/drivers/gpu/drm/radeon/radeon_atpx_handler.c > index 8bc7d0b..1523cf9 100644 > --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c > +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c > @@ -62,6 +62,10 @@ bool radeon_has_atpx(void) { > return radeon_atpx_priv.atpx_detected; > } > > +bool radeon_has_atpx_dgpu_power_cntl(void) { > + return radeon_atpx_priv.atpx.functions.power_cntl; > +} > + > /** > * radeon_atpx_call - call an ATPX method > * > @@ -141,10 +145,6 @@ static void radeon_atpx_parse_functions(struct > radeon_atpx_functions *f, u32 mas > */ > static int radeon_atpx_validate(struct radeon_atpx *atpx) > { > - /* make sure required functions are enabled */ > - /* dGPU power control is required */ > - atpx->functions.power_cntl = true; > - > if (atpx->functions.px_params) { > union acpi_object *info; > struct atpx_px_params output; > diff --git a/drivers/gpu/drm/radeon/radeon_device.c > b/drivers/gpu/drm/radeon/radeon_device.c > index 604c44d..9cbdd8a 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -103,6 +103,12 @@ static const char radeon_family_name[][16] = { > "LAST", > }; > > +#if defined(CONFIG_VGA_SWITCHEROO) > +bool radeon_has_atpx_dgpu_power_cntl(void); > +#else > +static inline bool radeon_has_atpx_dgpu_power_cntl(void) { return false; } > +#endif > + > #define RADEON_PX_QUIRK_DISABLE_PX (1 << 0) > #define RADEON_PX_QUIRK_LONG_WAKEUP (1 << 1) > > @@ -1427,7 +1433,7 @@ int radeon_device_init(struct radeon_device > *rdev, > * ignore it */ > vga_client_register(rdev->pdev, rdev, NULL, > radeon_vga_set_decode); > > - if (rdev->flags & RADEON_IS_PX) > + if ((rdev->flags & RADEON_IS_PX) && > radeon_has_atpx_dgpu_power_cntl()) > runtime = true; > vga_switcheroo_register_client(rdev->pdev, > &radeon_switcheroo_ops, runtime); > if (runtime) > -- > 2.5.0 ��.n��������+%������w��{.n�����������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f