--- /dev/null
+# Patching coreboot+SeaBIOS+PXE+Linux for input over serial
+
+Instructions here are specifically tailored to the KGPE-D16, but should work
+for other boards with minor modifications, particularly to the PCI ID of the
+Ethernet controller used when building and installing iPXE.
+
+----
+
+Get the base ROM (no need to recompile most of it, but you can if you want). Consider making a backup.
+
+ # flashrom -p internal -r coreboot.rom
+
+Enable the VGA<->serial console, sercon, in SeaBIOS. 1016 is the decimal
+encoding of `0x3f8`, the port number for serial on traditional PC
+architectures.
+
+ # ./cbfstool coreboot.rom add-int -i 1016 -n etc/sercon-port
+
+Deduplicate duplicated character duplicates.
+
+ # ./cbfstool coreboot.rom add-int -i 0 -n etc/screen-and-debug
+
+----
+
+Get IPXE source code:
+
+ $ git clone git://git.ipxe.org/ipxe.git
+
+Patching IPXE to output purely over serial, bypassing weird VGA emulation, as per https://pelican.craoc.fr/coreboot.html#ipxe
+
+ diff --git a/src/config/console.h b/src/config/console.h
+ index 9f770d09..1f181177 100644
+ --- a/src/config/console.h
+ +++ b/src/config/console.h
+ @@ -22,9 +22,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+ *
+ */
+
+ -//#undef CONSOLE_PCBIOS /* Default BIOS console */
+ -//#undef CONSOLE_EFI /* Default EFI console */
+ -//#undef CONSOLE_LINUX /* Default Linux console */
+ +#undef CONSOLE_PCBIOS /* Default BIOS console */
+ +#undef CONSOLE_EFI /* Default EFI console */
+ +#undef CONSOLE_LINUX /* Default Linux console */
+
+ /*
+ * Additional console types
+ @@ -34,7 +34,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+ *
+ */
+
+ -//#define CONSOLE_SERIAL /* Serial port console */
+ +#define CONSOLE_SERIAL /* Serial port console */
+ //#define CONSOLE_FRAMEBUFFER /* Graphical framebuffer console */
+ //#define CONSOLE_SYSLOG /* Syslog console */
+ //#define CONSOLE_SYSLOGS /* Encrypted syslog console */
+
+Build IPXE:
+
+ $ make bin/808610d3.rom
+
+------------------
+
+Remove the existing IPXE rom and replace it with our patched one, 808610d3.rom. Name/build target corresponds to the vendor/device ID in PCI
+
+ # cbfstool coreboot.rom remove -n pci8086,10d3.rom
+ # cbfstool coreboot.rom add -f bin/808610d3.rom -n pci8086,10d3.rom -t raw
+
+------------------
+
+Flash it back:
+
+ # flashrom -p internal -w coreboot.rom