Lines Matching full:i915
1 /* i915_drv.c -- i830,i845,i855,i865,i915 driver -*- linux-c -*-
119 * The i915 workqueue is primarily used for batched retirement of in i915_workqueues_init()
132 dev_priv->wq = alloc_ordered_workqueue("i915", 0); in i915_workqueues_init()
136 dev_priv->display.hotplug.dp_wq = alloc_ordered_workqueue("i915-dp", 0); in i915_workqueues_init()
141 * The unordered i915 workqueue should be used for all work in i915_workqueues_init()
146 dev_priv->unordered_wq = alloc_workqueue("i915-unordered", 0, 0); in i915_workqueues_init()
202 static void sanitize_gpu(struct drm_i915_private *i915) in sanitize_gpu() argument
204 if (!INTEL_INFO(i915)->gpu_reset_clobbers_display) { in sanitize_gpu()
208 for_each_gt(gt, i915, i) in sanitize_gpu()
377 * @i915: valid i915 instance
385 static int i915_set_dma_info(struct drm_i915_private *i915) in i915_set_dma_info() argument
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()
403 if (GRAPHICS_VER(i915) == 2) in i915_set_dma_info()
415 if (IS_I965G(i915) || IS_I965GM(i915)) 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()
430 static void i915_enable_g8(struct drm_i915_private *i915) in i915_enable_g8() argument
432 if (IS_DG2(i915)) { in i915_enable_g8()
433 if (IS_DG2_D(i915) && !intel_match_g8_cpu()) in i915_enable_g8()
436 snb_pcode_write_p(&i915->uncore, PCODE_POWER_SETUP, in i915_enable_g8()
441 static int i915_pcode_init(struct drm_i915_private *i915) in i915_pcode_init() argument
446 for_each_gt(gt, i915, id) { in i915_pcode_init()
454 i915_enable_g8(i915); in i915_pcode_init()
702 i915_print_iommu_status(struct drm_i915_private *i915, struct drm_printer *p) in i915_print_iommu_status() argument
705 str_enabled_disabled(i915_vtd_active(i915))); in i915_print_iommu_status()
745 struct drm_i915_private *i915; in i915_driver_create() local
747 i915 = devm_drm_dev_alloc(&pdev->dev, &i915_drm_driver, in i915_driver_create()
749 if (IS_ERR(i915)) in i915_driver_create()
750 return i915; 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()
762 return i915; in i915_driver_create()
778 struct drm_i915_private *i915; in i915_driver_probe() local
788 i915 = i915_driver_create(pdev, ent); in i915_driver_probe()
789 if (IS_ERR(i915)) { in i915_driver_probe()
791 return PTR_ERR(i915); in i915_driver_probe()
794 display = &i915->display; in i915_driver_probe()
796 ret = i915_driver_early_probe(i915); in i915_driver_probe()
800 disable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_probe()
802 intel_vgpu_detect(i915); in i915_driver_probe()
804 ret = intel_gt_probe_all(i915); in i915_driver_probe()
808 ret = i915_driver_mmio_probe(i915); in i915_driver_probe()
812 ret = i915_driver_hw_probe(i915); in i915_driver_probe()
820 ret = intel_irq_install(i915); in i915_driver_probe()
828 ret = i915_gem_init(i915); in i915_driver_probe()
832 ret = intel_pxp_init(i915); in i915_driver_probe()
834 drm_dbg(&i915->drm, "pxp init failed with %d\n", ret); in i915_driver_probe()
840 i915_driver_register(i915); in i915_driver_probe()
842 enable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_probe()
844 i915_welcome_messages(i915); in i915_driver_probe()
846 i915->do_release = true; in i915_driver_probe()
851 i915_gem_suspend(i915); in i915_driver_probe()
852 i915_gem_driver_remove(i915); in i915_driver_probe()
853 i915_gem_driver_release(i915); in i915_driver_probe()
857 intel_irq_uninstall(i915); in i915_driver_probe()
861 intel_irq_uninstall(i915); in i915_driver_probe()
865 i915_driver_hw_remove(i915); in i915_driver_probe()
866 intel_memory_regions_driver_release(i915); in i915_driver_probe()
867 i915_ggtt_driver_release(i915); in i915_driver_probe()
868 i915_gem_drain_freed_objects(i915); in i915_driver_probe()
869 i915_ggtt_driver_late_release(i915); in i915_driver_probe()
871 i915_driver_mmio_release(i915); in i915_driver_probe()
873 enable_rpm_wakeref_asserts(&i915->runtime_pm); in i915_driver_probe()
874 i915_driver_late_release(i915); in i915_driver_probe()
877 i915_probe_error(i915, "Device initialization failed (%d)\n", ret); in i915_driver_probe()
881 void i915_driver_remove(struct drm_i915_private *i915) in i915_driver_remove() argument
883 struct intel_display *display = &i915->display; in i915_driver_remove()
886 wakeref = intel_runtime_pm_get(&i915->runtime_pm); in i915_driver_remove()
888 i915_driver_unregister(i915); in i915_driver_remove()
893 i915_gem_suspend(i915); in i915_driver_remove()
895 intel_gvt_driver_remove(i915); in i915_driver_remove()
899 intel_irq_uninstall(i915); in i915_driver_remove()
903 i915_reset_error_state(i915); in i915_driver_remove()
904 i915_gem_driver_remove(i915); in i915_driver_remove()
908 i915_driver_hw_remove(i915); in i915_driver_remove()
910 intel_runtime_pm_put(&i915->runtime_pm, wakeref); in i915_driver_remove()
945 struct drm_i915_private *i915 = to_i915(dev); in i915_driver_open() local
948 ret = i915_gem_open(i915, file); in i915_driver_open()
968 void i915_driver_shutdown(struct drm_i915_private *i915) in i915_driver_shutdown() argument
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()
977 if (HAS_DISPLAY(i915)) { 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()
986 intel_irq_suspend(i915); in i915_driver_shutdown()
987 intel_hpd_cancel_work(i915); in i915_driver_shutdown()
989 if (HAS_DISPLAY(i915)) 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()
997 i915_gem_suspend(i915); 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()
1027 struct drm_i915_private *i915 = to_i915(dev); in i915_drm_complete() local
1029 intel_pxp_resume_complete(i915->pxp); in i915_drm_complete()
1034 struct drm_i915_private *i915 = to_i915(dev); in i915_drm_prepare() local
1036 intel_pxp_suspend_prepare(i915->pxp); in i915_drm_prepare()
1044 return i915_gem_backup_suspend(i915); in i915_drm_prepare()
1150 int i915_driver_suspend_switcheroo(struct drm_i915_private *i915, in i915_driver_suspend_switcheroo() argument
1155 if (drm_WARN_ON_ONCE(&i915->drm, state.event != PM_EVENT_SUSPEND && 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()
1191 if (GRAPHICS_VER(gt->i915) >= 8) in i915_drm_resume()
1326 int i915_driver_resume_switcheroo(struct drm_i915_private *i915) in i915_driver_resume_switcheroo() argument
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()
1342 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_prepare() local
1344 if (!i915) { 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()
1357 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_suspend() local
1359 if (!i915) { 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()
1372 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_suspend_late() local
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()
1391 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_poweroff_late() local
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()
1401 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_resume_early() local
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()
1411 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_resume() local
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()
1421 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_complete() local
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()
1432 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_freeze() local
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()
1441 ret = i915_gem_freeze(i915); in i915_pm_freeze()
1450 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_pm_freeze_late() local
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()
1459 ret = i915_gem_freeze_late(i915); in i915_pm_freeze_late()