• Hans de Goede's avatar
    drm/gma500: Fix (vblank) IRQs not working after suspend/resume · 235fdbc3
    Hans de Goede authored
    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: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarPatrik Jakobsson <patrik.r.jakobsson@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220906203852.527663-4-hdegoede@redhat.com
    235fdbc3
psb_irq.c 12.9 KB