[Mesa-dev] [PATCH v2 03/16] intel: aubinator: rework register writes handling
Rafael Antognolli
rafael.antognolli at intel.com
Tue Jun 19 21:45:19 UTC 2018
For some reason I always have trouble finding the docs about this.
Still, it looks correct according to the docs, and it also seems to be
matching what I see in aubdump since "tools/intel_aubdump: Simulate
"enhanced execlist" submission for gen11+".
Reviewed-by: Rafael Antognolli <rafael.antognolli at intel.com>
On Tue, Jun 19, 2018 at 02:45:18PM +0100, Lionel Landwerlin wrote:
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
> src/intel/tools/aubinator.c | 82 ++++++++++++++++++++++++-------------
> 1 file changed, 54 insertions(+), 28 deletions(-)
>
> diff --git a/src/intel/tools/aubinator.c b/src/intel/tools/aubinator.c
> index 3f9047e69a8..0438f96cd1b 100644
> --- a/src/intel/tools/aubinator.c
> +++ b/src/intel/tools/aubinator.c
> @@ -240,46 +240,72 @@ handle_memtrace_version(uint32_t *p)
> static void
> handle_memtrace_reg_write(uint32_t *p)
> {
> + static struct execlist_regs {
> + uint32_t render_elsp[4];
> + int render_elsp_index;
> + uint32_t blitter_elsp[4];
> + int blitter_elsp_index;
> + } state = {};
> +
> uint32_t offset = p[1];
> uint32_t value = p[5];
> +
> int engine;
> - static int render_elsp_writes = 0;
> - static int blitter_elsp_writes = 0;
> - static int render_elsq0 = 0;
> - static int blitter_elsq0 = 0;
> - uint8_t *pphwsp;
> -
> - if (offset == 0x2230) {
> - render_elsp_writes++;
> + uint64_t context_descriptor;
> +
> + switch (offset) {
> + case 0x2230: /* render elsp */
> + state.render_elsp[state.render_elsp_index++] = value;
> + if (state.render_elsp_index < 4)
> + return;
> +
> + state.render_elsp_index = 0;
> engine = GEN_ENGINE_RENDER;
> - } else if (offset == 0x22230) {
> - blitter_elsp_writes++;
> + context_descriptor = (uint64_t)state.render_elsp[2] << 32 |
> + state.render_elsp[3];
> + break;
> + case 0x22230: /* blitter elsp */
> + state.blitter_elsp[state.blitter_elsp_index++] = value;
> + if (state.blitter_elsp_index < 4)
> + return;
> +
> + state.blitter_elsp_index = 0;
> engine = GEN_ENGINE_BLITTER;
> - } else if (offset == 0x2510) {
> - render_elsq0 = value;
> - } else if (offset == 0x22510) {
> - blitter_elsq0 = value;
> - } else if (offset == 0x2550 || offset == 0x22550) {
> - /* nothing */;
> - } else {
> + context_descriptor = (uint64_t)state.blitter_elsp[2] << 32 |
> + state.blitter_elsp[3];
> + break;
> + case 0x2510: /* render elsq0 lo */
> + state.render_elsp[3] = value;
> return;
> - }
> -
> - if (render_elsp_writes > 3 || blitter_elsp_writes > 3) {
> - render_elsp_writes = blitter_elsp_writes = 0;
> - pphwsp = (uint8_t*)gtt + (value & 0xfffff000);
> - } else if (offset == 0x2550) {
> + break;
> + case 0x2514: /* render elsq0 hi */
> + state.render_elsp[2] = value;
> + return;
> + break;
> + case 0x22510: /* blitter elsq0 lo */
> + state.blitter_elsp[3] = value;
> + return;
> + break;
> + case 0x22514: /* blitter elsq0 hi */
> + state.blitter_elsp[2] = value;
> + return;
> + break;
> + case 0x2550: /* render elsc */
> engine = GEN_ENGINE_RENDER;
> - pphwsp = (uint8_t*)gtt + (render_elsq0 & 0xfffff000);
> - } else if (offset == 0x22550) {
> + context_descriptor = (uint64_t)state.render_elsp[2] << 32 |
> + state.render_elsp[3];
> + break;
> + case 0x22550: /* blitter elsc */
> engine = GEN_ENGINE_BLITTER;
> - pphwsp = (uint8_t*)gtt + (blitter_elsq0 & 0xfffff000);
> - } else {
> + context_descriptor = (uint64_t)state.blitter_elsp[2] << 32 |
> + state.blitter_elsp[3];
> + break;
> + default:
> return;
> }
>
> const uint32_t pphwsp_size = 4096;
> - uint32_t *context = (uint32_t*)(pphwsp + pphwsp_size);
> + uint32_t *context = (uint32_t*)(gtt + (context_descriptor & 0xfffff000) + pphwsp_size);
> uint32_t ring_buffer_head = context[5];
> uint32_t ring_buffer_tail = context[7];
> uint32_t ring_buffer_start = context[9];
> --
> 2.17.1
>
More information about the mesa-dev
mailing list