[PATCH xf86-video-ati] ati: Support loading the amdgpu driver from the ati wrapper

Alex Deucher alexdeucher at gmail.com
Wed Jan 18 15:07:31 UTC 2017


On Wed, Jan 18, 2017 at 5:08 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> If .../share/X11/xorg.conf.d/10-amdgpu.conf doesn't exist, but the ati
> wrapper is loaded, it will otherwise try to use the radeon driver even
> for GPUs driven by the amdgpu kernel driver. This can only fail,
> potentially in bad ways.
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  src/ati.c | 40 ++++++++++++++++++++++++++++++++++++----
>  1 file changed, 36 insertions(+), 4 deletions(-)
>
> diff --git a/src/ati.c b/src/ati.c
> index 227665e73..d5294df09 100644
> --- a/src/ati.c
> +++ b/src/ati.c
> @@ -58,6 +58,7 @@
>  #endif
>
>  #include <pciaccess.h>
> +#include <xf86drm.h>
>  #include "atipcirename.h"
>
>  #include "ati.h"
> @@ -68,6 +69,7 @@
>  #define MACH64_DRIVER_NAME  "mach64"
>  #define R128_DRIVER_NAME    "r128"
>  #define RADEON_DRIVER_NAME  "radeon"
> +#define AMDGPU_DRIVER_NAME  "amdgpu"
>
>  enum
>  {
> @@ -140,9 +142,9 @@ ati_device_get_indexed(int index)
>  void
>  ati_gdev_subdriver(pointer options)
>  {
> -    int      nATIGDev, nMach64GDev, nR128GDev, nRadeonGDev;
> +    int      nATIGDev, nMach64GDev, nR128GDev, nRadeonGDev, nAmdgpuGDev;
>      GDevPtr *ATIGDevs;
> -    Bool     load_mach64 = FALSE, load_r128 = FALSE, load_radeon = FALSE;
> +    Bool     load_mach64 = FALSE, load_r128 = FALSE, load_radeon = FALSE, load_amdgpu = FALSE;
>      int      i;
>
>      /* let the subdrivers configure for themselves */
> @@ -154,6 +156,7 @@ ati_gdev_subdriver(pointer options)
>      nMach64GDev = xf86MatchDevice(MACH64_DRIVER_NAME, NULL);
>      nR128GDev = xf86MatchDevice(R128_DRIVER_NAME, NULL);
>      nRadeonGDev = xf86MatchDevice(RADEON_DRIVER_NAME, NULL);
> +    nAmdgpuGDev = xf86MatchDevice(AMDGPU_DRIVER_NAME, NULL);
>
>      for (i = 0; i < nATIGDev; i++) {
>          GDevPtr     ati_gdev = ATIGDevs[i];
> @@ -200,8 +203,34 @@ ati_gdev_subdriver(pointer options)
>          }
>
>          if (chip_family == ATI_CHIP_FAMILY_Radeon) {
> -            ati_gdev->driver = RADEON_DRIVER_NAME;
> -            load_radeon = TRUE;
> +           char *busid;
> +
> +           XNFasprintf(&busid, "pci:%04x:%02x:%02x.%d",
> +                       device->domain, device->bus, device->dev,
> +                       device->func);
> +
> +           if (busid) {
> +               int fd = drmOpen(NULL, busid);
> +
> +               if (fd >= 0) {
> +                   drmVersionPtr version = drmGetVersion(fd);
> +
> +                   if (version->version_major == 3) {
> +                       ati_gdev->driver = AMDGPU_DRIVER_NAME;
> +                       load_amdgpu = TRUE;
> +                   }
> +
> +                   free(version);
> +                   drmClose(fd);
> +               }
> +
> +               free(busid);
> +           }
> +
> +           if (strcmp(ati_gdev->driver, AMDGPU_DRIVER_NAME) != 0) {
> +               ati_gdev->driver = RADEON_DRIVER_NAME;
> +               load_radeon = TRUE;
> +           }
>          }
>      }
>
> @@ -219,6 +248,9 @@ ati_gdev_subdriver(pointer options)
>
>      if (load_radeon && (nRadeonGDev == 0))
>           xf86LoadOneModule(RADEON_DRIVER_NAME, options);
> +
> +    if (load_amdgpu && (nAmdgpuGDev == 0))
> +         xf86LoadOneModule(AMDGPU_DRIVER_NAME, options);
>  }
>
>  /*
> --
> 2.11.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list