blob: ab65beb4b53d95f4696a8ad42767f889fec0addb [file] [log] [blame]
Angel Pons118a9c72020-04-02 23:48:34 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2/* This file is part of the coreboot project. */
Julius Werner99f46832018-05-16 14:14:04 -07003
4#include <bootblock_common.h>
Julius Werner98eeb962019-12-11 15:47:42 -08005#include <commonlib/bsd/compression.h>
Julius Werner99f46832018-05-16 14:14:04 -07006#include <delay.h>
7#include <program_loading.h>
8#include <symbols.h>
Elyes HAOUASb5622442019-07-11 09:22:02 +02009#include <timestamp.h>
Julius Werner99f46832018-05-16 14:14:04 -070010
11extern u8 compressed_bootblock[];
12asm (
13 ".pushsection .data.compressed_bootblock,\"a\",@progbits\n\t"
14 ".type compressed_bootblock, %object\n\t"
15 ".balign 8\n"
16 "compressed_bootblock:\n\t"
17 ".incbin \"" __BUILD_DIR__ "/cbfs/" CONFIG_CBFS_PREFIX "/bootblock.lz4\"\n\t"
18 ".size compressed_bootblock, . - compressed_bootblock\n\t"
19 ".popsection\n\t"
20);
21
22struct bootblock_arg arg = {
23 .base_timestamp = 0,
24 .num_timestamps = 2,
25 .timestamps = {
26 { .entry_id = TS_START_ULZ4F },
27 { .entry_id = TS_END_ULZ4F },
28 },
29};
30
31struct prog prog_bootblock = {
32 .type = PROG_BOOTBLOCK,
33 .entry = (void *)_bootblock,
34 .arg = &arg,
35};
36
37__weak void decompressor_soc_init(void) { /* no-op */ }
38
39void main(void)
40{
41 init_timer();
42
Julius Wernercd49cce2019-03-05 16:53:33 -080043 if (CONFIG(COLLECT_TIMESTAMPS))
Julius Werner99f46832018-05-16 14:14:04 -070044 arg.base_timestamp = timestamp_get();
45
46 decompressor_soc_init();
47
Julius Wernercd49cce2019-03-05 16:53:33 -080048 if (CONFIG(COLLECT_TIMESTAMPS))
Julius Werner99f46832018-05-16 14:14:04 -070049 arg.timestamps[0].entry_stamp = timestamp_get();
50
51 size_t out_size = ulz4f(compressed_bootblock, _bootblock);
52 prog_segment_loaded((uintptr_t)_bootblock, out_size, SEG_FINAL);
53
Julius Wernercd49cce2019-03-05 16:53:33 -080054 if (CONFIG(COLLECT_TIMESTAMPS))
Julius Werner99f46832018-05-16 14:14:04 -070055 arg.timestamps[1].entry_stamp = timestamp_get();
56
57 prog_run(&prog_bootblock);
58}