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"); }