• Anatolij Gustschin's avatar
    drivers/video: fsl-diu-fb: fix bugs in interrupt handling · b2639b5f
    Anatolij Gustschin authored
    Since commit f74de500
    
     "drivers/video: fsl-diu-fb: streamline
    enabling of interrupts" the interrupt handling in the driver
    is broken. Enabling diu interrupt causes an interrupt storm and
    results in system lockup.
    
    The cookie for the interrupt handler function passed to request_irq()
    is wrong (it must be a pointer to the diu struct, and not the address
    of the pointer to the diu struct). As a result the interrupt handler
    can not read diu registers and acknowledge the interrupt. Fix cookie
    arguments for request_irq() and free_irq().
    
    Registering the diu interrupt handler in probe() must happen before
    install_fb() calls since this function registers framebuffer devices
    and if fbcon tries to take over framebuffer after registering a frame
    buffer device, it will call fb_open of the diu driver and enable the
    interrupts. At this time the diu interrupt handler must be registered
    already.
    
    Disabling the interrupts in fsl_diu_release() must happen only if all
    other AOIs are closed. Otherwise closing an overlay plane will disable
    the interrupts even if the primary frame buffer plane is opened. Add
    an appropriate check in the release function.
    Signed-off-by: default avatarAnatolij Gustschin <agust@denx.de>
    Cc: Timur Tabi <timur@tabi.org>
    Cc: stable@vger.kernel.org
    b2639b5f
fsl-diu-fb.c 46.4 KB