@@ -23,70 +23,20 @@ void platform_segment_loaded(uintptr_t start, size_t size, int flags)
2323 payload_size = size ;
2424}
2525
26- /* TODO: include tags.h from SKL somehow */
27- #define SKL_TAG_CLASS_MASK 0xF0
28-
29- /* Tags with no particular class */
30- #define SKL_TAG_NO_CLASS 0x00
31- #define SKL_TAG_END 0x00
32- #define SKL_TAG_SETUP_INDIRECT 0x01
33- #define SKL_TAG_TAGS_SIZE 0x0F /* Always first */
34-
35- /* Tags specifying kernel type */
36- #define SKL_TAG_BOOT_CLASS 0x10
37- #define SKL_TAG_BOOT_LINUX 0x10
38- #define SKL_TAG_BOOT_MB2 0x11
39- #define SKL_TAG_BOOT_SIMPLE 0x12
40-
41- struct skl_tag_hdr {
42- uint8_t type ;
43- uint8_t len ;
44- } __packed ;
45-
46- struct skl_tag_tags_size {
47- struct skl_tag_hdr hdr ;
48- uint16_t size ;
49- } __packed ;
50-
51- struct skl_tag_boot_simple_payload {
52- struct skl_tag_hdr hdr ;
53- uint32_t base ;
54- uint32_t size ;
55- uint32_t entry ;
56- uint32_t arg ;
57- } __packed ;
58-
59- struct skl_tag_evtlog {
60- struct skl_tag_hdr hdr ;
61- uint32_t address ;
62- uint32_t size ;
63- } __packed ;
64-
65- struct skl_tag_hash {
66- struct skl_tag_hdr hdr ;
67- uint16_t algo_id ;
68- uint8_t digest [];
69- } __packed ;
70-
71- static inline void * next_tag (void * t )
72- {
73- void * x = t + ((struct skl_tag_hdr * )t )-> len ;
74- return x ;
75- }
76-
7726void platform_prog_run (struct prog * prog )
7827{
7928 void * skl = NULL ;
8029 uint16_t bootloader_data_offset ;
81- struct skl_tag_tags_size * tags ;
82- struct skl_tag_boot_simple_payload * sp ;
83- struct skl_tag_hdr * end ;
30+ struct slr_table * slrt ;
31+ struct slr_entry_dl_info * dl_info ;
32+ struct slr_entry_amd_info * amd_info ;
33+ struct slr_entry_hdr * end ;
8434
8535 /*
8636 * Check if we're on 32b platform.
8737 * TODO: add support for 64b?
8838 */
89- assert (sizeof (skl ) == 4 );
39+ _Static_assert (sizeof (skl ) == 4 );
9040
9141 hexdump (prog , sizeof (* prog ));
9242
@@ -101,30 +51,37 @@ void platform_prog_run(struct prog *prog)
10151
10252 cbfs_load (CONFIG_CBFS_PREFIX "/drtm_payload" , skl , 64 * KiB );
10353
104- bootloader_data_offset = ((uint16_t * )skl )[ 1 ] ;
105- tags = (struct skl_tag_tags_size * )(skl + bootloader_data_offset );
54+ bootloader_data_offset = ((struct sl_header * )skl )-> bootloader_data_offset ;
55+ slrt = (struct slr_table * )(skl + bootloader_data_offset );
10656
107- memset (tags , 0 , 64 * KiB - (skl - (void * )tags ));
57+ memset (slrt , 0 , 64 * KiB - (skl - (void * )slrt ));
10858
109- tags -> hdr .type = SKL_TAG_TAGS_SIZE ;
110- tags -> hdr .len = sizeof (struct skl_tag_tags_size );
111- tags -> size += tags -> hdr .len ;
59+ slrt -> magic = 0x4452544d ;
60+ slrt -> revision = 0x1 ;
61+ slrt -> architecture = 0x2 ;
62+ slrt -> size = 16 ;
63+ slrt -> max_size = 0 ;
11264
113- sp = next_tag ( tags ) ;
114- sp -> hdr .type = SKL_TAG_BOOT_SIMPLE ;
115- sp -> hdr .len = sizeof (struct skl_tag_boot_simple_payload );
116- sp -> base = payload_start ;
117- sp -> size = payload_size ;
118- sp -> entry = (uint32_t )prog -> entry ;
119- sp -> arg = ( uint32_t ) prog -> arg ;
120- tags -> size += sp -> hdr .len ;
65+ dl_info = ( struct slr_entry_dl_info * ) slrt -> entries ;
66+ dl_info -> hdr .tag = SLR_ENTRY_DL_INFO ;
67+ dl_info -> hdr .size = sizeof (struct slr_entry_dl_info );
68+ dl_info -> dlme_base = payload_start ;
69+ dl_info -> dlme_size = payload_size ;
70+ dl_info -> dlme_entry = (uint32_t )prog -> entry ;
71+ dl_info -> bl_context . bootloader = SLR_BOOTLOADER_GRUB ; // TODO: BOOTLOADER_COREBOOT?
72+ slrt -> size += dl_info -> hdr .size ;
12173
122- /* TODO: DRTM TPM event log and SKL hash(es) */
74+ amd_info = next_entry (dl_info );
75+ amd_info -> hdr .tag = SLR_ENTRY_AMD_INFO ;
76+ amd_info -> hdr .size = sizeof (* amd_info );
77+ slrt -> size += amd_info -> hdr .size ;
78+
79+ end = next_entry (amd_info );
80+ end -> tag = SLR_ENTRY_END ;
81+ end -> size = sizeof (struct slr_entry_hdr );
82+ slrt -> size += end -> size ;
12383
124- end = next_tag (sp );
125- end -> type = SKL_TAG_END ;
126- end -> len = sizeof (struct skl_tag_hdr );
127- tags -> size += end -> len ;
84+ /* TODO: DRTM TPM event log and SKL hash(es) */
12885
12986 msr_t msr ;
13087
0 commit comments