mb/scaleway/tagada: Don't change FIAMUX when Security Override is set
This will not enable M.2 SATA drive if the ME config was lost (For instance after flashing a full flash factory image) This is required so that the system can boot without FIA MUX error during flash update procedure. Change-Id: I55a8bcdc30bc67af2d3e9ccb8844eac599727108 Signed-off-by: Julien Viard de Galbert <jviarddegalbert@online.net> Reviewed-on: https://review.coreboot.org/c/coreboot/+/25443 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
parent
7e4ad26b95
commit
b3e504c310
|
@ -5,6 +5,8 @@
|
|||
#include <hsio.h>
|
||||
#include <gpio_defs.h>
|
||||
#include <soc/fiamux.h>
|
||||
#include <string.h>
|
||||
#include <fast_spi_def.h>
|
||||
|
||||
#ifdef __RAMSTAGE__
|
||||
static void update_hsio_info_for_m2_slots(size_t num_of_entry, BL_HSIO_INFORMATION *config)
|
||||
|
@ -12,6 +14,14 @@ static void update_hsio_info_for_m2_slots(size_t num_of_entry, BL_HSIO_INFORMATI
|
|||
uint32_t reg32;
|
||||
bool m2a_pcie, m2b_pcie;
|
||||
uint8_t entry;
|
||||
BL_FIA_MUX_CONFIG_HOB *fiamux_hob_data = get_fiamux_hob_data();
|
||||
uint16_t supported_hsio_lanes;
|
||||
void *spibar = fast_spi_get_bar();
|
||||
uint32_t hsfs;
|
||||
|
||||
/* Configure FIA MUX PCD */
|
||||
supported_hsio_lanes =
|
||||
(uint16_t)fiamux_hob_data->FiaMuxConfig.SkuNumLanesAllowed;
|
||||
|
||||
/* Detects modules type */
|
||||
// _GPIO_4 : LFFF: M2A_CFGn : M2A_SATAn : 0 SATA, 1 PCIe
|
||||
|
@ -29,7 +39,12 @@ static void update_hsio_info_for_m2_slots(size_t num_of_entry, BL_HSIO_INFORMATI
|
|||
// HSIO default config is for PCIe, only update for SATA
|
||||
// (also secondary PCIe lines are already set depending on SKU)
|
||||
for (entry = 0; entry < num_of_entry; entry++) {
|
||||
BL_ME_FIA_MUX_CONFIG *mux_config = &(config[entry].FiaConfig.MuxConfiguration);
|
||||
/* only update the active config */
|
||||
if (config[entry].NumLanesSupported != supported_hsio_lanes)
|
||||
continue;
|
||||
BL_ME_FIA_CONFIG *fia_config = &(config[entry].FiaConfig);
|
||||
BL_ME_FIA_MUX_CONFIG *mux_config =
|
||||
&(config[entry].FiaConfig.MuxConfiguration);
|
||||
BL_ME_FIA_SATA_CONFIG *sata_config =
|
||||
&(config[entry].FiaConfig.SataLaneConfiguration);
|
||||
if (!m2a_pcie) {
|
||||
|
@ -46,6 +61,25 @@ static void update_hsio_info_for_m2_slots(size_t num_of_entry, BL_HSIO_INFORMATI
|
|||
sata_config->BL_MeFiaSataLaneSataSel.Lane12SataSel =
|
||||
BL_ME_FIA_SATA_CONTROLLER_LANE_ASSIGNED;
|
||||
}
|
||||
|
||||
/* Check SPIBAR for security override
|
||||
at least one M2 slot is populated with SATA
|
||||
the configuration is different form ME current one */
|
||||
hsfs = read32(spibar + SPIBAR_HSFSTS_CTL);
|
||||
if ((!(hsfs & SPIBAR_HSFSTS_FDOPSS))
|
||||
&& (!m2a_pcie || !m2b_pcie)
|
||||
&& memcmp(fia_config,
|
||||
&fiamux_hob_data->FiaMuxConfig.FiaMuxConfig,
|
||||
sizeof(BL_ME_FIA_CONFIG))) {
|
||||
/* update configuration to NOT change ME config
|
||||
as it will fail with security override set. */
|
||||
memcpy(fia_config,
|
||||
&fiamux_hob_data->FiaMuxConfig.FiaMuxConfig,
|
||||
sizeof(BL_ME_FIA_CONFIG));
|
||||
printk(BIOS_CRIT, "FLASH SECURITY OVERRIDE SET: "
|
||||
"M2 SATA Slots are not available!\n");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue