Hello,
i tried to get seabios up via payload from coreboot and failed on the
initialisation
of neccessary devices.
The board in Question is a Tyan S4882, consisting of K8 northbridge,
8131 southbridge, 8111 southbridge and Winbond w83627hf SuperIO.
You will see on the following pastebin-url that coreboot does a proper
init and can see all relevant devices.
I was also able to get VGA up via coreboot ( to reflect an accessible
device below root ) but not from within seabios. It probes only against
PCI 00:18.0 ... 00:18.3 which are on the northbridge itself.
I had a look on the sources and found it should see and init the whole
tree, also checked my sources against some patches i found on the net
and they are all applied or superseded.
the seabios was 1.7.1 and master from git
The relevant startup can be found here : http://pastebin.com/wZvRWm1Z
feel free to send me something to test out if there are unanswered
questions or contact me
in #coreboot on freenode's IRC. I'm not omnipresent but 8-12AM and
9-12PM CET should be fine ;)
Best regards, lautriv.
Hi,
This series adds the q35 acpi bits (as is, first two patches), then goes
cleanup stuff my subsequently moving reusable stuff to separate include
files and make both piix and q35 include them. Kept fine-gained
splitted for now so it is easy to reorder/squash stuff for merge.
Unsolved issues:
ISA devices. See patch #11 for an idea how to tackle this, I don't like
it that much though. /me is open for better ideas.
VGA. It's in slot 2 for piix and slot 1 for q35. So the current q35
dsdt is simply plain wrong as it declares the vga for slot 2. Is there
some way to deal with that in AML code? Note: That this isn't q35
specific issue. Recent qemu versions allow to place the vga in any
slot (try "qemu -vga none -device VGA,addr=0a.0").
Comments & Reviews are welcome.
cheers,
Gerd
Gerd Hoffmann (9):
acpi: move DBUG() to separate file
acpi: move DBUG() to separate file [q35]
acpi: move \_SB.HPET to separate file
acpi: move \_SB.HPET to separate file [q35]
acpi: move \_SB.PCI0._CRS to separate file
acpi: move \_SB.PCI0._CRS to separate file [q35]
acpi: move cpu hotplug to separate file
acpi: move cpu hotplug to separate file [q35]
[RfC] acpi: rework enable bits
Isaku Yamahata (1):
seabios: q35: add dsdt
Jan Kiszka (1):
seabios: q35: Register PCI IRQs as active high in APIC mode
Makefile | 2 +-
src/acpi-dsdt-cpu-hotplug.dsl | 78 +++++
src/acpi-dsdt-dbug.dsl | 30 ++
src/acpi-dsdt-hpet.dsl | 36 ++
src/acpi-dsdt-pci-crs.dsl | 104 ++++++
src/acpi-dsdt.dsl | 344 ++++----------------
src/q35-acpi-dsdt.dsl | 717 +++++++++++++++++++++++++++++++++++++++++
7 files changed, 1023 insertions(+), 288 deletions(-)
create mode 100644 src/acpi-dsdt-cpu-hotplug.dsl
create mode 100644 src/acpi-dsdt-dbug.dsl
create mode 100644 src/acpi-dsdt-hpet.dsl
create mode 100644 src/acpi-dsdt-pci-crs.dsl
create mode 100644 src/q35-acpi-dsdt.dsl
Hi,
These patches are mostly cherry-picked from Jason's q35 patch series.
It carries some bugfixes and preparations for the q35 chipset support,
but not yet the q35 code itself. Should be ready for merge.
cheers,
Gerd
Gerd Hoffmann (1):
piix: fix mtrr setup
Isaku Yamahata (2):
seabios: acpi, fadt: make while fadt initialization chipset specific
seabios: pci: enable SERR of normal device.
Jason Baron (1):
seabios: make mttr UC area setup dynamic
src/acpi.c | 34 ++++++++++++++++++----------------
src/config.h | 1 -
src/mtrr.c | 5 +++--
src/pci.h | 1 +
src/pciinit.c | 24 +++++++++++++++++++++++-
src/post.c | 6 +++---
6 files changed, 48 insertions(+), 23 deletions(-)
On 11/20/2012 11:01 AM, Wanlong Gao wrote:
>> $ git bisect good
>> d22b096ef6e0b20810193b68a1d472f3fb8a4f9e is the first bad commit
>> commit d22b096ef6e0b20810193b68a1d472f3fb8a4f9e
>> Author: Avi Kivity <avi(a)redhat.com>
>> Date: Sun Sep 30 22:21:11 2012 +0200
>>
>> kvm: use separate MemoryListeners for memory and I/O
>>
>> The construct
>>
>> if (address_space == get_system_memory()) {
>> // memory thing
>> } else {
>> // io thing
>> }
>>
>> fails if we have more than two address spaces. Use a separate listener
>> for memory and I/O, and utilize MemoryListener's address space filtering to
>> fix this.
>>
>> Signed-off-by: Avi Kivity <avi(a)redhat.com>
>>
>> :100644 100644 92a71374ed1e040cef5ad70a6cb00adabf671dd4 c69e01200461c7a87440f7a915bd171a9fc8f318 M kvm-all.c
>>
>>
>> Ooooops, I didn't find any error in above patch, can you guys help to investigate this bug?
>
> I confirmed again and found that "lsi" can't work on the upstream qemu.
> Any thoughts?
>
I appears to be a bug in Seabios:
(gdb) thread 3
[Switching to thread 3 (Thread 0x7fffebfff700 (LWP 19032))]
#0 0x000055555586df2c in access_with_adjusted_size (addr=29563620,
value=0x7fffebffe5f0, size=4, access_size_min=0, access_size_max=0, access=
0x55555586ddbb <memory_region_read_accessor>, opaque=0x55555655dd00)
at /home/tlv/akivity/qemu/memory.c:349
349 {
(gdb) bt
#0 0x000055555586df2c in access_with_adjusted_size (addr=29563620,
value=0x7fffebffe5f0, size=4, access_size_min=0, access_size_max=0, access=
0x55555586ddbb <memory_region_read_accessor>, opaque=0x55555655dd00)
at /home/tlv/akivity/qemu/memory.c:349
#1 0x0000555555870a4e in memory_region_dispatch_read1
(mr=0x55555655dd00, addr=29563620, size=4) at
/home/tlv/akivity/qemu/memory.c:862
#2 0x0000555555870b3e in memory_region_dispatch_read
(mr=0x55555655dd00, addr=29563620, size=4) at
/home/tlv/akivity/qemu/memory.c:894
#3 0x0000555555873c2d in io_mem_read (mr=0x55555655dd00, addr=29563620,
size=4) at /home/tlv/akivity/qemu/memory.c:1575
#4 0x00005555558054ed in address_space_rw (as=0x555556629d78,
addr=29563620, buf=0x7fffebffe874 "", len=4, is_write=false) at
/home/tlv/akivity/qemu/exec.c:3428
#5 0x00005555556bf4c3 in dma_memory_rw_relaxed (dma=0x555556603cf0,
addr=29563620, buf=0x7fffebffe874, len=4, dir=DMA_DIRECTION_TO_DEVICE)
at /home/tlv/akivity/qemu/dma.h:130
#6 0x00005555556bf558 in dma_memory_rw (dma=0x555556603cf0,
addr=29563620, buf=0x7fffebffe874, len=4, dir=DMA_DIRECTION_TO_DEVICE)
at /home/tlv/akivity/qemu/dma.h:156
#7 0x00005555556bf5fb in pci_dma_rw (dev=0x555556629b60, addr=29563620,
buf=0x7fffebffe874, len=4, dir=DMA_DIRECTION_TO_DEVICE) at
/home/tlv/akivity/qemu/hw/pci.h:607
#8 0x00005555556bf65b in pci_dma_read (dev=0x555556629b60,
addr=29563620, buf=0x7fffebffe874, len=4) at
/home/tlv/akivity/qemu/hw/pci.h:614
#9 0x00005555556bfc08 in read_dword (s=0x555556629b60, addr=29563620)
at /home/tlv/akivity/qemu/hw/lsi53c895a.c:385
#10 0x00005555556c1937 in lsi_execute_script (s=0x555556629b60) at
/home/tlv/akivity/qemu/hw/lsi53c895a.c:1040
#11 0x00005555556c3c82 in lsi_reg_writeb (s=0x555556629b60, offset=47,
val=0 '\000') at /home/tlv/akivity/qemu/hw/lsi53c895a.c:1781
#12 0x00005555556c513c in lsi_io_write (opaque=0x555556629b60, addr=47,
val=0, size=1) at /home/tlv/akivity/qemu/hw/lsi53c895a.c:1953
#13 0x000055555586def2 in memory_region_write_accessor
(opaque=0x55555662a340, addr=47, value=0x7fffebffeab0, size=1, shift=0,
mask=255) at /home/tlv/akivity/qemu/memory.c:334
#14 0x000055555586dfd4 in access_with_adjusted_size (addr=47,
value=0x7fffebffeab0, size=1, access_size_min=1, access_size_max=1,
access=0x55555586de6d <memory_region_write_accessor>,
opaque=0x55555662a340) at /home/tlv/akivity/qemu/memory.c:364
#15 0x000055555586e43c in memory_region_iorange_write
(iorange=0x7fffe4000ed0, offset=47, width=1, data=0) at
/home/tlv/akivity/qemu/memory.c:439
#16 0x0000555555866acc in ioport_writeb_thunk (opaque=0x7fffe4000ed0,
addr=49199, data=0) at /home/tlv/akivity/qemu/ioport.c:212
#17 0x00005555558664a6 in ioport_write (index=0, address=49199, data=0)
at /home/tlv/akivity/qemu/ioport.c:83
#18 0x0000555555867046 in cpu_outb (addr=49199, val=0 '\000') at
/home/tlv/akivity/qemu/ioport.c:289
#19 0x000055555586a958 in kvm_handle_io (port=49199,
data=0x7ffff7ff3000, direction=1, size=1, count=1) at
/home/tlv/akivity/qemu/kvm-all.c:1423
#20 0x000055555586af5e in kvm_cpu_exec (env=0x55555659b0b0) at
/home/tlv/akivity/qemu/kvm-all.c:1571
#21 0x00005555557f74e4 in qemu_kvm_cpu_thread_fn (arg=0x55555659b0b0) at
/home/tlv/akivity/qemu/cpus.c:757
#22 0x00007ffff6727d14 in start_thread () from /lib64/libpthread.so.0
#23 0x00007ffff533667d in clone () from /lib64/libc.so.6
(gdb) fr 4
#4 0x00005555558054ed in address_space_rw (as=0x555556629d78,
addr=29563620, buf=0x7fffebffe874 "", len=4, is_write=false) at
/home/tlv/akivity/qemu/exec.c:3428
3428 val = io_mem_read(section->mr, addr1, 4);
(gdb) p as.root.name
$1 = 0x55555662cc80 "bus master"
(gdb) p as.root.enabled
$2 = false
We're executing a scsi script without enabling the lsi bus master bit.
There is also a bug in the lsi code:
1038 again:
1039 insn_processed++;
1040 insn = read_dword(s, s->dsp);
1041 if (!insn) {
1042 /* If we receive an empty opcode increment the DSP by 4 bytes
1043 instead of 8 and execute the next opcode at that location */
1044 s->dsp += 4;
1045 goto again;
Which causes the script interpreter to go into an infinite loop. This
should be moved to a bottom half or thread.
--
error compiling committee.c: too many arguments to function