static void dce_virtual_crtc_dpms(struct drm_crtc *crtc, int mode) { struct drm_device *dev = crtc->dev; struct amdgpu_device *adev = dev->dev_private; struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc); unsigned type; if (amdgpu_sriov_vf(adev)) return; switch (mode) { case DRM_MODE_DPMS_ON: amdgpu_crtc->enabled = true; /* Make sure VBLANK interrupts are still enabled */ type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id); amdgpu_irq_update(adev, &adev->crtc_irq, type); drm_crtc_vblank_on(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: drm_crtc_vblank_off(crtc); amdgpu_crtc->enabled = false; break; } }
void amdgpu_irq_gpu_reset_resume_helper(struct amdgpu_device *adev) { int i, j; for (i = 0; i < AMDGPU_MAX_IRQ_SRC_ID; i++) { struct amdgpu_irq_src *src = adev->irq.sources[i]; if (!src) continue; for (j = 0; j < src->num_types; j++) amdgpu_irq_update(adev, src, j); } }
/** * amdgpu_irq_put - disable interrupt * * @adev: amdgpu device pointer * @src: interrupt src you want to disable * @type: type of interrupt you want to disable * * Disables the interrupt type for a specific src (all asics). */ int amdgpu_irq_put(struct amdgpu_device *adev, struct amdgpu_irq_src *src, unsigned type) { if (!adev->ddev->irq_enabled) return -ENOENT; if (type >= src->num_types) return -EINVAL; if (!src->enabled_types || !src->funcs->set) return -EINVAL; if (atomic_dec_and_test(&src->enabled_types[type])) return amdgpu_irq_update(adev, src, type); return 0; }
void amdgpu_irq_gpu_reset_resume_helper(struct amdgpu_device *adev) { int i, j, k; for (i = 0; i < AMDGPU_IH_CLIENTID_MAX; ++i) { if (!adev->irq.client[i].sources) continue; for (j = 0; j < AMDGPU_MAX_IRQ_SRC_ID; ++j) { struct amdgpu_irq_src *src = adev->irq.client[i].sources[j]; if (!src) continue; for (k = 0; k < src->num_types; k++) amdgpu_irq_update(adev, src, k); } } }