r600g: move some queries into winsys/radeon
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ce12f82692
commit
fb8cf51eeb
|
@ -76,12 +76,12 @@ struct r600_tiling_info *r600_get_tiling_info(struct radeon *radeon)
|
||||||
|
|
||||||
unsigned r600_get_clock_crystal_freq(struct radeon *radeon)
|
unsigned r600_get_clock_crystal_freq(struct radeon *radeon)
|
||||||
{
|
{
|
||||||
return radeon->clock_crystal_freq;
|
return radeon->info.r600_clock_crystal_freq;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned r600_get_num_backends(struct radeon *radeon)
|
unsigned r600_get_num_backends(struct radeon *radeon)
|
||||||
{
|
{
|
||||||
return radeon->num_backends;
|
return radeon->info.r600_num_backends;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned r600_get_num_tile_pipes(struct radeon *radeon)
|
unsigned r600_get_num_tile_pipes(struct radeon *radeon)
|
||||||
|
@ -96,7 +96,7 @@ unsigned r600_get_backend_map(struct radeon *radeon)
|
||||||
|
|
||||||
unsigned r600_get_minor_version(struct radeon *radeon)
|
unsigned r600_get_minor_version(struct radeon *radeon)
|
||||||
{
|
{
|
||||||
return radeon->minor_version;
|
return radeon->info.drm_minor;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int r600_interpret_tiling(struct radeon *radeon, uint32_t tiling_config)
|
static int r600_interpret_tiling(struct radeon *radeon, uint32_t tiling_config)
|
||||||
|
@ -191,59 +191,16 @@ static int eg_interpret_tiling(struct radeon *radeon, uint32_t tiling_config)
|
||||||
|
|
||||||
static int radeon_drm_get_tiling(struct radeon *radeon)
|
static int radeon_drm_get_tiling(struct radeon *radeon)
|
||||||
{
|
{
|
||||||
struct drm_radeon_info info = {};
|
uint32_t tiling_config = radeon->info.r600_tiling_config;
|
||||||
int r;
|
|
||||||
uint32_t tiling_config = 0;
|
|
||||||
|
|
||||||
info.request = RADEON_INFO_TILING_CONFIG;
|
if (!tiling_config)
|
||||||
info.value = (uintptr_t)&tiling_config;
|
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_INFO, &info,
|
|
||||||
sizeof(struct drm_radeon_info));
|
|
||||||
|
|
||||||
if (r)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (radeon->chip_class == R600 || radeon->chip_class == R700) {
|
if (radeon->chip_class == R600 || radeon->chip_class == R700) {
|
||||||
r = r600_interpret_tiling(radeon, tiling_config);
|
return r600_interpret_tiling(radeon, tiling_config);
|
||||||
} else {
|
} else {
|
||||||
r = eg_interpret_tiling(radeon, tiling_config);
|
return eg_interpret_tiling(radeon, tiling_config);
|
||||||
}
|
}
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int radeon_get_clock_crystal_freq(struct radeon *radeon)
|
|
||||||
{
|
|
||||||
struct drm_radeon_info info = {};
|
|
||||||
uint32_t clock_crystal_freq = 0;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
info.request = RADEON_INFO_CLOCK_CRYSTAL_FREQ;
|
|
||||||
info.value = (uintptr_t)&clock_crystal_freq;
|
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_INFO, &info,
|
|
||||||
sizeof(struct drm_radeon_info));
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
radeon->clock_crystal_freq = clock_crystal_freq;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int radeon_get_num_backends(struct radeon *radeon)
|
|
||||||
{
|
|
||||||
struct drm_radeon_info info = {};
|
|
||||||
uint32_t num_backends = 0;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
info.request = RADEON_INFO_NUM_BACKENDS;
|
|
||||||
info.value = (uintptr_t)&num_backends;
|
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_INFO, &info,
|
|
||||||
sizeof(struct drm_radeon_info));
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
radeon->num_backends = num_backends;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int radeon_get_num_tile_pipes(struct radeon *radeon)
|
static int radeon_get_num_tile_pipes(struct radeon *radeon)
|
||||||
|
@ -254,7 +211,7 @@ static int radeon_get_num_tile_pipes(struct radeon *radeon)
|
||||||
|
|
||||||
info.request = RADEON_INFO_NUM_TILE_PIPES;
|
info.request = RADEON_INFO_NUM_TILE_PIPES;
|
||||||
info.value = (uintptr_t)&num_tile_pipes;
|
info.value = (uintptr_t)&num_tile_pipes;
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_INFO, &info,
|
r = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_INFO, &info,
|
||||||
sizeof(struct drm_radeon_info));
|
sizeof(struct drm_radeon_info));
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
@ -271,7 +228,7 @@ static int radeon_get_backend_map(struct radeon *radeon)
|
||||||
|
|
||||||
info.request = RADEON_INFO_BACKEND_MAP;
|
info.request = RADEON_INFO_BACKEND_MAP;
|
||||||
info.value = (uintptr_t)&backend_map;
|
info.value = (uintptr_t)&backend_map;
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_INFO, &info,
|
r = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_INFO, &info,
|
||||||
sizeof(struct drm_radeon_info));
|
sizeof(struct drm_radeon_info));
|
||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
@ -282,7 +239,6 @@ static int radeon_get_backend_map(struct radeon *radeon)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int radeon_init_fence(struct radeon *radeon)
|
static int radeon_init_fence(struct radeon *radeon)
|
||||||
{
|
{
|
||||||
radeon->fence = 1;
|
radeon->fence = 1;
|
||||||
|
@ -307,7 +263,7 @@ static int handle_compare(void *key1, void *key2)
|
||||||
return PTR_TO_UINT(key1) != PTR_TO_UINT(key2);
|
return PTR_TO_UINT(key1) != PTR_TO_UINT(key2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct radeon *radeon_new(struct radeon_winsys *rw)
|
struct radeon *r600_drm_winsys_create(struct radeon_winsys *rw)
|
||||||
{
|
{
|
||||||
struct radeon *radeon;
|
struct radeon *radeon;
|
||||||
int r;
|
int r;
|
||||||
|
@ -318,15 +274,10 @@ static struct radeon *radeon_new(struct radeon_winsys *rw)
|
||||||
}
|
}
|
||||||
|
|
||||||
rw->query_info(rw, &radeon->info);
|
rw->query_info(rw, &radeon->info);
|
||||||
radeon->fd = radeon->info.fd;
|
|
||||||
radeon->device = radeon->info.pci_id;
|
|
||||||
radeon->num_backends = radeon->info.r600_num_backends;
|
|
||||||
radeon->refcount = 1;
|
|
||||||
radeon->minor_version = radeon->info.drm_minor;
|
|
||||||
|
|
||||||
radeon->family = radeon_family_from_device(radeon->device);
|
radeon->family = radeon_family_from_device(radeon->info.pci_id);
|
||||||
if (radeon->family == CHIP_UNKNOWN) {
|
if (radeon->family == CHIP_UNKNOWN) {
|
||||||
fprintf(stderr, "Unknown chipset 0x%04X\n", radeon->device);
|
fprintf(stderr, "Unknown chipset 0x%04X\n", radeon->info.pci_id);
|
||||||
return radeon_decref(radeon);
|
return radeon_decref(radeon);
|
||||||
}
|
}
|
||||||
/* setup class */
|
/* setup class */
|
||||||
|
@ -373,20 +324,14 @@ static struct radeon *radeon_new(struct radeon_winsys *rw)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s unknown or unsupported chipset 0x%04X\n",
|
fprintf(stderr, "%s unknown or unsupported chipset 0x%04X\n",
|
||||||
__func__, radeon->device);
|
__func__, radeon->info.pci_id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (radeon_drm_get_tiling(radeon))
|
if (radeon_drm_get_tiling(radeon))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* get the GPU counter frequency, failure is non fatal */
|
if (radeon->info.drm_minor >= 11) {
|
||||||
radeon_get_clock_crystal_freq(radeon);
|
|
||||||
|
|
||||||
if (radeon->minor_version >= 9)
|
|
||||||
radeon_get_num_backends(radeon);
|
|
||||||
|
|
||||||
if (radeon->minor_version >= 11) {
|
|
||||||
radeon_get_num_tile_pipes(radeon);
|
radeon_get_num_tile_pipes(radeon);
|
||||||
radeon_get_backend_map(radeon);
|
radeon_get_backend_map(radeon);
|
||||||
}
|
}
|
||||||
|
@ -406,18 +351,10 @@ static struct radeon *radeon_new(struct radeon_winsys *rw)
|
||||||
return radeon;
|
return radeon;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct radeon *r600_drm_winsys_create(struct radeon_winsys *rw)
|
|
||||||
{
|
|
||||||
return radeon_new(rw);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct radeon *radeon_decref(struct radeon *radeon)
|
struct radeon *radeon_decref(struct radeon *radeon)
|
||||||
{
|
{
|
||||||
if (radeon == NULL)
|
if (radeon == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (--radeon->refcount > 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
util_hash_table_destroy(radeon->bo_handles);
|
util_hash_table_destroy(radeon->bo_handles);
|
||||||
pipe_mutex_destroy(radeon->bo_handles_mutex);
|
pipe_mutex_destroy(radeon->bo_handles_mutex);
|
||||||
|
|
|
@ -1621,7 +1621,7 @@ void r600_context_flush(struct r600_context *ctx)
|
||||||
chunks[1].chunk_data = (uint64_t)(uintptr_t)ctx->reloc;
|
chunks[1].chunk_data = (uint64_t)(uintptr_t)ctx->reloc;
|
||||||
chunk_array[0] = (uint64_t)(uintptr_t)&chunks[0];
|
chunk_array[0] = (uint64_t)(uintptr_t)&chunks[0];
|
||||||
chunk_array[1] = (uint64_t)(uintptr_t)&chunks[1];
|
chunk_array[1] = (uint64_t)(uintptr_t)&chunks[1];
|
||||||
r = drmCommandWriteRead(ctx->radeon->fd, DRM_RADEON_CS, &drmib,
|
r = drmCommandWriteRead(ctx->radeon->info.fd, DRM_RADEON_CS, &drmib,
|
||||||
sizeof(struct drm_radeon_cs));
|
sizeof(struct drm_radeon_cs));
|
||||||
if (r) {
|
if (r) {
|
||||||
fprintf(stderr, "radeon: The kernel rejected CS, "
|
fprintf(stderr, "radeon: The kernel rejected CS, "
|
||||||
|
|
|
@ -45,9 +45,6 @@ struct r600_bo;
|
||||||
|
|
||||||
struct radeon {
|
struct radeon {
|
||||||
struct radeon_info info;
|
struct radeon_info info;
|
||||||
int fd;
|
|
||||||
int refcount;
|
|
||||||
unsigned device;
|
|
||||||
unsigned family;
|
unsigned family;
|
||||||
enum chip_class chip_class;
|
enum chip_class chip_class;
|
||||||
struct r600_tiling_info tiling_info;
|
struct r600_tiling_info tiling_info;
|
||||||
|
@ -55,12 +52,9 @@ struct radeon {
|
||||||
unsigned fence;
|
unsigned fence;
|
||||||
unsigned *cfence;
|
unsigned *cfence;
|
||||||
struct r600_bo *fence_bo;
|
struct r600_bo *fence_bo;
|
||||||
unsigned clock_crystal_freq;
|
|
||||||
unsigned num_backends;
|
|
||||||
unsigned num_tile_pipes;
|
unsigned num_tile_pipes;
|
||||||
unsigned backend_map;
|
unsigned backend_map;
|
||||||
boolean backend_map_valid;
|
boolean backend_map_valid;
|
||||||
unsigned minor_version;
|
|
||||||
|
|
||||||
/* List of buffer handles and its mutex. */
|
/* List of buffer handles and its mutex. */
|
||||||
struct util_hash_table *bo_handles;
|
struct util_hash_table *bo_handles;
|
||||||
|
|
|
@ -44,14 +44,14 @@ int radeon_bo_fixed_map(struct radeon *radeon, struct radeon_bo *bo)
|
||||||
args.handle = bo->handle;
|
args.handle = bo->handle;
|
||||||
args.offset = 0;
|
args.offset = 0;
|
||||||
args.size = (uint64_t)bo->size;
|
args.size = (uint64_t)bo->size;
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_GEM_MMAP,
|
r = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_GEM_MMAP,
|
||||||
&args, sizeof(args));
|
&args, sizeof(args));
|
||||||
if (r) {
|
if (r) {
|
||||||
fprintf(stderr, "error mapping %p 0x%08X (error = %d)\n",
|
fprintf(stderr, "error mapping %p 0x%08X (error = %d)\n",
|
||||||
bo, bo->handle, r);
|
bo, bo->handle, r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
ptr = mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, radeon->fd, args.addr_ptr);
|
ptr = mmap(0, args.size, PROT_READ|PROT_WRITE, MAP_SHARED, radeon->info.fd, args.addr_ptr);
|
||||||
if (ptr == MAP_FAILED) {
|
if (ptr == MAP_FAILED) {
|
||||||
fprintf(stderr, "%s failed to map bo\n", __func__);
|
fprintf(stderr, "%s failed to map bo\n", __func__);
|
||||||
return -errno;
|
return -errno;
|
||||||
|
@ -101,7 +101,7 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
|
||||||
|
|
||||||
memset(&open_arg, 0, sizeof(open_arg));
|
memset(&open_arg, 0, sizeof(open_arg));
|
||||||
open_arg.name = handle;
|
open_arg.name = handle;
|
||||||
r = drmIoctl(radeon->fd, DRM_IOCTL_GEM_OPEN, &open_arg);
|
r = drmIoctl(radeon->info.fd, DRM_IOCTL_GEM_OPEN, &open_arg);
|
||||||
if (r != 0) {
|
if (r != 0) {
|
||||||
free(bo);
|
free(bo);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -118,7 +118,7 @@ struct radeon_bo *radeon_bo(struct radeon *radeon, unsigned handle,
|
||||||
args.initial_domain = initial_domain;
|
args.initial_domain = initial_domain;
|
||||||
args.flags = 0;
|
args.flags = 0;
|
||||||
args.handle = 0;
|
args.handle = 0;
|
||||||
r = drmCommandWriteRead(radeon->fd, DRM_RADEON_GEM_CREATE,
|
r = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_GEM_CREATE,
|
||||||
&args, sizeof(args));
|
&args, sizeof(args));
|
||||||
bo->handle = args.handle;
|
bo->handle = args.handle;
|
||||||
if (r) {
|
if (r) {
|
||||||
|
@ -153,7 +153,7 @@ static void radeon_bo_destroy(struct radeon *radeon, struct radeon_bo *bo)
|
||||||
radeon_bo_fixed_unmap(radeon, bo);
|
radeon_bo_fixed_unmap(radeon, bo);
|
||||||
memset(&args, 0, sizeof(args));
|
memset(&args, 0, sizeof(args));
|
||||||
args.handle = bo->handle;
|
args.handle = bo->handle;
|
||||||
drmIoctl(radeon->fd, DRM_IOCTL_GEM_CLOSE, &args);
|
drmIoctl(radeon->info.fd, DRM_IOCTL_GEM_CLOSE, &args);
|
||||||
memset(bo, 0, sizeof(struct radeon_bo));
|
memset(bo, 0, sizeof(struct radeon_bo));
|
||||||
free(bo);
|
free(bo);
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,7 @@ int radeon_bo_wait(struct radeon *radeon, struct radeon_bo *bo)
|
||||||
memset(&args, 0, sizeof(args));
|
memset(&args, 0, sizeof(args));
|
||||||
args.handle = bo->handle;
|
args.handle = bo->handle;
|
||||||
do {
|
do {
|
||||||
ret = drmCommandWriteRead(radeon->fd, DRM_RADEON_GEM_WAIT_IDLE,
|
ret = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_GEM_WAIT_IDLE,
|
||||||
&args, sizeof(args));
|
&args, sizeof(args));
|
||||||
} while (ret == -EBUSY);
|
} while (ret == -EBUSY);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -213,7 +213,7 @@ int radeon_bo_busy(struct radeon *radeon, struct radeon_bo *bo, uint32_t *domain
|
||||||
args.handle = bo->handle;
|
args.handle = bo->handle;
|
||||||
args.domain = 0;
|
args.domain = 0;
|
||||||
|
|
||||||
ret = drmCommandWriteRead(radeon->fd, DRM_RADEON_GEM_BUSY,
|
ret = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_GEM_BUSY,
|
||||||
&args, sizeof(args));
|
&args, sizeof(args));
|
||||||
|
|
||||||
*domain = args.domain;
|
*domain = args.domain;
|
||||||
|
@ -229,7 +229,7 @@ int radeon_bo_get_tiling_flags(struct radeon *radeon,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
args.handle = bo->handle;
|
args.handle = bo->handle;
|
||||||
ret = drmCommandWriteRead(radeon->fd, DRM_RADEON_GEM_GET_TILING,
|
ret = drmCommandWriteRead(radeon->info.fd, DRM_RADEON_GEM_GET_TILING,
|
||||||
&args, sizeof(args));
|
&args, sizeof(args));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -247,7 +247,7 @@ int radeon_bo_get_name(struct radeon *radeon,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
flink.handle = bo->handle;
|
flink.handle = bo->handle;
|
||||||
ret = drmIoctl(radeon->fd, DRM_IOCTL_GEM_FLINK, &flink);
|
ret = drmIoctl(radeon->info.fd, DRM_IOCTL_GEM_FLINK, &flink);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -41,12 +41,22 @@
|
||||||
#include <xf86drm.h>
|
#include <xf86drm.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef RADEON_INFO_TILING_CONFIG
|
||||||
|
#define RADEON_INFO_TILING_CONFIG 6
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef RADEON_INFO_WANT_HYPERZ
|
#ifndef RADEON_INFO_WANT_HYPERZ
|
||||||
#define RADEON_INFO_WANT_HYPERZ 7
|
#define RADEON_INFO_WANT_HYPERZ 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef RADEON_INFO_WANT_CMASK
|
#ifndef RADEON_INFO_WANT_CMASK
|
||||||
#define RADEON_INFO_WANT_CMASK 8
|
#define RADEON_INFO_WANT_CMASK 8
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef RADEON_INFO_CLOCK_CRYSTAL_FREQ
|
||||||
|
#define RADEON_INFO_CLOCK_CRYSTAL_FREQ 9
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef RADEON_INFO_NUM_BACKENDS
|
#ifndef RADEON_INFO_NUM_BACKENDS
|
||||||
#define RADEON_INFO_NUM_BACKENDS 10
|
#define RADEON_INFO_NUM_BACKENDS 10
|
||||||
#endif
|
#endif
|
||||||
|
@ -107,7 +117,7 @@ static boolean radeon_set_fd_access(struct radeon_drm_cs *applier,
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean radeon_get_drm_value(int fd, unsigned request,
|
static boolean radeon_get_drm_value(int fd, unsigned request,
|
||||||
const char *name, uint32_t *out)
|
const char *errname, uint32_t *out)
|
||||||
{
|
{
|
||||||
struct drm_radeon_info info = {0};
|
struct drm_radeon_info info = {0};
|
||||||
int retval;
|
int retval;
|
||||||
|
@ -116,9 +126,9 @@ static boolean radeon_get_drm_value(int fd, unsigned request,
|
||||||
info.request = request;
|
info.request = request;
|
||||||
|
|
||||||
retval = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
|
retval = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, sizeof(info));
|
||||||
if (retval) {
|
if (retval && errname) {
|
||||||
fprintf(stderr, "%s: Failed to get %s, error number %d\n",
|
fprintf(stderr, "radeon: Failed to get %s, error number %d\n",
|
||||||
__func__, name, retval);
|
errname, retval);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -196,8 +206,8 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
|
||||||
retval = drmCommandWriteRead(ws->fd, DRM_RADEON_GEM_INFO,
|
retval = drmCommandWriteRead(ws->fd, DRM_RADEON_GEM_INFO,
|
||||||
&gem_info, sizeof(gem_info));
|
&gem_info, sizeof(gem_info));
|
||||||
if (retval) {
|
if (retval) {
|
||||||
fprintf(stderr, "%s: Failed to get MM info, error number %d\n",
|
fprintf(stderr, "radeon: Failed to get MM info, error number %d\n",
|
||||||
__FUNCTION__, retval);
|
retval);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
ws->info.gart_size = gem_info.gart_size;
|
ws->info.gart_size = gem_info.gart_size;
|
||||||
|
@ -218,10 +228,18 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
else if (ws->gen == R600) {
|
else if (ws->gen == R600) {
|
||||||
if (!radeon_get_drm_value(ws->fd, RADEON_INFO_NUM_BACKENDS,
|
if (ws->info.drm_minor >= 9 &&
|
||||||
|
!radeon_get_drm_value(ws->fd, RADEON_INFO_NUM_BACKENDS,
|
||||||
"num backends",
|
"num backends",
|
||||||
&ws->info.r600_num_backends))
|
&ws->info.r600_num_backends))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
/* get the GPU counter frequency, failure is not fatal */
|
||||||
|
radeon_get_drm_value(ws->fd, RADEON_INFO_CLOCK_CRYSTAL_FREQ, NULL,
|
||||||
|
&ws->info.r600_clock_crystal_freq);
|
||||||
|
|
||||||
|
radeon_get_drm_value(ws->fd, RADEON_INFO_TILING_CONFIG, NULL,
|
||||||
|
&ws->info.r600_tiling_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -83,6 +83,8 @@ struct radeon_info {
|
||||||
uint32_t r300_num_z_pipes;
|
uint32_t r300_num_z_pipes;
|
||||||
|
|
||||||
uint32_t r600_num_backends;
|
uint32_t r600_num_backends;
|
||||||
|
uint32_t r600_clock_crystal_freq;
|
||||||
|
uint32_t r600_tiling_config;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum radeon_feature_id {
|
enum radeon_feature_id {
|
||||||
|
|
Loading…
Reference in New Issue