Skip to content

Commit 8abdcd7

Browse files
committed
skinit: move to slrt tags
Signed-off-by: Marty E. Plummer <hanetzer@startmail.com>
1 parent 3456feb commit 8abdcd7

1 file changed

Lines changed: 31 additions & 74 deletions

File tree

src/soc/amd/common/skl/skinit.c

Lines changed: 31 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
7726
void 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

Comments
 (0)