[PATCH weston 1/2] pci: add PCI helpers to detect primary GPUs

David Herrmann dh.herrmann at googlemail.com
Sat Oct 27 13:28:17 PDT 2012

Hi Sannu

On Sat, Oct 27, 2012 at 8:38 PM, Sannu K <sannumail4foss at gmail.com> wrote:
> On Sat, Oct 27, 2012 at 6:24 PM, David Herrmann
> <dh.herrmann at googlemail.com> wrote:
>> This adds one global helper which returns a string describing the primary
>> PCI GPU. This string can later be used to compare with drmGetBusid() to
>> check whether a given DRM GPU is the primary GPU.
> What do you mean by the term "Primary GPU"? Is it the GPU that is
> currently used for acceleration (consider the case where there is
> Intel and nVidia GPU and currently nVidia GPU is used for doing the 3D
> stuff - should I call nVidia GPU primary)?

With "primary" I mean the GPU that is used during boot. That is, this
GPU is guaranteed to have a display-controller and can drive the main
connectors. If you have multiple GPUs, it is not guaranteed that
non-primary GPUs can drive connectors. Therefore, using the primary
GPU guarantees that weston is able to display something.

Of course, it is sometimes also possible that non-primary GPUs can be
used to drive the connectors. However, this isn't guaranteed so this
patch tries to find the primary-GPU via some PCI heuristics.

>> +               ++num;
>> +               if (!pci_device_is_boot_vga(dev))
>> +                       continue;
>> +
> Is it reasonable to generalize boot GPU as Primary GPU? In a system
> with 2 GPUs (say nvidia and intel), Intel GPU is used at boot time and
> once there is a need for more power nvidia GPU is used and Intel's is
> switched off. Will this case happen in practice and valid (if GPU
> switching support is made available)? In this case which GPU is
> considered primary GPU? If Intel (as it was boot VGA) - why this when
> nvidia is currently getting used for 3D stuff?

GPU switching under linux has no stable API. The vga_switcheroo module
only provides some temporary hacks via debugfs. Therefore, the
situations you describe are not what this patch tries to address. It
rather tries to fix the problem where weston uses a
secondary/auxiliary GPU and then might not be able to drive the

The purpose of this patch is to find the primary GPU. It does not try
to find the "fastest", "greatest" or whatever GPU. This would need
proper GPU switching support which the kernel teams are currently
working on.
So this patch is only a workaround for systems with two GPUs where
only one can perform modesetting.

Btw., the xserver uses the same heuristics for all open-source PCI drivers.

> Why VGA is only considered (I am not sure if VGA is used to denote all
> displays)? There are lot of systems without VGA adapter only with HDMI
> adapter.

Heh, the VGA test is a fallback when no boot-GPU is found. Also,
please note that VGA is a graphics standard that does not imply "VGA
connectors". Almost all graphics cards today have still a VGA mode
which provides basic modesetting if no proper driver is available. So
VGA has nothing to do with "VGA adapters" here.


More information about the wayland-devel mailing list