• Eduardo Valentin's avatar
    OMAP3: PM: Do not rely on ROM code to restore CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL · a8ae645c
    Eduardo Valentin authored
    As per OMAP3 erratum (i671), ROM code adds extra latencies while
    restoring CM_AUTOIDLE_PLL register, if AUTO_PERIPH_DPLL is equal to 1.
    
    This patch stores 0's in scratchpad content area corresponding to
    AUTO_PERIPH_DPLL, to prevent ROM code to try to lock per DPLL, since
    it won't respect proper programing scheme.
    
    This register is then stored in prcm context. The saving and restore
    is now done by kernel side.
    
    Here follow the erratum description
    
    DESCRIPTION
    
    After OFF mode transition, among many restorations, the ROM Code restores the
    CM_AUTOIDLE_PLL register, and after that, it tries to relock the PER DPLL.
    
    In case the restoration data stored in scratchpad memory contains a field
    CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL = 1, then the way the ROM Code restores and
    locks the PER DPLL does not respect the PER DPLL programming scheme.
    
    In that case, the DPLL might not lock. Meanwhile, when trying to lock the PER
    DPLL, the ROM Code does not hang. Only extra latencies are introduced at
    wake-up.
    
    WORKAROUND
    
    When saving the context-restore structure in scratchpad memory, in order to
    respect the PER DPLL programming scheme, it is advised to store 0 in the
    CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL field of the saved structure.
    
    After wake-up, the application should store in CM_AUTOIDLE_PLL register the
    right desired value.
    Signed-off-by: default avatarEduardo Valentin <eduardo.valentin@ti.com>
    Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
    a8ae645c
cm2xxx_3xxx.c 17.5 KB