coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
cfg.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <arch/hpet.h> /* Include this before OEM.h to have HPET_BASE_ADDRESS from arch/x86 */
4 #include "SBPLATFORM.h"
5 #include "cfg.h"
6 #include <OEM.h>
7 
8 #include <acpi/acpi.h>
9 
10 /**
11  * @brief South Bridge CIMx configuration
12  *
13  * should be called before executing CIMx functions.
14  * this function will be called in romstage and ramstage.
15  */
17 {
19  if (!sb_config)
20  return;
21 
22  sb_config->S3Resume = acpi_is_wakeup_s3();
23 
24  /* header */
25  sb_config->StdHeader.PcieBasePtr = PCIEX_BASE_ADDRESS;
26 
27  /* static Build Parameters */
28  sb_config->BuildParameters.BiosSize = bios_size;
29  sb_config->BuildParameters.LegacyFree = LEGACY_FREE;
30  sb_config->BuildParameters.WatchDogTimerBase = WATCHDOG_TIMER_BASE_ADDRESS;
31  sb_config->BuildParameters.AcpiGpe0BlkAddr = GPE0_BLK_ADDRESS;
32  sb_config->BuildParameters.CpuControlBlkAddr = CPU_CNT_BLK_ADDRESS;
33  sb_config->BuildParameters.AcpiPmTmrBlkAddr = PM1_TMR_BLK_ADDRESS;
34  sb_config->BuildParameters.AcpiPm1CntBlkAddr = PM1_CNT_BLK_ADDRESS;
35  sb_config->BuildParameters.AcpiPm1EvtBlkAddr = PM1_EVT_BLK_ADDRESS;
36  sb_config->BuildParameters.SioPmeBaseAddress = SIO_PME_BASE_ADDRESS;
37  sb_config->BuildParameters.SioHwmBaseAddress = SIO_HWM_BASE_ADDRESS;
38  sb_config->BuildParameters.SpiRomBaseAddress = SPI_BASE_ADDRESS;
39  sb_config->BuildParameters.GecShadowRomBase = GEC_BASE_ADDRESS;
40  sb_config->BuildParameters.Smbus0BaseAddress = SMBUS0_BASE_ADDRESS;
41  sb_config->BuildParameters.Smbus1BaseAddress = SMBUS1_BASE_ADDRESS;
42  sb_config->BuildParameters.SataIDESsid = SATA_IDE_MODE_SSID;
43  sb_config->BuildParameters.SataRAIDSsid = SATA_RAID_MODE_SSID;
44  sb_config->BuildParameters.SataRAID5Ssid = SATA_RAID5_MODE_SSID;
45  sb_config->BuildParameters.SataAHCISsid = SATA_AHCI_SSID;
46  sb_config->BuildParameters.OhciSsid = OHCI_SSID;
47  sb_config->BuildParameters.EhciSsid = EHCI_SSID;
48  sb_config->BuildParameters.Ohci4Ssid = OHCI4_SSID;
49  sb_config->BuildParameters.SmbusSsid = SMBUS_SSID;
50  sb_config->BuildParameters.IdeSsid = IDE_SSID;
51  sb_config->BuildParameters.AzaliaSsid = AZALIA_SSID;
52  sb_config->BuildParameters.LpcSsid = LPC_SSID;
53  sb_config->BuildParameters.PCIBSsid = PCIB_SSID;
54  sb_config->BuildParameters.SpreadSpectrumType = Spread_Spectrum_Type;
55  sb_config->BuildParameters.HpetBase = HPET_BASE_ADDRESS;
56  sb_config->BuildParameters.ImcEnableOverWrite = IMC_ENABLE_OVER_WRITE;
57 
58  /* General */
59  sb_config->SpreadSpectrum = SPREAD_SPECTRUM;
60  sb_config->PciClks = PCI_CLOCK_CTRL;
61  sb_config->HpetTimer = HPET_TIMER;
62  sb_config->SbSpiSpeedSupport = 1;
63 
64  /* USB */
65  sb_config->USBMODE.UsbModeReg = USB_CONFIG;
66  sb_config->SbUsbPll = 0;
67  /* CG PLL multiplier for USB Rx 1.1 mode (0=disable, 1=enable) */
68  sb_config->UsbRxMode = USB_RX_MODE;
69 
70  /* SATA */
71  sb_config->SataClass = SATA_MODE;
72  sb_config->SataIdeMode = SATA_IDE_MODE;
73  sb_config->SataPortMultCap = SATA_PORT_MULT_CAP_RESERVED;
74  sb_config->SATAMODE.SataMode.SataController = SATA_CONTROLLER;
75  sb_config->SATAMODE.SataMode.SataIdeCombMdPriSecOpt = 0; //0 -IDE as primary, 1 -IDE as secondary.
76  //TODO: set to secondary not take effect.
77  sb_config->SATAMODE.SataMode.SataIdeCombinedMode = CONFIG_IDE_COMBINED_MODE;
78  sb_config->SATAMODE.SataMode.SATARefClkSel = SATA_CLOCK_SOURCE;
79 
80  /* Azalia HDA */
81  sb_config->AzaliaController = AZALIA_CONTROLLER;
82  sb_config->AzaliaPinCfg = AZALIA_PIN_CONFIG;
83  sb_config->AZALIACONFIG.AzaliaSdinPin = AZALIA_SDIN_PIN;
84  /* Mainboard Specific Azalia Codec Verb Table */
85 #ifdef AZALIA_OEM_VERB_TABLE
86  sb_config->AZOEMTBL.pAzaliaOemCodecTablePtr = (CODECTBLLIST *)AZALIA_OEM_VERB_TABLE;
87 #else
88  sb_config->AZOEMTBL.pAzaliaOemCodecTablePtr = NULL;
89 #endif
90  /* LPC */
91  /* SuperIO hardware monitor register access */
92  sb_config->SioHwmPortEnable = CONFIG(SB_SUPERIO_HWM);
93 
94  /*
95  * GPP. default configure only enable port0 with 4 lanes,
96  * configure in devicetree.cb would overwrite the default configuration
97  */
98  sb_config->GppFunctionEnable = GPP_CONTROLLER;
99  sb_config->GppLinkConfig = GPP_CFGMODE;
100  //sb_config->PORTCONFIG[0].PortCfg.PortHotPlug = TRUE;
101  sb_config->PORTCONFIG[0].PortCfg.PortPresent = CIMX_OPTION_ENABLED;
102  sb_config->PORTCONFIG[1].PortCfg.PortPresent = CIMX_OPTION_ENABLED;
103  sb_config->PORTCONFIG[2].PortCfg.PortPresent = CIMX_OPTION_ENABLED;
104  sb_config->PORTCONFIG[3].PortCfg.PortPresent = CIMX_OPTION_ENABLED;
105  sb_config->GppUnhidePorts = SB_GPP_UNHIDE_PORTS;
106  sb_config->NbSbGen2 = NB_SB_GEN2;
107  sb_config->GppGen2 = SB_GPP_GEN2;
108 
109  //cimx BTS fix
110  sb_config->GppMemWrImprove = TRUE;
111  sb_config->SbPcieOrderRule = TRUE;
112  sb_config->AlinkPhyPllPowerDown = TRUE;
113  sb_config->GppPhyPllPowerDown = TRUE; //GPP power saving
114  sb_config->SBGecPwr = 0x03;//11b << 5, rpr BDF: 00:20:06
115  sb_config->GecConfig = GEC_CONFIG;
116 }
#define SATA_PORT_MULT_CAP_RESERVED
1 ON, 0 0FF
Definition: platform_cfg.h:109
#define SB_GPP_UNHIDE_PORTS
TRUE - ports visible always, even port empty FALSE - ports invisible if port empty.
Definition: platform_cfg.h:187
#define NB_SB_GEN2
0 - Disable 1 - Enable
Definition: platform_cfg.h:173
#define PCI_CLOCK_CTRL
bit[0-4] used for PCI Slots Clock Control, 0 - disable 1 - enable PCI SLOT 0 define at BIT0 PCI SLOT ...
Definition: platform_cfg.h:60
#define GPP_CONTROLLER
Definition: platform_cfg.h:155
#define BIOS_SIZE
BIOS_SIZE_{1,2,4,8,16}M.
Definition: platform_cfg.h:15
#define SPREAD_SPECTRUM
0 - Disable Spread Spectrum function 1 - Enable Spread Spectrum function
Definition: platform_cfg.h:24
#define SATA_CLOCK_SOURCE
Definition: platform_cfg.h:103
#define SATA_IDE_MODE
INCHIP Sata IDE Controller Mode NOTE: DO NOT ALLOW SATA & IDE use same mode.
Definition: platform_cfg.h:86
#define AZALIA_CONTROLLER
INCHIP HDA controller.
Definition: platform_cfg.h:128
#define AZALIA_PIN_CONFIG
0 - disable 1 - enable
Definition: platform_cfg.h:136
#define AZALIA_SDIN_PIN
SDIN0 is defined at BIT0 & BIT1 00 - GPIO PIN 01 - Reserved 10 - As a Azalia SDIN pin SDIN1 is define...
Definition: platform_cfg.h:150
#define HPET_TIMER
Definition: platform_cfg.h:32
#define GEC_CONFIG
0 - Enable 1 - Disable
Definition: platform_cfg.h:194
#define SATA_MODE
INCHIP Sata Controller Mode NOTE: DO NOT ALLOW SATA & IDE use same mode.
Definition: platform_cfg.h:73
#define USB_CONFIG
bit[0-6] used to control USB 0 - Disable 1 - Enable Usb Ohci1 Controller (Bus 0 Dev 18 Func0) is defi...
Definition: platform_cfg.h:47
#define SB_GPP_GEN2
0 - Disable 1 - Enable
Definition: platform_cfg.h:180
#define SATA_CONTROLLER
INCHIP Sata Controller.
Definition: platform_cfg.h:66
#define GPP_CFGMODE
GPP Link Configuration four possible configuration: GPP_CFGMODE_X4000 GPP_CFGMODE_X2200 GPP_CFGMODE_X...
Definition: platform_cfg.h:166
#define AZALIA_OEM_VERB_TABLE
Mainboard specific codec verb table list.
Definition: platform_cfg.h:223
#define SPI_BASE_ADDRESS
Definition: iomap.h:8
static int acpi_is_wakeup_s3(void)
Definition: acpi.h:9
#define HPET_BASE_ADDRESS
Definition: hpet.h:6
#define SIO_HWM_BASE_ADDRESS
Super IO HWM base address.
Definition: platform_cfg.h:200
void sb800_cimx_config(AMDSBCFG *sb_config)
South Bridge CIMx configuration.
Definition: cfg.c:16
@ CONFIG
Definition: dsi_common.h:201
#define LEGACY_FREE
Definition: platform_cfg.h:8
static AMDSBCFG * sb_config
Definition: late.c:29
#define USB_RX_MODE
0x00 - leave Cg2Pll voltage at default value (1.222V) 0x01 - lower Cg2Pll voltage to 1....
Definition: platform_cfg.h:211
static size_t bios_size
Definition: mmap_boot.c:43
#define NULL
Definition: stddef.h:19
unsigned short uint16_t
Definition: stdint.h:11