From patchwork Wed Dec 12 17:47:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: new pc-bios/bios.bin breaks freebsd booting Date: Wed, 12 Dec 2012 07:47:58 -0000 From: Paolo Bonzini X-Patchwork-Id: 205606 Message-Id: <50C8C34E.9080409@redhat.com> To: Luigi Rizzo Cc: qemu-devel@nongnu.org, kraxel@redhat.com Il 12/12/2012 17:04, Luigi Rizzo ha scritto: > I am not sure if it has been reported already but this commit > > http://git.qemu.org/?p=qemu.git;a=commitdiff;h=d7a51dbbaa70677846453f8c961590913052dd86 > > (replacing pc-bios/bios.bin with a newer version) > breaks booting of FreeBSD on recent qemu (starting roughly with > qemu-1.3.0-rc2). > > Using a FreeBSD host, and a FreeBSD guest, > the qemu thread runs at 100% and the console is stuck > after the 'pci0' probe: > > > ... > hpet0: iomem 0xfed00000-0xfed003ff on acpi0 > > Timecounter "HPET" frequency 100000000 Hz quality 950 > > Timecounter "ACPI-fast" frequency 3579545 Hz quality 900 > > acpi_timer0: <24-bit timer at 3.579545MHz> port 0xb008-0xb00b on acpi0 > > pcib0: port 0xcf8-0xcff on acpi0 > > pci0: on pcib0 > > Reverting the bios fixes things. > I wonder if it isn't the case of reverting this change ? Not reverting the change (which fixes other things), but yes---we should get the fix into SeaBIOS. I don't have a FreeBSD VM handy, can you try the attached BIOS so I can have your Tested-by? The patch I used is after my signature. Paolo Tested-by: Luigi Rizzo diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 8019b71..b58ef62 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -187,7 +187,7 @@ DefinitionBlock ( prt_slot0(0x0000), /* Device 1 is power mgmt device, and can only use irq 9 */ - Package() { 0x1ffff, 0, 0, 9 }, + Package() { 0x1ffff, 0, LNKS, 0 }, Package() { 0x1ffff, 1, LNKB, 0 }, Package() { 0x1ffff, 2, LNKC, 0 }, Package() { 0x1ffff, 3, LNKD, 0 }, @@ -278,6 +278,22 @@ DefinitionBlock ( define_link(LNKB, 1, PRQ1) define_link(LNKC, 2, PRQ2) define_link(LNKD, 3, PRQ3) + + Device(LNKS) { + Name(_HID, EISAID("PNP0C0F")) + Name(_UID, 4) + Name(_PRS, ResourceTemplate() { + Interrupt(, Level, ActiveHigh, Shared) { 9 } + }) + + // The SCI cannot be disabled and is always attached to GSI 9, + // so these are no-ops. We only need this link to override the + // polarity to active high and match the content of the MADT. + Method(_STA, 0, NotSerialized) { Return (0x0b) } + Method(_DIS, 0, NotSerialized) { } + Method(_CRS, 0, NotSerialized) { Return (_PRS) } + Method(_SRS, 1, NotSerialized) { } + } } #include "acpi-dsdt-cpu-hotplug.dsl"