I dusted off some TPM patches I had worked on earlier in the year.
Mostly just code movement, but the last patch I think helps simplify
Do they look okay to you?
Kevin O'Connor (6):
tpm: Add comment banners to tcg.c separating major parts of spec
tpm: Don't call tpm_set_failure() from tpm12_get_capability()
tpm: Move code around in tcgbios.c to keep like code together
acpi: Generalize find_fadt() and find_tcpa_by_rsdp() into
tpm: Don't call tpm_build_and_send_cmd() from tpm20_stirrandom()
tpm: Rework tpm_build_and_send_cmd() into tpm_simple_cmd()
src/fw/biostables.c | 18 +-
src/std/acpi.h | 7 -
src/std/tcg.h | 199 +++++++++--------
src/tcgbios.c | 611 ++++++++++++++++++++++------------------------------
src/util.h | 1 +
5 files changed, 369 insertions(+), 467 deletions(-)
Next round of serial console patches, Still not ready to merge.
Headline feature of this version is split mode (i.e. output on both vga
and serial). Have a initial working implementation now, logic is
simliar to the vgabios timer hook (as suggested by Kevin).
Also changed the output logic, down to a one-cell buffer (char+attr) for
output. Cursor updates are simply written to BDA now, with the actual
move being done lazily when printing the next character or checking for
keyboard input. That is especially useful for splitmode as we can
simply skip the cursor position updates and let the vgabios do them
* compile time (CONFIG_*) option.
* input handling cleanups.
* implement missing int10h functions.
* more testing.
Gerd Hoffmann (5):
std: add cp437 to unicode map
kbd: make enqueue_key public, add ascii_to_keycode
paravirt: read QEMU_CFG_NOGRAPHIC, store in etc/sercon-enable romfile
add serial console support
[wip] sercon: initial split-output implementation
Makefile | 7 +-
src/clock.c | 1 +
src/fw/paravirt.c | 2 +
src/kbd.c | 17 +-
src/misc.c | 2 +
src/optionroms.c | 9 +-
src/romlayout.S | 39 ++++
src/sercon.c | 621 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/std/cp437.c | 275 ++++++++++++++++++++++++
src/std/cp437.h | 1 +
src/util.h | 5 +
11 files changed, 974 insertions(+), 5 deletions(-)
create mode 100644 src/sercon.c
create mode 100644 src/std/cp437.c
create mode 100644 src/std/cp437.h
* don't move CPU counting around, leave it as is and
consolidate apic_id accounting only
* add and use qemu_*_present_cpus_count() helpers to init/get boot
cpus count at boot time and only qemu_get_present_cpus_count()
at resume time
* fix S3 wakeup stuck in resume vector
* If cpu were hotplugged during smp_scan, report it to user
instead of silently hanging if it came online while smp_scan()
waits for APs
* rebase on top of current master /smp_scan() changes/
* merge handle_x2apic() into apic_id_init()
* move out max-cpus check out of mptable_setup()
* factor out CPU counting/apic ID detection in separate function
* return back accidentially deleted debug message with APIC ID
* drop unused code in smp_setup()
According to SDM, if CPUs have APIC ID more than 254
firmware should pass control to OS in x2APIC mode.
This series adds x2APIC bootstrap initialization.
Works fine with not yet rebased on master QEMU side of x2APIC support:
Rebased variant probably will be sent next week.
S3 wakeup works as expected if linux guest is running with IRQ remapping enabled.
However it seems that kernel is buggy with IRQ remapping disabled as kernel
disables CPUs with APIC ID > 254 and on resume from S3 hangs somewere after
getting control from Seabios.
Igor Mammedov (4):
paravirt: disable legacy bios tables in case of more than 255 CPUs
error out if present cpus count changed during SMP bringup
add helpers to read etc/boot-cpus at resume time
support booting with more than 255 CPUs
Kevin O'Connor (1):
smp: consolidate CPU APIC ID detection and accounting
src/fw/paravirt.h | 3 +++
src/x86.h | 1 +
src/fw/paravirt.c | 44 +++++++++++++++++++++++++++++++++++--
src/fw/smp.c | 65 ++++++++++++++++++++++++++++++++++++++-----------------
4 files changed, 91 insertions(+), 22 deletions(-)
[Please find the unmangled patch attached. I have no idea how to turn
off line wrapping in Mozilla Thunderbird.]
Currently, even with `etc/threads` set to 2 in CBFS, the boot splash is
only shown for a short period, while SeaBIOS detects the hard disk on
the ASRock E350M1, which takes 10 seconds with this particular hard
So move the call to wait for the threads to finish further up, so it is
before the instruction to disable the boot splash.
On the ASRock E350M1 the boot splash is shown the whole time now. Note,
sometimes the GRUB menu from the MBR is not shown, and boot splash can
still be seen. The screen only changes, once the Linux kernel boots.
This seems to be a GRUB issue though .
Suggested-by: Kevin O'Connor <kevin(a)koconnor.net>
Signed-off-by: Paul Menzel <pmenzel(a)molgen.mpg.de>
src/boot.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/boot.c b/src/boot.c
index 706b7df..af3c627 100644
@@ -468,6 +468,7 @@ interactive_bootmenu(void)
u32 menutime = romfile_loadint("etc/boot-menu-wait",
int scan_code = get_keystroke(menutime);
if (scan_code != menukey)
@@ -476,7 +477,6 @@ interactive_bootmenu(void)
printf("Select boot device:\n\n");
// Show menu items
int maxmenu = 0;
I can see a lot of work has been done already on the tpm implementation in SeaBIOS.
Can you update me on the status of this? Should I still consider this to be work in progress or is this close to a stage where it can actually be used in a production level project?
5481 SM Schijndel
T : +31-(0)73-594 46 64
E : wvervoorn(a)eltan.com
W : http://www.eltan.com
"THIS MESSAGE CONTAINS CONFIDENTIAL INFORMATION. UNLESS YOU ARE THE INTENDED RECIPIENT OF THIS MESSAGE, ANY USE OF THIS MESSAGE IS STRICTLY PROHIBITED. IF YOU HAVE RECEIVED THIS MESSAGE IN ERROR, PLEASE IMMEDIATELY NOTIFY THE SENDER BY TELEPHONE +31-(0)73-5944664 OR REPLY EMAIL, AND IMMEDIATELY DELETE THIS MESSAGE AND ALL COPIES."
> > AFAIK latest seabios already supports DMA.
> > It's easy to add more config options for seabios
> > if you are so inclined.
> Yes, I tried that, the fw_cfg overhead in SeaBios/linuxboot optrom is
> already not a big issue for us. However, there are still some other
> code in SeaBIOS needs to be investigated.
Also a few suggestions:
* Try the seabios master branch. There have been some improvements
recently which are not in the 1.9 release.
* Use a stripped down config. When booting a kernel directly you
don't need storage and usb drivers, also no keyboard. That all
reduces init time.
* Initializing all pci devices (placing bars in address space and
programming them) can probably be skipped and left to the linux
kernel to handle. But when trying take care that the effect might
be that we shift just startup time from seabios to linux kernel,
the placement needs to happen somewhere after all.
* When discussing these things add the seabios list
(seabios(a)seabios.org) to cc: Added the list now.