the following patch was just integrated into master:
commit e29e2ff8e8fb919c1074e3d31076f83b0a1aac45
Author: Hung-Te Lin <hungte(a)chromium.org>
Date: Fri Jan 18 16:50:25 2013 +0800
Include byteorder.h for the definition of ntohl in romstage.c
A fix to eliminate warnings when building romstage files with ChromeOS
compilers
Change-Id: Ia5d7bbdde3aa3439fd493f5795f2cc2bf4c4c187
Signed-off-by: Hung-Te Lin <hungte(a)chromium.org>
Reviewed-on: http://review.coreboot.org/2781
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich(a)gmail.com>
Build-Tested: build bot (Jenkins) at Tue Mar 19 02:42:29 2013, giving +1
Reviewed-By: Ronald G. Minnich <rminnich(a)gmail.com> at Tue Mar 19 05:26:28 2013, giving +2
See http://review.coreboot.org/2781 for details.
-gerrit
the following patch was just integrated into master:
commit 8c20399a42a6bb76f537042b4d7ba725ac78f10c
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Thu Jan 17 11:13:46 2013 -0600
haswell: wait 10ms after INIT IPI
There should be a fixed 10ms wait after sending an INIT IPI. The
previous implementation was just waiting up to 10ms for the IPI to
complete the send. That is not correct. The 10ms is unconditional
according to the documentation. No ill effects were observed with the
previous behavior, but it's important to follow the documentation.
Change-Id: Ib31d49ac74808f6eb512310e9f54a8f4abc3bfd7
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Reviewed-on: http://review.coreboot.org/2780
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich(a)gmail.com>
Build-Tested: build bot (Jenkins) at Tue Mar 19 02:31:25 2013, giving +1
Reviewed-By: Ronald G. Minnich <rminnich(a)gmail.com> at Tue Mar 19 05:26:12 2013, giving +2
See http://review.coreboot.org/2780 for details.
-gerrit
the following patch was just integrated into master:
commit 305b1f0d30b68c310d4dfa7e1a5f432769a65b31
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Tue Jan 15 08:27:05 2013 -0600
haswell: Parallel AP bringup
This patch parallelizes the AP startup for Haswell-based devices. It
does not touch the generic secondary startup code. Instead it provides
its own MP support matching up with the Haswell BWG. It seemed to be too
much trouble to support the old startup way and this new way. Because of
that parallel loading is the only thing supported.
A couple of things to note:
1. Micrcode needs to be loaded twice. Once before MTRR and caching is
enabled. And a second time after SMM relocation.
2. The sipi_vector is entirely self-contained. Once it is loaded and
written back to RAM the APs do not access memory outside of the
sipi_vector load location until a sync up in ramstage.
3. SMM relocation is kicked off by an IPI to self w/ SMI set as the
destination mode.
The following are timings from cbmem with dev mode disabled and recovery mode
enabled to boot directly into the kernel. This was done on the
baskingridge CRB with a 4-core 8-thread CPU and 2 DIMMs 1GiB each. The
kernel has console enabled on the serial port. Entry 70 is the device
initialization, and that is where the APs are brought up. With these two
examples it looks to shave off ~200 ms of boot time.
Before:
1:55,382
2:57,606 (2,223)
3:3,108,983 (3,051,377)
4:3,110,084 (1,101)
8:3,113,109 (3,024)
9:3,156,694 (43,585)
10:3,156,815 (120)
30:3,157,110 (295)
40:3,158,180 (1,069)
50:3,160,157 (1,977)
60:3,160,366 (208)
70:4,221,044 (1,060,677)
75:4,221,062 (18)
80:4,227,185 (6,122)
90:4,227,669 (484)
99:4,265,596 (37,927)
1000:4,267,822 (2,225)
1001:4,268,507 (685)
1002:4,268,780 (272)
1003:4,398,676 (129,896)
1004:4,398,979 (303)
1100:7,477,601 (3,078,621)
1101:7,480,210 (2,608)
After:
1:49,518
2:51,778 (2,259)
3:3,081,186 (3,029,407)
4:3,082,252 (1,066)
8:3,085,137 (2,884)
9:3,130,339 (45,202)
10:3,130,518 (178)
30:3,130,544 (26)
40:3,131,125 (580)
50:3,133,023 (1,897)
60:3,133,278 (255)
70:4,009,259 (875,980)
75:4,009,273 (13)
80:4,015,947 (6,674)
90:4,016,430 (482)
99:4,056,265 (39,835)
1000:4,058,492 (2,226)
1001:4,059,176 (684)
1002:4,059,450 (273)
1003:4,189,333 (129,883)
1004:4,189,770 (436)
1100:7,262,358 (3,072,588)
1101:7,263,926 (1,567)
Booted the baskingridge board as noted above. Also analyzed serial
messages with pcserial enabled.
Change-Id: Ifedc7f787953647c228b11afdb725686e38c4098
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Reviewed-on: http://review.coreboot.org/2779
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich(a)gmail.com>
Build-Tested: build bot (Jenkins) at Tue Mar 19 02:20:03 2013, giving +1
Reviewed-By: Ronald G. Minnich <rminnich(a)gmail.com> at Tue Mar 19 05:15:22 2013, giving +2
See http://review.coreboot.org/2779 for details.
-gerrit
the following patch was just integrated into master:
commit 98ffb426f40593f930388c006f8058c199defff4
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Tue Jan 15 15:15:32 2013 -0600
intel microcode: split up microcode loading stages
This patch only applies to CONFIG_MICROCODE_IN_CBFS. The intel microcode
update routine would always walk the CBFS for the microcode file. Then
it would loop through the whole file looking for a match then load the
microcode. This process was maintained for intel_update_microcode_from_cbfs(),
however 2 new functions were exported:
1. const void *intel_microcode_find(void)
2. void intel_microcode_load_unlocked(const void *microcode_patch)
The first locates a matching microcode while the second loads that
mircocode. These new functions can then be used to cache the found
microcode blob w/o having to re-walk the CBFS.
Booted baskingridge board to Linux and noted that all microcode
revisions match on all the CPUs.
Change-Id: Ifde3f3e5c100911c4f984dd56d36664a8acdf7d5
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
Reviewed-on: http://review.coreboot.org/2778
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich(a)gmail.com>
Build-Tested: build bot (Jenkins) at Tue Mar 19 02:09:13 2013, giving +1
Reviewed-By: Ronald G. Minnich <rminnich(a)gmail.com> at Tue Mar 19 05:11:50 2013, giving +2
See http://review.coreboot.org/2778 for details.
-gerrit
Stefan Reinauer (stefan.reinauer(a)coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2822
-gerrit
commit 0f23c9c1655b2adc7c7a248c7fa4942683d78060
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Fri Mar 1 17:00:39 2013 -0600
rmodule: correct ordering of bss clearing
This patch fixes an issue for rmodules which are copied into memory
at the final load/link location. If the bss section is cleared for
that rmodule the relocation could not take place properly since the
relocation information was wiped by act of clearing the bss. The
reason is that the relocation information resides at the same
address as the bss section. Correct this issue by performing the
relocation before clearing the bss.
Change-Id: I01a124a8201321a9eaf6144c743fa818c0f004b4
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
---
src/lib/rmodule.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/lib/rmodule.c b/src/lib/rmodule.c
index 60c89f0..d36f9f3 100644
--- a/src/lib/rmodule.c
+++ b/src/lib/rmodule.c
@@ -241,14 +241,18 @@ static int __rmodule_load(void *base, struct rmodule *module, int clear_bss)
* In order to load the module at a given address, the following steps
* take place:
* 1. Copy payload to base address.
- * 2. Clear the bss segment.
- * 3. Adjust relocations within the module to new base address.
+ * 2. Adjust relocations within the module to new base address.
+ * 3. Clear the bss segment last since the relocations live where
+ * the bss is. If an rmodule is being loaded from its load
+ * address the relocations need to be processed before the bss.
*/
module->location = base;
rmodule_copy_payload(module);
+ if (rmodule_relocate(module))
+ return -1;
if (clear_bss)
rmodule_clear_bss(module);
- return rmodule_relocate(module);
+ return 0;
}
int rmodule_load(void *base, struct rmodule *module)
Stefan Reinauer (stefan.reinauer(a)coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2820
-gerrit
commit b2f33e24bf34b5c86b63b5d3a4206af8c541e3d5
Author: Aaron Durbin <adurbin(a)chromium.org>
Date: Wed Mar 13 14:13:14 2013 -0500
lynxpoint: fix build failure on non-LP boards
There were definitions being used from lp_gpio.h in
pmutil.c that caused a build failure for non-LP boards
since lp_gpio.h was not being included. We could potentially
fix this by including lp_gpio.h unconditionally, but that adds
the risk of re-defining macros previously defined from other
includes. Instead just move the 2 definitions required directly
in pmutil.c.
Change-Id: I363441839353c6ce6bb56d346b87710332763cf5
Signed-off-by: Aaron Durbin <adurbin(a)chromium.org>
---
src/southbridge/intel/lynxpoint/lp_gpio.h | 2 --
src/southbridge/intel/lynxpoint/pmutil.c | 6 ++++++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/southbridge/intel/lynxpoint/lp_gpio.h b/src/southbridge/intel/lynxpoint/lp_gpio.h
index 067b6e2..9666adc 100644
--- a/src/southbridge/intel/lynxpoint/lp_gpio.h
+++ b/src/southbridge/intel/lynxpoint/lp_gpio.h
@@ -28,8 +28,6 @@
#define GPIO_SER_BLINK_CS 0x20
#define GPIO_SER_BLINK_DATA 0x24
#define GPIO_ROUTE(set) (0x30 + ((set) * 4))
-#define GPIO_ALT_GPI_SMI_STS 0x50
-#define GPIO_ALT_GPI_SMI_EN 0x54
#define GPIO_RESET(set) (0x60 + ((set) * 4))
#define GPIO_GLOBAL_CONFIG 0x7c
#define GPIO_IRQ_IS(set) (0x80 + ((set) * 4))
diff --git a/src/southbridge/intel/lynxpoint/pmutil.c b/src/southbridge/intel/lynxpoint/pmutil.c
index 64fc585..a103667 100644
--- a/src/southbridge/intel/lynxpoint/pmutil.c
+++ b/src/southbridge/intel/lynxpoint/pmutil.c
@@ -40,6 +40,12 @@
#include "lp_gpio.h"
#endif
+/* These defines are here to handle the LP variant code dynamically. If these
+ * values are defined in lp_gpio.h but a non-LP board is being built, the build
+ * will fail. */
+#define GPIO_ALT_GPI_SMI_STS 0x50
+#define GPIO_ALT_GPI_SMI_EN 0x54
+
/* Print status bits with descriptive names */
static void print_status_bits(u32 status, const char *bit_names[])
{