17 #include <soc/pci_devs.h>
18 #include <soc/ramstage.h>
82 #if !CONFIG(SOC_INTEL_CANNONLAKE_PCH_H)
132 #if !CONFIG(SOC_INTEL_CANNONLAKE_PCH_H)
139 #if !CONFIG(SOC_INTEL_CANNONLAKE_PCH_H)
147 #if CONFIG(SOC_INTEL_CANNONLAKE_PCH_H)
212 #define PCH_SERIAL_IO_INDEX(x) ((x) - 1)
231 #if CONFIG(SOC_INTEL_COMETLAKE)
235 for (i = 0; i < CONFIG_SOC_INTEL_I2C_DEV_MAX; i++, dev_offset++) {
236 params->SerialIoI2cMode[i] =
240 for (i = 0; i < CONFIG_SOC_INTEL_COMMON_BLOCK_GSPI_MAX; i++,
242 params->SerialIoSpiMode[i] =
247 params->SerialIoUartMode[i] =
274 if (
config->common_soc_config.gspi[idx].speed_mhz != 0) {
281 if (defaultcs !=
NULL)
292 SI_PCH_DEVICE_INTERRUPT_CONFIG *
config;
293 size_t pch_total = 0;
294 size_t cfg_count = 0;
317 config[cfg_count].IntX = (SI_PCH_INT_PIN)entry->
pin;
324 *out_count = cfg_count;
334 FSP_S_TEST_CONFIG *tconfig = &supd->FspsTestConfig;
348 soc_config = &
config->power_limits_config;
353 tconfig->PsysPmax = soc_config->
psys_pmax * 8;
357 params->PchLockDownRtcMemoryLock = 0;
366 sizeof(
params->SataPortsEnable));
368 sizeof(
params->SataPortsDevSlp));
370 sizeof(
params->SataPortsHotPlug));
371 #if CONFIG(SOC_INTEL_COMETLAKE)
373 config->SataPortsDevSlpResetConfig,
374 sizeof(
params->SataPortsDevSlpResetConfig));
377 params->SlpS0WithGbeSupport = 0;
378 params->PchPmSlpS0VmRuntimeControl =
config->PchPmSlpS0VmRuntimeControl;
379 params->PchPmSlpS0Vm070VSupport =
config->PchPmSlpS0Vm070VSupport;
380 params->PchPmSlpS0Vm075VSupport =
config->PchPmSlpS0Vm075VSupport;
384 if (
params->PchLanEnable) {
385 if (
config->s0ix_enable) {
393 params->SlpS0WithGbeSupport = 1;
394 params->PchPmSlpS0VmRuntimeControl = 0;
395 params->PchPmSlpS0Vm070VSupport = 0;
396 params->PchPmSlpS0Vm075VSupport = 0;
403 params->PchHdaIDispCodecDisconnect =
config->PchHdaIDispCodecDisconnect;
404 params->PchHdaAudioLinkHda =
config->PchHdaAudioLinkHda;
405 params->PchHdaAudioLinkDmic0 =
config->PchHdaAudioLinkDmic0;
406 params->PchHdaAudioLinkDmic1 =
config->PchHdaAudioLinkDmic1;
407 params->PchHdaAudioLinkSsp0 =
config->PchHdaAudioLinkSsp0;
408 params->PchHdaAudioLinkSsp1 =
config->PchHdaAudioLinkSsp1;
409 params->PchHdaAudioLinkSsp2 =
config->PchHdaAudioLinkSsp2;
410 params->PchHdaAudioLinkSndw1 =
config->PchHdaAudioLinkSndw1;
411 params->PchHdaAudioLinkSndw2 =
config->PchHdaAudioLinkSndw2;
412 params->PchHdaAudioLinkSndw3 =
config->PchHdaAudioLinkSndw3;
413 params->PchHdaAudioLinkSndw4 =
config->PchHdaAudioLinkSndw4;
431 params->PchPmPcieWakeFromDeepSx =
config->LanWakeFromDeepSx;
432 params->PchPmWolEnableOverride =
config->WolEnableOverride;
442 params->Enable8254ClockGating = !use_8254;
443 params->Enable8254ClockGatingOnS3 = !use_8254;
452 params->EnableTcoTimer = 1;
456 params->PortUsb20Enable[i] =
config->usb2_ports[i].enable;
457 params->Usb2AfePetxiset[i] =
config->usb2_ports[i].pre_emp_bias;
458 params->Usb2AfeTxiset[i] =
config->usb2_ports[i].tx_bias;
459 params->Usb2AfePredeemp[i] =
460 config->usb2_ports[i].tx_emp_enable;
461 params->Usb2AfePehalfbit[i] =
config->usb2_ports[i].pre_emp_bit;
463 if (
config->usb2_ports[i].enable)
464 params->Usb2OverCurrentPin[i] =
config->usb2_ports[i].ocpin;
466 params->Usb2OverCurrentPin[i] = 0xff;
469 if (
config->PchUsb2PhySusPgDisable)
470 params->PchUsb2PhySusPgEnable = 0;
473 params->PortUsb30Enable[i] =
config->usb3_ports[i].enable;
474 if (
config->usb3_ports[i].enable) {
475 params->Usb3OverCurrentPin[i] =
config->usb3_ports[i].ocpin;
477 params->Usb3OverCurrentPin[i] = 0xff;
479 if (
config->usb3_ports[i].tx_de_emp) {
480 params->Usb3HsioTxDeEmphEnable[i] = 1;
481 params->Usb3HsioTxDeEmph[i] =
482 config->usb3_ports[i].tx_de_emp;
484 if (
config->usb3_ports[i].tx_downscale_amp) {
485 params->Usb3HsioTxDownscaleAmpEnable[i] = 1;
486 params->Usb3HsioTxDownscaleAmp[i] =
487 config->usb3_ports[i].tx_downscale_amp;
489 #if CONFIG(SOC_INTEL_COMETLAKE)
490 if (
config->usb3_ports[i].gen2_tx_rate0_uniq_tran_enable) {
491 params->Usb3HsioTxRate0UniqTranEnable[i] = 1;
492 params->Usb3HsioTxRate0UniqTran[i] =
493 config->usb3_ports[i].gen2_tx_rate0_uniq_tran;
495 if (
config->usb3_ports[i].gen2_tx_rate1_uniq_tran_enable) {
496 params->Usb3HsioTxRate1UniqTranEnable[i] = 1;
497 params->Usb3HsioTxRate1UniqTran[i] =
498 config->usb3_ports[i].gen2_tx_rate1_uniq_tran;
500 if (
config->usb3_ports[i].gen2_tx_rate2_uniq_tran_enable) {
501 params->Usb3HsioTxRate2UniqTranEnable[i] = 1;
502 params->Usb3HsioTxRate2UniqTran[i] =
503 config->usb3_ports[i].gen2_tx_rate2_uniq_tran;
505 if (
config->usb3_ports[i].gen2_tx_rate3_uniq_tran_enable) {
506 params->Usb3HsioTxRate3UniqTranEnable[i] = 1;
507 params->Usb3HsioTxRate3UniqTran[i] =
508 config->usb3_ports[i].gen2_tx_rate3_uniq_tran;
511 if (
config->usb3_ports[i].gen2_rx_tuning_enable) {
512 params->PchUsbHsioRxTuningEnable[i] =
513 config->usb3_ports[i].gen2_rx_tuning_enable;
514 params->PchUsbHsioRxTuningParameters[i] =
515 config->usb3_ports[i].gen2_rx_tuning_params;
516 params->PchUsbHsioFilterSel[i] =
517 config->usb3_ports[i].gen2_rx_filter_sel;
524 params->SerialIoDebugUartNumber = CONFIG_UART_FOR_CONSOLE;
525 #if !CONFIG(SOC_INTEL_COMETLAKE)
526 params->SerialIoEnableDebugUartAfterPost =
CONFIG(INTEL_LPSS_UART_FOR_CONSOLE);
530 #if CONFIG(SOC_INTEL_COMETLAKE)
537 if (
config->PcieClkSrcUsage[i] == 0)
540 config->PcieClkSrcUsage[i] = 0;
543 sizeof(
config->PcieClkSrcUsage));
545 sizeof(
config->PcieClkSrcClkReq));
548 config->PcieRpAdvancedErrorReporting,
549 sizeof(
config->PcieRpAdvancedErrorReporting));
552 sizeof(
config->PcieRpLtrEnable));
554 sizeof(
config->PcieRpSlotImplemented));
556 sizeof(
config->PcieRpHotPlug));
558 for (i = 0; i < CONFIG_MAX_ROOT_PORTS; i++) {
559 params->PcieRpMaxPayload[i] =
config->PcieRpMaxPayload[i];
560 if (
config->PcieRpAspm[i])
566 if (
params->ScsEmmcEnabled) {
567 params->ScsEmmcHs400Enabled =
config->ScsEmmcHs400Enabled;
568 params->PchScsEmmcHs400DllDataValid =
config->EmmcHs400DllNeed;
569 if (
config->EmmcHs400DllNeed == 1) {
570 params->PchScsEmmcHs400RxStrobeDll1 =
571 config->EmmcHs400RxStrobeDll1;
572 params->PchScsEmmcHs400TxDataDll =
573 config->EmmcHs400TxDataDll;
578 if (
params->ScsSdCardEnabled) {
579 params->SdCardPowerEnableActiveHigh =
CONFIG(MB_HAS_ACTIVE_HIGH_SD_PWR_ENABLE);
580 #if CONFIG(SOC_INTEL_COMETLAKE)
581 params->ScsSdCardWpPinEnabled =
config->ScsSdCardWpPinEnabled;
593 params->Heci1Disabled = 0;
606 params->AcousticNoiseMitigation =
config->AcousticNoiseMitigation;
610 params->SlowSlewRateForFivr =
config->SlowSlewRateForFivr;
611 params->FastPkgCRampDisableIa =
config->FastPkgCRampDisableIa;
612 params->FastPkgCRampDisableGt =
config->FastPkgCRampDisableGt;
613 params->FastPkgCRampDisableSa =
config->FastPkgCRampDisableSa;
614 params->FastPkgCRampDisableFivr =
config->FastPkgCRampDisableFivr;
617 if (
config->PchPmSlpS3MinAssert)
618 params->PchPmSlpS3MinAssert =
config->PchPmSlpS3MinAssert;
619 if (
config->PchPmSlpS4MinAssert)
620 params->PchPmSlpS4MinAssert =
config->PchPmSlpS4MinAssert;
621 if (
config->PchPmSlpSusMinAssert)
622 params->PchPmSlpSusMinAssert =
config->PchPmSlpSusMinAssert;
623 if (
config->PchPmSlpAMinAssert)
624 params->PchPmSlpAMinAssert =
config->PchPmSlpAMinAssert;
626 #if CONFIG(SOC_INTEL_COMETLAKE)
627 if (
config->PchPmPwrCycDur)
629 config->PchPmSlpS3MinAssert,
config->PchPmSlpAMinAssert,
634 tconfig->TccActivationOffset =
config->tcc_offset;
635 tconfig->TccOffsetClamp =
config->tcc_offset > 0;
638 tconfig->PchUnlockGpioPads =
config->PchUnlockGpioPads;
649 #if CONFIG(SOC_INTEL_COMETLAKE)
651 &
params->SerialIoSpi0CsEnable[0],
652 &
params->SerialIoSpiDefaultCsOutput[0]);
654 &
params->SerialIoSpi1CsEnable[0],
655 &
params->SerialIoSpiDefaultCsOutput[1]);
657 &
params->SerialIoSpi2CsEnable[0],
658 &
params->SerialIoSpiDefaultCsOutput[2]);
660 for (i = 0; i < CONFIG_SOC_INTEL_COMMON_BLOCK_GSPI_MAX; i++)
667 tconfig->PchLockDownGlobalSmi = lockdown_by_fsp;
668 tconfig->PchLockDownBiosInterface = lockdown_by_fsp;
669 params->PchLockDownBiosLock = lockdown_by_fsp;
670 params->PchLockDownRtcMemoryLock = lockdown_by_fsp;
671 tconfig->SkipPamLock = !lockdown_by_fsp;
672 #if CONFIG(SOC_INTEL_COMETLAKE)
679 params->SpiFlashCfgLockDown = lockdown_by_fsp;
682 #if !CONFIG(SOC_INTEL_COMETLAKE)
683 params->VrPowerDeliveryDesign =
config->VrPowerDeliveryDesign;
695 struct svid_ssid_init_entry {
721 static struct svid_ssid_init_entry ssid_table[
ARRAY_SIZE(devfn_table)];
723 for (i = 0; i <
ARRAY_SIZE(devfn_table); i++) {
725 ssid_table[i].device =
PCI_SLOT(devfn_table[i]);
726 ssid_table[i].function =
PCI_FUNC(devfn_table[i]);
739 die(
"ERROR: Unable to assign PCI IRQs, and no ACPI _PRT table is defined\n");
741 size_t pch_count = 0;
742 const SI_PCH_DEVICE_INTERRUPT_CONFIG *upd_irqs =
pci_irq_to_fsp(&pch_count);
744 params->NumOfDevIntConfig = pch_count;
745 printk(
BIOS_INFO,
"IRQ: Using dynamically assigned PCI IO-APIC IRQs\n");
757 bmp_load_logo(&supd->FspsConfig.LogoPtr, &supd->FspsConfig.LogoSize);
void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
__weak void mainboard_silicon_init_params(FSP_S_CONFIG *s_cfg)
uint8_t * pmc_mmio_regs(void)
void fill_vr_domain_config(FSP_S_CONFIG *s_cfg, int domain, const struct vr_config *cfg)
static void write8(void *addr, uint8_t val)
static uint8_t read8(const void *addr)
void * memcpy(void *dest, const void *src, size_t n)
void * memset(void *dstpp, int c, size_t len)
static struct sdram_info params
void bmp_load_logo(uint32_t *logo_ptr, uint32_t *logo_size)
static uint8_t get_param_value(const config_t *config, uint32_t dev_offset)
static const pci_devfn_t serial_io_dev[]
static void ignore_gbe_ltr(void)
static const SI_PCH_DEVICE_INTERRUPT_CONFIG * pci_irq_to_fsp(size_t *out_count)
static void configure_gspi_cs(int idx, const config_t *config, uint8_t *polarity, uint8_t *enable, uint8_t *defaultcs)
void soc_load_logo(FSPS_UPD *supd)
static void parse_devicetree(const config_t *config, FSP_S_CONFIG *params)
static const struct slot_irq_constraints irq_constraints[]
#define PCH_SERIAL_IO_INDEX(x)
@ PchSerialIoNotInitialized
int __weak gspi_get_soc_spi_cfg(unsigned int gspi_bus, struct spi_cfg *cfg)
#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)
enum fch_io_device device
#define printk(level,...)
void __noreturn die(const char *fmt,...)
bool is_devfn_enabled(unsigned int devfn)
DEVTREE_CONST struct device * pcidev_path_on_root(pci_devfn_t devfn)
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.
unsigned int get_uint_option(const char *name, const unsigned int fallback)
#define PCI_DEVFN(slot, func)
#define PCI_SUBSYSTEM_VENDOR_ID
const struct smm_save_state_ops *legacy_ops __weak
#define PCH_DEVFN_CSE_IDER
#define PCH_DEV_SLOT_SIO3
#define PCH_DEV_SLOT_PCIE_1
#define PCH_DEVFN_TRACEHUB
#define PCH_DEV_SLOT_XHCI
#define PCH_DEV_SLOT_SIO2
#define PCH_DEV_SLOT_SATA
#define PCH_DEV_SLOT_PCIE
#define PCH_DEV_SLOT_SIO1
#define PCH_DEVFN_THERMAL
#define SOC_INTEL_CML_UART_DEV_MAX
#define PCH_DEVFN_CNViWIFI
#define PCH_DEV_SLOT_PCIE_2
#define PCH_DEV_SLOT_STORAGE
#define PCH_DEV_SLOT_THERMAL
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)
unsigned long long uint64_t
struct pci_irq_entry * next
enum spi_polarity cs_polarity
bool xdci_can_enable(unsigned int xdci_devfn)