| @@ -528,31 +528,33 @@ int i915_suspend(struct drm_device *dev, | | | @@ -528,31 +528,33 @@ int i915_suspend(struct drm_device *dev, |
528 | } | | 528 | } |
529 | | | 529 | |
530 | if (state.event == PM_EVENT_PRETHAW) | | 530 | if (state.event == PM_EVENT_PRETHAW) |
531 | return 0; | | 531 | return 0; |
532 | | | 532 | |
533 | | | 533 | |
534 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) | | 534 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) |
535 | return 0; | | 535 | return 0; |
536 | | | 536 | |
537 | error = i915_drm_freeze(dev); | | 537 | error = i915_drm_freeze(dev); |
538 | if (error) | | 538 | if (error) |
539 | return error; | | 539 | return error; |
540 | | | 540 | |
| | | 541 | #ifndef __NetBSD__ /* pmf handles this for us. */ |
541 | if (state.event == PM_EVENT_SUSPEND) { | | 542 | if (state.event == PM_EVENT_SUSPEND) { |
542 | /* Shut down the device */ | | 543 | /* Shut down the device */ |
543 | pci_disable_device(dev->pdev); | | 544 | pci_disable_device(dev->pdev); |
544 | pci_set_power_state(dev->pdev, PCI_D3hot); | | 545 | pci_set_power_state(dev->pdev, PCI_D3hot); |
545 | } | | 546 | } |
| | | 547 | #endif |
546 | | | 548 | |
547 | return 0; | | 549 | return 0; |
548 | } | | 550 | } |
549 | | | 551 | |
550 | #ifndef __NetBSD__ /* XXX fb */ | | 552 | #ifndef __NetBSD__ /* XXX fb */ |
551 | void intel_console_resume(struct work_struct *work) | | 553 | void intel_console_resume(struct work_struct *work) |
552 | { | | 554 | { |
553 | struct drm_i915_private *dev_priv = | | 555 | struct drm_i915_private *dev_priv = |
554 | container_of(work, struct drm_i915_private, | | 556 | container_of(work, struct drm_i915_private, |
555 | console_resume_work); | | 557 | console_resume_work); |
556 | struct drm_device *dev = dev_priv->dev; | | 558 | struct drm_device *dev = dev_priv->dev; |
557 | | | 559 | |
558 | console_lock(); | | 560 | console_lock(); |
| @@ -620,28 +622,30 @@ static int i915_drm_thaw(struct drm_devi | | | @@ -620,28 +622,30 @@ static int i915_drm_thaw(struct drm_devi |
620 | __i915_drm_thaw(dev); | | 622 | __i915_drm_thaw(dev); |
621 | | | 623 | |
622 | return error; | | 624 | return error; |
623 | } | | 625 | } |
624 | | | 626 | |
625 | int i915_resume(struct drm_device *dev) | | 627 | int i915_resume(struct drm_device *dev) |
626 | { | | 628 | { |
627 | struct drm_i915_private *dev_priv = dev->dev_private; | | 629 | struct drm_i915_private *dev_priv = dev->dev_private; |
628 | int ret; | | 630 | int ret; |
629 | | | 631 | |
630 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) | | 632 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) |
631 | return 0; | | 633 | return 0; |
632 | | | 634 | |
| | | 635 | #ifndef __NetBSD__ /* pmf handles this for us. */ |
633 | if (pci_enable_device(dev->pdev)) | | 636 | if (pci_enable_device(dev->pdev)) |
634 | return -EIO; | | 637 | return -EIO; |
| | | 638 | #endif |
635 | | | 639 | |
636 | pci_set_master(dev->pdev); | | 640 | pci_set_master(dev->pdev); |
637 | | | 641 | |
638 | intel_gt_reset(dev); | | 642 | intel_gt_reset(dev); |
639 | | | 643 | |
640 | /* | | 644 | /* |
641 | * Platforms with opregion should have sane BIOS, older ones (gen3 and | | 645 | * Platforms with opregion should have sane BIOS, older ones (gen3 and |
642 | * earlier) need this since the BIOS might clear all our scratch PTEs. | | 646 | * earlier) need this since the BIOS might clear all our scratch PTEs. |
643 | */ | | 647 | */ |
644 | if (drm_core_check_feature(dev, DRIVER_MODESET) && | | 648 | if (drm_core_check_feature(dev, DRIVER_MODESET) && |
645 | !dev_priv->opregion.header) { | | 649 | !dev_priv->opregion.header) { |
646 | mutex_lock(&dev->struct_mutex); | | 650 | mutex_lock(&dev->struct_mutex); |
647 | i915_gem_restore_gtt_mappings(dev); | | 651 | i915_gem_restore_gtt_mappings(dev); |
| @@ -946,28 +950,30 @@ static int i915_pm_suspend(struct device | | | @@ -946,28 +950,30 @@ static int i915_pm_suspend(struct device |
946 | | | 950 | |
947 | if (!drm_dev || !drm_dev->dev_private) { | | 951 | if (!drm_dev || !drm_dev->dev_private) { |
948 | dev_err(dev, "DRM not initialized, aborting suspend.\n"); | | 952 | dev_err(dev, "DRM not initialized, aborting suspend.\n"); |
949 | return -ENODEV; | | 953 | return -ENODEV; |
950 | } | | 954 | } |
951 | | | 955 | |
952 | if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF) | | 956 | if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF) |
953 | return 0; | | 957 | return 0; |
954 | | | 958 | |
955 | error = i915_drm_freeze(drm_dev); | | 959 | error = i915_drm_freeze(drm_dev); |
956 | if (error) | | 960 | if (error) |
957 | return error; | | 961 | return error; |
958 | | | 962 | |
| | | 963 | #ifndef __NetBSD__ /* pmf handles this for us. */ |
959 | pci_disable_device(pdev); | | 964 | pci_disable_device(pdev); |
960 | pci_set_power_state(pdev, PCI_D3hot); | | 965 | pci_set_power_state(pdev, PCI_D3hot); |
| | | 966 | #endif |
961 | | | 967 | |
962 | return 0; | | 968 | return 0; |
963 | } | | 969 | } |
964 | | | 970 | |
965 | static int i915_pm_resume(struct device *dev) | | 971 | static int i915_pm_resume(struct device *dev) |
966 | { | | 972 | { |
967 | struct pci_dev *pdev = to_pci_dev(dev); | | 973 | struct pci_dev *pdev = to_pci_dev(dev); |
968 | struct drm_device *drm_dev = pci_get_drvdata(pdev); | | 974 | struct drm_device *drm_dev = pci_get_drvdata(pdev); |
969 | | | 975 | |
970 | return i915_resume(drm_dev); | | 976 | return i915_resume(drm_dev); |
971 | } | | 977 | } |
972 | | | 978 | |
973 | static int i915_pm_freeze(struct device *dev) | | 979 | static int i915_pm_freeze(struct device *dev) |