1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 #include <bootblock_common.h>
4 #include <console/console.h>
5 #include <cpu/x86/mtrr.h>
6 #include <device/pci.h>
9 #include <intelblocks/fast_spi.h>
10 #include <intelblocks/lpc_lib.h>
11 #include <intelblocks/tco.h>
12 #include <security/intel/cbnt/cbnt.h>
13 #include <soc/bootblock.h>
14 #include <soc/iomap.h>
15 #include <soc/pci_devs.h>
17 #if (CONFIG(PLATFORM_USES_FSP2_4))
18 const FSPT_UPD temp_ram_init_params
= {
20 .Signature
= FSPT_UPD_SIGNATURE
,
31 .MicrocodeRegionBase
= 0,
32 .MicrocodeRegionLength
= 0,
33 .CodeRegionBase
= (UINT64
)CACHE_ROM_BASE
,
34 .CodeRegionLength
= (UINT64
)CACHE_ROM_SIZE
,
37 .FsptPort80RouteDisable
= 0,
38 .ReservedTempRamInitUpd
= {0},
40 .UpdTerminator
= 0x55AA,
43 const FSPT_UPD temp_ram_init_params
= {
45 .Signature
= FSPT_UPD_SIGNATURE
,
50 .MicrocodeRegionBase
= (UINT32
)CONFIG_CPU_MICROCODE_CBFS_LOC
,
51 .MicrocodeRegionLength
= (UINT32
)CONFIG_CPU_MICROCODE_CBFS_LEN
,
52 .CodeRegionBase
= (UINT32
)CACHE_ROM_BASE
,
53 .CodeRegionLength
= (UINT32
)CACHE_ROM_SIZE
,
57 .FsptPort80RouteDisable
= 0,
58 .ReservedTempRamInitUpd
= {0},
60 .UnusedUpdSpace0
= {0},
61 .UpdTerminator
= 0x55AA,
63 #endif //(!CONFIG(PLATFORM_USES_FSP2_4))
65 static uint64_t assembly_timestamp
;
66 static uint64_t bootblock_timestamp
;
68 asmlinkage
void bootblock_c_entry(uint64_t base_timestamp
)
71 * FSP-T does not respect its own API and trashes registers
72 * coreboot uses to store its initial timestamp.
74 assembly_timestamp
= base_timestamp
;
75 bootblock_timestamp
= timestamp_get();
76 fast_spi_cache_bios_region();
78 bootblock_main_with_basetime(MIN(assembly_timestamp
, bootblock_timestamp
));
81 void bootblock_soc_early_init(void)
83 fast_spi_early_init(SPI_BASE_ADDRESS
);
86 /* Set up P2SB BAR. This is needed for PCR to work */
87 uint8_t p2sb_cmd
= pci_s_read_config8(PCH_DEV_P2SB
, PCI_COMMAND
);
88 pci_s_write_config8(PCH_DEV_P2SB
, PCI_COMMAND
, p2sb_cmd
| PCI_COMMAND_MEMORY
);
89 pci_s_write_config32(PCH_DEV_P2SB
, PCI_BASE_ADDRESS_0
, CONFIG_PCR_BASE_ADDRESS
);
92 void bootblock_soc_init(void)
94 if (assembly_timestamp
> bootblock_timestamp
)
95 printk(BIOS_WARNING
, "Invalid initial timestamp detected\n");
100 if (CONFIG(INTEL_CBNT_LOGGING
))
101 intel_cbnt_log_registers();
103 bootblock_pch_init();
105 /* Programming TCO_BASE_ADDRESS and TCO Timer Halt */
108 report_platform_info();