drivers/intel/fsp1.1: Simplify bootflow and clean up

This gets rid of the boilerplate back and forward calls between the
SOC/FSP-driver code and mainboard code.

Change-Id: I5d4a10d1da6b3ac5e65efd7f82607b56b80e08d4
Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32961
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-by: Frans Hendriks <fhendriks@eltan.com>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Arthur Heymans 2019-05-23 14:41:19 +02:00 committed by Patrick Georgi
parent 1ac5ecbfd1
commit 73ac12196c
7 changed files with 45 additions and 75 deletions

View File

@ -44,15 +44,13 @@ struct romstage_params {
void mainboard_memory_init_params(struct romstage_params *params, void mainboard_memory_init_params(struct romstage_params *params,
MEMORY_INIT_UPD *memory_params); MEMORY_INIT_UPD *memory_params);
void mainboard_romstage_entry(struct romstage_params *params); void mainboard_pre_raminit(struct romstage_params *params);
void mainboard_save_dimm_info(struct romstage_params *params); void mainboard_save_dimm_info(struct romstage_params *params);
void mainboard_add_dimm_info(struct romstage_params *params, void mainboard_add_dimm_info(struct romstage_params *params,
struct memory_info *mem_info, struct memory_info *mem_info,
int channel, int dimm, int index); int channel, int dimm, int index);
void raminit(struct romstage_params *params); void raminit(struct romstage_params *params);
void report_memory_config(void); void report_memory_config(void);
void romstage_common(struct romstage_params *params);
asmlinkage void romstage_main(FSP_INFO_HEADER *fih);
/* Initialize memory margin analysis settings. */ /* Initialize memory margin analysis settings. */
void setup_mma(MEMORY_INIT_UPD *memory_upd); void setup_mma(MEMORY_INIT_UPD *memory_upd);
void soc_after_ram_init(struct romstage_params *params); void soc_after_ram_init(struct romstage_params *params);

View File

@ -37,48 +37,7 @@
#include <timestamp.h> #include <timestamp.h>
#include <vendorcode/google/chromeos/chromeos.h> #include <vendorcode/google/chromeos/chromeos.h>
asmlinkage void romstage_main(FSP_INFO_HEADER *fih) static void raminit_common(struct romstage_params *params)
{
struct romstage_params params = {
.chipset_context = fih,
};
post_code(0x30);
timestamp_add_now(TS_START_ROMSTAGE);
/* Load microcode before RAM init */
if (CONFIG(SUPPORT_CPU_UCODE_IN_CBFS))
intel_update_microcode_from_cbfs();
/* Display parameters */
if (!CONFIG(NO_MMCONF_SUPPORT))
printk(BIOS_SPEW, "CONFIG_MMCONF_BASE_ADDRESS: 0x%08x\n",
CONFIG_MMCONF_BASE_ADDRESS);
printk(BIOS_INFO, "Using FSP 1.1\n");
/* Display FSP banner */
print_fsp_info(fih);
/* Stash FSP version. */
params.fsp_version = fsp_version(fih);
/* Get power state */
params.power_state = fill_power_state();
/* Call into mainboard. */
mainboard_romstage_entry(&params);
soc_after_ram_init(&params);
post_code(0x38);
}
void cache_as_ram_stage_main(FSP_INFO_HEADER *fih)
{
romstage_main(fih);
}
/* Entry from the mainboard. */
void romstage_common(struct romstage_params *params)
{ {
bool s3wake; bool s3wake;
struct region_device rdev; struct region_device rdev;
@ -153,6 +112,47 @@ void romstage_common(struct romstage_params *params)
full_reset(); full_reset();
} }
void cache_as_ram_stage_main(FSP_INFO_HEADER *fih)
{
struct romstage_params params = {
.chipset_context = fih,
};
post_code(0x30);
timestamp_add_now(TS_START_ROMSTAGE);
/* Load microcode before RAM init */
if (CONFIG(SUPPORT_CPU_UCODE_IN_CBFS))
intel_update_microcode_from_cbfs();
/* Display parameters */
if (!CONFIG(NO_MMCONF_SUPPORT))
printk(BIOS_SPEW, "CONFIG_MMCONF_BASE_ADDRESS: 0x%08x\n",
CONFIG_MMCONF_BASE_ADDRESS);
printk(BIOS_INFO, "Using FSP 1.1\n");
/* Display FSP banner */
print_fsp_info(fih);
/* Stash FSP version. */
params.fsp_version = fsp_version(fih);
/* Get power state */
params.power_state = fill_power_state();
/* Board initialization before and after RAM is enabled */
mainboard_pre_raminit(&params);
post_code(0x31);
/* Initialize memory */
raminit_common(&params);
soc_after_ram_init(&params);
post_code(0x38);
}
/* Initialize the power state */ /* Initialize the power state */
__weak struct chipset_power_state *fill_power_state(void) __weak struct chipset_power_state *fill_power_state(void)
{ {
@ -160,13 +160,8 @@ __weak struct chipset_power_state *fill_power_state(void)
} }
/* Board initialization before and after RAM is enabled */ /* Board initialization before and after RAM is enabled */
__weak void mainboard_romstage_entry( __weak void mainboard_pre_raminit(struct romstage_params *params)
struct romstage_params *params)
{ {
post_code(0x31);
/* Initialize memory */
romstage_common(params);
} }
/* Save the DIMM information for SMBIOS table 17 */ /* Save the DIMM information for SMBIOS table 17 */

View File

@ -19,13 +19,6 @@
#include "spd/spd_util.h" #include "spd/spd_util.h"
/* All FSP specific code goes in this block */
void mainboard_romstage_entry(struct romstage_params *rp)
{
/* Call back into chipset code with platform values updated. */
romstage_common(rp);
}
void mainboard_memory_init_params(struct romstage_params *params, void mainboard_memory_init_params(struct romstage_params *params,
MEMORY_INIT_UPD *memory_params) MEMORY_INIT_UPD *memory_params)
{ {

View File

@ -25,15 +25,13 @@
#include "spd/spd_util.h" #include "spd/spd_util.h"
#include "spd/spd.h" #include "spd/spd.h"
void mainboard_romstage_entry(struct romstage_params *params) void mainboard_pre_raminit(struct romstage_params *params)
{ {
#ifdef EC_ENABLE_KEYBOARD_BACKLIGHT #ifdef EC_ENABLE_KEYBOARD_BACKLIGHT
/* Turn on keyboard backlight to indicate we are booting */ /* Turn on keyboard backlight to indicate we are booting */
if (params->power_state->prev_sleep_state != ACPI_S3) if (params->power_state->prev_sleep_state != ACPI_S3)
google_chromeec_kbbacklight(25); google_chromeec_kbbacklight(25);
#endif #endif
/* Initialize memory */
romstage_common(params);
} }
void mainboard_memory_init_params(struct romstage_params *params, void mainboard_memory_init_params(struct romstage_params *params,

View File

@ -20,12 +20,6 @@
#include "gpio.h" #include "gpio.h"
#include "spd/spd.h" #include "spd/spd.h"
void mainboard_romstage_entry(struct romstage_params *params)
{
/* Initialize memory */
romstage_common(params);
}
void mainboard_memory_init_params(struct romstage_params *params, void mainboard_memory_init_params(struct romstage_params *params,
MEMORY_INIT_UPD *memory_params) MEMORY_INIT_UPD *memory_params)
{ {

View File

@ -33,12 +33,6 @@ void car_mainboard_pre_console_init(void)
nuvoton_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE); nuvoton_enable_serial(SERIAL_DEV, CONFIG_TTYS0_BASE);
} }
void mainboard_romstage_entry(struct romstage_params *params)
{
post_code(0x31);
romstage_common(params);
}
void mainboard_memory_init_params( void mainboard_memory_init_params(
struct romstage_params *params, struct romstage_params *params,
MEMORY_INIT_UPD *memory_params) MEMORY_INIT_UPD *memory_params)

View File

@ -14,8 +14,6 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include <soc/gpio.h>
#include <soc/pci_devs.h>
#include <soc/romstage.h> #include <soc/romstage.h>
#include "onboard.h" #include "onboard.h"
#include <boardid.h> #include <boardid.h>