panfrost: Query core count and thread tls alloc

This is supported only on newer kernels.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Alyssa Rosenzweig
2019-12-09 09:06:51 -05:00
parent 315324614e
commit 07d8b98b54
2 changed files with 32 additions and 3 deletions
+30 -3
View File
@@ -674,7 +674,8 @@ static __u64
panfrost_query_raw(
struct panfrost_screen *screen,
enum drm_panfrost_param param,
bool required)
bool required,
unsigned default_value)
{
struct drm_panfrost_get_param get_param = {0,};
ASSERTED int ret;
@@ -682,7 +683,10 @@ panfrost_query_raw(
get_param.param = DRM_PANFROST_PARAM_GPU_PROD_ID;
ret = drmIoctl(screen->fd, DRM_IOCTL_PANFROST_GET_PARAM, &get_param);
assert(!(ret && required));
if (ret) {
assert(!required);
return default_value;
}
return get_param.value;
}
@@ -690,7 +694,28 @@ panfrost_query_raw(
static unsigned
panfrost_query_gpu_version(struct panfrost_screen *screen)
{
return panfrost_query_raw(screen, DRM_PANFROST_PARAM_GPU_PROD_ID, true);
return panfrost_query_raw(screen, DRM_PANFROST_PARAM_GPU_PROD_ID, true, 0);
}
static unsigned
panfrost_query_core_count(struct panfrost_screen *screen)
{
/* On older kernels, worst-case to 16 cores */
unsigned mask = panfrost_query_raw(screen,
DRM_PANFROST_PARAM_SHADER_PRESENT, false, 0xffff);
return util_bitcount(mask);
}
static unsigned
panfrost_query_thread_tls_alloc(struct panfrost_screen *screen)
{
/* On older kernels, we worst-case to 1024 threads, the architectural
* maximum for Midgard */
return panfrost_query_raw(screen,
DRM_PANFROST_PARAM_THREAD_TLS_ALLOC, false, 1024);
}
static uint32_t
@@ -744,6 +769,8 @@ panfrost_create_screen(int fd, struct renderonly *ro)
screen->fd = fd;
screen->gpu_id = panfrost_query_gpu_version(screen);
screen->core_count = panfrost_query_core_count(screen);
screen->thread_tls_alloc = panfrost_query_thread_tls_alloc(screen);
screen->quirks = panfrost_get_quirks(screen->gpu_id);
screen->kernel_version = drmGetVersion(fd);
@@ -80,6 +80,8 @@ struct panfrost_screen {
/* Properties of the GPU in use */
unsigned gpu_id;
unsigned core_count;
unsigned thread_tls_alloc;
unsigned quirks;
drmVersionPtr kernel_version;