cpu/x86/mp_init: use cb_err as mp_init_with_smm return type

Using cb_err as return type clarifies the meaning of the different
return values. This patch also adds the types.h include that provides
the definition of the cb_err enum and checks the return value of
mp_init_with_smm against the enum values instead of either checking if
it's non-zero or less than zero to handle the error case.

Signed-off-by: Felix Held <felix-coreboot@felixheld.de>
Change-Id: Ibcd4a9a63cc87fe176ba885ced0f00832587d492
Reviewed-on: https://review.coreboot.org/c/coreboot/+/58491
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
Felix Held 2021-10-20 20:18:12 +02:00 committed by Felix Held
parent e0e49c858b
commit d27ef5bf6f
23 changed files with 52 additions and 36 deletions

View file

@ -17,6 +17,7 @@
#include <northbridge/intel/haswell/haswell.h> #include <northbridge/intel/haswell/haswell.h>
#include <southbridge/intel/lynxpoint/pch.h> #include <southbridge/intel/lynxpoint/pch.h>
#include <cpu/intel/common/common.h> #include <cpu/intel/common/common.h>
#include <types.h>
#include "haswell.h" #include "haswell.h"
#include "chip.h" #include "chip.h"
@ -641,7 +642,7 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -7,6 +7,7 @@
#include <cpu/intel/smm_reloc.h> #include <cpu/intel/smm_reloc.h>
#include <cpu/intel/common/common.h> #include <cpu/intel/common/common.h>
#include <device/device.h> #include <device/device.h>
#include <types.h>
/* Parallel MP initialization support. */ /* Parallel MP initialization support. */
static void pre_mp_init(void) static void pre_mp_init(void)
@ -97,6 +98,6 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -19,6 +19,7 @@
#include <cpu/intel/smm_reloc.h> #include <cpu/intel/smm_reloc.h>
#include <cpu/intel/common/common.h> #include <cpu/intel/common/common.h>
#include <smp/node.h> #include <smp/node.h>
#include <types.h>
static void configure_thermal_target(void) static void configure_thermal_target(void)
{ {
@ -174,7 +175,7 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -19,6 +19,7 @@
#include <cpu/intel/smm_reloc.h> #include <cpu/intel/smm_reloc.h>
#include <cpu/intel/common/common.h> #include <cpu/intel/common/common.h>
#include <smbios.h> #include <smbios.h>
#include <types.h>
/* Convert time in seconds to POWER_LIMIT_1_TIME MSR value */ /* Convert time in seconds to POWER_LIMIT_1_TIME MSR value */
static const u8 power_limit_time_sec_to_msr[] = { static const u8 power_limit_time_sec_to_msr[] = {
@ -430,7 +431,7 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -1096,9 +1096,9 @@ static void fill_mp_state(struct mp_state *state, const struct mp_ops *ops)
mp_state.ops.per_cpu_smm_trigger = smm_initiate_relocation; mp_state.ops.per_cpu_smm_trigger = smm_initiate_relocation;
} }
int mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops) enum cb_err mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops)
{ {
int ret; enum cb_err ret;
void *default_smm_area; void *default_smm_area;
struct mp_params mp_params; struct mp_params mp_params;
@ -1111,7 +1111,7 @@ int mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops)
if (mp_state.cpu_count <= 0) { if (mp_state.cpu_count <= 0) {
printk(BIOS_ERR, "Invalid cpu_count: %d\n", mp_state.cpu_count); printk(BIOS_ERR, "Invalid cpu_count: %d\n", mp_state.cpu_count);
return -1; return CB_ERR;
} }
/* Sanity check SMM state. */ /* Sanity check SMM state. */
@ -1133,14 +1133,12 @@ int mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops)
/* Perform backup of default SMM area. */ /* Perform backup of default SMM area. */
default_smm_area = backup_default_smm_area(); default_smm_area = backup_default_smm_area();
/* TODO: Remove this return value translation after changing the return type of ret = mp_init(cpu_bus, &mp_params);
mp_init_with_smm to enum cb_err */
ret = mp_init(cpu_bus, &mp_params) == CB_SUCCESS ? 0 : -1;
restore_default_smm_area(default_smm_area); restore_default_smm_area(default_smm_area);
/* Signal callback on success if it's provided. */ /* Signal callback on success if it's provided. */
if (ret == 0 && mp_state.ops.post_mp_init != NULL) if (ret == CB_SUCCESS && mp_state.ops.post_mp_init != NULL)
mp_state.ops.post_mp_init(); mp_state.ops.post_mp_init();
return ret; return ret;

View file

@ -5,8 +5,7 @@
#include <arch/smp/atomic.h> #include <arch/smp/atomic.h>
#include <cpu/x86/smm.h> #include <cpu/x86/smm.h>
#include <stddef.h> #include <types.h>
#include <stdint.h>
#define CACHELINE_SIZE 64 #define CACHELINE_SIZE 64
@ -86,10 +85,9 @@ struct mp_ops {
}; };
/* /*
* mp_init_with_smm() returns < 0 on failure and 0 on success. The mp_ops * The mp_ops argument is used to drive the multiprocess initialization. Unless
* argument is used to drive the multiprocess initialization. Unless otherwise * otherwise stated each callback is called on the BSP only. The sequence of
* stated each callback is called on the BSP only. The sequence of operations * operations is the following:
* is the following:
* 1. pre_mp_init() * 1. pre_mp_init()
* 2. get_cpu_count() * 2. get_cpu_count()
* 3. get_smm_info() * 3. get_smm_info()
@ -103,7 +101,7 @@ struct mp_ops {
* 10. mp_initialize_cpu() for each cpu * 10. mp_initialize_cpu() for each cpu
* 11. post_mp_init() * 11. post_mp_init()
*/ */
int mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops); enum cb_err mp_init_with_smm(struct bus *cpu_bus, const struct mp_ops *mp_ops);
enum { enum {
/* Function runs on all cores (both BSP and APs) */ /* Function runs on all cores (both BSP and APs) */

View file

@ -13,6 +13,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <smbios.h> #include <smbios.h>
#include <types.h>
#include "memory.h" #include "memory.h"
#include "fw_cfg.h" #include "fw_cfg.h"
@ -250,7 +251,7 @@ void mp_init_cpus(struct bus *cpu_bus)
{ {
const struct mp_ops *ops = CONFIG(SMM_TSEG) ? &mp_ops_with_smm : &mp_ops_no_smm; const struct mp_ops *ops = CONFIG(SMM_TSEG) ? &mp_ops_with_smm : &mp_ops_no_smm;
if (mp_init_with_smm(cpu_bus, ops)) if (mp_init_with_smm(cpu_bus, ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -15,6 +15,7 @@
#include <device/device.h> #include <device/device.h>
#include <soc/cpu.h> #include <soc/cpu.h>
#include <soc/iomap.h> #include <soc/iomap.h>
#include <types.h>
_Static_assert(CONFIG_MAX_CPUS == 16, "Do not override MAX_CPUS. To reduce the number of " _Static_assert(CONFIG_MAX_CPUS == 16, "Do not override MAX_CPUS. To reduce the number of "
"available cores, use the downcore_mode and disable_smt devicetree settings instead."); "available cores, use the downcore_mode and disable_smt devicetree settings instead.");
@ -51,7 +52,7 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
/* Clear for take-off */ /* Clear for take-off */
if (mp_init_with_smm(cpu_bus, &mp_ops) < 0) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* pre_mp_init made the flash not cacheable. Reset to WP for performance. */ /* pre_mp_init made the flash not cacheable. Reset to WP for performance. */

View file

@ -19,6 +19,7 @@
#include <soc/iomap.h> #include <soc/iomap.h>
#include <console/console.h> #include <console/console.h>
#include <cpu/amd/microcode.h> #include <cpu/amd/microcode.h>
#include <types.h>
_Static_assert(CONFIG_MAX_CPUS == 8, "Do not override MAX_CPUS. To reduce the number of " _Static_assert(CONFIG_MAX_CPUS == 8, "Do not override MAX_CPUS. To reduce the number of "
"available cores, use the downcore_mode and disable_smt devicetree settings instead."); "available cores, use the downcore_mode and disable_smt devicetree settings instead.");
@ -55,7 +56,7 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
/* Clear for take-off */ /* Clear for take-off */
if (mp_init_with_smm(cpu_bus, &mp_ops) < 0) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* pre_mp_init made the flash not cacheable. Reset to WP for performance. */ /* pre_mp_init made the flash not cacheable. Reset to WP for performance. */

View file

@ -18,6 +18,7 @@
#include <soc/smi.h> #include <soc/smi.h>
#include <soc/iomap.h> #include <soc/iomap.h>
#include <console/console.h> #include <console/console.h>
#include <types.h>
/* /*
* MP and SMM loading initialization. * MP and SMM loading initialization.
@ -53,7 +54,7 @@ static const struct mp_ops mp_ops = {
void mp_init_cpus(struct bus *cpu_bus) void mp_init_cpus(struct bus *cpu_bus)
{ {
/* Clear for take-off */ /* Clear for take-off */
if (mp_init_with_smm(cpu_bus, &mp_ops) < 0) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* The flash is now no longer cacheable. Reset to WP for performance. */ /* The flash is now no longer cacheable. Reset to WP for performance. */

View file

@ -23,6 +23,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <types.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)
{ {
@ -126,7 +127,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* Thermal throttle activation offset */ /* Thermal throttle activation offset */

View file

@ -28,6 +28,7 @@
#include <soc/iomap.h> #include <soc/iomap.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/pm.h> #include <soc/pm.h>
#include <types.h>
static const struct reg_script core_msr_script[] = { static const struct reg_script core_msr_script[] = {
#if !CONFIG(SOC_INTEL_GEMINILAKE) #if !CONFIG(SOC_INTEL_GEMINILAKE)
@ -250,7 +251,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
/* Clear for take-off */ /* Clear for take-off */
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -17,6 +17,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pattrs.h> #include <soc/pattrs.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <types.h>
/* Core level MSRs */ /* Core level MSRs */
static const struct reg_script core_msr_script[] = { static const struct reg_script core_msr_script[] = {
@ -196,6 +197,6 @@ void baytrail_init_cpus(struct device *dev)
{ {
struct bus *cpu_bus = dev->link_list; struct bus *cpu_bus = dev->link_list;
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -17,6 +17,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pattrs.h> #include <soc/pattrs.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <types.h>
/* Core level MSRs */ /* Core level MSRs */
static const struct reg_script core_msr_script[] = { static const struct reg_script core_msr_script[] = {
@ -205,6 +206,6 @@ void soc_init_cpus(struct device *dev)
{ {
struct bus *cpu_bus = dev->link_list; struct bus *cpu_bus = dev->link_list;
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -16,6 +16,7 @@
#include <cpu/x86/mtrr.h> #include <cpu/x86/mtrr.h>
#include <cpu/intel/microcode.h> #include <cpu/intel/microcode.h>
#include <cpu/intel/common/common.h> #include <cpu/intel/common/common.h>
#include <types.h>
#include "chip.h" #include "chip.h"
@ -189,7 +190,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* Thermal throttle activation offset */ /* Thermal throttle activation offset */

View file

@ -20,6 +20,7 @@
#include <soc/iomap.h> #include <soc/iomap.h>
#include <soc/smm.h> #include <soc/smm.h>
#include <soc/soc_util.h> #include <soc/soc_util.h>
#include <types.h>
static struct smm_relocation_attrs relo_attrs; static struct smm_relocation_attrs relo_attrs;
@ -296,6 +297,6 @@ void denverton_init_cpus(struct device *dev)
add_more_links(dev, 1); add_more_links(dev, 1);
/* Clear for take-off */ /* Clear for take-off */
if (mp_init_with_smm(dev->link_list, &mp_ops) < 0) if (mp_init_with_smm(dev->link_list, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -16,6 +16,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <types.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)
{ {
@ -117,7 +118,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* Thermal throttle activation offset */ /* Thermal throttle activation offset */

View file

@ -16,6 +16,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <types.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)
{ {
@ -153,6 +154,6 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
} }

View file

@ -16,6 +16,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <types.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)
{ {
@ -119,7 +120,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* Thermal throttle activation offset */ /* Thermal throttle activation offset */

View file

@ -22,6 +22,7 @@
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <soc/systemagent.h> #include <soc/systemagent.h>
#include <types.h>
#include "chip.h" #include "chip.h"
@ -211,7 +212,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* Thermal throttle activation offset */ /* Thermal throttle activation offset */

View file

@ -22,6 +22,7 @@
#include <soc/msr.h> #include <soc/msr.h>
#include <soc/pci_devs.h> #include <soc/pci_devs.h>
#include <soc/soc_chip.h> #include <soc/soc_chip.h>
#include <types.h>
static void soc_fsp_load(void) static void soc_fsp_load(void)
{ {
@ -125,7 +126,7 @@ static const struct mp_ops mp_ops = {
void soc_init_cpus(struct bus *cpu_bus) void soc_init_cpus(struct bus *cpu_bus)
{ {
if (mp_init_with_smm(cpu_bus, &mp_ops)) if (mp_init_with_smm(cpu_bus, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* Thermal throttle activation offset */ /* Thermal throttle activation offset */

View file

@ -24,6 +24,7 @@
#include <soc/smmrelocate.h> #include <soc/smmrelocate.h>
#include <soc/soc_util.h> #include <soc/soc_util.h>
#include <soc/util.h> #include <soc/util.h>
#include <types.h>
#include "chip.h" #include "chip.h"
@ -211,7 +212,7 @@ void cpx_init_cpus(struct device *dev)
intel_microcode_load_unlocked(microcode_patch); intel_microcode_load_unlocked(microcode_patch);
if (mp_init_with_smm(dev->link_list, &mp_ops) < 0) if (mp_init_with_smm(dev->link_list, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* /*

View file

@ -16,7 +16,7 @@
#include "chip.h" #include "chip.h"
#include <cpu/intel/smm_reloc.h> #include <cpu/intel/smm_reloc.h>
#include <cpu/intel/em64t101_save_state.h> #include <cpu/intel/em64t101_save_state.h>
#include <types.h>
static const config_t *chip_config = NULL; static const config_t *chip_config = NULL;
@ -231,7 +231,7 @@ void xeon_sp_init_cpus(struct device *dev)
config_reset_cpl3_csrs(); config_reset_cpl3_csrs();
/* calls src/cpu/x86/mp_init.c */ /* calls src/cpu/x86/mp_init.c */
if (mp_init_with_smm(dev->link_list, &mp_ops) < 0) if (mp_init_with_smm(dev->link_list, &mp_ops) != CB_SUCCESS)
printk(BIOS_ERR, "MP initialization failure.\n"); printk(BIOS_ERR, "MP initialization failure.\n");
/* update numa domain for all cpu devices */ /* update numa domain for all cpu devices */