/** * amdgpu_irq_init - init driver interrupt info * * @adev: amdgpu device pointer * * Sets up the work irq handlers, vblank init, MSIs, etc. (all asics). * Returns 0 for success, error for failure. */ int amdgpu_irq_init(struct amdgpu_device *adev) { int r = 0; spin_lock_init(&adev->irq.lock); r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc); if (r) { return r; } /* enable msi */ adev->irq.msi_enabled = false; if (amdgpu_msi_ok(adev)) { int ret = pci_enable_msi(adev->pdev); if (!ret) { adev->irq.msi_enabled = true; dev_info(adev->dev, "amdgpu: using MSI.\n"); } } INIT_WORK(&adev->hotplug_work, amdgpu_hotplug_work_func); INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func); adev->irq.installed = true; r = drm_irq_install(adev->ddev, adev->ddev->pdev->irq); if (r) { adev->irq.installed = false; flush_work(&adev->hotplug_work); return r; } DRM_INFO("amdgpu: irq initialized.\n"); return 0; }
/** * amdgpu_irq_init - init driver interrupt info * * @adev: amdgpu device pointer * * Sets up the work irq handlers, vblank init, MSIs, etc. (all asics). * Returns 0 for success, error for failure. */ int amdgpu_irq_init(struct amdgpu_device *adev) { int r = 0; spin_lock_init(&adev->irq.lock); /* enable msi */ adev->irq.msi_enabled = false; if (amdgpu_msi_ok(adev)) { int ret = pci_enable_msi(adev->pdev); if (!ret) { adev->irq.msi_enabled = true; dev_info(adev->dev, "amdgpu: using MSI.\n"); } } if (!amdgpu_device_has_dc_support(adev)) { if (!adev->enable_virtual_display) /* Disable vblank irqs aggressively for power-saving */ /* XXX: can this be enabled for DC? */ adev->ddev->vblank_disable_immediate = true; r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc); if (r) return r; /* pre DCE11 */ INIT_WORK(&adev->hotplug_work, amdgpu_hotplug_work_func); } INIT_WORK(&adev->reset_work, amdgpu_irq_reset_work_func); adev->irq.installed = true; r = drm_irq_install(adev->ddev, adev->ddev->pdev->irq); if (r) { adev->irq.installed = false; flush_work(&adev->hotplug_work); cancel_work_sync(&adev->reset_work); return r; } DRM_INFO("amdgpu: irq initialized.\n"); return 0; }