Date: Fri, 11 Sep 2015 15:51:21 +0000 (UTC) From: Andriy Gapon <avg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r287673 - head/sys/dev/drm2/radeon Message-ID: <201509111551.t8BFpLOC011754@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: avg Date: Fri Sep 11 15:51:20 2015 New Revision: 287673 URL: https://svnweb.freebsd.org/changeset/base/287673 Log: radeon_suspend_kms: don't mess with pci state that's managed by the bus The pci bus driver handles the power state, it also manages configuration state saving and restoring for its child devices. Thus a PCI device driver does not have to worry about those things. In fact, I observe a hard system hang when trying to suspend a system with active radeonkms driver where both the bus driver and radeonkms driver try to do the same thing. I suspect that it could be because of an access to a PCI configuration register after the device is placed into D3 state. Reviewed by: dumbbell, jhb MFC after: 13 days Differential Revision: https://reviews.freebsd.org/D3561 Modified: head/sys/dev/drm2/radeon/radeon_device.c Modified: head/sys/dev/drm2/radeon/radeon_device.c ============================================================================== --- head/sys/dev/drm2/radeon/radeon_device.c Fri Sep 11 15:37:05 2015 (r287672) +++ head/sys/dev/drm2/radeon/radeon_device.c Fri Sep 11 15:51:20 2015 (r287673) @@ -1342,14 +1342,10 @@ int radeon_suspend_kms(struct drm_device radeon_agp_suspend(rdev); - pci_save_state(device_get_parent(dev->dev)); #ifdef FREEBSD_WIP if (state.event == PM_EVENT_SUSPEND) { /* Shut down the device */ pci_disable_device(dev->pdev); -#endif /* FREEBSD_WIP */ - pci_set_powerstate(dev->dev, PCI_POWERSTATE_D3); -#ifdef FREEBSD_WIP } console_lock(); #endif /* FREEBSD_WIP */ @@ -1380,10 +1376,6 @@ int radeon_resume_kms(struct drm_device #ifdef FREEBSD_WIP console_lock(); -#endif /* FREEBSD_WIP */ - pci_set_powerstate(device_get_parent(dev->dev), PCI_POWERSTATE_D0); - pci_restore_state(device_get_parent(dev->dev)); -#ifdef FREEBSD_WIP if (pci_enable_device(dev->pdev)) { console_unlock(); return -1;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201509111551.t8BFpLOC011754>