• Soby Mathew's avatar
    PSCI: Introduce new platform and CM helper APIs · 12d0d00d
    Soby Mathew authored
    This patch introduces new platform APIs and context management helper APIs
    to support the new topology framework based on linear core position. This
    framework will be introduced in the follwoing patch and it removes the
    assumption that the MPIDR based affinity levels map directly to levels
    in a power domain tree. The new platforms APIs and context management
    helpers based on core position are as described below:
    
    * plat_my_core_pos() and plat_core_pos_by_mpidr()
    
    These 2 new mandatory platform APIs are meant to replace the existing
    'platform_get_core_pos()' API. The 'plat_my_core_pos()' API returns the
    linear index of the calling core and 'plat_core_pos_by_mpidr()' returns
    the linear index of a core specified by its MPIDR. The latter API will also
    validate the MPIDR passed as an argument and will return an error code (-1)
    if an invalid MPIDR is passed as the argument. This enables the caller to
    safely convert an MPIDR of another core to its linear index without querying
    the PSCI topology tree e.g. during a call to PSCI CPU_ON.
    
    Since the 'plat_core_pos_by_mpidr()' API verifies an MPIDR, which is always
    platform specific, it is no longer possible to maintain a default implementation
    of this API. Also it might not be possible for a platform port to verify an
    MPIDR before the C runtime has been setup or the topology has been initialized.
    This would prevent 'plat_core_pos_by_mpidr()' from being callable prior to
    topology setup. As a result, the generic Trusted Firmware code does not call
    this API before the topology setup has been done.
    
    The 'plat_my_core_pos' API should be able to run without a C runtime.
    Since this API needs to return a core position which is equal to the one
    returned by 'plat_core_pos_by_mpidr()' API for the corresponding MPIDR,
    this too cannot have default implementation and is a mandatory API for
    platform ports. These APIs will be implemented by the ARM reference platform
    ports later in the patch stack.
    
    * plat_get_my_stack() and plat_set_my_stack()
    
    These APIs are the stack management APIs which set/return stack addresses
    appropriate for the calling core. These replace the 'platform_get_stack()' and
    'platform_set_stack()' APIs. A default weak MP version and a global UP version
    of these APIs are provided for the platforms.
    
    * Context management helpers based on linear core position
    
    A set of new context management(CM) helpers viz cm_get_context_by_index(),
    cm_set_context_by_index(), cm_init_my_context() and cm_init_context_by_index()
    are defined which are meant to replace the old helpers which took MPIDR
    as argument. The old CM helpers are implemented based on the new helpers to
    allow for code consolidation and will be deprecated once the switch to the new
    framework is done.
    
    Change-Id: I89758632b370c2812973a4b2efdd9b81a41f9b69
    12d0d00d
platform_mp_stack.S 3.6 KB