[coreboot-gerrit] New patch to review for coreboot: hardwaremain: Move init_timer() call to before console init

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Mon Jun 29 22:11:22 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10698

-gerrit

commit 9e3c80c8b1c7fceb78411f7346ab40ae2fa903f0
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Thu Jun 4 08:42:48 2015 -0700

    hardwaremain: Move init_timer() call to before console init
    
    The 8250 MMIO uart driver calls udelay, and if that is the first
    call then it will also call printk in init_timer() which can result
    in a deadlock trying to acquire the console lock.
    
    There are a few options to prevent this:
    1) remove the printk in init_timer which removes a useful debug message
    2) change the udelay() to cpu_relax() in uart8250mem.c
    3- move the init_timer() call in ramstage main() to be called earlier
    
    Since hardwaremain.c:main() already has an explicit call to init_timer()
    on x86 it is an easy change to move this to happen before the console
    is initialized.
    
    BUG=chrome-os-partner:40857
    BRANCH=none
    TEST=boot on glados with serial output through ramstage
    
    Change-Id: I8a8d8cccdd0b53de9de44600076bfad75e4f5514
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 744610f72628a944582925933b286f65bde630d9
    Original-Change-Id: Ic1fdafaea5541c6d7b1bb6f15399c759f484aa74
    Original-Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/275157
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/lib/hardwaremain.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c
index 56f3f29..b3c0c35 100644
--- a/src/lib/hardwaremain.c
+++ b/src/lib/hardwaremain.c
@@ -432,6 +432,11 @@ static void boot_state_schedule_static_entries(void)
 
 void main(void)
 {
+	/* TODO: Understand why this is here and move to arch/platform code. */
+	/* For MMIO UART this needs to be called before any other printk. */
+	if (IS_ENABLED(CONFIG_ARCH_X86))
+		init_timer();
+
 	/* console_init() MUST PRECEDE ALL printk()! Additionally, ensure
 	 * it is the very first thing done in ramstage.*/
 	console_init();
@@ -463,10 +468,6 @@ void main(void)
 	/* Schedule the static boot state entries. */
 	boot_state_schedule_static_entries();
 
-	/* TODO: Understand why this is here and move to arch/platform code. */
-	if (IS_ENABLED(CONFIG_ARCH_X86))
-		init_timer();
-
 	bs_walk_state_machine();
 
 	die("Boot state machine failure.\n");



More information about the coreboot-gerrit mailing list