From 6a7478da76d16cd3bb4f25e43f3261ff0c83542a Mon Sep 17 00:00:00 2001 From: Joachim Fenkes Date: Tue, 19 Mar 2019 18:21:51 +0100 Subject: FAPI2: Add method to Target to query core select vector from CORE targets Add fapi2::Target::getCoreSelect() which will return the core select bits for a TARGET_TYPE_CORE target or a TARGET_TYPE_CORE|TARGET_TYPE_MULTICAST target. Other target types don't have the notion of a core select value, so attempting to call getCoreSelect() will result in a compile-time error. Change-Id: I427028876b18126493192db53686707c662bafd7 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/74675 Tested-by: Jenkins Server Reviewed-by: Matt K. Light Reviewed-by: Gregory S. Still Reviewed-by: Jennifer A. Stofer Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/75431 Reviewed-by: RAJA DAS --- src/import/hwpf/fapi2/include/fapi2_target.H | 18 +++++++++++++++++- src/import/hwpf/fapi2/include/plat/target.H | 8 ++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/import/hwpf/fapi2/include/fapi2_target.H b/src/import/hwpf/fapi2/include/fapi2_target.H index 8dd1cc13..e8c7877d 100644 --- a/src/import/hwpf/fapi2/include/fapi2_target.H +++ b/src/import/hwpf/fapi2/include/fapi2_target.H @@ -378,6 +378,19 @@ class Target inline uint8_t getChipletNumber(void) const; + /// + /// @brief Returns the core select vector associated with a Core target + /// @return The core select value for the target. For unicast core targets + /// the return value will have exactly one bit set. For multicast core + /// targets it will have between one and four bits set. + /// + inline MulticastCoreSelect + getCoreSelect(void) const + { + static_assert(K & TARGET_TYPE_CORE, "getCoreSelect is only applicable to TARGET_TYPE_CORE targets"); + return _getCoreSelect(); + } + /// /// @brief Copy from a Target to a Target /// @tparam O the target type of the other @@ -410,7 +423,10 @@ class Target V iv_handle; /// @brief if iv_handle is a multicast target, update its multicast type to M - inline void mcUpdateHandle(); + inline void mcUpdateHandle(void); + + /// @brief Internal implementation of getCoreSelect, filtered for CORE targets + inline MulticastCoreSelect _getCoreSelect(void) const; }; // EX threads map to CORE threads: diff --git a/src/import/hwpf/fapi2/include/plat/target.H b/src/import/hwpf/fapi2/include/plat/target.H index 62e57f8d..884b60e5 100644 --- a/src/import/hwpf/fapi2/include/plat/target.H +++ b/src/import/hwpf/fapi2/include/plat/target.H @@ -198,6 +198,14 @@ Target::getChipletNumber(void) const return 0; } +template +inline MulticastCoreSelect +Target::_getCoreSelect(void) const +{ + // Platform can return the core select value stored in it's Target handle + return MCCORE_0; +} + /// /// @brief Return the string interpretation of this target /// @tparam T The type of the target -- cgit v1.2.1