diff options
author | Stephen Cprek <smcprek@us.ibm.com> | 2016-12-06 10:42:23 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-01-30 11:18:51 -0500 |
commit | 6b650f5428297e8dde075d25e7862a20c8d47f04 (patch) | |
tree | b268ac9fb258732a7aea73179c2f09992b76cc36 /src/securerom/hw_utils.C | |
parent | aff3f67b49b87d5e2755b364ecb512641bbb4540 (diff) | |
download | talos-hostboot-6b650f5428297e8dde075d25e7862a20c8d47f04.tar.gz talos-hostboot-6b650f5428297e8dde075d25e7862a20c8d47f04.zip |
Compile ROM code within Hostboot
Additionally added version id to resolve story 135747
RTC: 143902
Change-Id: I67ad4b28b76464aaa58ec2c344cd1f9ceef9ff73
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/33608
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Nicholas E. Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Reviewed-by: Martin Gloff <mgloff@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/securerom/hw_utils.C')
-rw-r--r-- | src/securerom/hw_utils.C | 252 |
1 files changed, 124 insertions, 128 deletions
diff --git a/src/securerom/hw_utils.C b/src/securerom/hw_utils.C index 19d4ee947..7adcb35a8 100644 --- a/src/securerom/hw_utils.C +++ b/src/securerom/hw_utils.C @@ -22,13 +22,9 @@ /* permissions and limitations under the License. */ /* */ /* IBM_PROLOG_END_TAG */ -/**************************************************************************** - * - ****************************************************************************/ -#include <hw_utils.h> -#include <status_codes.h> -/****************************************************************************/ +#include <securerom/hw_utils.H> +#include <securerom/status_codes.H> #ifdef EMULATE_HW @@ -36,187 +32,187 @@ #include <unistd.h> #include <sys/mman.h> #include <limits.h> -#include <stdint.h> /* uint_fast8_t, uintN_t */ -#include <inttypes.h> +#include <stdint.h> /* uint_fast8_t, uintN_t */ +#include "inttypes.H" hw_settings HW; -/****************************************************************************/ -void HW_Init (void) { - /* Open the file that will be used to fill the memory contents of the mmap */ - HW.mfd = open ("/dev/zero", O_RDWR, 0); - if (HW.mfd < 0) { - printf ("HW_Init: can't create memory file"); - exit(1); - } +void HW_Init (void) +{ + // Open the file that will be used to fill the memory contents of the mmap + HW.mfd = open ("/dev/zero", O_RDWR, 0); + if (HW.mfd < 0) + { + printf ("HW_Init: can't create memory file"); + exit(1); + } /* Allocate Memory */ #ifdef HOST_64 - HW.data = (uint8_t*) mmap64 (0, TOTAL_TEST_MEMORY, - PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, HW.mfd, 0); + HW.data = (uint8_t*) mmap64 (0, TOTAL_TEST_MEMORY, + PROT_READ|PROT_WRITE|PROT_EXEC, + MAP_PRIVATE, HW.mfd, 0); #else - HW.data = (uint8_t*) mmap (0, TOTAL_TEST_MEMORY, - PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, HW.mfd, 0); + HW.data = (uint8_t*) mmap (0, TOTAL_TEST_MEMORY, + PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, + HW.mfd, 0); #endif - if ((uint32_t) HW.data == -1) { - printf ("Unable to allocate HW Memory of size %d", TOTAL_TEST_MEMORY); - HW_Free(); - exit(1); - } - HW.memory = HW.data+0x1000-((uint32_t)HW.data&0xfff); + if ((uint32_t) HW.data == -1) + { + printf ("Unable to allocate HW Memory of size %d", TOTAL_TEST_MEMORY); + HW_Free(); + exit(1); + } + HW.memory = HW.data+0x1000-((uint32_t)HW.data&0xfff); } -/****************************************************************************/ void HW_Free (void) { - close (HW.mfd); + close (HW.mfd); } -/****************************************************************************/ void Log (uint64_t code) { - mtspr_SCRATCH2 (code); + mtspr_SCRATCH2 (code); +} + +void Check_Stop (const char* msg) +{ + printf ("CHECK STOP '%s'\n", msg); + printf ("SCRATCH3= 0x%08llX\n", mfspr_SCRATCH3()); + exit(FAIL); } -/****************************************************************************/ -void Check_Stop (char* msg) { - printf ("CHECK STOP '%s'\n", msg); - printf ("SCRATCH3= 0x%08llX\n", mfspr_SCRATCH3()); - exit(FAIL); +void Error_Stop (uint64_t code, const char* msg) +{ + mtspr_SCRATCH3 (ERROR_EVENT|code); + Check_Stop (msg); } -/****************************************************************************/ -void Error_Stop (uint64_t code, char* msg) { - mtspr_SCRATCH3 (ERROR_EVENT|code); - Check_Stop (msg); +void assem_DCBI (uint64_t addr) +{ + addr = physical_addr(addr)&CACHE_MASK; + memset(Convert_Mem_Addr(addr),0xff,CACHE_LINE); // destroys contents in model } -/****************************************************************************/ -void assem_DCBI (uint64_t addr) { - addr = physical_addr(addr)&CACHE_MASK; - memset(Convert_Mem_Addr(addr),0xff,CACHE_LINE); // destroys contents in model - } -/****************************************************************************/ void assem_DCBZ (uint64_t addr) { - addr = physical_addr(addr)&CACHE_MASK; - memset(Convert_Mem_Addr(addr),0,CACHE_LINE); + addr = physical_addr(addr)&CACHE_MASK; + memset(Convert_Mem_Addr(addr),0,CACHE_LINE); } -/****************************************************************************/ + void assem_DCBST (uint8_t* addr) {} -/****************************************************************************/ void assem_ICBI (uint64_t* addr) {} -/****************************************************************************/ void assem_SYNC (void) {} -/****************************************************************************/ void assem_ISYNC (void) {} -/****************************************************************************/ -void mtspr_HRMOR (uint64_t addr) { - HW.HRMOR = addr & HRMOR_MASK; -} - -/****************************************************************************/ -//uint64_t mfspr_HRMOR (void) { -// return HW.HRMOR; -//} - -/****************************************************************************/ - -/****************************************************************************/ -uint64_t getscom_FSP_BAR_value (uint64_t base) { - return HW.FSP_BAR.value; -} - -/****************************************************************************/ -uint64_t getscom_FSP_BAR_mask (uint64_t base) { - return HW.FSP_BAR.mask; +void mtspr_HRMOR (uint64_t addr) +{ + HW.HRMOR = addr & HRMOR_MASK; } -/****************************************************************************/ -void getscom_HW_ECID (uint64_t base, uint8_t* buf) { - memcpy(buf, HW.ECID, ECID_SIZE); +uint64_t getscom_FSP_BAR_value (uint64_t base) +{ + return HW.FSP_BAR.value; } -/****************************************************************************/ -void getscom_PIBMEM_HW_Key_Hash (uint64_t base, uint8_t* buf) { - memcpy(buf, HW.PIBMEM_HW_KEY_HASH, SHA512_DIGEST_SIZE); +uint64_t getscom_FSP_BAR_mask (uint64_t base) +{ + return HW.FSP_BAR.mask; } -/****************************************************************************/ -uint8_t* Convert_Mem_Addr (uint64_t addr) { - if (addr >= TEST_SYSTEM_MEMORY) return NULL; - return HW.memory+addr; +void getscom_HW_ECID (uint64_t base, uint8_t* buf) +{ + memcpy(buf, HW.ECID, ECID_SIZE); } -/****************************************************************************/ -uint64_t physical_addr (uint64_t addr) { - if (addr & HRMOR_IGNORE) addr = PHYSICAL(addr); - else addr = PHYSICAL(addr) | HW.HRMOR; - return addr; +uint8_t* Convert_Mem_Addr (uint64_t addr) +{ + if (addr >= TEST_SYSTEM_MEMORY) + { + return NULL; + } + return HW.memory+addr; } -/****************************************************************************/ -uint64_t Convert_Mem_Offset (uint8_t* addr) { - if (addr < HW.memory) return 0; - return (uint64_t)(uint32_t)(addr-HW.memory); +uint64_t physical_addr (uint64_t addr) +{ + if (addr & HRMOR_IGNORE) + { + addr = PHYSICAL(addr); + } + else + { + addr = PHYSICAL(addr) | HW.HRMOR; + } + return addr; +} + +uint64_t Convert_Mem_Offset (uint8_t* addr) +{ + if (addr < HW.memory) + { + return 0; + } + return (uint64_t)(uint32_t)(addr-HW.memory); } -/****************************************************************************/ -uint16_t GET16(uint16_t data) { +uint16_t GET16(uint16_t data) +{ #ifdef __BIG_ENDIAN - return data; + return data; #endif #ifdef __LITTLE_ENDIAN - return ((data&0x00FF)<<8 - |(data&0xFF00)>>8 - ); + return ((data&0x00FF)<<8 + | (data&0xFF00)>>8 + ); #endif } -/****************************************************************************/ -uint32_t GET32 (uint32_t data) { +uint32_t GET32 (uint32_t data) +{ #ifdef __BIG_ENDIAN - return data; + return data; #endif #ifdef __LITTLE_ENDIAN - return ((data&0x000000FF)<<24 - |(data&0x0000FF00)<<8 - |(data&0x00FF0000)>>8 - |(data&0xFF000000)>>24 - ); + return ((data&0x000000FF)<<24 + |(data&0x0000FF00)<<8 + |(data&0x00FF0000)>>8 + |(data&0xFF000000)>>24 + ); #endif } -/****************************************************************************/ -uint64_t GET64 (uint64_t data) { +uint64_t GET64 (uint64_t data) +{ #ifdef __BIG_ENDIAN - return data; + return data; #endif #ifdef __LITTLE_ENDIAN - return ((data&0x00000000000000FFull)<<(7*8) - |(data&0x000000000000FF00ull)<<(5*8) - |(data&0x0000000000FF0000ull)<<(3*8) - |(data&0x00000000FF000000ull)<<(1*8) - |(data&0x000000FF00000000ull)>>(1*8) - |(data&0x0000FF0000000000ull)>>(3*8) - |(data&0x00FF000000000000ull)>>(5*8) - |(data&0xFF00000000000000ull)>>(7*8) - ); + return ((data&0x00000000000000FFull)<<(7*8) + |(data&0x000000000000FF00ull)<<(5*8) + |(data&0x0000000000FF0000ull)<<(3*8) + |(data&0x00000000FF000000ull)<<(1*8) + |(data&0x000000FF00000000ull)>>(1*8) + |(data&0x0000FF0000000000ull)>>(3*8) + |(data&0x00FF000000000000ull)>>(5*8) + |(data&0xFF00000000000000ull)>>(7*8) + ); #endif } #else -void __attribute__((noreturn)) Check_Stop(void) { - //do not use XSCOM as the XSCOM base is not known for sure +void __attribute__((noreturn)) Check_Stop(void) +{ + //do not use XSCOM as the XSCOM base is not known for sure - //set AVP_out to (optionally) cause secure checkstop - mtspr(SPRC,SPRC_AVP_out); - mtspr(SPRD,-1LL); + //set AVP_out to (optionally) cause secure checkstop + mtspr(SPRC,SPRC_AVP_out); + mtspr(SPRD,-1LL); - asm volatile(" li 0,0 \n" - " mtmsr 0 \n" //ensure there is no error handler so it will checkstop instead - " lis 0,-1107 \n" - " stdcix 0,0,0 \n" //store to invalid address - " eieio "); - for(;;) {} + asm volatile(" li 0,0 \n" + " mtmsr 0 \n" //ensure there is no error handler so it will checkstop instead + " lis 0,-1107 \n" + " stdcix 0,0,0 \n" //store to invalid address + " eieio "); + for(;;) {} } -#endif //emulate_hw +#endif //EMULATE_HW |