mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 23:20:51 +07:00
radeonfb/aty128fb: Disable broken early resume hook for PowerBooks
radeonfb and aty128fb have a special hook called by the PowerMac platform code very very early on resume from sleep to bring the screen back. This is useful for debugging wakup problems, but unfortunately, this also became a source of problems of its own. The hook is called extremely early, with interrupts still off, and the code path involved with that code nowadays rely on things like taking mutexes, GFP_KERNEL allocations, etc... In addition, the driver now relies on the PCI core to restore the standard config space before calling resume which doesn't happen with this early code path. I'm keeping the code in but commented out along with a fixup call to pci_restore_state(). The reason is that I still want to make it easy to re-enable temporarily to track wake up problems, and it's possible that I can revive it at some stage if we make sleeping things save to call in early resume using a system state. In the meantime, this should fix several reported regressions. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
187cfc439f
commit
d801cec70d
@ -1853,13 +1853,14 @@ static void aty128_bl_exit(struct backlight_device *bd)
|
|||||||
* Initialisation
|
* Initialisation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_PMAC
|
#ifdef CONFIG_PPC_PMAC__disabled
|
||||||
static void aty128_early_resume(void *data)
|
static void aty128_early_resume(void *data)
|
||||||
{
|
{
|
||||||
struct aty128fb_par *par = data;
|
struct aty128fb_par *par = data;
|
||||||
|
|
||||||
if (try_acquire_console_sem())
|
if (try_acquire_console_sem())
|
||||||
return;
|
return;
|
||||||
|
pci_restore_state(par->pdev);
|
||||||
aty128_do_resume(par->pdev);
|
aty128_do_resume(par->pdev);
|
||||||
release_console_sem();
|
release_console_sem();
|
||||||
}
|
}
|
||||||
@ -1907,7 +1908,14 @@ static int __devinit aty128_init(struct pci_dev *pdev, const struct pci_device_i
|
|||||||
/* Indicate sleep capability */
|
/* Indicate sleep capability */
|
||||||
if (par->chip_gen == rage_M3) {
|
if (par->chip_gen == rage_M3) {
|
||||||
pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, NULL, 0, 1);
|
pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, NULL, 0, 1);
|
||||||
|
#if 0 /* Disable the early video resume hack for now as it's causing problems, among
|
||||||
|
* others we now rely on the PCI core restoring the config space for us, which
|
||||||
|
* isn't the case with that hack, and that code path causes various things to
|
||||||
|
* be called with interrupts off while they shouldn't. I'm leaving the code in
|
||||||
|
* as it can be useful for debugging purposes
|
||||||
|
*/
|
||||||
pmac_set_early_video_resume(aty128_early_resume, par);
|
pmac_set_early_video_resume(aty128_early_resume, par);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find default mode */
|
/* Find default mode */
|
||||||
|
@ -2762,12 +2762,13 @@ int radeonfb_pci_resume(struct pci_dev *pdev)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PPC_OF
|
#ifdef CONFIG_PPC_OF__disabled
|
||||||
static void radeonfb_early_resume(void *data)
|
static void radeonfb_early_resume(void *data)
|
||||||
{
|
{
|
||||||
struct radeonfb_info *rinfo = data;
|
struct radeonfb_info *rinfo = data;
|
||||||
|
|
||||||
rinfo->no_schedule = 1;
|
rinfo->no_schedule = 1;
|
||||||
|
pci_restore_state(rinfo->pdev);
|
||||||
radeonfb_pci_resume(rinfo->pdev);
|
radeonfb_pci_resume(rinfo->pdev);
|
||||||
rinfo->no_schedule = 0;
|
rinfo->no_schedule = 0;
|
||||||
}
|
}
|
||||||
@ -2834,7 +2835,14 @@ void radeonfb_pm_init(struct radeonfb_info *rinfo, int dynclk, int ignore_devlis
|
|||||||
*/
|
*/
|
||||||
if (rinfo->pm_mode != radeon_pm_none) {
|
if (rinfo->pm_mode != radeon_pm_none) {
|
||||||
pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, rinfo->of_node, 0, 1);
|
pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, rinfo->of_node, 0, 1);
|
||||||
|
#if 0 /* Disable the early video resume hack for now as it's causing problems, among
|
||||||
|
* others we now rely on the PCI core restoring the config space for us, which
|
||||||
|
* isn't the case with that hack, and that code path causes various things to
|
||||||
|
* be called with interrupts off while they shouldn't. I'm leaving the code in
|
||||||
|
* as it can be useful for debugging purposes
|
||||||
|
*/
|
||||||
pmac_set_early_video_resume(radeonfb_early_resume, rinfo);
|
pmac_set_early_video_resume(radeonfb_early_resume, rinfo);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
Loading…
Reference in New Issue
Block a user