northbridge/intel/fsp_*: Remove legacy SoCs
* Remove FSP Sandy/Ivybrige which are unused. * Open Source implementation isn't final but good enough to replace FSP version. * For new ports use NORTHBRIDGE_INTEL_IVYBRIDGE and NORTHBRIDGE_INTEL_SANDYBRIDGE Change-Id: I7b6bc4bfdd0481c8fe5b2b3d8f8b2eb9aa3c3b9e Signed-off-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com> Reviewed-on: https://review.coreboot.org/29402 Reviewed-by: Nico Huber <nico.h@gmx.de> Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
@@ -1,46 +0,0 @@
|
||||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright (C) 2010 Google Inc.
|
||||
## Copyright (C) 2013 Sage Electronic Engineering, LLC.
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
|
||||
config NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE
|
||||
bool
|
||||
select CPU_INTEL_FSP_MODEL_206AX
|
||||
select INTEL_GMA_ACPI
|
||||
|
||||
config NORTHBRIDGE_INTEL_FSP_IVYBRIDGE
|
||||
bool
|
||||
select CPU_INTEL_FSP_MODEL_306AX
|
||||
select INTEL_GMA_ACPI
|
||||
|
||||
if NORTHBRIDGE_INTEL_FSP_IVYBRIDGE || NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE
|
||||
|
||||
config BOOTBLOCK_NORTHBRIDGE_INIT
|
||||
string
|
||||
default "northbridge/intel/fsp_sandybridge/bootblock.c"
|
||||
|
||||
config VGA_BIOS_ID
|
||||
string
|
||||
default "8086,0106"
|
||||
help
|
||||
This is the default PCI ID for the sandybridge/ivybridge graphics
|
||||
devices. This string names the vbios ROM in cbfs. The following
|
||||
PCI IDs will be remapped to load this ROM:
|
||||
0x80860102, 0x8086010a, 0x80860112, 0x80860116
|
||||
0x80860122, 0x80860126, 0x80860166
|
||||
|
||||
# Ivybridge Specific FSP Kconfig
|
||||
source src/northbridge/intel/fsp_sandybridge/fsp/Kconfig
|
||||
|
||||
endif # NORTHBRIDGE_INTEL_FSP_IVYBRIDGE || NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE
|
@@ -1,36 +0,0 @@
|
||||
#
|
||||
# This file is part of the coreboot project.
|
||||
#
|
||||
# Copyright (C) 2010 Google Inc.
|
||||
# Copyright (C) 2013-2014 Sage Electronic Engineering, LLC.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
|
||||
ifeq ($(CONFIG_NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE)$(CONFIG_NORTHBRIDGE_INTEL_FSP_IVYBRIDGE),y)
|
||||
|
||||
subdirs-y += fsp
|
||||
ramstage-y += northbridge.c
|
||||
ramstage-y += ram_calc.c
|
||||
ramstage-y += gma.c
|
||||
|
||||
ramstage-y += acpi.c
|
||||
|
||||
romstage-y += raminit.c
|
||||
romstage-y += ram_calc.c
|
||||
romstage-y += early_init.c
|
||||
romstage-y += report_platform.c
|
||||
romstage-y += ../../../arch/x86/walkcbfs.S
|
||||
|
||||
smm-$(CONFIG_HAVE_SMI_HANDLER) += finalize.c
|
||||
|
||||
CPPFLAGS_common += -I$(src)/northbridge/intel/fsp_sandybridge/fsp
|
||||
|
||||
endif
|
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2009 coresystems GmbH
|
||||
* Copyright (C) 2012 The Chromium OS Authors
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <types.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include "northbridge.h"
|
||||
|
||||
unsigned long acpi_fill_mcfg(unsigned long current)
|
||||
{
|
||||
struct device *dev;
|
||||
u32 pciexbar = 0;
|
||||
u32 pciexbar_reg;
|
||||
int max_buses;
|
||||
|
||||
dev = dev_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_SB, 0);
|
||||
if (!dev)
|
||||
dev = dev_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_IB, 0);
|
||||
if (!dev)
|
||||
return current;
|
||||
|
||||
pciexbar_reg = pci_read_config32(dev, PCIEXBAR);
|
||||
|
||||
// MMCFG not supported or not enabled.
|
||||
if (!(pciexbar_reg & (1 << 0)))
|
||||
return current;
|
||||
|
||||
switch ((pciexbar_reg >> 1) & 3) {
|
||||
case 0: // 256MB
|
||||
pciexbar = pciexbar_reg & ((1 << 31)|(1 << 30)|(1 << 29)|(1 << 28));
|
||||
max_buses = 256;
|
||||
break;
|
||||
case 1: // 128M
|
||||
pciexbar = pciexbar_reg & ((1 << 31)|(1 << 30)|(1 << 29)|(1 << 28)|(1 << 27));
|
||||
max_buses = 128;
|
||||
break;
|
||||
case 2: // 64M
|
||||
pciexbar = pciexbar_reg & ((1 << 31)|(1 << 30)|(1 << 29)|(1 << 28)|(1 << 27)|(1 << 26));
|
||||
max_buses = 64;
|
||||
break;
|
||||
default: // RSVD
|
||||
return current;
|
||||
}
|
||||
|
||||
if (!pciexbar)
|
||||
return current;
|
||||
|
||||
current += acpi_create_mcfg_mmconfig((acpi_mcfg_mmconfig_t *) current,
|
||||
pciexbar, 0x0, 0x0, max_buses - 1);
|
||||
|
||||
return current;
|
||||
}
|
@@ -1,354 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2009 coresystems GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
|
||||
Name(_HID,EISAID("PNP0A08")) // PCIe
|
||||
Name(_CID,EISAID("PNP0A03")) // PCI
|
||||
|
||||
Name(_ADR, 0)
|
||||
Name(_BBN, 0)
|
||||
|
||||
Device (MCHC)
|
||||
{
|
||||
Name(_ADR, 0x00000000) // 0:0.0
|
||||
|
||||
OperationRegion(MCHP, PCI_Config, 0x00, 0x100)
|
||||
Field (MCHP, DWordAcc, NoLock, Preserve)
|
||||
{
|
||||
Offset (0x40), // EPBAR
|
||||
EPEN, 1, // Enable
|
||||
, 11, //
|
||||
EPBR, 24, // EPBAR
|
||||
|
||||
Offset (0x48), // MCHBAR
|
||||
MHEN, 1, // Enable
|
||||
, 13, //
|
||||
MHBR, 22, // MCHBAR
|
||||
|
||||
Offset (0x60), // PCIe BAR
|
||||
PXEN, 1, // Enable
|
||||
PXSZ, 2, // BAR size
|
||||
, 23, //
|
||||
PXBR, 10, // PCIe BAR
|
||||
|
||||
Offset (0x68), // DMIBAR
|
||||
DMEN, 1, // Enable
|
||||
, 11, //
|
||||
DMBR, 24, // DMIBAR
|
||||
|
||||
Offset (0x70), // ME Base Address
|
||||
MEBA, 64,
|
||||
|
||||
// ...
|
||||
|
||||
Offset (0x80), // PAM0
|
||||
, 4,
|
||||
PM0H, 2,
|
||||
, 2,
|
||||
Offset (0x81), // PAM1
|
||||
PM1L, 2,
|
||||
, 2,
|
||||
PM1H, 2,
|
||||
, 2,
|
||||
Offset (0x82), // PAM2
|
||||
PM2L, 2,
|
||||
, 2,
|
||||
PM2H, 2,
|
||||
, 2,
|
||||
Offset (0x83), // PAM3
|
||||
PM3L, 2,
|
||||
, 2,
|
||||
PM3H, 2,
|
||||
, 2,
|
||||
Offset (0x84), // PAM4
|
||||
PM4L, 2,
|
||||
, 2,
|
||||
PM4H, 2,
|
||||
, 2,
|
||||
Offset (0x85), // PAM5
|
||||
PM5L, 2,
|
||||
, 2,
|
||||
PM5H, 2,
|
||||
, 2,
|
||||
Offset (0x86), // PAM6
|
||||
PM6L, 2,
|
||||
, 2,
|
||||
PM6H, 2,
|
||||
, 2,
|
||||
|
||||
Offset (0xa0), // Top of Used Memory
|
||||
TOM, 64,
|
||||
|
||||
Offset (0xbc), // Top of Low Used Memory
|
||||
TLUD, 32,
|
||||
}
|
||||
|
||||
Mutex (CTCM, 1) /* CTDP Switch Mutex (sync level 1) */
|
||||
Name (CTCC, 0) /* CTDP Current Selection */
|
||||
Name (CTCN, 0) /* CTDP Nominal Select */
|
||||
Name (CTCD, 1) /* CTDP Down Select */
|
||||
Name (CTCU, 2) /* CTDP Up Select */
|
||||
|
||||
OperationRegion (MCHB, SystemMemory, DEFAULT_MCHBAR, 0x8000)
|
||||
Field (MCHB, DWordAcc, Lock, Preserve)
|
||||
{
|
||||
Offset (0x5930),
|
||||
CTDN, 15, /* CTDP Nominal PL1 */
|
||||
Offset (0x59a0),
|
||||
PL1V, 15, /* Power Limit 1 Value */
|
||||
PL1E, 1, /* Power Limit 1 Enable */
|
||||
PL1C, 1, /* Power Limit 1 Clamp */
|
||||
PL1T, 7, /* Power Limit 1 Time */
|
||||
Offset (0x59a4),
|
||||
PL2V, 15, /* Power Limit 2 Value */
|
||||
PL2E, 1, /* Power Limit 2 Enable */
|
||||
PL2C, 1, /* Power Limit 2 Clamp */
|
||||
PL2T, 7, /* Power Limit 2 Time */
|
||||
Offset (0x5f3c),
|
||||
TARN, 8, /* CTDP Nominal Turbo Activation Ratio */
|
||||
Offset (0x5f40),
|
||||
CTDD, 15, /* CTDP Down PL1 */
|
||||
, 1,
|
||||
TARD, 8, /* CTDP Down Turbo Activation Ratio */
|
||||
Offset (0x5f48),
|
||||
CTDU, 15, /* CTDP Up PL1 */
|
||||
, 1,
|
||||
TARU, 8, /* CTDP Up Turbo Activation Ratio */
|
||||
Offset (0x5f50),
|
||||
CTCS, 2, /* CTDP Select */
|
||||
Offset (0x5f54),
|
||||
TARS, 8, /* Turbo Activation Ratio Select */
|
||||
}
|
||||
|
||||
/*
|
||||
* Search CPU0 _PSS looking for control = arg0 and then
|
||||
* return previous P-state entry number for new _PPC
|
||||
*
|
||||
* Format of _PSS:
|
||||
* Name (_PSS, Package () {
|
||||
* Package (6) { freq, power, tlat, blat, control, status }
|
||||
* }
|
||||
*/
|
||||
External (\_PR.CP00._PSS)
|
||||
Method (PSSS, 1, NotSerialized)
|
||||
{
|
||||
Store (One, Local0) /* Start at P1 */
|
||||
Store (SizeOf (\_PR.CP00._PSS), Local1)
|
||||
|
||||
While (LLess (Local0, Local1)) {
|
||||
/* Store _PSS entry Control value to Local2 */
|
||||
ShiftRight (DeRefOf (Index (DeRefOf (Index
|
||||
(\_PR.CP00._PSS, Local0)), 4)), 8, Local2)
|
||||
If (LEqual (Local2, Arg0)) {
|
||||
Return (Subtract (Local0, 1))
|
||||
}
|
||||
Increment (Local0)
|
||||
}
|
||||
|
||||
Return (0)
|
||||
}
|
||||
|
||||
/* Set TDP Down */
|
||||
Method (STND, 0, Serialized)
|
||||
{
|
||||
If (Acquire (CTCM, 100)) {
|
||||
Return (0)
|
||||
}
|
||||
If (LEqual (CTCD, CTCC)) {
|
||||
Release (CTCM)
|
||||
Return (0)
|
||||
}
|
||||
|
||||
Store ("Set TDP Down", Debug)
|
||||
|
||||
/* Set CTC */
|
||||
Store (CTCD, CTCS)
|
||||
|
||||
/* Set TAR */
|
||||
Store (TARD, TARS)
|
||||
|
||||
/* Set PPC limit and notify OS */
|
||||
Store (PSSS (TARD), PPCM)
|
||||
PPCN ()
|
||||
|
||||
/* Set PL2 to 1.25 * PL1 */
|
||||
Divide (Multiply (CTDD, 125), 100, , PL2V)
|
||||
|
||||
/* Set PL1 */
|
||||
Store (CTDD, PL1V)
|
||||
|
||||
/* Store the new TDP Down setting */
|
||||
Store (CTCD, CTCC)
|
||||
|
||||
Release (CTCM)
|
||||
Return (1)
|
||||
}
|
||||
|
||||
/* Set TDP Nominal from Down */
|
||||
Method (STDN, 0, Serialized)
|
||||
{
|
||||
If (Acquire (CTCM, 100)) {
|
||||
Return (0)
|
||||
}
|
||||
If (LEqual (CTCN, CTCC)) {
|
||||
Release (CTCM)
|
||||
Return (0)
|
||||
}
|
||||
|
||||
Store ("Set TDP Nominal", Debug)
|
||||
|
||||
/* Set PL1 */
|
||||
Store (CTDN, PL1V)
|
||||
|
||||
/* Set PL2 to 1.25 * PL1 */
|
||||
Divide (Multiply (CTDN, 125), 100, , PL2V)
|
||||
|
||||
/* Set PPC limit and notify OS */
|
||||
Store (PSSS (TARN), PPCM)
|
||||
PPCN ()
|
||||
|
||||
/* Set TAR */
|
||||
Store (TARN, TARS)
|
||||
|
||||
/* Set CTC */
|
||||
Store (CTCN, CTCS)
|
||||
|
||||
/* Store the new TDP Nominal setting */
|
||||
Store (CTCN, CTCC)
|
||||
|
||||
Release (CTCM)
|
||||
Return (1)
|
||||
}
|
||||
}
|
||||
|
||||
// Current Resource Settings
|
||||
Name (MCRS, ResourceTemplate()
|
||||
{
|
||||
// Bus Numbers
|
||||
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
|
||||
0x0000, 0x0000, 0x00ff, 0x0000, 0x0100,,, PB00)
|
||||
|
||||
// IO Region 0
|
||||
DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
|
||||
0x0000, 0x0000, 0x0cf7, 0x0000, 0x0cf8,,, PI00)
|
||||
|
||||
// PCI Config Space
|
||||
Io (Decode16, 0x0cf8, 0x0cf8, 0x0001, 0x0008)
|
||||
|
||||
// IO Region 1
|
||||
DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
|
||||
0x0000, 0x0d00, 0xffff, 0x0000, 0xf300,,, PI01)
|
||||
|
||||
// VGA memory (0xa0000-0xbffff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000a0000, 0x000bffff, 0x00000000,
|
||||
0x00020000,,, ASEG)
|
||||
|
||||
// OPROM reserved (0xd0000-0xd3fff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000d0000, 0x000d3fff, 0x00000000,
|
||||
0x00004000,,, OPR0)
|
||||
|
||||
// OPROM reserved (0xd4000-0xd7fff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000d4000, 0x000d7fff, 0x00000000,
|
||||
0x00004000,,, OPR1)
|
||||
|
||||
// OPROM reserved (0xd8000-0xdbfff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000d8000, 0x000dbfff, 0x00000000,
|
||||
0x00004000,,, OPR2)
|
||||
|
||||
// OPROM reserved (0xdc000-0xdffff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000dc000, 0x000dffff, 0x00000000,
|
||||
0x00004000,,, OPR3)
|
||||
|
||||
// BIOS Extension (0xe0000-0xe3fff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000e0000, 0x000e3fff, 0x00000000,
|
||||
0x00004000,,, ESG0)
|
||||
|
||||
// BIOS Extension (0xe4000-0xe7fff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000e4000, 0x000e7fff, 0x00000000,
|
||||
0x00004000,,, ESG1)
|
||||
|
||||
// BIOS Extension (0xe8000-0xebfff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000e8000, 0x000ebfff, 0x00000000,
|
||||
0x00004000,,, ESG2)
|
||||
|
||||
// BIOS Extension (0xec000-0xeffff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000ec000, 0x000effff, 0x00000000,
|
||||
0x00004000,,, ESG3)
|
||||
|
||||
// System BIOS (0xf0000-0xfffff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x000f0000, 0x000fffff, 0x00000000,
|
||||
0x00010000,,, FSEG)
|
||||
|
||||
// PCI Memory Region (Top of memory-CONFIG_MMCONF_BASE_ADDRESS)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000,
|
||||
0x00000000,,, PM01)
|
||||
|
||||
// TPM Area (0xfed40000-0xfed44fff)
|
||||
DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed,
|
||||
Cacheable, ReadWrite,
|
||||
0x00000000, 0xfed40000, 0xfed44fff, 0x00000000,
|
||||
0x00005000,,, TPMR)
|
||||
})
|
||||
|
||||
Method (_CRS, 0, Serialized)
|
||||
{
|
||||
// Find PCI resource area in MCRS
|
||||
CreateDwordField(MCRS, ^PM01._MIN, PMIN)
|
||||
CreateDwordField(MCRS, ^PM01._MAX, PMAX)
|
||||
CreateDwordField(MCRS, ^PM01._LEN, PLEN)
|
||||
|
||||
// Fix up PCI memory region
|
||||
// Start with Top of Lower Usable DRAM
|
||||
Store (^MCHC.TLUD, Local0)
|
||||
Store (^MCHC.MEBA, Local1)
|
||||
|
||||
// Check if ME base is equal
|
||||
If (LEqual (Local0, Local1)) {
|
||||
// Use Top Of Memory instead
|
||||
Store (^MCHC.TOM, Local0)
|
||||
}
|
||||
|
||||
Store (Local0, PMIN)
|
||||
Store (Subtract(CONFIG_MMCONF_BASE_ADDRESS, 1), PMAX)
|
||||
Add(Subtract(PMAX, PMIN), 1, PLEN)
|
||||
|
||||
Return (MCRS)
|
||||
}
|
||||
|
||||
/* IRQ assignment is mainboard specific. Get it from mainboard ACPI code */
|
||||
#include "acpi/hostbridge_pci_irqs.asl"
|
@@ -1,54 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2009 coresystems GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "../northbridge.h"
|
||||
#include "hostbridge.asl"
|
||||
|
||||
/* PCI Device Resource Consumption */
|
||||
Device (PDRC)
|
||||
{
|
||||
Name (_HID, EISAID("PNP0C02"))
|
||||
Name (_UID, 1)
|
||||
|
||||
Name (PDRS, ResourceTemplate() {
|
||||
Memory32Fixed(ReadWrite, 0xfed1c000, 0x00004000) // RCBA
|
||||
Memory32Fixed(ReadWrite, DEFAULT_MCHBAR, 0x00008000)
|
||||
Memory32Fixed(ReadWrite, DEFAULT_DMIBAR, 0x00001000)
|
||||
Memory32Fixed(ReadWrite, DEFAULT_EPBAR, 0x00001000)
|
||||
Memory32Fixed(ReadWrite, DEFAULT_PCIEXBAR, 0x04000000)
|
||||
Memory32Fixed(ReadWrite, 0xfed20000, 0x00020000) // Misc ICH
|
||||
Memory32Fixed(ReadWrite, 0xfed40000, 0x00005000) // Misc ICH
|
||||
Memory32Fixed(ReadWrite, 0xfed45000, 0x0004b000) // Misc ICH
|
||||
|
||||
#if IS_ENABLED(CONFIG_CHROMEOS_RAMOOPS)
|
||||
Memory32Fixed(ReadWrite, CONFIG_CHROMEOS_RAMOOPS_RAM_START,
|
||||
CONFIG_CHROMEOS_RAMOOPS_RAM_SIZE)
|
||||
#endif
|
||||
|
||||
/* Required for SandyBridge sighting 3715511 */
|
||||
Memory32Fixed(ReadWrite, 0x20000000, 0x00200000)
|
||||
Memory32Fixed(ReadWrite, 0x40000000, 0x00200000)
|
||||
})
|
||||
|
||||
// Current Resource Settings
|
||||
Method (_CRS, 0, Serialized)
|
||||
{
|
||||
Return(PDRS)
|
||||
}
|
||||
}
|
||||
|
||||
// Integrated graphics 0:2.0
|
||||
#include <drivers/intel/gma/acpi/pch.asl>
|
@@ -1,39 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
|
||||
/* Just re-define this instead of including sandybridge.h. It blows up romcc. */
|
||||
#define PCIEXBAR 0x60
|
||||
|
||||
static void bootblock_northbridge_init(void)
|
||||
{
|
||||
uint32_t reg;
|
||||
|
||||
/*
|
||||
* The "io" variant of the config access is explicitly used to
|
||||
* setup the PCIEXBAR because CONFIG_MMCONF_SUPPORT is set to
|
||||
* to true. That way all subsequent non-explicit config accesses use
|
||||
* MCFG. This code also assumes that bootblock_northbridge_init() is
|
||||
* the first thing called in the non-asm boot block code. The final
|
||||
* assumption is that no assembly code is using the
|
||||
* CONFIG_MMCONF_SUPPORT option to do PCI config acceses.
|
||||
*
|
||||
* The PCIEXBAR is assumed to live in the memory mapped IO space under
|
||||
* 4GiB.
|
||||
*/
|
||||
reg = 0;
|
||||
pci_io_write_config32(PCI_DEV(0,0,0), PCIEXBAR + 4, reg);
|
||||
reg = CONFIG_MMCONF_BASE_ADDRESS | 4 | 1; /* 64MiB - 0-63 buses. */
|
||||
pci_io_write_config32(PCI_DEV(0,0,0), PCIEXBAR, reg);
|
||||
}
|
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2008 coresystems GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE_CHIP_H
|
||||
#define NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE_CHIP_H
|
||||
|
||||
#include <drivers/intel/gma/i915.h>
|
||||
|
||||
/*
|
||||
* Digital Port Hotplug Enable:
|
||||
* 0x04 = Enabled, 2ms short pulse
|
||||
* 0x05 = Enabled, 4.5ms short pulse
|
||||
* 0x06 = Enabled, 6ms short pulse
|
||||
* 0x07 = Enabled, 100ms short pulse
|
||||
*/
|
||||
struct northbridge_intel_fsp_sandybridge_config {
|
||||
u8 gpu_dp_b_hotplug; /* Digital Port B Hotplug Config */
|
||||
u8 gpu_dp_c_hotplug; /* Digital Port C Hotplug Config */
|
||||
u8 gpu_dp_d_hotplug; /* Digital Port D Hotplug Config */
|
||||
|
||||
u8 gpu_panel_port_select; /* 0=LVDS 1=DP_B 2=DP_C 3=DP_D */
|
||||
u8 gpu_panel_power_cycle_delay; /* T4 time sequence */
|
||||
u16 gpu_panel_power_up_delay; /* T1+T2 time sequence */
|
||||
u16 gpu_panel_power_down_delay; /* T3 time sequence */
|
||||
u16 gpu_panel_power_backlight_on_delay; /* T5 time sequence */
|
||||
u16 gpu_panel_power_backlight_off_delay; /* Tx time sequence */
|
||||
|
||||
u32 gpu_cpu_backlight; /* CPU Backlight PWM value */
|
||||
u32 gpu_pch_backlight; /* PCH Backlight PWM value */
|
||||
|
||||
struct i915_gpu_controller_info gfx;
|
||||
};
|
||||
|
||||
#endif /* NORTHBRIDGE_INTEL_FSP_SANDYBRIDGE_CHIP_H */
|
@@ -1,82 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2010 coresystems GmbH
|
||||
* Copyright (C) 2011 Google Inc
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <console/console.h>
|
||||
#include <arch/io.h>
|
||||
#include <device/pci_def.h>
|
||||
#include <elog.h>
|
||||
#include "northbridge.h"
|
||||
|
||||
static void sandybridge_setup_bars(void)
|
||||
{
|
||||
printk(BIOS_DEBUG, "Setting up static northbridge registers...");
|
||||
/* Set up all hardcoded northbridge BARs */
|
||||
pci_write_config32(PCI_DEV(0, 0x00, 0), EPBAR, DEFAULT_EPBAR | 1);
|
||||
pci_write_config32(PCI_DEV(0, 0x00, 0), EPBAR + 4, (0LL+DEFAULT_EPBAR) >> 32);
|
||||
pci_write_config32(PCI_DEV(0, 0x00, 0), MCHBAR, (uintptr_t)DEFAULT_MCHBAR | 1);
|
||||
pci_write_config32(PCI_DEV(0, 0x00, 0), MCHBAR + 4, (0LL+(uintptr_t)DEFAULT_MCHBAR) >> 32);
|
||||
pci_write_config32(PCI_DEV(0, 0x00, 0), DMIBAR, (uintptr_t)DEFAULT_DMIBAR | 1);
|
||||
pci_write_config32(PCI_DEV(0, 0x00, 0), DMIBAR + 4, (0LL+(uintptr_t)DEFAULT_DMIBAR) >> 32);
|
||||
|
||||
/* Set C0000-FFFFF to access RAM on both reads and writes */
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM0, 0x30);
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM1, 0x33);
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM2, 0x33);
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM3, 0x33);
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM4, 0x33);
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM5, 0x33);
|
||||
pci_write_config8(PCI_DEV(0, 0x00, 0), PAM6, 0x33);
|
||||
|
||||
#if IS_ENABLED(CONFIG_ELOG_BOOT_COUNT)
|
||||
/* Increment Boot Counter for non-S3 resume */
|
||||
if ((inw(DEFAULT_PMBASE + PM1_STS) & WAK_STS) &&
|
||||
((inl(DEFAULT_PMBASE + PM1_CNT) >> 10) & 7) != SLP_TYP_S3)
|
||||
boot_count_increment();
|
||||
#endif
|
||||
|
||||
printk(BIOS_DEBUG, " done.\n");
|
||||
|
||||
#if IS_ENABLED(CONFIG_ELOG_BOOT_COUNT)
|
||||
/* Increment Boot Counter except when resuming from S3 */
|
||||
if ((inw(DEFAULT_PMBASE + PM1_STS) & WAK_STS) &&
|
||||
((inl(DEFAULT_PMBASE + PM1_CNT) >> 10) & 7) == SLP_TYP_S3)
|
||||
return;
|
||||
boot_count_increment();
|
||||
#endif
|
||||
}
|
||||
|
||||
void sandybridge_early_initialization(int chipset_type)
|
||||
{
|
||||
u32 capid0_a;
|
||||
u8 reg8;
|
||||
|
||||
/* Device ID Override Enable should be done very early */
|
||||
capid0_a = pci_read_config32(PCI_DEV(0, 0, 0), 0xe4);
|
||||
if (capid0_a & (1 << 10)) {
|
||||
reg8 = pci_read_config8(PCI_DEV(0, 0, 0), 0xf3);
|
||||
reg8 &= ~7; /* Clear 2:0 */
|
||||
|
||||
if (chipset_type == SANDYBRIDGE_MOBILE)
|
||||
reg8 |= 1; /* Set bit 0 */
|
||||
|
||||
pci_write_config8(PCI_DEV(0, 0, 0), 0xf3, reg8);
|
||||
}
|
||||
|
||||
/* Setup all BARs required for early PCIe and raminit */
|
||||
sandybridge_setup_bars();
|
||||
}
|
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2012 The Chromium OS Authors. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; version 2 of
|
||||
* the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <stdlib.h>
|
||||
#include <device/pci_ops.h>
|
||||
#include "northbridge.h"
|
||||
|
||||
#define PCI_DEV_SNB PCI_DEV(0, 0, 0)
|
||||
|
||||
void intel_sandybridge_finalize_smm(void)
|
||||
{
|
||||
pci_or_config16(PCI_DEV_SNB, 0x50, 1 << 0); /* GGC */
|
||||
pci_or_config32(PCI_DEV_SNB, 0x5c, 1 << 0); /* DPR */
|
||||
pci_or_config32(PCI_DEV_SNB, 0x78, 1 << 10); /* ME */
|
||||
pci_or_config32(PCI_DEV_SNB, 0x90, 1 << 0); /* REMAPBASE */
|
||||
pci_or_config32(PCI_DEV_SNB, 0x98, 1 << 0); /* REMAPLIMIT */
|
||||
pci_or_config32(PCI_DEV_SNB, 0xa0, 1 << 0); /* TOM */
|
||||
pci_or_config32(PCI_DEV_SNB, 0xa8, 1 << 0); /* TOUUD */
|
||||
pci_or_config32(PCI_DEV_SNB, 0xb0, 1 << 0); /* BDSM */
|
||||
pci_or_config32(PCI_DEV_SNB, 0xb4, 1 << 0); /* BGSM */
|
||||
pci_or_config32(PCI_DEV_SNB, 0xb8, 1 << 0); /* TSEGMB */
|
||||
pci_or_config32(PCI_DEV_SNB, 0xbc, 1 << 0); /* TOLUD */
|
||||
|
||||
MCHBAR32_OR(0x5500, 1 << 0); /* PAVP */
|
||||
MCHBAR32_OR(0x5f00, 1 << 31); /* SA PM */
|
||||
MCHBAR32_OR(0x6020, 1 << 0); /* UMA GFX */
|
||||
MCHBAR32_OR(0x63fc, 1 << 0); /* VTDTRK */
|
||||
MCHBAR32_OR(0x6800, 1 << 31);
|
||||
MCHBAR32_OR(0x7000, 1 << 31);
|
||||
MCHBAR32_OR(0x77fc, 1 << 0);
|
||||
|
||||
/* Memory Controller Lockdown */
|
||||
MCHBAR8(0x50fc) = 0x8f;
|
||||
|
||||
/* Read+write the following */
|
||||
MCHBAR32(0x6030) = MCHBAR32(0x6030);
|
||||
MCHBAR32(0x6034) = MCHBAR32(0x6034);
|
||||
MCHBAR32(0x6008) = MCHBAR32(0x6008);
|
||||
}
|
@@ -1,36 +0,0 @@
|
||||
##
|
||||
## This file is part of the coreboot project.
|
||||
##
|
||||
## Copyright (C) 2014 Sage Electronic Engineering, LLC.
|
||||
##
|
||||
## This program is free software; you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; version 2 of the License.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
|
||||
config SANDYBRIDGE_FSP_SPECIFIC_OPTIONS
|
||||
def_bool y
|
||||
select PLATFORM_USES_FSP1_0
|
||||
select USE_GENERIC_FSP_CAR_INC
|
||||
|
||||
config FSP_FILE
|
||||
string
|
||||
default "../intel/fsp/ivybridge_bd82x6x/FvFsp.bin" if SOUTHBRIDGE_INTEL_FSP_BD82X6X
|
||||
help
|
||||
The path and filename of the Intel FSP binary for this platform.
|
||||
|
||||
config FSP_LOC
|
||||
hex "Intel FSP Binary location in CBFS"
|
||||
default 0xfff80000
|
||||
help
|
||||
The location in CBFS that the FSP is located. This must match the
|
||||
value that is set in the FSP binary. If the FSP needs to be moved,
|
||||
rebase the FSP with the Intel's BCT (tool).
|
||||
|
||||
The Ivy Bridge Processor/Panther Point FSP is built with a preferred
|
||||
base address of 0xFFF80000
|
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# This file is part of the coreboot project.
|
||||
#
|
||||
# Copyright (C) 2014 Sage Electronic Engineering, LLC.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
|
||||
ramstage-y += chipset_fsp_util.c
|
||||
romstage-y += chipset_fsp_util.c
|
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2013-2014 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <types.h>
|
||||
#include <string.h>
|
||||
#include <bootstate.h>
|
||||
#include <cbmem.h>
|
||||
#include <cf9_reset.h>
|
||||
#include <device/device.h>
|
||||
#include <southbridge_pci_devs.h>
|
||||
#include <fsp_util.h>
|
||||
#include "../chip.h"
|
||||
|
||||
#ifdef __PRE_RAM__
|
||||
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
static void GetUpdDefaultFromFsp (FSP_INFO_HEADER *FspInfo, UPD_DATA_REGION *UpdData)
|
||||
{
|
||||
VPD_DATA_REGION *VpdDataRgnPtr;
|
||||
UPD_DATA_REGION *UpdDataRgnPtr;
|
||||
VpdDataRgnPtr = (VPD_DATA_REGION *)(UINT32)(FspInfo->CfgRegionOffset + FspInfo->ImageBase);
|
||||
UpdDataRgnPtr = (UPD_DATA_REGION *)(UINT32)(VpdDataRgnPtr->PcdUpdRegionOffset + FspInfo->ImageBase);
|
||||
memcpy((void *)UpdData, (void *)UpdDataRgnPtr, sizeof(UPD_DATA_REGION));
|
||||
}
|
||||
|
||||
static void ConfigureDefaultUpdData(UPD_DATA_REGION *UpdData)
|
||||
{
|
||||
UpdData->HTEnable = TRUE;
|
||||
UpdData->TurboEnable = FALSE;
|
||||
UpdData->MemoryDownEnable = FALSE;
|
||||
UpdData->FastBootEnable = CONFIG_ENABLE_FSP_FAST_BOOT;
|
||||
}
|
||||
#else /* IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX) */
|
||||
const PLATFORM_CONFIG DefaultPlatformConfig = {
|
||||
TRUE, /* Hyperthreading */
|
||||
FALSE, /* Turbo Mode */
|
||||
FALSE, /* Memory Down */
|
||||
#if IS_ENABLED(CONFIG_ENABLE_FSP_FAST_BOOT)
|
||||
TRUE, /* Fast Boot */
|
||||
#else
|
||||
FALSE, /* Fast Boot */
|
||||
#endif /* CONFIG_ENABLE_FSP_FAST_BOOT */
|
||||
};
|
||||
#endif /* IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX) */
|
||||
|
||||
/*
|
||||
*
|
||||
* Call the FSP to do memory init. The FSP doesn't return to this function.
|
||||
* The FSP returns to the romstage_main_continue().
|
||||
*
|
||||
*/
|
||||
void chipset_fsp_early_init(FSP_INIT_PARAMS *FspInitParams,
|
||||
FSP_INFO_HEADER *fsp_ptr)
|
||||
{
|
||||
FSP_INIT_RT_BUFFER *pFspRtBuffer = FspInitParams->RtBufferPtr;
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
UPD_DATA_REGION *fsp_upd_data = pFspRtBuffer->Common.UpdDataRgnPtr;
|
||||
#else
|
||||
MEM_CONFIG MemoryConfig;
|
||||
memset((void *)&MemoryConfig, 0, sizeof(MEM_CONFIG));
|
||||
#endif
|
||||
FspInitParams->NvsBufferPtr = NULL;
|
||||
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
/* Initialize the UPD Data */
|
||||
GetUpdDefaultFromFsp (fsp_ptr, fsp_upd_data);
|
||||
ConfigureDefaultUpdData(fsp_upd_data);
|
||||
#else
|
||||
pFspRtBuffer->Platform.MemoryConfig = &MemoryConfig;
|
||||
pFspRtBuffer->PlatformConfiguration.PlatformConfig = &DefaultPlatformConfig;
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_ENABLE_FSP_FAST_BOOT)
|
||||
/* Find the fastboot cache that was saved in the ROM */
|
||||
FspInitParams->NvsBufferPtr = find_and_set_fastboot_cache();
|
||||
#endif
|
||||
|
||||
pFspRtBuffer->Common.BootMode = 0;
|
||||
}
|
||||
|
||||
/* The FSP returns here after the fsp_early_init call */
|
||||
void ChipsetFspReturnPoint(EFI_STATUS Status,
|
||||
VOID *HobListPtr)
|
||||
{
|
||||
*(void **)CBMEM_FSP_HOB_PTR = HobListPtr;
|
||||
if (Status == 0xFFFFFFFF) {
|
||||
system_reset();
|
||||
}
|
||||
romstage_main_continue(Status, HobListPtr);
|
||||
}
|
||||
|
||||
#endif /* __PRE_RAM__ */
|
@@ -1,64 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2013-2014 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef CHIPSET_FSP_UTIL_H
|
||||
#define CHIPSET_FSP_UTIL_H
|
||||
|
||||
#include <fsptypes.h>
|
||||
#include <fspfv.h>
|
||||
#include <fspffs.h>
|
||||
#include <fspapi.h>
|
||||
#include <fspplatform.h>
|
||||
#include <fspinfoheader.h>
|
||||
#include <fsphob.h>
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
#include <peifsp.h>
|
||||
#include <fsp_vpd.h>
|
||||
#endif
|
||||
|
||||
#define FSP_RESERVE_MEMORY_SIZE 0x200000
|
||||
|
||||
#define FSP_INFO_HEADER_GUID \
|
||||
{ \
|
||||
0x912740BE, 0x2284, 0x4734, {0xB9, 0x71, 0x84, 0xB0, 0x27, 0x35, 0x3F, 0x0C} \
|
||||
}
|
||||
|
||||
#define FSP_NON_VOLATILE_STORAGE_HOB_GUID \
|
||||
{ \
|
||||
0x721acf02, 0x4d77, 0x4c2a, { 0xb3, 0xdc, 0x27, 0xb, 0x7b, 0xa9, 0xe4, 0xb0 } \
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*The FSP Image ID is different for each platform's FSP and
|
||||
* can be used to verify that the right FSP binary is loaded.
|
||||
*/
|
||||
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
/* ST2-FSP0 */
|
||||
#define FSP_IMAGE_ID_DWORD0 0x2D325453
|
||||
#define FSP_IMAGE_ID_DWORD1 0x30505346
|
||||
#elif IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_BD82X6X)
|
||||
/* CC2-FSP\0 */
|
||||
#define FSP_IMAGE_ID_DWORD0 0x2D324343
|
||||
#define FSP_IMAGE_ID_DWORD1 0x00505346
|
||||
#endif
|
||||
|
||||
#ifdef __PRE_RAM__
|
||||
void main(FSP_INFO_HEADER *fsp_info_header);
|
||||
void romstage_main_continue(EFI_STATUS status, VOID *HobListPtr);
|
||||
#endif
|
||||
|
||||
#endif /* CHIPSET_FSP_UTIL_H */
|
@@ -1,179 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2011 Chromium OS Authors
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <console/console.h>
|
||||
#include <delay.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include <southbridge/intel/fsp_bd82x6x/nvs.h>
|
||||
#include <drivers/intel/gma/opregion.h>
|
||||
#include <drivers/intel/gma/intel_bios.h>
|
||||
|
||||
#include <cbmem.h>
|
||||
|
||||
#include "chip.h"
|
||||
#include "northbridge.h"
|
||||
|
||||
|
||||
/* some vga option roms are used for several chipsets but they only have one
|
||||
* PCI ID in their header. If we encounter such an option rom, we need to do
|
||||
* the mapping ourselves
|
||||
*/
|
||||
|
||||
u32 map_oprom_vendev(u32 vendev)
|
||||
{
|
||||
u32 new_vendev = vendev;
|
||||
|
||||
switch (vendev) {
|
||||
case 0x80860102: /* GT1 Desktop */
|
||||
case 0x8086010a: /* GT1 Server */
|
||||
case 0x80860112: /* GT2 Desktop */
|
||||
case 0x80860116: /* GT2 Mobile */
|
||||
case 0x80860122: /* GT2 Desktop >=1.3GHz */
|
||||
case 0x80860126: /* GT2 Mobile >=1.3GHz */
|
||||
case 0x80860166: /* IVB */
|
||||
new_vendev = 0x80860106; /* GT1 Mobile */
|
||||
break;
|
||||
}
|
||||
|
||||
return new_vendev;
|
||||
}
|
||||
|
||||
uintptr_t gma_get_gnvs_aslb(const void *gnvs)
|
||||
{
|
||||
const global_nvs_t *gnvs_ptr = gnvs;
|
||||
return (uintptr_t)(gnvs_ptr ? gnvs_ptr->aslb : 0);
|
||||
}
|
||||
|
||||
void gma_set_gnvs_aslb(void *gnvs, uintptr_t aslb)
|
||||
{
|
||||
global_nvs_t *gnvs_ptr = gnvs;
|
||||
if (gnvs_ptr)
|
||||
gnvs_ptr->aslb = aslb;
|
||||
}
|
||||
|
||||
static void gma_set_subsystem(struct device *dev, unsigned int vendor,
|
||||
unsigned int device)
|
||||
{
|
||||
if (!vendor || !device) {
|
||||
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
|
||||
pci_read_config32(dev, PCI_VENDOR_ID));
|
||||
} else {
|
||||
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
|
||||
((device & 0xffff) << 16) | (vendor & 0xffff));
|
||||
}
|
||||
}
|
||||
|
||||
const struct i915_gpu_controller_info *
|
||||
intel_gma_get_controller_info(void)
|
||||
{
|
||||
struct device *dev = dev_find_slot(0, PCI_DEVFN(0x2,0));
|
||||
if (!dev) {
|
||||
return NULL;
|
||||
}
|
||||
struct northbridge_intel_fsp_sandybridge_config *chip = dev->chip_info;
|
||||
return &chip->gfx;
|
||||
}
|
||||
|
||||
static void gma_ssdt(struct device *device)
|
||||
{
|
||||
const struct i915_gpu_controller_info *gfx = intel_gma_get_controller_info();
|
||||
if (!gfx) {
|
||||
return;
|
||||
}
|
||||
|
||||
drivers_intel_gma_displays_ssdt_generate(gfx);
|
||||
}
|
||||
|
||||
/* Enable SCI to ACPI _GPE._L06 */
|
||||
static void gma_enable_swsci(void)
|
||||
{
|
||||
u16 reg16;
|
||||
|
||||
/* clear DMISCI status */
|
||||
reg16 = inw(DEFAULT_PMBASE + TCO1_STS);
|
||||
reg16 &= DMISCI_STS;
|
||||
outw(DEFAULT_PMBASE + TCO1_STS, reg16);
|
||||
|
||||
/* clear acpi tco status */
|
||||
outl(DEFAULT_PMBASE + GPE0_STS, TCOSCI_STS);
|
||||
|
||||
/* enable acpi tco scis */
|
||||
reg16 = inw(DEFAULT_PMBASE + GPE0_EN);
|
||||
reg16 |= TCOSCI_EN;
|
||||
outw(DEFAULT_PMBASE + GPE0_EN, reg16);
|
||||
}
|
||||
|
||||
static void gma_init(struct device *dev)
|
||||
{
|
||||
pci_dev_init(dev);
|
||||
|
||||
gma_enable_swsci();
|
||||
intel_gma_restore_opregion();
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
gma_write_acpi_tables(struct device *const dev,
|
||||
unsigned long current,
|
||||
struct acpi_rsdp *const rsdp)
|
||||
{
|
||||
igd_opregion_t *opregion = (igd_opregion_t *)current;
|
||||
global_nvs_t *gnvs;
|
||||
|
||||
if (intel_gma_init_igd_opregion(opregion) != CB_SUCCESS)
|
||||
return current;
|
||||
|
||||
current += sizeof(igd_opregion_t);
|
||||
|
||||
/* GNVS has been already set up */
|
||||
gnvs = cbmem_find(CBMEM_ID_ACPI_GNVS);
|
||||
if (gnvs) {
|
||||
/* IGD OpRegion Base Address */
|
||||
gma_set_gnvs_aslb(gnvs, (uintptr_t)opregion);
|
||||
} else {
|
||||
printk(BIOS_ERR, "Error: GNVS table not found.\n");
|
||||
}
|
||||
|
||||
current = acpi_align_current(current);
|
||||
return current;
|
||||
}
|
||||
|
||||
static struct pci_operations gma_pci_ops = {
|
||||
.set_subsystem = gma_set_subsystem,
|
||||
};
|
||||
|
||||
static struct device_operations gma_func0_ops = {
|
||||
.read_resources = pci_dev_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.acpi_fill_ssdt_generator = gma_ssdt,
|
||||
.init = gma_init,
|
||||
.scan_bus = 0,
|
||||
.enable = 0,
|
||||
.ops_pci = &gma_pci_ops,
|
||||
.write_acpi_tables = gma_write_acpi_tables,
|
||||
};
|
||||
|
||||
static const unsigned short gma_ids[] = {
|
||||
0x0102, 0x0106, 0x010a, 0x0112, 0x0116, 0x0122, 0x0126, 0x166,
|
||||
0,
|
||||
};
|
||||
static const struct pci_driver gma_gt1_desktop __pci_driver = {
|
||||
.ops = &gma_func0_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.devices= gma_ids,
|
||||
};
|
@@ -1,361 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2009 coresystems GmbH
|
||||
* Copyright (C) 2011 The ChromiumOS Authors. All rights reserved.
|
||||
* Copyright (C) 2013 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <arch/acpi.h>
|
||||
#include <arch/io.h>
|
||||
#include <stdint.h>
|
||||
#include <delay.h>
|
||||
#include <cpu/intel/fsp_model_206ax/model_206ax.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ids.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <cpu/cpu.h>
|
||||
#include "chip.h"
|
||||
#include "northbridge.h"
|
||||
#include <fsp_util.h>
|
||||
#include <cpu/intel/smm/gen1/smi.h>
|
||||
|
||||
static int bridge_revision_id = -1;
|
||||
|
||||
/* IGD UMA memory */
|
||||
static uint64_t uma_memory_base = 0;
|
||||
static uint64_t uma_memory_size = 0;
|
||||
|
||||
int bridge_silicon_revision(void)
|
||||
{
|
||||
if (bridge_revision_id < 0) {
|
||||
uint8_t stepping = cpuid_eax(1) & 0xf;
|
||||
uint8_t bridge_id = pci_read_config16(
|
||||
dev_find_slot(0, PCI_DEVFN(0, 0)),
|
||||
PCI_DEVICE_ID) & 0xf0;
|
||||
bridge_revision_id = bridge_id | stepping;
|
||||
}
|
||||
return bridge_revision_id;
|
||||
}
|
||||
|
||||
/* Reserve everything between A segment and 1MB:
|
||||
*
|
||||
* 0xa0000 - 0xbffff: legacy VGA
|
||||
* 0xc0000 - 0xcffff: VGA OPROM (needed by kernel)
|
||||
* 0xe0000 - 0xfffff: SeaBIOS, if used, otherwise DMI
|
||||
*/
|
||||
static const int legacy_hole_base_k = 0xa0000 / 1024;
|
||||
static const int legacy_hole_size_k = 384;
|
||||
|
||||
static int get_pcie_bar(u32 *base)
|
||||
{
|
||||
struct device *dev;
|
||||
u32 pciexbar_reg;
|
||||
|
||||
*base = 0;
|
||||
|
||||
dev = dev_find_slot(0, PCI_DEVFN(0, 0));
|
||||
if (!dev)
|
||||
return 0;
|
||||
|
||||
pciexbar_reg = pci_read_config32(dev, PCIEXBAR);
|
||||
|
||||
if (!(pciexbar_reg & (1 << 0)))
|
||||
return 0;
|
||||
|
||||
switch ((pciexbar_reg >> 1) & 3) {
|
||||
case 0: // 256MB
|
||||
*base = pciexbar_reg & ((1 << 31)|(1 << 30)|(1 << 29)|(1 << 28));
|
||||
return 256;
|
||||
case 1: // 128M
|
||||
*base = pciexbar_reg & ((1 << 31)|(1 << 30)|(1 << 29)|(1 << 28)|(1 << 27));
|
||||
return 128;
|
||||
case 2: // 64M
|
||||
*base = pciexbar_reg & ((1 << 31)|(1 << 30)|(1 << 29)|(1 << 28)|(1 << 27)|(1 << 26));
|
||||
return 64;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void add_fixed_resources(struct device *dev, int index)
|
||||
{
|
||||
mmio_resource(dev, index++, uma_memory_base >> 10, uma_memory_size >> 10);
|
||||
|
||||
mmio_resource(dev, index++, legacy_hole_base_k, legacy_hole_size_k);
|
||||
}
|
||||
|
||||
static void pci_domain_set_resources(struct device *dev)
|
||||
{
|
||||
uint64_t tom, me_base, touud;
|
||||
uint32_t tseg_base, uma_size, tolud;
|
||||
uint16_t ggc;
|
||||
unsigned long long tomk;
|
||||
|
||||
tomk = ggc = tseg_base = uma_size = tolud = tom = me_base = touud = 0;
|
||||
|
||||
/* Total Memory 2GB example:
|
||||
*
|
||||
* 00000000 0000MB-1992MB 1992MB RAM (writeback)
|
||||
* 7c800000 1992MB-2000MB 8MB TSEG (SMRR)
|
||||
* 7d000000 2000MB-2002MB 2MB GFX GTT (uncached)
|
||||
* 7d200000 2002MB-2034MB 32MB GFX UMA (uncached)
|
||||
* 7f200000 2034MB TOLUD
|
||||
* 7f800000 2040MB MEBASE
|
||||
* 7f800000 2040MB-2048MB 8MB ME UMA (uncached)
|
||||
* 80000000 2048MB TOM
|
||||
* 100000000 4096MB-4102MB 6MB RAM (writeback)
|
||||
*
|
||||
* Total Memory 4GB example:
|
||||
*
|
||||
* 00000000 0000MB-2768MB 2768MB RAM (writeback)
|
||||
* ad000000 2768MB-2776MB 8MB TSEG (SMRR)
|
||||
* ad800000 2776MB-2778MB 2MB GFX GTT (uncached)
|
||||
* ada00000 2778MB-2810MB 32MB GFX UMA (uncached)
|
||||
* afa00000 2810MB TOLUD
|
||||
* ff800000 4088MB MEBASE
|
||||
* ff800000 4088MB-4096MB 8MB ME UMA (uncached)
|
||||
* 100000000 4096MB TOM
|
||||
* 100000000 4096MB-5374MB 1278MB RAM (writeback)
|
||||
* 14fe00000 5368MB TOUUD
|
||||
*/
|
||||
|
||||
/* Top of Upper Usable DRAM, including remap */
|
||||
touud = pci_read_config32(dev, TOUUD+4);
|
||||
touud <<= 32;
|
||||
touud |= pci_read_config32(dev, TOUUD) & ~(1UL << 0);
|
||||
|
||||
/* Top of Lower Usable DRAM */
|
||||
tolud = pci_read_config32(dev, TOLUD) & ~(1UL << 0);
|
||||
|
||||
/* Top of Memory - does not account for any UMA */
|
||||
tom = pci_read_config32(dev, 0xa4);
|
||||
tom <<= 32;
|
||||
tom |= pci_read_config32(dev, 0xa0) & ~(1UL << 0);
|
||||
|
||||
printk(BIOS_DEBUG, "TOUUD 0x%llx TOLUD 0x%08x TOM 0x%llx\n",
|
||||
touud, tolud, tom);
|
||||
|
||||
/* ME UMA needs excluding if total memory <4GB */
|
||||
me_base = pci_read_config32(dev, 0x74);
|
||||
me_base <<= 32;
|
||||
me_base |= pci_read_config32(dev, 0x70);
|
||||
|
||||
printk(BIOS_DEBUG, "MEBASE 0x%llx\n", me_base);
|
||||
|
||||
tomk = tolud >> 10;
|
||||
if (me_base == tolud) {
|
||||
/* ME is from MEBASE-TOM */
|
||||
uma_size = (tom - me_base) >> 10;
|
||||
/* Increment TOLUD to account for ME as RAM */
|
||||
tolud += uma_size << 10;
|
||||
/* UMA starts at old TOLUD */
|
||||
uma_memory_base = tomk * 1024ULL;
|
||||
uma_memory_size = uma_size * 1024ULL;
|
||||
printk(BIOS_DEBUG, "ME UMA base 0x%llx size %uM\n",
|
||||
me_base, uma_size >> 10);
|
||||
}
|
||||
|
||||
/* Graphics memory comes next */
|
||||
ggc = pci_read_config16(dev, GGC);
|
||||
if (!(ggc & 2)) {
|
||||
printk(BIOS_DEBUG, "IGD decoded, subtracting ");
|
||||
|
||||
/* Graphics memory */
|
||||
uma_size = ((ggc >> 3) & 0x1f) * 32 * 1024ULL;
|
||||
printk(BIOS_DEBUG, "%uM UMA", uma_size >> 10);
|
||||
tomk -= uma_size;
|
||||
uma_memory_base = tomk * 1024ULL;
|
||||
uma_memory_size += uma_size * 1024ULL;
|
||||
|
||||
/* GTT Graphics Stolen Memory Size (GGMS) */
|
||||
uma_size = ((ggc >> 8) & 0x3) * 1024ULL;
|
||||
tomk -= uma_size;
|
||||
uma_memory_base = tomk * 1024ULL;
|
||||
uma_memory_size += uma_size * 1024ULL;
|
||||
printk(BIOS_DEBUG, " and %uM GTT\n", uma_size >> 10);
|
||||
}
|
||||
|
||||
/* Calculate TSEG size from its base which must be below GTT */
|
||||
uma_memory_base = tomk * 1024ULL;
|
||||
tseg_base = pci_read_config32(dev, 0xb8) & ~(1UL << 0);
|
||||
uma_size = (uma_memory_base - tseg_base) >> 10;
|
||||
tomk -= uma_size;
|
||||
uma_memory_base = tomk * 1024ULL;
|
||||
uma_memory_size += uma_size * 1024ULL;
|
||||
printk(BIOS_DEBUG, "TSEG base 0x%08x size %uM\n",
|
||||
tseg_base, uma_size >> 10);
|
||||
|
||||
printk(BIOS_INFO, "Available memory below 4GB: %lluM\n", tomk >> 10);
|
||||
|
||||
/* Report the memory regions */
|
||||
ram_resource(dev, 3, 0, legacy_hole_base_k);
|
||||
ram_resource(dev, 4, legacy_hole_base_k + legacy_hole_size_k,
|
||||
(tomk - (legacy_hole_base_k + legacy_hole_size_k)));
|
||||
|
||||
/*
|
||||
* If >= 4GB installed then memory from TOLUD to 4GB
|
||||
* is remapped above TOM, TOUUD will account for both
|
||||
*/
|
||||
touud >>= 10; /* Convert to KB */
|
||||
if (touud > 4096 * 1024) {
|
||||
ram_resource(dev, 5, 4096 * 1024, touud - (4096 * 1024));
|
||||
printk(BIOS_INFO, "Available memory above 4GB: %lluM\n",
|
||||
(touud >> 10) - 4096);
|
||||
}
|
||||
|
||||
add_fixed_resources(dev, 6);
|
||||
|
||||
assign_resources(dev->link_list);
|
||||
}
|
||||
|
||||
/* TODO We could determine how many PCIe busses we need in
|
||||
* the bar. For now that number is hardcoded to a max of 64.
|
||||
* See e7525/northbridge.c for an example.
|
||||
*/
|
||||
static struct device_operations pci_domain_ops = {
|
||||
.read_resources = pci_domain_read_resources,
|
||||
.set_resources = pci_domain_set_resources,
|
||||
.enable_resources = NULL,
|
||||
.init = NULL,
|
||||
.scan_bus = pci_domain_scan_bus,
|
||||
};
|
||||
|
||||
static void mc_read_resources(struct device *dev)
|
||||
{
|
||||
u32 pcie_config_base;
|
||||
int buses;
|
||||
|
||||
pci_dev_read_resources(dev);
|
||||
|
||||
buses = get_pcie_bar(&pcie_config_base);
|
||||
if (buses) {
|
||||
struct resource *resource = new_resource(dev, PCIEXBAR);
|
||||
mmconf_resource_init(resource, pcie_config_base, buses);
|
||||
}
|
||||
}
|
||||
|
||||
static void intel_set_subsystem(struct device *dev, unsigned int vendor,
|
||||
unsigned int device)
|
||||
{
|
||||
if (!vendor || !device) {
|
||||
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
|
||||
pci_read_config32(dev, PCI_VENDOR_ID));
|
||||
} else {
|
||||
pci_write_config32(dev, PCI_SUBSYSTEM_VENDOR_ID,
|
||||
((device & 0xffff) << 16) | (vendor & 0xffff));
|
||||
}
|
||||
}
|
||||
|
||||
static void northbridge_init(struct device *dev)
|
||||
{
|
||||
u8 bios_reset_cpl;
|
||||
|
||||
/*
|
||||
* Set bit 0 of BIOS_RESET_CPL to indicate to the CPU
|
||||
* that BIOS has initialized memory and power management
|
||||
*/
|
||||
bios_reset_cpl = MCHBAR8(BIOS_RESET_CPL);
|
||||
bios_reset_cpl |= 1;
|
||||
MCHBAR8(BIOS_RESET_CPL) = bios_reset_cpl;
|
||||
printk(BIOS_DEBUG, "Set BIOS_RESET_CPL\n");
|
||||
}
|
||||
|
||||
static u32 northbridge_get_base_reg(struct device *dev, int reg)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
value = pci_read_config32(dev, reg);
|
||||
/* Base registers are at 1MiB granularity. */
|
||||
value &= ~((1 << 20) - 1);
|
||||
return value;
|
||||
}
|
||||
|
||||
u32 northbridge_get_tseg_base(void)
|
||||
{
|
||||
struct device *const dev = dev_find_slot(0, PCI_DEVFN(0, 0));
|
||||
|
||||
return northbridge_get_base_reg(dev, TSEG);
|
||||
}
|
||||
|
||||
void northbridge_write_smram(u8 smram)
|
||||
{
|
||||
pci_write_config8(dev_find_slot(0, PCI_DEVFN(0, 0)), SMRAM, smram);
|
||||
}
|
||||
|
||||
u32 northbridge_get_tseg_size(void)
|
||||
{
|
||||
return CONFIG_SMM_TSEG_SIZE;
|
||||
}
|
||||
|
||||
static struct pci_operations intel_pci_ops = {
|
||||
.set_subsystem = intel_set_subsystem,
|
||||
};
|
||||
|
||||
static struct device_operations mc_ops = {
|
||||
.read_resources = mc_read_resources,
|
||||
.set_resources = pci_dev_set_resources,
|
||||
.enable_resources = pci_dev_enable_resources,
|
||||
.init = northbridge_init,
|
||||
.scan_bus = 0,
|
||||
.ops_pci = &intel_pci_ops,
|
||||
.acpi_fill_ssdt_generator = generate_cpu_entries,
|
||||
};
|
||||
|
||||
static const struct pci_driver mc_driver_0100 __pci_driver = {
|
||||
.ops = &mc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x0100,
|
||||
};
|
||||
|
||||
static const struct pci_driver mc_driver __pci_driver = {
|
||||
.ops = &mc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x0104, /* Sandy bridge */
|
||||
};
|
||||
|
||||
static const struct pci_driver mc_driver_1 __pci_driver = {
|
||||
.ops = &mc_ops,
|
||||
.vendor = PCI_VENDOR_ID_INTEL,
|
||||
.device = 0x0154, /* Ivy bridge */
|
||||
};
|
||||
|
||||
static void cpu_bus_init(struct device *dev)
|
||||
{
|
||||
initialize_cpus(dev->link_list);
|
||||
}
|
||||
|
||||
static struct device_operations cpu_bus_ops = {
|
||||
.read_resources = DEVICE_NOOP,
|
||||
.set_resources = DEVICE_NOOP,
|
||||
.enable_resources = DEVICE_NOOP,
|
||||
.init = cpu_bus_init,
|
||||
.scan_bus = 0,
|
||||
};
|
||||
|
||||
static void enable_dev(struct device *dev)
|
||||
{
|
||||
/* Set the operations if it is a special bus type */
|
||||
if (dev->path.type == DEVICE_PATH_DOMAIN) {
|
||||
dev->ops = &pci_domain_ops;
|
||||
} else if (dev->path.type == DEVICE_PATH_CPU_CLUSTER) {
|
||||
dev->ops = &cpu_bus_ops;
|
||||
}
|
||||
}
|
||||
|
||||
struct chip_operations northbridge_intel_fsp_sandybridge_ops = {
|
||||
CHIP_NAME("Intel i7 (SandyBridge/IvyBridge) integrated Northbridge")
|
||||
.enable_dev = enable_dev,
|
||||
};
|
@@ -1,218 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2007-2008 coresystems GmbH
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
* Copyright (C) 2013 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __NORTHBRIDGE_INTEL_SANDYBRIDGE_SANDYBRIDGE_H__
|
||||
#define __NORTHBRIDGE_INTEL_SANDYBRIDGE_SANDYBRIDGE_H__
|
||||
|
||||
/* Chipset types */
|
||||
#define SANDYBRIDGE_MOBILE 0
|
||||
#define SANDYBRIDGE_DESKTOP 1
|
||||
#define SANDYBRIDGE_SERVER 2
|
||||
|
||||
/* Device ID for SandyBridge and IvyBridge */
|
||||
#define BASE_REV_SNB 0x00
|
||||
#define BASE_REV_IVB 0x50
|
||||
#define BASE_REV_MASK 0x50
|
||||
|
||||
/* SandyBridge CPU stepping */
|
||||
#define SNB_STEP_D0 (BASE_REV_SNB + 5) /* Also J0 */
|
||||
#define SNB_STEP_D1 (BASE_REV_SNB + 6)
|
||||
#define SNB_STEP_D2 (BASE_REV_SNB + 7) /* Also J1/Q0 */
|
||||
|
||||
/* IvyBridge CPU stepping */
|
||||
#define IVB_STEP_A0 (BASE_REV_IVB + 0)
|
||||
#define IVB_STEP_B0 (BASE_REV_IVB + 2)
|
||||
#define IVB_STEP_C0 (BASE_REV_IVB + 4)
|
||||
#define IVB_STEP_K0 (BASE_REV_IVB + 5)
|
||||
#define IVB_STEP_D0 (BASE_REV_IVB + 6)
|
||||
|
||||
/* Intel Enhanced Debug region must be 4MB */
|
||||
#define IED_SIZE 0x400000
|
||||
|
||||
/* Northbridge BARs */
|
||||
#define DEFAULT_PCIEXBAR CONFIG_MMCONF_BASE_ADDRESS /* 4 KB per PCIe device */
|
||||
#ifndef __ACPI__
|
||||
#define DEFAULT_MCHBAR ((u8 *)0xfed10000) /* 16 KB */
|
||||
#define DEFAULT_DMIBAR ((u8 *)0xfed18000) /* 4 KB */
|
||||
#else
|
||||
#define DEFAULT_MCHBAR 0xfed10000 /* 16 KB */
|
||||
#define DEFAULT_DMIBAR 0xfed18000 /* 4 KB */
|
||||
#endif
|
||||
#define DEFAULT_EPBAR 0xfed19000 /* 4 KB */
|
||||
#define DEFAULT_RCBABASE ((u8 *)0xfed1c000)
|
||||
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_BD82X6X)
|
||||
#include <southbridge/intel/fsp_bd82x6x/pch.h>
|
||||
#elif IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
#include <southbridge/intel/fsp_i89xx/pch.h>
|
||||
#endif
|
||||
|
||||
/* Everything below this line is ignored in the DSDT */
|
||||
#ifndef __ACPI__
|
||||
|
||||
/* Device 0:0.0 PCI configuration space (Host Bridge) */
|
||||
|
||||
#define EPBAR 0x40
|
||||
#define MCHBAR 0x48
|
||||
#define PCIEXBAR 0x60
|
||||
#define DMIBAR 0x68
|
||||
#define X60BAR 0x60
|
||||
|
||||
#define GGC 0x50 /* GMCH Graphics Control */
|
||||
|
||||
#define DEVEN 0x54 /* Device Enable */
|
||||
#define DEVEN_PEG60 (1 << 13)
|
||||
#define DEVEN_IGD (1 << 4)
|
||||
#define DEVEN_PEG10 (1 << 3)
|
||||
#define DEVEN_PEG11 (1 << 2)
|
||||
#define DEVEN_PEG12 (1 << 1)
|
||||
#define DEVEN_HOST (1 << 0)
|
||||
|
||||
#define PAM0 0x80
|
||||
#define PAM1 0x81
|
||||
#define PAM2 0x82
|
||||
#define PAM3 0x83
|
||||
#define PAM4 0x84
|
||||
#define PAM5 0x85
|
||||
#define PAM6 0x86
|
||||
|
||||
#define LAC 0x87 /* Legacy Access Control */
|
||||
#define SMRAM 0x88 /* System Management RAM Control */
|
||||
|
||||
#define TOM 0xa0
|
||||
#define TOUUD 0xa8 /* Top of Upper Usable DRAM */
|
||||
#define BGSM 0xb4 /* Base GTT Stolen Memory */
|
||||
#define TSEG 0xb8 /* TSEG base */
|
||||
#define TOLUD 0xbc /* Top of Low Used Memory */
|
||||
|
||||
#define SKPAD 0xdc /* Scratchpad Data */
|
||||
|
||||
/* Device 0:1.0 PCI configuration space (PCI Express) */
|
||||
|
||||
#define BCTRL1 0x3e /* 16bit */
|
||||
|
||||
|
||||
/* Device 0:2.0 PCI configuration space (Graphics Device) */
|
||||
|
||||
#define MSAC 0x62 /* Multi Size Aperture Control */
|
||||
|
||||
/*
|
||||
* MCHBAR
|
||||
*/
|
||||
|
||||
#define MCHBAR8(x) *((volatile u8 *)(DEFAULT_MCHBAR + x))
|
||||
#define MCHBAR16(x) *((volatile u16 *)(DEFAULT_MCHBAR + x))
|
||||
#define MCHBAR32(x) *((volatile u32 *)(DEFAULT_MCHBAR + x))
|
||||
#define MCHBAR32_OR(x, or) MCHBAR32(x) = (MCHBAR32(x) | (or))
|
||||
|
||||
#define SSKPD 0x5d14 /* 16bit (scratchpad) */
|
||||
#define BIOS_RESET_CPL 0x5da8 /* 8bit */
|
||||
|
||||
/*
|
||||
* EPBAR - Egress Port Root Complex Register Block
|
||||
*/
|
||||
|
||||
#define EPBAR8(x) *((volatile u8 *)(DEFAULT_EPBAR + x))
|
||||
#define EPBAR16(x) *((volatile u16 *)(DEFAULT_EPBAR + x))
|
||||
#define EPBAR32(x) *((volatile u32 *)(DEFAULT_EPBAR + x))
|
||||
|
||||
#define EPPVCCAP1 0x004 /* 32bit */
|
||||
#define EPPVCCAP2 0x008 /* 32bit */
|
||||
|
||||
#define EPVC0RCAP 0x010 /* 32bit */
|
||||
#define EPVC0RCTL 0x014 /* 32bit */
|
||||
#define EPVC0RSTS 0x01a /* 16bit */
|
||||
|
||||
#define EPVC1RCAP 0x01c /* 32bit */
|
||||
#define EPVC1RCTL 0x020 /* 32bit */
|
||||
#define EPVC1RSTS 0x026 /* 16bit */
|
||||
|
||||
#define EPVC1MTS 0x028 /* 32bit */
|
||||
#define EPVC1IST 0x038 /* 64bit */
|
||||
|
||||
#define EPESD 0x044 /* 32bit */
|
||||
|
||||
#define EPLE1D 0x050 /* 32bit */
|
||||
#define EPLE1A 0x058 /* 64bit */
|
||||
#define EPLE2D 0x060 /* 32bit */
|
||||
#define EPLE2A 0x068 /* 64bit */
|
||||
|
||||
#define PORTARB 0x100 /* 256bit */
|
||||
|
||||
/*
|
||||
* DMIBAR
|
||||
*/
|
||||
|
||||
#define DMIBAR8(x) *((volatile u8 *)(DEFAULT_DMIBAR + x))
|
||||
#define DMIBAR16(x) *((volatile u16 *)(DEFAULT_DMIBAR + x))
|
||||
#define DMIBAR32(x) *((volatile u32 *)(DEFAULT_DMIBAR + x))
|
||||
|
||||
#define DMIVCECH 0x000 /* 32bit */
|
||||
#define DMIPVCCAP1 0x004 /* 32bit */
|
||||
#define DMIPVCCAP2 0x008 /* 32bit */
|
||||
|
||||
#define DMIPVCCCTL 0x00c /* 16bit */
|
||||
|
||||
#define DMIVC0RCAP 0x010 /* 32bit */
|
||||
#define DMIVC0RCTL0 0x014 /* 32bit */
|
||||
#define DMIVC0RSTS 0x01a /* 16bit */
|
||||
|
||||
#define DMIVC1RCAP 0x01c /* 32bit */
|
||||
#define DMIVC1RCTL 0x020 /* 32bit */
|
||||
#define DMIVC1RSTS 0x026 /* 16bit */
|
||||
|
||||
#define DMILE1D 0x050 /* 32bit */
|
||||
#define DMILE1A 0x058 /* 64bit */
|
||||
#define DMILE2D 0x060 /* 32bit */
|
||||
#define DMILE2A 0x068 /* 64bit */
|
||||
|
||||
#define DMILCAP 0x084 /* 32bit */
|
||||
#define DMILCTL 0x088 /* 16bit */
|
||||
#define DMILSTS 0x08a /* 16bit */
|
||||
|
||||
#define DMICTL1 0x0f0 /* 32bit */
|
||||
#define DMICTL2 0x0fc /* 32bit */
|
||||
|
||||
#define DMICC 0x208 /* 32bit */
|
||||
|
||||
#define DMIDRCCFG 0xeb4 /* 32bit */
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
static inline void barrier(void) { asm("" ::: "memory"); }
|
||||
|
||||
#define PCI_DEVICE_ID_SB 0x0104
|
||||
#define PCI_DEVICE_ID_IB 0x0154
|
||||
|
||||
#ifdef __SMM__
|
||||
void intel_sandybridge_finalize_smm(void);
|
||||
#else /* !__SMM__ */
|
||||
int bridge_silicon_revision(void);
|
||||
void sandybridge_early_initialization(int chipset_type);
|
||||
void sandybridge_late_initialization(void);
|
||||
|
||||
/* debugging functions */
|
||||
void print_pci_devices(void);
|
||||
void dump_pci_device(unsigned dev);
|
||||
void dump_pci_devices(void);
|
||||
void dump_spd_registers(void);
|
||||
void dump_mem(unsigned start, unsigned end);
|
||||
void report_platform_info(void);
|
||||
#endif /* !__SMM__ */
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif /* __NORTHBRIDGE_INTEL_SANDYBRIDGE_SANDYBRIDGE_H__ */
|
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2013 Google Inc.
|
||||
* Copyright (C) 2014 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef _INTEL_FSP_SANDYBRIDGE_PCI_DEVS_H_
|
||||
#define _INTEL_FSP_SANDYBRIDGE_PCI_DEVS_H_
|
||||
|
||||
#include <device/pci_def.h>
|
||||
|
||||
#define BUS0 0
|
||||
|
||||
/* NB PCIe PEG slot */
|
||||
#define NB_PEG_DEV 0x01
|
||||
#define NB_PEG_FUNC 0
|
||||
# define NB_PEG_DEVFN PCI_DEVFN(NB_PEG_DEV, NB_PEG_FUNC)
|
||||
#define PCIE_CTRL1_FUNC 1
|
||||
# define PCIE_CTRL1_DEVFN PCI_DEVFN(NB_PEG_DEV, PCIE_CTRL1_FUNC)
|
||||
#define PCIE_CTRL2_FUNC 2
|
||||
# define PCIE_CTRL2_DEVFN PCI_DEVFN(NB_PEG_DEV, PCIE_CTRL2_FUNC)
|
||||
|
||||
/* Onboard Graphics */
|
||||
#define GFX_DEV 0x02
|
||||
#define GFX_FUNC 0
|
||||
# define GFX_DEVFN PCI_DEVFN(GFX_DEV, GFX_FUNC)
|
||||
|
||||
/* NB PCIe slot */
|
||||
#define NB_PCIE_DEV 0x06
|
||||
#define NB_PCIE_FUNC 0
|
||||
# define NB_PCIE_DEVFN PCI_DEVFN(NB_PCIE_DEV, NB_PCIE_FUNC)
|
||||
|
||||
#endif /* _INTEL_FSP_SANDYBRIDGE_PCI_DEVS_H_ */
|
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
* Copyright (C) 2013 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#define __SIMPLE_DEVICE__
|
||||
|
||||
#include <arch/io.h>
|
||||
#include <cbmem.h>
|
||||
#include <fsp_util.h>
|
||||
#include "northbridge.h"
|
||||
|
||||
static uintptr_t smm_region_start(void)
|
||||
{
|
||||
/* Base of TSEG is top of usable DRAM */
|
||||
uintptr_t tom = pci_read_config32(PCI_DEV(0,0,0), TSEG) & ~(1UL << 0);
|
||||
return tom;
|
||||
}
|
||||
|
||||
void *cbmem_top(void)
|
||||
{
|
||||
return (void *) (smm_region_start() - FSP_RESERVE_MEMORY_SIZE);
|
||||
}
|
@@ -1,71 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <string.h>
|
||||
#include <arch/io.h>
|
||||
#include <device/pci_def.h>
|
||||
#include "raminit.h"
|
||||
#include "northbridge.h"
|
||||
|
||||
static const char *ecc_decoder[] = {
|
||||
"inactive",
|
||||
"active on IO",
|
||||
"disabled on IO",
|
||||
"active"
|
||||
};
|
||||
|
||||
/*
|
||||
* Dump in the log memory controller configuration as read from the memory
|
||||
* controller registers.
|
||||
*/
|
||||
void report_memory_config(void)
|
||||
{
|
||||
u32 addr_decoder_common, addr_decode_ch[2];
|
||||
int i;
|
||||
|
||||
addr_decoder_common = MCHBAR32(0x5000);
|
||||
addr_decode_ch[0] = MCHBAR32(0x5004);
|
||||
addr_decode_ch[1] = MCHBAR32(0x5008);
|
||||
|
||||
printk(BIOS_DEBUG, "memcfg DDR3 clock %d MHz\n",
|
||||
(MCHBAR32(0x5e04) * 13333 * 2 + 50)/100);
|
||||
printk(BIOS_DEBUG, "memcfg channel assignment: A: %d, B % d, C % d\n",
|
||||
addr_decoder_common & 3,
|
||||
(addr_decoder_common >> 2) & 3,
|
||||
(addr_decoder_common >> 4) & 3);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(addr_decode_ch); i++) {
|
||||
u32 ch_conf = addr_decode_ch[i];
|
||||
printk(BIOS_DEBUG, "memcfg channel[%d] config (%8.8x):\n",
|
||||
i, ch_conf);
|
||||
printk(BIOS_DEBUG, " ECC %s\n",
|
||||
ecc_decoder[(ch_conf >> 24) & 3]);
|
||||
printk(BIOS_DEBUG, " enhanced interleave mode %s\n",
|
||||
((ch_conf >> 22) & 1) ? "on" : "off");
|
||||
printk(BIOS_DEBUG, " rank interleave %s\n",
|
||||
((ch_conf >> 21) & 1) ? "on" : "off");
|
||||
printk(BIOS_DEBUG, " DIMMA %d MB width x%d %s rank%s\n",
|
||||
((ch_conf >> 0) & 0xff) * 256,
|
||||
((ch_conf >> 19) & 1) ? 16 : 8,
|
||||
((ch_conf >> 17) & 1) ? "dual" : "single",
|
||||
((ch_conf >> 16) & 1) ? "" : ", selected");
|
||||
printk(BIOS_DEBUG, " DIMMB %d MB width x%d %s rank%s\n",
|
||||
((ch_conf >> 8) & 0xff) * 256,
|
||||
((ch_conf >> 20) & 1) ? 16 : 8,
|
||||
((ch_conf >> 18) & 1) ? "dual" : "single",
|
||||
((ch_conf >> 16) & 1) ? ", selected" : "");
|
||||
}
|
||||
}
|
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2010 Google Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef RAMINIT_H
|
||||
#define RAMINIT_H
|
||||
|
||||
void report_memory_config(void);
|
||||
|
||||
#endif /* RAMINIT_H */
|
@@ -1,112 +0,0 @@
|
||||
/*
|
||||
* This file is part of the coreboot project.
|
||||
*
|
||||
* Copyright (C) 2012 Google Inc.
|
||||
* Copyright (C) 2013 Sage Electronic Engineering, LLC.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <console/console.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <string.h>
|
||||
|
||||
#if IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_BD82X6X)
|
||||
#include <southbridge/intel/fsp_bd82x6x/pch.h>
|
||||
#elif IS_ENABLED(CONFIG_SOUTHBRIDGE_INTEL_FSP_I89XX)
|
||||
#include <southbridge/intel/fsp_i89xx/pch.h>
|
||||
#endif
|
||||
|
||||
#include <arch/io.h>
|
||||
#include "northbridge.h"
|
||||
|
||||
static void report_cpu_info(void)
|
||||
{
|
||||
struct cpuid_result cpuidr;
|
||||
u32 i, index;
|
||||
char cpu_string[50], *cpu_name = cpu_string; /* 48 bytes are reported */
|
||||
int vt, txt, aes;
|
||||
const char *mode[] = {"NOT ", ""};
|
||||
|
||||
index = 0x80000000;
|
||||
cpuidr = cpuid(index);
|
||||
if (cpuidr.eax < 0x80000004) {
|
||||
strcpy(cpu_string, "Platform info not available");
|
||||
} else {
|
||||
u32 *p = (u32*) cpu_string;
|
||||
for (i = 2; i <= 4; i++) {
|
||||
cpuidr = cpuid(index + i);
|
||||
*p++ = cpuidr.eax;
|
||||
*p++ = cpuidr.ebx;
|
||||
*p++ = cpuidr.ecx;
|
||||
*p++ = cpuidr.edx;
|
||||
}
|
||||
}
|
||||
/* Skip leading spaces in CPU name string */
|
||||
while (cpu_name[0] == ' ')
|
||||
cpu_name++;
|
||||
|
||||
cpuidr = cpuid(1);
|
||||
printk(BIOS_DEBUG, "CPU id(%x): %s\n", cpuidr.eax, cpu_name);
|
||||
aes = (cpuidr.ecx & (1 << 25)) ? 1 : 0;
|
||||
txt = (cpuidr.ecx & (1 << 6)) ? 1 : 0;
|
||||
vt = (cpuidr.ecx & (1 << 5)) ? 1 : 0;
|
||||
printk(BIOS_DEBUG, "AES %ssupported, TXT %ssupported, VT %ssupported\n",
|
||||
mode[aes], mode[txt], mode[vt]);
|
||||
}
|
||||
|
||||
/* The PCI id name match comes from Intel document 472178 */
|
||||
static struct {
|
||||
u16 dev_id;
|
||||
const char *dev_name;
|
||||
} pch_table [] = {
|
||||
{0x1E41, "Desktop Sample"},
|
||||
{0x1E42, "Mobile Sample"},
|
||||
{0x1E43, "SFF Sample"},
|
||||
{0x1E44, "Z77"},
|
||||
{0x1E45, "H71"},
|
||||
{0x1E46, "Z75"},
|
||||
{0x1E47, "Q77"},
|
||||
{0x1E48, "Q75"},
|
||||
{0x1E49, "B75"},
|
||||
{0x1E4A, "H77"},
|
||||
{0x1E53, "C216"},
|
||||
{0x1E55, "QM77"},
|
||||
{0x1E56, "QS77"},
|
||||
{0x1E58, "UM77"},
|
||||
{0x1E57, "HM77"},
|
||||
{0x1E59, "HM76"},
|
||||
{0x1E5D, "HM75"},
|
||||
{0x1E5E, "HM70"},
|
||||
{0x1E5F, "NM70"},
|
||||
};
|
||||
|
||||
static void report_pch_info(void)
|
||||
{
|
||||
int i;
|
||||
u16 dev_id = pci_read_config16(PCH_LPC_DEV, 2);
|
||||
|
||||
|
||||
const char *pch_type = "Unknown";
|
||||
for (i = 0; i < ARRAY_SIZE(pch_table); i++) {
|
||||
if (pch_table[i].dev_id == dev_id) {
|
||||
pch_type = pch_table[i].dev_name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
printk (BIOS_DEBUG, "PCH type: %s, device id: %x, rev id %x\n",
|
||||
pch_type, dev_id, pci_read_config8(PCH_LPC_DEV, 8));
|
||||
}
|
||||
|
||||
void report_platform_info(void)
|
||||
{
|
||||
report_cpu_info();
|
||||
report_pch_info();
|
||||
}
|
Reference in New Issue
Block a user