blob: 792ea568562f8d6ff3d3589fd95434837a2cd400 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
#include <console/console.h>
#include <soc/fiamux.h>
#define FSP_FIAMUX_HOB_GUID \
{ \
0x26ad492e, 0xf951, 0x4e43, \
{ \
0xbc, 0x72, 0x22, 0x76, 0x58, 0xb1, 0xf6, 0x23 \
} \
}
int get_fiamux_hsio_info(uint16_t num_of_lanes, size_t num_of_entry,
BL_HSIO_INFORMATION **config)
{
uint8_t entry;
if ((num_of_lanes == 0) || (num_of_entry == 0) || (*config == NULL))
return 1;
for (entry = 0; entry < num_of_entry; entry++) {
if ((*config)[entry].NumLanesSupported == num_of_lanes) {
*config = &(*config)[entry];
return 0;
}
}
return 1;
}
/*
* Display the FIA MUX HOB.
*
* @param Pointer of FIA MUX HOB data
*
* @return None
*
*/
void print_fiamux_config_hob(BL_FIA_MUX_CONFIG_HOB *fiamux_hob_data)
{
/* Display the FIA MUX Configuration */
printk(BIOS_DEBUG, "FIA MUX Configuration in FSP HOB is:\n");
printk(BIOS_DEBUG, " FiaMuxConfig.SkuNumLanesAllowed = 0x%x\n",
(uint32_t)(fiamux_hob_data->FiaMuxConfig.SkuNumLanesAllowed));
printk(BIOS_DEBUG, " FiaMuxConfig.FiaMuxConfig = 0x%llx\n",
(uint64_t)(fiamux_hob_data->FiaMuxConfig.FiaMuxConfig
.MuxConfiguration.MeFiaMuxLaneConfig));
printk(BIOS_DEBUG,
" FiaMuxConfig.FiaMuxConfig.SataLaneConfiguration = 0x%llx\n",
(uint64_t)(fiamux_hob_data->FiaMuxConfig.FiaMuxConfig
.SataLaneConfiguration.MeFiaSataLaneConfig));
printk(BIOS_DEBUG, " FiaMuxConfig.FiaMuxConfig."
"PcieRootPortsConfiguration = 0x%llx\n",
(uint64_t)(fiamux_hob_data->FiaMuxConfig.FiaMuxConfig
.PcieRootPortsConfiguration
.MeFiaPcieRootPortsConfig));
printk(BIOS_DEBUG, " FiaMuxConfig.FiaMuxConfigRequest = 0x%llx\n",
(uint64_t)(fiamux_hob_data->FiaMuxConfig.FiaMuxConfigRequest
.MuxConfiguration.MeFiaMuxLaneConfig));
printk(BIOS_DEBUG, " FiaMuxConfig.FiaMuxConfigRequest."
"SataLaneConfiguration = 0x%llx\n",
(uint64_t)(fiamux_hob_data->FiaMuxConfig.FiaMuxConfigRequest
.SataLaneConfiguration.MeFiaSataLaneConfig));
printk(BIOS_DEBUG, " FiaMuxConfig.FiaMuxConfigRequest."
"PcieRootPortsConfiguration = 0x%llx\n",
(uint64_t)(fiamux_hob_data->FiaMuxConfig.FiaMuxConfigRequest
.PcieRootPortsConfiguration
.MeFiaPcieRootPortsConfig));
printk(BIOS_DEBUG,
" FiaMuxConfigStatus.FiaMuxConfigGetStatus = 0x%x\n",
(uint32_t)(fiamux_hob_data->FiaMuxConfigStatus
.FiaMuxConfigGetStatus));
printk(BIOS_DEBUG,
" FiaMuxConfigStatus.FiaMuxConfigSetStatus = 0x%x\n",
(uint32_t)(fiamux_hob_data->FiaMuxConfigStatus
.FiaMuxConfigSetStatus));
printk(BIOS_DEBUG,
" FiaMuxConfigStatus.FiaMuxConfigSetRequired = 0x%x\n",
(uint8_t)(fiamux_hob_data->FiaMuxConfigStatus
.FiaMuxConfigSetRequired));
}
/*
* Get the pointer of FIA MUX HOB data
*
* @param Pointer of FIA MUX HOB data
*
* @return:
* Non-zero - FIA MUX configuration correct.
* Zero - Either FIA MUX configuration incorrect or
* it can not be verified.
*/
BL_FIA_MUX_CONFIG_HOB *get_fiamux_hob_data(void)
{
u32 const *fiamux_hob = NULL;
BL_FIA_MUX_CONFIG_HOB *fiamux_hob_data = NULL;
const EFI_GUID fiamux_guid = FSP_FIAMUX_HOB_GUID;
size_t size;
/* Parse FIA MUX configuration HOB */
fiamux_hob = fsp_find_extension_hob_by_guid(
(uint8_t const *)&fiamux_guid, &size);
if (fiamux_hob == NULL) {
/* FIA MUX configuration HOB not exist */
die("FIA MUX Configuration Data Hob does not present!\n");
} else {
/* Get FIA MUX configuration HOB */
fiamux_hob_data = (BL_FIA_MUX_CONFIG_HOB *)(fiamux_hob);
/* Display FIA MUX configuration HOB */
print_fiamux_config_hob(fiamux_hob_data);
}
return fiamux_hob_data;
}
__weak size_t mainboard_get_hsio_config(BL_HSIO_INFORMATION **p_hsio_config)
{
*p_hsio_config = NULL;
return 0;
}