xref: /aosp_15_r20/external/coreboot/src/soc/intel/xeon_sp/gnr/soc_iio.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1  /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <soc/iio.h>
4 
5 #include <fsp/util.h>
6 #include <IioPcieConfigUpd.h>
7 
8 static IIO_BOARD_SETTINGS_HOB iio_upd_hob;
9 
soc_config_iio_pe_ports(FSPM_UPD * mupd,const struct iio_pe_config * config_table,unsigned int num_entries)10 void soc_config_iio_pe_ports(FSPM_UPD *mupd, const struct iio_pe_config *config_table,
11 				unsigned int num_entries)
12 {
13 	int i;
14 	uint8_t socket, pe, port;
15 
16 	const struct iio_pe_config *board_pe_config;
17 	const struct iio_port_config *board_port_config;
18 
19 	IIO_BOARD_SETTINGS_PER_PE *upd_pe_config;
20 	IIO_BOARD_SETTINGS_PER_PORT *upd_port_config;
21 
22 	for (i = 0; i < num_entries; i++) {
23 		board_pe_config = &config_table[i];
24 		socket = board_pe_config->socket;
25 		pe = board_pe_config->pe;
26 
27 		upd_pe_config = &(iio_upd_hob.Socket[socket].Pe[pe]);
28 
29 		if ((socket >= MAX_SOCKET) || (pe >= MAX_IIO_PCIE_PER_SOCKET))
30 			continue;
31 
32 		for (port = 0; port < MAX_IIO_PORTS_PER_STACK; port++) {
33 			upd_port_config = &(upd_pe_config->Port[port]);
34 			board_port_config = &(board_pe_config->port_config[port]);
35 
36 			upd_pe_config->Bifurcation = board_pe_config->bifurcation;
37 			upd_pe_config->CxlSupportInUba = board_pe_config->cxl_support;
38 
39 			upd_port_config->Vpp.Address = board_port_config->vpp_address;
40 			upd_port_config->Vpp.Port = board_port_config->vpp_port;
41 			upd_port_config->Vpp.MuxAddress	= board_port_config->vpp_mux_address;
42 			upd_port_config->Vpp.MuxChannel	= board_port_config->vpp_mux_channel;
43 
44 			upd_port_config->Slot.Eip = board_port_config->slot_eip;
45 			upd_port_config->Slot.HotPlugSurprise = board_port_config->slot_hps;
46 			upd_port_config->Slot.PowerInd = board_port_config->slot_pind;
47 			upd_port_config->Slot.AttentionInd = board_port_config->slot_aind;
48 			upd_port_config->Slot.PowerCtrl = board_port_config->slot_pctl;
49 			upd_port_config->Slot.AttentionBtn = board_port_config->slot_abtn;
50 
51 			upd_port_config->VppEnabled = board_port_config->vpp_enabled;
52 			upd_port_config->VppExpType = board_port_config->vpp_exp_type;
53 
54 			upd_port_config->SlotImplemented = board_port_config->slot_implemented;
55 			upd_port_config->HotPlug = board_port_config->hot_plug;
56 			upd_port_config->MrlSensorPresent = board_port_config->mrl_sensor_present;
57 			upd_port_config->SlotPowerLimitScale = board_port_config->slot_power_limit_scale;
58 			upd_port_config->SlotPowerLimitValue = board_port_config->slot_power_limit_value;
59 			upd_port_config->PhysicalSlotNumber = board_port_config->physical_slot_number;
60 		}
61 	}
62 
63 	mupd->FspmConfig.IioBoardSettingsHobPtr = (UINT32)&iio_upd_hob;
64 	mupd->FspmConfig.IioBoardSettingsHobLength = sizeof(iio_upd_hob);
65 }
66