Hi, this is for testing. Works for me with seabios. First optimize coreboot for your board, to get some space (remove microcode updates or sth, we need about 60 KB). Sorry haven't checked latest libpayload changes, so something might not work. I will write a blog post about this tomorrow.
Thanks, Tadas Slotkus
This one is not bad for triggering another payload (flashrom) via key press or console input. Unfortunately it works only with PS/2 keyboard.
Signed-off-by: Tadas Slotkus devtadas@gmail.com
diff --git a/src/boot/hardwaremain.c b/src/boot/hardwaremain.c index 3d15b55..7726afd 100644 --- a/src/boot/hardwaremain.c +++ b/src/boot/hardwaremain.c @@ -41,6 +41,14 @@ it with the version available from LANL. #if CONFIG_WRITE_HIGH_TABLES #include <cbmem.h> #endif +#include <arch/io.h> + +int keyboard_havechar(void); +int keyboard_havechar(void) +{ + unsigned char c = inb(0x64); + return (c == 0xFF) ? 0 : c & 1; +}
/** * @brief Main function of the RAM part of coreboot. @@ -102,7 +110,20 @@ void hardwaremain(int boot_complete) * write our configuration tables. */ lb_mem = write_tables(); - cbfs_load_payload(lb_mem, CONFIG_CBFS_PREFIX "/payload"); + + /* This is for PS/2 keyboard spurious scancodes */ + int i; + for (i = 0; i < 50; i++){ + while (keyboard_havechar()) + inb(0x60); + mdelay(10); + } + /* Now wait some time for real key press */ + mdelay(300); + if(console_tst_byte() || keyboard_havechar()) + cbfs_load_payload(lb_mem, CONFIG_CBFS_PREFIX "/flashrom"); + else + cbfs_load_payload(lb_mem, CONFIG_CBFS_PREFIX "/payload"); printk(BIOS_ERR, "Boot failed.\n"); }