Ziang Wang has uploaded this change for review.

View Change

mb/intel/idaville: Porting to Intel Idaville LCC board

Booted to EDK2 Payload in IDV-LCC simulation.
Current workaround:
1. notify.c: Skip FSP notify.
2. pci_device.c: Do not really assign MMIO resource,
possibly some memory mapping issues going on.
3. util.c: Hardcode to 1 CPU for now.
4. uncore_acpi.c: Skip most ACPI table creations.

Change-Id: I468755a8ade4d5ad438c7b4798f8fe38c201cc14
Signed-off-by: Ziang Wang <ziang.wang@intel.com>
---
A bin/FspRel_M.bin
A bin/FspRel_S.bin
A bin/FspRel_T.bin
A bin/UEFIPAYLOAD
A bin/m_10_606c1_01000290.mcb
A bin/readme.md
A configs/builder/config.intel.crb.idv
M src/device/pci_device.c
M src/drivers/intel/fsp2_0/notify.c
M src/drivers/smmstore/store.c
A src/mainboard/intel/idaville/Kconfig
A src/mainboard/intel/idaville/Kconfig.name
A src/mainboard/intel/idaville/Makefile.mk
A src/mainboard/intel/idaville/acpi/platform.asl
A src/mainboard/intel/idaville/acpi_tables.c
A src/mainboard/intel/idaville/board.fmd
A src/mainboard/intel/idaville/board_info.txt
A src/mainboard/intel/idaville/bootblock.c
A src/mainboard/intel/idaville/console.c
A src/mainboard/intel/idaville/devicetree.cb
A src/mainboard/intel/idaville/dsdt.asl
A src/mainboard/intel/idaville/include/idv_pch_gpio.h
A src/mainboard/intel/idaville/ramstage.c
A src/mainboard/intel/idaville/romstage.c
A src/mainboard/intel/idaville/vpd.h
M src/soc/intel/xeon_sp/bootblock.c
M src/soc/intel/xeon_sp/chip_common.c
M src/soc/intel/xeon_sp/lockdown.c
M src/soc/intel/xeon_sp/skx/cpu.c
M src/soc/intel/xeon_sp/skx/hob_display.c
M src/soc/intel/xeon_sp/skx/include/soc/pci_devs.h
M src/soc/intel/xeon_sp/skx/romstage.c
M src/soc/intel/xeon_sp/skx/soc_util.c
M src/soc/intel/xeon_sp/uncore_acpi.c
M src/soc/intel/xeon_sp/util.c
M src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspUpd.h
M src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspmUpd.h
M src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspsUpd.h
M src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FsptUpd.h
M src/vendorcode/intel/fsp/fsp2_0/skylake_sp/hob_iiouds.h
40 files changed, 2,655 insertions(+), 743 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/74/82074/1
diff --git a/bin/FspRel_M.bin b/bin/FspRel_M.bin
new file mode 100644
index 0000000..a1aa468
--- /dev/null
+++ b/bin/FspRel_M.bin
Binary files differ
diff --git a/bin/FspRel_S.bin b/bin/FspRel_S.bin
new file mode 100644
index 0000000..e9de9f5
--- /dev/null
+++ b/bin/FspRel_S.bin
Binary files differ
diff --git a/bin/FspRel_T.bin b/bin/FspRel_T.bin
new file mode 100644
index 0000000..32b2f1f
--- /dev/null
+++ b/bin/FspRel_T.bin
Binary files differ
diff --git a/bin/UEFIPAYLOAD b/bin/UEFIPAYLOAD
new file mode 100644
index 0000000..f46ad80
--- /dev/null
+++ b/bin/UEFIPAYLOAD
Binary files differ
diff --git a/bin/m_10_606c1_01000290.mcb b/bin/m_10_606c1_01000290.mcb
new file mode 100644
index 0000000..04ab878
--- /dev/null
+++ b/bin/m_10_606c1_01000290.mcb
Binary files differ
diff --git a/bin/readme.md b/bin/readme.md
new file mode 100644
index 0000000..5dcd589
--- /dev/null
+++ b/bin/readme.md
@@ -0,0 +1,9 @@
+Binaries used here are available from public repos
+
+FSP: https://github.com/intel/FSP/tree/master/IdavilleFspBinPkg/Lcc/FspBin
+
+Microcode: https://github.com/slimbootloader/firmwareblob/tree/master/Microcode/Idaville
+
+# Important
+
+Please note that the coreboot.rom built with this patch is 16M, which contains only the BIOS part, you still need to stitch it into a 64M IFWI using [Stitchloader.py](https://github.com/slimbootloader/slimbootloader/blob/master/Platform/IdavilleBoardPkg/Script/StitchLoader.py)
\ No newline at end of file
diff --git a/configs/builder/config.intel.crb.idv b/configs/builder/config.intel.crb.idv
new file mode 100644
index 0000000..e5f4951
--- /dev/null
+++ b/configs/builder/config.intel.crb.idv
@@ -0,0 +1,22 @@
+# type this to get working .config:
+# make defconfig KBUILD_DEFCONFIG=configs/builder/config.ocp.tiogapass
+
+CONFIG_VENDOR_INTEL=y
+CONFIG_BOARD_IDAVILLE=y
+#CONFIG_HAVE_IFD_BIN=y
+#CONFIG_HAVE_ME_BIN=y
+CONFIG_DO_NOT_TOUCH_DESCRIPTOR_REGION=y
+CONFIG_USE_CPU_MICROCODE_CBFS_BINS=y
+CONFIG_CPU_MICROCODE_CBFS_EXTERNAL_BINS=y
+CONFIG_CPU_UCODE_BINARIES="bin/m_10_606c1_01000290.mcb"
+CONFIG_ADD_FSP_BINARIES=y
+CONFIG_FSP_T_FILE="bin/FspRel_T.bin"
+CONFIG_FSP_M_FILE="bin/FspRel_M.bin"
+CONFIG_FSP_S_FILE="bin/FspRel_S.bin"
+CONFIG_USE_BLOBS=y
+CONFIG_CONSOLE_POST=y
+CONFIG_DEFAULT_CONSOLE_LOGLEVEL_7=y
+CONFIG_DISPLAY_FSP_CALLS_AND_STATUS=y
+CONFIG_DISPLAY_FSP_HEADER=y
+CONFIG_PAYLOAD_EDK2=y
+CONFIG_PAYLOAD_FILE="bin/UEFIPAYLOAD"
\ No newline at end of file
diff --git a/src/device/pci_device.c b/src/device/pci_device.c
index af3355d..719e40a 100644
--- a/src/device/pci_device.c
+++ b/src/device/pci_device.c
@@ -603,7 +603,7 @@
if (resource->flags & IORESOURCE_IO)
base_lo |= PCI_BASE_ADDRESS_SPACE_IO;

- pci_write_config32(dev, resource->index, base_lo);
+ // pci_write_config32(dev, resource->index, base_lo);
if (resource->flags & IORESOURCE_PCI64)
pci_write_config32(dev, resource->index + 4, base_hi);
}
diff --git a/src/drivers/intel/fsp2_0/notify.c b/src/drivers/intel/fsp2_0/notify.c
index 22bbf53..33adc18 100644
--- a/src/drivers/intel/fsp2_0/notify.c
+++ b/src/drivers/intel/fsp2_0/notify.c
@@ -61,7 +61,7 @@
fsp_notify_fn fspnotify;
uint32_t ret;

- if (data->skip) {
+ if (true) {
printk(BIOS_INFO, "coreboot skipped calling FSP notify phase: %08x.\n", phase);
return;
}
diff --git a/src/drivers/smmstore/store.c b/src/drivers/smmstore/store.c
index f1e07e4..188315f 100644
--- a/src/drivers/smmstore/store.c
+++ b/src/drivers/smmstore/store.c
@@ -12,6 +12,8 @@

#define SMMSTORE_REGION "SMMSTORE"

+#define FMAP_SECTION_SMMSTORE_START 0xd30000
+#define FMAP_SECTION_SMMSTORE_SIZE 0x40000

_Static_assert(IS_ALIGNED(FMAP_SECTION_SMMSTORE_START, SMM_BLOCK_SIZE),
"SMMSTORE FMAP region not aligned to 64K");
diff --git a/src/mainboard/intel/idaville/Kconfig b/src/mainboard/intel/idaville/Kconfig
new file mode 100644
index 0000000..719bf49
--- /dev/null
+++ b/src/mainboard/intel/idaville/Kconfig
@@ -0,0 +1,60 @@
+## SPDX-License-Identifier: GPL-2.0-or-later
+
+if BOARD_IDAVILLE
+
+config BOARD_SPECIFIC_OPTIONS
+ def_bool y
+ select BOARD_ROMSIZE_KB_16384
+ select HAVE_ACPI_TABLES
+ select SOC_INTEL_SKYLAKE_SP
+ select SUPERIO_ASPEED_AST2400
+ select UART_OVERRIDE_BAUDRATE
+ select VPD
+
+config MAINBOARD_DIR
+ default "intel/idaville"
+
+config MAINBOARD_PART_NUMBER
+ default "idaville"
+
+config MAINBOARD_FAMILY
+ string
+ default "idaville"
+
+config FMDFILE
+ default "src/mainboard/\$(CONFIG_MAINBOARD_DIR)/board.fmd"
+
+config UART_FOR_CONSOLE
+ int
+ default 0
+
+config TTYS0_BAUD
+ default 115200
+
+config TTYS0_BASE
+ default 0x3f8
+
+config CPU_MICROCODE_CBFS_LEN
+ hex
+ default 0x00070000
+
+config DCACHE_RAM_SIZE
+ hex
+ default 0xFFF00
+
+config FSP_M_RC_HEAP_SIZE
+ hex
+ default 0xD0000
+
+config DCACHE_BSP_STACK_SIZE
+ hex
+ default 0x5000
+
+config MAX_SOCKET
+ int
+ default 1
+
+config SOC_INTEL_MMAPVTD_ONLY_FOR_DPR
+ def_bool y
+
+endif # BOARD_OCP_TIOGAPASS
diff --git a/src/mainboard/intel/idaville/Kconfig.name b/src/mainboard/intel/idaville/Kconfig.name
new file mode 100644
index 0000000..0cc860f
--- /dev/null
+++ b/src/mainboard/intel/idaville/Kconfig.name
@@ -0,0 +1,4 @@
+## SPDX-License-Identifier: GPL-2.0-only
+
+config BOARD_IDAVILLE
+ bool "Idaville"
diff --git a/src/mainboard/intel/idaville/Makefile.mk b/src/mainboard/intel/idaville/Makefile.mk
new file mode 100644
index 0000000..1b67017
--- /dev/null
+++ b/src/mainboard/intel/idaville/Makefile.mk
@@ -0,0 +1,8 @@
+## SPDX-License-Identifier: GPL-2.0-or-later
+
+bootblock-y += bootblock.c
+ramstage-y += ramstage.c
+
+all-y += console.c
+
+CPPFLAGS_common += -I$(src)/mainboard/$(MAINBOARDDIR)/include
diff --git a/src/mainboard/intel/idaville/acpi/platform.asl b/src/mainboard/intel/idaville/acpi/platform.asl
new file mode 100644
index 0000000..13e6fc3
--- /dev/null
+++ b/src/mainboard/intel/idaville/acpi/platform.asl
@@ -0,0 +1,4 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <soc/intel/common/acpi/acpi_wake_source.asl>
+#include <arch/x86/acpi/post.asl>
\ No newline at end of file
diff --git a/src/mainboard/intel/idaville/acpi_tables.c b/src/mainboard/intel/idaville/acpi_tables.c
new file mode 100644
index 0000000..b6e3846
--- /dev/null
+++ b/src/mainboard/intel/idaville/acpi_tables.c
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <acpi/acpi.h>
+
+void mainboard_fill_fadt(acpi_fadt_t *fadt)
+{
+ fadt->preferred_pm_profile = PM_ENTERPRISE_SERVER;
+}
diff --git a/src/mainboard/intel/idaville/board.fmd b/src/mainboard/intel/idaville/board.fmd
new file mode 100644
index 0000000..1c407e0
--- /dev/null
+++ b/src/mainboard/intel/idaville/board.fmd
@@ -0,0 +1,12 @@
+FLASH 16M {
+ MISC_RW@0x0 0x10000 {
+ RW_VPD(PRESERVE)@0x0 0x4000
+ }
+ WP_RO@0x10000 0xff0000 {
+ RO_VPD(PRESERVE)@0x0 0x4000
+ RO_SECTION@0x4000 0xfec000 {
+ FMAP@0x0 0x800
+ COREBOOT(CBFS)@0x800 0xfeb800
+ }
+ }
+}
diff --git a/src/mainboard/intel/idaville/board_info.txt b/src/mainboard/intel/idaville/board_info.txt
new file mode 100644
index 0000000..81876f5
--- /dev/null
+++ b/src/mainboard/intel/idaville/board_info.txt
@@ -0,0 +1,5 @@
+Board name: Idaville
+Category: server
+ROM protocol: SPI
+ROM socketed: yes
+Release year: 20xx
diff --git a/src/mainboard/intel/idaville/bootblock.c b/src/mainboard/intel/idaville/bootblock.c
new file mode 100644
index 0000000..a3265a6
--- /dev/null
+++ b/src/mainboard/intel/idaville/bootblock.c
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <bootblock_common.h>
+#include <device/pci_def.h>
+#include <device/pci_ops.h>
+#include <intelblocks/pcr.h>
+#include <soc/pci_devs.h>
+#include <soc/pcr_ids.h>
+#include <superio/aspeed/ast2400/ast2400.h>
+#include <superio/aspeed/common/aspeed.h>
+#include <idv_pch_gpio.h>
+#include <arch/mmio.h>
+
+/* these are defined in intelblocks/lpc_lib.h but we can't use them yet */
+#define PCR_DMI_LPCIOD 0x2770
+#define PCR_DMI_LPCIOE 0x2774
+#define ASPEED_CONFIG_INDEX 0x2E
+#define ASPEED_CONFIG_DATA 0x2F
+#define DEFAULT_PCI_BUS_NUMBER_PCH 0
+#define PCI_DEVICE_NUMBER_PCH_HSUART 26
+#define PCI_FUNCTION_NUMBER_PCH_HSUART0 0
+
+
+#define MM_PCI_ADDRESS(Bus, Device, Function, Register) \
+(0x80000000 + \
+ (UINTN)((Bus) << 20) + \
+ (UINTN)((Device) << 15) + \
+ (UINTN)((Function) << 12) + \
+ (UINTN)(Register) \
+)
+
+static void PlatformHookSerialPortInitialize(void)
+{
+ uint32_t BaseAddr = 0;
+ BaseAddr = MM_PCI_ADDRESS(DEFAULT_PCI_BUS_NUMBER_PCH,
+ PCI_DEVICE_NUMBER_PCH_HSUART,
+ PCI_FUNCTION_NUMBER_PCH_HSUART0,
+ 0);
+
+ uint16_t tmp = read16((void *)(BaseAddr + PCI_COMMAND));
+ tmp |= (uint16_t) ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
+ write16((void *)(BaseAddr + PCI_COMMAND), tmp);
+
+ write32((void *)(BaseAddr + PCI_BASE_ADDRESS_0), 0x3F8);
+ write16((void *)(BaseAddr + PCI_COMMAND), (PCI_COMMAND_IO | PCI_COMMAND_MASTER));
+}
+
+static void enable_espi_lpc_io_windows(void)
+{
+ /*
+ * Set up decoding windows on PCH over PCR. The CPUs use two of AST2500 SIO ports,
+ * one is connected to debug header (SUART1) and another is used as SOL (SUART2).
+ * For that end it is wired into BMC virtual port.
+ */
+
+ /* Open IO windows: 0x3f8 for com1 and 02e8 for com2 */
+ pcr_or32(PID_DMI, PCR_DMI_LPCIOD, (0 << 0) | (1 << 4));
+ /* LPC I/O enable: com1 and com2 */
+ pcr_or32(PID_DMI, PCR_DMI_LPCIOE, (1 << 0) | (1 << 1));
+
+ /* Enable com1 (0x3f8), com2 (02f8) and superio (0x2e) */
+ pci_s_write_config32(PCH_DEV_LPC, 0x80,
+ (1 << 28) | (1 << 16) | (1 << 17) | (0 << 0) | (1 << 4));
+}
+
+static uint8_t com_to_ast_sio(uint8_t com)
+{
+ switch (com) {
+ case 0:
+ return AST2400_SUART1;
+ case 1:
+ return AST2400_SUART2;
+ case 2:
+ return AST2400_SUART3;
+ case 4:
+ return AST2400_SUART4;
+ default:
+ return AST2400_SUART1;
+ }
+}
+
+void bootblock_mainboard_early_init(void)
+{
+ /* pre-configure Lewisburg PCH GPIO pads */
+ gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
+
+ PlatformHookSerialPortInitialize();
+ /* Open IO windows */
+ enable_espi_lpc_io_windows();
+
+ /* Configure appropriate physical port of SuperIO chip off BMC */
+ const pnp_devfn_t serial_dev = PNP_DEV(ASPEED_CONFIG_INDEX,
+ com_to_ast_sio(CONFIG_UART_FOR_CONSOLE));
+ aspeed_enable_serial(serial_dev, CONFIG_TTYS0_BASE);
+
+ /* Port 80h direct to GPIO for LED display */
+ const pnp_devfn_t gpio_dev = PNP_DEV(ASPEED_CONFIG_INDEX, AST2400_GPIO);
+ aspeed_enable_port80_direct_gpio(gpio_dev, GPIOH);
+
+ /* Enable UART function pin */
+ aspeed_enable_uart_pin(serial_dev);
+}
diff --git a/src/mainboard/intel/idaville/console.c b/src/mainboard/intel/idaville/console.c
new file mode 100644
index 0000000..21ee09c
--- /dev/null
+++ b/src/mainboard/intel/idaville/console.c
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <console/uart.h>
+
+unsigned int get_uart_baudrate(void)
+{
+ /* SOL console baud rate. */
+ return 115200;
+}
diff --git a/src/mainboard/intel/idaville/devicetree.cb b/src/mainboard/intel/idaville/devicetree.cb
new file mode 100644
index 0000000..721d8cb
--- /dev/null
+++ b/src/mainboard/intel/idaville/devicetree.cb
@@ -0,0 +1,11 @@
+## SPDX-License-Identifier: GPL-2.0-or-later
+
+chip soc/intel/xeon_sp/skx
+
+ device cpu_cluster 0 on end
+
+ device domain 0 on
+ device gpio 0 alias pch_gpio on end
+ device pci 00.0 on end # Host bridge
+ end
+end
diff --git a/src/mainboard/intel/idaville/dsdt.asl b/src/mainboard/intel/idaville/dsdt.asl
new file mode 100644
index 0000000..06145c4
--- /dev/null
+++ b/src/mainboard/intel/idaville/dsdt.asl
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+
+#include <acpi/acpi.h>
+DefinitionBlock(
+ "dsdt.aml",
+ "DSDT",
+ ACPI_DSDT_REV_2,
+ OEM_ID,
+ ACPI_TABLE_CREATOR,
+ 0x20110725
+)
+{
+ #include <acpi/dsdt_top.asl>
+ #include "acpi/platform.asl"
+ #include <soc/intel/common/block/acpi/acpi/globalnvs.asl>
+ #include <cpu/intel/common/acpi/cpu.asl>
+ #include <soc/intel/xeon_sp/acpi/uncore.asl>
+ Scope (\_SB.PC00)
+ {
+ #include <soc/intel/xeon_sp/acpi/pch.asl>
+ }
+}
diff --git a/src/mainboard/intel/idaville/include/idv_pch_gpio.h b/src/mainboard/intel/idaville/include/idv_pch_gpio.h
new file mode 100644
index 0000000..c84a0d9
--- /dev/null
+++ b/src/mainboard/intel/idaville/include/idv_pch_gpio.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef CFG_PCH_GPIO_H
+#define CFG_PCH_GPIO_H
+
+#include <soc/gpio.h>
+
+static const struct pad_config gpio_table[] = {
+ PAD_CFG_NF(GPP_A20, NONE, DEEP, NF1),
+ PAD_CFG_NF(GPP_A21, NONE, DEEP, NF1)
+};
+
+#endif /* CFG_PCH_GPIO_H */
diff --git a/src/mainboard/intel/idaville/ramstage.c b/src/mainboard/intel/idaville/ramstage.c
new file mode 100644
index 0000000..85d7ac1
--- /dev/null
+++ b/src/mainboard/intel/idaville/ramstage.c
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <cpu/x86/smm.h>
+#include <drivers/ipmi/ipmi_ops.h>
+#include <drivers/ocp/dmi/ocp_dmi.h>
+#include <soc/ramstage.h>
+#include <soc/smmrelocate.h>
+
+extern struct fru_info_str fru_strings;
+
+
+void mainboard_silicon_init_params(FSPS_UPD *params)
+{
+}
+
+static void mainboard_enable(struct device *dev)
+{
+}
+
+static void mainboard_final(void *chip_info)
+{
+}
+
+struct chip_operations mainboard_ops = {
+ .enable_dev = mainboard_enable,
+ .final = mainboard_final,
+};
diff --git a/src/mainboard/intel/idaville/romstage.c b/src/mainboard/intel/idaville/romstage.c
new file mode 100644
index 0000000..17124b3
--- /dev/null
+++ b/src/mainboard/intel/idaville/romstage.c
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include <fsp/api.h>
+#include <FspmUpd.h>
+#include <drivers/ipmi/ipmi_if.h>
+#include <drivers/ipmi/ocp/ipmi_ocp.h>
+#include <soc/romstage.h>
+#include <string.h>
+#include <gpio.h>
+#include <soc/gpio_soc_defs.h>
+
+static BL_SYSTEM_PCI_BASE_LIMITS iio_res;
+
+static void oem_update_iio(FSPM_UPD *mupd)
+{
+}
+
+static void mainboard_config_iio(FSPM_UPD *mupd)
+{
+ mupd->FspmConfig.PcdBifurcationPcie0 = 9;
+ mupd->FspmConfig.PcdBifurcationPcie1 = 5;
+ mupd->FspmConfig.PcdBifurcationPcie2 = 6;
+
+ mupd->FspmConfig.PcdPcieRootPortEn = 0xFFF;
+
+ mupd->FspmConfig.PcdIIOPciePortBifurcation = 0xFF;
+ mupd->FspmConfig.PcdIIOPciePort2Bifurcation = 0;
+
+ for (int stack = 0; stack < BL_MAX_LOGIC_IIO_STACK; stack++) {
+ iio_res.Socket[0].StackLimits[stack].IoBase = 0;
+ iio_res.Socket[0].StackLimits[stack].IoLimit = 0;
+ iio_res.Socket[0].StackLimits[stack].LowMmioBase = 0;
+ iio_res.Socket[0].StackLimits[stack].LowMmioLimit = 0;
+ iio_res.Socket[0].StackLimits[stack].HighMmioBase = 0;
+ iio_res.Socket[0].StackLimits[stack].HighMmioLimit = 0;
+ }
+ mupd->FspmConfig.PcdIioResConfigPtr = (uint32_t) &iio_res;
+
+ oem_update_iio(mupd);
+}
+
+void mainboard_memory_init_params(FSPM_UPD *FspmUpd)
+{
+ mainboard_config_iio(FspmUpd);
+ // FspmUpd->FspmArchUpd.StackBase = 0xFE800000 + 0x40000 + 0x7000 + 0x19000;
+ // FspmUpd->FspmArchUpd.StackSize = 0xFE800000 + 0xFFF00 - FspmUpd->FspmArchUpd.StackBase;
+
+ /* do not configure GPIO controller inside FSP-M */
+ // mupd->FspmConfig.GpioConfig.GpioTable = NULL;
+ // mupd->FspmConfig.GpioConfig.NumberOfEntries = 0;
+ FspmUpd->FspmConfig.PcdHsuartDevice = 0;
+ FspmUpd->FspmConfig.PcdFspDebugPrintErrorLevel = 2;
+ FspmUpd->FspmConfig.PcdPchDmiAspm = 0;
+ FspmUpd->FspmConfig.PcdPchLegacyIoLowLatency = 0;
+ FspmUpd->FspmConfig.PcdProcessorEistEnable = 0;
+ FspmUpd->FspmConfig.PcdProcessorHWPMEnable = 0;
+ FspmUpd->FspmConfig.PcdPackageCState = 0;
+ FspmUpd->FspmConfig.PcdMonitorMWait = 0;
+ FspmUpd->FspmConfig.PcdPowerLimit1Enable = 0;
+ FspmUpd->FspmConfig.PcdPowerLimit2Enable = 0;
+ FspmUpd->FspmConfig.PcdTurboMode = 0;
+ FspmUpd->FspmConfig.PcdDramRaplEnable = 0;
+ FspmUpd->FspmConfig.PcdCkeProgramming = 1;
+ FspmUpd->FspmConfig.PcdApdEnable = 0;
+ FspmUpd->FspmConfig.PcdPpdEnable = 0;
+ FspmUpd->FspmConfig.PcdPcieGlobalAspm = 0;
+ FspmUpd->FspmConfig.PcdHyperThreading = 0;
+}
diff --git a/src/mainboard/intel/idaville/vpd.h b/src/mainboard/intel/idaville/vpd.h
new file mode 100644
index 0000000..9309884
--- /dev/null
+++ b/src/mainboard/intel/idaville/vpd.h
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef IDAVILLE_VPD_H
+#define IDAVILLE_VPD_H
+
+#endif /* IDAVILLE_VPD_H */
diff --git a/src/soc/intel/xeon_sp/bootblock.c b/src/soc/intel/xeon_sp/bootblock.c
index 3e9922f6..beabc87 100644
--- a/src/soc/intel/xeon_sp/bootblock.c
+++ b/src/soc/intel/xeon_sp/bootblock.c
@@ -53,11 +53,11 @@
.CodeRegionLength = (UINT32)CACHE_ROM_SIZE,
.Reserved1 = {0},
},
- .FsptConfig = {
- .FsptPort80RouteDisable = 0,
- .ReservedTempRamInitUpd = {0},
- },
- .UnusedUpdSpace0 = {0},
+ // .FsptConfig = {
+ // .FsptPort80RouteDisable = 0,
+ // .ReservedTempRamInitUpd = {0},
+ // },
+ // .UnusedUpdSpace0 = {0},
.UpdTerminator = 0x55AA,
};
#endif //(!CONFIG(PLATFORM_USES_FSP2_4))
diff --git a/src/soc/intel/xeon_sp/chip_common.c b/src/soc/intel/xeon_sp/chip_common.c
index d0eab02..831067c 100644
--- a/src/soc/intel/xeon_sp/chip_common.c
+++ b/src/soc/intel/xeon_sp/chip_common.c
@@ -196,17 +196,22 @@
union xeon_domain_path dn = { .domain_path = 0 };
if (!hob)
return;
-
+ uint8_t uc1_inited = 0;
struct bus *root_bus = dev_root.downstream;
for (int s = 0; s < CONFIG_MAX_SOCKET; ++s) {
if (!soc_cpu_is_enabled(s))
continue;
- for (int x = 0; x < MAX_LOGIC_IIO_STACK; ++x) {
+ for (int x = 0; x < BL_MAX_LOGIC_IIO_STACK; ++x) {
const xSTACK_RES *ri = &hob->PlatformData.IIO_resource[s].StackRes[x];
const size_t seg = hob->PlatformData.CpuQpiInfo[s].PcieSegment;
-
- if (ri->BusBase > ri->BusLimit)
- continue;
+ printk(BIOS_INFO, "ri->BusBase=0x%x, BusLimit=0x%x\n", ri->BusBase, ri->BusLimit);
+ // if (ri->BusBase > ri->BusLimit)
+ // continue;
+ if (ri->BusBase == 0xff) {
+ if (uc1_inited)
+ continue;
+ uc1_inited = 1;
+ }

/* Prepare domain path */
dn.socket = s;
diff --git a/src/soc/intel/xeon_sp/lockdown.c b/src/soc/intel/xeon_sp/lockdown.c
index 9e25920..7fdc2c5 100644
--- a/src/soc/intel/xeon_sp/lockdown.c
+++ b/src/soc/intel/xeon_sp/lockdown.c
@@ -22,6 +22,6 @@
{
lpc_lockdown_config();
pmc_lockdown_config();
- sata_lockdown_config(chipset_lockdown);
+ // sata_lockdown_config(chipset_lockdown);
spi_lockdown_config(chipset_lockdown);
}
diff --git a/src/soc/intel/xeon_sp/skx/cpu.c b/src/soc/intel/xeon_sp/skx/cpu.c
index 009527c..3e437b1 100644
--- a/src/soc/intel/xeon_sp/skx/cpu.c
+++ b/src/soc/intel/xeon_sp/skx/cpu.c
@@ -147,6 +147,8 @@
.init = xeon_sp_core_init,
};

+#define CPUID_ICELAKE_D_LLC 0x606C1
+
static const struct cpu_device_id cpu_table[] = {
/* Skylake-SP A0/A1 CPUID 0x506f0*/
{X86_VENDOR_INTEL, CPUID_SKYLAKE_SP_A0_A1, CPUID_EXACT_MATCH_MASK },
@@ -154,6 +156,7 @@
{X86_VENDOR_INTEL, CPUID_SKYLAKE_SP_B0, CPUID_EXACT_MATCH_MASK },
/* Skylake-SP 4 CPUID 0x50654*/
{X86_VENDOR_INTEL, CPUID_SKYLAKE_SP_4, CPUID_EXACT_MATCH_MASK },
+ {X86_VENDOR_INTEL, CPUID_ICELAKE_D_LLC, CPUID_EXACT_MATCH_MASK },
CPU_TABLE_END
};

diff --git a/src/soc/intel/xeon_sp/skx/hob_display.c b/src/soc/intel/xeon_sp/skx/hob_display.c
index bc65e64..2c9a9fc 100644
--- a/src/soc/intel/xeon_sp/skx/hob_display.c
+++ b/src/soc/intel/xeon_sp/skx/hob_display.c
@@ -95,50 +95,50 @@
printk(BIOS_DEBUG, "===================== IIO_UDS HOB DATA =====================\n");

printk(BIOS_DEBUG, "\t===================== SYSTEM STATUS =====================\n");
- printk(BIOS_DEBUG, "\tcpuType: 0x%x\n", hob->SystemStatus.cpuType);
- printk(BIOS_DEBUG, "\tcpuSubType: 0x%x\n", hob->SystemStatus.cpuSubType);
- printk(BIOS_DEBUG, "\tSystemRasType: 0x%x\n", hob->SystemStatus.SystemRasType);
- printk(BIOS_DEBUG, "\tnumCpus: 0x%x\n", hob->SystemStatus.numCpus);
- for (int x = 0; x < MAX_SOCKET; ++x) {
- printk(BIOS_DEBUG, "\tSocket %d FusedCores: 0x%x, ActiveCores: 0x%x, "
- "MaxCoreToBusRatio: 0x%x, MinCoreToBusRatio: 0x%x\n",
- x, hob->SystemStatus.FusedCores[x], hob->SystemStatus.ActiveCores[x],
- hob->SystemStatus.MaxCoreToBusRatio[x],
- hob->SystemStatus.MinCoreToBusRatio[x]);
- }
- printk(BIOS_DEBUG, "\tCurrentCoreToBusRatio: 0x%x\n",
- hob->SystemStatus.CurrentCoreToBusRatio);
- printk(BIOS_DEBUG, "\tIntelSpeedSelectCapable: 0x%x\n",
- hob->SystemStatus.IntelSpeedSelectCapable);
- printk(BIOS_DEBUG, "\tIssConfigTdpLevelInfo: 0x%x\n",
- hob->SystemStatus.IssConfigTdpLevelInfo);
- for (int x = 0; x < TDP_MAX_LEVEL; ++x) {
- printk(BIOS_DEBUG, "\t\tTDL Level %d IssConfigTdpTdpInfo: 0x%x, "
- "IssConfigTdpPowerInfo: 0x%x, IssConfigTdpCoreCount: 0x%x\n",
- x, hob->SystemStatus.IssConfigTdpTdpInfo[x],
- hob->SystemStatus.IssConfigTdpPowerInfo[x],
- hob->SystemStatus.IssConfigTdpCoreCount[x]);
- }
- printk(BIOS_DEBUG, "\tsocketPresentBitMap: 0x%x\n",
- hob->SystemStatus.socketPresentBitMap);
+ // printk(BIOS_DEBUG, "\tcpuType: 0x%x\n", hob->SystemStatus.cpuType);
+ // printk(BIOS_DEBUG, "\tcpuSubType: 0x%x\n", hob->SystemStatus.cpuSubType);
+ // printk(BIOS_DEBUG, "\tSystemRasType: 0x%x\n", hob->SystemStatus.SystemRasType);
+ // printk(BIOS_DEBUG, "\tnumCpus: 0x%x\n", hob->SystemStatus.numCpus);
+ // for (int x = 0; x < MAX_SOCKET; ++x) {
+ // printk(BIOS_DEBUG, "\tSocket %d FusedCores: 0x%x, ActiveCores: 0x%x, "
+ // "MaxCoreToBusRatio: 0x%x, MinCoreToBusRatio: 0x%x\n",
+ // x, hob->SystemStatus.FusedCores[x], hob->SystemStatus.ActiveCores[x],
+ // hob->SystemStatus.MaxCoreToBusRatio[x],
+ // hob->SystemStatus.MinCoreToBusRatio[x]);
+ // }
+ // printk(BIOS_DEBUG, "\tCurrentCoreToBusRatio: 0x%x\n",
+ // hob->SystemStatus.CurrentCoreToBusRatio);
+ // printk(BIOS_DEBUG, "\tIntelSpeedSelectCapable: 0x%x\n",
+ // hob->SystemStatus.IntelSpeedSelectCapable);
+ // printk(BIOS_DEBUG, "\tIssConfigTdpLevelInfo: 0x%x\n",
+ // hob->SystemStatus.IssConfigTdpLevelInfo);
+ // for (int x = 0; x < TDP_MAX_LEVEL; ++x) {
+ // printk(BIOS_DEBUG, "\t\tTDL Level %d IssConfigTdpTdpInfo: 0x%x, "
+ // "IssConfigTdpPowerInfo: 0x%x, IssConfigTdpCoreCount: 0x%x\n",
+ // x, hob->SystemStatus.IssConfigTdpTdpInfo[x],
+ // hob->SystemStatus.IssConfigTdpPowerInfo[x],
+ // hob->SystemStatus.IssConfigTdpCoreCount[x]);
+ // }
+ // printk(BIOS_DEBUG, "\tsocketPresentBitMap: 0x%x\n",
+ // hob->SystemStatus.socketPresentBitMap);
printk(BIOS_DEBUG, "\ttolmLimit: 0x%x\n", hob->SystemStatus.tolmLimit);
printk(BIOS_DEBUG, "\ttohmLimit: 0x%x\n", hob->SystemStatus.tohmLimit);
- printk(BIOS_DEBUG, "\tmmCfgBase: 0x%x\n", hob->SystemStatus.mmCfgBase);
- printk(BIOS_DEBUG, "\tnumChPerMC: 0x%x\n", hob->SystemStatus.numChPerMC);
- printk(BIOS_DEBUG, "\tmaxCh: 0x%x\n", hob->SystemStatus.maxCh);
- printk(BIOS_DEBUG, "\tmaxIMC: 0x%x\n", hob->SystemStatus.maxIMC);
+ // printk(BIOS_DEBUG, "\tmmCfgBase: 0x%x\n", hob->SystemStatus.mmCfgBase);
+ // printk(BIOS_DEBUG, "\tnumChPerMC: 0x%x\n", hob->SystemStatus.numChPerMC);
+ // printk(BIOS_DEBUG, "\tmaxCh: 0x%x\n", hob->SystemStatus.maxCh);
+ // printk(BIOS_DEBUG, "\tmaxIMC: 0x%x\n", hob->SystemStatus.maxIMC);

printk(BIOS_DEBUG, "\t===================== PLATFORM DATA =====================\n");
printk(BIOS_DEBUG, "\tPlatGlobalIoBase: 0x%x\n", hob->PlatformData.PlatGlobalIoBase);
printk(BIOS_DEBUG, "\tPlatGlobalIoLimit: 0x%x\n", hob->PlatformData.PlatGlobalIoLimit);
- printk(BIOS_DEBUG, "\tPlatGlobalMmiolBase: 0x%x\n",
- hob->PlatformData.PlatGlobalMmiolBase);
- printk(BIOS_DEBUG, "\tPlatGlobalMmiolLimit: 0x%x\n",
- hob->PlatformData.PlatGlobalMmiolLimit);
- printk(BIOS_DEBUG, "\tPlatGlobalMmiohBase: 0x%llx\n",
- hob->PlatformData.PlatGlobalMmiohBase);
- printk(BIOS_DEBUG, "\tPlatGlobalMmiohLimit: 0x%llx\n",
- hob->PlatformData.PlatGlobalMmiohLimit);
+ // printk(BIOS_DEBUG, "\tPlatGlobalMmiolBase: 0x%x\n",
+ // hob->PlatformData.PlatGlobalMmiolBase);
+ // printk(BIOS_DEBUG, "\tPlatGlobalMmiolLimit: 0x%x\n",
+ // hob->PlatformData.PlatGlobalMmiolLimit);
+ // printk(BIOS_DEBUG, "\tPlatGlobalMmiohBase: 0x%llx\n",
+ // hob->PlatformData.PlatGlobalMmiohBase);
+ // printk(BIOS_DEBUG, "\tPlatGlobalMmiohLimit: 0x%llx\n",
+ // hob->PlatformData.PlatGlobalMmiohLimit);
printk(BIOS_DEBUG, "\tMemTsegSize: 0x%x\n", hob->PlatformData.MemTsegSize);
printk(BIOS_DEBUG, "\tMemIedSize: 0x%x\n", hob->PlatformData.MemIedSize);
printk(BIOS_DEBUG, "\tPciExpressBase: 0x%llx\n", hob->PlatformData.PciExpressBase);
@@ -148,8 +148,8 @@
printk(BIOS_DEBUG, "\tMaxBusNumber: 0x%x\n", hob->PlatformData.MaxBusNumber);
printk(BIOS_DEBUG, "\tIoGranularity: 0x%x\n", hob->PlatformData.IoGranularity);
printk(BIOS_DEBUG, "\tMmiolGranularity: 0x%x\n", hob->PlatformData.MmiolGranularity);
- printk(BIOS_DEBUG, "\tMmiohGranularity: hi: 0x%x, lo:0x%x\n",
- hob->PlatformData.MmiohGranularity.hi, hob->PlatformData.MmiohGranularity.lo);
+ // printk(BIOS_DEBUG, "\tMmiohGranularity: hi: 0x%x, lo:0x%x\n",
+ // hob->PlatformData.MmiohGranularity.hi, hob->PlatformData.MmiohGranularity.lo);

for (int s = 0; s < MAX_SOCKET; ++s) {
printk(BIOS_DEBUG, "\t============ Socket %d Info ================\n", s);
@@ -167,14 +167,14 @@
hob->PlatformData.IIO_resource[s].IoApicBase);
printk(BIOS_DEBUG, "\tIoApicLimit: 0x%x\n",
hob->PlatformData.IIO_resource[s].IoApicLimit);
- printk(BIOS_DEBUG, "\tPciResourceMem32Base: 0x%x\n",
- hob->PlatformData.IIO_resource[s].PciResourceMem32Base);
- printk(BIOS_DEBUG, "\tPciResourceMem32Limit: 0x%x\n",
- hob->PlatformData.IIO_resource[s].PciResourceMem32Limit);
- printk(BIOS_DEBUG, "\tPciResourceMem64Base: 0x%llx\n",
- hob->PlatformData.IIO_resource[s].PciResourceMem64Base);
- printk(BIOS_DEBUG, "\tPciResourceMem64Limit: 0x%llx\n",
- hob->PlatformData.IIO_resource[s].PciResourceMem64Limit);
+ // printk(BIOS_DEBUG, "\tPciResourceMem32Base: 0x%x\n",
+ // hob->PlatformData.IIO_resource[s].PciResourceMem32Base);
+ // printk(BIOS_DEBUG, "\tPciResourceMem32Limit: 0x%x\n",
+ // hob->PlatformData.IIO_resource[s].PciResourceMem32Limit);
+ // printk(BIOS_DEBUG, "\tPciResourceMem64Base: 0x%llx\n",
+ // hob->PlatformData.IIO_resource[s].PciResourceMem64Base);
+ // printk(BIOS_DEBUG, "\tPciResourceMem64Limit: 0x%llx\n",
+ // hob->PlatformData.IIO_resource[s].PciResourceMem64Limit);

printk(BIOS_DEBUG, "\t============ Stack Info ================\n");
for (int x = 0; x < MAX_IIO_STACK; ++x) {
@@ -199,22 +199,22 @@
printk(BIOS_DEBUG, "\t\tVtdBarAddress: 0x%x\n", ri->VtdBarAddress);
}

- printk(BIOS_DEBUG, "\t============ PcieInfo ================\n");
- IIO_RESOURCE_INSTANCE iio_resource =
- hob->PlatformData.IIO_resource[s];
- for (int p = 0; p < NUMBER_PORTS_PER_SOCKET; ++p) {
- printk(BIOS_DEBUG, "\t\tPort: %d, Device: 0x%x, Function: 0x%x\n",
- p, iio_resource.PcieInfo.PortInfo[p].Device,
- iio_resource.PcieInfo.PortInfo[p].Function);
- }
+ // printk(BIOS_DEBUG, "\t============ PcieInfo ================\n");
+ // IIO_RESOURCE_INSTANCE iio_resource =
+ // hob->PlatformData.IIO_resource[s];
+ // for (int p = 0; p < NUMBER_PORTS_PER_SOCKET; ++p) {
+ // printk(BIOS_DEBUG, "\t\tPort: %d, Device: 0x%x, Function: 0x%x\n",
+ // p, iio_resource.PcieInfo.PortInfo[p].Device,
+ // iio_resource.PcieInfo.PortInfo[p].Function);
+ // }
}

- printk(BIOS_DEBUG, "\t============ Bus Bases ===============\n");
- for (int socket = 0; socket < MAX_SOCKET; ++socket) {
- for (int stack = 0; stack < MAX_IIO_STACK; ++stack) {
- printk(BIOS_DEBUG, "socket: %d, stack: %d, busno: 0x%x\n",
- socket, stack,
- hob->PlatformData.CpuQpiInfo[socket].StackBus[stack]);
- }
- }
+ // printk(BIOS_DEBUG, "\t============ Bus Bases ===============\n");
+ // for (int socket = 0; socket < MAX_SOCKET; ++socket) {
+ // for (int stack = 0; stack < MAX_IIO_STACK; ++stack) {
+ // printk(BIOS_DEBUG, "socket: %d, stack: %d, busno: 0x%x\n",
+ // socket, stack,
+ // hob->PlatformData.CpuQpiInfo[socket].StackBus[stack]);
+ // }
+ // }
}
diff --git a/src/soc/intel/xeon_sp/skx/include/soc/pci_devs.h b/src/soc/intel/xeon_sp/skx/include/soc/pci_devs.h
index ec52153..56956ab 100644
--- a/src/soc/intel/xeon_sp/skx/include/soc/pci_devs.h
+++ b/src/soc/intel/xeon_sp/skx/include/soc/pci_devs.h
@@ -35,10 +35,10 @@
#define PCU_IIO_STACK 1
#define PCU_DEV 30
#define PCU_CR1_FUN 1
-#define PCU_CR1_DEVID 0x2081
+#define PCU_CR1_DEVID 0x3459

#define PCU_CR0_FUN 0
-#define PCU_CR0_DEVID 0x2080
+#define PCU_CR0_DEVID 0x3458
#define PCU_DEV_CR0(bus) _PCU_DEV(bus, PCU_CR0_FUN)
#define PCU_CR0_PLATFORM_INFO 0xa8
#define PCU_CR0_P_STATE_LIMITS 0xd8
@@ -136,9 +136,9 @@
#define CHA_UTIL_ALL_FUNC 1
#define CHA_UTIL_ALL_MMCFG_CSR 0xc0

-#define MMAP_VTD_CFG_REG_DEVID 0x2024
-#define MMAP_VTD_STACK_CFG_REG_DEVID 0x2034
-#define VTD_DEV_NUM 0x5
+#define MMAP_VTD_CFG_REG_DEVID 0x09a2
+#define MMAP_VTD_STACK_CFG_REG_DEVID 0x09a2
+#define VTD_DEV_NUM 0x0
#define VTD_FUNC_NUM 0x0

#if !defined(__SIMPLE_DEVICE__)
diff --git a/src/soc/intel/xeon_sp/skx/romstage.c b/src/soc/intel/xeon_sp/skx/romstage.c
index a5c78f6..0f038cd 100644
--- a/src/soc/intel/xeon_sp/skx/romstage.c
+++ b/src/soc/intel/xeon_sp/skx/romstage.c
@@ -9,18 +9,18 @@

void platform_fsp_memory_init_params_cb(FSPM_UPD *mupd, uint32_t version)
{
- const config_t *config = config_of_soc();
- FSP_M_CONFIG *m_cfg = &mupd->FspmConfig;
+ // const config_t *config = config_of_soc();
+ // FSP_M_CONFIG *m_cfg = &mupd->FspmConfig;

- mupd->FspmUpdVersion = FSP_UPD_VERSION;
+ // mupd->FspmUpdVersion = FSP_UPD_VERSION;

// ErrorLevel - 0 (disable) to 8 (verbose)
- m_cfg->PcdFspMrcDebugPrintErrorLevel = 0;
- m_cfg->PcdFspKtiDebugPrintErrorLevel = 0;
+ // m_cfg->PcdFspMrcDebugPrintErrorLevel = 0;
+ // m_cfg->PcdFspKtiDebugPrintErrorLevel = 0;

mainboard_memory_init_params(mupd);

- m_cfg->VTdConfig.VTdSupport = config->vtd_support;
- m_cfg->VTdConfig.CoherencySupport = config->coherency_support;
- m_cfg->VTdConfig.ATS = config->ats_support;
+ // m_cfg->VTdConfig.VTdSupport = config->vtd_support;
+ // m_cfg->VTdConfig.CoherencySupport = config->coherency_support;
+ // m_cfg->VTdConfig.ATS = config->ats_support;
}
diff --git a/src/soc/intel/xeon_sp/skx/soc_util.c b/src/soc/intel/xeon_sp/skx/soc_util.c
index 6f48246..d330863 100644
--- a/src/soc/intel/xeon_sp/skx/soc_util.c
+++ b/src/soc/intel/xeon_sp/skx/soc_util.c
@@ -57,6 +57,8 @@

bool is_pcie_iio_stack_res(const STACK_RES *res)
{
+ if (res->BusBase == 0xff)
+ return true;
return res->BusBase < res->BusLimit;
}

@@ -156,42 +158,42 @@
* 5A..4D PSTACK3 stack 4 IOU4
* 5A..5D PSTACK4 stack 5 IOU5
*/
-int soc_get_stack_for_port(int port)
-{
- if (port == PORT_0)
- return CSTACK;
- else if (port >= PORT_1A && port <= PORT_1D)
- return PSTACK0;
- else if (port >= PORT_2A && port <= PORT_2D)
- return PSTACK1;
- else if (port >= PORT_3A && port <= PORT_3D)
- return PSTACK2;
- else if (port >= PORT_4A && port <= PORT_4D)
- return PSTACK3; // MCP0
- else if (port >= PORT_5A && port <= PORT_5D)
- return PSTACK4; // MCP1
- else
- return -1;
-}
+// int soc_get_stack_for_port(int port)
+// {
+// if (port == PORT_0)
+// return CSTACK;
+// else if (port >= PORT_1A && port <= PORT_1D)
+// return PSTACK0;
+// else if (port >= PORT_2A && port <= PORT_2D)
+// return PSTACK1;
+// else if (port >= PORT_3A && port <= PORT_3D)
+// return PSTACK2;
+// else if (port >= PORT_4A && port <= PORT_4D)
+// return PSTACK3; // MCP0
+// else if (port >= PORT_5A && port <= PORT_5D)
+// return PSTACK4; // MCP1
+// else
+// return -1;
+// }

uint8_t soc_get_iio_ioapicid(int socket, int stack)
{
uint8_t ioapic_id = socket ? 0xf : 0x9;
- switch (stack) {
- case CSTACK:
- break;
- case PSTACK0:
- ioapic_id += 1;
- break;
- case PSTACK1:
- ioapic_id += 2;
- break;
- case PSTACK2:
- ioapic_id += 3;
- break;
- default:
- return 0xff;
- }
+ //switch (stack) {
+ //case CSTACK:
+ // break;
+ //case PSTACK0:
+ // ioapic_id += 1;
+ // break;
+ //case PSTACK1:
+ // ioapic_id += 2;
+ // break;
+ //case PSTACK2:
+ // ioapic_id += 3;
+ // break;
+ //default:
+ // return 0xff;
+ //}
return ioapic_id;
}

diff --git a/src/soc/intel/xeon_sp/uncore_acpi.c b/src/soc/intel/xeon_sp/uncore_acpi.c
index bcfb4da..5ea8000 100644
--- a/src/soc/intel/xeon_sp/uncore_acpi.c
+++ b/src/soc/intel/xeon_sp/uncore_acpi.c
@@ -302,15 +302,15 @@
APIC_DEV_NUM, APIC_FUNC_NUM);

// Add CBDMA devices for CSTACK
- if (socket != 0 && stack == CSTACK) {
- for (int cbdma_func_id = 0; cbdma_func_id < 8; ++cbdma_func_id) {
- printk(BIOS_DEBUG, " [PCI Endpoint Device] "
- "PCI Bus Number: 0x%x, PCI Path: 0x%x, 0x%x\n",
- bus, CBDMA_DEV_NUM, cbdma_func_id);
- current += acpi_create_dmar_ds_pci(current,
- bus, CBDMA_DEV_NUM, cbdma_func_id);
- }
- }
+ // if (socket != 0 && stack == CSTACK) {
+ // for (int cbdma_func_id = 0; cbdma_func_id < 8; ++cbdma_func_id) {
+ // printk(BIOS_DEBUG, " [PCI Endpoint Device] "
+ // "PCI Bus Number: 0x%x, PCI Path: 0x%x, 0x%x\n",
+ // bus, CBDMA_DEV_NUM, cbdma_func_id);
+ // current += acpi_create_dmar_ds_pci(current,
+ // bus, CBDMA_DEV_NUM, cbdma_func_id);
+ // }
+ // }
#endif

// Add PCIe Ports
@@ -325,14 +325,14 @@

#if CONFIG(SOC_INTEL_SKYLAKE_SP) || CONFIG(SOC_INTEL_COOPERLAKE_SP)
// Add VMD
- if (hob->PlatformData.VMDStackEnable[socket][stack] &&
- stack >= PSTACK0 && stack <= PSTACK2) {
- printk(BIOS_DEBUG, " [PCI Endpoint Device] "
- "PCI Bus Number: 0x%x, PCI Path: 0x%x, 0x%x\n",
- bus, VMD_DEV_NUM, VMD_FUNC_NUM);
- current += acpi_create_dmar_ds_pci(current,
- bus, VMD_DEV_NUM, VMD_FUNC_NUM);
- }
+ // if (hob->PlatformData.VMDStackEnable[socket][stack] &&
+ // stack >= PSTACK0 && stack <= PSTACK2) {
+ // printk(BIOS_DEBUG, " [PCI Endpoint Device] "
+ // "PCI Bus Number: 0x%x, PCI Path: 0x%x, 0x%x\n",
+ // bus, VMD_DEV_NUM, VMD_FUNC_NUM);
+ // current += acpi_create_dmar_ds_pci(current,
+ // bus, VMD_DEV_NUM, VMD_FUNC_NUM);
+ // }
#endif
}

@@ -573,7 +573,7 @@
acpi_cedt_t *cedt;

const config_t *const config = config_of(device);
-
+ if (!CONFIG(BOARD_IDAVILLE)) {
/* SRAT */
current = ALIGN_UP(current, 8);
printk(BIOS_DEBUG, "ACPI: * SRAT at %lx\n", current);
@@ -634,6 +634,7 @@
printk(BIOS_DEBUG, "ACPI: * HEST at %lx\n", current);
current = hest_create(current, rsdp);
}
+ }

return current;
}
diff --git a/src/soc/intel/xeon_sp/util.c b/src/soc/intel/xeon_sp/util.c
index 81dc77d..c865c28 100644
--- a/src/soc/intel/xeon_sp/util.c
+++ b/src/soc/intel/xeon_sp/util.c
@@ -54,7 +54,7 @@

int get_platform_thread_count(void)
{
- return soc_get_num_cpus() * get_threads_per_package();
+ return 1 * get_threads_per_package();
}

const IIO_UDS *get_iio_uds(void)
@@ -77,7 +77,7 @@
*/
bool soc_cpu_is_enabled(const size_t idx)
{
- const IIO_UDS *hob = get_iio_uds();
+ const BL_IIO_UDS *hob = (BL_IIO_UDS *) get_iio_uds();
assert(idx < CONFIG_MAX_SOCKET);

return hob->PlatformData.IIO_resource[idx].Valid;
@@ -85,7 +85,7 @@

unsigned int soc_get_num_cpus(void)
{
- return get_iio_uds()->SystemStatus.numCpus;
+ return ((BL_IIO_UDS *) get_iio_uds())->SystemStatus.numCpus;
}

#if ENV_RAMSTAGE /* Setting devtree variables is only allowed in ramstage. */
diff --git a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspUpd.h b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspUpd.h
index daa0bb4..b2d83c4 100644
--- a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspUpd.h
+++ b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspUpd.h
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -37,11 +37,11 @@

#pragma pack(1)

-#define FSPT_UPD_SIGNATURE 0x545F4450554C4E41 /* 'ANLUPD_T' */
+#define FSPT_UPD_SIGNATURE 0x545F445055434F53 /* 'SOCUPD_T' */

-#define FSPM_UPD_SIGNATURE 0x4D5F4450554C4E41 /* 'ANLUPD_M' */
+#define FSPM_UPD_SIGNATURE 0x4D5F445055434F53 /* 'SOCUPD_M' */

-#define FSPS_UPD_SIGNATURE 0x535F4450554C4E41 /* 'ANLUPD_S' */
+#define FSPS_UPD_SIGNATURE 0x535F445055434F53 /* 'SOCUPD_S' */

#pragma pack()

diff --git a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspmUpd.h b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspmUpd.h
index 7a6ecb1..7d9b437 100644
--- a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspmUpd.h
+++ b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspmUpd.h
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -37,528 +37,1524 @@

#pragma pack(1)

-/**
- FSP Header Version Number
-**/
-#define FSP_UPD_VERSION (0x1947)
+#define MAX_CHANNEL 3 /* Maximum Number of Memory Channels */
+#define MAX_DIMM 2 /* Maximum Number of DIMMs PER Memory Channel */
+#define MAX_SPD_BYTES 512 /* Maximum Number of SPD bytes */
+#define MAX_USB_PORTS 4

-#define MAX_CHANNEL 6 /* Maximum Number of Memory Channels */
-#define MAX_DIMM 2 /* Maximum Number of DIMMs per Channel */
+/*
+* SMBIOS Memory Info structures.
+*/
+typedef struct {
+ UINT8 DimmId;
+ UINT32 SizeInMb;
+ UINT16 MfgId;
+ UINT8 ModulePartNum[20]; /* Module part number for DDR3 is 18 bytes however for DRR4 20 bytes as per JEDEC Spec, so reserving 20 bytes */
+} DIMM_INFO;

-#define HIDE 1
-#define NOT_HIDE 0
+typedef struct {
+ UINT8 ChannelId;
+ UINT8 DimmCount;
+ DIMM_INFO DimmInfo[MAX_DIMM];
+} CHANNEL_INFO;

-#define IIO_BIFURCATE_AUTO 0xFF
+typedef struct {
+ UINT8 Revision;
+ UINT16 DataWidth;
+ /** As defined in SMBIOS 3.0 spec
+ Section 7.18.2 and Table 75
+ **/
+ UINT16 MemoryType;
+ UINT16 MemoryFrequencyInMHz;
+ /** As defined in SMBIOS 3.0 spec
+ Section 7.17.3 and Table 72
+ **/
+ UINT8 ErrorCorrectionType;
+ UINT8 ChannelCount;
+ CHANNEL_INFO ChannelInfo[MAX_CHANNEL];
+} FSP_SMBIOS_MEMORY_INFO;

-/* Ports 1D-1A, 2D-2A, 3D-3A */
-#define IIO_BIFURCATE_x4x4x4x4 0
-#define IIO_BIFURCATE_x4x4xxx8 1
-#define IIO_BIFURCATE_xxx8x4x4 2
-#define IIO_BIFURCATE_xxx8xxx8 3
-#define IIO_BIFURCATE_xxxxxx16 4
-#define IIO_BIFURCATE_xxxxxxxx 0xF
+typedef struct {
+ UINT32 PerfSig;
+ UINT16 PerfLen;
+ UINT16 Reserved4;
+ UINT32 PerfIdx;
+ UINT64 PerfData[32];
+} FSP_PERF_INFO;

+#define BL_MAX_FIA_LANES 24
+#define BL_FIA_LANE_OVERRIDE_DISABLED 0xff
+#define BL_FIA_LANE_DISABLED 0x0
+#define BL_FIA_LANE_PCIE 0x1
+#define BL_FIA_LANE_SATA 0x2
+#define BL_FIA_LANE_XHCI 0x3
+#define BL_FIA_LANE_PCIE_ROOT_PORT_LINK_WIDTH_SET_BY_BICTRL 0x0
+#define BL_FIA_LANE_PCIE_ROOT_PORT_LINK_WIDTH_X1 0x1

-typedef enum {
- IioPortA = 0,
- IioPortB = 1,
- IioPortC = 2,
- IioPortD = 3
-} IIO_PORTS;
+typedef struct {
+ UINT8 FiaLaneConfig[BL_MAX_FIA_LANES];
+ UINT8 FiaLaneLinkWidth[BL_MAX_FIA_LANES];
+} BL_HSIO_INFORMATION;

/**
- * Enums and Macro definitions needed for reference RVP and CRB
- * table declarations
-**/
-typedef enum {
- Iio_Socket0 = 0,
- Iio_Socket1,
- Iio_Socket2,
- Iio_Socket3,
- Iio_Socket4,
- Iio_Socket5,
- Iio_Socket6,
- Iio_Socket7
-} IIO_SOCKETS;
+ This structure holds the DLL configuration
+ register values that will be programmed by RC.
+ Those policies should be used by platform if default values
+ provided by RC are not sufficient to provide stable operation
+ at all supported speed modes. RC will blindly set the DLL values
+ as provided in this structure.

-typedef enum {
- Iio_Iou0 = 0,
- Iio_Iou1,
- Iio_Iou2,
- Iio_Mcp0,
- Iio_Mcp1,
- Iio_IouMax
-} IIO_IOUS;
-
-/**
- IIO PCIe Ports
- **/
-typedef enum {
- PORT_0 = 0,
- // IOU2
- PORT_1A,
- PORT_1B,
- PORT_1C,
- PORT_1D,
- // IOU0
- PORT_2A,
- PORT_2B,
- PORT_2C,
- PORT_2D,
- // IOU1
- PORT_3A,
- PORT_3B,
- PORT_3C,
- PORT_3D,
- // MCP0
- PORT_4A,
- PORT_4B,
- PORT_4C,
- PORT_4D,
- // MCP1
- PORT_5A,
- PORT_5B,
- PORT_5C,
- PORT_5D,
- MAX_PORTS
-} PCIE_PORTS;
-
-/**
- IIO Stacks
- **/
-typedef enum {
- CSTACK = 0,
- PSTACK0,
- PSTACK1,
- PSTACK2,
- PSTACK3,
- PSTACK4,
- MAX_STACKS
-} IIO_STACKS;
-
-#define IioStack0 CSTACK
-/* MAX_LOGIC_IIO_STACK is needed by uncore_acpi.c, define the same value from nb_acpi.c for
- Skylake-SP to keep the same behavior. */
-#define MAX_LOGIC_IIO_STACK PSTACK2
-
-/**
- NTB Per Port Definition
- **/
-typedef enum {
- NTB_PORT_TRANSPARENT = 0,
- NTB_PORT_NTB_NTB
-} NTB_PPD;
-
-/**
- NTB Upstream/Downstream Configuration
- **/
-typedef enum {
- NTB_XLINK_DSD_USP = 2,
- NTB_XLINK_USD_DSP
-} NTB_XLINK;
-
-/**
- PCIe Link Speed Selection
- **/
-typedef enum {
- PcieAuto = 0,
- PcieGen1,
- PcieGen2,
- PcieGen3
-} PCIE_LINK_SPEED;
-
-/**
- GPIO Pad Number
-**/
-
-typedef UINT32 UPD_GPIO_PAD;
-
-/**
- UPD_GPIO_CONFIG:
- 64 bit struct defining GPIO PAD configuration
+ For help with obtaining valid DLL values for your platform please
+ contact enabling support.
**/
typedef struct {
- /**
- Pad Mode
- Pad can be set as GPIO or one of its native functions.
- When in native mode setting Direction (except Inversion), OutputState,
- InterruptConfig and Host Software Pad Ownership are unnecessary.
- Refer to definition of GPIO_PAD_MODE.
- Refer to EDS for each native mode according to the pad.
- **/
- UINT32 PadMode : 4;
- /**
- Host Software Pad Ownership
- Set pad to ACPI mode or GPIO Driver Mode.
- Refer to definition of GPIO_HOSTSW_OWN.
- **/
- UINT32 HostSoftPadOwn : 2;
- /**
- GPIO Direction
- Can choose between In, In with inversion Out, both In and Out,
- both In with inversion and out or disabling both.
- Refer to definition of GPIO_DIRECTION for supported settings.
- **/
- UINT32 Direction : 5;
- /**
- Output State
- Set Pad output value.
- Refer to definition of GPIO_OUTPUT_STATE for supported settings.
- This setting takes place when output is enabled.
- **/
- UINT32 OutputState : 2;
- /**
- GPIO Interrupt Configuration
- Set Pad to cause one of interrupts (IOxAPIC/SCI/SMI/NMI). This setting
- is applicable only if GPIO is in input mode.
- If GPIO is set to cause an SCI then also Gpe is enabled for this pad.
- Refer to definition of GPIO_INT_CONFIG for supported settings.
- **/
- UINT32 InterruptConfig : 8;
- /**
- GPIO Power Configuration.
- This setting controls Pad Reset Configuration.
- Refer to definition of GPIO_RESET_CONFIG for supported settings.
- **/
- UINT32 PowerConfig : 4;
-
- /**
- GPIO Electrical Configuration
- This setting controls pads termination and voltage tolerance.
- Refer to definition of GPIO_ELECTRICAL_CONFIG for supported settings.
- **/
- UINT32 ElectricalConfig : 7;
-
- /**
- GPIO Lock Configuration
- This setting controls pads lock.
- Refer to definition of GPIO_LOCK_CONFIG for supported settings.
- **/
- UINT32 LockConfig : 3;
- /**
- Additional GPIO configuration
- Refer to definition of GPIO_OTHER_CONFIG for supported settings.
- **/
- UINT32 OtherSettings : 2;
-
- UINT32 RsvdBits : 27; ///< Reserved bits for future extension
-
- UINT32 RsvdBits1; ///< Reserved bits for future extension
-} UPD_GPIO_CONFIG;
+ UINT32 TxCmdDelayControl; // Offset 820h: Tx CMD Delay Control
+ UINT32 TxDataDelayControl1; // Offset 824h: Tx Data Delay Control 1
+ UINT32 TxDataDelayControl2; // Offset 828h: Tx Data Delay Control 2
+ UINT32 RxCmdDataDelayControl1; // Offset 82Ch: Rx CMD + Data Delay Control 1
+ UINT32 RxCmdDataDelayControl2; // Offset 834h: Rx CMD + Data Delay Control 2
+ UINT32 RxStrobeDelayControl; // Offset 830h: Rx Strobe Delay Control, valid only for eMMC
+} BL_SCS_SD_DLL;

/**
- UPD_GPIO_INIT_CONFIG:
- Defines a GPIO Pad and its respective configuration
- Constitutes one entry in the GPIO config table
- Reference FSP implementation:
- AndersonLakePlatPkg\Uba\UbaMain\Pei\TypeAndersonCreek\GpioTable.c
- Bootloaders can include the following to define GPIO PADs/other macros:
- PurleySktPkg\SouthClusterLbg\Include\Library\GpioLib.h
+ Definition of FIA OVERRIDE STATUS HOB
+ Get/Set Status are defined by their respective Get/Set MeFiaMuxConfig functions called in PeiFiaMuxConfigInitLib.
+
+ FIA MUX configuration is based on platform design and generally set by soft straps.
+ FIA MUX configuration can change the generic lane assignment through the FSP UPDs to increase flexibility.
+ FIA_OVERRIDE_STATUS_HOB allows the FSP to provide the required feedback
+ on the update of the FIA MUX configuration to the customer's bootloader.
**/
typedef struct {
- UPD_GPIO_PAD GpioPad;
- UPD_GPIO_CONFIG GpioConfig;
-} UPD_GPIO_INIT_CONFIG;
+ UINT32 FiaMuxConfigGetStatus; // Status returned by MeFiaMuxConfigGet (MeFiaMuxLib)
+ UINT32 FiaMuxConfigSetStatus; // Status returned by MeFiaMuxConfigSet (MeFiaMuxLib)
+ BOOLEAN FiaMuxConfigSetRequired; // Indicates that a set was required in the FIA lane assignment.
+ // FALSE = the requested config matched the existing one.
+ // TRUE = the requested config did not match the existing one.
+} BL_FIA_OVERRIDE_STATUS_HOB;

-/**
- GPIOTABLE_CONFIG:
- GpioTable - Base Address of the Gpio Table declared by the
- bootloader.
- Default: NULL
- NumberofEntries - Number of Entries in the GPIO Table provided
- Default: 0
- If GpioTable is Null or NumberofEntries is 0, then FSP will handle Gpio Pad
- configuration using default GPIO_INIT_CONFIG tables
-**/
+
+//
+// Data Types
+//
+#ifndef UINT64_STRUCT_T
+#define UINT64_STRUCT_T
+typedef union {
+ struct {
+ UINT32 Low;
+ UINT32 High;
+ } Data32;
+ UINT64 Data;
+} BL_UINT64_STRUCT;
+#endif // UINT64_STRUCT_T
+
+///
+/// RC version number structure.
+///
typedef struct {
- UPD_GPIO_INIT_CONFIG *GpioTable;
- UINT32 NumberOfEntries;
-} GPIOTABLE_CONFIG;
+ UINT8 Major;
+ UINT8 Minor;
+ UINT8 Revision;
+ UINT16 BuildNumber;
+} BL_RC_VERSION;

-/**
- UPD_IIO_BIFURCATION_DATA_ENTRY:
- Defines IIO Bifurcation for IIO Units
- Constitutes one entry in the IIO Bifurcation table, describing bifurcation entries as:
- Socket | IOU | Bifurcation
- Valid IouNumbers are from 0 to 4
- Reference FSP Implementation :
- AndersonLakePlatPkg\Uba\UbaMain\Pei\TypeAndersonCreek\IioBifurInit.c
- Definitions for relevant bifurcation macros:
- NumberCpRcPkg\Library\BaseMemoryCoreLib\Chip\Skx\Include\Iio\IioRegs.h
-**/
+#define BL_MAX_CHA_MAP 4
+#define BL_MAX_FW_KTI_PORTS 3
+#define BL_MAX_SOCKET 1
+#define BL_NUMBER_PORTS_PER_SOCKET 5
+#define BL_TYPE_MAX_MMIO_BAR 11
+#define BL_MAX_IMC 1
+#define BL_MAX_CH 3
+#define BL_MAX_LOGIC_IIO_STACK 8
+#define BL_MAX_IIO_STACK 6
+#define BL_MaxIIO BL_MAX_SOCKET
+#define BL_MC_MAX_NODE (BL_MAX_SOCKET * BL_MAX_IMC)
+
+
typedef struct {
- UINT8 Socket;
- UINT8 IouNumber;
- UINT8 Bifurcation;
-} UPD_IIO_BIFURCATION_DATA_ENTRY;
+ UINT8 Valid; // TRUE, if the link is valid (i.e reached normal operation)
+ UINT8 PeerSocId; // Socket ID
+ UINT8 PeerSocType; // Socket Type (0 - CPU; 1 - IIO)
+ UINT8 PeerPort; // Port of the peer socket
+}BL_QPI_PEER_DATA;

-/**
- IIOBIFURCATION_CONFIG:
- IIoBifurcationTable - Base Address of the IIO Bifurcation table
- declared by the bootloader
- Default: NULL
- NumberofEntries - Number of Entries in the IIO Bifurcation Table
- Default: 0
- If IIoBifurcationTable is Null or NumberofEntries is 0, then FSP will handle IIO
- bifurcation using default IIO_BIFURCATION_DATA_ENTRY tables
-**/
typedef struct {
- UPD_IIO_BIFURCATION_DATA_ENTRY *IIoBifurcationTable;
- UINT32 NumberOfEntries;
-} IIOBIFURCATION_CONFIG;
+ UINT8 Valid;
+ UINT32 MmioBar[BL_TYPE_MAX_MMIO_BAR];
+ UINT8 PcieSegment;
+ BL_UINT64_STRUCT SegMmcfgBase;
+ UINT16 stackPresentBitmap;
+ UINT16 M2PciePresentBitmap;
+ UINT8 TotM3Kti;
+ UINT8 TotCha;
+ UINT32 ChaList[BL_MAX_CHA_MAP];
+ UINT32 SocId;
+ BL_QPI_PEER_DATA PeerInfo[BL_MAX_FW_KTI_PORTS]; // QPI LEP info
+} BL_QPI_CPU_DATA;

-/**
- VTD_CONFIG :
- VT direct IO Configuration Support
- VTdSupport - Enable/Disable VTd Support
- CoherencySupport - Enable/Disable Coherency Support
- ATS - Enable/Disable Address Translation Services
- FSP Will Disable VTd by default
-**/
typedef struct {
- UINT8 VTdSupport;
- UINT8 CoherencySupport;
- UINT8 ATS;
-} VTD_CONFIG;
+ UINT8 Valid;
+ UINT8 SocId;
+ BL_QPI_PEER_DATA PeerInfo[BL_MAX_SOCKET]; // QPI LEP info
+} BL_QPI_IIO_DATA;

-/**
- UPD_PCIE_PORT_CONFIG
- PCIe port configuration
- PortIndex - Index of the port to be configured as defined by PCI_PORTS
- HidePort - Hide the selected port
- DeEmphasis - DeEmphasis of the selected PCIe port
- PortLinkSpeed - Port Link Speed. Use PCIE_LINK_SPEED to set
- DfxDnTxPreset - PCIe Downstream Tx Preset, valid values (0x00 - 0x09,
- 0xFF is Auto, Auto sets 0x07)
- DfxRxPreset - PCIe Downstream Rx Preset, valid values (0x00 - 0x06, 0xFF is Auto)
- DfxUpTxPreset - PCIe Upstream Tx Preset, valid values (0x00 - 0x09, 0xFF is Auto)
- Sris - Enable/Disable SRIS (0x00 - Disable, 0x01 - Enable)
- PcieCommonClock - Configure port clocking. (0x00 - Distinct, 0x01 - Common)
- MaxPayload - PCIe Max Payload Size on the port
- NtbPpd - NTB port Configuration as defined in NTB_PPD
- NtbSplitBar - 0: Use one 64, 1: Use two 32-bit split bars
- NtbSBar01Prefetch - Configure Split BAR 0/1 as prefetchable
- NtbXlinkCtlOverride - NTB Cross-link as defined in NTB_XLINK
- NtbBarSizePBar4 - Set Prefetchable BAR 4 size for the primary NTB side in case
- Split Bar is Enabled
- NtbBarSizePBar5 - Set Prefetchable BAR 5 size for the primary NTB side in case
- Split Bar is Enabled
- FSP_WA: Till FSP fixes NtbBarSizeOverride, parameters below are MANDATORY!:
- These BAR size registers are write once registers and will be programmed with 0
- if not passed as FSP is
- hardcoding NtbBarSizeOverride to 0x01 for now.
- Split BAR sizes would need to be programmed mandatorily as well in case split bars
- are enabled.
- NtbBarSizePBar23 - Set Prefetchable BAR 23 size for the primary NTB side
- NtbBarSizePBar45 - Used to set bar 4 and 5 sizes in case Split Bar is Disabled
- NtbBarSizeSBar23 - Set Prefetchable BAR 23 size for the secondary NTB side
- NtbBarSizeSBar45 - Set Prefetchable BAR 45 size for the secondary NTB side in case
- Split Bar is disabled
-**/
typedef struct {
- UINT32 PortIndex;
- UINT8 HidePort;
- UINT8 DeEmphasis;
- UINT8 PortLinkSpeed;
- UINT8 MaxPayload;
- UINT8 DfxDnTxPreset;
- UINT8 DfxRxPreset;
- UINT8 DfxUpTxPreset;
- UINT8 Sris;
- UINT8 PcieCommonClock;
- UINT8 NtbPpd;
- UINT8 NtbSplitBar;
- UINT8 NtbBarSizePBar23;
- UINT8 NtbBarSizePBar4;
- UINT8 NtbBarSizePBar5;
- UINT8 NtbBarSizePBar45;
- UINT8 NtbBarSizeSBar23;
- UINT8 NtbBarSizeSBar4;
- UINT8 NtbBarSizeSBar5;
- UINT8 NtbBarSizeSBar45;
- UINT8 NtbSBar01Prefetch;
- UINT8 NtbXlinkCtlOverride;
-} UPD_PCI_PORT_CONFIG;
+ UINT8 Device;
+ UINT8 Function;
+} BL_IIO_PORT_INFO;

-/**
- PCIEPORT_CONFIG:
- PciePortConfiguration - Pointer to an array of PCIe port configuration structures
- as declared above
- NumberOfEntries - Number of elements in the PciePortConfiguration Array
-**/
typedef struct {
- UPD_PCI_PORT_CONFIG *ConfigurationTable;
+ BL_IIO_PORT_INFO PortInfo[BL_NUMBER_PORTS_PER_SOCKET];
+} BL_IIO_DMI_PCIE_INFO;

- UINT16 NumberOfEntries;
-} IIOPCIPORT_CONFIG;
+typedef struct _BL_STACK_RES {
+ UINT8 Personality;
+ UINT8 BusBase;
+ UINT8 BusLimit;
+ UINT16 PciResourceIoBase;
+ UINT16 PciResourceIoLimit;
+ UINT32 IoApicBase;
+ UINT32 IoApicLimit;
+ UINT32 Mmio32Base; // Base of low MMIO configured for this stack in memory map
+ UINT32 Mmio32Limit; // Limit of low MMIO configured for this stack in memory map
+ UINT64 Mmio64Base; // Base of high MMIO configured for this stack in memory map
+ UINT64 Mmio64Limit; // Limit of high MMIO configured for this stack in memory map
+ UINT32 PciResourceMem32Base; // Base of low MMIO resource available for PCI devices
+ UINT32 PciResourceMem32Limit; // Limit of low MMIO resource available for PCI devices
+ UINT64 PciResourceMem64Base; // Base of high MMIO resource available for PCI devices
+ UINT64 PciResourceMem64Limit; // Limit of high MMIO resource available for PCI devices
+ UINT32 VtdBarAddress;
+ UINT32 Mmio32MinSize; // Minimum required size of MMIO32 resource needed for this stack
+} BL_STACK_RES;

-/**
- UPD_IIO_STACK_RESOURCE_CONFIG:
- StackIndex - Index of the CPU IIO Stack to be configured as defined by IIO_STACKS
- PciResourceIoBase
- PciResourceIoLimit
- PciResourceMem32Base
- PciResourceMem32Limit
- PciResourceMem64Base
- PciResourceMem64Limit
-**/
typedef struct {
- UINT8 StackIndex;
- UINT16 PciResourceIoBase;
- UINT16 PciResourceIoLimit;
- UINT32 PciResourceMem32Base;
- UINT32 PciResourceMem32Limit;
- UINT64 PciResourceMem64Base;
- UINT64 PciResourceMem64Limit;
-} UPD_IIO_STACK_RESOURCE_CONFIG;
+ UINT8 Valid;
+ UINT8 SocketID; // Socket ID of the IIO (0..3)
+ UINT8 BusBase;
+ UINT8 BusLimit;
+ UINT16 PciResourceIoBase;
+ UINT16 PciResourceIoLimit;
+ UINT32 IoApicBase;
+ UINT32 IoApicLimit;
+ UINT32 Mmio32Base; // Base of low MMIO configured for this socket in memory map
+ UINT32 Mmio32Limit; // Limit of low MMIO configured for this socket in memory map
+ UINT64 Mmio64Base; // Base of high MMIO configured for this socket in memory map
+ UINT64 Mmio64Limit; // Limit of high MMIO configured for this socket in memory map
+ BL_STACK_RES StackRes[BL_MAX_LOGIC_IIO_STACK];
+ UINT32 RcBaseAddress;
+ BL_IIO_DMI_PCIE_INFO PcieInfo;
+ UINT8 DmaDeviceCount;
+} BL_IIO_RESOURCE_INSTANCE;

-/**
- IIORESOURCE_CONFIG:
- ResourceConfigTable - Pointer to an Iio Stack Resource Configuration Structure Array
- NumberOfEntries - Number of Entries in the Iio Stack Resource Configuration Array
-**/
typedef struct {
- UPD_IIO_STACK_RESOURCE_CONFIG *ResourceTable;
- UINT16 NumberOfEntries;
-} IIORESOURCE_CONFIG;
+ UINT16 PlatGlobalIoBase; // Global IO Base
+ UINT16 PlatGlobalIoLimit; // Global IO Limit
+ UINT32 PlatGlobalMmio32Base; // Global Mmiol base
+ UINT32 PlatGlobalMmio32Limit; // Global Mmiol limit
+ UINT64 PlatGlobalMmio64Base; // Global Mmioh Base [43:0]
+ UINT64 PlatGlobalMmio64Limit; // Global Mmioh Limit [43:0]
+ BL_QPI_CPU_DATA CpuQpiInfo[BL_MAX_SOCKET]; // QPI related info per CPU
+ BL_QPI_IIO_DATA IioQpiInfo[BL_MAX_SOCKET]; // QPI related info per IIO
+ UINT32 MemTsegSize;
+ UINT32 MemIedSize;
+ UINT64 PciExpressBase;
+ UINT32 PciExpressSize;
+ UINT32 MemTolm;
+ BL_IIO_RESOURCE_INSTANCE IIO_resource[BL_MAX_SOCKET];
+ UINT8 numofIIO;
+ UINT8 MaxBusNumber;
+ UINT32 packageBspApicID[BL_MAX_SOCKET]; // This data array is valid only for SBSP, not for non-SBSP CPUs. <AS> for CpuSv
+ UINT8 EVMode;
+ UINT8 Pci64BitResourceAllocation;
+ UINT8 SkuPersonality[BL_MAX_SOCKET];
+ UINT8 VMDStackEnable[BL_MaxIIO][BL_MAX_IIO_STACK];
+ UINT16 IoGranularity;
+ UINT32 MmiolGranularity;
+ BL_UINT64_STRUCT MmiohGranularity;
+ UINT8 RemoteRequestThreshold; //5370389
+ UINT32 UboxMmioSize;
+ UINT32 MaxAddressBits;
+} BL_PLATFORM_DATA;

-/**
- UPD_PCH_PCIE_PORT:
- PortIndex - PCH PCIe Port Index.
- Valid Port Numbers are: 0 to 19.
- Enable - Enable/Disable PCH PCIe port
- PortLinkSpeed - Port Link Speed. Use PCIE_LINK_SPEED to set
-**/
typedef struct {
- UINT8 PortIndex;
- UINT8 ForceEnable;
- UINT8 PortLinkSpeed;
-} UPD_PCH_PCIE_PORT;
+ UINT8 CurrentUpiiLinkSpeed;// Current programmed UPI Link speed (Slow/Full speed mode)
+ UINT8 CurrentUpiLinkFrequency; // Current requested UPI Link frequency (in GT)
+ UINT8 OutKtiCpuSktHotPlugEn; // 0 - Disabled, 1 - Enabled for PM X2APIC
+ UINT32 OutKtiPerLinkL1En[BL_MAX_SOCKET]; // output kti link enabled status for PM
+ UINT8 IsocEnable;
+ UINT32 meRequestedSize; // Size of the memory range requested by ME FW, in MB
+ UINT32 ieRequestedSize; // Size of the memory range requested by IE FW, in MB
+ UINT8 DmiVc1;
+ UINT8 DmiVcm;
+ UINT32 CpuPCPSInfo;
+ UINT8 cpuSubType;
+ UINT8 SystemRasType;
+ UINT8 numCpus; // 1,..4. Total number of CPU packages installed and detected (1..4)by QPI RC
+ UINT16 tolmLimit;
+ UINT32 tohmLimit;
+ BL_RC_VERSION RcVersion;
+ BOOLEAN MsrTraceEnable;
+ UINT8 DdrXoverMode; // DDR 2.2 Mode
+ // For RAS
+ UINT8 bootMode;
+ UINT8 OutClusterOnDieEn; // Whether RC enabled COD support
+ UINT8 OutSncEn;
+ UINT8 OutNumOfCluster;
+ UINT8 imcEnabled[BL_MAX_SOCKET][BL_MAX_IMC];
+ UINT16 LlcSizeReg;
+ UINT8 chEnabled[BL_MAX_SOCKET][BL_MAX_CH];
+ UINT8 memNode[BL_MC_MAX_NODE];
+ UINT8 IoDcMode;
+ UINT8 DfxRstCplBitsEn;
+} BL_SYSTEM_STATUS;

-/**
- PCHPCIPORT_CONFIG:
- PciPortConfig - Pointer to an array of PCH PCI Ports to be configured
- RootPortFunctionSwapping - Disable root port swapping based on device
- connection status
- PciePllSsc - Specifies the Pcie Pll Spread Spectrum Percentage
- The value of this policy is in 1/10th percent units.
- Valid spread range: 0-20. Auto: 0xFE (sets it to hardware default)
- Completely Disable PCIe PLL SSC: 0xFF
- A value of 0 is SSC of 0.0%. A value of 20 is SSC of 2.0%
- NumberOfEntries - Number of entries in the PCH PCI Port configuration
-**/
typedef struct {
- UPD_PCH_PCIE_PORT *PciPortConfig;
- UINT8 RootPortFunctionSwapping;
- UINT8 PciePllSsc;
- UINT16 NumberOfEntries;
-} PCHPCIPORT_CONFIG;
+ BL_PLATFORM_DATA PlatformData;
+ BL_SYSTEM_STATUS SystemStatus;
+} BL_IIO_UDS;
+
+//PCI MMIO and IO resource reconfiguration
+typedef struct {
+ UINT16 IoBase; // Base of I/O range assigned to entity
+ UINT16 IoLimit; // Limit of I/O range assigned to entity
+ UINT32 LowMmioBase; // Base of low MMIO region for entity
+ UINT32 LowMmioLimit; // Limit of low MMIO region for entity
+ UINT64 HighMmioBase; // Base of high (64-bit) MMIO region for entity
+ UINT64 HighMmioLimit; // Limit of high (64-bit) MMIO region for entity
+} BL_PCI_BASE_LIMITS;
+
+typedef struct {
+ BL_PCI_BASE_LIMITS StackLimits[BL_MAX_LOGIC_IIO_STACK]; // Base and Limit of all PCIe resources for each stack of the socket
+} BL_SOCKET_PCI_BASE_LIMITS;
+
+typedef struct {
+ BL_SOCKET_PCI_BASE_LIMITS Socket[BL_MAX_SOCKET]; // Base and limit of all PCIe resources for each socket
+} BL_SYSTEM_PCI_BASE_LIMITS;
+
+typedef struct {
+ UINT64 Key0[BL_MAX_SOCKET];
+ UINT64 Key1[BL_MAX_SOCKET];
+} BL_TME_INIT_DATA;
+

/** FSP-M Configuration
**/
typedef struct {

-/** Offset 0x0040 - MRC Debug Print Level
- Select the FSP MRC debug message print level. Options are a bitmask, so you can
- combine options. BIT0:MIN DEBUG, BIT1:MAX DEBUG, BIT2:TRACE, BIT3:MEM TRAIN, BIT4:TEST,
- BIT5:CPGC, BIT6:REG ACCESS
+/** Offset 0x0040 - Enable BIOS SSA RMT
+ Enables/Disables SSA RMT. Please refer to the Integration guide for RMT details.
+ $EN_DIS
**/
- UINT8 PcdFspMrcDebugPrintErrorLevel;
+ UINT8 PcdEnableBiosSsaRMT;

-/** Offset 0x0041 - KTI Debug Print Level
- Select the FSP KTI debug message print level. Options are a bitmask, so you can
- combine options. BIT0:ERROR, BIT1:WARNING, BIT2:INFO0, BIT3:INFO1
+/** Offset 0x0041 - Enable BIOS SSA RMT on Fast Cold Boot
+ Enables/Disables SSA RMT on a Fast Cold Boot
+ $EN_DIS
**/
- UINT8 PcdFspKtiDebugPrintErrorLevel;
+ UINT8 PcdEnableBiosSsaRMTonFCB;

-/** Offset 0x0042 - HSUART Device
- Select the PCI High Speed UART Device for Serial Port.
- 0:HSUART0, 1:HSUART1, 2:HSUART2
+/** Offset 0x0042 - Enable RMT per Bit Margining
+ Enables/Disables Per Bit Margining
+ $EN_DIS
**/
- UINT8 PcdHsuartDevice;
+ UINT8 PcdBiosSsaPerBitMargining;

-/** Offset 0x0043 - Customer Revision
- The Customer can set this revision string for their own purpose.
+/** Offset 0x0043 - Enable SSA Tables Display
+ Enables/Disables displaying results as tables
+ $EN_DIS
**/
- UINT8 PcdCustomerRevision[32];
+ UINT8 PcdBiosSsaDisplayTables;

-/** Offset 0x0063 - GpioConfig
- GpioConfig Struct. Defaults: GpioTable:NULL, NumberOfEntries:0x00
+/** Offset 0x0044 - Enable SSA Plot Display
+ Enables/Disables the display of per bit results as plots
+ $EN_DIS
**/
- GPIOTABLE_CONFIG GpioConfig;
+ UINT8 PcdBiosSsaPerDisplayPlots;

-/** Offset 0x006B - IioBifurcationConfig
- IioBifurcationConfig Table Struct. Defaults: IioBifurcationTable:NULL,
- NumberOfEntries:0x00
+/** Offset 0x0045 - Loop count for rank test
+ Exponential loop count for a single rank test
**/
- IIOBIFURCATION_CONFIG IioBifurcationConfig;
+ UINT8 PcdBiosSsaLoopCount;

-/** Offset 0x0073
+/** Offset 0x0046 - Enable Backside Margining
+ Enables/Disables margin test on the register or buffer backside
+ $EN_DIS
**/
- UINT8 UnusedUpdSpace0[16];
+ UINT8 PcdBiosSsaBacksideMargining;

-/** Offset 0x0083 - VTdConfig
- VTdConfig Struct. Defaults: All values are set to 0. VTd Disabled.
+/** Offset 0x0047 - Enable Early Read ID Margining
+ Enables/Disables PMem Early Read Id Test
+ $EN_DIS
**/
- VTD_CONFIG VTdConfig;
+ UINT8 PcdBiosSsaEarlyReadIdMargining;

- UINT8 reserved1[35];
-
-/** Offset 0x00A9 - Board ID Number
- Select the BoardId based on the target Platform. Default assumes an unknown board.
+/** Offset 0x0048 - Enable Step Size Override
+ Enables/Disables overriding the default step sizes
+ $EN_DIS
**/
- UINT8 BoardId;
+ UINT8 PcdBiosSsaStepSizeOverride;

- UINT8 reserved2[24];
-
-/** Offset 0x00C2 **/
- VOID *SetupStructPtr;
-
- UINT8 reserved3[20];
-
-/** Offset 0x00DA - IioPciConfig
- IIO Pci Port Config Struct. Defaults: All pointers are NULL. All values are set to zero.
+/** Offset 0x0049 - Step size RxDqs
+ Step size of RxDqs. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- IIOPCIPORT_CONFIG IioPciConfig;
+ UINT8 PcdBiosSsaRxDqs;

-/** Offset 0x00E0 - PchPciConfig
- PCH Pci Port Config Struct. Defaults: All pointers are NULL. All values are set to zero.
+/** Offset 0x004A - Step size RxVrefs
+ Step size of RxVrefs. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- PCHPCIPORT_CONFIG PchPciConfig;
+ UINT8 PcdBiosSsaRxVref;

-/** Offset 0x00E8 - IioResourceConfig
- IIO Resource Struct. Defaults: All pointers are NULL. All values are set to zero.
+/** Offset 0x004B - Step size TxDqs
+ Step size of TxDqs. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- IIORESOURCE_CONFIG IioResourceConfig;
+ UINT8 PcdBiosSsaTxDq;

- UINT8 reserved4[3];
-
-/** Offset 0x00F1 - DCI Enable
- Enable / Disable DCI
- $EN_DIS
+/** Offset 0x004C - Step size TxVrefs
+ Step size of TxVrefs. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- UINT8 PchDciEn;
+ UINT8 PcdBiosSsaTxVref;

-/** Offset 0x00F2 - IO Margining Tool (IOMT) Enable
- Enable / Disable Io Margining Tool
- $EN_DIS
+/** Offset 0x004D - Step size CmdAll
+ Step size of CmdAll. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- UINT8 IomtEnable;
+ UINT8 PcdBiosSsaCmdAll;

-/** Offset 0x00F3 - Hyper Threading (HT) disable
- Disable Hyper threading. Disable: 0x01 | Enable: 0x00 | Default - HT enabled
- $EN_DIS
+/** Offset 0x004E - Step size CmdVref
+ Step size of CmdVref. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- UINT8 HyperThreadingDisable;
+ UINT8 PcdBiosSsaCmdVref;

-/** Offset 0x00F4
+/** Offset 0x004F - Step size CtlAll
+ Step size of CtlAll. Auto:1. Supported values : 1,2,4,8. This option is valid only
+ if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- UINT8 UnusedUpdSpace1[236];
+ UINT8 PcdBiosSsaCtlAll;

-/** Offset 0x01E0
+/** Offset 0x0050 - Step size EridDelay
+ Step size of EridDelay. Auto:1. Supported values : 1,2,4,8. This option is valid
+ only if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
**/
- UINT8 ReservedMemoryInitUpd[16];
-} FSPM_CONFIG;
+ UINT8 PcdBiosSsaEridDelay;
+
+/** Offset 0x0051 - Step size EridVref
+ Step size of EridVref. Auto:1. Supported values : 1,2,4,8. This option is valid
+ only if 'Enable Step size override' is Enabled
+ 1:1, 2:2, 4:4, 8:8
+**/
+ UINT8 PcdBiosSsaEridVref;
+
+/** Offset 0x0052 - Enable SSA RMT Debug Message
+ Enables the BSSA RMT debug messages
+ 2:Disable, 5:Enable
+**/
+ UINT8 PcdBiosSsaDebugMessages;
+
+/** Offset 0x0053 - TCC Enable
+ Enable or Disable Intel® Time Coordinated Compute (TCC) features
+ $EN_DIS
+**/
+ UINT8 PcdTccEnable;
+
+/** Offset 0x0054
+**/
+ UINT8 UnusedUpdSpace0[12];
+
+/** Offset 0x0060 - ECC Support
+ Enable/disable ECC Support.
+ $EN_DIS
+**/
+ UINT8 PcdEccSupport;
+
+/** Offset 0x0061 - Fast Boot
+ Enable/Disable Fast Boot.
+ 0:Disabled,1:Enabled
+**/
+ UINT8 PcdFastBoot;
+
+/** Offset 0x0062 - Memory Test
+ Enable/Disable Memory Test.
+ $EN_DIS
+**/
+ UINT8 PcdMemTest;
+
+/** Offset 0x0063 - Memory Turnaround Time Optimization
+ Enable/Disable Memory turnaround time optimization.
+ $EN_DIS
+**/
+ UINT8 PcdMemTurnaroundOpt;
+
+/** Offset 0x0064 - Memory Frequency
+ Set DDR Memory Frequency Limit
+ 0: AUTO, 13:2400, 15:2666, 17: 2933
+**/
+ UINT8 PcdDdrFreq;
+
+/** Offset 0x0065 - Memory Command Timing
+ Select the desired memory controller command timing
+ 0:Auto, 1:1N, 2:2N, 3:3N
+**/
+ UINT8 PcdCommandTiming;
+
+/** Offset 0x0066 - Memory Custom Refresh Rate
+ Set Desired rate in 0.1x units of the standard 7.8 usec interval. The valid range
+ is 20 - 80(i.e. 2x to 8x)
+**/
+ UINT8 PcdCustomRefreshRate;
+
+/** Offset 0x0067
+**/
+ UINT8 UnusedUpdSpace1[41];
+
+/** Offset 0x0090 - HSUART Device
+ Select the PCI High Speed UART Device for Serial Port.
+ 0:HSUART0, 1:HSUART1, 2:HSUART2
+**/
+ UINT8 PcdHsuartDevice;
+
+/** Offset 0x0091 - ME Heci Communication
+ Enable/Disable ME Heci Communication.
+ 0:Disabled,1:Enabled
+**/
+ UINT8 PcdHeciCommunication;
+
+/** Offset 0x0092 - Virtualization Technology for Directed I/O
+ Enable/Disable Virtualization Technology for Directed I/O.
+ $EN_DIS
+**/
+ UINT8 PcdVtdSupport;
+
+/** Offset 0x0093 - Enable USB3 Ports
+ Enable/Disable per USB3 Ports. One byte for each port, byte0 for port0, byte1 for
+ port1 and so on.
+**/
+ UINT32 PcdPchUsb3Port;
+
+/** Offset 0x0097 - Enable USB2 Ports
+ Enable/Disable per USB2 Ports. One byte for each port, byte0 for port0, byte1 for
+ port1 and so on.
+**/
+ UINT32 PcdPchUsb2Port;
+
+/** Offset 0x009B - Enable USB3 Port Over Current Configuration
+ Enable over current pin assignment per USB3 port. 0xFF mean skip over current pin.
+ One byte for each port, byte0 for port0, byte1 for port1 and so on
+**/
+ UINT32 PcdPchUsb3PortOc;
+
+/** Offset 0x009F - Enable USB2 Port Over Current Configuration
+ Enable over current pin assignment per USB2 port. 0xFF mean skip over current pin.
+ One byte for each port, byte0 for port0, byte1 for port1 and so on
+**/
+ UINT32 PcdPchUsb2PortOc;
+
+/** Offset 0x00A3 - USB2 Per Port HS Pre-emphasis Bias
+ USB2 Per Port HS Pre-emphasis Bias. 000b - 0mV, 001b - 11.25mV, 010b - 16.9mV, 011b
+ - 28.15mV, 100b - 28.15mV, 101b - 39.35mV, 110b - 45mV, 111b - 56.3mV. One byte
+ for each port.
+**/
+ UINT32 PcdUsb2PeTxiSet;
+
+/** Offset 0x00A7 - USB2 Per Port HS Transmitter Bias
+ USB2 Per Port HS Transmitter Bias. 000b - 0mV, 001b - 11.25mV, 010b - 16.9mV, 011b
+ - 28.15mV, 100b - 28.15mV, 101b - 39.35mV, 110b - 45mV, 111b - 56.3mV. One byte
+ for each port.
+**/
+ UINT32 PcdUsb2TxiSet;
+
+/** Offset 0x00AB - USB2 Per Port HS Transmitter Emphasis
+ USB2 Per Port HS Transmitter Emphasis. 00b - Emphasis OFF, 01b - De-emphasis ON,
+ 10b - Pre-emphasis ON, 11b - Pre-emphasis & De-emphasis ON. One byte for each port.
+**/
+ UINT32 PcdUsb2PreDeEmp;
+
+/** Offset 0x00AF - USB2 Per Port Half Bit Pre-emphasis
+ USB2 Per Port Half Bit Pre-emphasis. 1b - half-bit pre-emphasis, 0b - full-bit pre-emphasis.
+ One byte for each port.
+**/
+ UINT32 PcdUsb2PreEmpHalfBit;
+
+/** Offset 0x00B3 - IIO PCIe Port 1 Bifurcation
+ IIO PCI Express port bifurcation for selected slot(s).
+ 0xFF:Auto, 0:X4X4X4X4, 1:X4X4X8, 2:X8X4X4, 3:X8X8, 4:X16
+**/
+ UINT8 PcdIIOPciePortBifurcation;
+
+/** Offset 0x00B4 - IIO PCIe R-Link DeEmphasis
+ Desired DeEmphasis level for IIO PCIe R-Link
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPcieRLinkDeEmphasis;
+
+/** Offset 0x00B5 - IIO PCIe Port 1A DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 1A
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort1ADeEmphasis;
+
+/** Offset 0x00B6 - IIO PCIe Port 1B DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 1B
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort1BDeEmphasis;
+
+/** Offset 0x00B7 - IIO PCIe Port 1C DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 1C
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort1CDeEmphasis;
+
+/** Offset 0x00B8 - IIO PCIe Port 1D DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 1D
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort1DDeEmphasis;
+
+/** Offset 0x00B9 - IIO PCIe R-Link Link Speed
+ Desired Link Speed for IIO PCIe R-Link
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3
+**/
+ UINT8 PcdIIoPcieLinkSpeedRLink;
+
+/** Offset 0x00BA - IIO PCIe Port 1A Link Speed
+ Desired Link Speed for IIO PCIe Port 1A
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort1ALinkSpeed;
+
+/** Offset 0x00BB - IIO PCIe Port 1B Link Speed
+ Desired Link Speed for IIO PCIe Port 1B
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort1BLinkSpeed;
+
+/** Offset 0x00BC - IIO PCIe Port 1C Link Speed
+ Desired Link Speed for IIO PCIe Port 1C
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort1CLinkSpeed;
+
+/** Offset 0x00BD - IIO PCIe Port 1D Link Speed
+ Desired Link Speed for IIO PCIe Port 1D
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort1DLinkSpeed;
+
+/** Offset 0x00BE - IIO PCIe R-Link Aspm
+ Desired Active state power management settings for IIO PCIe R-Link
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPcieRLinkAspm;
+
+/** Offset 0x00BF - IIO PCIe Port 1A Aspm
+ Desired Active state power management settings for IIO PCIe Port 1A
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort1AAspm;
+
+/** Offset 0x00C0 - IIO PCIe Port 1B Aspm
+ Desired Active state power management settings for IIO PCIe Port 1B
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort1BAspm;
+
+/** Offset 0x00C1 - IIO PCIe Port 1C Aspm
+ Desired Active state power management settings for IIO PCIe Port 1C
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort1CAspm;
+
+/** Offset 0x00C2 - IIO PCIe Port 1D Aspm
+ Desired Active state power management settings for IIO PCIe Port 1D
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort1DAspm;
+
+/** Offset 0x00C3 - PCH PCIe Controller 0 Bifurcation
+ Configure PCI Express controller 0 bifurcation.
+ 0: Auto, 5:4x2, 6:1x4 2x2, 7:2x2 1x4, 8:2x4, 9:1x8
+**/
+ UINT8 PcdBifurcationPcie0;
+
+/** Offset 0x00C4 - PCH PCIe Controller 2 Bifurcation
+ Configure PCI Express controller 2 bifurcation.
+ 0: Auto, 5:4x2, 6:1x4 2x2, 7:2x2 1x4, 8:2x4, 9:1x8
+**/
+ UINT8 PcdBifurcationPcie2;
+
+/** Offset 0x00C5 - PCH PCIe Controller 1 Bifurcation
+ Configure PCI Express controller 1 bifurcation.
+ 0: Auto, 5:4x2, 6:1x4 2x2, 7:2x2 1x4, 8:2x4, 9:1x8
+**/
+ UINT8 PcdBifurcationPcie1;
+
+/** Offset 0x00C6 - IIO PCIe Port 2 Bifurcation
+ IIO PCI Express port bifurcation for selected slot(s). This Option is valid only
+ for IVL HCC Platform.
+ 0xFF:Auto, 0:X4X4X4X4, 1:X4X4X8, 2:X8X4X4, 3:X8X8, 4:X16
+**/
+ UINT8 PcdIIOPciePort2Bifurcation;
+
+/** Offset 0x00C7 - IIO PCIe Port 2A DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 2A This Option is valid only for IVL
+ HCC Platform.
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort2ADeEmphasis;
+
+/** Offset 0x00C8 - IIO PCIe Port 2B DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 2B This Option is valid only for IVL
+ HCC Platform.
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort2BDeEmphasis;
+
+/** Offset 0x00C9 - IIO PCIe Port 2C DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 2C This Option is valid only for IVL
+ HCC Platform.
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort2CDeEmphasis;
+
+/** Offset 0x00CA - IIO PCIe Port 2D DeEmphasis
+ Desired DeEmphasis level for IIO PCIe Port 2D This Option is valid only for IVL
+ HCC Platform.
+ 0:6dB, 1:3.5dB
+**/
+ UINT8 PcdIIoPciePort2DDeEmphasis;
+
+/** Offset 0x00CB - IIO PCIe Port 2A Link Speed
+ Desired Link Speed for IIO PCIe Port 2A This Option is valid only for IVL HCC Platform.
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort2ALinkSpeed;
+
+/** Offset 0x00CC - IIO PCIe Port 2B Link Speed
+ Desired Link Speed for IIO PCIe Port 2B This Option is valid only for IVL HCC Platform.
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort2BLinkSpeed;
+
+/** Offset 0x00CD - IIO PCIe Port 2C Link Speed
+ Desired Link Speed for IIO PCIe Port 2C This Option is valid only for IVL HCC Platform.
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort2CLinkSpeed;
+
+/** Offset 0x00CE - IIO PCIe Port 2D Link Speed
+ Desired Link Speed for IIO PCIe Port 2D This Option is valid only for IVL HCC Platform.
+ 0:Auto, 1:GEN1, 2:GEN2, 3:GEN3, 4:GEN4
+**/
+ UINT8 PcdIIoPciePort2DLinkSpeed;
+
+/** Offset 0x00CF - IIO PCIe Port 2A Aspm
+ Desired Active state power management settings for IIO PCIe Port 2A This Option
+ is valid only for IVL HCC Platform.
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort2AAspm;
+
+/** Offset 0x00D0 - IIO PCIe Port 2B Aspm
+ Desired Active state power management settings for IIO PCIe Port 2B This Option
+ is valid only for IVL HCC Platform.
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort2BAspm;
+
+/** Offset 0x00D1 - IIO PCIe Port 2C Aspm
+ Desired Active state power management settings for IIO PCIe Port 2C This Option
+ is valid only for IVL HCC Platform.
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort2CAspm;
+
+/** Offset 0x00D2 - IIO PCIe Port 2D Aspm
+ Desired Active state power management settings for IIO PCIe Port 2D This Option
+ is valid only for IVL HCC Platform.
+ 0:Disabled,4:Auto
+**/
+ UINT8 PcdIIoPciePort2DAspm;
+
+/** Offset 0x00D3 - IIO PCIe Port 2A Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 2A This Option is valid only for IVL HCC Platform.
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort2AHPCapable;
+
+/** Offset 0x00D4 - IIO PCIe Port 2B Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 2B This Option is valid only for IVL HCC Platform.
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort2BHPCapable;
+
+/** Offset 0x00D5 - IIO PCIe Port 2C Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 2C This Option is valid only for IVL HCC Platform.
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort2CHPCapable;
+
+/** Offset 0x00D6 - IIO PCIe Port 2D Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 2D This Option is valid only for IVL HCC Platform.
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort2DHPCapable;
+
+/** Offset 0x00D7 - IIO PCIe Port 2A Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 2A This Option is valid
+ only for IVL HCC Platform.
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort2AHPSurprise;
+
+/** Offset 0x00D8 - IIO PCIe Port 2B Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 2B This Option is valid
+ only for IVL HCC Platform.
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort2BHPSurprise;
+
+/** Offset 0x00D9 - IIO PCIe Port 2C Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 2C This Option is valid
+ only for IVL HCC Platform.
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort2CHPSurprise;
+
+/** Offset 0x00DA - IIO PCIe Port 2D Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 2D This Option is valid
+ only for IVL HCC Platform.
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort2DHPSurprise;
+
+/** Offset 0x00DB - Warm Reset Elimination Enable
+ Warm Reset Elimination Enable or Disable.
+ $EN_DIS
+**/
+ UINT8 PcdDfxWarmResetEliminationEn;
+
+/** Offset 0x00DC - Clock Generator Address
+ Set SKU Clock generator address. Valid field should be set. Skip Clock Generator
+ should be set to Disable.
+**/
+ UINT8 PcdSkuClockGeneratorAddress;
+
+/** Offset 0x00DD - SSC Secondary Smbus use
+ Enable or Disable SSC Secondary Smbus use. Skip Clock Generator should be set to Disable.
+ $EN_DIS
+**/
+ UINT8 PcdSkuSSCSecondarySmbusUsed;
+
+/** Offset 0x00DE - Skip Clock Generator
+ Enable or Disable to skip clock generator configuration.
+ $EN_DIS
+**/
+ UINT8 PcdSkipClockGenerator;
+
+/** Offset 0x00DF - SSC Enable for Host
+ Enable Spread Spectrum Control for the Host(CPU) PCIe High-Speed Root Ports. Skip
+ Clock Generator should be set to Disable.
+ 0:Disable, 1:Enable SSC with 0.25 spread, 2:Enable SSC with 0.5 spread
+**/
+ UINT8 PcdEnableClockSpreadSpec;
+
+/** Offset 0x00E0
+**/
+ UINT8 UnusedUpdSpace2[57];
+
+/** Offset 0x0119 - PCI-E port Clock Gating
+ Enable / Disable PCI-E Clock Gating for each port First byte represents Clock gating
+ for port 1A,Second byte for port 2A... respectively for each PCI-E Port. Each byte
+ takes value 0x00(Disable)~0x01(Enable)
+**/
+ UINT8 PcdPciePortClkGateEnable[21];
+
+/** Offset 0x012E - Power Performance Tuning
+ Options decides who Controls EPB. 0:In OS mode :IA32_ENERGY_PERF_BIAS is used (Option
+ 0 is valid only if PcdProcessorHWPMEnable is 0/1), 1:In BIOS mode:ENERGY_PERF_BIAS_CONFIG
+ is used, 2:In PECI mode: PCS53 is used.
+ 0:OS Controls EPB, 1:BIOS Controls EPB , 2:PECI Controls EPB
+**/
+ UINT8 PcdPwrPerfTuning;
+
+/** Offset 0x012F - ENERGY_PERF_BIAS_CFG mode
+ (Valid if Power Performance Tuning is set to 1:BIOS Controls EPB.) Use input from
+ ENERGY_PERF_BIAS_CONFIG mode selection. PERF/Balanced Perf/Balanced Power/Power
+ 0:Performance, 7:Balanced Performance, 8:Balanced Power ,15:Power
+**/
+ UINT8 PcdAltEngPerfBIAS;
+
+/** Offset 0x0130 - Customer Revision
+ The Customer can set this revision string for their own purpose.
+**/
+ UINT8 PcdCustomerRevision[32];
+
+/** Offset 0x0150 - Memory Thermal Throttling
+ Enable/disable Memory Thermal Throttling
+ 0:Disabled,2:Enabled
+**/
+ UINT8 PcdMemoryThermalThrottling;
+
+/** Offset 0x0151 - FSP Debug Print Level
+ Select the FSP debug print level.
+ 0:NO DEBUG, 1:MIN DEBUG, 2:MED DEBUG, 3:VERBOSE DEBUG
+**/
+ UINT8 PcdFspDebugPrintErrorLevel;
+
+/** Offset 0x0152
+**/
+ UINT8 PcdFiaMuxOverride;
+
+/** Offset 0x0153
+**/
+ UINT8 FiaMuxCfgInvalidate;
+
+/** Offset 0x0154 - DCI Enable
+ Enable / Disable DCI . Refer to Integration guide
+ $EN_DIS
+**/
+ UINT8 PcdDciEn;
+
+/** Offset 0x0155 - USB DbC Enable Mode
+ USB Debug mode . Refer to Integration guide
+ 0:Disabled, 1:USB2, 2:USB3, 3:Both, 4:NoChange (default)
+**/
+ UINT8 PcdDciDbcMode;
+
+/** Offset 0x0156 - USB3 Type-C UFP2DFP Debug Support
+ USB3 UFP2DFP Debug support. Refer to Integration guide
+ 0:Disabled, 1:Enabled, 2:No Change
+**/
+ UINT8 PcdDciUsb3TypecUfpDbg;
+
+/** Offset 0x0157 - PCH Trace Hub Enable Mode
+ Select Host or Target for Trace Hub debugger tool. Refer to Integration guide.
+ 0:Disable, 1:Target debugger, 2:Host debugger
+**/
+ UINT8 PcdPchTraceHubMode;
+
+/** Offset 0x0158 - PCH TH Mem Buffer Size 0
+ Select size of memory region 0 buffer. Refer to Integration guide.
+ 0:None/OS, 1:1 MB, 2:8 MB, 3:64 MB, 4:128 MB, 5:256 MB, 6:512 MB
+**/
+ UINT8 PcdPchTraceHubMemReg0Size;
+
+/** Offset 0x0159 - PCH TH Mem Buffer Size 1
+ Select size of memory region 1 buffer. Refer to Integration guide
+ 0:None/OS, 1:1 MB, 2:8 MB, 3:64 MB, 4:128 MB, 5:256 MB, 6:512 MB
+**/
+ UINT8 PcdPchTraceHubMemReg1Size;
+
+/** Offset 0x015A
+**/
+ UINT8 UnusedUpdSpace3;
+
+/** Offset 0x015B - IMR3 Enable
+ Enable/Disable IMR3 .Default is Disabled .Refer to Integration guide
+ $EN_DIS
+**/
+ UINT8 PcdEnableIMR3;
+
+/** Offset 0x015C - Processor X2APIC Enable
+ Enable / Disable Processor X2APIC. Refer to Integration guide
+ $EN_DIS
+**/
+ UINT8 PcdProcessorX2Apic;
+
+/** Offset 0x015D - Hyper Threading Enable/Disable
+ Enable or Disable Hyper Threading; 0: Disable; <b>1: Enable</b>
+ $EN_DIS
+**/
+ UINT8 PcdHyperThreading;
+
+/** Offset 0x015E - PCIe Hot Plug Enable
+ Enable / Disable PCIe Hot Plug.
+ $EN_DIS
+**/
+ UINT8 PcdPcieHotPlugEnable;
+
+/** Offset 0x015F
+**/
+ UINT8 UnusedUpdSpace4;
+
+/** Offset 0x0160 - IIO PCIe R-Link Hot Plug Capable
+ Hot Plug Capable for IIO PCIe R-Link
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPcieLinkHPCapable;
+
+/** Offset 0x0161 - IIO PCIe Port 1A Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 1A
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort1AHPCapable;
+
+/** Offset 0x0162 - IIO PCIe Port 1B Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 1B
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort1BHPCapable;
+
+/** Offset 0x0163 - IIO PCIe Port 1C Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 1C
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort1CHPCapable;
+
+/** Offset 0x0164 - IIO PCIe Port 1D Hot Plug Capable
+ Hot Plug Capable for IIO PCIe Port 1D
+ 0:Disable, 1:Enable, 2:Auto
+**/
+ UINT8 PcdIIoPciePort1DHPCapable;
+
+/** Offset 0x0165 - IIO PCIe R-Link Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe R-Link
+ $EN_DIS
+**/
+ UINT8 PcdIIoPcieLinkHPSurprise;
+
+/** Offset 0x0166 - IIO PCIe Port 1A Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 1A
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort1AHPSurprise;
+
+/** Offset 0x0167 - IIO PCIe Port 1B Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 1B
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort1BHPSurprise;
+
+/** Offset 0x0168 - IIO PCIe Port 1C Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 1C
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort1CHPSurprise;
+
+/** Offset 0x0169 - IIO PCIe Port 1D Hot Plug Surprise
+ Enable / Disable Hot Plug Capable Surprise for IIO PCIe Port 1D
+ $EN_DIS
+**/
+ UINT8 PcdIIoPciePort1DHPSurprise;
+
+/** Offset 0x016A - Speed Step (P-states)
+ Enable / Disable EIST (P-States)
+ $EN_DIS
+**/
+ UINT8 PcdProcessorEistEnable;
+
+/** Offset 0x016B - Boot performance mode
+ Select Boot Performance State. EIST should be Enabled
+ 0:Max Performance, 1:Max Efficient, 2:Set by Intel Node Manager
+**/
+ UINT8 PcdBootPState;
+
+/** Offset 0x016C - Hardware P-States
+ Select Hardware P-State control
+ 0:Disable, 1:Native Mode, 2:Out of Band Mode, 3:Native Mode with No Legacy Support
+**/
+ UINT8 PcdProcessorHWPMEnable;
+
+/** Offset 0x016D - Hardware PM Interrupt
+ Enable / Disable Hardware PM Interrupt. Hardware P-States should be Native mode
+ $EN_DIS
+**/
+ UINT8 PcdProcessorHWPMInterrupt;
+
+/** Offset 0x016E - EPP Enable
+ Enable / Disable EPP. Hardware P-States should not be disabled
+ $EN_DIS
+**/
+ UINT8 PcdProcessorEPPEnable;
+
+/** Offset 0x016F - EPP profile
+ Select HWPM Profile (EPP). Hardware P-States should be OOB and EPP should be enabled
+ 0:Performance, 128:Balanced Performance, 192:Balanced Power, 255:Power
+**/
+ UINT8 PcdProcessorEppProfile;
+
+/** Offset 0x0170 - Package C State
+ Package C State limit
+ 0:C0/C1 state, 1:C2 state, 2:C6(non Retention) state, 255:Auto
+**/
+ UINT8 PcdPackageCState;
+
+/** Offset 0x0171 - Enhanced Halt State (C1E)
+ Enable / Disable Core C1E auto promotion Control
+ $EN_DIS
+**/
+ UINT8 PcdProcessorC1eEnable;
+
+/** Offset 0x0172 - C2C3TT
+ C2 to C3 Transition Timer. Default = 0, means [AUTO]
+**/
+ UINT8 PcdC2C3TT;
+
+/** Offset 0x0173 - CPU C3 report
+ Enable/Disable CPU C3(ACPI C2) report to OS
+ $EN_DIS
+**/
+ UINT8 PcdC3Enable;
+
+/** Offset 0x0174 - CPU C6 report
+ Enable/Disable CPU C6(ACPI C3) report to OS
+ 0:Disable, 1:Enable, 255:Auto
+**/
+ UINT8 PcdC6Enable;
+
+/** Offset 0x0175 - Enable Monitor MWAIT
+ Enable / Disable Monitor and MWAIT instructions
+ $EN_DIS
+**/
+ UINT8 PcdMonitorMWait;
+
+/** Offset 0x0176 - C State Latency Control VALID[0]
+ Enable / Disable validity of the Value field in this register
+ $EN_DIS
+**/
+ UINT8 PcdCStateLatencyCtrlValid0;
+
+/** Offset 0x0177 - C State Latency Control MULTIPLIER[0]
+ Indicates the unit of measurement that is defined for the Value field in this register.
+ Valid field should be set
+**/
+ UINT8 PcdCStateLatencyCtrlMultiplier0;
+
+/** Offset 0x0178 - C State Latency Control VALUE[0]
+ The Interrupt Response Time Limit is given in units defined in the Multiplier field
+ of this register. Valid field should be set
+**/
+ UINT16 PcdCStateLatencyCtrlValue0;
+
+/** Offset 0x017A - C State Latency Control VALID[1]
+ Enable / Disable validity of the Value field in this register
+ $EN_DIS
+**/
+ UINT8 PcdCStateLatencyCtrlValid1;
+
+/** Offset 0x017B - C State Latency Control MULTIPLIER[1]
+ Indicates the unit of measurement that is defined for the Value field in this register.
+ Valid field should be set
+**/
+ UINT8 PcdCStateLatencyCtrlMultiplier1;
+
+/** Offset 0x017C - C State Latency Control VALUE[1]
+ The Interrupt Response Time Limit is given in units defined in the Multiplier field
+ of this register. Valid field should be set
+**/
+ UINT16 PcdCStateLatencyCtrlValue1;
+
+/** Offset 0x017E - C State Latency Control VALID[2]
+ Enable / Disable validity of the Value field in this register
+ $EN_DIS
+**/
+ UINT8 PcdCStateLatencyCtrlValid2;
+
+/** Offset 0x017F - C State Latency Control MULTIPLIER[2]
+ Indicates the unit of measurement that is defined for the Value field in this register.
+ Valid field should be set
+**/
+ UINT8 PcdCStateLatencyCtrlMultiplier2;
+
+/** Offset 0x0180 - C State Latency Control VALUE[2]
+ The Interrupt Response Time Limit is given in units defined in the Multiplier field
+ of this register. Valid field should be set
+**/
+ UINT16 PcdCStateLatencyCtrlValue2;
+
+/** Offset 0x0182 - Config TDP Lock
+ Config TDP CONTROL Lock Bit. EIST should be enabled
+ $EN_DIS
+**/
+ UINT8 PcdConfigTdpLock;
+
+/** Offset 0x0183 - AVX P1
+ AVX P1 level selection. EIST should be enabled
+ 0:Normal, 1:Level 1, 2:Level 2
+**/
+ UINT8 PcdConfigTdpLevel;
+
+/** Offset 0x0184 - AVX Support
+ Enable/Disable AVX/2/3 instructions. Applicable to only certain SKUs - OC and HEDT
+ $EN_DIS
+**/
+ UINT8 PcdAvxSupport;
+
+/** Offset 0x0185 - AVX Licence Pre-Grant Override
+ Enables AVX ICCP pre-grant level override
+ $EN_DIS
+**/
+ UINT8 PcdAvxLicensePreGrant;
+
+/** Offset 0x0186 - AVX ICCP pre-grant level
+ Pre-grants an AVX level to the core. Base frequency is not updated. AVX Licence
+ Pre-Grant Override should be enabled
+ 1:128 Heavy, 2:256 Light, 3:256 Heavy, 4: 512 Light, 5: 512 Heavy
+**/
+ UINT8 PcdAvxIccpLevel;
+
+/** Offset 0x0187 - GPSS timer
+ P-state change hysteresis time window
+ 0:0 us, 5:50 us, 50:500 us
+**/
+ UINT8 PcdGpssTimer;
+
+/** Offset 0x0188 - Software Controlled T-States
+ Enable / Disable Software Controlled T-States
+ $EN_DIS
+**/
+ UINT8 PcdTStateEnable;
+
+/** Offset 0x0189 - PROCHOT Modes
+ When a processor thermal sensor trips, the PROCHOT# will be driven
+ 0:Output-only, 1:Disable, 2:Both Input and Output, 3:Input-only
+**/
+ UINT8 PcdEnableProcHot;
+
+/** Offset 0x018A - Thermal Monitor
+ Enable / Disable Thermal Monitor
+ $EN_DIS
+**/
+ UINT8 PcdEnableThermalMonitor;
+
+/** Offset 0x018B - AC Exception On Split Lock
+ Enable or Disable AC (Alignment Check) Exception On Split Lock
+ $EN_DIS
+**/
+ UINT8 PcdAcExceptionOnSplitLockEnable;
+
+/** Offset 0x018C - PCIe Allocating Write Flows
+ Select Vc0/VCp write selection for all CPU PCIe ports
+ 0x00:Non-Allocating, 0x01:Allocating
+**/
+ UINT8 PcdPcieAllocatingFlow;
+
+/** Offset 0x018D - IIO LLC Ways [19:0](Hex)
+ MSR CBO_SLICE0_CR_IIO_LLC_WAYS bitmask
+**/
+ UINT32 PcdIioLlcWaysMask;
+
+/** Offset 0x0191 - Enable/ Disable VMD
+ Enable/Disable VMD in this Stack for socket0. First byte:Represents VMD config for
+ PCH port(Stack 0) Second Byte:Represents VMD config for IOU 0(Stack1) Each byte
+ takes value 0x00(Disable)~0x01(Enable)
+**/
+ UINT8 PcdVMDEnabled[2];
+
+/** Offset 0x0193 - PCH Root Port
+ Configuration PCH root port:Enable-VMD ownership root port (Valid if PchRootPortIsAllowed
+ for respective port) First byte represents PCH Root Port 0,Second byte is PCH Root
+ Port 1,... PCH Root Port 11 respectively for each PCH Root Port. Each byte takes
+ value 0x00(Disable)~0x01(Enable)
+**/
+ UINT8 PcdVMDPchPortEnable[12];
+
+/** Offset 0x019F - VMD port A
+ Enable/Disable Intel® Volume Management Device Technology on specific root port
+ $EN_DIS
+**/
+ UINT8 PcdVMDPortEnableA;
+
+/** Offset 0x01A0
+**/
+ UINT8 UnusedUpdSpace5;
+
+/** Offset 0x01A1 - VMD port B
+ Enable/Disable Intel® Volume Management Device Technology on specific root port
+ $EN_DIS
+**/
+ UINT8 PcdVMDPortEnableB;
+
+/** Offset 0x01A2 - VMD port C
+ Enable/Disable Intel® Volume Management Device Technology on specific root port
+ $EN_DIS
+**/
+ UINT8 PcdVMDPortEnableC;
+
+/** Offset 0x01A3 - VMD port D
+ Enable/Disable Intel® Volume Management Device Technology on specific root port
+ $EN_DIS
+**/
+ UINT8 PcdVMDPortEnableD;
+
+/** Offset 0x01A4 - Hot Plug Capable
+ Enable/Disable Hot Plug for PCIe Root Ports. First Byte:Represents VMD Hot plug
+ config for PCH port. Second Byte:Represents VMD Hot plug config for IOU 0 Each
+ byte takes value 0(Disable)~1(Enable)
+**/
+ UINT8 PcdVMDHotPlugEnable[2];
+
+/** Offset 0x01A6 - CfgBar Size
+ Setup VMD Config BAR size (in bits Min=0x14, Max=0x1B), ex: 0x14(20 bits)=1MB, 0x1B(27bits)=128MB
+ First Byte:Represents VMD Config BAR size for PCH port. Second Byte:Represents
+ VMD Config BAR size for IOU 0.
+**/
+ UINT8 PcdVMDCfgBarSz[2];
+
+/** Offset 0x01A8 - CfgBar attribute
+ Set up VMD Config BAR attribute, like 64-bit or prefetchable. First Byte:Represents
+ VMD Config BAR Attribute for PCH port. Second Byte:Represents VMD Config BAR Attribute
+ for IOU 0 Each Byte takes value of 0x0:(32-bit non-prefetchable),0x1:(64-bit non-prefetchable),
+ 0x2:(64-bit prefetchable)
+**/
+ UINT8 PcdVMDCfgBarAttr[2];
+
+/** Offset 0x01AA - MemBar1 Size
+ Setup VMD Memory BAR1 size (in bits Min=0x14,max=0x27), ex: 0x14(20 bits)=1MB First
+ Byte:Represents VMD Memory BAR1 size for PCH port Second Byte:Represents VMD Memory
+ BAR1 size for IOU 0
+**/
+ UINT8 PcdVMDMemBarSz1[2];
+
+/** Offset 0x01AC - MemBar1 attribute
+ Set up VMD Memory BAR1 attribute, like 64-bit or prefetchable First Byte:Represents
+ VMD Memory BAR1 attribute for PCH port Second Byte:Represents VMD Memory BAR1
+ attribute for IOU 0 Each Byte takes value of 0x0:(32-bit non-prefetchable),0x1:(64-bit
+ non-prefetchable), 0x2:(64-bit prefetchable)
+**/
+ UINT8 PcdVMDMemBar1Attr[2];
+
+/** Offset 0x01AE - MemBar2 Size
+ Setup VMD Memory BAR2 size (in bits Min=0x14,max = 0x27), ex: 0x14(20bits)=1MB,
+ 0x16(22bits)=4MB. First Byte:Represents VMD Memory BAR2 size for PCH port. Second
+ Byte:Represents VMD Memory BAR2 size for IOU 0
+**/
+ UINT8 PcdVMDMemBarSz2[2];
+
+/** Offset 0x01B0 - MemBar2 attribute
+ Set up VMD Memory BAR2 attribute, like 64-bit or prefetchable. First Byte:Represents
+ VMD Memory BAR2 attribute for PCH port. Second Byte:Represents VMD Memory BAR2
+ attribute for IOU 0 Each Byte takes value of 0x0:(32-bit non-prefetchable),0x1:(64-bit
+ non-prefetchable), 0x2:(64-bit prefetchable)
+**/
+ UINT8 PcdVMDMemBar2Attr[2];
+
+/** Offset 0x01B2 - VMD for Direct Assign
+ Enable/ Disable VMD for Direct Assign if VMD is enabled First Byte:Represents VMD
+ for Direct Assign for PCH port Second Byte:Represents VMD for Direct Assign for
+ IOU 0 Each byte takes value 0x00(Disable)~0x01(Enable)
+**/
+ UINT8 PcdVMDDirectAssign[2];
+
+/** Offset 0x01B4 - Power Limit 1 Enable
+ Enable/Disable Power Limit 1
+ $EN_DIS
+**/
+ UINT8 PcdPowerLimit1Enable;
+
+/** Offset 0x01B5 - Power Limit 2 Enable
+ Enable/Disable Power Limit 2
+ $EN_DIS
+**/
+ UINT8 PcdPowerLimit2Enable;
+
+/** Offset 0x01B6 - Turbo Mode
+ Enable/Disable Turbo Mode
+ $EN_DIS
+**/
+ UINT8 PcdTurboMode;
+
+/** Offset 0x01B7 - IIO PCIe Global ASPM
+ Enable/Disable PCIe ASPM on all IIO PCIe root ports
+ $EN_DIS
+**/
+ UINT8 PcdPcieGlobalAspm;
+
+/** Offset 0x01B8 - PCH Legacy IO Low Latency
+ Enable/Disable low latency of legacy IO. Increase power consumption for lower latency.
+ $EN_DIS
+**/
+ UINT8 PcdPchLegacyIoLowLatency;
+
+/** Offset 0x01B9 - PCH DMI ASPM
+ Enable/Disable L1 ASPM for Rlink
+ $EN_DIS
+**/
+ UINT8 PcdPchDmiAspm;
+
+/** Offset 0x01BA - DRAM RAPL
+ Enable/Disable DRAM Rapl
+ $EN_DIS
+**/
+ UINT8 PcdDramRaplEnable;
+
+/** Offset 0x01BB - PCH DMI ASPM
+ Enable/Disable CKE Throttling
+ $EN_DIS
+**/
+ UINT8 PcdCkeProgramming;
+
+/** Offset 0x01BC - PCH DMI ASPM
+ Enable/Disable APD
+ $EN_DIS
+**/
+ UINT8 PcdApdEnable;
+
+/** Offset 0x01BD - PCH DMI ASPM
+ Enable/Disable PPD
+ $EN_DIS
+**/
+ UINT8 PcdPpdEnable;
+
+/** Offset 0x01BE - Tcc Tuning enable/disable
+ Tcc (Time Coordinated Computing) Tuning Enabled
+ $EN_DIS
+**/
+ UINT8 PcdTccDsoTuningEn;
+
+/** Offset 0x01BF - Tcc Tuning enable/disable
+ Tcc (Time Coordinated Computing) Tuning Enabled
+ $EN_DIS
+**/
+ UINT8 PcdTccSoftwareSramEn;
+
+/** Offset 0x01C0 - Tcc Tuning enable/disable
+ Tcc (Time Coordinated Computing) Tuning Enabled
+ $EN_DIS
+**/
+ UINT8 PcdTccErrorLogEn;
+
+/** Offset 0x01C1 - Tcc BIOS Config File Base Address
+ Tcc (Time Coordinated Computing) TCC BIOS Config File Base Address
+**/
+ UINT32 PcdTccStreamCfgBasePreMem;
+
+/** Offset 0x01C5 - Tcc BIOS Config File Size
+ Tcc (Time Coordinated Computing) TCC BIOS Config File Size
+**/
+ UINT32 PcdTccStreamCfgSizePreMem;
+
+/** Offset 0x01C9 - Address of BL_TME_INIT_DATA table.
+ The address of the table of BL_TME_INIT_DATA.
+**/
+ UINT32 PcdTmePtr;
+
+/** Offset 0x01CD - Tme Enable
+ Enable or Disable TME
+ $EN_DIS
+**/
+ UINT8 PcdTmeEnable;
+
+/** Offset 0x01CE - MkTme Enable
+ Enable or Disable MKTME, Tme should be enabled before enabling MkTme. Cpu addressing
+ is restricted to 46 bit by default. With MKTME normal adressing will be followed
+ $EN_DIS
+**/
+ UINT8 PcdMkTmeEnable;
+
+/** Offset 0x01CF - IIO PCIe Multi VC Enable
+ Enable or Disable IIO PCIe Multi Virtual Channels
+ $EN_DIS
+**/
+ UINT8 PcdIioPcieMultiVcEnable;
+
+/** Offset 0x01D0
+**/
+ UINT32 PcdIioResConfigPtr;
+
+/** Offset 0x01D4
+**/
+ UINT32 PcdFiaLaneConfigPtr;
+
+/** Offset 0x01D8
+**/
+ UINT32 PcdKtiBufferPtr;
+
+/** Offset 0x01DC
+**/
+ UINT32 PcdMemSpdPtr;
+
+/** Offset 0x01E0 - Protect memory Range size
+ Size of the PRMRR region
+**/
+ UINT64 PcdPrmrrSize;
+
+/** Offset 0x01E8 - SGX Enable
+ Enable or Disable Software Guard Extensions
+ $EN_DIS
+**/
+ UINT8 PcdSgxEnable;
+
+/** Offset 0x01E9 - SGX Auto registration
+ Enable or Disable SGX auto registration
+ $EN_DIS
+**/
+ UINT8 PcdSgxAutoRegistrationAgent;
+
+/** Offset 0x01EA - SGX Quality of Service
+ Enable or Disable SGX QoS to use LLC cache for EPC
+ $EN_DIS
+**/
+ UINT8 PcdSgxQoS;
+
+/** Offset 0x01EB - SGX Debug mode
+ Enable or Disable SGX Debug mode
+ $EN_DIS
+**/
+ UINT8 PcdSgxDebugMode;
+
+/** Offset 0x01EC - SGX Flexible Launch Control
+ Enable or Disable SGX Flexible Launch Control
+ $EN_DIS
+**/
+ UINT8 PcdSgxLeWr;
+
+/** Offset 0x01ED - SGX Flexible Launch Control public key Hash 0
+ SGX flex launch control public key hash 0
+**/
+ UINT64 PcdSgxLePubKeyHash0;
+
+/** Offset 0x01F5 - SGX Flexible Launch Control public key Hash 1
+ SGX flex launch control public key hash 1
+**/
+ UINT64 PcdSgxLePubKeyHash1;
+
+/** Offset 0x01FD - SGX Flexible Launch Control public key Hash 2
+ SGX flex launch control public key hash 2
+**/
+ UINT64 PcdSgxLePubKeyHash2;
+
+/** Offset 0x0205 - SGX Flexible Launch Control public key Hash 3
+ SGX flex launch control public key hash 3
+**/
+ UINT64 PcdSgxLePubKeyHash3;
+
+/** Offset 0x020D - PCI Express Root Port
+ Enable/Disable PcieRootPort from 1 to 12, each bit represent a port(bit0-bit11)
+ and last nibble is unusedFor example, bit0 0 controls PcieRootPortPort 1, bit1
+ controls PcieRootPortPort 2...
+**/
+ UINT16 PcdPcieRootPortEn;
+
+/** Offset 0x020F - Enable spread spectrum
+ Enable/Disable spread spectrum.
+ 0:Disabled,1:Enabled
+**/
+ UINT8 PcdSpsIccClkSscSetting;
+
+/** Offset 0x0210 - PCH PCIE PLL Ssc
+ Valid spread range : 0x00-0x14 (A value of 0 is SSC of 0.0%. A value of 20 is SSC
+ of 2.0%)(Default), Auto : 0xFE(Set to hardware default), <b>Disable</b> : 0xFF
+**/
+ UINT8 PchPciePllSsc;
+
+/** Offset 0x0211
+**/
+ UINT8 ReservedMemoryInitUpd[16];
+} FSP_M_CONFIG;

/** Fsp M UPD Configuration
**/
@@ -566,28 +1562,23 @@

/** Offset 0x0000
**/
- FSP_UPD_HEADER FspUpdHeader;
+ FSP_UPD_HEADER FspUpdHeader;

/** Offset 0x0020
**/
- FSPM_ARCH_UPD FspmArchUpd;
+ FSPM_ARCH_UPD FspmArchUpd;

/** Offset 0x0040
**/
- FSP_M_CONFIG FspmConfig;
+ FSP_M_CONFIG FspmConfig;

-/** Offset 0x01F0 - FspmVersion
- FSP-M UPD Version Number
+/** Offset 0x0221
**/
- UINT16 FspmUpdVersion;
+ UINT8 UnusedUpdSpace6[13];

-/** Offset 0x01F2
+/** Offset 0x022E
**/
- UINT8 UnusedUpdSpace2[12];
-
-/** Offset 0x01FE
-**/
- UINT16 UpdTerminator;
+ UINT16 UpdTerminator;
} FSPM_UPD;

#pragma pack()
diff --git a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspsUpd.h b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspsUpd.h
index b93a1af..a2020e1 100644
--- a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspsUpd.h
+++ b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FspsUpd.h
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -42,135 +42,663 @@
**/
typedef struct {

-/** Offset 0x0020 - PCIe Controller 0 Bifurcation
- Configure PCI Express controller 0 bifurcation.
- 0:X2X2X2X2, 1:X2X2X4, 2:X4X2X2, 3:X4X4, 4:X8
+/** Offset 0x0020
**/
- UINT8 PcdBifurcationPcie0;
+ UINT32 PcdCpuMicrocodePatchBase;

-/** Offset 0x0021 - PCIe Controller 1 Bifurcation
- Configure PCI Express controller 1 bifurcation.
- 0:X2X2X2X2, 1:X2X2X4, 2:X4X2X2, 3:X4X4, 4:X8
+/** Offset 0x0024
**/
- UINT8 PcdBifurcationPcie1;
+ UINT32 PcdCpuMicrocodePatchSize;

-/** Offset 0x0022 - Active Core Count
- Select # of Active Cores (Default: 0, 0:ALL, 1..15 = 1..15 Cores)
- 0:ALL, 1:1, 2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:10, 11:11, 12:12, 13:13,
- 14:14, 15:15
+/** Offset 0x0028 - SATA Controllers
+ Enable/disable SATA Controller .Byte 0,1,2 is for SATA controller 0,1,2 respectively.
+ Byte4 is unused
**/
- UINT8 PcdActiveCoreCount;
+ UINT32 PcdEnableSATA;

-/** Offset 0x0023
+/** Offset 0x002C - SATA Mode
+ 0:AHCI, 1:RAID. Byte 0,1,2 is for SATA controller 0,1,2 respectively. Byte4 is
+ unused as only 3 SATA controllers present
**/
- UINT32 PcdCpuMicrocodePatchBase;
+ UINT32 PcdSATAmode;

-/** Offset 0x0027
+/** Offset 0x0030 - SATA Interrupt Mode
+ 0:Msix, 1:Msi, 2:Legacy . Byte 0,1,2 is for SATA controller 0,1,2 respectively.
+ Byte4 is unused as only 3 SATA controllers present
**/
- UINT32 PcdCpuMicrocodePatchSize;
+ UINT32 PcdSATAInterruptMode;

-/** Offset 0x002B - PCIe Controller 0
- Enable / Disable PCI Express controller 0
- $EN_DIS
+/** Offset 0x0034 - SATA port Enable for Controller 0
+ 0:Disabled , 1: Enabled . Each one of 8 ports are represented by a nibble . for
+ example : nibble 0 controls port 0 , nibble 1 controls port 1
**/
- UINT8 PcdEnablePcie0;
+ UINT32 PcdSATA0PortEnable;

-/** Offset 0x002C - PCIe Controller 1
- Enable / Disable PCI Express controller 1
- $EN_DIS
+/** Offset 0x0038 - SATA port HotPlug capability for Controller 0
+ 0:Disabled , 1: Enabled . Each one of 8 ports are represented by a nibble . for
+ example : nibble 0 controls port 0 , nibble 1 controls port 1
**/
- UINT8 PcdEnablePcie1;
+ UINT32 PcdSATA0PortHotplug;

-/** Offset 0x002D - Embedded Multi-Media Controller (eMMC)
- Enable / Disable Embedded Multi-Media controller
- $EN_DIS
+/** Offset 0x003C - SATA port Enable for Controller 1
+ 0:Disabled , 1: Enabled . Each one of 8 ports are represented by a nibble . for
+ example : nibble 0 controls port 0 , nibble 1 controls port 1
**/
- UINT8 PcdEnableEmmc;
+ UINT32 PcdSATA1PortEnable;

-/** Offset 0x002E - LAN Controllers
- Enable / Disable LAN controllers, refer to FSP Integration Guide for details.
- 0:Disable LAN 0 & LAN 1, 1:Enable LAN 0 & LAN 1, 2:Disable LAN 1 only
+/** Offset 0x0040 - SATA port HotPlug capability for Controller 1
+ 0:Disabled , 1: Enabled . Each one of 8 ports are represented by a nibble . for
+ example : nibble 0 controls port 0 , nibble 1 controls port 1
**/
- UINT8 PcdEnableGbE;
+ UINT32 PcdSATA1PortHotplug;

-/** Offset 0x002F
+/** Offset 0x0044 - SATA port Enable for Controller 2
+ 0:Disabled , 1: Enabled . Each one of 8 ports are represented by a nibble . for
+ example : nibble 0 controls port 0 , nibble 1 controls port 1
**/
- UINT32 PcdFiaMuxConfigRequestPtr;
+ UINT32 PcdSATA2PortEnable;

-/** Offset 0x0033
+/** Offset 0x0048 - SATA port HotPlug capability for Controller 2
+ 0:Disabled , 1: Enabled . Each one of 8 ports are represented by a nibble . for
+ example : nibble 0 controls port 0 , nibble 1 controls port 1
**/
- UINT8 UnusedUpdSpace0[4];
+ UINT32 PcdSATA2PortHotplug;

-/** Offset 0x0037 - PCIe Root Port 0 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x004C - EMMC controller
+ Enable/Disable EMMC controller.
+ $EN_DIS
**/
- UINT8 PcdPcieRootPort0DeEmphasis;
+ UINT8 PcdEmmc;

-/** Offset 0x0038 - PCIe Root Port 1 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x004D - EMMC HS400 Support
+ Enable/Disable EMMC HS400 Support.
+ $EN_DIS
**/
- UINT8 PcdPcieRootPort1DeEmphasis;
+ UINT8 PcdEmmcHS400Support;

-/** Offset 0x0039 - PCIe Root Port 2 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x004E - PCH PCIe Root Port 0 Link Speed
+ Desired Link Speed level for PCIe Root Port 0
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdPcieRootPort2DeEmphasis;
+ UINT8 PcdPcieRootPort0LinkSpeed;

-/** Offset 0x003A - PCIe Root Port 3 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x004F - PCH PCIe Root Port 1 Link Speed
+ Desired Link Speed level for PCIe Root Port 1
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdPcieRootPort3DeEmphasis;
+ UINT8 PcdPcieRootPort1LinkSpeed;

-/** Offset 0x003B - PCIe Root Port 4 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x0050 - PCH PCIe Root Port 2 Link Speed
+ Desired Link Speed level for PCIe Root Port 0
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdPcieRootPort4DeEmphasis;
+ UINT8 PcdPcieRootPort2LinkSpeed;

-/** Offset 0x003C - PCIe Root Port 5 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x0051 - PCH PCIe Root Port 3 Link Speed
+ Desired Link Speed level for PCIe Root Port 3
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdPcieRootPort5DeEmphasis;
+ UINT8 PcdPcieRootPort3LinkSpeed;

-/** Offset 0x003D - PCIe Root Port 6 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x0052 - PCH PCIe Root Port 4 Link Speed
+ Desired Link Speed level for PCIe Root Port 8
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdPcieRootPort6DeEmphasis;
+ UINT8 PcdPcieRootPort4LinkSpeed;

-/** Offset 0x003E - PCIe Root Port 7 DeEmphasis
- Desired DeEmphasis level for PCIE root port
- 0:6dB, 1:3.5dB
+/** Offset 0x0053 - PCH PCIe Root Port 5 Link Speed
+ Desired Link Speed level for PCIe Root Port 8
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdPcieRootPort7DeEmphasis;
+ UINT8 PcdPcieRootPort5LinkSpeed;

-/** Offset 0x003F
+/** Offset 0x0054 - PCH PCIe Root Port 6 Link Speed
+ Desired Link Speed level for PCIe Root Port 8
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 UnusedUpdSpace1;
+ UINT8 PcdPcieRootPort6LinkSpeed;

-/** Offset 0x0040
+/** Offset 0x0055 - PCH PCIe Root Port 7 Link Speed
+ Desired Link Speed level for PCIe Root Port 8
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT32 PcdEMMCDLLConfigPtr;
+ UINT8 PcdPcieRootPort7LinkSpeed;

-/** Offset 0x0044 - Disable Monitor MWAIT
- Enable / Disable the Monitor-MWAIT Instruction
- $EN_DIS
+/** Offset 0x0056 - PCH PCIe Root Port 8 Link Speed
+ Desired Link Speed level for PCIe Root Port 8
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 PcdDisableMonitorFSM;
+ UINT8 PcdPcieRootPort8LinkSpeed;

-/** Offset 0x0045
+/** Offset 0x0057 - PCH PCIe Root Port 9 Link Speed
+ Desired Link Speed level for PCIe Root Port 9
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 UnusedUpdSpace2[155];
+ UINT8 PcdPcieRootPort9LinkSpeed;

-/** Offset 0x00E0
+/** Offset 0x0058 - PCH PCIe Root Port 10 Link Speed
+ Desired Link Speed level for PCIe Root Port 10
+ 1:GEN1, 2:GEN2, 3:GEN3
**/
- UINT8 ReservedSiliconInitUpd[16];
-} FSPS_CONFIG;
+ UINT8 PcdPcieRootPort10LinkSpeed;
+
+/** Offset 0x0059 - PCH PCIe Root Port 11 Link Speed
+ Desired Link Speed level for PCIe Root Port 11
+ 1:GEN1, 2:GEN2, 3:GEN3
+**/
+ UINT8 PcdPcieRootPort11LinkSpeed;
+
+/** Offset 0x005A - PCH PCIe Root Port 0 Aspm
+ Desired Active state power management settings for PCIe Root Port 0
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort0Aspm;
+
+/** Offset 0x005B - PCH PCIe Root Port 1 Aspm
+ Desired Active state power management settings for PCIe Root Port 1
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort1Aspm;
+
+/** Offset 0x005C - PCH PCIe Root Port 2 Aspm
+ Desired Active state power management settings for PCIe Root Port 2
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort2Aspm;
+
+/** Offset 0x005D - PCH PCIe Root Port 3 Aspm
+ Desired Active state power management settings for PCIe Root Port 3
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort3Aspm;
+
+/** Offset 0x005E - PCH PCIe Root Port 4 Aspm
+ Desired Active state power management settings for PCIe Root Port 4
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort4Aspm;
+
+/** Offset 0x005F - PCH PCIe Root Port 5 Aspm
+ Desired Active state power management settings for PCIe Root Port 5
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort5Aspm;
+
+/** Offset 0x0060 - PCH PCIe Root Port 6 Aspm
+ Desired Active state power management settings for PCIe Root Port 6
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort6Aspm;
+
+/** Offset 0x0061 - PCH PCIe Root Port 7 Aspm
+ Desired Active state power management settings for PCIe Root Port 7
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort7Aspm;
+
+/** Offset 0x0062 - PCH PCIe Root Port 8 Aspm
+ Desired Active state power management settings for PCIe Root Port 8
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort8Aspm;
+
+/** Offset 0x0063 - PCH PCIe Root Port 9 Aspm
+ Desired Active state power management settings for PCIe Root Port 9
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort9Aspm;
+
+/** Offset 0x0064 - PCH PCIe Root Port 10 Aspm
+ Desired Active state power management settings for PCIe Root Port 10
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort10Aspm;
+
+/** Offset 0x0065 - PCH PCIe Root Port 11 Aspm
+ Desired Active state power management settings for PCIe Root Port 11
+ 0:Disabled, 1:L0, 2:L1, 3:L0SL1
+**/
+ UINT8 PcdPcieRootPort11Aspm;
+
+/** Offset 0x0066 - PCH PCIe Root Port 0 Connection Type
+ Set Connection Type for PCIe Root Port 0. PCIe Root Port 0 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort0ConnectionType;
+
+/** Offset 0x0067 - PCH PCIe Root Port 1 Connection Type
+ Set Connection Type for PCIe Root Port 1. PCIe Root Port 1 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort1ConnectionType;
+
+/** Offset 0x0068 - PCH PCIe Root Port 2 Connection Type
+ Set Connection Type for PCIe Root Port 2. PCIe Root Port 2 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort2ConnectionType;
+
+/** Offset 0x0069 - PCH PCIe Root Port 3 Connection Type
+ Set Connection Type for PCIe Root Port 3. PCIe Root Port 3 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort3ConnectionType;
+
+/** Offset 0x006A - PCH PCIe Root Port 8 Connection Type
+ Set Connection Type for PCIe Root Port 8. PCIe Root Port 8 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort8ConnectionType;
+
+/** Offset 0x006B - PCH PCIe Root Port 9 Connection Type
+ Set Connection Type for PCIe Root Port 9. PCIe Root Port 9 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort9ConnectionType;
+
+/** Offset 0x006C - PCH PCIe Root Port 10 Connection Type
+ Set Connection Type for PCIe Root Port 10. PCIe Root Port 10 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort10ConnectionType;
+
+/** Offset 0x006D - PCH PCIe Root Port 11 Connection Type
+ Set Connection Type for PCIe Root Port 11. PCIe Root Port 11 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort11ConnectionType;
+
+/** Offset 0x006E - PCH PCIe Root Port 0 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 0
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort0HotPlug;
+
+/** Offset 0x006F - PCH PCIe Root Port 1 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 1
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort1HotPlug;
+
+/** Offset 0x0070 - PCH PCIe Root Port 2 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 2
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort2HotPlug;
+
+/** Offset 0x0071 - PCH PCIe Root Port 3 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 3
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort3HotPlug;
+
+/** Offset 0x0072 - PCH PCIe Root Port 8 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 8
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort8HotPlug;
+
+/** Offset 0x0073 - PCH PCIe Root Port 9 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 9
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort9HotPlug;
+
+/** Offset 0x0074 - PCH PCIe Root Port 10 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 10
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort10HotPlug;
+
+/** Offset 0x0075 - PCH PCIe Root Port 11 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 11
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort11HotPlug;
+
+/** Offset 0x0076 - PCH PCIe Root Port 4 Connection Type
+ Set Connection Type for PCIe Root Port 4. PCIe Root Port 4 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort4ConnectionType;
+
+/** Offset 0x0077 - PCH PCIe Root Port 5 Connection Type
+ Set Connection Type for PCIe Root Port 5. PCIe Root Port 5 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort5ConnectionType;
+
+/** Offset 0x0078 - PCH PCIe Root Port 6 Connection Type
+ Set Connection Type for PCIe Root Port 6. PCIe Root Port 6 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort6ConnectionType;
+
+/** Offset 0x0079 - PCH PCIe Root Port 7 Connection Type
+ Set Connection Type for PCIe Root Port 7. PCIe Root Port 7 Hotplug enable forces
+ connection type to Slot.
+ 0:Built-In, 1:Slot
+**/
+ UINT8 PcdPcieRootPort7ConnectionType;
+
+/** Offset 0x007A - PCH PCIe Root Port 4 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 4
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort4HotPlug;
+
+/** Offset 0x007B - PCH PCIe Root Port 5 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 5
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort5HotPlug;
+
+/** Offset 0x007C - PCH PCIe Root Port 6 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 6
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort6HotPlug;
+
+/** Offset 0x007D - PCH PCIe Root Port 7 HotPlug
+ Enable/Disable HotPlug for PCIe Root Port 7
+ $EN_DIS
+**/
+ UINT8 PcdPcieRootPort7HotPlug;
+
+/** Offset 0x007E - Bios WPD
+ Enable / Disable LockDown Bios WPD
+ $EN_DIS
+**/
+ UINT8 PcdLockDownBiosWpd;
+
+/** Offset 0x007F - Bios Interface
+ Enable / Disable LockDown Bios Interface
+ $EN_DIS
+**/
+ UINT8 PcdLockDownBiosInterface;
+
+/** Offset 0x0080 - Global Smi
+ Enable / Disable LockDown Global Smi
+ $EN_DIS
+**/
+ UINT8 PcdLockDownGlobalSmi;
+
+/** Offset 0x0081 - Bios Lock
+ Enable / Disable LockDown Bios Lock
+ $EN_DIS
+**/
+ UINT8 PcdLockDownBiosLock;
+
+/** Offset 0x0082 - SbAccessUnlock
+ Enable / Disable P2sbConfig SbAccessUnlock
+ $EN_DIS
+**/
+ UINT8 PcdSbAccessUnlock;
+
+/** Offset 0x0083 - PCH PCIe Root Port VppOverride
+ Each one of 12 PCH Port VppOverrides are represented by a nibble.For example, nibble
+ 0 controls PciePort 0, nibble 1 controls PciePort 1.A nibble takes value 0(Disable)~1(Enable).
+ The last 4 nibbles are unused. Nibble default value: 0x0
+**/
+ UINT64 PcdPcieRootPortVppOverride;
+
+/** Offset 0x008B - PCH PCIe Root Port VppPort
+ Each one of 12 PCH VppPorts are represented by a nibble.For example, nibble 0 controls
+ VppPort 0, nibble 1 controls VppPort 1.A nibble takes value 0~1. The last 4 nibbles
+ are unused. Nibble default value: 0x0
+**/
+ UINT64 PcdPcieRootPortVppPort;
+
+/** Offset 0x0093 - PCH PCIe Root Port VppAddress
+ Each one of 12 PCH VppAddresses are represented by a nibble.For example, nibble
+ 0 controls VppAddress 0, nibble 1 controls VppAddress 1.A nibble takes value 0~7.
+ The last 4 nibbles are unused. Nibble default value: 0x7
+**/
+ UINT64 PcdPcieRootPortVppAddress;
+
+/** Offset 0x009B - PCH PCIe Root Port PTM Enable
+ Each one of 12 PCIe Port PTM Enable are represented by a nibble.For example, nibble
+ 0 controls PciePort 0, nibble 1 controls PciePort 1.A nibble takes value 0~1. The
+ last 4 nibbles are unused. Nibble default value: 0x1
+**/
+ UINT64 PcdPcieRootPortPtmEnable;
+
+/** Offset 0x00A3 - PCH Flash Protection Ranges Write Enable
+ Write or erase is blocked by hardware. Each byte represents a WriteProtectionEnable
+ for respective Ranges. Total Protected ranges = 5
+**/
+ UINT8 PcdWriteProtectionEnable[5];
+
+/** Offset 0x00A8 - PCH Flash Protection Ranges Read Enable
+ Read is blocked by hardware. Each byte represents a ReadProtectionEnable for respective
+ Ranges. Total Protected ranges = 5
+**/
+ UINT8 PcdReadProtectionEnable[5];
+
+/** Offset 0x00AD - PCH Protect Range Limit
+ Left shifted address by 12 bits with address bits 11:0 are assumed to be FFFh for
+ limit comparison.Each two bytes represents a ProtectedRangeLimit for respective
+ Ranges. Total Protected ranges = 5
+**/
+ UINT16 PcdProtectedRangeLimit[5];
+
+/** Offset 0x00B7 - PCH Protect Range Base
+ Left shifted address by 12 bits with address bits 11:0 are assumed to be 0.Each
+ two bytes represents a ProtectedRangeBase for respective Ranges. Total Protected
+ ranges = 5
+**/
+ UINT16 PcdProtectedRangeBase[5];
+
+/** Offset 0x00C1 - Address of PCH_DEVICE_INTERRUPT_CONFIG table.
+ The address of the table of PCH_DEVICE_INTERRUPT_CONFIG.
+**/
+ UINT32 PcdDevIntConfigPtr;
+
+/** Offset 0x00C5 - Number of DevIntConfig Entry
+ Number of Device Interrupt Configuration Entry. If this is not zero, the DevIntConfigPtr
+ must not be NULL.
+**/
+ UINT8 PcdNumOfDevIntConfig;
+
+/** Offset 0x00C6 - Interrupt config PxRcConfig
+ PxRcConfig can be confiured here. First byte is for PIRQA, second byte is for PIRQB,
+ and so on.
+**/
+ UINT64 PcdIntConfigPxRcConfig;
+
+/** Offset 0x00CE - Interrupt config GpioIrqRoute
+ GpioIrqRoute can be confiured here. Valid value should be set
+**/
+ UINT8 PcdIntConfigGpioIrqRoute;
+
+/** Offset 0x00CF - Interrupt config SciIrqSelect
+ SciIrqSelect can be confiured here. Valid value should be set
+**/
+ UINT8 PcdIntConfigSciIrqSelect;
+
+/** Offset 0x00D0 - PCH PCIe Root Port 0 L1 SubState
+ L1 Substates settings for PCIe Root Port 0
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort0L1SubStates;
+
+/** Offset 0x00D1 - PCH PCIe Root Port 1 L1 SubState
+ L1 Substates settings for PCIe Root Port 1
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort1L1SubStates;
+
+/** Offset 0x00D2 - PCH PCIe Root Port 2 L1 SubState
+ L1 Substates settings for PCIe Root Port 2
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort2L1SubStates;
+
+/** Offset 0x00D3 - PCH PCIe Root Port 3 L1 SubState
+ L1 Substates settings for PCIe Root Port 3
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort3L1SubStates;
+
+/** Offset 0x00D4 - PCH PCIe Root Port 4 L1 SubState
+ L1 Substates settings for PCIe Root Port 4
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort4L1SubStates;
+
+/** Offset 0x00D5 - PCH PCIe Root Port 5 L1 SubState
+ L1 Substates settings for PCIe Root Port 5
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort5L1SubStates;
+
+/** Offset 0x00D6 - PCH PCIe Root Port 6 L1 SubState
+ L1 Substates settings for PCIe Root Port 6
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort6L1SubStates;
+
+/** Offset 0x00D7 - PCH PCIe Root Port 7 L1 SubState
+ L1 Substates settings for PCIe Root Port 7
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort7L1SubStates;
+
+/** Offset 0x00D8 - PCH PCIe Root Port 8 L1 SubState
+ L1 Substates settings for PCIe Root Port 8
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort8L1SubStates;
+
+/** Offset 0x00D9 - PCH PCIe Root Port 9 L1 SubState
+ L1 Substates settings for PCIe Root Port 9
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort9L1SubStates;
+
+/** Offset 0x00DA - PCH PCIe Root Port 10 L1 SubState
+ L1 Substates settings for PCIe Root Port 10
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort10L1SubStates;
+
+/** Offset 0x00DB - PCH PCIe Root Port 11 L1 SubState
+ L1 Substates settings for PCIe Root Port 11
+ 0:Disabled, 1:L1.1, 2:L1.2, 3:L1.1 & L1.2
+**/
+ UINT8 PcdPcieRootPort11L1SubStates;
+
+/** Offset 0x00DC - Tcc Cache Config File Base Address
+ Tcc (Time Coordinated Computing) Cache Config File Base Address
+**/
+ UINT32 PcdTccCacheCfgBase;
+
+/** Offset 0x00E0 - Tcc Cache Config File Size
+ Tcc (Time Coordinated Computing) Cache Config File Size
+**/
+ UINT32 PcdTccCacheCfgSize;
+
+/** Offset 0x00E4 - Tcc Stream Buffer Config File Base Address
+ Tcc (Time Coordinated Computing) Stream Buffer Config File Base Address
+**/
+ UINT32 PcdTccStreamCfgBase;
+
+/** Offset 0x00E8 - Tcc Stream Buffer Config File Size
+ Tcc (Time Coordinated Computing) Stream Buffer Config File Size
+**/
+ UINT32 PcdTccStreamCfgSize;
+
+/** Offset 0x00EC - Tcc CRL Binary File Base Address
+ Tcc (Time Coordinated Computing) CRL Binary File Base Address
+**/
+ UINT32 PcdTccCrlBinBase;
+
+/** Offset 0x00F0 - Tcc CRL Binary File Size
+ Tcc (Time Coordinated Computing) CRL Binary Config File Size
+**/
+ UINT32 PcdTccCrlBinSize;
+
+/** Offset 0x00F4
+**/
+ UINT32 PcdEMMCDLLConfigPtr;
+
+/** Offset 0x00F8
+**/
+ UINT32 PcdSgxRegistrationPackageInfoPtr;
+
+/** Offset 0x00FC
+**/
+ UINT32 PcdSgxRegistrationConfigPtr;
+
+/** Offset 0x0100
+**/
+ UINT32 PcdSgxUefiFwKeyBlobsPtr;
+
+/** Offset 0x0104
+**/
+ UINT32 PcdSgxRegistrationStatusPtr;
+
+/** Offset 0x0108
+**/
+ UINT32 PcdSgxRegistrationResponsePtr;
+
+/** Offset 0x010C
+**/
+ UINT32 PcdSgxUefiFwRegistrationStatePtr;
+
+/** Offset 0x0110
+**/
+ UINT8 PcdSgxRegistrationSoftwareGuardStatus;
+
+/** Offset 0x0111
+**/
+ UINT8 PcdSgxLegacyRegistrationEpcBios;
+
+/** Offset 0x0112
+**/
+ UINT8 PcdSgxLegacyRegistrationEpcSw;
+
+/** Offset 0x0113
+**/
+ UINT32 PcdSecIpInterdepPrevHash;
+
+/** Offset 0x0117
+**/
+ UINT32 PcdSgxRegistrationServerRequestPtr;
+
+/** Offset 0x011B - Rlink CG Enable
+ Enable / Disable Rlink Clock Gating
+ $EN_DIS
+**/
+ UINT8 PcdPchRlinkClockGating;
+
+/** Offset 0x011C - PCI Express Clock Gating
+ Enable / Disable PCI Express Clock Gating
+ $EN_DIS
+**/
+ UINT8 PcdPcieClockGatingEnabled;
+
+/** Offset 0x011D - IO-APIC 24-119 RTE
+ Enable/Disable IO APIC entries 24-119
+ $EN_DIS
+**/
+ UINT8 PcdPchIoApic24119Entries;
+
+/** Offset 0x011E
+**/
+ UINT8 ReservedSiliconInitUpd[4];
+} FSP_S_CONFIG;

/** Fsp S UPD Configuration
**/
@@ -178,19 +706,19 @@

/** Offset 0x0000
**/
- FSP_UPD_HEADER FspUpdHeader;
+ FSP_UPD_HEADER FspUpdHeader;

/** Offset 0x0020
**/
- FSPS_CONFIG FspsConfig;
+ FSP_S_CONFIG FspsConfig;

-/** Offset 0x00F0
+/** Offset 0x0122
**/
- UINT8 UnusedUpdSpace3[14];
+ UINT8 UnusedUpdSpace0;

-/** Offset 0x00FE
+/** Offset 0x0123
**/
- UINT16 UpdTerminator;
+ UINT16 UpdTerminator;
} FSPS_UPD;

#pragma pack()
diff --git a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FsptUpd.h b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FsptUpd.h
index 1568f2b..a267551 100644
--- a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FsptUpd.h
+++ b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/FsptUpd.h
@@ -1,6 +1,6 @@
/** @file

-Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -37,70 +37,55 @@

#pragma pack(1)

+
/** FSP-T Core UPD
**/
typedef struct {

/** Offset 0x0020
**/
- UINT32 MicrocodeRegionBase;
+ UINT32 MicrocodeRegionBase;

/** Offset 0x0024
**/
- UINT32 MicrocodeRegionLength;
+ UINT32 MicrocodeRegionLength;

/** Offset 0x0028
**/
- UINT32 CodeRegionBase;
+ UINT32 CodeRegionBase;

/** Offset 0x002C
**/
- UINT32 CodeRegionLength;
+ UINT32 CodeRegionLength;

/** Offset 0x0030
**/
- UINT8 Reserved1[16];
+ UINT8 Reserved1[16];
} FSPT_CORE_UPD;

-/** FSP-T Configuration
-**/
-typedef struct {
-
-/** Offset 0x0040 - Disable Port80 output in FSP-T
- Select Port80 Control in FSP-T (0:VPD-Style, 1:Enable Port80 Output, 2:Disable Port80
- Output, refer to FSP Integration Guide for details
- 0:VPD-Style, 1:Enable Port80 Output[Default], 2:Disable Port80 Output
-**/
- UINT8 FsptPort80RouteDisable;
-
-/** Offset 0x0041
-**/
- UINT8 ReservedTempRamInitUpd[31];
-} FSPT_CONFIG;
-
/** Fsp T UPD Configuration
**/
typedef struct {

/** Offset 0x0000
**/
- FSP_UPD_HEADER FspUpdHeader;
+ FSP_UPD_HEADER FspUpdHeader;

/** Offset 0x0020
**/
- FSPT_CORE_UPD FsptCoreUpd;
+ FSPT_CORE_UPD FsptCoreUpd;

/** Offset 0x0040
**/
- FSPT_CONFIG FsptConfig;
+ UINT8 ReservedTempRamInitUpd[32];

/** Offset 0x0060
**/
- UINT8 UnusedUpdSpace0[30];
+ UINT8 UnusedUpdSpace0[30];

/** Offset 0x007E
**/
- UINT16 UpdTerminator;
+ UINT16 UpdTerminator;
} FSPT_UPD;

#pragma pack()
diff --git a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/hob_iiouds.h b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/hob_iiouds.h
index 9183244..b2900f2 100644
--- a/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/hob_iiouds.h
+++ b/src/vendorcode/intel/fsp/fsp2_0/skylake_sp/hob_iiouds.h
@@ -99,20 +99,22 @@
IIO_PORT_INFO PortInfo[NUMBER_PORTS_PER_SOCKET];
} IIO_DMI_PCIE_INFO;

-typedef struct _STACK_RES {
- uint8_t Personality;
- uint8_t BusBase;
- uint8_t BusLimit;
- uint16_t PciResourceIoBase;
- uint16_t PciResourceIoLimit;
- uint32_t IoApicBase;
- uint32_t IoApicLimit;
- uint32_t PciResourceMem32Base;
- uint32_t PciResourceMem32Limit;
- uint64_t PciResourceMem64Base;
- uint64_t PciResourceMem64Limit;
- uint32_t VtdBarAddress;
-} STACK_RES;
+// typedef struct _STACK_RES {
+// uint8_t Personality;
+// uint8_t BusBase;
+// uint8_t BusLimit;
+// uint16_t PciResourceIoBase;
+// uint16_t PciResourceIoLimit;
+// uint32_t IoApicBase;
+// uint32_t IoApicLimit;
+// uint32_t PciResourceMem32Base;
+// uint32_t PciResourceMem32Limit;
+// uint64_t PciResourceMem64Base;
+// uint64_t PciResourceMem64Limit;
+// uint32_t VtdBarAddress;
+// } STACK_RES;
+
+#define STACK_RES BL_STACK_RES

typedef struct {
uint8_t Valid;
@@ -232,11 +234,13 @@
uint8_t AepDimmPresent;
} SYSTEM_STATUS;

-typedef struct {
- PLATFORM_DATA PlatformData;
- SYSTEM_STATUS SystemStatus;
- uint32_t OemValue;
-} IIO_UDS;
+// typedef struct {
+// PLATFORM_DATA PlatformData;
+// SYSTEM_STATUS SystemStatus;
+// uint32_t OemValue;
+// } IIO_UDS;
+
+#define IIO_UDS BL_IIO_UDS
#pragma pack()

void soc_display_iio_universal_data_hob(void);

To view, visit change 82074. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: main
Gerrit-Change-Id: I468755a8ade4d5ad438c7b4798f8fe38c201cc14
Gerrit-Change-Number: 82074
Gerrit-PatchSet: 1
Gerrit-Owner: Ziang Wang <ziang.wang@intel.com>
Gerrit-MessageType: newchange