aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/lippert/frontrunner-af/BiosCallOuts.c
diff options
context:
space:
mode:
authorJens Rottmann <JRottmann@LiPPERTembedded.de>2013-02-28 10:24:20 +0100
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-03-02 00:16:04 +0100
commit23d13b1d454a6482d436cc65f50bb367c027c10f (patch)
treef04969de66f9aee28844254007733d1f4e35bc5d /src/mainboard/lippert/frontrunner-af/BiosCallOuts.c
parent73d4965be99cc93cec277afca4cdae979433b2b0 (diff)
LiPPERT FrontRunner-AF [2/2]: actually implement mainboard support
Step 2: change the Persimmon code to adapt it to the new board's hardware. The FrontRunner-AF is a PC/104+ form factor embedded board: - AMD Fusion G-T56N (1.65 GHz dual core) or T40R (1 GHz single core) APU - DDR3 SO-DIMM socket (1.5 or 1.35V) - VGA and LVDS (via Analogix ANX3110) - AMD A55E (Hudson-E1) southbridge - 6x USB 2.0 - 1x SATA, 1x CFast socket - HD Audio (via Realtek ALC886) - PCI and ISA (via ITE IT8888) - NEC uPD78F0532 microcontroller on I2C ("SEMA") - Intel I210 GbE (on APU PCIe x1) - SMSC SCH3112 SIO - PS/2 - 2x RS232/485 - 2x SST 25VF032B (SO8, soldered) 4 MB SPI flash (BIOS and failsafe BIOS) http://www.adlinktech.com/PD/web/PD_detail.php?pid=1131 Change-Id: Id55f89d224ad669b351c36128b12299802b721ba Signed-off-by: Jens Rottmann <JRottmann@LiPPERTembedded.de> Reviewed-on: http://review.coreboot.org/2553 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/mainboard/lippert/frontrunner-af/BiosCallOuts.c')
-rw-r--r--src/mainboard/lippert/frontrunner-af/BiosCallOuts.c66
1 files changed, 21 insertions, 45 deletions
diff --git a/src/mainboard/lippert/frontrunner-af/BiosCallOuts.c b/src/mainboard/lippert/frontrunner-af/BiosCallOuts.c
index 9bad4f4490..89e2731b87 100644
--- a/src/mainboard/lippert/frontrunner-af/BiosCallOuts.c
+++ b/src/mainboard/lippert/frontrunner-af/BiosCallOuts.c
@@ -22,7 +22,6 @@
#include "dimmSpd.h"
#include "BiosCallOuts.h"
#include "heapManager.h"
-#include "SB800.h"
STATIC BIOS_CALLOUT_STRUCT BiosCallouts[] =
{
@@ -445,9 +444,25 @@ AGESA_STATUS BiosHookBeforeDQSTraining (UINT32 Func, UINT32 Data, VOID *ConfigPt
/* Call the host environment interface to provide a user hook opportunity. */
AGESA_STATUS BiosHookBeforeDramInit (UINT32 Func, UINT32 Data, VOID *ConfigPtr)
{
- // Unlike e.g. AMD Inagua, Persimmon is unable to vary the RAM voltage.
- // Make sure the right speed settings are selected.
- ((MEM_DATA_STRUCT*)ConfigPtr)->ParameterListPtr->DDR3Voltage = VOLT1_5;
+ MEM_DATA_STRUCT *MemData = ConfigPtr;
+
+ printk(BIOS_INFO, "Setting DDR3 voltage: ");
+ FCH_IOMUX(184) = 2; // GPIO184: VMEM_LV_EN# lowers VMEM from 1.5 to 1.35V
+ switch (MemData->ParameterListPtr->DDR3Voltage) {
+ case VOLT1_25: // board is not able to provide this
+ MemData->ParameterListPtr->DDR3Voltage = VOLT1_35; // sorry
+ printk(BIOS_INFO, "can't provide 1.25 V, using ");
+ // fall through
+ default: // AGESA.h says in mixed case 1.5V DIMMs get excluded
+ case VOLT1_35:
+ FCH_GPIO(184) = 0x08; // = output, disable PU, set to 0
+ printk(BIOS_INFO, "1.35 V\n");
+ break;
+ case VOLT1_5:
+ FCH_GPIO(184) = 0xC8; // = output, disable PU, set to 1
+ printk(BIOS_INFO, "1.5 V\n");
+ }
+
return AGESA_SUCCESS;
}
@@ -465,45 +480,6 @@ AGESA_STATUS BiosHookBeforeExitSelfRefresh (UINT32 Func, UINT32 Data, VOID *Conf
/* PCIE slot reset control */
AGESA_STATUS BiosGnbPcieSlotReset (UINT32 Func, UINT32 Data, VOID *ConfigPtr)
{
- AGESA_STATUS Status;
- UINTN FcnData;
- PCIe_SLOT_RESET_INFO *ResetInfo;
-
- UINT32 GpioMmioAddr;
- UINT32 AcpiMmioAddr;
- UINT8 Data8;
- UINT16 Data16;
-
- FcnData = Data;
- ResetInfo = ConfigPtr;
- // Get SB800 MMIO Base (AcpiMmioAddr)
- WriteIo8(0xCD6, 0x27);
- Data8 = ReadIo8(0xCD7);
- Data16=Data8<<8;
- WriteIo8(0xCD6, 0x26);
- Data8 = ReadIo8(0xCD7);
- Data16|=Data8;
- AcpiMmioAddr = (UINT32)Data16 << 16;
- Status = AGESA_UNSUPPORTED;
- GpioMmioAddr = AcpiMmioAddr + GPIO_BASE;
- switch (ResetInfo->ResetId)
- {
- case 46: // GPIO50 = SBGPIO_PCIE_RST# affects LAN0, LAN1, PCIe slot
- switch (ResetInfo->ResetControl) {
- case AssertSlotReset:
- Data8 = Read64Mem8(GpioMmioAddr+SB_GPIO_REG50);
- Data8 &= ~(UINT8)BIT6 ;
- Write64Mem8(GpioMmioAddr+SB_GPIO_REG50, Data8);
- Status = AGESA_SUCCESS;
- break;
- case DeassertSlotReset:
- Data8 = Read64Mem8(GpioMmioAddr+SB_GPIO_REG50);
- Data8 |= BIT6 ;
- Write64Mem8 (GpioMmioAddr+SB_GPIO_REG50, Data8);
- Status = AGESA_SUCCESS;
- break;
- }
- break;
- }
- return Status;
+ // Dedicated reset not needed for the on-board Intel I210 GbE controller.
+ return AGESA_UNSUPPORTED;
}