1. 14 3月, 2014 1 次提交
  2. 30 1月, 2013 1 次提交
    • P
      ARM: OMAP2+: PM/powerdomain: move omap_set_pwrdm_state() to powerdomain code · c4978fba
      Paul Walmsley 提交于
      Move omap_set_pwrdm_state() from the PM code to the powerdomain code,
      and refactor it to split it up into several functions.  A subsequent patch
      will rename it to conform with the existing powerdomain function names.
      
      This version includes some additional documentation, based on a
      suggestion from Jean Pihet.  It also modifies omap_set_pwrdm_state()
      to not bail out early unless both the powerdomain current power state
      and the next power state are equal.  (Previously it would terminate
      early if the next power state was equal to the target power state,
      which was insufficiently rigorous.)
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Jean Pihet <jean.pihet@newoldbits.com>
      Cc: Kevin Hilman <khilman@deeprootsystems.com>
      Cc: Tero Kristo <t-kristo@ti.com>
      c4978fba
  3. 15 11月, 2012 1 次提交
  4. 06 11月, 2012 4 次提交
    • T
      ARM: OMAP4: VC: setup I2C parameters based on board data · 00bd228e
      Tero Kristo 提交于
      VC code now provides a table of pre-calculated I2C setup parameters,
      which will be used based on the capacitance value calculated for the I2C
      trace on the PCB. A default trace length of 6.3cm is used unless board
      defines its own value during init. The parameters set will be the I2C
      internal pull setup and the I2C timing parameters for high speed use
      mode. Full speed mode is not supported as of now.
      Signed-off-by: NTero Kristo <t-kristo@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      00bd228e
    • T
      ARM: OMAP: add support for oscillator setup · 908b75e8
      Tero Kristo 提交于
      This contains startup and shutdown times for the oscillator. By default
      use ULONG_MAX. Oscillator setup is used for calculating and setting up
      latencies for sleep modes that disable oscillator.
      
      Based on a patch from Nishanth Menon <nm@ti.com>.
      Signed-off-by: NTero Kristo <t-kristo@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      908b75e8
    • S
      ARM: OMAP4460: Workaround for ROM bug because of CA9 r2pX GIC control register change. · ff999b8a
      Santosh Shilimkar 提交于
      On OMAP4+ devices, GIC register context is lost when MPUSS hits
      the OSWR(Open Switch Retention). On the CPU wakeup path, ROM code
      gets executed and one of the steps in it is to restore the
      saved context of the GIC. The ROM Code GIC distributor restoration
      is split in two parts: CPU specific register done by each CPU and
      common register done by only one CPU.
      
      Below is the abstract flow.
      
      ...............................................................
      - MPUSS in OSWR state.
      - CPU0 wakes up on the event(interrupt) and start executing ROM code.
      
      [..]
      
      - CPU0 executes "GIC Restoration:"
      
      [...]
      
      - CPU0 swicthes to non-secure mode and jumps to OS resume code.
      
      [...]
      
      - CPU0 is online in OS
      - CPU0 enables the GIC distributor. GICD.Enable Non-secure = 1
      - CPU0 wakes up CPU1 with clock-domain force wakeup method.
      - CPU0 continues it's execution.
      [..]
      
      - CPU1 wakes up and start executing ROM code.
      
      [..]
      
      - CPU1 executes "GIC Restoration:"
      
      [..]
      
      - CPU1 swicthes to non-secure mode and jumps to OS resume code.
      
      [...]
      
      - CPU1 is online in OS and start executing.
      [...]   -
      
      GIC Restoration: /* Common routine for HS and GP devices */
      {
             if (GICD != 1)  { /* This will be true in OSWR state */
                     if (GIC_SAR_BACKUP_STATE == SAVED)
                             - CPU restores GIC distributor
                     else
                             - reconfigure GIC distributor to boot values.
      
                     GICD.Enable secure = 1
             }
      
             if (GIC_SAR_BACKUP_STATE == SAVED)
                     - CPU restore its GIC CPU interface registers if saved.
             else
                     - reconfigure its GIC CPU interface registers to boot
                             values.
      }
      ...............................................................
      
      So as mentioned in the flow, GICD != 1 condition decides how
      the GIC registers are handled in ROM code wakeup path from
      OSWR. As evident from the flow, ROM code relies on the entire
      GICD register value and not specific register bits.
      
      The assumption was valid till CortexA9 r1pX version since there
      was only one banked bit to control secure and non-secure GICD.
      Secure view which ROM code sees:
             bit 0 == Enable Non-secure
      Non-secure view which HLOS sees:
             bit 0 == Enable secure
      
      But GICD register has changed between CortexA9 r1pX and r2pX.
      On r2pX GICD register is composed of 2 bits.
      Secure view which ROM code sees:
             bit 1 == Enable Non-secure
             bit 0 == Enable secure
      Non-secure view which HLOS sees:
             bit 0 == Enable Non-secure
      
      Hence on OMAP4460(r2pX) devices, if you go through the
      above flow again during CPU1 wakeup, GICD == 3 and hence
      ROM code fails to understand the real wakeup power state
      and reconfigures GIC distributor to boot values. This is
      nasty since you loose the entire interrupt controller
      context in a live system.
      
      The ROM code fix done on next OMAP4 device (OMAP4470 - r2px) is to
      check "GICD.Enable secure != 1" for GIC restoration in OSWR wakeup path.
      
      Since ROM code can't be fixed on OMAP4460 devices, a work around
      needs to be implemented. As evident from the flow, as long as
      CPU1 sees GICD == 1 in it's wakeup path from OSWR, the issue
      won't happen. Below is the flow with the work-around.
      
      ...............................................................
      - MPUSS in OSWR state.
      - CPU0 wakes up on the event(interrupt) and start executing ROM code.
      
      [..]
      
      - CPU0 executes "GIC Restoration:"
      
      [..]
      
      - CPU0 swicthes to non-secure mode and jumps to OS resume code.
      
      [..]
      
      - CPU0 is online in OS.
      - CPU0 does GICD.Enable Non-secure = 0
      - CPU0 wakes up CPU1 with clock domain force wakeup method.
      - CPU0 waits for GICD.Enable Non-secure = 1
      - CPU0 coninues it's execution.
      [..]
      
      - CPU1 wakes up and start executing ROM code.
      
      [..]
      
      - CPU1 executes "GIC Restoration:"
      
      [..]
      
      - CPU1 swicthes to non-secure mode and jumps to OS resume code.
      
      [..]
      
      - CPU1 is online in OS
      - CPU1 does GICD.Enable Non-secure = 1
      - CPU1 start executing
      [...]
      ...............................................................
      
      With this procedure, the GIC configuration done between the
      CPU0 wakeup and CPU1 wakeup will not be lost but during this
      short windows, the CPU0 will not receive interrupts.
      
      The BUG is applicable to only OMAP4460(r2pX) devices.
      OMAP4470 (also r2pX) is not affected by this bug because
      ROM code has been fixed.
      Signed-off-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Signed-off-by: NTero Kristo <t-kristo@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      ff999b8a
    • T
      ARM: OMAP4: PM: add errata support · c9621844
      Tero Kristo 提交于
      Added similar PM errata flag support as omap3 has. This should be used
      in similar manner, set the flags during init time, and check the flag
      values during runtime.
      Signed-off-by: NTero Kristo <t-kristo@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      c9621844
  5. 23 10月, 2012 1 次提交
    • P
      ARM: OMAP3: PM: apply part of the erratum i582 workaround · 856c3c5b
      Paul Walmsley 提交于
      On OMAP34xx/35xx, and OMAP36xx chips with ES < 1.2, if the PER
      powerdomain goes to OSWR or OFF while CORE stays at CSWR or ON, or if,
      upon chip wakeup from OSWR or OFF, the CORE powerdomain goes ON before
      PER, the UART3/4 FIFOs and McBSP2/3 SIDETONE memories will be
      unusable.  This is erratum i582 in the OMAP36xx Silicon Errata
      document.
      
      This patch implements one of several parts of the workaround: the
      addition of the wakeup dependency between the PER and WKUP
      clockdomains, such that PER will wake up at the same time CORE_L3
      does.
      
      This is not a complete workaround.  For it to be complete:
      
      1. the PER powerdomain's next power state must not be set to OSWR or
         OFF if the CORE powerdomain's next power state is set to CSWR or
         ON;
      
      2. the UART3/4 FIFO and McBSP2/3 SIDETONE loopback tests should be run
         if the LASTPOWERSTATEENTERED bits for PER and CORE indicate that
         PER went OFF while CORE stayed on.  If loopback tests fail, then
         those devices will be unusable until PER and CORE can undergo a
         transition from ON to OSWR/OFF and back ON.
      Signed-off-by: NPaul Walmsley <paul@pwsan.com>
      Cc: Tero Kristo <t-kristo@ti.com>
      Cc: Kevin Hilman <khilman@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      856c3c5b
  6. 20 6月, 2012 1 次提交
    • D
      ARM: OMAP3/4: consolidate cpuidle Makefile · 164e0cbf
      Daniel Lezcano 提交于
      The current Makefile compiles the cpuidle34xx.c and cpuidle44xx.c files
      even if the cpuidle option is not set in the kernel.
      
      This patch fixes this by creating a section in the Makefile where these
      files are compiled only if the CONFIG_CPU_IDLE option is set.
      
      This modification breaks an implicit dependency between CPU_IDLE and PM as
      they belong to the same block in the Makefile. This is fixed in the Kconfig
      by selecting explicitely PM is CPU_IDLE is set.
      
      The linux coding style recommend to use no-op functions in the headers
      when the subsystem is disabled instead of adding big section in C files.
      
      This patch fix this also.
      Signed-off-by: NDaniel Lezcano <daniel.lezcano@linaro.org>
      Reviewed-by: NJean Pihet <j-pihet@ti.com>
      Reviewed-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      164e0cbf
  7. 01 6月, 2012 1 次提交
  8. 04 5月, 2012 2 次提交
  9. 06 3月, 2012 2 次提交
  10. 22 2月, 2012 1 次提交
  11. 09 12月, 2011 1 次提交
    • S
      ARM: OMAP4: PM: Add CPUidle support · 98272660
      Santosh Shilimkar 提交于
      Add OMAP4 CPUIDLE support. CPU1 is left with defualt idle and
      the low power state for it is managed via cpu-hotplug.
      
      This patch adds MPUSS low power states in cpuidle.
      
      	C1 - CPU0 ON + CPU1 ON + MPU ON
      	C2 - CPU0 OFF + CPU1 OFF + MPU CSWR
      	C3 - CPU0 OFF + CPU1 OFF + MPU OSWR
      
      OMAP4460 onwards, MPUSS power domain doesn't support OFF state any more
      anymore just like CORE power domain. The deepest state supported is OSWr.
      Ofcourse when MPUSS and CORE PD transitions to OSWR along with device
      off mode, even the memory contemts are lost which is as good as
      the PD off state.
      
      On OMAP4 because of hardware constraints, no low power states are
      targeted when both CPUs are online and in SMP mode. The low power
      states are attempted only when secondary CPU gets offline to OFF
      through hotplug infrastructure.
      
      Thanks to Nicole Chalhoub <n-chalhoub@ti.com> for doing exhaustive
      C-state latency profiling.
      Signed-off-by: NRajendra Nayak <rnayak@ti.com>
      Signed-off-by: NSantosh Shilimkar <santosh.shilimkar@ti.com>
      Acked-by: NJean Pihet <j-pihet@ti.com>
      Reviewed-by: NKevin Hilman <khilman@ti.com>
      Tested-by: NVishwanath BS <vishwanath.bs@ti.com>
      Signed-off-by: NKevin Hilman <khilman@ti.com>
      98272660
  12. 30 6月, 2011 2 次提交
    • R
      ARM: pm: omap3: move saving of the auxiliary control registers to C · cbe26349
      Russell King 提交于
      Move the saving of the auxiliary control registers into C; there's
      no need for this to be in assembly code.  This results in less
      assembly code to deal with in OMAP.
      
      Kevin tested full-chip retention and off on 3430/n900, 3530/Overo and
      3630/Zoom3.
      Tested-by: NKevin Hilman <khilman@ti.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      cbe26349
    • J
      ARM: pm: omap3: run the ASM sleep code from DDR · 46e130d2
      Jean Pihet 提交于
      Most of the ASM sleep code (in arch/arm/mach-omap2/sleep34xx.S)
      is copied to internal SRAM at boot and after wake-up from CORE OFF
      mode.  However only a small part of the code really needs to run from
      internal SRAM.
      
      This fix lets most of the ASM idle code run from the DDR in order to
      minimize the SRAM usage and the overhead in the code copy.
      
      The only pieces of code that are mandatory in SRAM are:
      - the i443 erratum WA,
      - the i581 erratum WA,
      - the security extension code.
      
      SRAM usage:
      - original code:
        . 560 bytes for omap3_sram_configure_core_dpll (used by DVFS),
        . 852 bytes for omap_sram_idle (used by suspend/resume in RETention),
        . 124 bytes for es3_sdrc_fix (used by suspend/resume in OFF mode on ES3.x),
        . 108 bytes for save_secure_ram_context (used on HS parts only).
      
      With this fix the usage for suspend/resume in RETention goes down 288
      bytes, so the gain in SRAM usage for suspend/resume is 564 bytes.
      
      Also fixed the SRAM initialization sequence to avoid an unnecessary
      copy to SRAM at boot time and for readability.
      
      Tested on Beagleboard (ES2.x) in idle with full RET and OFF modes.
      
      Kevin Hilman tested retention and off on 3430/n900, 3530/Overo and
      3630/Zoom3
      Signed-off-by: NJean Pihet <j-pihet@ti.com>
      Reviewed-by: NKevin Hilman <khilman@ti.com>
      Tested-by: NKevin Hilman <khilman@ti.com>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      46e130d2
  13. 28 6月, 2011 1 次提交
  14. 21 6月, 2011 2 次提交
  15. 20 6月, 2011 1 次提交
  16. 20 5月, 2011 2 次提交
  17. 10 3月, 2011 1 次提交
  18. 04 2月, 2011 1 次提交
  19. 23 12月, 2010 3 次提交
  20. 22 12月, 2010 9 次提交
  21. 02 10月, 2010 1 次提交
    • L
      OMAP: PM: Fix build when CONFIG_PM_DEBUG isn't set · ebfa88cf
      Loïc Minier 提交于
      Since 6cdee912 the references to
      enable_off_mode and sleep_while_idle can't be resolved when CONFIG_PM_DEBUG
      isn't set:
      arch/arm/mach-omap2/built-in.o: In function `omap_uart_restore_context':
      arch/arm/mach-omap2/serial.c:253: undefined reference to `enable_off_mode'
      arch/arm/mach-omap2/built-in.o: In function `omap3_can_sleep':
      arch/arm/mach-omap2/pm34xx.c:479: undefined reference to `sleep_while_idle'
      
      Simply #define these in pm.h just like omap2_pm_debug.
      Signed-off-by: NLoïc Minier <loic.minier@linaro.org>
      [khilman: moved down into existing #ifdef section]
      Signed-off-by: NKevin Hilman <khilman@deeprootsystems.com>
      ebfa88cf
  22. 24 9月, 2010 1 次提交