Yasha Cherikovsky (yasha.che3(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12438
-gerrit
commit 3f889c80fa7bb21e530b5f0562c6eaa07bc17bf8
Author: Yasha Cherikovsky <yasha.cherikovsky(a)gmail.com>
Date: Sat Nov 14 18:52:35 2015 +0200
coreinfo: Fix off-by-one in displayed month of year
According to C documentation, the range of tm_mon in struct tm is [0, 11].
Before the patch, the displayed month was indeed incorrect.
Change-Id: I9f95f1e978c45b3635e2edfe1ec496d7b0dec00a
Signed-off-by: Yasha Cherikovsky <yasha.che3(a)gmail.com>
---
payloads/coreinfo/coreinfo.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/payloads/coreinfo/coreinfo.c b/payloads/coreinfo/coreinfo.c
index 5137ce6..a383330 100644
--- a/payloads/coreinfo/coreinfo.c
+++ b/payloads/coreinfo/coreinfo.c
@@ -128,7 +128,7 @@ static void print_time_and_date(void)
rtc_read_clock(&tm);
mvwprintw(menuwin, 0, 57, "%02d/%02d/%04d - %02d:%02d:%02d",
- tm.tm_mon, tm.tm_mday, 1900 + tm.tm_year, tm.tm_hour,
+ tm.tm_mon + 1, tm.tm_mday, 1900 + tm.tm_year, tm.tm_hour,
tm.tm_min, tm.tm_sec);
}
#endif
David Guckian (david.guckian(a)intel.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12436
-gerrit
commit a941e22e6d80945daaf22572e426e4efb06a927f
Author: David Guckian <david.guckian(a)intel.com>
Date: Sat Nov 14 16:01:33 2015 +0000
intel/fsp_model_406dx: Load APs microcode in model_406dx_init
Load microcode to APs when performing model_406dx_init. The updated
fsp1_0 driver calls TempRamInit API with a dummy microcode, so FSP
will not handle the microcode load.
Change-Id: Ib75f860a34c84bf13c0c6c31ebed13e5787f365e
Signed-off-by: David Guckian <david.guckian(a)intel.com>
---
src/cpu/intel/fsp_model_406dx/model_406dx_init.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/cpu/intel/fsp_model_406dx/model_406dx_init.c b/src/cpu/intel/fsp_model_406dx/model_406dx_init.c
index b25c997..5482e74 100644
--- a/src/cpu/intel/fsp_model_406dx/model_406dx_init.c
+++ b/src/cpu/intel/fsp_model_406dx/model_406dx_init.c
@@ -22,6 +22,7 @@
#include <cpu/x86/mtrr.h>
#include <cpu/x86/msr.h>
#include <cpu/x86/lapic.h>
+#include <cpu/intel/microcode.h>
#include <cpu/x86/cache.h>
#include <cpu/x86/name.h>
#include "model_406dx.h"
@@ -168,6 +169,9 @@ static void model_406dx_init(struct device *cpu)
/* Turn on caching if we haven't already */
x86_enable_cache();
+ /* Load microcode */
+ intel_update_microcode_from_cbfs();
+
/* Clear out pending MCEs */
configure_mca();
Patrick Rudolph (siro(a)das-labor.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/11917
-gerrit
commit bdede31d2726294d08c64d4df761683c0fd55bf9
Author: Patrick Rudolph <siro(a)das-labor.org>
Date: Thu Oct 15 11:09:15 2015 +0200
nb/intel/sandybridge: start PEG link training
Issue observed:
The PCIe Root port shows up in GNU/Linux but no device.
Test system:
* Gigabyte GA-B75M-D3H (Intel Pentium CPU G2130)
* Lenovo T530 (Intel Core i5-3320M CPU)
Problem description:
The PEG Root port link training on Ivy Bridge needs to be started by hand.
(The PEG Root port on Sandy Bridge works out of the box.)
Problem solution:
The bits are set in early_init to meet PCIe reset timeout of 100msec.
The bits should be set in PCI device enable function, but this causes the
PCI enumeration to not detect the card, as it's still booting. Adding
a fixed delay of 100msec resolves this problem, but this would
increase boot time.
Tested with:
* Nvidia NVS 5400M (PCIe2)
* ATI Radeon HD4780 (PCIe2)
* Nvidia GeForce 8600 GT (PCIe1)
Untested:
* PCIe3 devices
Final test results:
The PEG device shows up under GNU/Linux and can be used without issues.
Change-Id: Id8cfc43e5c4630b0ac217d98bb857c3308e6015b
Signed-off-by: Patrick Rudolph <siro(a)das-labor.org>
---
src/northbridge/intel/sandybridge/early_init.c | 42 ++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/src/northbridge/intel/sandybridge/early_init.c b/src/northbridge/intel/sandybridge/early_init.c
index b3a829d..7e5ace6 100644
--- a/src/northbridge/intel/sandybridge/early_init.c
+++ b/src/northbridge/intel/sandybridge/early_init.c
@@ -148,6 +148,39 @@ static void sandybridge_setup_graphics(void)
MCHBAR32(0x5418) = reg32;
}
+static void start_peg_link_training(void)
+{
+ u32 tmp;
+ u32 deven;
+
+ /* skip on SandyBridge */
+ if ((pci_read_config16(PCI_DEV(0, 0, 0), PCI_DEVICE_ID) &
+ BASE_REV_MASK) != BASE_REV_IVB)
+ return;
+
+ deven = pci_read_config32(PCI_DEV(0, 0, 0), DEVEN);
+
+ if (deven & DEVEN_PEG10) {
+ tmp = pci_read_config32(PCI_DEV(0, 1, 0), 0xC24) & ~(1 << 16);
+ pci_write_config32(PCI_DEV(0, 1, 0), 0xC24, tmp | (1 << 5));
+ }
+
+ if (deven & DEVEN_PEG11) {
+ tmp = pci_read_config32(PCI_DEV(0, 1, 1), 0xC24) & ~(1 << 16);
+ pci_write_config32(PCI_DEV(0, 1, 1), 0xC24, tmp | (1 << 5));
+ }
+
+ if (deven & DEVEN_PEG12) {
+ tmp = pci_read_config32(PCI_DEV(0, 1, 2), 0xC24) & ~(1 << 16);
+ pci_write_config32(PCI_DEV(0, 1, 2), 0xC24, tmp | (1 << 5));
+ }
+
+ if (deven & DEVEN_PEG60) {
+ tmp = pci_read_config32(PCI_DEV(0, 6, 0), 0xC24) & ~(1 << 16);
+ pci_write_config32(PCI_DEV(0, 6, 0), 0xC24, tmp | (1 << 5));
+ }
+}
+
void sandybridge_early_initialization(int chipset_type)
{
u32 capid0_a;
@@ -174,6 +207,15 @@ void sandybridge_early_initialization(int chipset_type)
pci_write_config32(PCI_DEV(0, 0, 0), DEVEN, deven);
sandybridge_setup_graphics();
+
+ /* Write magic value to start PEG link training.
+ * This should be done in PCI device enumeration, but
+ * the PCIe specification requires to wait at least 100msec
+ * after reset for devices to come up.
+ * As we don't want to increase boot time, enable it early and
+ * assume the PEG is up as soon as PCI enumeration starts.
+ * TODO: use time stamps to ensure the timings are met */
+ start_peg_link_training();
}
void northbridge_romstage_finalize(int s3resume)
Marcin Wojciechowski (marcin.wojciechowski(a)intel.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12418
-gerrit
commit d9d6973948e1a736d96ad9de7ffa078b93d28de2
Author: Marcin Wojciechowski <marcin.wojciechowski(a)intel.com>
Date: Thu Nov 12 16:05:42 2015 +0100
fsp1_0: Update rangeley to revision POSTGOLD4
Alignment of Intel Firmware Support Package 1.0 Rangeley
header and source files to the revision: POSTGOLD4
Detail changelog can be found at http://www.intel.com/fsp
FSP release date September 24, 2015
Change-Id: If1a6f95aed3e9a60af9af8cf9cd466a560ef0fe2
Signed-off-by: Marcin Wojciechowski <marcin.wojciechowski(a)intel.com>
---
.../intel/fsp1_0/rangeley/include/fspguid.h | 69 +++++
.../intel/fsp1_0/rangeley/include/fspplatform.h | 3 +-
.../intel/fsp1_0/rangeley/include/fspsupport.h | 95 +++++++
.../intel/fsp1_0/rangeley/include/fsptypes.h | 7 +-
.../intel/fsp1_0/rangeley/include/fspvpd.h | 12 +-
.../intel/fsp1_0/rangeley/srx/fsp_support.c | 288 +++++++++++++++++++++
6 files changed, 467 insertions(+), 7 deletions(-)
diff --git a/src/vendorcode/intel/fsp1_0/rangeley/include/fspguid.h b/src/vendorcode/intel/fsp1_0/rangeley/include/fspguid.h
new file mode 100644
index 0000000..b9a6183
--- /dev/null
+++ b/src/vendorcode/intel/fsp1_0/rangeley/include/fspguid.h
@@ -0,0 +1,69 @@
+/** @file
+
+Copyright (C) 2014, Intel Corporation
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+
+**/
+
+#ifndef __FSP_GUID_H__
+#define __FSP_GUID_H__
+
+/**
+
+ FSP specific GUID HOB definitions
+
+ **/
+#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 } \
+ }
+
+#define FSP_BOOTLOADER_TEMPORARY_MEMORY_HOB_GUID \
+ { \
+ 0xbbcff46c, 0xc8d3, 0x4113, { 0x89, 0x85, 0xb9, 0xd4, 0xf3, 0xb3, 0xf6, 0x4e } \
+ }
+
+#define FSP_HOB_RESOURCE_OWNER_FSP_GUID \
+ { \
+ 0x69a79759, 0x1373, 0x4367, { 0xa6, 0xc4, 0xc7, 0xf5, 0x9e, 0xfd, 0x98, 0x6e } \
+ }
+
+#define FSP_HOB_RESOURCE_OWNER_TSEG_GUID \
+ { \
+ 0xd038747c, 0xd00c, 0x4980, { 0xb3, 0x19, 0x49, 0x01, 0x99, 0xa4, 0x7d, 0x55 } \
+ }
+
+#define FSP_HOB_RESOURCE_OWNER_GRAPHICS_GUID \
+ { \
+ 0x9c7c3aa7, 0x5332, 0x4917, { 0x82, 0xb9, 0x56, 0xa5, 0xf3, 0xe6, 0x2a, 0x07 } \
+ }
+
+#endif
diff --git a/src/vendorcode/intel/fsp1_0/rangeley/include/fspplatform.h b/src/vendorcode/intel/fsp1_0/rangeley/include/fspplatform.h
index ce479bf..c35dca0 100644
--- a/src/vendorcode/intel/fsp1_0/rangeley/include/fspplatform.h
+++ b/src/vendorcode/intel/fsp1_0/rangeley/include/fspplatform.h
@@ -1,6 +1,6 @@
/**
-Copyright (C) 2013, Intel Corporation
+Copyright (C) 2013 - 2015, Intel Corporation
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -74,6 +74,7 @@ typedef struct {
UINT8 tRTPmin; // 27 Minimum Internal Read to Precharge Command Delay Time (tRTPmin)
UINT8 UpperNibbleFortFAW; // 28 Upper Nibble for tFAW
UINT8 tFAWmin; // 29 Minimum Four Activate Window Delay Time (tFAWmin)
+ UINT8 SdramThermalRefreshOption; // 31 SdramThermalRefreshOption
UINT8 ModuleThermalSensor; // 32 ModuleThermalSensor
UINT8 SDRAMDeviceType; // 33 SDRAM Device Type
UINT8 tCKminFine; // 34 Fine Offset for SDRAM Minimum Cycle Time (tCKmin)
diff --git a/src/vendorcode/intel/fsp1_0/rangeley/include/fspsupport.h b/src/vendorcode/intel/fsp1_0/rangeley/include/fspsupport.h
new file mode 100644
index 0000000..dbbbf77
--- /dev/null
+++ b/src/vendorcode/intel/fsp1_0/rangeley/include/fspsupport.h
@@ -0,0 +1,95 @@
+/** @file
+
+Copyright (C) 2013 - 2014, Intel Corporation
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+
+**/
+
+#ifndef __FSP_SUPPORT_H__
+#define __FSP_SUPPORT_H__
+
+#include "fsptypes.h"
+#include "fspfv.h"
+#include "fspffs.h"
+#include "fspapi.h"
+#include "fsphob.h"
+#include "fspguid.h"
+#include "fspplatform.h"
+#include "fspinfoheader.h"
+#include "fspbootmode.h"
+#include "fspvpd.h"
+
+UINT32
+GetUsableLowMemTop (
+ CONST VOID *HobListPtr
+ );
+
+UINT64
+GetUsableHighMemTop (
+ CONST VOID *HobListPtr
+ );
+
+VOID *
+GetGuidHobDataBuffer (
+ CONST VOID *HobListPtr,
+ UINT32 *Length,
+ EFI_GUID *Guid
+ );
+
+VOID
+GetFspReservedMemoryFromGuid (
+ CONST VOID *HobListPtr,
+ EFI_PHYSICAL_ADDRESS *FspMemoryBase,
+ UINT64 *FspMemoryLength,
+ EFI_GUID *FspReservedMemoryGuid
+ );
+
+UINT32
+GetTsegReservedMemory (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+);
+
+UINT32
+GetFspReservedMemory (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+);
+
+VOID*
+GetFspNvsDataBuffer (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+ );
+
+VOID *
+GetBootloaderTempMemoryBuffer (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+ );
+
+
+#endif
diff --git a/src/vendorcode/intel/fsp1_0/rangeley/include/fsptypes.h b/src/vendorcode/intel/fsp1_0/rangeley/include/fsptypes.h
index 5912e01..da19250 100644
--- a/src/vendorcode/intel/fsp1_0/rangeley/include/fsptypes.h
+++ b/src/vendorcode/intel/fsp1_0/rangeley/include/fsptypes.h
@@ -100,13 +100,18 @@ typedef struct {
#define TRUE ((BOOLEAN)(1==1))
#define FALSE ((BOOLEAN)(0==1))
+static inline void DebugDeadLoop(void) {
+ for (;;);
+}
+
#define FSPAPI __attribute__((cdecl))
#define EFIAPI __attribute__((cdecl))
+#define _ASSERT(Expression) DebugDeadLoop()
#define ASSERT(Expression) \
do { \
if (!(Expression)) { \
- for (;;); \
+ _ASSERT (Expression); \
} \
} while (FALSE)
diff --git a/src/vendorcode/intel/fsp1_0/rangeley/include/fspvpd.h b/src/vendorcode/intel/fsp1_0/rangeley/include/fspvpd.h
index fba38a0..4ba1a28 100644
--- a/src/vendorcode/intel/fsp1_0/rangeley/include/fspvpd.h
+++ b/src/vendorcode/intel/fsp1_0/rangeley/include/fspvpd.h
@@ -1,6 +1,6 @@
/** @file
-Copyright (C) 2013-2014 Intel Corporation
+Copyright (C) 2015, Intel Corporation
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
@@ -50,7 +50,8 @@ typedef struct _UPD_DATA_REGION {
UINT8 PcdSpdBaseAddress_0_1; /* Offset 0x0026 */
UINT8 PcdSpdBaseAddress_1_0; /* Offset 0x0027 */
UINT8 PcdSpdBaseAddress_1_1; /* Offset 0x0028 */
- UINT8 UnusedUpdSpace1[7]; /* Offset 0x0029 */
+ UINT8 PcdExtendedTemperatureEnable; /* Offset 0x0029 */
+ UINT8 UnusedUpdSpace1[6]; /* Offset 0x002A */
UINT8 PcdEnableLan; /* Offset 0x0030 */
UINT8 PcdEnableSata2; /* Offset 0x0031 */
UINT8 PcdEnableSata3; /* Offset 0x0032 */
@@ -65,13 +66,14 @@ typedef struct _UPD_DATA_REGION {
UINT8 PcdPrintDebugMessages; /* Offset 0x0040 */
UINT8 PcdFastboot; /* Offset 0x0041 */
UINT8 PcdEccSupport; /* Offset 0x0042 */
- UINT8 PcdCustomerRevision[32]; /* Offset 0x0043 */
- UINT8 UnusedUpdSpace3[13]; /* Offset 0x0063 */
+ UINT8 PcdSerialPortBaudRate; /* Offset 0x0043 */
+ UINT8 PcdCustomerRevision[32]; /* Offset 0x0044 */
+ UINT8 UnusedUpdSpace3[12]; /* Offset 0x0064 */
UINT16 PcdRegionTerminator; /* Offset 0x0070 */
} UPD_DATA_REGION;
#define VPD_IMAGE_ID 0x562D474E524E5641 /* 'AVNRNG-V' */
-#define VPD_IMAGE_REV 0x00000102
+#define VPD_IMAGE_REV 0x00000140
typedef struct _VPD_DATA_REGION {
UINT64 PcdVpdRegionSign; /* Offset 0x0000 */
diff --git a/src/vendorcode/intel/fsp1_0/rangeley/srx/fsp_support.c b/src/vendorcode/intel/fsp1_0/rangeley/srx/fsp_support.c
new file mode 100644
index 0000000..9f15b3e
--- /dev/null
+++ b/src/vendorcode/intel/fsp1_0/rangeley/srx/fsp_support.c
@@ -0,0 +1,288 @@
+/** @file
+
+Copyright (C) 2013 - 2014, Intel Corporation
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGE.
+
+**/
+
+#include <types.h>
+#include <string.h>
+#include "fspsupport.h"
+
+/**
+ This function retrieves the top of usable low memory.
+
+ @param HobListPtr A HOB list pointer.
+
+ @retval Usable low memory top.
+
+**/
+UINT32
+GetUsableLowMemTop (
+ CONST VOID *HobStart
+)
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ UINT32 MemLen;
+ /*
+ * Get the HOB list for processing
+ */
+ Hob.Raw = (VOID *)HobStart;
+
+ /*
+ * Collect memory ranges
+ */
+ MemLen = 0x100000;
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
+ if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) {
+ /*
+ * Need memory above 1MB to be collected here
+ */
+ if (Hob.ResourceDescriptor->PhysicalStart >= 0x100000 &&
+ Hob.ResourceDescriptor->PhysicalStart < (EFI_PHYSICAL_ADDRESS) 0x100000000) {
+ MemLen += (UINT32) (Hob.ResourceDescriptor->ResourceLength);
+ }
+ }
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ return MemLen;
+}
+
+/**
+ This function retrieves the top of usable high memory.
+
+ @param HobListPtr A HOB list pointer.
+
+ @retval Usable high memory top.
+
+**/
+UINT64
+GetUsableHighMemTop (
+ CONST VOID *HobStart
+)
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ UINT64 MemTop;
+ /*
+ * Get the HOB list for processing
+ */
+ Hob.Raw = (VOID *)HobStart;
+
+ /*
+ * Collect memory ranges
+ */
+ MemTop = 0x100000000;
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
+ if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) {
+ /*
+ * Need memory above 1MB to be collected here
+ */
+ if (Hob.ResourceDescriptor->PhysicalStart >= (EFI_PHYSICAL_ADDRESS) 0x100000000) {
+ MemTop += (UINT32) (Hob.ResourceDescriptor->ResourceLength);
+ }
+ }
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+
+ return MemTop;
+}
+
+/**
+ This function retrieves a special reserved memory region.
+
+ @param HobListPtr A HOB list pointer.
+ @param Length A pointer to the GUID HOB data buffer length. If the GUID HOB is
+ located, the length will be updated.
+ @param OwnerGuid A pointer to the owner guild.
+ @retval Reserved region start address. 0 if this region does not exist.
+
+**/
+VOID
+GetFspReservedMemoryFromGuid (
+ CONST VOID *HobListPtr,
+ EFI_PHYSICAL_ADDRESS *Base,
+ UINT64 *Length,
+ EFI_GUID *OwnerGuid
+)
+{
+ EFI_PEI_HOB_POINTERS Hob;
+
+ /*
+ * Get the HOB list for processing
+ */
+ Hob.Raw = (VOID *)HobListPtr;
+
+ /*
+ * Collect memory ranges
+ */
+ while (!END_OF_HOB_LIST (Hob)) {
+ if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
+ if (Hob.ResourceDescriptor->ResourceType == EFI_RESOURCE_MEMORY_RESERVED) {
+ if (CompareGuid(&Hob.ResourceDescriptor->Owner, OwnerGuid)) {
+ *Base = (EFI_PHYSICAL_ADDRESS) (Hob.ResourceDescriptor->PhysicalStart);
+ *Length = (UINT64) (Hob.ResourceDescriptor->ResourceLength);
+ break;
+ }
+ }
+ }
+ Hob.Raw = GET_NEXT_HOB (Hob);
+ }
+}
+
+/**
+ This function retrieves the TSEG reserved normal memory.
+
+ @param HobListPtr A HOB list pointer.
+ @param Length A pointer to the TSEG reserved memory length buffer. If the GUID HOB is
+ located, the length will be updated.
+ @param Guid A pointer to owner HOB GUID.
+ @retval NULL Failed to find the TSEG reserved memory.
+ @retval others TSEG reserved memory base.
+
+**/
+UINT32
+GetTsegReservedMemory (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+)
+{
+ const EFI_GUID TsegOwnerHobGuid = FSP_HOB_RESOURCE_OWNER_TSEG_GUID;
+ UINT64 Length64 = 0;
+ EFI_PHYSICAL_ADDRESS Base = 0;
+
+ GetFspReservedMemoryFromGuid (HobListPtr, &Base, &Length64, (EFI_GUID *)&TsegOwnerHobGuid);
+ if ((Length != NULL) && (Base != 0)) {
+ *Length = (UINT32)Length64;
+ }
+ return (UINT32)Base;
+}
+
+/**
+ This function retrieves the FSP reserved normal memory.
+
+ @param HobListPtr A HOB list pointer.
+ @param Length A pointer to the FSP reserved memory length buffer. If the GUID HOB is
+ located, the length will be updated.
+ @param Guid A pointer to owner HOB GUID.
+ @retval NULL Failed to find the FSP reserved memory.
+ @retval others FSP reserved memory base.
+
+**/
+UINT32
+GetFspReservedMemory (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+)
+{
+ const EFI_GUID FspOwnerHobGuid = FSP_HOB_RESOURCE_OWNER_FSP_GUID;
+ UINT64 Length64 = 0;
+ EFI_PHYSICAL_ADDRESS Base = 0;
+
+ GetFspReservedMemoryFromGuid (HobListPtr, &Base, &Length64, (EFI_GUID *)&FspOwnerHobGuid);
+ if ((Length != NULL) && (Base != 0)) {
+ *Length = (UINT32)Length64;
+ }
+ return (UINT32)Base;
+}
+
+
+/**
+ This function retrieves a GUIDed HOB data buffer and size.
+
+ @param HobListPtr A HOB list pointer.
+ @param Length A pointer to the GUID HOB data buffer length. If the
+ GUID HOB is located, the length will be updated.
+ @param Guid A pointer to HOB GUID.
+ @retval NULL Failed to find the GUID HOB.
+ @retval others GUID HOB data buffer pointer.
+
+**/
+VOID *
+GetGuidHobDataBuffer (
+ CONST VOID *HobListPtr,
+ UINT32 *Length,
+ EFI_GUID *Guid
+)
+{
+ UINT8 *GuidHob;
+
+ /* FSP NVS DATA HOB */
+ GuidHob = GetNextGuidHob(Guid, HobListPtr);
+ if (GuidHob == NULL) {
+ return NULL;
+ } else {
+ if (Length) {
+ *Length = GET_GUID_HOB_DATA_SIZE (GuidHob);
+ }
+ return GET_GUID_HOB_DATA (GuidHob);
+ }
+}
+
+/**
+ This function retrieves FSP Non-volatile Storage HOB buffer and size.
+
+ @param HobListPtr A HOB list pointer.
+ @param Length A pointer to the NVS data buffer length. If the FSP NVS
+ HOB is located, the length will be updated.
+ @retval NULL Failed to find the NVS HOB.
+ @retval others FSP NVS data buffer pointer.
+
+**/
+VOID *
+GetFspNvsDataBuffer (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+)
+{
+ const EFI_GUID FspNvsHobGuid = FSP_NON_VOLATILE_STORAGE_HOB_GUID;
+ return GetGuidHobDataBuffer (HobListPtr, Length, (EFI_GUID *)&FspNvsHobGuid);
+}
+
+
+/**
+ This function retrieves Bootloader temporary stack buffer and size.
+
+ @param HobListPtr A HOB list pointer.
+ @param Length A pointer to the Bootloader temporary stack length.
+ If the HOB is located, the length will be updated.
+ @retval NULL Failed to find the Bootloader temporary stack HOB.
+ @retval others Bootloader temporary stackbuffer pointer.
+
+**/
+VOID *
+GetBootloaderTempMemoryBuffer (
+ CONST VOID *HobListPtr,
+ UINT32 *Length
+)
+{
+ const EFI_GUID FspBootloaderTemporaryMemoryHobGuid = FSP_BOOTLOADER_TEMPORARY_MEMORY_HOB_GUID;
+ return GetGuidHobDataBuffer (HobListPtr, Length, (EFI_GUID *)&FspBootloaderTemporaryMemoryHobGuid);
+}
Zheng Bao (zheng.bao(a)amd.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/12331
-gerrit
commit 2cb9277c94d003c579c68bc7cadc4ae4c4f598be
Author: zbao <fishbaozi(a)gmail.com>
Date: Thu Nov 5 15:33:33 2015 +0800
Makefile: Set HOSTCC as gcc or cc respectively
The HOSTCC should be set in .xcompile, which tests the existence of gcc
and cc. But the .xcompile has to be included after kconfig/Makefile. So
building util/kconfig uses the seperated HOSTCC definition above it,
instead of the one in .xcompile.
For the system which clang is the default host compiler, gcc is not
installed by default. In that case, we need to set HOSTCC as cc.
Change-Id: I1e51a37c4426e2c97d36a31f26a18ab4b0d0608d
Signed-off-by: Zheng Bao <fishbaozi(a)gmail.com>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 421e919..d108654 100644
--- a/Makefile
+++ b/Makefile
@@ -79,7 +79,7 @@ endif
# Disable implicit/built-in rules to make Makefile errors fail fast.
.SUFFIXES:
-HOSTCC := gcc
+HOSTCC := $(if $(shell type gcc 2>/dev/null), gcc, cc)
HOSTCXX = g++
HOSTCFLAGS := -g
HOSTCXXFLAGS := -g