i-g-t: check kernel enable rings or not

1. add functions check kernel enable a ring or not.
2. add function gem_get_num_rings() to check how many rings kernel has
enable.
3. gem_ring_sync_loop.c will call gem_get_num_rings() directly instead
of original static fucntion get_number_rings().

Signed-off-by: Zhong Li <zhong.li@intel.com>
[Ben: Wrapped commit message + whitespace fixes]
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
This commit is contained in:
Zhong Li 2013-05-03 15:54:48 +08:00 committed by Ben Widawsky
parent 53d251ac23
commit 8ddf84d129
3 changed files with 60 additions and 47 deletions

View File

@ -270,19 +270,64 @@ void gem_set_tiling(int fd, uint32_t handle, int tiling, int stride)
assert(st.tiling_mode == tiling);
}
#define LOCAL_I915_PARAM_HAS_VEBOX 22
int gem_has_vebox(int fd)
bool gem_has_enable_ring(int fd,int param)
{
struct drm_i915_getparam gp;
int val;
drm_i915_getparam_t gp;
int ret, tmp;
memset(&gp, 0, sizeof(gp));
gp.param = LOCAL_I915_PARAM_HAS_VEBOX;
gp.value = &val;
gp.value = &tmp;
gp.param = param;
if (ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp)))
return 0;
ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
return val != 0;
if ((ret == 0) && (*gp.value > 0))
return true;
else
return false;
}
bool gem_has_bsd(int fd)
{
return gem_has_enable_ring(fd,I915_PARAM_HAS_BSD);
}
bool gem_has_blt(int fd)
{
return gem_has_enable_ring(fd,I915_PARAM_HAS_BLT);
}
#define LOCAL_I915_PARAM_HAS_VEBOX 22
bool gem_has_vebox(int fd)
{
return gem_has_enable_ring(fd,LOCAL_I915_PARAM_HAS_VEBOX);
}
int gem_get_num_rings(int fd)
{
int num_rings = 1; /* render ring is always available */
if (gem_has_bsd(fd))
num_rings++;
else
goto skip;
if (gem_has_blt(fd))
num_rings++;
else
goto skip;
if (gem_has_vebox(fd))
num_rings++;
else
goto skip;
skip:
return num_rings;
}
struct local_drm_i915_gem_cacheing {

View File

@ -47,8 +47,12 @@ int drm_open_any_master(void);
void gem_quiescent_gpu(int fd);
/* ioctl wrappers and similar stuff for bare metal testing */
int gem_has_vebox(int fd);
void gem_set_tiling(int fd, uint32_t handle, int tiling, int stride);
bool gem_has_enable_ring(int fd,int param);
bool gem_has_bsd(int fd);
bool gem_has_blt(int fd);
bool gem_has_vebox(int fd);
int gem_get_num_rings(int fd);
int gem_has_cacheing(int fd);
void gem_set_cacheing(int fd, uint32_t handle, int cacheing);
int gem_get_cacheing(int fd, uint32_t handle);

View File

@ -55,47 +55,11 @@ static drm_intel_bo *target_buffer;
#define MI_COND_BATCH_BUFFER_END (0x36<<23 | 1)
#define MI_DO_COMPARE (1<<21)
static int
get_num_rings(int fd)
{
int num_rings = 1; /* render ring is always available */
drm_i915_getparam_t gp;
int ret, tmp;
memset(&gp, 0, sizeof(gp));
gp.value = &tmp;
gp.param = I915_PARAM_HAS_BSD;
ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
if ((ret == 0) && (*gp.value > 0))
num_rings++;
else
goto skip;
gp.param = I915_PARAM_HAS_BLT;
ret = drmIoctl(fd, DRM_IOCTL_I915_GETPARAM, &gp);
if ((ret == 0) && (*gp.value > 0))
num_rings++;
else
goto skip;
if (gem_has_vebox(fd))
num_rings++;
else
goto skip;
skip:
return num_rings;
}
static void
store_dword_loop(int fd)
{
int i;
int num_rings = get_num_rings(fd);
int num_rings = gem_get_num_rings(fd);
srandom(0xdeadbeef);