[xserver] config: fix GPUDevice fail when AutoAddGPU off + BusID

Submitted by Qiang Yu on Sept. 8, 2016, 1:24 p.m.

Details

Message ID 1473341098-23457-1-git-send-email-Qiang.Yu@amd.com
State New
Headers show
Series "config: fix GPUDevice fail when AutoAddGPU off + BusID" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Qiang Yu Sept. 8, 2016, 1:24 p.m.
This fix is for the following xorg.conf can work:

Section "ServerFlags"
        Option  "AutoAddGPU" "off"
EndSection

Section "Device"
        Identifier "Amd"
        Driver "ati"
        BusID "PCI:1:0:0"
EndSection

Section "Device"
        Identifier "Intel"
        Driver "modesetting"
        BusID "pci:0:2:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device "Intel"
        GPUDevice "Amd"
EndSection

Without AutoAddGPU off, modesetting DDX will also be loaded
for GPUDevice.

Signed-off-by: Qiang Yu <Qiang.Yu@amd.com>
---
 hw/xfree86/common/xf86platformBus.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

Patch hide | download patch | download mbox

diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
index 96895a6..03fd931 100644
--- a/hw/xfree86/common/xf86platformBus.c
+++ b/hw/xfree86/common/xf86platformBus.c
@@ -418,6 +418,19 @@  probeSingleDevice(struct xf86_platform_device *dev, DriverPtr drvp, GDevPtr gdev
     return foundScreen;
 }
 
+static Bool
+isGPUDevice(GDevPtr gdev)
+{
+    int i;
+
+    for (i = 0; i < gdev->myScreenSection->num_gpu_devices; i++) {
+        if (gdev == gdev->myScreenSection->gpu_devices[i])
+            return TRUE;
+    }
+
+    return FALSE;
+}
+
 int
 xf86platformProbeDev(DriverPtr drvp)
 {
@@ -450,9 +463,8 @@  xf86platformProbeDev(DriverPtr drvp)
         if (j == xf86_num_platform_devices)
              continue;
 
-        foundScreen = probeSingleDevice(&xf86_platform_devices[j], drvp, devList[i], 0);
-        if (!foundScreen)
-            continue;
+        foundScreen = probeSingleDevice(&xf86_platform_devices[j], drvp, devList[i],
+                                        isGPUDevice(devList[i]) ? PLATFORM_PROBE_GPU_SCREEN : 0);
     }
 
     /* if autoaddgpu devices is enabled then go find any unclaimed platform

Comments

On 08/09/16 10:24 PM, Qiang Yu wrote:
> This fix is for the following xorg.conf can work:
> 
> Section "ServerFlags"
>         Option  "AutoAddGPU" "off"
> EndSection
> 
> Section "Device"
>         Identifier "Amd"
>         Driver "ati"
>         BusID "PCI:1:0:0"
> EndSection
> 
> Section "Device"
>         Identifier "Intel"
>         Driver "modesetting"
>         BusID "pci:0:2:0"
> EndSection
> 
> Section "Screen"
>         Identifier "Screen0"
>         Device "Intel"
>         GPUDevice "Amd"
> EndSection
> 
> Without AutoAddGPU off, modesetting DDX will also be loaded
> for GPUDevice.
> 
> Signed-off-by: Qiang Yu <Qiang.Yu@amd.com>
> ---
>  hw/xfree86/common/xf86platformBus.c | 18 +++++++++++++++---
>  1 file changed, 15 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
> index 96895a6..03fd931 100644
> --- a/hw/xfree86/common/xf86platformBus.c
> +++ b/hw/xfree86/common/xf86platformBus.c
> @@ -418,6 +418,19 @@ probeSingleDevice(struct xf86_platform_device *dev, DriverPtr drvp, GDevPtr gdev
>      return foundScreen;
>  }
>  
> +static Bool
> +isGPUDevice(GDevPtr gdev)
> +{
> +    int i;
> +
> +    for (i = 0; i < gdev->myScreenSection->num_gpu_devices; i++) {
> +        if (gdev == gdev->myScreenSection->gpu_devices[i])
> +            return TRUE;
> +    }
> +
> +    return FALSE;
> +}
> +
>  int
>  xf86platformProbeDev(DriverPtr drvp)
>  {
> @@ -450,9 +463,8 @@ xf86platformProbeDev(DriverPtr drvp)
>          if (j == xf86_num_platform_devices)
>               continue;
>  
> -        foundScreen = probeSingleDevice(&xf86_platform_devices[j], drvp, devList[i], 0);
> -        if (!foundScreen)
> -            continue;
> +        foundScreen = probeSingleDevice(&xf86_platform_devices[j], drvp, devList[i],
> +                                        isGPUDevice(devList[i]) ? PLATFORM_PROBE_GPU_SCREEN : 0);

The last line is a bit long, maybe move "PLATFORM_PROBE_GPU_SCREEN : 0"
to the next line. Either way,

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>