4

On my linux laptop I have two VGA compatible controllers (information from lshw):

  • product: GK107 [GeForce GT 640M]
    physical id: 0
    bus info: pci@0000:01:00.0
    ..
    clock: 33MHz
    capabilities: pm msi pciexpress vga_controller bus_master cap_list
    configuration: driver=nouveau latency=0
    resources: irq:16 memory:f2000000-f2ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff ioport:3000(size=128)
  • product: 3rd Gen Core processor Graphics Controller
    physical id: 2
    bus info: pci@0000:00:02.0
    clock: 33MHz
    capabilities: msi pm vga_controller bus_master cap_list rom
    configuration: driver=i915 latency=0
    resources: irq:44 memory:f3000000-f33fffff memory:d0000000-dfffffff ioport:4000(size=64)

lspci | grep VGA output:

  • 00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
  • 01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GT 640M] (rev a1)

When I run glxgears I've got the following output (while application is running):

 libGL error: failed to load driver: i965
 libGL error: Try again with LIBGL_DEBUG=verbose for more details.
 XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
       after 2968 requests (2966 known processed) with 0 events remaining.

So I suppose it fails with intel VGA?

I have installed followed drivers:

  • intel-dri
  • xf86-video-intel 2.20 (X.org Intel i810/i830/i915/945G/G965+ video drivers)
  • xf86-video-nouveau

1 How can I check which controller is used by system/programs?

2 How can I ensure specific controller to be used?

3 How can I ensure that driver i965 is loaded, instead i915 (from the lshw output)? (the proper for my intel agp)

4 Why lshw shows clock: 33MHz? For GeForce 640M should be 625 MHz.

I'm using Linux Arch.

2
  • 1
    bumblebee-project.org - nvidia optimus on linux
    – week
    Nov 7, 2012 at 23:29
  • 1
    The 915 seems to be on a PCI bus (pci@0000:00:02.0), not on a PCIe bus. A PCI bus runs either at 33MHz or at 66MHz. (33Mhz for most PCs, 66 Mhz for workstations, servers, ancient apple G3 etc).
    – Hennes
    Nov 7, 2012 at 23:38

3 Answers 3

4
  1. To find out which graphics controller is currently used by system/programs use the following two commands:

    grep LoadModule /var/log/Xorg.0.log
    grep Driver /etc/X11/xorg.conf
    

    The first will give you a list of all loaded modules (or modules which X tried to load), and the second will give you list of all devices that are configured to run on your box. Intersection of these tho files gives you running controller.

  2. Define it in /etc/X11/xorg.conf

    Not to go in too much details, but define Driver line in Device section.

  3. If it is installed and configured in /etc/X11/xorg.conf, it'll run. Please keep in mind that drivers are sometimes generic, meaning nvidia is the driver for all nvidia cards, so i915 could be the appropriate driver for i965.

  4. @Hennes already partly answered it above. It seems that it is an lshw bug, to show PCI bus speed for every device either on PCI or PCIe. Check this pic: NVidia GeForce GT220 (not mine, but I have two NVidias and lshw for both tells 33MHz).

1
  • SpeedyGonsales, when trying the second command, I get this: grep: /etc/X11/xorg.conf: No such file or directory... That means I dont have anything installed? what should I do? I thought I had just installed them using howopensource.com/2012/10/…
    – fersarr
    Apr 3, 2013 at 21:34
0
  • 4

625 is not a bus frequency for PCIe; I think you are confused between the line speed, the plug speed, and the PCI bus speed. Line speed is bit per bit. While PCI bus is 32b width. So a PCI bus can stand 33MHz*32=1056Mb/s (shared between all devices). While PCIe v1 provides 2.5GT/s per line, but a transaction is not a bit ( a transaction is a bit on the data line, but, data lines need to transfert a lot of packet descriptions headers; so you may hope 2.3Gb/s per line).

But ... PCIe is not mapped the same way; in fact, it's dynamically routed and allocated. So, daughter cards are declared on a PCI bus (read it 32b 33MHz), but physically mapped on the PCI switch; and the switch may allocate more ressources (64b width) with unstated speed.

USB is about the same mess. USB3 are 5Gb/s rates, established over a hub that states 480Mb/s. The root hub can never declare more than "high speed" (480). So the device is mapped there. But, inside the "high speed link", you may use a "5Gb/s data rate". That's why USB trees always show 2 trees when USB3 is around; and USB3 devices are double mapped. Mapping a USB3 device inside the USB2 tree is required, amongst other things, for power management (to compute the total current consumed per branch after adding other USB2 devices).

That's why I am not surprised, or worried to see a 625MHz item below a 33MHz bus.

Or maybe 625 is the RAM speed, unrelated to PCI bus at all.

0
  • 1

To know if a card is handled by a driver:

$ lspci | grep -E "VGA|3D" | cut -f1 -d" " | while read id ; do lspci -v -s $id ; done | grep -i -e "VGA" -e "3D" -e "Kernel driver" -e "Kernel module"
01:05.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI RS880 [Radeon HD 4200] (prog-if 00 [VGA controller])
        Kernel driver in use: radeon
        Kernel modules: radeon
02:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI RV710 [Radeon HD 4350/4550] (prog-if 00 [VGA controller])
        Kernel driver in use: radeon
        Kernel modules: radeon
03:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI RV710 [Radeon HD 4350/4550] (prog-if 00 [VGA controller])
        Kernel driver in use: radeon
        Kernel modules: radeon

# lspci | grep -E "VGA|3D" | cut -f1 -d" " | while read id ; do lspci -v -s $id ; done | grep -i -e "VGA" -e "3D" -e "Kernel driver" -e "Kernel module"
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09) (prog-if 00 [VGA controller])
        Kernel driver in use: i915
        Kernel modules: i915
01:00.0 VGA compatible controller: NVIDIA Corporation GF108GLM [NVS 5200M] (rev a1) (prog-if 00 [VGA controller])
        Kernel driver in use: nvidia
        Kernel modules: nvidia

To know which card is the default one for X:

$ cat /var/log/Xorg.0.log | grep "PCI:"
[  4328.398] (--) PCI: (0:1:5:0) 1002:9710:1458:d000 rev 0, Mem @ 0xd8000000/134217728, 0xfdae0000/65536, 0xfd900000/1048576, I/O @ 0x0000ae00/256
[  4328.398] (--) PCI:*(0:2:0:0) 1002:954f:1462:1618 rev 0, Mem @ 0xb0000000/268435456, 0xfd6e0000/65536, I/O @ 0x0000ee00/256, BIOS @ 0x????????/131072
[  4328.398] (--) PCI: (0:3:0:0) 1002:954f:1462:1618 rev 0, Mem @ 0xc0000000/268435456, 0xfdfe0000/65536, I/O @ 0x0000de00/256, BIOS @ 0x????????/131072

# cat /var/log/Xorg.0.log | grep "PCI:"
[    30.924] (--) PCI:*(0@0:2:0) 8086:0166:1028:0534 rev 9, Mem @ 0xf6400000/4194304, 0xd0000000/268435456, I/O @ 0x0000f000/64, BIOS @ 0x????????/131072
[    30.924] (--) PCI: (1@0:0:0) 10de:0dfc:1028:1534 rev 161, Mem @ 0xf5000000/16777216, 0xe0000000/268435456, 0xf0000000/33554432, I/O @ 0x0000e000/128, BIOS @ 0x????????/524288

But, Kernel will show driver in use even if X does not handle the card at all.

  • 2 / 3

xorg.conf may (should hugely) help, but, I have already reported a dozen bugs against Xorg about the fact it may ignore the conf, and not even saying it (nor why).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.