• Paul Walmsley's avatar
    tty: serial: OMAP: transmit FIFO threshold interrupts don't wake the chip · 43cf7c0b
    Paul Walmsley authored
    It seems that when the transmit FIFO threshold is reached on OMAP
    UARTs, it does not result in a PRCM wakeup.  This appears to be a
    silicon bug.  This means that if the MPU powerdomain is in a low-power
    state, the MPU will not be awakened to refill the FIFO until the next
    interrupt from another device.
    
    The best solution, at least for the short term, would be for the OMAP
    serial driver to call a OMAP subarchitecture function to prevent the
    MPU powerdomain from entering a low power state while the FIFO has
    data to transmit.  However, we no longer have a clean way to do this,
    since patches that add platform_data function pointers have been
    deprecated by the OMAP maintainer.  So we attempt to work around this
    as well.  The workarounds depend on the setting of CONFIG_CPU_IDLE.
    
    When CONFIG_CPU_IDLE=n, the driver will now only transmit one byte at
    a time.  This causes the transmit FIFO threshold interrupt to stay
    active until there is no more data to be sent.  Thus, the MPU
    powerdomain stays on during transmits.  Aside from that energy
    consumption penalty, each transmitted byte results in a huge number of
    UART interrupts -- about five per byte.  This wastes CPU time and is
    quite inefficient, but is probably the most expedient workaround in
    this case.
    
    When CONFIG_CPU_IDLE=y, there is a slightly more direct workaround:
    the PM QoS constraint can be abused to keep the MPU powerdomain on.
    This results in a normal number of interrupts, but, similar to the
    above workaround, wastes power by preventing the MPU from entering
    WFI.
    
    Future patches are planned for the 3.4 merge window to implement more
    efficient, but also more disruptive, workarounds to these problems.
    
    DMA operation is unaffected by this patch.
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: Govindraj Raja <govindraj.r@ti.com>
    Cc: Kevin Hilman <khilman@ti.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    43cf7c0b
omap-serial.c 46.5 KB