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 <[email protected]>

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



-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to