26 #include <soc/pci_devs.h>
27 #include <soc/ramstage.h>
28 #include <soc/soc_chip.h>
40 #define DEF_DITOVAL 625
78 for (
int i = 0; i < CONFIG_SOC_INTEL_I2C_DEV_MAX; i++)
81 for (
int i = 0; i < CONFIG_SOC_INTEL_COMMON_BLOCK_GSPI_MAX; i++) {
82 params->SerialIoSpiMode[i] =
config->SerialIoGSpiMode[i];
83 params->SerialIoSpiCsMode[i] =
config->SerialIoGSpiCsMode[i];
84 params->SerialIoSpiCsState[i] =
config->SerialIoGSpiCsState[i];
87 for (
int i = 0; i < CONFIG_SOC_INTEL_UART_DEV_MAX; i++)
88 params->SerialIoUartMode[i] =
config->SerialIoUartMode[i];
254 SI_PCH_DEVICE_INTERRUPT_CONFIG *
config;
255 size_t pch_total = 0;
256 size_t cfg_count = 0;
279 config[cfg_count].IntX = (SI_PCH_INT_PIN)entry->
pin;
286 *out_count = cfg_count;
312 if (
CONFIG(USE_INTEL_FSP_TO_CALL_COREBOOT_PUBLISH_MP_PPI))
332 die(
"ERROR: Unable to assign PCI IRQs, and no ACPI _PRT table is defined\n");
334 size_t pch_count = 0;
335 const SI_PCH_DEVICE_INTERRUPT_CONFIG *upd_irqs =
pci_irq_to_fsp(&pch_count);
337 params->NumOfDevIntConfig = pch_count;
338 printk(
BIOS_INFO,
"IRQ: Using dynamically assigned PCI IO-APIC IRQs\n");
345 params->ITbtConnectTopologyTimeoutInMs = 0;
348 params->DisableTccoldOnUsbConnected = 1;
352 params->PchLockDownGlobalSmi = lockdown_by_fsp;
353 params->PchLockDownBiosInterface = lockdown_by_fsp;
354 params->PchUnlockGpioPads = !lockdown_by_fsp;
355 params->RtcMemoryLock = lockdown_by_fsp;
356 params->SkipPamLock = !lockdown_by_fsp;
363 params->PortUsb20Enable[i] =
config->usb2_ports[i].enable;
364 params->Usb2PhyPetxiset[i] =
config->usb2_ports[i].pre_emp_bias;
365 params->Usb2PhyTxiset[i] =
config->usb2_ports[i].tx_bias;
366 params->Usb2PhyPredeemp[i] =
config->usb2_ports[i].tx_emp_enable;
367 params->Usb2PhyPehalfbit[i] =
config->usb2_ports[i].pre_emp_bit;
369 if (
config->usb2_ports[i].enable)
370 params->Usb2OverCurrentPin[i] =
config->usb2_ports[i].ocpin;
372 params->Usb2OverCurrentPin[i] = 0xff;
374 if (
config->usb2_ports[i].type_c)
375 params->PortResetMessageEnable[i] = 1;
379 params->PortUsb30Enable[i] =
config->usb3_ports[i].enable;
380 if (
config->usb3_ports[i].enable) {
381 params->Usb3OverCurrentPin[i] =
config->usb3_ports[i].ocpin;
383 params->Usb3OverCurrentPin[i] = 0xff;
385 if (
config->usb3_ports[i].tx_de_emp) {
386 params->Usb3HsioTxDeEmphEnable[i] = 1;
387 params->Usb3HsioTxDeEmph[i] =
config->usb3_ports[i].tx_de_emp;
389 if (
config->usb3_ports[i].tx_downscale_amp) {
390 params->Usb3HsioTxDownscaleAmpEnable[i] = 1;
391 params->Usb3HsioTxDownscaleAmp[i] =
392 config->usb3_ports[i].tx_downscale_amp;
397 for (i = 0; i < CONFIG_MAX_ROOT_PORTS; i++) {
398 params->PcieRpL1Substates[i] =
400 params->PcieRpLtrEnable[i] =
config->PcieRpLtrEnable[i];
401 params->PcieRpAdvancedErrorReporting[i] =
402 config->PcieRpAdvancedErrorReporting[i];
405 params->PcieRpSlotImplemented[i] =
config->PcieRpSlotImplemented[i];
410 sizeof(
config->PcieRpClkReqDetect));
413 if (
config->tcss_ports[i].enable)
414 params->CpuUsb3OverCurrentPin[i] =
415 config->tcss_ports[i].ocpin;
421 params->SerialIoDebugUartNumber = CONFIG_UART_FOR_CONSOLE;
423 params->SerialIoUartAutoFlow[CONFIG_UART_FOR_CONSOLE] = 0;
431 sizeof(
params->SataPortsEnable));
433 sizeof(
params->SataPortsDevSlp));
450 params->PchPwrOptEnable = !(
config->DmiPwrOptimizeDisable);
451 params->SataPwrOptEnable = !(
config->SataPwrOptimizeDisable);
460 if (
config->SataPortsEnableDitoConfig[i]) {
461 if (
config->SataPortsDmVal[i])
466 if (
config->SataPortsDitoVal[i])
467 params->SataPortsDitoVal[i] =
config->SataPortsDitoVal[i];
473 params->AcousticNoiseMitigation =
config->AcousticNoiseMitigation;
474 params->FastPkgCRampDisable[0] =
config->FastPkgCRampDisable;
489 params->CnviBtAudioOffload =
config->CnviBtAudioOffload;
504 params->Enable8254ClockGating = !use_8254;
505 params->Enable8254ClockGatingOnS3 = !use_8254;
514 params->EnableTcoTimer = 1;
525 printk(
BIOS_INFO,
"cse_lite: CSE RO boot. HybridStorageMode disabled\n");
526 params->HybridStorageMode = 0;
538 if (
config->ext_fivr_settings.configure_ext_fivr) {
539 params->PchFivrExtV1p05RailEnabledStates =
540 config->ext_fivr_settings.v1p05_enable_bitmap;
542 params->PchFivrExtV1p05RailSupportedVoltageStates =
543 config->ext_fivr_settings.v1p05_supported_voltage_bitmap;
545 params->PchFivrExtVnnRailEnabledStates =
546 config->ext_fivr_settings.vnn_enable_bitmap;
548 params->PchFivrExtVnnRailSupportedVoltageStates =
549 config->ext_fivr_settings.vnn_supported_voltage_bitmap;
552 params->PchFivrExtVnnRailSxVoltage =
553 (
config->ext_fivr_settings.vnn_sx_voltage_mv * 10) / 25;
555 params->PchFivrExtV1p05RailIccMaximum =
556 config->ext_fivr_settings.v1p05_icc_max_ma;
561 if (
config->PchPmSlpS3MinAssert)
562 params->PchPmSlpS3MinAssert =
config->PchPmSlpS3MinAssert;
563 if (
config->PchPmSlpS4MinAssert)
564 params->PchPmSlpS4MinAssert =
config->PchPmSlpS4MinAssert;
565 if (
config->PchPmSlpSusMinAssert)
566 params->PchPmSlpSusMinAssert =
config->PchPmSlpSusMinAssert;
567 if (
config->PchPmSlpAMinAssert)
568 params->PchPmSlpAMinAssert =
config->PchPmSlpAMinAssert;
571 if (
config->PchPmPwrCycDur)
573 config->PchPmSlpS3MinAssert,
config->PchPmSlpAMinAssert,
580 params->C1StateAutoDemotion = 0;
583 params->PmcUsb2PhySusPgEnable = !
config->usb2_phy_sus_pg_disable;
590 struct svid_ssid_init_entry {
616 static struct svid_ssid_init_entry ssid_table[
ARRAY_SIZE(devfn_table)];
618 for (i = 0; i <
ARRAY_SIZE(devfn_table); i++) {
620 ssid_table[i].device =
PCI_SLOT(devfn_table[i]);
621 ssid_table[i].function =
PCI_FUNC(devfn_table[i]);
641 params->SiSkipSsidProgramming = 0;
655 switch (phase_index) {
661 if (
CONFIG(SOC_INTEL_COMMON_BLOCK_TCSS)) {
void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
void platform_fsp_multi_phase_init_cb(uint32_t phase_index)
__weak void mainboard_update_soc_chip_config(struct soc_intel_alderlake_config *config)
__weak void mainboard_silicon_init_params(FSP_S_CONFIG *s_cfg)
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dstpp, int c, size_t len)
#define assert(statement)
static struct sdram_info params
bool cse_is_hfs1_com_normal(void)
bool cse_is_hfs3_fw_sku_lite(void)
#define FIXED_INT_PIRQ(x, pin, pirq)
bool assign_pci_irqs(const struct slot_irq_constraints *constraints, size_t num_slots)
#define FIXED_INT_ANY_PIRQ(x, pin)
const struct pci_irq_entry * get_cached_pci_irqs(void)
void tcss_configure(const struct typec_aux_bias_pads aux_bias_pads[MAX_TYPE_C_PORTS])
enum fch_io_device device
#define printk(level,...)
void __noreturn die(const char *fmt,...)
uint32_t cpu_get_cpuid(void)
#define CPUID_TIGERLAKE_A0
bool is_devfn_enabled(unsigned int devfn)
bool is_dev_enabled(const struct device *dev)
DEVTREE_CONST struct device * pcidev_path_on_root(pci_devfn_t devfn)
DEVTREE_CONST struct device * pcidev_on_root(uint8_t dev, uint8_t fn)
bool fsp_is_multi_phase_init_enabled(void)
void * calloc(size_t nitems, size_t size)
int get_lockdown_config(void)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
void * mp_fill_ppi_services_data(void)
unsigned int get_uint_option(const char *name, const unsigned int fallback)
#define PCI_SUBSYSTEM_VENDOR_ID
const struct smm_save_state_ops *legacy_ops __weak
int vboot_recovery_mode_enabled(void)
uint8_t get_supported_lpm_mask(void)
#define PCH_DEVFN_CSE_IDER
#define PCH_DEV_SLOT_ESPI
#define PCH_DEV_SLOT_SIO4
#define PCH_DEV_SLOT_SIO3
#define PCH_DEV_SLOT_PCIE_1
#define PCH_DEVFN_TRACEHUB
#define PCH_DEV_SLOT_XHCI
#define PCH_DEV_SLOT_SIO5
#define SA_DEVFN_TCSS_XHCI
#define PCH_DEV_SLOT_SIO2
#define PCH_DEV_SLOT_SATA
#define PCH_DEV_SLOT_PCIE
#define SA_DEVFN_TCSS_DMA0
#define SA_DEVFN_TCSS_DMA1
#define PCH_DEVFN_CNVI_WIFI
#define PCH_DEV_SLOT_SIO0
#define PCH_DEV_SLOT_SIO1
uint8_t get_pm_pwr_cyc_dur(uint8_t slp_s4_min_assert, uint8_t slp_s3_min_assert, uint8_t slp_a_min_assert, uint8_t pm_pwr_cyc_dur)
#define SA_DEV_SLOT_CPU_PCIE
#define SA_DEVFN_CPU_PCIE
unsigned long long uint64_t
struct pci_irq_entry * next
static void parse_devicetree(FSP_S_CONFIG *params)
static int get_l1_substate_control(enum L1_substates_control ctl)
static const SI_PCH_DEVICE_INTERRUPT_CONFIG * pci_irq_to_fsp(size_t *out_count)
static const struct slot_irq_constraints irq_constraints[]
bool xdci_can_enable(unsigned int xdci_devfn)