10 Aug, 2011

1 commit

  • Builds for multi-OMAP2 (e.g., OMAP2420 with OMAP2430) with
    CONFIG_ARCH_OMAP4=n fail with the following errors:

    arch/arm/mach-omap2/built-in.o: In function `_enable_module':
    arch/arm/mach-omap2/omap_hwmod.c:701: undefined reference to `omap4_cminst_module_enable'
    arch/arm/mach-omap2/built-in.o: In function `_disable_module':
    arch/arm/mach-omap2/omap_hwmod.c:726: undefined reference to `omap4_cminst_module_disable'
    arch/arm/mach-omap2/built-in.o: In function `_wait_target_disable':
    arch/arm/mach-omap2/omap_hwmod.c:1179: undefined reference to `omap4_cminst_wait_module_idle'

    This is probably due to the preprocessor directives in
    arch/arm/plat-omap/include/plat/cpu.h that convert some cpu_is_omap*()
    expressions from preprocessor directives into something that is only
    resolvable during runtime, if multiple OMAP2 build targets are
    selected.

    Thanks to Tony Lindgren for reporting.

    Signed-off-by: Paul Walmsley
    Signed-off-by: Tony Lindgren

    Paul Walmsley
     

10 Jul, 2011

3 commits

  • In OMAP4, a new programming model based on module control instead
    of clock control was introduced.
    Expose two APIs to allow the upper layer (omap_hwmod) to control
    the module mode independently of the parent clocks management.

    Signed-off-by: Benoit Cousson
    Cc: Paul Walmsley
    Cc: Rajendra Nayak
    [paul@pwsan.com: renamed 'omap4_cm_' fns to 'omap4_cminst_'; cleaned up
    kerneldoc]
    Signed-off-by: Paul Walmsley

    Benoit Cousson
     
  • It is mandatory to wait for a module to be in disabled state before
    potentially disabling source clock or re-asserting a reset.

    omap_hwmod_idle and omap_hwmod_shutdown does not wait for
    the module to be fully idle.

    Add a cm_xxx accessor to wait the clkctrl idle status to be disabled.
    Fix hwmod_[idle|shutdown] to use this API.

    Based on Rajendra's initial patch.

    Please note that most interconnects hwmod will return one timeout because
    it is impossible for them to be in idle since the processor is accessing
    the registers though the interconnect.

    Signed-off-by: Benoit Cousson
    Signed-off-by: Rajendra Nayak
    Cc: Paul Walmsley
    Cc: Todd Poynor
    [paul@pwsan.com: move cpu_is_*() tests to the top of _wait_target_disable();
    incorporate some feedback from Todd]
    Signed-off-by: Paul Walmsley

    Benoit Cousson
     
  • The CLKCTRL register was accessed using an absolute address.
    The usage of hardcoded macros to calculate virtual address from physical
    one should be avoided as much as possible.
    The usage of a offset will allow future improvement like migration from
    the current architecture code toward a module driver.

    Update cm_xxx accessor, move definition to the proper header file and
    update copyrights.

    Signed-off-by: Benoit Cousson
    Cc: Paul Walmsley
    Cc: Rajendra Nayak
    Cc: Todd Poynor
    [paul@pwsan.com: renamed 'omap4_cm_' fns to 'omap4_cminst_'; removed empty
    fn prototype section from cm44xx.h; incorporated comments from Todd;
    documented some functions]
    Signed-off-by: Paul Walmsley

    Benoit Cousson
     

26 Feb, 2011

1 commit


22 Dec, 2010

2 commits

  • Add PRCM partition, CM instance register address offset, and clockdomain
    register address offset to each OMAP4 struct clockdomain record. Add OMAP4
    clockdomain code to use this new data to access registers properly.

    While here, clean up some nearby clockdomain code to allocate auto variables
    in my recollection of Linus's preferred style.

    The autogeneration scripts have been updated.

    Signed-off-by: Paul Walmsley
    Cc: Rajendra Nayak
    Cc: Santosh Shilimkar
    Cc: Benoît Cousson
    Tested-by: Rajendra Nayak
    Tested-by: Santosh Shilimkar

    Paul Walmsley
     
  • In some ways, the OMAP4 PRCM register layout is quite different than
    the OMAP2/3 PRCM register layout. For example, on OMAP2/3, from a
    register layout point of view, all CM instances were located in the CM
    subsystem, and all PRM instances were located in the PRM subsystem.
    OMAP4 changes this. Now, for example, some CM instances, such as
    WKUP_CM and EMU_CM, are located in the system PRM subsystem. And a
    "local PRCM" exists for the MPU - this PRCM combines registers that
    would normally appear in both CM and PRM instances, but uses its own
    register layout which matches neither the OMAP2/3 PRCM layout nor the
    OMAP4 PRCM layout.

    To try to deal with this, introduce some new functions, omap4_cminst*
    and omap4_prminst*. The former is to be used when writing to a CM
    instance register (no matter what subsystem or hardware module it
    exists in), and the latter, similarly, with PRM instance registers.
    To determine which "PRCM partition" to write to, the functions take a
    PRCM instance ID argument. Subsequent patches add these partition IDs
    to the OMAP4 powerdomain and clockdomain definitions.

    As far as I can see, there's really no good way to handle these types
    of register access inconsistencies. This patch seemed like the least
    bad approach.

    Moving forward, the long-term goal is to remove all direct PRCM
    register access from the PM code. PRCM register access should go
    through layers such as the powerdomain and clockdomain code that can
    hide the details of how to interact with the specific hardware
    variant.

    While here, rename cm4xxx.c to cm44xx.c to match the naming convention
    of the other OMAP4 PRCM files.

    Thanks to Santosh Shilimkar , Rajendra Nayak
    , and Benoît Cousson for some comments.

    Signed-off-by: Paul Walmsley
    Cc: Benoît Cousson
    Cc: Rajendra Nayak
    Cc: Santosh Shilimkar

    Paul Walmsley