linux/drivers/gpu/drm/gma500
Hans de Goede 235fdbc32d drm/gma500: Fix (vblank) IRQs not working after suspend/resume
Fix gnome-shell (and other page-flip users) hanging after suspend/resume
because of the gma500's IRQs not working.

This fixes 2 problems with the IRQ handling:

1. gma_power_off() calls gma_irq_uninstall() which does a free_irq(), but
   gma_power_on() called gma_irq_preinstall() + gma_irq_postinstall() which
   do not call request_irq. Replace the pre- + post-install calls with
   gma_irq_install() which does prep + request + post.

2. After fixing 1. IRQs still do not work on a Packard Bell Dot SC (Intel
   Atom N2600, cedarview) netbook.

   Cederview uses MSI interrupts and it seems that the BIOS re-configures
   things back to normal APIC based interrupts during S3 suspend. There is
   some MSI PCI-config registers save/restore code which tries to deal with
   this, but on the Packard Bell Dot SC this is not sufficient to restore
   MSI IRQ functionality after a suspend/resume.

   Replace the PCI-config registers save/restore with pci_disable_msi() on
   suspend + pci_enable_msi() on resume. Fixing e.g. gnome-shell hanging.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220906203852.527663-4-hdegoede@redhat.com
2022-09-09 14:04:30 +02:00
..
Kconfig drm/gma500: Remove dependency on TTM 2021-02-09 17:14:12 +01:00
Makefile drm/gma500: Drop DRM_GMA3600 config option 2021-02-09 17:14:11 +01:00
backlight.c drm/gma500: Replace references to dev_private with helper function 2021-09-23 09:40:20 +02:00
cdv_device.c drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
cdv_device.h drm/gma500: Unify crtc helpers 2021-02-09 13:07:41 +01:00
cdv_intel_crt.c drm/gma500: Make cdv crt use ddc adapter from drm_connector 2022-06-02 10:06:43 +02:00
cdv_intel_display.c drm/gma500: Make use of the drm connector iterator 2022-03-23 11:20:22 +01:00
cdv_intel_dp.c drm: Drop drm_edid.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
cdv_intel_hdmi.c drm/gma500: Make cdv hdmi use ddc adapter from drm_connector 2022-06-02 10:06:34 +02:00
cdv_intel_lvds.c drm/gma500: Read EDID from the correct i2c adapter 2022-06-02 10:06:51 +02:00
framebuffer.c drm: Drop drm_framebuffer.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
framebuffer.h
gem.c drm/gma500: Fix WARN_ON(lock->magic != lock) error 2022-09-09 14:04:29 +02:00
gem.h drm/gma500: Move GEM memory management functions to gem.c 2022-03-16 17:42:23 +01:00
gma_device.c drm/gma500: Replace references to dev_private with helper function 2021-09-23 09:40:20 +02:00
gma_device.h
gma_display.c drm/gma500: Fix BUG: sleeping function called from invalid context errors 2022-09-09 14:04:29 +02:00
gma_display.h drm/gma500: Move gma_intel_crtc_funcs into gma_display.c 2022-03-17 15:49:10 +01:00
gtt.c drm/gma500: Move GTT memory-range setup into helper 2022-03-16 17:42:24 +01:00
gtt.h drm/gma500: Move GEM memory management functions to gem.c 2022-03-16 17:42:23 +01:00
intel_bios.c drm: Rename dp/ to display/ 2022-04-25 11:17:45 +02:00
intel_bios.h
intel_gmbus.c drm/gma500: Embed struct drm_device in struct drm_psb_private 2021-09-23 09:40:39 +02:00
intel_i2c.c drm/gma500: Make gma_i2c_chan a subclass of i2c_adapter 2022-06-02 10:06:21 +02:00
mid_bios.c drm/gma500: Embed struct drm_device in struct drm_psb_private 2021-09-23 09:40:39 +02:00
mid_bios.h
mmu.c drm/gma: Remove calls to kmap() 2022-01-24 17:02:43 +01:00
mmu.h
oaktrail.h
oaktrail_crtc.c drm: Drop drm_framebuffer.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
oaktrail_device.c drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
oaktrail_hdmi.c drm: Drop drm_edid.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
oaktrail_hdmi_i2c.c
oaktrail_lvds.c drm: Drop drm_edid.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
oaktrail_lvds_i2c.c drm/gma500: Make oaktrail lvds use ddc adapter from drm_connector 2022-06-02 10:06:47 +02:00
opregion.c drm/gma500: Cosmetic cleanup of irq code 2022-03-17 15:49:20 +01:00
opregion.h
power.c drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
power.h
psb_device.c drm/gma500: Make use of the drm connector iterator 2022-03-23 11:20:22 +01:00
psb_device.h
psb_drv.c drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
psb_drv.h drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
psb_intel_display.c drm/gma500: fix a missing break in psb_intel_crtc_mode_set 2022-04-06 09:38:11 +02:00
psb_intel_drv.h drm/gma500: Make oaktrail lvds use ddc adapter from drm_connector 2022-06-02 10:06:47 +02:00
psb_intel_lvds.c drm/gma500: Read EDID from the correct i2c adapter 2022-06-02 10:06:51 +02:00
psb_intel_modes.c drm: Drop drm_edid.h from drm_crtc.h 2022-06-20 23:53:55 +03:00
psb_intel_reg.h drm/gma500: Remove Medfield support 2021-02-09 17:14:11 +01:00
psb_intel_sdvo.c drm/gma500: Free the correct connector allocation 2022-03-23 11:20:45 +01:00
psb_intel_sdvo_regs.h
psb_irq.c drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
psb_irq.h drm/gma500: Fix (vblank) IRQs not working after suspend/resume 2022-09-09 14:04:30 +02:00
psb_lid.c drm/gma500: Embed struct drm_device in struct drm_psb_private 2021-09-23 09:40:39 +02:00
psb_reg.h drm/gma500: Remove Medfield support 2021-02-09 17:14:11 +01:00