[coreboot] Integrated graphics controller on second bus?

Andrej Skirn andrejskirn at celestials.net
Sun Jan 3 15:22:15 CET 2010


Peter Stuge wrote:
> Andrej Skirn wrote:
>   
>> So how do I define a device on second PCI bus for CoreBoot?
>>     
>
> It should be discovered automatically.
>   

Thanks for the reply. I'm probably missing something really elementary, 
but still can't get CoreBoot to locate and enable the video device. Even 
considered trying to run the VGA BIOS cold without enabling the device 
in vain hope it would know how to enable it, but calling 
cbfs_and_run_core() from hardwaremain requires at the least more build 
script wizardry than I can yet figure out. Here's some details in case 
somebody can offer leads on what's wrong. The CLE266 datasheet appears 
to be currently available at 
http://www.datasheetarchive.com/CLE266-datasheet.html in case anybody's 
interested, though I'd expect the problem to be more with standard PCI 
setup. It's basically using EPIA-M code from the svn head for all of 
this Northbridge related code.

I've set up the relation in devicetree with:
                device pci 1.0 on # AGP
                        device pci 0.0 on end # VGA
                end
In practice this does nothing, of course, but does let me see bit more 
debug output about what goes wrong (I have cut out repetitive "bad id" 
rows):
 
scan_static_bus for Root Device
In vt8623 enable_dev for device APIC_CLUSTER: 0.
APIC_CLUSTER: 0 enabled
In vt8623 enable_dev for device PCI_DOMAIN: 0000.
Finding PCI configuration type.
PCI: Using configuration type 1
POST: 0x5f
PCI_DOMAIN: 0000 enabled
PCI_DOMAIN: 0000 scanning...
PCI: pci_scan_bus for bus 00
POST: 0x24
malloc Enter, size 1092, free_mem_ptr 00030000
malloc 00030000
PCI: 00:00.0 [1106/3123] ops
PCI: 00:00.0 [1106/3123] enabled
In vt8623 enable_dev for device PCI: 00:01.0.
PCI: 00:01.0 [1106/b091] bus ops
PCI: 00:01.0 [1106/b091] enabled
PCI: 00:02.0, bad id 0xffffffff
...
PCI: 00:0e.0, bad id 0xffffffff
PCI: 00:0f.0 [1106/3149] ops
PCI: 00:0f.0 [1106/3149] enabled
PCI: 00:0f.1 [1106/0571] ops
PCI: 00:0f.1 [1106/0571] enabled
PCI: 00:0f.2, bad id 0xffffffff
...
PCI: 00:0f.7, bad id 0xffffffff
PCI: 00:10.0 [1106/3038] ops
PCI: 00:10.0 [1106/3038] enabled
PCI: 00:10.1 [1106/3038] ops
PCI: 00:10.1 [1106/3038] enabled
PCI: 00:10.2 [1106/3038] ops
PCI: 00:10.2 [1106/3038] enabled
PCI: 00:10.3 [1106/3038] ops
PCI: 00:10.3 [1106/3038] enabled
PCI: 00:10.4 [1106/3104] ops
PCI: 00:10.4 [1106/3104] enabled
PCI: 00:10.5 [1106/d104] disabled
PCI: 00:10.6, bad id 0xffffffff
PCI: 00:10.7, bad id 0xffffffff
PCI: 00:11.0 [1106/3227] bus ops
PCI: 00:11.0 [1106/3227] enabled
PCI: 00:11.1, bad id 0xffffffff
...
PCI: 00:11.7, bad id 0xffffffff
PCI: 00:12.0 [1106/3065] ops
PCI: 00:12.0 [1106/3065] disabled
PCI: 00:12.1, bad id 0xffffffff
...
PCI: 00:1f.0, bad id 0xffffffff
POST: 0x25
do_pci_scan_bridge for PCI: 00:01.0
PCI: pci_scan_bus for bus 01
POST: 0x24
In vt8623 enable_dev for device PCI: 01:00.0.
Disabling static device: PCI: 01:00.0
PCI: 01:00.1, bad id 0xffffffff
...
PCI: 01:1f.0, bad id 0xffffffff
POST: 0x25
PCI: pci_scan_bus returning with max=001
POST: 0x55
do_pci_scan_bridge returns max 1


Trying to force the graphics device enable regardless:
In vt8623 enable_dev for device PCI: 01:00.0.
PCI: 01:00.0 [ffff/ffff/00ffff] has unknown header type ff, ignoring.
PCI: 01:00.0 [ffff/ffff] enabled No operations
 
Apparently all the device registers read as ffh, this could mean the 
bridge is not set-up correctly, so I hard-coded the secondary & 
subordinate bus numbers to 1 in auto.c and the actual Northbridge code 
(some of the EPIA seems to do this anyway), but this changed nothing:
        dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA, 
PCI_DEVICE_ID_VIA_8633_1), 0);
        if (dev == PCI_DEV_INVALID)
                die("AGP Bridge Not Found\n");
        pci_write_config16(dev, 0x4, 0x0007);
        /* Secondary Bus Number */
        pci_write_config8(dev, 0x19, 0x01);
        /* Subordinate Bus Number */
        pci_write_config8(dev, 0x1a, 0x01);
 
Dump of non-zero AGP Bridge registers at end of auto.c (epia-m + custom 
code):
00:06 11 91 b0 07 00 30 02 00 00 04 06 00 00 01 00
10:00 00 00 00 00 00 00 00 00 01 01 00 f0 00 00 00
20:00 dc f0 dd 00 d8 f0 db 00 00 00 00 00 00 00 00
30:00 00 00 00 80 00 00 00 00 00 00 00 00 00 0c 00
40:00 08 00 22 20 72 00 00 00 00 00 00 00 00 00 00
80:01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00

Dump of AGP Bridge registers in SeaBIOS 0.4.2:
00: 6 11 91 b0 7 0 30 22 0 0 4 6 0 0 1 0
10: 0 0 0 0 0 0 0 0 0 1 1 0 f0 0 0 0
20: 0 fb f0 fc 0 f4 f0 f7 0 0 0 0 0 0 0 0
30: 0 0 0 0 80 0 0 0 0 0 0 0 0 0 c 0
40: 83 45 0 44 24 72 0 0 0 0 0 0 0 0 0 0
80: 1 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0

(I'm not concerned with most of the registers at this point, as the VGA 
BIOS and operating system should be setting a number of them)
 
Dump of the same from running system with factory BIOS and Windows XP:
 Bus 0 (PCI), Device Number 1, Device Function 0
 Vendor 1106h VIA Technologies Inc
 Device B091h VT8633 Apollo Pro 266 CPU to AGP Controller
 Command 0007h (I/O Access, Memory Access, BusMaster)
 Status A230h (Has Capabilities List, Supports 66MHz, Received Master 
Abort, Detected Parity Error, Medium Timing)
 Revision 00h, Header Type 01h, Bus Latency Timer 00h
 Self test 00h (Self test not supported)
 PCI Class Bridge, type PCI to PCI
 PCI Bridge Information:
   Primary Bus Number 0, Secondary Bus Number 1, Subordinate Bus Number 1
   Secondary Bus Command 000Ch (ISA mapping, VGA mapping)
   Secondary Bus Status 0000h
   Secondary Bus Latency 00h
   I/O Port Range Passed to Secondary Bus : None
   Memory   Range Passed to Secondary Bus : DC000000h to DDFFFFFFh
   Prefetchable Memory Range Passed to Secondary Bus : D8000000h to 
DBFFFFFFh
 New Capabilities List Present:
   Power Management Capability, Version 1.1
     Supports low power State D1
     Does not support PME# signalling
     Current Power State : D0 (Device operational, no power saving)
 
 Hex-Dump of device configuration space follows:
  0000  06 11 91 B0 07 00 30 A2 00 00 04 06 00 00 01 00
  0010  00 00 00 00 00 00 00 00 00 01 01 00 F0 00 00 00
  0020  00 DC F0 DD 00 D8 F0 DB 00 00 00 00 00 00 00 00
  0030  00 00 00 00 80 00 00 00 00 00 00 00 00 00 0C 00
  0040  83 C5 00 44 24 72 00 00 00 00 00 00 00 00 00 00
  0080  01 00 02 02 00 00 00 00 00 00 00 00 00 00 00 00

>> The Wiki still talks about concatenating the VGA BIOS to the image,
>> although the current way seems to be to include it in CBFS.
>>     
>
> Indeed so.
>
> Are you using Kconfig or the old method with buildtarget?
>
> With Kconfig the way to do it is to select if and how to run the VGA
> BIOS (which x86 emulator to use, or if to run in real mode) and
> provide the filename.
>   
I added the target into Kconfig and set up the options/files in 
menuconfig. The VGA BIOS is added into CBFS with correct vendor & device 
id's, but it's not getting called because the video device behind the 
AGP bridge isn't getting found, either by CoreBoot or SeaBios. I'd run 
it manually just in case it knows how to enable itself, but can't figure 
how to do that correctly.





More information about the coreboot mailing list