panfrost: Use CSIF info for CSF registers count
Instead of hardcoding 96 everywhere, we can get that information from the kernel. This is useful for newer generations that increased the count of registers present. Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Benjamin Lee <benjamin.lee@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33736>
This commit is contained in:
committed by
Marge Bot
parent
90bf48829a
commit
9a70754ebd
@@ -98,6 +98,8 @@ csf_oom_handler_init(struct panfrost_context *ctx)
|
||||
{
|
||||
struct panfrost_bo *cs_bo = NULL, *reg_save_bo = NULL;
|
||||
struct panfrost_device *dev = pan_device(ctx->base.screen);
|
||||
const struct drm_panthor_csif_info *csif_info =
|
||||
panthor_kmod_get_csif_props(dev->kmod.dev);
|
||||
|
||||
cs_bo =
|
||||
panfrost_bo_create(dev, 4096, 0, "Temporary CS buffer");
|
||||
@@ -114,8 +116,8 @@ csf_oom_handler_init(struct panfrost_context *ctx)
|
||||
};
|
||||
struct cs_builder b;
|
||||
const struct cs_builder_conf conf = {
|
||||
.nr_registers = 96,
|
||||
.nr_kernel_registers = 4,
|
||||
.nr_registers = csif_info->cs_reg_count,
|
||||
.nr_kernel_registers = MAX2(csif_info->unpreserved_cs_reg_count, 4),
|
||||
.reg_perm = (dev->debug & PAN_DBG_CS) ? csf_reg_perm_cb : NULL,
|
||||
};
|
||||
cs_builder_init(&b, &conf, queue);
|
||||
@@ -251,9 +253,12 @@ GENX(csf_init_batch)(struct panfrost_batch *batch)
|
||||
if (!queue.gpu)
|
||||
return -1;
|
||||
|
||||
const struct drm_panthor_csif_info *csif_info =
|
||||
panthor_kmod_get_csif_props(dev->kmod.dev);
|
||||
|
||||
const struct cs_builder_conf conf = {
|
||||
.nr_registers = 96,
|
||||
.nr_kernel_registers = 4,
|
||||
.nr_registers = csif_info->cs_reg_count,
|
||||
.nr_kernel_registers = MAX2(csif_info->unpreserved_cs_reg_count, 4),
|
||||
.alloc_buffer = csf_alloc_cs_buffer,
|
||||
.cookie = batch,
|
||||
.ls_tracker = batch->csf.cs.ls_tracker,
|
||||
@@ -1473,8 +1478,11 @@ GENX(csf_init_context)(struct panfrost_context *ctx)
|
||||
.gpu = cs_bo->ptr.gpu,
|
||||
.capacity = panfrost_bo_size(cs_bo) / sizeof(uint64_t),
|
||||
};
|
||||
const struct drm_panthor_csif_info *csif_info =
|
||||
panthor_kmod_get_csif_props(dev->kmod.dev);
|
||||
const struct cs_builder_conf bconf = {
|
||||
.nr_registers = 96,
|
||||
.nr_registers = csif_info->cs_reg_count,
|
||||
.nr_kernel_registers = MAX2(csif_info->unpreserved_cs_reg_count, 4),
|
||||
.nr_kernel_registers = 4,
|
||||
};
|
||||
struct cs_builder b;
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "drm-uapi/panthor_drm.h"
|
||||
|
||||
#include "genxml/gen_macros.h"
|
||||
|
||||
#include "panvk_buffer.h"
|
||||
@@ -683,14 +685,17 @@ init_cs_builders(struct panvk_cmd_buffer *cmdbuf)
|
||||
[PANVK_SUBQUEUE_COMPUTE] = panvk_cs_compute_reg_perm,
|
||||
};
|
||||
|
||||
const struct drm_panthor_csif_info *csif_info =
|
||||
panthor_kmod_get_csif_props(dev->kmod.dev);
|
||||
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(cmdbuf->state.cs); i++) {
|
||||
struct cs_builder *b = &cmdbuf->state.cs[i].builder;
|
||||
/* Lazy allocation of the root CS. */
|
||||
struct cs_buffer root_cs = {0};
|
||||
|
||||
struct cs_builder_conf conf = {
|
||||
.nr_registers = 96,
|
||||
.nr_kernel_registers = 4,
|
||||
.nr_registers = csif_info->cs_reg_count,
|
||||
.nr_kernel_registers = MAX2(csif_info->unpreserved_cs_reg_count, 4),
|
||||
.alloc_buffer = alloc_cs_buffer,
|
||||
.cookie = cmdbuf,
|
||||
};
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
#include "drm-uapi/panthor_drm.h"
|
||||
|
||||
#include "panvk_cmd_buffer.h"
|
||||
#include "panvk_device.h"
|
||||
@@ -24,17 +25,20 @@ tiler_oom_reg_perm_cb(struct cs_builder *b, unsigned reg)
|
||||
}
|
||||
|
||||
static size_t
|
||||
generate_tiler_oom_handler(struct cs_buffer handler_mem, bool has_zs_ext,
|
||||
generate_tiler_oom_handler(struct panvk_device *dev,
|
||||
struct cs_buffer handler_mem, bool has_zs_ext,
|
||||
uint32_t rt_count, bool tracing_enabled,
|
||||
uint32_t *dump_region_size)
|
||||
{
|
||||
assert(rt_count >= 1 && rt_count <= MAX_RTS);
|
||||
uint32_t fbd_size = get_fbd_size(has_zs_ext, rt_count);
|
||||
const struct drm_panthor_csif_info *csif_info =
|
||||
panthor_kmod_get_csif_props(dev->kmod.dev);
|
||||
|
||||
struct cs_builder b;
|
||||
struct cs_builder_conf conf = {
|
||||
.nr_registers = 96,
|
||||
.nr_kernel_registers = 4,
|
||||
.nr_registers = csif_info->cs_reg_count,
|
||||
.nr_kernel_registers = MAX2(csif_info->unpreserved_cs_reg_count, 4),
|
||||
.reg_perm = tiler_oom_reg_perm_cb,
|
||||
};
|
||||
cs_builder_init(&b, &conf, handler_mem);
|
||||
@@ -169,8 +173,9 @@ panvk_per_arch(init_tiler_oom)(struct panvk_device *device)
|
||||
};
|
||||
|
||||
uint32_t dump_region_size;
|
||||
size_t handler_length = generate_tiler_oom_handler(
|
||||
handler_mem, zs_ext, rt_count, tracing_enabled, &dump_region_size);
|
||||
size_t handler_length =
|
||||
generate_tiler_oom_handler(device, handler_mem, zs_ext, rt_count,
|
||||
tracing_enabled, &dump_region_size);
|
||||
|
||||
/* All handlers must have the same length */
|
||||
assert(idx == 0 || handler_length == device->tiler_oom.handler_stride);
|
||||
|
||||
@@ -395,9 +395,11 @@ init_subqueue(struct panvk_queue *queue, enum panvk_subqueue_id subqueue)
|
||||
.gpu = panvk_priv_mem_dev_addr(queue->tiler_heap.desc) + 4096,
|
||||
.capacity = 64 * 1024 / sizeof(uint64_t),
|
||||
};
|
||||
const struct drm_panthor_csif_info *csif_info =
|
||||
panthor_kmod_get_csif_props(dev->kmod.dev);
|
||||
const struct cs_builder_conf conf = {
|
||||
.nr_registers = 96,
|
||||
.nr_kernel_registers = 4,
|
||||
.nr_registers = csif_info->cs_reg_count,
|
||||
.nr_kernel_registers = MAX2(csif_info->unpreserved_cs_reg_count, 4),
|
||||
};
|
||||
struct cs_builder b;
|
||||
|
||||
|
||||
@@ -149,8 +149,8 @@ panvk_per_arch(utrace_clone_init_builder)(struct cs_builder *b,
|
||||
struct panvk_pool *pool)
|
||||
{
|
||||
const struct cs_builder_conf builder_conf = {
|
||||
.nr_registers = 96,
|
||||
.nr_kernel_registers = 4,
|
||||
.nr_registers = b->conf.nr_registers,
|
||||
.nr_kernel_registers = b->conf.nr_kernel_registers,
|
||||
.alloc_buffer = alloc_clone_buffer,
|
||||
.cookie = pool,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user