[RFC/PATCH 00/13] OMAP2+: PM: isolate PM code in modules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Jean Pihet <j-pihet@xxxxxx>

First attempt at isolation of the OMAP2+ PM code

RFC quality code but successfully tested on board as a proof
of concept

1) provide PM functionality as modules

To allow for the PM functionality to be built and used as modules a
clean-up and isolation task first has been performed ('spaghetti
unwinding') because there are a lot of cross calls between various parts
of the PM code (core, platform specific, cpuidle ...).

Since the option CONFIG_PM is always set for OMAP chips and since
CONFIG_PM cannot be set to 'm', a new config option CONFIG_OMAP_PM is defined.
This option allows for the OMAP2+ PM code to be enabled, disabled or
built as modules.

Furthermore CONFIG_PM is used to completely enable or disable the whole
PM code.

The PM functionality is split into the following modules:
 - omap_pm_debug
 - omap2_pm
 - omap3_pm
 - omap4_pm

The following functionality is moved to the modules:
 - platform specific PM core
 - suspend
 - cpuidle
 - PM debug
    
The following functionality is needed at boot time and so is left
in the PM core code (i.e. not built as modules):
 - PRCM
 - clock domains
 - power domains
 - voltage domains
 - hwmod
 - smart reflex
 - per-platform PRCM data
 - per-platform clock data
 - per-platform power domains data
 - per-platform hwmod data
 - per-platform OPP data

2) Addition of EXPORT_SYMBOL for functions and variables used by
the code in PM modules. Lots of (too many?) symbols need to exported
to the PM modules.

3) Clean-up of used resources to allow clean insertion and removal
of the PM modules. This allows insmod/rmmod of the PM modules
to work.


Questions/concerns
------------------
- IMHO too many symbols are exported from various layers to the PM modules, e.g.
cpu_init, flush_tlb_all, omap_irq_pending, v7_flush_dcache_all ...) in patches
10/13, 12/13. Is that OK?

- v7_flush_dcache_all which is implemented in assembly is exported using
EXPORT_SYMBOL in pm.c, or by using a C stub function. That obvioulsy looks wrong
but no cleaner way has been found yet.

- export suspend_set_ops to PM modules hack (patch 09/13): a stub is needed
because the suspend_set_ops functions are not exported by the kernel.
Could that be done?

- the most worrysome piece of code to isolate is pm-debug.c aka 'the octopus'.
The main problem is that pm-debug is needed for a useful PM. The reason is
that most of the PM control knobs (enable_off_mode, sleep_while_idle ...)
are controlled by pm-debug via debugfs and are disabled by default.
This patch series is moving the variables and functions from pm-debug to
mach-omap2/pm.c but not the control mechanism.
More clean-up effort is needed.


Tested on OMAP3 Beagleboard with cpuidle in RET mode.

ToDo:
- suspend not tested
- OFF mode in cpuidle not working (console garbage + reboot), investigation on-going
- power domains timer stats initialized with weird values (i.e. not 0), investigation
on-going


Jean Pihet (13):
  perf: export power_start and power_end tracepoints
  OMAP2+: PM: isolate PM code
  OMAP2+: PM: clean up usage of SRAM functions
  OMAP2+: cpuidle: register the board specific C-states table
  OMAP2+: PM: move common code from pm-debug.c to pm.c
  OMAP2+: PM: isolate the scratchpad save function from the PM code
  OMAP2+: PM: move the powerdomains time stats to powerdomain code
  OMAP2+: PM: provide the next timer event API to PM modules
  OMAP2+: PM: export suspend_set_ops to PM modules
  OMAP3: PM: export the v7_flush_dcache_all API to modules
  OMAP2+: PM: implement modules insertion and removal code
  OMAP2+: PM: export functions and variables to PM modules
  OMAP2+: PM: build PM functionality as modules

 arch/arm/kernel/setup.c            |    1 +
 arch/arm/kernel/smp_tlb.c          |    2 +
 arch/arm/mach-omap2/Makefile       |   77 +++++++++++++++++++++-------------
 arch/arm/mach-omap2/clockdomain.c  |    7 +++
 arch/arm/mach-omap2/cm2xxx_3xxx.c  |    7 +++
 arch/arm/mach-omap2/control.c      |   36 ++++++++--------
 arch/arm/mach-omap2/control.h      |    6 +--
 arch/arm/mach-omap2/cpuidle34xx.c  |   27 +++++++++---
 arch/arm/mach-omap2/gpmc.c         |    2 +
 arch/arm/mach-omap2/id.c           |    1 +
 arch/arm/mach-omap2/irq.c          |    7 +++
 arch/arm/mach-omap2/pm-debug.c     |   80 ++++++++++++------------------------
 arch/arm/mach-omap2/pm.c           |   79 +++++++++++++++++++++++++++++++++++
 arch/arm/mach-omap2/pm.h           |   33 +++++++++++----
 arch/arm/mach-omap2/pm24xx.c       |   33 ++++++++++++--
 arch/arm/mach-omap2/pm34xx.c       |   74 +++++++++++++++++++++++++++++++--
 arch/arm/mach-omap2/pm44xx.c       |   27 +++++++++++-
 arch/arm/mach-omap2/powerdomain.c  |   41 ++++++++++++++++++-
 arch/arm/mach-omap2/powerdomain.h  |    3 +
 arch/arm/mach-omap2/prm2xxx_3xxx.c |    6 +++
 arch/arm/mach-omap2/sdrc.c         |    2 +
 arch/arm/mach-omap2/serial.c       |    5 ++
 arch/arm/mach-omap2/timer-gp.c     |    1 +
 arch/arm/plat-omap/Kconfig         |    9 ++++
 arch/arm/plat-omap/common.c        |    1 +
 arch/arm/plat-omap/dma.c           |    3 +
 arch/arm/plat-omap/gpio.c          |    4 ++
 arch/arm/plat-omap/omap-pm-noop.c  |    2 +
 arch/arm/plat-omap/omap_device.c   |    1 +
 arch/arm/plat-omap/sram.c          |    4 +-
 kernel/trace/power-traces.c        |    3 +-
 31 files changed, 446 insertions(+), 138 deletions(-)

-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux