diff options
author | Roland Scheidegger <[email protected]> | 2018-01-09 02:53:28 +0100 |
---|---|---|
committer | Roland Scheidegger <[email protected]> | 2018-01-10 04:59:00 +0100 |
commit | f0dd1b36126ceff8726797f40f56defbf5f82e2c (patch) | |
tree | a54a0b8583d8538b14c296c6ed405febe70da593 | |
parent | 7c0bc495f1e467562c4b47da1c2821fd323a45b1 (diff) |
winsys/radeon: fix up default enabled_rb_mask for r600
The logic had two fatal flaws which completely killed the default value.
1) drm will overwrite the value anyway even if the chip can't be handled
2) the default value logic is relying on num_render_backends, which was
filled in later.
Luckily noone is relying on it, but it's a bit confusing seeing the chip clock
printed out there (as hex) with R600_DEBUG=info...
(Albeit radeonsi does not appear to fix up the value. If kernels which don't
handle this query are still supported, radeonsi will still end up with a broken
enabled_rb_mask, I have no idea of the potential results of this there.)
Reviewed-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index e600199d265..10f2ecc900f 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -369,12 +369,6 @@ static bool do_winsys_init(struct radeon_drm_winsys *ws) &ws->info.max_shader_clock); ws->info.max_shader_clock /= 1000; - /* Default value. */ - ws->info.enabled_rb_mask = u_bit_consecutive(0, ws->info.num_render_backends); - /* This fails on non-GCN or older kernels: */ - radeon_get_drm_value(ws->fd, RADEON_INFO_SI_BACKEND_ENABLED_MASK, NULL, - &ws->info.enabled_rb_mask); - ws->num_cpus = sysconf(_SC_NPROCESSORS_ONLN); /* Generation-specific queries. */ @@ -433,6 +427,16 @@ static bool do_winsys_init(struct radeon_drm_winsys *ws) &ws->info.r600_gb_backend_map)) ws->info.r600_gb_backend_map_valid = true; + /* Default value. */ + ws->info.enabled_rb_mask = u_bit_consecutive(0, ws->info.num_render_backends); + /* + * This fails (silently) on non-GCN or older kernels, overwriting the + * default enabled_rb_mask with the result of the last query. + */ + if (ws->gen >= DRV_SI) + radeon_get_drm_value(ws->fd, RADEON_INFO_SI_BACKEND_ENABLED_MASK, NULL, + &ws->info.enabled_rb_mask); + ws->info.has_virtual_memory = false; if (ws->info.drm_minor >= 13) { uint32_t ib_vm_max_size; |