[PATCH] radeon/kms: fallback to vesa if GPU is not supported by UMS

Alex Deucher alexdeucher at gmail.com
Thu Oct 20 11:31:13 PDT 2011


On Thu, Oct 20, 2011 at 2:23 PM,  <j.glisse at gmail.com> wrote:
> From: Jerome Glisse <jglisse at redhat.com>
>
> For GPU not supported by UMS, test in probe so that we properly
> fallback to vesa.
>
> Signed-off-by: Jerome Glisse <jglisse at redhat.com>

Looks good.

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

> ---
>  src/radeon.h       |   66 ----------------------------------------------------
>  src/radeon_probe.c |   29 ++++++++++++++++++++++-
>  src/radeon_probe.h |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 94 insertions(+), 67 deletions(-)
>
> diff --git a/src/radeon.h b/src/radeon.h
> index f66ffd0..50ce62f 100644
> --- a/src/radeon.h
> +++ b/src/radeon.h
> @@ -313,62 +313,6 @@ typedef struct {
>     DisplayModePtr    mode;
>  } RADEONFBLayout;
>
> -typedef enum {
> -    CHIP_FAMILY_UNKNOW,
> -    CHIP_FAMILY_LEGACY,
> -    CHIP_FAMILY_RADEON,
> -    CHIP_FAMILY_RV100,
> -    CHIP_FAMILY_RS100,    /* U1 (IGP320M) or A3 (IGP320)*/
> -    CHIP_FAMILY_RV200,
> -    CHIP_FAMILY_RS200,    /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */
> -    CHIP_FAMILY_R200,
> -    CHIP_FAMILY_RV250,
> -    CHIP_FAMILY_RS300,    /* RS300/RS350 */
> -    CHIP_FAMILY_RV280,
> -    CHIP_FAMILY_R300,
> -    CHIP_FAMILY_R350,
> -    CHIP_FAMILY_RV350,
> -    CHIP_FAMILY_RV380,    /* RV370/RV380/M22/M24 */
> -    CHIP_FAMILY_R420,     /* R420/R423/M18 */
> -    CHIP_FAMILY_RV410,    /* RV410, M26 */
> -    CHIP_FAMILY_RS400,    /* xpress 200, 200m (RS400) Intel */
> -    CHIP_FAMILY_RS480,    /* xpress 200, 200m (RS410/480/482/485) AMD */
> -    CHIP_FAMILY_RV515,    /* rv515 */
> -    CHIP_FAMILY_R520,    /* r520 */
> -    CHIP_FAMILY_RV530,    /* rv530 */
> -    CHIP_FAMILY_R580,    /* r580 */
> -    CHIP_FAMILY_RV560,   /* rv560 */
> -    CHIP_FAMILY_RV570,   /* rv570 */
> -    CHIP_FAMILY_RS600,
> -    CHIP_FAMILY_RS690,
> -    CHIP_FAMILY_RS740,
> -    CHIP_FAMILY_R600,    /* r600 */
> -    CHIP_FAMILY_RV610,
> -    CHIP_FAMILY_RV630,
> -    CHIP_FAMILY_RV670,
> -    CHIP_FAMILY_RV620,
> -    CHIP_FAMILY_RV635,
> -    CHIP_FAMILY_RS780,
> -    CHIP_FAMILY_RS880,
> -    CHIP_FAMILY_RV770,   /* r700 */
> -    CHIP_FAMILY_RV730,
> -    CHIP_FAMILY_RV710,
> -    CHIP_FAMILY_RV740,
> -    CHIP_FAMILY_CEDAR,   /* evergreen */
> -    CHIP_FAMILY_REDWOOD,
> -    CHIP_FAMILY_JUNIPER,
> -    CHIP_FAMILY_CYPRESS,
> -    CHIP_FAMILY_HEMLOCK,
> -    CHIP_FAMILY_PALM,
> -    CHIP_FAMILY_SUMO,
> -    CHIP_FAMILY_SUMO2,
> -    CHIP_FAMILY_BARTS,
> -    CHIP_FAMILY_TURKS,
> -    CHIP_FAMILY_CAICOS,
> -    CHIP_FAMILY_CAYMAN,
> -    CHIP_FAMILY_LAST
> -} RADEONChipFamily;
> -
>  #define IS_RV100_VARIANT ((info->ChipFamily == CHIP_FAMILY_RV100)  ||  \
>         (info->ChipFamily == CHIP_FAMILY_RV200)  ||  \
>         (info->ChipFamily == CHIP_FAMILY_RS100)  ||  \
> @@ -501,16 +445,6 @@ struct radeon_exa_pixmap_priv {
>     Bool bo_mapped;
>  };
>
> -typedef struct {
> -    uint32_t pci_device_id;
> -    RADEONChipFamily chip_family;
> -    int mobility;
> -    int igp;
> -    int nocrtc2;
> -    int nointtvout;
> -    int singledac;
> -} RADEONCardInfo;
> -
>  #define RADEON_2D_EXA_COPY 1
>  #define RADEON_2D_EXA_SOLID 2
>
> diff --git a/src/radeon_probe.c b/src/radeon_probe.c
> index 7819027..26dec28 100644
> --- a/src/radeon_probe.c
> +++ b/src/radeon_probe.c
> @@ -59,9 +59,31 @@
>
>  #include "radeon_pci_chipset_gen.h"
>
> +#include "radeon_chipinfo_gen.h"
>
>  #ifdef XSERVER_LIBPCIACCESS
>  #include "radeon_pci_device_match_gen.h"
> +
> +static Bool radeon_ums_supported(ScrnInfoPtr pScrn, struct pci_device *pci_dev)
> +{
> +    unsigned family = 0, i;
> +
> +    for (i = 0; i < sizeof(RADEONCards) / sizeof(RADEONCardInfo); i++) {
> +        if (pci_dev->device_id == RADEONCards[i].pci_device_id) {
> +            family = RADEONCards[i].chip_family;
> +            break;
> +        }
> +    }
> +
> +    if (family >= CHIP_FAMILY_SUMO) {
> +        xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
> +                       "GPU only supported with KMS, using vesa instead.\n");
> +        return FALSE;
> +    }
> +    return TRUE;
> +}
> +#else
> +#define radeon_ums_supported(x, y) TRUE
>  #endif
>
>  #ifndef XSERVER_LIBPCIACCESS
> @@ -131,8 +153,13 @@ radeon_get_scrninfo(int entity_num, void *pci_dev)
>         return FALSE;
>
>     if (pci_dev) {
> -      if (radeon_kernel_mode_enabled(pScrn, pci_dev))
> +      if (radeon_kernel_mode_enabled(pScrn, pci_dev)) {
>        kms = 1;
> +      } else {
> +        if (!radeon_ums_supported(pScrn, pci_dev)) {
> +          return FALSE;
> +        }
> +      }
>     }
>
>     pScrn->driverVersion = RADEON_VERSION_CURRENT;
> diff --git a/src/radeon_probe.h b/src/radeon_probe.h
> index d97bb06..94f6d7d 100644
> --- a/src/radeon_probe.h
> +++ b/src/radeon_probe.h
> @@ -55,6 +55,72 @@ extern DriverRec RADEON;
>  #define RADEON_MAX_CRTC 6
>  #define RADEON_MAX_BIOS_CONNECTOR 16
>
> +typedef enum {
> +    CHIP_FAMILY_UNKNOW,
> +    CHIP_FAMILY_LEGACY,
> +    CHIP_FAMILY_RADEON,
> +    CHIP_FAMILY_RV100,
> +    CHIP_FAMILY_RS100,    /* U1 (IGP320M) or A3 (IGP320)*/
> +    CHIP_FAMILY_RV200,
> +    CHIP_FAMILY_RS200,    /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */
> +    CHIP_FAMILY_R200,
> +    CHIP_FAMILY_RV250,
> +    CHIP_FAMILY_RS300,    /* RS300/RS350 */
> +    CHIP_FAMILY_RV280,
> +    CHIP_FAMILY_R300,
> +    CHIP_FAMILY_R350,
> +    CHIP_FAMILY_RV350,
> +    CHIP_FAMILY_RV380,    /* RV370/RV380/M22/M24 */
> +    CHIP_FAMILY_R420,     /* R420/R423/M18 */
> +    CHIP_FAMILY_RV410,    /* RV410, M26 */
> +    CHIP_FAMILY_RS400,    /* xpress 200, 200m (RS400) Intel */
> +    CHIP_FAMILY_RS480,    /* xpress 200, 200m (RS410/480/482/485) AMD */
> +    CHIP_FAMILY_RV515,    /* rv515 */
> +    CHIP_FAMILY_R520,    /* r520 */
> +    CHIP_FAMILY_RV530,    /* rv530 */
> +    CHIP_FAMILY_R580,    /* r580 */
> +    CHIP_FAMILY_RV560,   /* rv560 */
> +    CHIP_FAMILY_RV570,   /* rv570 */
> +    CHIP_FAMILY_RS600,
> +    CHIP_FAMILY_RS690,
> +    CHIP_FAMILY_RS740,
> +    CHIP_FAMILY_R600,    /* r600 */
> +    CHIP_FAMILY_RV610,
> +    CHIP_FAMILY_RV630,
> +    CHIP_FAMILY_RV670,
> +    CHIP_FAMILY_RV620,
> +    CHIP_FAMILY_RV635,
> +    CHIP_FAMILY_RS780,
> +    CHIP_FAMILY_RS880,
> +    CHIP_FAMILY_RV770,   /* r700 */
> +    CHIP_FAMILY_RV730,
> +    CHIP_FAMILY_RV710,
> +    CHIP_FAMILY_RV740,
> +    CHIP_FAMILY_CEDAR,   /* evergreen */
> +    CHIP_FAMILY_REDWOOD,
> +    CHIP_FAMILY_JUNIPER,
> +    CHIP_FAMILY_CYPRESS,
> +    CHIP_FAMILY_HEMLOCK,
> +    CHIP_FAMILY_PALM,
> +    CHIP_FAMILY_SUMO,
> +    CHIP_FAMILY_SUMO2,
> +    CHIP_FAMILY_BARTS,
> +    CHIP_FAMILY_TURKS,
> +    CHIP_FAMILY_CAICOS,
> +    CHIP_FAMILY_CAYMAN,
> +    CHIP_FAMILY_LAST
> +} RADEONChipFamily;
> +
> +typedef struct {
> +    uint32_t pci_device_id;
> +    RADEONChipFamily chip_family;
> +    int mobility;
> +    int igp;
> +    int nocrtc2;
> +    int nointtvout;
> +    int singledac;
> +} RADEONCardInfo;
> +
>  typedef enum
>  {
>     MT_UNKNOWN = -1,
> --
> 1.7.1
>
> _______________________________________________
> xorg-driver-ati mailing list
> xorg-driver-ati at lists.x.org
> http://lists.x.org/mailman/listinfo/xorg-driver-ati
>


More information about the xorg-driver-ati mailing list