Re: [igt-dev] [PATCH i-g-t 1/6] aubdump: Add gen8_map_range
From: Scott D Phillips <hidden>
Date: 2018-02-22 00:43:59
Jordan Justen [off-list ref] writes:
quoted hunk ↗ jump to hunk
This function should allow us to only write the page table entries that get used. Cc: Scott D Phillips <redacted> Signed-off-by: Jordan Justen <redacted> --- tools/aubdump.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-)diff --git a/tools/aubdump.c b/tools/aubdump.c index 700296f4..2e60e547 100644 --- a/tools/aubdump.c +++ b/tools/aubdump.c@@ -382,12 +382,40 @@ register_write_out(uint32_t addr, uint32_t value) dword_out(value); } +static void +gen8_map_range(uint64_t start, uint64_t end) +{ + uint64_t entry_addr; + uint64_t page_num; + uint64_t end_aligned = (end + 4096 - 1) & ~(4096 - 1);
end_aligned = ALIGN(end, 4096);
+ + if (start >= end) + return;
Also check (end <= 1ull << 32) (ggtt is at most 4gb)
+ entry_addr = start & ~(4096 - 1);
+ do {
+ page_num = entry_addr >> 21;
+ uint64_t last_page_entry =
+ min((page_num + 1) << 21, end_aligned);
+ uint64_t num_entries = (last_page_entry - entry_addr) >> 12;
+ mem_trace_memory_write_header_out(+ (page_num << 12) + ((entry_addr >> 9) & 0xff8),
This is a little obfuscated and comes out to equal (entry_addr >> 9) if I follow.
quoted hunk ↗ jump to hunk
+ num_entries * GEN8_PTE_SIZE, + AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT_ENTRY); + while (num_entries-- > 0) { + dword_out((entry_addr & ~(4096 - 1)) | + 3 /* read/write | present */); + dword_out(entry_addr >> 32); + entry_addr += 4096; + } + } while (entry_addr < end); +} + static void gen10_write_header(void) { char app_name[8 * 4]; int app_name_len, dwords; - uint32_t entry = 0x3; /* read/write | present */ app_name_len = snprintf(app_name, sizeof(app_name), "PCI-ID=0x%X %s", device,@@ -403,16 +431,7 @@ gen10_write_header(void) dword_out(0); /* version */ data_out(app_name, app_name_len); - /* GGTT PT */ - for (uint32_t page = 0; page < ALIGN(PT_SIZE, 4096) / 4096; page++) { - uint32_t to_write = min(PT_SIZE - page * 4096, 4096);
Might as well delete PT_SIZE as it's not used now.
- mem_trace_memory_write_header_out(page << 12, to_write,
- AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT_ENTRY);
- for (uint32_t i = 0; i < to_write / GEN8_PTE_SIZE; i++) {
- dword_out(entry + 0x1000 * i + 0x200000 * page);
- dword_out(0);
- }
- }
+ gen8_map_range(0, MEMORY_MAP_SIZE);
/* RENDER_RING */
mem_trace_memory_write_header_out(RENDER_RING_ADDR, RING_SIZE,
--
2.16.1_______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev