• Jon Hunter's avatar
    ARM: OMAP2+: Only write the sysconfig on idle when necessary · 127500cc
    Jon Hunter authored
    Currently, whenever we idle a device _idle_sysc() is called and writes to the
    devices SYSCONFIG register to set the idle mode. A lot devices are using the
    smart-idle mode and so the write to the SYSCONFIG register is programming the
    same value that is already stored in the register.
    
    Writes to the devices SYSCONFIG register can be slow, for example, writing to
    the DMTIMER SYSCONFIG register takes 3 interface clock cycles and 3 functional
    clock cycles. If the DMTIMER is using the slow 32kHz functional clock this can
    take ~100us.
    
    Furthermore, during boot on an OMAP4430 panda board, I see that there are 100
    calls to _idle_sysc(), however, only 3 out of the 100 calls actually write
    the SYSCONFIG register with a new value.
    
    Therefore, to avoid unnecessary writes to device SYSCONFIG registers when
    idling the device, only write the value if the value has changed. It should be
    safe to do this on idle as the context of the register will never be lost while
    the device is active.
    
    Verified that suspend, CORE off and retention states are working with this
    change on OMAP3430 Beagle board.
    Signed-off-by: default avatarJon Hunter <jon-hunter@ti.com>
    [paul@pwsan.com: updated to apply]
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    127500cc
omap_hwmod.c 118 KB