• Lyude's avatar
    drm/radeon: Cleanup display interrupt handling for evergreen, si · 4cd096dd
    Lyude authored
    The current code here is really, really bad. A huge amount of it looks
    to be copy pasted, it has some weird hatred of arrays and code sharing,
    switch cases everywhere for things that really don't need them, and it
    makes the file seem immensely more complex then it actually is. This is
    a pain for maintanence, and is vulnerable to more weird irq handling
    bugs.
    
    So, let's start cleaning this up a bit. Modify all of the IRQ handlers
    for evergreen/si so that they just use for loops. As well, we add a
    helper function radeon_irq_kms_set_irq_n_enabled(), whose purpose is
    just to update the state of registers that enable/disable interrupts
    while printing any changes to the set of enabled interrupts to the
    kernel log.
    
    Note in this commit, since vblank/vline irq acking is intertwined with
    page flip irq acking, we can't cut out all of the copy paste in
    evergreen/si_irq_ack() just yet.
    
    Changes since v1:
    - Preserve order we write back all registers
    Acked-by: default avatarChristian König <christian.koenig@amd.com>
    Signed-off-by: default avatarLyude <lyude@redhat.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    4cd096dd
radeon_irq_kms.c 15.8 KB