Lines Matching +full:rpm +full:- +full:requests

1 /* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
120 * requests (and thus managing bo) once the task has been completed in i915_workqueues_init()
122 * need high-priority retirement, such as waiting for an explicit in i915_workqueues_init()
125 * It is also used for periodic low-priority events, such as in i915_workqueues_init()
126 * idle-timers and recording error state. in i915_workqueues_init()
132 dev_priv->wq = alloc_ordered_workqueue("i915", 0); in i915_workqueues_init()
133 if (dev_priv->wq == NULL) in i915_workqueues_init()
136 dev_priv->display.hotplug.dp_wq = alloc_ordered_workqueue("i915-dp", 0); in i915_workqueues_init()
137 if (dev_priv->display.hotplug.dp_wq == NULL) in i915_workqueues_init()
146 dev_priv->unordered_wq = alloc_workqueue("i915-unordered", 0, 0); in i915_workqueues_init()
147 if (dev_priv->unordered_wq == NULL) in i915_workqueues_init()
153 destroy_workqueue(dev_priv->display.hotplug.dp_wq); in i915_workqueues_init()
155 destroy_workqueue(dev_priv->wq); in i915_workqueues_init()
157 drm_err(&dev_priv->drm, "Failed to allocate workqueues.\n"); in i915_workqueues_init()
159 return -ENOMEM; in i915_workqueues_init()
164 destroy_workqueue(dev_priv->unordered_wq); in i915_workqueues_cleanup()
165 destroy_workqueue(dev_priv->display.hotplug.dp_wq); in i915_workqueues_cleanup()
166 destroy_workqueue(dev_priv->wq); in i915_workqueues_cleanup()
170 * We don't keep the workarounds for pre-production hardware, so we expect our
174 * Our policy for removing pre-production workarounds is to keep the
175 * current gen workarounds as a guide to the bring-up of the next gen
196 drm_err(&dev_priv->drm, "This is a pre-production stepping. " in intel_detect_preproduction_hw()
204 if (!INTEL_INFO(i915)->gpu_reset_clobbers_display) { in sanitize_gpu()
214 * i915_driver_early_probe - setup state not requiring device access
217 * Initialize everything that is a "SW-only" state, that is state not
225 struct intel_display *display = &dev_priv->display; in i915_driver_early_probe()
229 return -ENODEV; in i915_driver_early_probe()
237 spin_lock_init(&dev_priv->irq_lock); in i915_driver_early_probe()
238 spin_lock_init(&dev_priv->gpu_error.lock); in i915_driver_early_probe()
242 mutex_init(&dev_priv->sb_lock); in i915_driver_early_probe()
245 intel_runtime_pm_init_early(&dev_priv->runtime_pm); in i915_driver_early_probe()
286 * i915_driver_late_release - cleanup the setup done in
292 struct intel_display *display = &dev_priv->display; in i915_driver_late_release()
302 mutex_destroy(&dev_priv->sb_lock); in i915_driver_late_release()
306 i915_params_free(&dev_priv->params); in i915_driver_late_release()
310 * i915_driver_mmio_probe - setup device MMIO
314 * initialization sequence. The setup here should avoid any other device-wide
320 struct intel_display *display = &dev_priv->display; in i915_driver_mmio_probe()
325 return -ENODEV; in i915_driver_mmio_probe()
332 ret = intel_uncore_init_mmio(gt->uncore); in i915_driver_mmio_probe()
336 ret = drmm_add_action_or_reset(&dev_priv->drm, in i915_driver_mmio_probe()
338 gt->uncore); in i915_driver_mmio_probe()
366 * i915_driver_mmio_release - cleanup the setup done in i915_driver_mmio_probe()
375 * i915_set_dma_info - set all relevant PCI dma info as configured for the
387 unsigned int mask_size = INTEL_INFO(i915)->dma_mask_size; in i915_set_dma_info()
396 dma_set_max_seg_size(i915->drm.dev, UINT_MAX); in i915_set_dma_info()
398 ret = dma_set_mask(i915->drm.dev, DMA_BIT_MASK(mask_size)); in i915_set_dma_info()
418 ret = dma_set_coherent_mask(i915->drm.dev, DMA_BIT_MASK(mask_size)); in i915_set_dma_info()
425 drm_err(&i915->drm, "Can't set DMA mask/consistent mask (%d)\n", ret); in i915_set_dma_info()
436 snb_pcode_write_p(&i915->uncore, PCODE_POWER_SETUP, in i915_enable_g8()
447 ret = intel_pcode_init(gt->uncore); in i915_pcode_init()
459 * i915_driver_hw_probe - setup state requiring device access
467 struct intel_display *display = &dev_priv->display; in i915_driver_hw_probe()
468 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in i915_driver_hw_probe()
472 return -ENODEV; in i915_driver_hw_probe()
477 drm_err(&dev_priv->drm, in i915_driver_hw_probe()
479 return -ENXIO; in i915_driver_hw_probe()
491 drm_err(&dev_priv->drm, in i915_driver_hw_probe()
493 return -ENXIO; in i915_driver_hw_probe()
512 ret = aperture_remove_conflicting_pci_devices(pdev, dev_priv->drm.driver->name); in i915_driver_hw_probe()
521 * Make sure we probe lmem before we probe stolen-lmem. The BAR size in i915_driver_hw_probe()
534 drm_err(&dev_priv->drm, "failed to enable GGTT\n"); in i915_driver_hw_probe()
551 * pre-gen5 chipsets. in i915_driver_hw_probe()
561 drm_dbg(&dev_priv->drm, "can't enable MSI"); in i915_driver_hw_probe()
587 if (pdev->msi_enabled) in i915_driver_hw_probe()
601 * i915_driver_hw_remove - cleanup the setup done in i915_driver_hw_probe()
606 struct intel_display *display = &dev_priv->display; in i915_driver_hw_remove()
607 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in i915_driver_hw_remove()
613 if (pdev->msi_enabled) in i915_driver_hw_remove()
618 * i915_driver_register - register the driver with the rest of the system
626 struct intel_display *display = &dev_priv->display; in i915_driver_register()
636 if (drm_dev_register(&dev_priv->drm, 0)) { in i915_driver_register()
637 drm_err(&dev_priv->drm, in i915_driver_register()
651 intel_pxp_debugfs_register(dev_priv->pxp); in i915_driver_register()
658 intel_runtime_pm_enable(&dev_priv->runtime_pm); in i915_driver_register()
663 drm_err(&dev_priv->drm, "Failed to register vga switcheroo!\n"); in i915_driver_register()
667 * i915_driver_unregister - cleanup the registration done in i915_driver_regiser()
672 struct intel_display *display = &dev_priv->display; in i915_driver_unregister()
680 intel_runtime_pm_disable(&dev_priv->runtime_pm); in i915_driver_unregister()
696 drm_dev_unplug(&dev_priv->drm); in i915_driver_unregister()
711 struct drm_printer p = drm_dbg_printer(&dev_priv->drm, DRM_UT_DRIVER, in i915_welcome_messages()
719 intel_platform_name(INTEL_INFO(dev_priv)->platform), in i915_welcome_messages()
721 INTEL_INFO(dev_priv)->platform), in i915_welcome_messages()
728 intel_gt_info_print(&gt->info, &p); in i915_welcome_messages()
732 drm_info(&dev_priv->drm, "DRM_I915_DEBUG enabled\n"); in i915_welcome_messages()
734 drm_info(&dev_priv->drm, "DRM_I915_DEBUG_GEM enabled\n"); in i915_welcome_messages()
736 drm_info(&dev_priv->drm, in i915_welcome_messages()
744 (struct intel_device_info *)ent->driver_data; in i915_driver_create()
747 i915 = devm_drm_dev_alloc(&pdev->dev, &i915_drm_driver, in i915_driver_create()
752 pci_set_drvdata(pdev, &i915->drm); in i915_driver_create()
755 i915_params_copy(&i915->params, &i915_modparams); in i915_driver_create()
758 intel_device_info_driver_create(i915, pdev->device, match_info); in i915_driver_create()
766 * i915_driver_probe - setup chip and create an initial config
771 * - drive output discovery via intel_display_driver_probe()
772 * - initialize the memory manager
773 * - allocate initial config memory
774 * - setup the DRM framebuffer with the allocated memory
794 display = &i915->display; in i915_driver_probe()
800 disable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_probe()
833 if (ret && ret != -ENODEV) in i915_driver_probe()
834 drm_dbg(&i915->drm, "pxp init failed with %d\n", ret); in i915_driver_probe()
842 enable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_probe()
846 i915->do_release = true; in i915_driver_probe()
873 enable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_probe()
883 struct intel_display *display = &i915->display; in i915_driver_remove()
886 wakeref = intel_runtime_pm_get(&i915->runtime_pm); in i915_driver_remove()
910 intel_runtime_pm_put(&i915->runtime_pm, wakeref); in i915_driver_remove()
916 struct intel_display *display = &dev_priv->display; in i915_driver_release()
917 struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; in i915_driver_release() local
920 if (!dev_priv->do_release) in i915_driver_release()
923 wakeref = intel_runtime_pm_get(rpm); in i915_driver_release()
934 intel_runtime_pm_put(rpm, wakeref); in i915_driver_release()
936 intel_runtime_pm_driver_release(rpm); in i915_driver_release()
957 struct drm_i915_file_private *file_priv = file->driver_priv; in i915_driver_postclose()
960 i915_drm_client_put(file_priv->client); in i915_driver_postclose()
970 struct intel_display *display = &i915->display; in i915_driver_shutdown()
972 disable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_shutdown()
973 intel_runtime_pm_disable(&i915->runtime_pm); in i915_driver_shutdown()
976 intel_fbdev_set_suspend(&i915->drm, FBINFO_STATE_SUSPENDED, true); in i915_driver_shutdown()
978 drm_kms_helper_poll_disable(&i915->drm); in i915_driver_shutdown()
981 drm_atomic_helper_shutdown(&i915->drm); in i915_driver_shutdown()
992 intel_encoder_suspend_all(&i915->display); in i915_driver_shutdown()
993 intel_encoder_shutdown_all(&i915->display); in i915_driver_shutdown()
995 intel_dmc_suspend(&i915->display); in i915_driver_shutdown()
1005 * - unify the pci_driver::shutdown sequence here with the in i915_driver_shutdown()
1007 * - unify the driver remove and system/runtime suspend sequences with in i915_driver_shutdown()
1011 enable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_shutdown()
1013 intel_runtime_pm_driver_last_release(&i915->runtime_pm); in i915_driver_shutdown()
1029 intel_pxp_resume_complete(i915->pxp); in i915_drm_complete()
1036 intel_pxp_suspend_prepare(i915->pxp); in i915_drm_prepare()
1039 * NB intel_display_driver_suspend() may issue new requests after we've in i915_drm_prepare()
1040 * ostensibly marked the GPU as ready-to-sleep here. We need to in i915_drm_prepare()
1050 struct intel_display *display = &dev_priv->display; in i915_drm_suspend()
1051 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in i915_drm_suspend()
1054 disable_rpm_wakeref_asserts(&dev_priv->runtime_pm); in i915_drm_suspend()
1075 intel_encoder_suspend_all(&dev_priv->display); in i915_drm_suspend()
1079 i915_ggtt_suspend(to_gt(dev_priv)->ggtt); in i915_drm_suspend()
1086 dev_priv->suspend_count++; in i915_drm_suspend()
1090 enable_rpm_wakeref_asserts(&dev_priv->runtime_pm); in i915_drm_suspend()
1100 struct intel_display *display = &dev_priv->display; in i915_drm_suspend_late()
1101 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in i915_drm_suspend_late()
1102 struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; in i915_drm_suspend_late() local
1107 disable_rpm_wakeref_asserts(rpm); in i915_drm_suspend_late()
1109 intel_pxp_suspend(dev_priv->pxp); in i915_drm_suspend_late()
1114 intel_uncore_suspend(gt->uncore); in i915_drm_suspend_late()
1120 drm_err(&dev_priv->drm, "Suspend complete failed: %d\n", ret); in i915_drm_suspend_late()
1143 enable_rpm_wakeref_asserts(rpm); in i915_drm_suspend_late()
1144 if (!dev_priv->uncore.user_forcewake_count) in i915_drm_suspend_late()
1145 intel_runtime_pm_driver_release(rpm); in i915_drm_suspend_late()
1155 if (drm_WARN_ON_ONCE(&i915->drm, state.event != PM_EVENT_SUSPEND && in i915_driver_suspend_switcheroo()
1157 return -EINVAL; in i915_driver_suspend_switcheroo()
1159 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_driver_suspend_switcheroo()
1162 error = i915_drm_suspend(&i915->drm); in i915_driver_suspend_switcheroo()
1166 return i915_drm_suspend_late(&i915->drm, false); in i915_driver_suspend_switcheroo()
1172 struct intel_display *display = &dev_priv->display; in i915_drm_resume()
1176 disable_rpm_wakeref_asserts(&dev_priv->runtime_pm); in i915_drm_resume()
1186 drm_err(&dev_priv->drm, "failed to re-enable GGTT\n"); in i915_drm_resume()
1188 i915_ggtt_resume(to_gt(dev_priv)->ggtt); in i915_drm_resume()
1191 if (GRAPHICS_VER(gt->i915) >= 8) in i915_drm_resume()
1251 enable_rpm_wakeref_asserts(&dev_priv->runtime_pm); in i915_drm_resume()
1259 struct intel_display *display = &dev_priv->display; in i915_drm_resume_early()
1260 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in i915_drm_resume_early()
1265 * We have a resume ordering issue with the snd-hda driver also in i915_drm_resume_early()
1286 drm_err(&dev_priv->drm, in i915_drm_resume_early()
1305 return -EIO; in i915_drm_resume_early()
1309 disable_rpm_wakeref_asserts(&dev_priv->runtime_pm); in i915_drm_resume_early()
1313 drm_err(&dev_priv->drm, in i915_drm_resume_early()
1321 enable_rpm_wakeref_asserts(&dev_priv->runtime_pm); in i915_drm_resume_early()
1330 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_driver_resume_switcheroo()
1333 ret = i915_drm_resume_early(&i915->drm); in i915_driver_resume_switcheroo()
1337 return i915_drm_resume(&i915->drm); in i915_driver_resume_switcheroo()
1346 return -ENODEV; in i915_pm_prepare()
1349 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_prepare()
1352 return i915_drm_prepare(&i915->drm); in i915_pm_prepare()
1361 return -ENODEV; in i915_pm_suspend()
1364 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_suspend()
1367 return i915_drm_suspend(&i915->drm); in i915_pm_suspend()
1375 * We have a suspend ordering issue with the snd-hda driver also in i915_pm_suspend_late()
1383 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_suspend_late()
1386 return i915_drm_suspend_late(&i915->drm, false); in i915_pm_suspend_late()
1393 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_poweroff_late()
1396 return i915_drm_suspend_late(&i915->drm, true); in i915_pm_poweroff_late()
1403 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_resume_early()
1406 return i915_drm_resume_early(&i915->drm); in i915_pm_resume_early()
1413 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_resume()
1416 return i915_drm_resume(&i915->drm); in i915_pm_resume()
1423 if (i915->drm.switch_power_state == DRM_SWITCH_POWER_OFF) in i915_pm_complete()
1426 i915_drm_complete(&i915->drm); in i915_pm_complete()
1435 if (i915->drm.switch_power_state != DRM_SWITCH_POWER_OFF) { in i915_pm_freeze()
1436 ret = i915_drm_suspend(&i915->drm); in i915_pm_freeze()
1453 if (i915->drm.switch_power_state != DRM_SWITCH_POWER_OFF) { in i915_pm_freeze_late()
1454 ret = i915_drm_suspend_late(&i915->drm, true); in i915_pm_freeze_late()
1491 struct intel_display *display = &dev_priv->display; in intel_runtime_suspend()
1492 struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; in intel_runtime_suspend() local
1493 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in intel_runtime_suspend()
1498 if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv))) in intel_runtime_suspend()
1499 return -ENODEV; in intel_runtime_suspend()
1501 drm_dbg(&dev_priv->drm, "Suspending device\n"); in intel_runtime_suspend()
1503 disable_rpm_wakeref_asserts(rpm); in intel_runtime_suspend()
1506 * We are safe here against re-faults, since the fault handler takes in intel_runtime_suspend()
1507 * an RPM reference. in intel_runtime_suspend()
1511 intel_pxp_runtime_suspend(dev_priv->pxp); in intel_runtime_suspend()
1519 intel_uncore_suspend(gt->uncore); in intel_runtime_suspend()
1525 drm_err(&dev_priv->drm, in intel_runtime_suspend()
1527 intel_uncore_runtime_resume(&dev_priv->uncore); in intel_runtime_suspend()
1534 enable_rpm_wakeref_asserts(rpm); in intel_runtime_suspend()
1539 enable_rpm_wakeref_asserts(rpm); in intel_runtime_suspend()
1540 intel_runtime_pm_driver_release(rpm); in intel_runtime_suspend()
1542 if (intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore)) in intel_runtime_suspend()
1543 drm_err(&dev_priv->drm, in intel_runtime_suspend()
1578 assert_forcewakes_inactive(&dev_priv->uncore); in intel_runtime_suspend()
1583 drm_dbg(&dev_priv->drm, "Device suspended\n"); in intel_runtime_suspend()
1590 struct intel_display *display = &dev_priv->display; in intel_runtime_resume()
1591 struct intel_runtime_pm *rpm = &dev_priv->runtime_pm; in intel_runtime_resume() local
1592 struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev); in intel_runtime_resume()
1597 if (drm_WARN_ON_ONCE(&dev_priv->drm, !HAS_RUNTIME_PM(dev_priv))) in intel_runtime_resume()
1598 return -ENODEV; in intel_runtime_resume()
1600 drm_dbg(&dev_priv->drm, "Resuming device\n"); in intel_runtime_resume()
1602 drm_WARN_ON_ONCE(&dev_priv->drm, atomic_read(&rpm->wakeref_count)); in intel_runtime_resume()
1603 disable_rpm_wakeref_asserts(rpm); in intel_runtime_resume()
1611 if (intel_uncore_unclaimed_mmio(&dev_priv->uncore)) in intel_runtime_resume()
1612 drm_dbg(&dev_priv->drm, in intel_runtime_resume()
1620 intel_uncore_runtime_resume(gt->uncore); in intel_runtime_resume()
1626 * we can do is to hope that things will still work (and disable RPM). in intel_runtime_resume()
1631 intel_pxp_runtime_resume(dev_priv->pxp); in intel_runtime_resume()
1645 enable_rpm_wakeref_asserts(rpm); in intel_runtime_resume()
1648 drm_err(&dev_priv->drm, in intel_runtime_resume()
1651 drm_dbg(&dev_priv->drm, "Device resumed\n"); in intel_runtime_resume()
1717 return -ENODEV; in i915_gem_reject_pin_ioctl()
1790 * 1.6: - New ioctl for scheduling buffer swaps on vertical blank
1791 * - Support vertical blank on secondary display pipe