diff options
author | Johnny Lin <johnny_lin@wiwynn.com> | 2023-01-17 10:43:19 +0800 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2023-05-23 20:22:33 +0000 |
commit | 3435f81ab754bd9dcdb6a63e19621561c3b145e4 (patch) | |
tree | 6214de7243466587da02b17d1ca62644c990ffd0 /src | |
parent | 14d69d03b79958ca35ed39405570ff37cfebfe1f (diff) |
soc/intel/xeon_sp: move and rename set_cmos_mrc_cold_boot_flag
1. Rename set_cmos_mrc_cold_boot_flag() to soc_set_mrc_cold_boot_flag
in case a certain platform may not support this via CMOS data, and
the function could in turn calls mainboard defined method in the
future. Move the code into soc_util.c.
2. Remove redundant static get_system_memory_map() from cpx/romstage.c
and call the soc_util.c one.
Change-Id: Ib7d9bed9092814658f4a0b1d6dcf3c7d79178048
Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/72029
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h | 17 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/cpx/romstage.c | 47 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/cpx/soc_util.c | 11 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/spr/include/soc/soc_util.h | 2 | ||||
-rw-r--r-- | src/soc/intel/xeon_sp/spr/soc_util.c | 2 |
5 files changed, 32 insertions, 47 deletions
diff --git a/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h b/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h index 5e9ab5a13c..91919b8a68 100644 --- a/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h +++ b/src/soc/intel/xeon_sp/cpx/include/soc/soc_util.h @@ -6,6 +6,22 @@ #include <hob_iiouds.h> #include <hob_memmap.h> +/* + * Address of the MRC status byte in CMOS. Should be reserved + * in mainboards' cmos.layout and not covered by checksum. + */ +#define CMOS_OFFSET_MRC_STATUS 0x47 + +#if CONFIG(USE_OPTION_TABLE) +#include "option_table.h" +#if CMOS_VSTART_mrc_status != CMOS_OFFSET_MRC_STATUS * 8 +#error "CMOS start for CPX-SP MRC status byte is not correct, check your cmos.layout" +#endif +#if CMOS_VLEN_mrc_status != 8 +#error "CMOS length for CPX-SP MRC status byte is not correct, check your cmos.layout" +#endif +#endif + const struct SystemMemoryMapHob *get_system_memory_map(void); uint8_t get_stack_busno(const uint8_t stack); @@ -14,5 +30,6 @@ uint32_t get_socket_ubox_busno(uint32_t socket); uint8_t get_cxl_node_count(void); int soc_get_stack_for_port(int port); +void soc_set_mrc_cold_boot_flag(bool cold_boot_required); #endif /* _SOC_UTIL_H_ */ diff --git a/src/soc/intel/xeon_sp/cpx/romstage.c b/src/soc/intel/xeon_sp/cpx/romstage.c index 43a74e20a9..265ab70d6d 100644 --- a/src/soc/intel/xeon_sp/cpx/romstage.c +++ b/src/soc/intel/xeon_sp/cpx/romstage.c @@ -8,53 +8,20 @@ #include <fsp/util.h> #include <hob_iiouds.h> #include <hob_memmap.h> -#include <pc80/mc146818rtc.h> #include <soc/ddr.h> #include <soc/romstage.h> #include <soc/pci_devs.h> #include <soc/intel/common/smbios.h> -#include <stdbool.h> +#include <soc/soc_util.h> #include <string.h> #include "chip.h" -/* - * Address of the MRC status byte in CMOS. Should be reserved - * in mainboards' cmos.layout and not covered by checksum. - */ -#define CMOS_OFFSET_MRC_STATUS 0x47 - -#if CONFIG(USE_OPTION_TABLE) -#include "option_table.h" -#if CMOS_VSTART_mrc_status != CMOS_OFFSET_MRC_STATUS * 8 -#error "CMOS start for CPX-SP MRC status byte is not correct, check your cmos.layout" -#endif -#if CMOS_VLEN_mrc_status != 8 -#error "CMOS length for CPX-SP MRC status byte is not correct, check your cmos.layout" -#endif -#endif - void __weak mainboard_memory_init_params(FSPM_UPD *mupd) { /* Default weak implementation */ } -static const struct SystemMemoryMapHob *get_system_memory_map(void) -{ - size_t hob_size; - const uint8_t mem_hob_guid[16] = FSP_SYSTEM_MEMORYMAP_HOB_GUID; - const struct SystemMemoryMapHob **memmap_addr; - - memmap_addr = (const struct SystemMemoryMapHob **) - fsp_find_extension_hob_by_guid(mem_hob_guid, &hob_size); - /* hob_size is the size of the 8-byte address not the hob data */ - assert(memmap_addr && hob_size != 0); - /* assert the pointer to the hob is not NULL */ - assert(*memmap_addr); - - return *memmap_addr; -} - static uint8_t get_error_correction_type(const uint8_t RasModesEnabled) { switch (RasModesEnabled) { @@ -155,16 +122,6 @@ void save_dimm_info(void) printk(BIOS_DEBUG, "%d out of %d DIMMs found\n", num_dimms, mem_info->dimm_cnt); } -static void set_cmos_mrc_cold_boot_flag(bool cold_boot_required) -{ - uint8_t mrc_status = cmos_read(CMOS_OFFSET_MRC_STATUS); - uint8_t new_mrc_status = (mrc_status & 0xfe) | cold_boot_required; - printk(BIOS_SPEW, "MRC status: 0x%02x want 0x%02x\n", mrc_status, new_mrc_status); - if (new_mrc_status != mrc_status) { - cmos_write(new_mrc_status, CMOS_OFFSET_MRC_STATUS); - } -} - void platform_fsp_memory_init_params_cb(FSPM_UPD *mupd, uint32_t version) { FSP_M_CONFIG *m_cfg = &mupd->FspmConfig; @@ -233,5 +190,5 @@ void platform_fsp_memory_init_params_cb(FSPM_UPD *mupd, uint32_t version) mainboard_memory_init_params(mupd); /* Adjust the "cold boot required" flag in CMOS. */ - set_cmos_mrc_cold_boot_flag(!mupd->FspmArchUpd.NvsBufferPtr); + soc_set_mrc_cold_boot_flag(!mupd->FspmArchUpd.NvsBufferPtr); } diff --git a/src/soc/intel/xeon_sp/cpx/soc_util.c b/src/soc/intel/xeon_sp/cpx/soc_util.c index 01057fa17c..031b2bb745 100644 --- a/src/soc/intel/xeon_sp/cpx/soc_util.c +++ b/src/soc/intel/xeon_sp/cpx/soc_util.c @@ -7,6 +7,7 @@ #include <soc/pci_devs.h> #include <soc/soc_util.h> #include <soc/util.h> +#include <pc80/mc146818rtc.h> const struct SystemMemoryMapHob *get_system_memory_map(void) { @@ -100,3 +101,13 @@ uint8_t soc_get_iio_ioapicid(int socket, int stack) } return ioapic_id; } + +void soc_set_mrc_cold_boot_flag(bool cold_boot_required) +{ + uint8_t mrc_status = cmos_read(CMOS_OFFSET_MRC_STATUS); + uint8_t new_mrc_status = (mrc_status & 0xfe) | cold_boot_required; + printk(BIOS_SPEW, "MRC status: 0x%02x want 0x%02x\n", mrc_status, new_mrc_status); + if (new_mrc_status != mrc_status) { + cmos_write(new_mrc_status, CMOS_OFFSET_MRC_STATUS); + } +} diff --git a/src/soc/intel/xeon_sp/spr/include/soc/soc_util.h b/src/soc/intel/xeon_sp/spr/include/soc/soc_util.h index 2028dfafe2..97938ead91 100644 --- a/src/soc/intel/xeon_sp/spr/include/soc/soc_util.h +++ b/src/soc/intel/xeon_sp/spr/include/soc/soc_util.h @@ -44,6 +44,6 @@ const EWL_PRIVATE_DATA *get_ewl_hob(void); uint32_t get_ubox_busno(uint32_t socket, uint8_t offset); uint32_t get_socket_ubox_busno(uint32_t socket); -void set_cmos_mrc_cold_boot_flag(bool cold_boot_required); +void soc_set_mrc_cold_boot_flag(bool cold_boot_required); #endif /* _SOC_UTIL_H_ */ diff --git a/src/soc/intel/xeon_sp/spr/soc_util.c b/src/soc/intel/xeon_sp/spr/soc_util.c index 94d172c37a..67cb0638b0 100644 --- a/src/soc/intel/xeon_sp/spr/soc_util.c +++ b/src/soc/intel/xeon_sp/spr/soc_util.c @@ -162,7 +162,7 @@ void bios_done_msr(void *unused) } } -void set_cmos_mrc_cold_boot_flag(bool cold_boot_required) +void soc_set_mrc_cold_boot_flag(bool cold_boot_required) { uint8_t mrc_status = cmos_read(CMOS_OFFSET_MRC_STATUS); uint8_t new_mrc_status = (mrc_status & 0xfe) | cold_boot_required; |