| Ben Tyner | 9ae5ca4 | 2020-02-28 13:13:50 -0600 | [diff] [blame] | 1 | #pragma once | 
|  | 2 |  | 
| Ben Tyner | 792f32f | 2020-06-02 08:50:47 -0500 | [diff] [blame] | 3 | #include <stdint.h> | 
|  | 4 |  | 
| Zane Shelley | f36466f | 2022-02-11 15:10:55 -0600 | [diff] [blame] | 5 | #include <map> | 
|  | 6 | #include <string> | 
|  | 7 |  | 
| Ben Tyner | 9ae5ca4 | 2020-02-28 13:13:50 -0600 | [diff] [blame] | 8 | /** | 
|  | 9 | * @brief TI special attention handler | 
|  | 10 | * | 
|  | 11 | * Handle special attention due to a terminate immediately (TI) condition. | 
|  | 12 | */ | 
|  | 13 | namespace attn | 
|  | 14 | { | 
|  | 15 |  | 
| Ben Tyner | 792f32f | 2020-06-02 08:50:47 -0500 | [diff] [blame] | 16 | // TI data area definition | 
|  | 17 | #pragma pack(push) | 
|  | 18 | #pragma pack(1) | 
|  | 19 | struct TiDataArea | 
|  | 20 | { | 
|  | 21 | uint8_t tiAreaValid;       // 0x00, common (non-zero == valid) | 
|  | 22 | uint8_t command;           // 0x01, phyp/opal = 0xA1 | 
|  | 23 | uint16_t numDataBytes;     // 0x02, phyp/opal | 
|  | 24 | uint8_t reserved1;         // 0x04, reserved | 
|  | 25 | uint8_t hbTerminateType;   // 0x05, hostboot only | 
|  | 26 | uint16_t hardwareDumpType; // 0x06, phyp/opal | 
|  | 27 | uint8_t srcFormat;         // 0x08, phyp/opal = 0x02 | 
|  | 28 | uint8_t srcFlags;          // 0x09, phyp/opal | 
|  | 29 | uint8_t numAsciiWords;     // 0x0a, phyp/opal | 
|  | 30 | uint8_t numHexWords;       // 0x0b, phyp/opal | 
| Ben Tyner | ac5bd05 | 2022-03-03 14:09:13 -0600 | [diff] [blame] | 31 | uint8_t hbFlags;           // 0x0c, hostboot only | 
| Ben Tyner | 792f32f | 2020-06-02 08:50:47 -0500 | [diff] [blame] | 32 | uint8_t source;            // 0x0d, hostboot only | 
|  | 33 | uint16_t lenSrc;           // 0x0e, phyp/opal | 
|  | 34 | uint32_t srcWord12HbWord0; // 0x10, common | 
|  | 35 | uint32_t srcWord13HbWord2; // 0x14, common (Word1 intentionally skipped) | 
|  | 36 | uint32_t srcWord14HbWord3; // 0x18, common | 
|  | 37 | uint32_t srcWord15HbWord4; // 0x1c, common | 
|  | 38 | uint32_t srcWord16HbWord5; // 0x20, common | 
|  | 39 | uint32_t srcWord17HbWord6; // 0x24, common | 
|  | 40 | uint32_t srcWord18HbWord7; // 0x28, common | 
|  | 41 | uint32_t srcWord19HbWord8; // 0x2c, common | 
|  | 42 | uint32_t asciiData0;       // 0x30, phyp/opal, hostboot error_data | 
|  | 43 | uint32_t asciiData1;       // 0x34, phyp/opal, hostboot EID | 
|  | 44 | uint32_t asciiData2;       // 0x38, phyp/opal | 
|  | 45 | uint32_t asciiData3;       // 0x3c, phyp/opal | 
|  | 46 | uint32_t asciiData4;       // 0x40, phyp/opal | 
|  | 47 | uint32_t asciiData5;       // 0x44, phyp/opal | 
|  | 48 | uint32_t asciiData6;       // 0x48, phyp/opal | 
|  | 49 | uint32_t asciiData7;       // 0x4c, phyp/opal | 
|  | 50 | uint8_t location;          // 0x50, phyp/opal | 
|  | 51 | uint8_t codeSection;       // 0x51, phyp/opal | 
|  | 52 | uint8_t additionalSize;    // 0x52, phyp/opal | 
|  | 53 | uint8_t andData;           // 0x53, phyp/opal | 
|  | 54 | }; | 
|  | 55 | #pragma pack(pop) | 
|  | 56 |  | 
| Ben Tyner | ac5bd05 | 2022-03-03 14:09:13 -0600 | [diff] [blame] | 57 | // TI info defines | 
| Patrick Williams | 27dd636 | 2023-05-10 07:51:20 -0500 | [diff] [blame] | 58 | constexpr uint8_t hbDumpFlag = 0x01; | 
| Ben Tyner | ac5bd05 | 2022-03-03 14:09:13 -0600 | [diff] [blame] | 59 | constexpr uint8_t hbNotVisibleFlag = 0x02; | 
|  | 60 |  | 
| Ben Tyner | 8c5e4f4 | 2020-10-28 11:11:55 -0500 | [diff] [blame] | 61 | // miscellaneous defines | 
|  | 62 | constexpr uint8_t TI_WITH_PLID = 0x01; | 
| Patrick Williams | 27dd636 | 2023-05-10 07:51:20 -0500 | [diff] [blame] | 63 | constexpr uint8_t TI_WITH_SRC = 0x02; | 
|  | 64 | constexpr uint8_t TI_WITH_EID = 0x03; | 
| Ben Tyner | 8c5e4f4 | 2020-10-28 11:11:55 -0500 | [diff] [blame] | 65 |  | 
|  | 66 | // component ID's | 
|  | 67 | constexpr uint16_t INITSVC_COMP_ID = 0x0500; | 
| Patrick Williams | 27dd636 | 2023-05-10 07:51:20 -0500 | [diff] [blame] | 68 | constexpr uint16_t PNOR_COMP_ID = 0x0600; | 
|  | 69 | constexpr uint16_t HWAS_COMP_ID = 0x0C00; | 
|  | 70 | constexpr uint16_t SECURE_COMP_ID = 0x1E00; | 
|  | 71 | constexpr uint16_t TRBOOT_COMP_ID = 0x2B00; | 
| Ben Tyner | 8c5e4f4 | 2020-10-28 11:11:55 -0500 | [diff] [blame] | 72 |  | 
|  | 73 | // HBFW::INITSERVICE::SHUTDOWNPREQUESTED_BY_FSP | 
|  | 74 | constexpr uint16_t HB_SRC_SHUTDOWN_REQUEST = INITSVC_COMP_ID | 0x0b; | 
|  | 75 |  | 
|  | 76 | // SHUTDOWN_KEY_TRANSITION | 
|  | 77 | constexpr uint16_t HB_SRC_KEY_TRANSITION = INITSVC_COMP_ID | 0x15; | 
|  | 78 |  | 
|  | 79 | // HBFW::HWAS::RC_SYSAVAIL_INSUFFICIENT_HW | 
|  | 80 | constexpr uint16_t HB_SRC_INSUFFICIENT_HW = HWAS_COMP_ID | 0x04; | 
|  | 81 |  | 
|  | 82 | // HBFW::TRUSTDBOOT::RC_TPM_NOFUNCTIONALTPM_FAIL | 
|  | 83 | constexpr uint16_t HB_SRC_TPM_FAIL = TRBOOT_COMP_ID | 0xAD; | 
|  | 84 |  | 
|  | 85 | // HBFW::SECUREBOOT::RC_ROM_VERIFY | 
|  | 86 | constexpr uint16_t HB_SRC_ROM_VERIFY = SECURE_COMP_ID | 0x07; | 
|  | 87 |  | 
|  | 88 | // HBFW::PNOR::RC_BASE_EXT_MISMATCH | 
|  | 89 | constexpr uint16_t HB_SRC_EXT_MISMATCH = PNOR_COMP_ID | 0x2F; | 
|  | 90 |  | 
|  | 91 | // HBFW::PNOR:RC_ECC_UE | 
|  | 92 | constexpr uint16_t HB_SRC_ECC_UE = PNOR_COMP_ID | 0x0F; | 
|  | 93 |  | 
|  | 94 | // HBFW::PNOR:RC_UNSUPPORTED_MODE | 
|  | 95 | constexpr uint16_t HB_SRC_UNSUPPORTED_MODE = PNOR_COMP_ID | 0x0D; | 
|  | 96 |  | 
|  | 97 | // HBFW::PNOR:RC_UNSUPPORTED_SFCRANGE | 
|  | 98 | constexpr uint16_t HB_SRC_UNSUPPORTED_SFCRANGE = PNOR_COMP_ID | 0x0E; | 
|  | 99 |  | 
|  | 100 | // HBFW::PNOR:RC_PARTITION_TABLE_INVALID | 
|  | 101 | constexpr uint16_t HB_SRC_PARTITION_TABLE = PNOR_COMP_ID | 0x0C; | 
|  | 102 |  | 
|  | 103 | // HBFW::PNOR:RC_UNSUPPORTED_HARDWARE | 
|  | 104 | constexpr uint16_t HB_SRC_UNSUPPORTED_HARDWARE = PNOR_COMP_ID | 0x0A; | 
|  | 105 |  | 
|  | 106 | // HBFW::PNOR:RC_PNOR_CORRUPTION | 
|  | 107 | constexpr uint16_t HB_SRC_PNOR_CORRUPTION = PNOR_COMP_ID | 0x99; | 
|  | 108 |  | 
|  | 109 | /** @brief Handle terminate immediate special attentions */ | 
| Ben Tyner | 792f32f | 2020-06-02 08:50:47 -0500 | [diff] [blame] | 110 | int tiHandler(TiDataArea* i_tiDataArea); | 
| Ben Tyner | 9ae5ca4 | 2020-02-28 13:13:50 -0600 | [diff] [blame] | 111 |  | 
| Ben Tyner | 8c5e4f4 | 2020-10-28 11:11:55 -0500 | [diff] [blame] | 112 | /** @brief Handle phyp terminate immediately special attention */ | 
|  | 113 | void handlePhypTi(TiDataArea* i_tiDataArea); | 
|  | 114 |  | 
|  | 115 | /** @brief Handle hostboot terminate immediately special attention */ | 
|  | 116 | void handleHbTi(TiDataArea* i_tiDataArea); | 
|  | 117 |  | 
| Ben Tyner | ff17f96 | 2020-09-23 08:21:19 -0500 | [diff] [blame] | 118 | /** | 
| Ben Tyner | 4071772 | 2020-09-23 09:43:20 -0500 | [diff] [blame] | 119 | * @brief Parse TI info data as PHYP/OPAL data | 
|  | 120 | * | 
|  | 121 | * Read the TI data, parse as PHYP/OPAL data and place into map. | 
|  | 122 | */ | 
|  | 123 | void parsePhypOpalTiInfo(std::map<std::string, std::string>& i_map, | 
|  | 124 | TiDataArea* i_tiDataArea); | 
|  | 125 |  | 
|  | 126 | /** | 
|  | 127 | * @brief Parse TI info data as hostboot data | 
|  | 128 | * | 
|  | 129 | * Read the TI data, parse as hostboot data and place into map. | 
|  | 130 | */ | 
|  | 131 | void parseHbTiInfo(std::map<std::string, std::string>& i_map, | 
|  | 132 | TiDataArea* i_tiDataArea); | 
|  | 133 |  | 
| Ben Tyner | a16758b | 2021-12-07 10:38:05 -0600 | [diff] [blame] | 134 | constexpr uint8_t defaultPhypTiInfo[0x58] = { | 
|  | 135 | 0x01, 0xa1, 0x02, 0xa8, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, | 
|  | 136 | 0x09, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 137 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 138 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 139 | 0x00, 0x00, 0x00, 0x00, 0x42, 0x37, 0x30, 0x30, 0x46, 0x46, 0x46, | 
|  | 140 | 0x46, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, | 
|  | 141 | 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, | 
|  | 142 | 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; | 
|  | 143 |  | 
|  | 144 | constexpr uint8_t defaultHbTiInfo[0x58] = { | 
|  | 145 | 0x01, 0xa1, 0x02, 0xa8, 0x00, TI_WITH_SRC, 0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 146 | 0x09, 0x01, 0x00, 0x00, 0x00, 0xbc,        0x80, 0x1b, 0x99, 0x00, 0x00, | 
|  | 147 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 148 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 149 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 150 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 151 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00, 0x00, | 
|  | 152 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        0x00, 0x00, 0x00, 0x00, 0x00}; | 
|  | 153 |  | 
| Ben Tyner | 9ae5ca4 | 2020-02-28 13:13:50 -0600 | [diff] [blame] | 154 | } // namespace attn |