diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/libpore/p10_stop_data_struct.H | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/libpore/p10_stop_data_struct.H')
-rw-r--r-- | roms/skiboot/libpore/p10_stop_data_struct.H | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/roms/skiboot/libpore/p10_stop_data_struct.H b/roms/skiboot/libpore/p10_stop_data_struct.H new file mode 100644 index 000000000..3a16fcda9 --- /dev/null +++ b/roms/skiboot/libpore/p10_stop_data_struct.H @@ -0,0 +1,162 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: chips/p10/procedures/utils/stopreg/p10_stop_data_struct.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* EKB Project */ +/* */ +/* COPYRIGHT 2015,2020 */ +/* [+] International Business Machines Corp. */ +/* */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* IBM_PROLOG_END_TAG */ + +/// +/// @file p10_stop_data_struct.H +/// @brief describes data structures internal to STOP API. +/// +// *HWP HW Owner : Greg Still <stillgs@us.ibm.com> +// *HWP FW Owner : Prem Shanker Jha <premjha2@in.ibm.com> +// *HWP Team : PM +// *HWP Level : 2 +// *HWP Consumed by : HB:HYP +#ifndef __STOP_DATA_STRUCT_ +#define __STOP_DATA_STRUCT_ + +#include "p10_hcd_memmap_base.H" + +#ifdef __SKIBOOT__ + #include <skiboot.h> +#endif + +#ifdef __FAPI_2_ + #include <fapi2.H> +#endif + +#ifdef PPC_HYP + + #define STATIC + +#else + + #define STATIC static + +#endif + + +#ifdef __DEBUG_ + #include<stdio.h> +#endif + +#ifdef __cplusplus +extern "C" { +namespace stopImageSection +{ +#endif + +/** + * @brief Misc constants pertaining to instruction opcodes. + */ +enum +{ + MAX_SPR_RESTORE_INST = 0x08, + SIZE_PER_SPR_RESTORE_INST = ((4 * sizeof(uint8_t)) / sizeof(uint32_t)), + MAX_THREAD_LEVEL_SPRS = 11, + MAX_CORE_LEVEL_SPRS = 6, + MAX_SPR_BIT_POS = 30, + SPR_BIT_POS_8 = 8, + SPR_BIT_POS_20 = 20, + SPR_BIT_POS_25 = 25, + SPR_BIT_POS_27 = 27, +}; + +/** + * @brief various operations supported on SPR restore entry. + */ +enum SprEntryUpdateMode +{ + INIT_SPR_REGION = 0x01, + UPDATE_SPR_ENTRY = 0x02, +}; + +/** + * @brief models an individual SCOM restore entry. + */ +typedef struct +{ + uint32_t iv_scomAddress; + uint64_t iv_scomData; +} __attribute__((packed)) ScomEntry_t; + +/** + * @brief describes details pertaining to SCOM entry + */ +typedef struct +{ + uint32_t iv_subRegionBaseOffset; + uint32_t iv_subRegionLength; + uint8_t iv_slotFound; + uint8_t iv_lastEntryOffset; + uint16_t iv_entryOffset; + uint8_t iv_entryMatchOffset; + uint8_t iv_matchFound; + uint8_t iv_entryLimit; + uint8_t iv_reserved; +} ScomEntryDat_t; + +/** + * @brief summarizes attributes associated with a SPR register. + */ +typedef struct +{ + uint32_t iv_sprId; + bool iv_isThreadScope; + uint32_t iv_saveMaskPos; +} StopSprReg_t; + +/** + * @brief Misc constants. + */ +enum +{ + SIZE_SCOM_ENTRY = sizeof( ScomEntry_t ), + SCOM_ENTRY_START = 0xDEADDEAD, + BAD_SAVE_MASK = 0x007FF000, + MAX_SPR_INDEX = 31, + TEST_BIT_PATTERN = 0x80000000, + EP_SELECT_MASK = 0x000F0000, + CORE_REGION_MASK = 0x0000F000, + SCOM_ENTRY_VALID = 0x80000000, + LAST_SCOM_ENTRY = 0x40000000, + SWIZZLE_LAST_SCOM_ENTRY = 0x00000040, + SCOM_ADDR_MASK = 0x0000FFFF, + SCOM_ADDR_CHIPLET_MASK = 0x000FFFFF, + SCOM_ENTRY_VER = 0x10000000, //Ver 1.0 + CORE_SECTION_ID_CODE = 0x00000000, //Core Section Id 0 + L3_SECTION_ID_CODE = 0x03000000, //L3 Section Id 3 b4:b7 + MAX_SCOM_ENTRY_POS = 0x10, + MIN_SUPERCHIPLET_ID = 0x20, + +}; + +#ifdef __DEBUG_ + #define MY_ERR( _fmt_, _args_...) printf( "\n"); printf( _fmt_, ##_args_) + #define MY_INF(_fmt_, _args_...) printf( "\n"); printf( _fmt_, ##_args_) +#else + #define MY_ERR( _fmt_, _args_...) + #define MY_INF(_fmt_, _args_...) +#endif + +#ifdef __cplusplus +} // extern "C" + +} //namespace stopImageSection ends +#endif //__cplusplus + +#endif |