| /* 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; |
| } |