* [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger
@ 2019-04-08 12:26 Arkadiusz Hiler
2019-04-08 13:52 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Arkadiusz Hiler @ 2019-04-08 12:26 UTC (permalink / raw)
To: igt-dev; +Cc: Petri Latvala
Compilation support was dropped in January 2019, since then it's just a
dead code in the repo and no one seems to be missing it.
Anyway, it can always be reintroduced from the chasms of git history.
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Petri Latvala <petri.latvala@intel.com>
Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
---
README.md | 10 -
debugger/.gitignore | 2 -
debugger/debug_rdata.c | 142 ------
debugger/eudb.c | 602 -----------------------
debugger/system_routine/.gitignore | 10 -
debugger/system_routine/eviction_macro.c | 48 --
debugger/system_routine/pre_cpp.py | 126 -----
debugger/system_routine/sr.g4a | 277 -----------
debugger/system_routine/test.g4a | 64 ---
9 files changed, 1281 deletions(-)
delete mode 100644 debugger/.gitignore
delete mode 100644 debugger/debug_rdata.c
delete mode 100644 debugger/eudb.c
delete mode 100644 debugger/system_routine/.gitignore
delete mode 100644 debugger/system_routine/eviction_macro.c
delete mode 100755 debugger/system_routine/pre_cpp.py
delete mode 100644 debugger/system_routine/sr.g4a
delete mode 100644 debugger/system_routine/test.g4a
diff --git a/README.md b/README.md
index 2d583095..9be840c8 100644
--- a/README.md
+++ b/README.md
@@ -107,16 +107,6 @@ people debugging the driver.
These tools generally must be run as root, except for the ones that just
decode dumps.
-**debugger/**
-
-This tool is to be used to do shader debugging. It acts like a
-debug server accepting connections from debug clients such as
-mesa. The connections is made with unix domain sockets, and at some
-point it would be nice if this directory contained a library for
-initiating connections with debug clients..
-
-The debugger must be run as root: "sudo debugger/eudb"
-
**docs/**
Contains the automatically generated igt-gpu-tools libraries
diff --git a/debugger/.gitignore b/debugger/.gitignore
deleted file mode 100644
index 873cd273..00000000
--- a/debugger/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-debug_rdata
-eudb
diff --git a/debugger/debug_rdata.c b/debugger/debug_rdata.c
deleted file mode 100644
index 61d82d9e..00000000
--- a/debugger/debug_rdata.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Ben Widawsky <ben@bwidawsk.net>
- *
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "intel_io.h"
-#include "intel_chipset.h"
-
-struct eu_rdata {
- union {
- struct {
- uint8_t sendc_dep : 1;
- uint8_t swh_dep : 1;
- uint8_t pwc_dep : 1;
- uint8_t n2_dep : 1;
- uint8_t n1_dep : 1;
- uint8_t n0_dep : 1;
- uint8_t flag1_dep : 1;
- uint8_t flag0_dep : 1;
- uint8_t indx_dep : 1;
- uint8_t mrf_dep : 1;
- uint8_t dst_dep : 1;
- uint8_t src2_dep : 1;
- uint8_t src1_dep : 1;
- uint8_t src0_dep : 1;
- uint8_t mp_dep_pin : 1;
- uint8_t sp_dep_pin : 1;
- uint8_t fftid : 8;
- uint8_t ffid : 4;
- uint8_t instruction_valid : 1;
- uint8_t thread_status : 3;
- };
- uint32_t dword;
- } ud0;
-
- union {
- struct {
- uint8_t mrf_addr : 4;
- uint8_t dst_addr : 7;
- uint8_t src2_addr : 7;
- uint8_t src1_addr : 7;
- uint8_t src0_addr : 7;
- };
- uint32_t dword;
- } ud1;
-
- union {
- struct {
- uint16_t exip : 12;
- uint8_t opcode : 7;
- uint8_t pwc : 8;
- uint8_t instruction_valid : 1;
- uint8_t mbz : 4;
- };
- uint32_t dword;
- } ud2;
-};
-
-const char *thread_status[] =
- {"INVALID", "invalid/no thread", "standby (dependency)", "INVALID", "Executing",
- "INVALID" , "INVALID" , "INVALID"};
-
-static struct eu_rdata
-collect_rdata(int eu, int tid) {
- struct eu_rdata rdata;
-
- intel_register_write(0x7800, eu << 16 | (3 * tid) << 8);
- rdata.ud0.dword = intel_register_read(0x7840);
-
- intel_register_write(0x7800, eu << 16 | (3 * tid + 1) << 8);
- rdata.ud1.dword = intel_register_read(0x7840);
-
- intel_register_write(0x7800, eu << 16 | (3 * tid + 2) << 8);
- rdata.ud2.dword = intel_register_read(0x7840);
-
- return rdata;
-}
-static void
-print_rdata(struct eu_rdata rdata) {
- printf("\t%s\n", thread_status[rdata.ud0.thread_status]);
- printf("\tn1_dep: %d\n", rdata.ud0.n1_dep);
- printf("\tpwc_dep: %d\n", rdata.ud0.pwc_dep);
- printf("\tswh_dep: %d\n", rdata.ud0.swh_dep);
- printf("\tsource 0 %x\n", rdata.ud1.src0_addr);
- printf("\tsource 1 %x\n", rdata.ud1.src1_addr);
- printf("\tsource 2 %x\n", rdata.ud1.src2_addr);
- printf("\tdest %x\n", rdata.ud1.dst_addr);
- printf("\tmrf %x\n", rdata.ud1.mrf_addr);
- printf("\tIP: %x\n", rdata.ud2.exip);
- printf("\topcode: %x\n", rdata.ud2.opcode);
-}
-
-static void
-find_stuck_threads(void)
-{
- int i, j;
- for (i = 0; i < 15; i++)
- for (j = 0; j < 5; j++) {
- struct eu_rdata rdata;
- rdata = collect_rdata(i, j);
- if (rdata.ud0.thread_status == 2 ||
- rdata.ud0.thread_status == 4) {
- printf("%d %d:\n", i, j);
- print_rdata(rdata);
- }
- }
-}
-
-int main(int argc, char *argv[]) {
- struct pci_device *pci_dev;
- pci_dev = intel_get_pci_device();
-
- intel_register_access_init(pci_dev, 1);
- find_stuck_threads();
-// collect_rdata(atoi(argv[1]), atoi(argv[2]));
- return 0;
-}
diff --git a/debugger/eudb.c b/debugger/eudb.c
deleted file mode 100644
index 866d4b52..00000000
--- a/debugger/eudb.c
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Ben Widawsky <ben@bwidawsk.net>
- *
- * Notes:
- *
- */
-
-#include <signal.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <string.h>
-#include <strings.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <sys/un.h>
-#include <sys/socket.h>
-#include "drm.h"
-#include "i915_drm.h"
-#include "drmtest.h"
-#include "intel_chipset.h"
-#include "intel_bufmgr.h"
-#include "intel_io.h"
-#include "intel_batchbuffer.h"
-#include "intel_debug.h"
-#include "debug.h"
-
-#define EU_ATT 0x7810
-#define EU_ATT_CLR 0x7830
-
-#define RSVD_EU -1
-#define RSVD_THREAD -1
-#define RSVD_ID EUID(-1, -1, -1)
-
-enum {
- EBAD_SHMEM,
- EBAD_PROTOCOL,
- EBAD_MAGIC,
- EBAD_WRITE
-};
-
-struct debuggee {
- int euid;
- int tid;
- int fd;
- int clr;
- uint32_t reg;
-};
-
-struct debugger {
- struct debuggee *debuggees;
- int num_threads;
- int real_num_threads;
- int threads_per_eu;
-} *eu_info;
-
-drm_intel_bufmgr *bufmgr;
-struct intel_batchbuffer *batch;
-drm_intel_bo *scratch_bo;
-
-int handle;
-int drm_fd;
-int debug_fd = 0;
-const char *debug_file = "dump_debug.bin";
-int debug;
-int clear_waits;
-int shutting_down = 0;
-struct intel_debug_handshake dh;
-int force_clear = 0;
-uint32_t old_td_ctl;
-
-/*
- * The docs are wrong about the attention clear bits. The clear bits are
- * provided as part of the structure in case they change in future generations.
- */
-#define EUID(eu, td, clear) \
- { .euid = eu, .tid = td, .reg = EU_ATT, .fd = -1, .clr = clear }
-#define EUID2(eu, td, clear) \
- { .euid = eu, .tid = td, .reg = EU_ATT + 4, .fd = -1, .clr = clear }
-struct debuggee gt1_debug_ids[] = {
- RSVD_ID, RSVD_ID,
- RSVD_ID, EUID(6, 3, 28), EUID(6, 2, 27), EUID(6, 1, 26), EUID(6, 0, 25),
- RSVD_ID, EUID(5, 3, 23), EUID(5, 2, 22), EUID(5, 1, 21), EUID(5, 0, 20),
- RSVD_ID, EUID(4, 3, 18), EUID(4, 2, 17), EUID(4, 1, 16), EUID(4, 0, 15),
- RSVD_ID, EUID(2, 3, 13), EUID(2, 2, 12), EUID(2, 1, 11), EUID(2, 0, 10),
- RSVD_ID, EUID(1, 3, 8), EUID(1, 2, 7), EUID(1, 1, 6), EUID(1, 0, 5),
- RSVD_ID, EUID(0, 3, 3), EUID(0, 2, 2), EUID(0, 1, 1), EUID(0, 0, 0)
-};
-
-struct debuggee gt2_debug_ids[] = {
- EUID(8, 1, 31), EUID(8, 0, 30),
- EUID(6, 4, 29), EUID(6, 3, 28), EUID(6, 2, 27), EUID(6, 1, 26), EUID(6, 0, 25),
- EUID(5, 4, 24), EUID(5, 3, 23), EUID(5, 2, 22), EUID(5, 1, 21), EUID(5, 0, 20),
- EUID(4, 4, 19), EUID(4, 3, 18), EUID(4, 2, 17), EUID(4, 1, 16), EUID(4, 0, 15),
- EUID(2, 4, 14), EUID(2, 3, 13), EUID(2, 2, 12), EUID(2, 1, 11), EUID(2, 0, 10),
- EUID(1, 4, 9), EUID(1, 3, 8), EUID(1, 2, 7), EUID(1, 1, 6), EUID(1, 0, 5),
- EUID(0, 4, 4), EUID(0, 3, 3), EUID(0, 2, 2), EUID(0, 1, 1), EUID(0, 0, 0),
- RSVD_ID, RSVD_ID, RSVD_ID, RSVD_ID,
- EUID2(14, 4, 27), EUID2(14, 3, 26), EUID2(14, 2, 25), EUID2(14, 1, 24), EUID2(14, 0, 23),
- EUID2(13, 4, 22), EUID2(13, 3, 21), EUID2(13, 2, 20), EUID2(13, 1, 19), EUID2(13, 0, 18),
- EUID2(12, 4, 17), EUID2(12, 3, 16), EUID2(12, 2, 15), EUID2(12, 1, 14), EUID2(12, 0, 13),
- EUID2(10, 4, 12), EUID2(10, 3, 11), EUID2(10, 2, 10), EUID2(10, 1, 9), EUID2(10, 0, 8),
- EUID2(9, 4, 7), EUID2(9, 3, 6), EUID2(9, 2, 5), EUID2(9, 1, 4), EUID2(9, 0, 3),
- EUID2(8, 4, 2), EUID2(8, 3, 1), EUID2(8, 2, 0)
-};
-
-struct debugger gt1 = {
- .debuggees = gt1_debug_ids,
- .num_threads = 32,
- .real_num_threads = 24,
- .threads_per_eu = 4
-};
-
-struct debugger gt2 = {
- .debuggees = gt2_debug_ids,
- .num_threads = 64,
- .real_num_threads = 60,
- .threads_per_eu = 5
-};
-
-static void
-dump_debug(void *buf, size_t count) {
- if (!debug_fd)
- debug_fd = open(debug_file, O_CREAT | O_WRONLY | O_TRUNC, S_IRWXO);
-
- if (write(debug_fd, buf, count) == -1)
- fprintf(stderr, "Error writing to debug file: %s\n",
- strerror(errno));
-}
-
-static volatile void *
-map_debug_buffer(void) {
- int ret;
-
- ret = drm_intel_bo_map(scratch_bo, 0);
- assert(ret == 0);
- return scratch_bo->virtual;
-}
-
-static void
-unmap_debug_buffer(void) {
- drm_intel_bo_unmap(scratch_bo);
-}
-
-static int
-wait_for_attn(int timeout, int *out_bits) {
- int step = 1;
- int eus_waiting = 0;
- int i,j;
-
- if (timeout <= 0) {
- timeout = 1;
- step = 0;
- }
-
- for (i = 0; i < timeout; i += step) {
- for (j = 0; j < 8; j += 4) {
- uint32_t attn = intel_register_read(EU_ATT + j);
- if (attn) {
- int bit = 0;
- while( (bit = ffs(attn)) != 0) {
- bit--; // ffs is 1 based
- assert(bit >= 0);
- out_bits[eus_waiting] = bit + (j * 8);
- attn &= ~(1 << bit);
- eus_waiting++;
- }
- }
- }
-
- if (intel_register_read(EU_ATT + 8) ||
- intel_register_read(EU_ATT + 0xc)) {
- fprintf(stderr, "Unknown attention bits\n");
- }
-
- if (eus_waiting || shutting_down)
- break;
- }
-
- return eus_waiting;
-}
-
-#define eu_fd(bit) eu_info->debuggees[bit].fd
-#define eu_id(bit) eu_info->debuggees[bit].euid
-#define eu_tid(bit) eu_info->debuggees[bit].tid
-static struct eu_state *
-find_eu_shmem(int bit, volatile uint8_t *buf) {
- struct eu_state *eu;
- int mem_tid, mem_euid, i;
-
- for(i = 0; i < eu_info->num_threads; i++) {
- eu = (struct eu_state *)(buf + i * dh.per_thread_scratch);
- mem_tid = eu->sr0 & 0x7;
- mem_euid = (eu->sr0 >> 8) & 0xf;
- if (mem_tid == eu_tid(bit) && mem_euid == eu_id(bit))
- break;
- eu = NULL;
- }
-
- return eu;
-}
-
-#define GRF_CMP(a, b) memcmp(a, b, sizeof(grf))
-#define GRF_CPY(a, b) memcpy(a, b, sizeof(grf))
-static int
-verify(struct eu_state *eu) {
- if (GRF_CMP(eu->version, protocol_version)) {
- if (debug) {
- printf("Bad EU protocol version %x %x\n",
- ((uint32_t *)&eu->version)[0],
- DEBUG_PROTOCOL_VERSION);
- dump_debug((void *)eu, sizeof(*eu));
- }
- return -EBAD_PROTOCOL;
- }
-
- if (GRF_CMP(eu->state_magic, eu_msg)) {
- if (debug) {
- printf("Bad EU state magic %x %x\n",
- ((uint32_t *)&eu->state_magic)[0],
- ((uint32_t *)&eu->state_magic)[1]);
- dump_debug((void *)eu, sizeof(*eu));
- }
- return -EBAD_MAGIC;
- } else {
- GRF_CPY(eu->state_magic, cpu_ack);
- }
-
- eu->sr0 = RSVD_EU << 8 | RSVD_THREAD;
- return 0;
-}
-
-static int
-collect_data(int bit, volatile uint8_t *buf) {
- struct eu_state *eu;
- ssize_t num;
- int ret;
-
- assert(eu_id(bit) != RSVD_EU);
-
- if (eu_fd(bit) == -1) {
- char name[128];
- sprintf(name, "dump_eu_%02d_%d.bin", eu_id(bit), eu_tid(bit));
- eu_fd(bit) = open(name, O_CREAT | O_WRONLY | O_TRUNC, S_IRWXO);
- if (eu_fd(bit) == -1)
- return -1;
- }
-
- eu = find_eu_shmem(bit, buf);
-
- if (eu == NULL) {
- if (debug)
- printf("Bad offset %d %d\n", eu_id(bit), eu_tid(bit));
- return -EBAD_SHMEM;
- }
-
- ret = verify(eu);
- if (ret)
- return ret;
-
- num = write(eu_fd(bit), (void *)eu, sizeof(*eu));
- if (num != sizeof(*eu)) {
- perror("unhandled write failure");
- return EBAD_WRITE;
- }
-
-
- return 0;
-}
-
-static void
-clear_attn(int bit) {
-#if 0
-/*
- * This works but doesn't allow for easily changed clearing bits
- */
-static void
-clear_attn_old(int bit) {
- int bit_to_clear = bit % 32;
- bit_to_clear = 31 - bit_to_clear;
- intel_register_write(0x7830 + (bit/32) * 4, 0);
- intel_register_write(0x7830 + (bit/32) * 4, 1 << bit_to_clear);
-}
-#else
- if (!force_clear) {
- int bit_to_clear;
- bit_to_clear = eu_info->debuggees[bit].clr;
- intel_register_write(EU_ATT_CLR + (bit/32) * 4, 0);
- intel_register_write(EU_ATT_CLR + (bit/32) * 4, 1 << bit_to_clear);
- } else {
- intel_register_write(EU_ATT_CLR + 0, 0);
- intel_register_write(EU_ATT_CLR + 4, 0);
- intel_register_write(EU_ATT_CLR + 0, 0xffffffff);
- intel_register_write(EU_ATT_CLR + 4, 0xffffffff);
- }
-#endif
-}
-
-static void
-db_shutdown(int sig) {
- shutting_down = 1;
- printf("Shutting down...\n");
-}
-
-static void __attribute__((noreturn))
-die(int reason) {
- int i = 0;
-
- intel_register_write(EU_ATT_CLR, 0);
- intel_register_write(EU_ATT_CLR + 4, 0);
-
- if (debug_fd)
- close(debug_fd);
-
- for (i = 0; i < eu_info->num_threads; i++) {
- if (eu_info->debuggees[i].fd != -1)
- close(eu_info->debuggees[i].fd);
- }
-
- unmap_debug_buffer();
-
- if (old_td_ctl)
- intel_register_write(TD_CTL, old_td_ctl);
- intel_register_access_fini();
- exit(reason);
-}
-
-static int
-identify_device(int devid) {
- if (!IS_SANDYBRIDGE(devid))
- return -ENODEV;
-
- switch (intel_gt(devid)) {
- case 0:
- eu_info = >1;
- break;
- case 1:
- eu_info = >2;
- break;
- default:
- return 1;
- }
-
- return 0;
-}
-
-static void
-parse_data(const char *file_name) {
- struct eu_state *eu_state = NULL;
- struct stat st;
- int fd = -1;
- int ret, i, elements;
-
- fd = open(file_name, O_RDONLY);
- if (fd == -1) {
- perror("open");
- goto out;
- }
-
- ret = fstat(fd, &st);
- if (ret == -1) {
- perror("fstat");
- goto out;
- }
-
- elements = st.st_size / sizeof(struct eu_state);
- if (elements == 0) {
- fprintf(stderr, "File not big enough for 1 entry\n");
- goto out;
- }
-
- eu_state = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (eu_state == MAP_FAILED) {
- perror("mmap");
- goto out;
- }
-
- for(i = 0; i < elements; i++) {
- printf("AIP: ");
- printf("%x\n", ((uint32_t *)eu_state[i].cr0)[2]);
- }
-out:
- if (eu_state)
- munmap(eu_state, st.st_size);
- if (fd != -1)
- close(fd);
-}
-
-static int
-wait_for_scratch_bo(void) {
- struct sockaddr_un addr;
- uint32_t version;
- int fd, ret, dh_handle = -1;
-
- assert(sizeof(version) == sizeof(dh.version));
-
- fd = socket(AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- return -1;
-
- /* Clean up previous runs */
- remove(SHADER_DEBUG_SOCKET);
-
- memset(&addr, 0, sizeof(addr));
- addr.sun_family = AF_UNIX;
- strncpy(addr.sun_path, SHADER_DEBUG_SOCKET, sizeof(addr.sun_path) - 1);
-
- ret = bind(fd, (const struct sockaddr *)&addr, sizeof(addr));
- if (ret == -1) {
- perror("listen");
- return -1;
- }
-
- ret = listen(fd, 1);
- if (ret == -1) {
- perror("listen");
- goto done;
- }
-
- while(1) {
- int client_fd;
- size_t count;
- char ack[] = DEBUG_HANDSHAKE_ACK;
-
- client_fd = accept(fd, NULL, NULL);
- if (client_fd == -1) {
- perror("accept");
- goto done;
- }
-
- count = read(client_fd, &version, sizeof(version));
- if (count != sizeof(version)) {
- perror("read version");
- goto loop_out;
- }
-
- if (version != DEBUG_HANDSHAKE_VERSION) {
- fprintf(stderr, "Bad debug handshake\n");
- goto loop_out;
- }
-
- count = read(client_fd, ((char *)&dh) + 1, sizeof(dh) - 1);
- if (count != sizeof(dh) - 1) {
- perror("read handshake");
- goto loop_out;
- }
-
- count = write(client_fd, ack, sizeof(ack));
- if (count != sizeof(ack)) {
- perror("write ack");
- goto loop_out;
- }
- dh_handle = dh.flink_handle;
- if (debug > 0) {
- printf("Handshake completed successfully\n"
- "\tprotocol version = %d\n"
- "\tflink handle = %d\n"
- "\tper thread scratch = %x\n", version,
- dh.flink_handle, dh.per_thread_scratch);
- }
-
- loop_out:
- close(client_fd);
- break;
- }
-
-done:
- close(fd);
- return dh_handle;
-}
-
-static void
-setup_hw_bits(void)
-{
- intel_register_write(INST_PM, GEN6_GLOBAL_DEBUG_ENABLE |
- GEN6_GLOBAL_DEBUG_ENABLE << 16);
- old_td_ctl = intel_register_read(GEN6_TD_CTL);
- intel_register_write(GEN6_TD_CTL, GEN6_TD_CTL_FORCE_TD_BKPT);
-}
-
-int main(int argc, char* argv[]) {
- struct pci_device *pci_dev;
- volatile uint8_t *scratch = NULL;
- int bits[64];
- int devid = -1, opt;
-
- while ((opt = getopt(argc, argv, "cdr:pf?h")) != -1) {
- switch (opt) {
- case 'c':
- clear_waits = 1;
- break;
- case 'd':
- debug = 1;
- break;
- case 'r':
- parse_data(optarg);
- exit(0);
- break;
- case 'p':
- devid = atoi(optarg);
- break;
- case 'f':
- force_clear = 1;
- break;
- case '?':
- case 'h':
- default:
- exit(0);
- }
- }
-
- pci_dev = intel_get_pci_device();
- if (devid == -1)
- devid = pci_dev->device_id;
- if (identify_device(devid)) {
- abort();
- }
-
- assert(intel_register_access_init(pci_dev, 1) == 0);
-
- memset(bits, -1, sizeof(bits));
- /*
- * These events have to occur before the SR runs, or we need
- * non-blocking versions of the functions.
- */
- if (!clear_waits) {
- int dh_handle;
- drm_fd = drm_open_driver(DRIVER_INTEL);
- bufmgr = drm_intel_bufmgr_gem_init(drm_fd, 4096);
-
- setup_hw_bits();
-
- /* We are probably root, make files world friendly */
- umask(0);
- dh_handle = wait_for_scratch_bo();
- if (dh_handle == -1) {
- printf("No handle from mesa, please enter manually: ");
- if (fscanf(stdin, "%1d", &dh_handle) == 0)
- exit(1);
- }
- scratch_bo = intel_bo_gem_create_from_name(bufmgr, "scratch", dh_handle);
- if (scratch_bo == NULL) {
- fprintf(stderr, "Couldn't flink buffer\n");
- abort();
- }
- signal(SIGINT, db_shutdown);
- printf("Press Ctrl-C to stop\n");
- } else {
- int time = force_clear ? 0 : 20000;
- while (wait_for_attn(time, bits)) {
- clear_attn(bits[0]);
- memset(bits, -1, sizeof(bits));
- }
- die(0);
- }
-
- scratch = map_debug_buffer();
- while (shutting_down == 0) {
- int num_events, i;
-
- memset(bits, -1, sizeof(bits));
- num_events = wait_for_attn(-1, bits);
- if (num_events == 0)
- break;
-
- for (i = 0; i < num_events; i++) {
- assert(bits[i] < 64 && bits[i] >= 0);
- if (collect_data(bits[i], scratch)) {
- bits[i] = -1;
- continue;
- }
- clear_attn(bits[i]);
- }
- }
-
- die(0);
- return 0;
-}
diff --git a/debugger/system_routine/.gitignore b/debugger/system_routine/.gitignore
deleted file mode 100644
index d19500cf..00000000
--- a/debugger/system_routine/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-evict.h
-eviction_macro
-sr
-sr.asm
-sr.c
-sr.cpp
-tiny
-tiny.asm
-tiny.c
-tiny.cpp
diff --git a/debugger/system_routine/eviction_macro.c b/debugger/system_routine/eviction_macro.c
deleted file mode 100644
index 1da22332..00000000
--- a/debugger/system_routine/eviction_macro.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Ben Widawsky <ben@bwidawsk.net>
- *
- */
-
-#include <stdio.h>
-
-#define START 0x100
-#define END ((128 << 10) / 4)
-
-int main(int argc, char *argv[]) {
- int i;
- printf("#ifdef SANDYBRIDGE\n");
- printf("#define EVICT_CACHE \\\n");
- printf("\tmov (1) m0.5:ud g0.5:ud FLAGS; \\\n");
- for (i = START; i < END - 8; i+=0x8) {
- printf("\tmov (1) m0.2:ud 0x%04x:ud FLAGS; \\\n", i);
- printf("\tWRITE_SCRATCH4(m0); \\\n");
- }
-
- printf("\tmov (1) m0.2:ud 0x%04x:ud FLAGS; \\\n", i);
- printf("\tWRITE_SCRATCH4(m0)\n");
- printf("#else\n");
- printf("#define EVICT_CACHE\n");
- printf("#endif\n");
-}
diff --git a/debugger/system_routine/pre_cpp.py b/debugger/system_routine/pre_cpp.py
deleted file mode 100755
index 584d2af0..00000000
--- a/debugger/system_routine/pre_cpp.py
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright © 2011 Intel Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-#
-# Authors:
-# Ben Widawsky <ben@bwidawsk.net>
-
-#very limited C-like preprocessor
-
-#limitations:
-# no macro substitutions
-# no multiline definitions
-# divide operator is //
-
-import sys,re
-
-# make sure both input file and stdout are handled as utf-8 text, regardless
-# of current locale (eg. LANG=C which tells python to use ascii encoding)
-sys.stdout = open(sys.__stdout__.fileno(), "a", encoding="utf-8")
-file = open(sys.argv[1], "r", encoding="utf-8")
-
-lines = file.readlines()
-len(lines)
-out = dict()
-defines = dict()
-
-count = 0
-#create a dict for our output
-for line in lines:
- out[count] = line
- count = count + 1
-
-#done is considered #define <name> <number>
-def is_done(string):
- m = re.match("#define\s+(\w+?)\s+([a-fA-F0-9\-]+?)\s*$", string)
- return m
-
-#skip macros, the real cpp will handle it
-def skip(string):
- #macro
- m = re.match("#define\s+\w+\(.+", string)
- return m != None
-
-#put contants which are done being evaluated into the dictionary
-def easy_constants():
- ret = 0
- for lineno, string in out.items():
- if skip(string):
- continue
- m = is_done(string)
- if m != None:
- key = m.group(1)
- value = m.group(2)
- if not key in defines:
- defines[key] = int(eval(value))
- ret = 1
- return ret
-
-#replace names with dictionary values
-def simple_replace():
- ret = 0
- for lineno, string in out.items():
- if skip(string):
- continue
- for key, value in defines.items():
- if is_done(string):
- continue
- s = re.subn(key, repr(value), string)
- if s[1] > 0:
- out[lineno] = s[0]
- ret = s[1]
- return ret
-
-#evaluate expressions to try to simplify them
-def collapse_constants():
- ret = 0
- for lineno, string in out.items():
- if skip(string):
- continue
- if is_done(string):
- continue
- m = re.match("#define\s+(.+?)\s+(.+)$", string)
- if m != None:
- try:
- out[lineno] = "#define " + m.group(1) + " " + repr(eval(m.group(2)))
- ret = 1
- except NameError as ne:
- #this happens before a variable is resolved in simple_replace
- continue
- except SyntaxError:
- #this happens with something like #define foo bar, which the
- #regular cpp can handle
- continue
- except:
- raise KeyboardInterrupt
- return ret;
-
-while True:
- ret = 0
- ret += easy_constants()
- ret += simple_replace()
- ret += collapse_constants()
- if ret == 0:
- break;
-
-for lineno, string in out.items():
- print(string.rstrip())
diff --git a/debugger/system_routine/sr.g4a b/debugger/system_routine/sr.g4a
deleted file mode 100644
index a70e7712..00000000
--- a/debugger/system_routine/sr.g4a
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Ben Widawsky <ben@bwidawsk.net>
- *
- */
-
-#include "debug.h"
-#include "evict.h"
-
-#define CR0_0_ME_STATE_CTRL (1 << 31)
-#define CR0_0_BP_SUPPRESS (1 << 15)
-#define CR0_0_SPF_EN (1 << 2)
-#define CR0_0_ACC_DIS (1 << 1)
-#define CR0_1_BES_CTRL (1 << 31)
-#define CR0_1_HALT_CTRL (1 << 30)
-#define CR0_1_SOFT_EXCEPTION_CTRL (1 << 29)
-#define CR0_1_ILLGL_OP_STS (1 << 28)
-#define CR0_1_STACK_OVRFLW_STS (1 << 27)
-
-#define CR0_0_ENTRY_UNMASK (CR0_0_SPF_EN | CR0_0_ACC_DIS)
-// TODO: Need to fix this for non breakpoint case
-#define CR0_1_ENTRY_UNMASK ~(CR0_1_BES_CTRL)
-#define CR0_0_RETURN_MASK ~(CR0_0_ME_STATE_CTRL | CR0_0_SPF_EN | CR0_0_ACC_DIS)
-
-// TODO: not sure how to make this not hardcoded
-#define PER_THREAD_SCRATCH_SIZE (1 << 20)
-#define PER_THREAD_QWORDS (PER_THREAD_SCRATCH_SIZE >> 4)
-
-/* Should get this from brw_defines.h */
-#define BRW_DATAPORT_OWORD_BLOCK_2_OWORDS 2
-#define BRW_DATAPORT_OWORD_BLOCK_4_OWORDS 3
-#define BRW_DATAPORT_OWORD_BLOCK_8_OWORDS 4
-#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 8
-#define BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ 0
-
-/* desc field, ie. dword3 6.3.66.2 and 2.11.2.1.4 */
-#define SEND_MLEN_5 (5<<25)
-#define SEND_MLEN_3 (3<<25)
-#define SEND_MLEN_2 (2<<25)
-#define SEND_MLEN_1 (1<<25)
-#define SEND_RLEN_1 (1<<20)
-#define SEND_RLEN_0 (0<<20)
-#define SEND_HEADER_PRESENT (1<<19)
-#define SEND_WRITE_COMMIT (1<<17)
-#define SEND_TYPE_WRITE (GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE<<13)
-#define SEND_TYPE_READ (BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ<<13)
-#define SEND_BLOCK_SIZE1 (BRW_DATAPORT_OWORD_BLOCK_2_OWORDS<<8)
-#define SEND_BLOCK_SIZE2 (BRW_DATAPORT_OWORD_BLOCK_4_OWORDS<<8)
-#define SEND_BLOCK_SIZE4 (BRW_DATAPORT_OWORD_BLOCK_8_OWORDS<<8)
-#define SEND_BINDING_TABLE (255<<0)
-// No write commit
-#define WRITE_DESC1_XXX SEND_BINDING_TABLE | SEND_BLOCK_SIZE1 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_2
-#define WRITE_DESC1_WC SEND_BINDING_TABLE | SEND_BLOCK_SIZE1 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_2 | SEND_WRITE_COMMIT
-#define WRITE_DESC2 SEND_BINDING_TABLE | SEND_BLOCK_SIZE2 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_3
-#define WRITE_DESC4 SEND_BINDING_TABLE | SEND_BLOCK_SIZE4 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_5
-#define RECV_DESC1 SEND_BINDING_TABLE | SEND_BLOCK_SIZE1 | SEND_TYPE_READ | SEND_HEADER_PRESENT | SEND_MLEN_1 | SEND_RLEN_1
-//#define SEND_DESC1 0x40902FF
-#define SEND_DESC1_WC 0x40b02FF
-
-/* ex_desc field 6.3.66.2 */
-#define SEND_DP_RENDER_CACHE (5<<0)
-#define SEND_EOT (1<<5)
-#define SEND_EX_DESC SEND_DP_RENDER_CACHE
-
-/**
- * WRITE_SCRATCH1 - Write 2 owords.
- * cdst.2 - offset
- * cdst.5 - per thread scratch base, relative to gsba??
- * cdst+1 - data to be written.
- */
-#define WRITE_SCRATCH1(cdst) \
- send (16) null cdst SEND_EX_DESC WRITE_DESC1_XXX FLAGS
-#define WRITE_SCRATCH1_WC(cdst) \
- send (16) g1 cdst SEND_EX_DESC WRITE_DESC1_WC FLAGS
-#define WRITE_SCRATCH2(cdst) \
- send (16) null cdst SEND_EX_DESC WRITE_DESC2 FLAGS
-#define WRITE_SCRATCH4(cdst) \
- send (16) null cdst SEND_EX_DESC WRITE_DESC4 FLAGS
-
-/**
- * READ_SCRATCH1 - Read 2 owords.
- * cdst.2 - offset
- * cdst.5 - per thread scratch base, relative to gsba??
- * grf - register where read data is populated.
- */
-#define READ_SCRATCH1(grf, cdst) \
- send (16) grf:ud cdst SEND_EX_DESC RECV_DESC1 FLAGS
-
-/**
- * SET_OFFSET - setup mrf for the given offset prior to a send instruction.
- * mrf - message register to be used as the header.
- * offset - offset.
- *
- * If a WRITE_SCRATCH follows, mrf+1 -> mrf+1+n should contain the data to be
- * written.
- */
-#define SET_OFFSET(mrf, offset) \
- mov (1) mrf.5:ud g0.5:ud FLAGS; \
- mov (1) mrf.2:ud offset:ud FLAGS
-
-/**
- * SAVE_CRF - save the control register
- * clobbers: m0.2, m0.5
- */
-#define CR_OFFSET 0x40
-#define SAVE_CRF \
- SET_OFFSET(m0, CR_OFFSET); \
- mov (8) m1:ud 0xdeadbeef:ud FLAGS; \
- mov (1) m1.0:ud cr0.0 FLAGS; \
- mov (1) m1.1:ud cr0.1 FLAGS; \
- mov (1) m1.2:ud cr0.2 FLAGS; \
- mov (1) m1.3:ud sr0:ud FLAGS; \
- WRITE_SCRATCH1(m0)
-
-/*
- * clobbers: m0.2, m0.5
- */
-#define STORE_GRF(grf, offset) \
- SET_OFFSET(m0, offset); \
- mov (8) m1:ud grf:ud FLAGS; \
- WRITE_SCRATCH1(m0)
-
-/*
- * clobbers: m0.2, m0.5
- */
-#define LOAD_GRF(grf, offset) \
- SET_OFFSET(m0, offset); \
- READ_SCRATCH1(grf, m0)
-
-/*
- * clobbers: mrf.2 mrf.5
- */
-#define STORE_MRF(mrf, offset) \
- SET_OFFSET(mrf, offset); \
- WRITE_SCRATCH1(mrf)
-
-/*
- * non-quirky semantics, unlike STORE_MRF
- * clobbers: g1
- */
-#define LOAD_MRF(mrf, offset) \
- LOAD_GRF(g1, offset); \
- mov (8) mrf:ud g1:ud FLAGS
-
-#define SAVE_ALL_MRF \
- /* m1 is saved already */ \
- STORE_MRF(m1, 0x2); \
- STORE_MRF(m2, 0x4); \
- STORE_MRF(m3, 0x6); \
- STORE_MRF(m4, 0x8); \
- STORE_MRF(m5, 0xa); \
- STORE_MRF(m6, 0xc); \
- STORE_MRF(m7, 0xe); \
- STORE_MRF(m8, 0x10); \
- STORE_MRF(m9, 0x12); \
- STORE_MRF(m10, 0x14); \
- STORE_MRF(m11, 0x16); \
- STORE_MRF(m12, 0x18); \
- STORE_MRF(m13, 0x1a); \
- STORE_MRF(m14, 0x1c)
-
-#define RESTORE_ALL_MRF \
- LOAD_MRF(m15, 0x1c); \
- LOAD_MRF(m14, 0x1a); \
- LOAD_MRF(m13, 0x18); \
- LOAD_MRF(m12, 0x16); \
- LOAD_MRF(m11, 0x14); \
- LOAD_MRF(m10, 0x12); \
- LOAD_MRF(m9, 0x10); \
- LOAD_MRF(m8, 0xe); \
- LOAD_MRF(m7, 0xc); \
- LOAD_MRF(m6, 0xa); \
- LOAD_MRF(m5, 0x8); \
- LOAD_MRF(m4, 0x6); \
- LOAD_MRF(m3, 0x4); \
- LOAD_MRF(m2, 0x2); \
- LOAD_MRF(m1, 0x0)
-
-#ifndef SANDYBRIDGE
- #error Only SandyBridge is supported
-#endif
-
-/* Default flags for an instruction */
-#define FLAGS { ALIGN1, SWITCH, MASK_DISABLE, ACCWRCTRL}
-
-/*
- * We can clobber m0, and g0.4, everything else must be saved.
- */
-Enter:
- nop;
-
- or (1) cr0.0 cr0.0 CR0_0_ENTRY_UNMASK:ud FLAGS;
-
- /*
- * g0.5 has the per thread scratch space when running in FS or VS.
- * If we don't have a valid g0.5, we can calculate a per thread scratch offset
- * using the system registers. The problem is we do not have a good way to know
- * the offset from GSBA. The system routine will have to be hardcoded or
- * dynamically patched with the correct offset.
- * TID is in sr0.0[2:0]
- * EUID is in sr0.0[11:8]
- */
-
-#ifdef GPGPU
- mov (1) g0.4:ud 0:ud FLAGS;
-#if 0
- /* This should work according to the docs, the add blows up */
- shr (1) g0.8:uw sr0.0:uw 5 FLAGS;
- add (1) g0.16:ub gr0.16:ub sr0.0:ub FLAGS;
-#else
- shr (1) g0.8:uw sr0.0:uw 5 FLAGS;
- mov (1) g0.9:uw sr0.0:uw FLAGS;
- and (1) g0.9:uw g0.9:uw 0x7:uw FLAGS;
- add (1) g0.8:uw g0.8:uw g0.9:uw FLAGS;
- mov (1) g0.9:uw 0:uw FLAGS;
- mul (1) g0.4:ud g0.4:ud PER_THREAD_QWORDS FLAGS;
-#endif
-#endif
-
- mov (8) m0:ud 0:ud FLAGS;
-
- /* Saves must occur in order so as not to clobber the next register */
- STORE_MRF(m0, 0);
- STORE_GRF(g0, 0x20);
- STORE_GRF(g1, 0x22);
- SAVE_ALL_MRF;
-
- mov (8) g1:ud STATE_EU_MSG:ud FLAGS;
- STORE_GRF(g1, STATE_QWORD);
-
- mov (8) g1:ud DEBUG_PROTOCOL_VERSION:ud FLAGS;
- STORE_GRF(g1, COMMUNICATION_QWORD);
-
- SAVE_CRF;
-
- EVICT_CACHE;
- wait n1:ud;
- EVICT_CACHE;
-
- /* Using this to try to keep coherency */
- LOAD_GRF(g1, CR_OFFSET);
- LOAD_GRF(g1, COMMUNICATION_QWORD);
- LOAD_GRF(g1, STATE_QWORD);
-
- RESTORE_ALL_MRF;
- LOAD_GRF(g1, 0x22);
- LOAD_GRF(g0, 0x20);
-
- /* Clear breakpoint status */
- and (1) cr0.1 cr0.1 CR0_1_ENTRY_UNMASK:ud FLAGS;
-
- /* set breakpoint suppress this should be conditional on bes */
- or (1) cr0.0 cr0.0 CR0_0_BP_SUPPRESS:ud FLAGS;
-
- and (1) cr0.0 cr0.0 CR0_0_RETURN_MASK:ud FLAGS;
- nop;
diff --git a/debugger/system_routine/test.g4a b/debugger/system_routine/test.g4a
deleted file mode 100644
index e4296e01..00000000
--- a/debugger/system_routine/test.g4a
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright © 2011 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- *
- * Authors:
- * Ben Widawsky <ben@bwidawsk.net>
- *
- */
-
-#include "debug.h"
-
-#define CR0_0_ME_STATE_CTRL (1 << 31)
-#define CR0_0_BP_SUPPRESS (1 << 15)
-#define CR0_0_SPF_EN (1 << 2)
-#define CR0_0_ACC_DIS (1 << 1)
-#define CR0_1_BES_CTRL (1 << 31)
-#define CR0_1_HALT_CTRL (1 << 30)
-#define CR0_1_SOFT_EXCEPTION_CTRL (1 << 29)
-#define CR0_1_ILLGL_OP_STS (1 << 28)
-#define CR0_1_STACK_OVRFLW_STS (1 << 27)
-
-#define CR0_0_ENTRY_UNMASK (CR0_0_SPF_EN | CR0_0_ACC_DIS)
-// TODO: Need to fix this for non breakpoint case
-#define CR0_1_ENTRY_UNMASK ~(CR0_1_BES_CTRL)
-#define CR0_0_RETURN_MASK ~(CR0_0_ME_STATE_CTRL | CR0_0_SPF_EN | CR0_0_ACC_DIS)
-
-#ifndef SANDYBRIDGE
- #error Only SandyBridge is supported
-#endif
-
-/* Default flags for an instruction */
-#define FLAGS { ALIGN1, SWITCH, MASK_DISABLE, ACCWRCTRL}
-
-Enter:
- nop;
-
- or (1) cr0.0 cr0.0 CR0_0_ENTRY_UNMASK:ud FLAGS;
-
- /* Clear breakpoint status */
- and (1) cr0.1 cr0.1 CR0_1_ENTRY_UNMASK:ud FLAGS;
-
- /* set breakpoint suppress this should be conditional on bes */
- or (1) cr0.0 cr0.0 CR0_0_BP_SUPPRESS:ud FLAGS;
-
- and (1) cr0.0 cr0.0 CR0_0_RETURN_MASK:ud FLAGS;
- nop;
--
2.20.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 4+ messages in thread* [igt-dev] ✓ Fi.CI.BAT: success for debugger: Remove shader debugger 2019-04-08 12:26 [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger Arkadiusz Hiler @ 2019-04-08 13:52 ` Patchwork 2019-04-08 16:47 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 2019-04-10 10:32 ` [igt-dev] [PATCH i-g-t] " Petri Latvala 2 siblings, 0 replies; 4+ messages in thread From: Patchwork @ 2019-04-08 13:52 UTC (permalink / raw) To: Arkadiusz Hiler; +Cc: igt-dev == Series Details == Series: debugger: Remove shader debugger URL : https://patchwork.freedesktop.org/series/59171/ State : success == Summary == CI Bug Log - changes from CI_DRM_5888 -> IGTPW_2814 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://patchwork.freedesktop.org/api/1.0/series/59171/revisions/1/mbox/ Known issues ------------ Here are the changes found in IGTPW_2814 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_selftest@live_hangcheck: - fi-bxt-dsi: PASS -> INCOMPLETE [fdo#103927] * igt@i915_selftest@live_uncore: - fi-ivb-3770: PASS -> DMESG-FAIL [fdo#110210] * igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size: - fi-glk-dsi: PASS -> INCOMPLETE [fdo#103359] / [k.org#198133] * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a: - fi-byt-clapper: PASS -> FAIL [fdo#103191] / [fdo#107362] +1 [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191 [fdo#103359]: https://bugs.freedesktop.org/show_bug.cgi?id=103359 [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927 [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362 [fdo#110210]: https://bugs.freedesktop.org/show_bug.cgi?id=110210 [k.org#198133]: https://bugzilla.kernel.org/show_bug.cgi?id=198133 Participating hosts (50 -> 44) ------------------------------ Missing (6): fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-icl-u2 fi-ctg-p8600 fi-bdw-samus Build changes ------------- * IGT: IGT_4932 -> IGTPW_2814 CI_DRM_5888: 381350f19ba1844d34105890169b1f1443f45879 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_2814: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2814/ IGT_4932: 08cf63a8fac11e3594b57580331fb319241a0d69 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2814/ _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for debugger: Remove shader debugger 2019-04-08 12:26 [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger Arkadiusz Hiler 2019-04-08 13:52 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork @ 2019-04-08 16:47 ` Patchwork 2019-04-10 10:32 ` [igt-dev] [PATCH i-g-t] " Petri Latvala 2 siblings, 0 replies; 4+ messages in thread From: Patchwork @ 2019-04-08 16:47 UTC (permalink / raw) To: Arkadiusz Hiler; +Cc: igt-dev == Series Details == Series: debugger: Remove shader debugger URL : https://patchwork.freedesktop.org/series/59171/ State : success == Summary == CI Bug Log - changes from CI_DRM_5888_full -> IGTPW_2814_full ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://patchwork.freedesktop.org/api/1.0/series/59171/revisions/1/mbox/ Known issues ------------ Here are the changes found in IGTPW_2814_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_parallel@contexts: - shard-hsw: PASS -> INCOMPLETE [fdo#103540] * igt@gem_exec_store@pages-bsd1: - shard-iclb: NOTRUN -> SKIP [fdo#109276] +5 * igt@gem_linear_blits@interruptible: - shard-iclb: PASS -> TIMEOUT [fdo#109673] * igt@gem_ppgtt@blt-vs-render-ctx0: - shard-iclb: PASS -> INCOMPLETE [fdo#109801] * igt@gem_pread@pagefault-pread: - shard-iclb: NOTRUN -> SKIP [fdo#109277] +1 * igt@gem_pwrite@huge-gtt-forwards: - shard-iclb: NOTRUN -> SKIP [fdo#109290] * igt@gem_tiled_swapping@non-threaded: - shard-iclb: PASS -> FAIL [fdo#108686] - shard-hsw: PASS -> FAIL [fdo#108686] * igt@i915_pm_rpm@universal-planes: - shard-iclb: PASS -> INCOMPLETE [fdo#108840] * igt@i915_selftest@live_workarounds: - shard-iclb: PASS -> DMESG-FAIL [fdo#108954] * igt@kms_atomic_transition@2x-modeset-transitions-nonblocking: - shard-iclb: NOTRUN -> SKIP [fdo#109280] +9 * igt@kms_atomic_transition@3x-modeset-transitions: - shard-kbl: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +3 * igt@kms_atomic_transition@6x-modeset-transitions: - shard-iclb: NOTRUN -> SKIP [fdo#109278] +6 * igt@kms_busy@extended-modeset-hang-oldfb-render-e: - shard-apl: NOTRUN -> SKIP [fdo#109271] / [fdo#109278] +11 * igt@kms_chamelium@hdmi-cmp-yu16: - shard-iclb: NOTRUN -> SKIP [fdo#109284] +1 * igt@kms_chamelium@hdmi-edid-change-during-suspend: - shard-apl: NOTRUN -> SKIP [fdo#109271] +158 * igt@kms_content_protection@atomic-dpms: - shard-apl: NOTRUN -> FAIL [fdo#110321] / [fdo#110336] +1 * igt@kms_cursor_crc@cursor-512x512-offscreen: - shard-iclb: NOTRUN -> SKIP [fdo#109279] * igt@kms_cursor_legacy@cursor-vs-flip-varying-size: - shard-iclb: PASS -> FAIL [fdo#103355] +2 * igt@kms_flip@2x-flip-vs-fences: - shard-iclb: NOTRUN -> SKIP [fdo#109274] +4 * igt@kms_force_connector_basic@prune-stale-modes: - shard-iclb: NOTRUN -> SKIP [fdo#109285] * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-plflip-blt: - shard-iclb: NOTRUN -> FAIL [fdo#103167] * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render: - shard-glk: PASS -> FAIL [fdo#103167] * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite: - shard-iclb: PASS -> FAIL [fdo#103167] +2 * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-mmap-wc: - shard-kbl: NOTRUN -> SKIP [fdo#109271] +12 * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-render: - shard-iclb: PASS -> FAIL [fdo#105682] / [fdo#109247] * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt: - shard-iclb: NOTRUN -> FAIL [fdo#109247] +1 * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-blt: - shard-iclb: PASS -> FAIL [fdo#109247] +9 * igt@kms_plane@pixel-format-pipe-a-planes-source-clamping: - shard-glk: PASS -> SKIP [fdo#109271] * igt@kms_plane_alpha_blend@pipe-a-alpha-7efc: - shard-apl: NOTRUN -> FAIL [fdo#108145] +4 * igt@kms_plane_alpha_blend@pipe-b-alpha-basic: - shard-kbl: NOTRUN -> FAIL [fdo#108145] / [fdo#108590] * igt@kms_psr@no_drrs: - shard-iclb: PASS -> FAIL [fdo#108341] * igt@kms_psr@psr2_sprite_blt: - shard-iclb: NOTRUN -> SKIP [fdo#109441] * igt@kms_psr@sprite_blt: - shard-iclb: PASS -> FAIL [fdo#107383] / [fdo#110215] +2 * igt@kms_setmode@basic: - shard-kbl: PASS -> FAIL [fdo#99912] * igt@kms_vblank@pipe-c-ts-continuation-modeset-hang: - shard-apl: PASS -> FAIL [fdo#104894] * igt@perf@blocking: - shard-iclb: PASS -> FAIL [fdo#108587] * igt@prime_nv_api@i915_self_import: - shard-glk: NOTRUN -> SKIP [fdo#109271] +5 * igt@prime_nv_pcopy@test3_2: - shard-iclb: NOTRUN -> SKIP [fdo#109291] * igt@tools_test@sysfs_l3_parity: - shard-iclb: NOTRUN -> SKIP [fdo#109307] #### Possible fixes #### * igt@gem_tiled_pread_pwrite: - shard-iclb: TIMEOUT [fdo#109673] -> PASS * igt@i915_pm_rpm@system-suspend-devices: - shard-iclb: DMESG-WARN [fdo#109638] -> PASS * igt@kms_color@pipe-a-ctm-max: - shard-kbl: FAIL [fdo#108147] -> PASS * igt@kms_cursor_crc@cursor-64x64-sliding: - shard-apl: FAIL [fdo#103232] -> PASS - shard-kbl: FAIL [fdo#103232] -> PASS * igt@kms_cursor_legacy@cursor-vs-flip-atomic-transitions-varying-size: - shard-iclb: FAIL [fdo#103355] -> PASS * igt@kms_fbcon_fbt@fbc: - shard-iclb: DMESG-WARN [fdo#109593] -> PASS * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible: - shard-glk: FAIL [fdo#105363] -> PASS +1 * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-plflip-blt: - shard-glk: FAIL [fdo#103167] -> PASS * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt: - shard-iclb: FAIL [fdo#109247] -> PASS +19 * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw: - shard-iclb: FAIL [fdo#103167] -> PASS * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc: - shard-iclb: FAIL [fdo#105682] / [fdo#109247] -> PASS * igt@kms_plane_scaling@pipe-c-scaler-with-clipping-clamping: - shard-iclb: INCOMPLETE [fdo#110041] -> PASS * igt@kms_psr@psr2_primary_page_flip: - shard-iclb: SKIP [fdo#109441] -> PASS * igt@kms_psr@sprite_mmap_gtt: - shard-iclb: FAIL [fdo#107383] / [fdo#110215] -> PASS +6 * igt@kms_rotation_crc@multiplane-rotation: - shard-kbl: INCOMPLETE [fdo#103665] -> PASS +1 * igt@kms_rotation_crc@primary-rotation-270: - shard-iclb: FAIL [fdo#103925] -> PASS * igt@kms_setmode@basic: - shard-apl: FAIL [fdo#99912] -> PASS * igt@kms_vblank@pipe-b-ts-continuation-modeset-rpm: - shard-kbl: FAIL [fdo#104894] -> PASS +1 * igt@kms_vblank@pipe-b-ts-continuation-suspend: - shard-iclb: FAIL [fdo#104894] -> PASS * igt@perf_pmu@rc6: - shard-kbl: SKIP [fdo#109271] -> PASS #### Warnings #### * igt@runner@aborted: - shard-glk: FAIL [fdo#109373] / [k.org#202321] -> ( 2 FAIL ) [fdo#109373] / [k.org#202321] [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167 [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232 [fdo#103355]: https://bugs.freedesktop.org/show_bug.cgi?id=103355 [fdo#103540]: https://bugs.freedesktop.org/show_bug.cgi?id=103540 [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665 [fdo#103925]: https://bugs.freedesktop.org/show_bug.cgi?id=103925 [fdo#104894]: https://bugs.freedesktop.org/show_bug.cgi?id=104894 [fdo#105363]: https://bugs.freedesktop.org/show_bug.cgi?id=105363 [fdo#105682]: https://bugs.freedesktop.org/show_bug.cgi?id=105682 [fdo#107383]: https://bugs.freedesktop.org/show_bug.cgi?id=107383 [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145 [fdo#108147]: https://bugs.freedesktop.org/show_bug.cgi?id=108147 [fdo#108341]: https://bugs.freedesktop.org/show_bug.cgi?id=108341 [fdo#108587]: https://bugs.freedesktop.org/show_bug.cgi?id=108587 [fdo#108590]: https://bugs.freedesktop.org/show_bug.cgi?id=108590 [fdo#108686]: https://bugs.freedesktop.org/show_bug.cgi?id=108686 [fdo#108840]: https://bugs.freedesktop.org/show_bug.cgi?id=108840 [fdo#108954]: https://bugs.freedesktop.org/show_bug.cgi?id=108954 [fdo#109247]: https://bugs.freedesktop.org/show_bug.cgi?id=109247 [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271 [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274 [fdo#109276]: https://bugs.freedesktop.org/show_bug.cgi?id=109276 [fdo#109277]: https://bugs.freedesktop.org/show_bug.cgi?id=109277 [fdo#109278]: https://bugs.freedesktop.org/show_bug.cgi?id=109278 [fdo#109279]: https://bugs.freedesktop.org/show_bug.cgi?id=109279 [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280 [fdo#109284]: https://bugs.freedesktop.org/show_bug.cgi?id=109284 [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285 [fdo#109290]: https://bugs.freedesktop.org/show_bug.cgi?id=109290 [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291 [fdo#109307]: https://bugs.freedesktop.org/show_bug.cgi?id=109307 [fdo#109373]: https://bugs.freedesktop.org/show_bug.cgi?id=109373 [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [fdo#109593]: https://bugs.freedesktop.org/show_bug.cgi?id=109593 [fdo#109638]: https://bugs.freedesktop.org/show_bug.cgi?id=109638 [fdo#109673]: https://bugs.freedesktop.org/show_bug.cgi?id=109673 [fdo#109801]: https://bugs.freedesktop.org/show_bug.cgi?id=109801 [fdo#110041]: https://bugs.freedesktop.org/show_bug.cgi?id=110041 [fdo#110215]: https://bugs.freedesktop.org/show_bug.cgi?id=110215 [fdo#110321]: https://bugs.freedesktop.org/show_bug.cgi?id=110321 [fdo#110336]: https://bugs.freedesktop.org/show_bug.cgi?id=110336 [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912 [k.org#202321]: https://bugzilla.kernel.org/show_bug.cgi?id=202321 Participating hosts (10 -> 6) ------------------------------ Missing (4): pig-skl-6260u shard-skl pig-hsw-4770r pig-glk-j5005 Build changes ------------- * IGT: IGT_4932 -> IGTPW_2814 * Piglit: piglit_4509 -> None CI_DRM_5888: 381350f19ba1844d34105890169b1f1443f45879 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_2814: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2814/ IGT_4932: 08cf63a8fac11e3594b57580331fb319241a0d69 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2814/ _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger 2019-04-08 12:26 [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger Arkadiusz Hiler 2019-04-08 13:52 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2019-04-08 16:47 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork @ 2019-04-10 10:32 ` Petri Latvala 2 siblings, 0 replies; 4+ messages in thread From: Petri Latvala @ 2019-04-10 10:32 UTC (permalink / raw) To: Arkadiusz Hiler; +Cc: igt-dev On Mon, Apr 08, 2019 at 03:26:46PM +0300, Arkadiusz Hiler wrote: > Compilation support was dropped in January 2019, since then it's just a > dead code in the repo and no one seems to be missing it. > > Anyway, it can always be reintroduced from the chasms of git history. > > Cc: Daniel Vetter <daniel.vetter@ffwll.ch> > Cc: Petri Latvala <petri.latvala@intel.com> > Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com> Acked-by: Petri Latvala <petri.latvala@intel.com> If this passes gitlab CI (there could be some hilarious hook in the autotools code that wasn't spotted, the usual story), go ahead and merge this. > --- > README.md | 10 - > debugger/.gitignore | 2 - > debugger/debug_rdata.c | 142 ------ > debugger/eudb.c | 602 ----------------------- > debugger/system_routine/.gitignore | 10 - > debugger/system_routine/eviction_macro.c | 48 -- > debugger/system_routine/pre_cpp.py | 126 ----- > debugger/system_routine/sr.g4a | 277 ----------- > debugger/system_routine/test.g4a | 64 --- > 9 files changed, 1281 deletions(-) > delete mode 100644 debugger/.gitignore > delete mode 100644 debugger/debug_rdata.c > delete mode 100644 debugger/eudb.c > delete mode 100644 debugger/system_routine/.gitignore > delete mode 100644 debugger/system_routine/eviction_macro.c > delete mode 100755 debugger/system_routine/pre_cpp.py > delete mode 100644 debugger/system_routine/sr.g4a > delete mode 100644 debugger/system_routine/test.g4a > > diff --git a/README.md b/README.md > index 2d583095..9be840c8 100644 > --- a/README.md > +++ b/README.md > @@ -107,16 +107,6 @@ people debugging the driver. > These tools generally must be run as root, except for the ones that just > decode dumps. > > -**debugger/** > - > -This tool is to be used to do shader debugging. It acts like a > -debug server accepting connections from debug clients such as > -mesa. The connections is made with unix domain sockets, and at some > -point it would be nice if this directory contained a library for > -initiating connections with debug clients.. > - > -The debugger must be run as root: "sudo debugger/eudb" > - > **docs/** > > Contains the automatically generated igt-gpu-tools libraries > diff --git a/debugger/.gitignore b/debugger/.gitignore > deleted file mode 100644 > index 873cd273..00000000 > --- a/debugger/.gitignore > +++ /dev/null > @@ -1,2 +0,0 @@ > -debug_rdata > -eudb > diff --git a/debugger/debug_rdata.c b/debugger/debug_rdata.c > deleted file mode 100644 > index 61d82d9e..00000000 > --- a/debugger/debug_rdata.c > +++ /dev/null > @@ -1,142 +0,0 @@ > -/* > - * Copyright © 2011 Intel Corporation > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice (including the next > - * paragraph) shall be included in all copies or substantial portions of the > - * Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > - * IN THE SOFTWARE. > - * > - * Authors: > - * Ben Widawsky <ben@bwidawsk.net> > - * > - */ > - > -#include <stdint.h> > -#include <stdio.h> > -#include <stdlib.h> > -#include "intel_io.h" > -#include "intel_chipset.h" > - > -struct eu_rdata { > - union { > - struct { > - uint8_t sendc_dep : 1; > - uint8_t swh_dep : 1; > - uint8_t pwc_dep : 1; > - uint8_t n2_dep : 1; > - uint8_t n1_dep : 1; > - uint8_t n0_dep : 1; > - uint8_t flag1_dep : 1; > - uint8_t flag0_dep : 1; > - uint8_t indx_dep : 1; > - uint8_t mrf_dep : 1; > - uint8_t dst_dep : 1; > - uint8_t src2_dep : 1; > - uint8_t src1_dep : 1; > - uint8_t src0_dep : 1; > - uint8_t mp_dep_pin : 1; > - uint8_t sp_dep_pin : 1; > - uint8_t fftid : 8; > - uint8_t ffid : 4; > - uint8_t instruction_valid : 1; > - uint8_t thread_status : 3; > - }; > - uint32_t dword; > - } ud0; > - > - union { > - struct { > - uint8_t mrf_addr : 4; > - uint8_t dst_addr : 7; > - uint8_t src2_addr : 7; > - uint8_t src1_addr : 7; > - uint8_t src0_addr : 7; > - }; > - uint32_t dword; > - } ud1; > - > - union { > - struct { > - uint16_t exip : 12; > - uint8_t opcode : 7; > - uint8_t pwc : 8; > - uint8_t instruction_valid : 1; > - uint8_t mbz : 4; > - }; > - uint32_t dword; > - } ud2; > -}; > - > -const char *thread_status[] = > - {"INVALID", "invalid/no thread", "standby (dependency)", "INVALID", "Executing", > - "INVALID" , "INVALID" , "INVALID"}; > - > -static struct eu_rdata > -collect_rdata(int eu, int tid) { > - struct eu_rdata rdata; > - > - intel_register_write(0x7800, eu << 16 | (3 * tid) << 8); > - rdata.ud0.dword = intel_register_read(0x7840); > - > - intel_register_write(0x7800, eu << 16 | (3 * tid + 1) << 8); > - rdata.ud1.dword = intel_register_read(0x7840); > - > - intel_register_write(0x7800, eu << 16 | (3 * tid + 2) << 8); > - rdata.ud2.dword = intel_register_read(0x7840); > - > - return rdata; > -} > -static void > -print_rdata(struct eu_rdata rdata) { > - printf("\t%s\n", thread_status[rdata.ud0.thread_status]); > - printf("\tn1_dep: %d\n", rdata.ud0.n1_dep); > - printf("\tpwc_dep: %d\n", rdata.ud0.pwc_dep); > - printf("\tswh_dep: %d\n", rdata.ud0.swh_dep); > - printf("\tsource 0 %x\n", rdata.ud1.src0_addr); > - printf("\tsource 1 %x\n", rdata.ud1.src1_addr); > - printf("\tsource 2 %x\n", rdata.ud1.src2_addr); > - printf("\tdest %x\n", rdata.ud1.dst_addr); > - printf("\tmrf %x\n", rdata.ud1.mrf_addr); > - printf("\tIP: %x\n", rdata.ud2.exip); > - printf("\topcode: %x\n", rdata.ud2.opcode); > -} > - > -static void > -find_stuck_threads(void) > -{ > - int i, j; > - for (i = 0; i < 15; i++) > - for (j = 0; j < 5; j++) { > - struct eu_rdata rdata; > - rdata = collect_rdata(i, j); > - if (rdata.ud0.thread_status == 2 || > - rdata.ud0.thread_status == 4) { > - printf("%d %d:\n", i, j); > - print_rdata(rdata); > - } > - } > -} > - > -int main(int argc, char *argv[]) { > - struct pci_device *pci_dev; > - pci_dev = intel_get_pci_device(); > - > - intel_register_access_init(pci_dev, 1); > - find_stuck_threads(); > -// collect_rdata(atoi(argv[1]), atoi(argv[2])); > - return 0; > -} > diff --git a/debugger/eudb.c b/debugger/eudb.c > deleted file mode 100644 > index 866d4b52..00000000 > --- a/debugger/eudb.c > +++ /dev/null > @@ -1,602 +0,0 @@ > -/* > - * Copyright © 2011 Intel Corporation > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice (including the next > - * paragraph) shall be included in all copies or substantial portions of the > - * Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > - * IN THE SOFTWARE. > - * > - * Authors: > - * Ben Widawsky <ben@bwidawsk.net> > - * > - * Notes: > - * > - */ > - > -#include <signal.h> > -#include <stdlib.h> > -#include <fcntl.h> > -#include <unistd.h> > -#include <string.h> > -#include <strings.h> > -#include <assert.h> > -#include <sys/types.h> > -#include <sys/stat.h> > -#include <sys/mman.h> > -#include <sys/un.h> > -#include <sys/socket.h> > -#include "drm.h" > -#include "i915_drm.h" > -#include "drmtest.h" > -#include "intel_chipset.h" > -#include "intel_bufmgr.h" > -#include "intel_io.h" > -#include "intel_batchbuffer.h" > -#include "intel_debug.h" > -#include "debug.h" > - > -#define EU_ATT 0x7810 > -#define EU_ATT_CLR 0x7830 > - > -#define RSVD_EU -1 > -#define RSVD_THREAD -1 > -#define RSVD_ID EUID(-1, -1, -1) > - > -enum { > - EBAD_SHMEM, > - EBAD_PROTOCOL, > - EBAD_MAGIC, > - EBAD_WRITE > -}; > - > -struct debuggee { > - int euid; > - int tid; > - int fd; > - int clr; > - uint32_t reg; > -}; > - > -struct debugger { > - struct debuggee *debuggees; > - int num_threads; > - int real_num_threads; > - int threads_per_eu; > -} *eu_info; > - > -drm_intel_bufmgr *bufmgr; > -struct intel_batchbuffer *batch; > -drm_intel_bo *scratch_bo; > - > -int handle; > -int drm_fd; > -int debug_fd = 0; > -const char *debug_file = "dump_debug.bin"; > -int debug; > -int clear_waits; > -int shutting_down = 0; > -struct intel_debug_handshake dh; > -int force_clear = 0; > -uint32_t old_td_ctl; > - > -/* > - * The docs are wrong about the attention clear bits. The clear bits are > - * provided as part of the structure in case they change in future generations. > - */ > -#define EUID(eu, td, clear) \ > - { .euid = eu, .tid = td, .reg = EU_ATT, .fd = -1, .clr = clear } > -#define EUID2(eu, td, clear) \ > - { .euid = eu, .tid = td, .reg = EU_ATT + 4, .fd = -1, .clr = clear } > -struct debuggee gt1_debug_ids[] = { > - RSVD_ID, RSVD_ID, > - RSVD_ID, EUID(6, 3, 28), EUID(6, 2, 27), EUID(6, 1, 26), EUID(6, 0, 25), > - RSVD_ID, EUID(5, 3, 23), EUID(5, 2, 22), EUID(5, 1, 21), EUID(5, 0, 20), > - RSVD_ID, EUID(4, 3, 18), EUID(4, 2, 17), EUID(4, 1, 16), EUID(4, 0, 15), > - RSVD_ID, EUID(2, 3, 13), EUID(2, 2, 12), EUID(2, 1, 11), EUID(2, 0, 10), > - RSVD_ID, EUID(1, 3, 8), EUID(1, 2, 7), EUID(1, 1, 6), EUID(1, 0, 5), > - RSVD_ID, EUID(0, 3, 3), EUID(0, 2, 2), EUID(0, 1, 1), EUID(0, 0, 0) > -}; > - > -struct debuggee gt2_debug_ids[] = { > - EUID(8, 1, 31), EUID(8, 0, 30), > - EUID(6, 4, 29), EUID(6, 3, 28), EUID(6, 2, 27), EUID(6, 1, 26), EUID(6, 0, 25), > - EUID(5, 4, 24), EUID(5, 3, 23), EUID(5, 2, 22), EUID(5, 1, 21), EUID(5, 0, 20), > - EUID(4, 4, 19), EUID(4, 3, 18), EUID(4, 2, 17), EUID(4, 1, 16), EUID(4, 0, 15), > - EUID(2, 4, 14), EUID(2, 3, 13), EUID(2, 2, 12), EUID(2, 1, 11), EUID(2, 0, 10), > - EUID(1, 4, 9), EUID(1, 3, 8), EUID(1, 2, 7), EUID(1, 1, 6), EUID(1, 0, 5), > - EUID(0, 4, 4), EUID(0, 3, 3), EUID(0, 2, 2), EUID(0, 1, 1), EUID(0, 0, 0), > - RSVD_ID, RSVD_ID, RSVD_ID, RSVD_ID, > - EUID2(14, 4, 27), EUID2(14, 3, 26), EUID2(14, 2, 25), EUID2(14, 1, 24), EUID2(14, 0, 23), > - EUID2(13, 4, 22), EUID2(13, 3, 21), EUID2(13, 2, 20), EUID2(13, 1, 19), EUID2(13, 0, 18), > - EUID2(12, 4, 17), EUID2(12, 3, 16), EUID2(12, 2, 15), EUID2(12, 1, 14), EUID2(12, 0, 13), > - EUID2(10, 4, 12), EUID2(10, 3, 11), EUID2(10, 2, 10), EUID2(10, 1, 9), EUID2(10, 0, 8), > - EUID2(9, 4, 7), EUID2(9, 3, 6), EUID2(9, 2, 5), EUID2(9, 1, 4), EUID2(9, 0, 3), > - EUID2(8, 4, 2), EUID2(8, 3, 1), EUID2(8, 2, 0) > -}; > - > -struct debugger gt1 = { > - .debuggees = gt1_debug_ids, > - .num_threads = 32, > - .real_num_threads = 24, > - .threads_per_eu = 4 > -}; > - > -struct debugger gt2 = { > - .debuggees = gt2_debug_ids, > - .num_threads = 64, > - .real_num_threads = 60, > - .threads_per_eu = 5 > -}; > - > -static void > -dump_debug(void *buf, size_t count) { > - if (!debug_fd) > - debug_fd = open(debug_file, O_CREAT | O_WRONLY | O_TRUNC, S_IRWXO); > - > - if (write(debug_fd, buf, count) == -1) > - fprintf(stderr, "Error writing to debug file: %s\n", > - strerror(errno)); > -} > - > -static volatile void * > -map_debug_buffer(void) { > - int ret; > - > - ret = drm_intel_bo_map(scratch_bo, 0); > - assert(ret == 0); > - return scratch_bo->virtual; > -} > - > -static void > -unmap_debug_buffer(void) { > - drm_intel_bo_unmap(scratch_bo); > -} > - > -static int > -wait_for_attn(int timeout, int *out_bits) { > - int step = 1; > - int eus_waiting = 0; > - int i,j; > - > - if (timeout <= 0) { > - timeout = 1; > - step = 0; > - } > - > - for (i = 0; i < timeout; i += step) { > - for (j = 0; j < 8; j += 4) { > - uint32_t attn = intel_register_read(EU_ATT + j); > - if (attn) { > - int bit = 0; > - while( (bit = ffs(attn)) != 0) { > - bit--; // ffs is 1 based > - assert(bit >= 0); > - out_bits[eus_waiting] = bit + (j * 8); > - attn &= ~(1 << bit); > - eus_waiting++; > - } > - } > - } > - > - if (intel_register_read(EU_ATT + 8) || > - intel_register_read(EU_ATT + 0xc)) { > - fprintf(stderr, "Unknown attention bits\n"); > - } > - > - if (eus_waiting || shutting_down) > - break; > - } > - > - return eus_waiting; > -} > - > -#define eu_fd(bit) eu_info->debuggees[bit].fd > -#define eu_id(bit) eu_info->debuggees[bit].euid > -#define eu_tid(bit) eu_info->debuggees[bit].tid > -static struct eu_state * > -find_eu_shmem(int bit, volatile uint8_t *buf) { > - struct eu_state *eu; > - int mem_tid, mem_euid, i; > - > - for(i = 0; i < eu_info->num_threads; i++) { > - eu = (struct eu_state *)(buf + i * dh.per_thread_scratch); > - mem_tid = eu->sr0 & 0x7; > - mem_euid = (eu->sr0 >> 8) & 0xf; > - if (mem_tid == eu_tid(bit) && mem_euid == eu_id(bit)) > - break; > - eu = NULL; > - } > - > - return eu; > -} > - > -#define GRF_CMP(a, b) memcmp(a, b, sizeof(grf)) > -#define GRF_CPY(a, b) memcpy(a, b, sizeof(grf)) > -static int > -verify(struct eu_state *eu) { > - if (GRF_CMP(eu->version, protocol_version)) { > - if (debug) { > - printf("Bad EU protocol version %x %x\n", > - ((uint32_t *)&eu->version)[0], > - DEBUG_PROTOCOL_VERSION); > - dump_debug((void *)eu, sizeof(*eu)); > - } > - return -EBAD_PROTOCOL; > - } > - > - if (GRF_CMP(eu->state_magic, eu_msg)) { > - if (debug) { > - printf("Bad EU state magic %x %x\n", > - ((uint32_t *)&eu->state_magic)[0], > - ((uint32_t *)&eu->state_magic)[1]); > - dump_debug((void *)eu, sizeof(*eu)); > - } > - return -EBAD_MAGIC; > - } else { > - GRF_CPY(eu->state_magic, cpu_ack); > - } > - > - eu->sr0 = RSVD_EU << 8 | RSVD_THREAD; > - return 0; > -} > - > -static int > -collect_data(int bit, volatile uint8_t *buf) { > - struct eu_state *eu; > - ssize_t num; > - int ret; > - > - assert(eu_id(bit) != RSVD_EU); > - > - if (eu_fd(bit) == -1) { > - char name[128]; > - sprintf(name, "dump_eu_%02d_%d.bin", eu_id(bit), eu_tid(bit)); > - eu_fd(bit) = open(name, O_CREAT | O_WRONLY | O_TRUNC, S_IRWXO); > - if (eu_fd(bit) == -1) > - return -1; > - } > - > - eu = find_eu_shmem(bit, buf); > - > - if (eu == NULL) { > - if (debug) > - printf("Bad offset %d %d\n", eu_id(bit), eu_tid(bit)); > - return -EBAD_SHMEM; > - } > - > - ret = verify(eu); > - if (ret) > - return ret; > - > - num = write(eu_fd(bit), (void *)eu, sizeof(*eu)); > - if (num != sizeof(*eu)) { > - perror("unhandled write failure"); > - return EBAD_WRITE; > - } > - > - > - return 0; > -} > - > -static void > -clear_attn(int bit) { > -#if 0 > -/* > - * This works but doesn't allow for easily changed clearing bits > - */ > -static void > -clear_attn_old(int bit) { > - int bit_to_clear = bit % 32; > - bit_to_clear = 31 - bit_to_clear; > - intel_register_write(0x7830 + (bit/32) * 4, 0); > - intel_register_write(0x7830 + (bit/32) * 4, 1 << bit_to_clear); > -} > -#else > - if (!force_clear) { > - int bit_to_clear; > - bit_to_clear = eu_info->debuggees[bit].clr; > - intel_register_write(EU_ATT_CLR + (bit/32) * 4, 0); > - intel_register_write(EU_ATT_CLR + (bit/32) * 4, 1 << bit_to_clear); > - } else { > - intel_register_write(EU_ATT_CLR + 0, 0); > - intel_register_write(EU_ATT_CLR + 4, 0); > - intel_register_write(EU_ATT_CLR + 0, 0xffffffff); > - intel_register_write(EU_ATT_CLR + 4, 0xffffffff); > - } > -#endif > -} > - > -static void > -db_shutdown(int sig) { > - shutting_down = 1; > - printf("Shutting down...\n"); > -} > - > -static void __attribute__((noreturn)) > -die(int reason) { > - int i = 0; > - > - intel_register_write(EU_ATT_CLR, 0); > - intel_register_write(EU_ATT_CLR + 4, 0); > - > - if (debug_fd) > - close(debug_fd); > - > - for (i = 0; i < eu_info->num_threads; i++) { > - if (eu_info->debuggees[i].fd != -1) > - close(eu_info->debuggees[i].fd); > - } > - > - unmap_debug_buffer(); > - > - if (old_td_ctl) > - intel_register_write(TD_CTL, old_td_ctl); > - intel_register_access_fini(); > - exit(reason); > -} > - > -static int > -identify_device(int devid) { > - if (!IS_SANDYBRIDGE(devid)) > - return -ENODEV; > - > - switch (intel_gt(devid)) { > - case 0: > - eu_info = >1; > - break; > - case 1: > - eu_info = >2; > - break; > - default: > - return 1; > - } > - > - return 0; > -} > - > -static void > -parse_data(const char *file_name) { > - struct eu_state *eu_state = NULL; > - struct stat st; > - int fd = -1; > - int ret, i, elements; > - > - fd = open(file_name, O_RDONLY); > - if (fd == -1) { > - perror("open"); > - goto out; > - } > - > - ret = fstat(fd, &st); > - if (ret == -1) { > - perror("fstat"); > - goto out; > - } > - > - elements = st.st_size / sizeof(struct eu_state); > - if (elements == 0) { > - fprintf(stderr, "File not big enough for 1 entry\n"); > - goto out; > - } > - > - eu_state = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); > - if (eu_state == MAP_FAILED) { > - perror("mmap"); > - goto out; > - } > - > - for(i = 0; i < elements; i++) { > - printf("AIP: "); > - printf("%x\n", ((uint32_t *)eu_state[i].cr0)[2]); > - } > -out: > - if (eu_state) > - munmap(eu_state, st.st_size); > - if (fd != -1) > - close(fd); > -} > - > -static int > -wait_for_scratch_bo(void) { > - struct sockaddr_un addr; > - uint32_t version; > - int fd, ret, dh_handle = -1; > - > - assert(sizeof(version) == sizeof(dh.version)); > - > - fd = socket(AF_UNIX, SOCK_STREAM, 0); > - if (fd == -1) > - return -1; > - > - /* Clean up previous runs */ > - remove(SHADER_DEBUG_SOCKET); > - > - memset(&addr, 0, sizeof(addr)); > - addr.sun_family = AF_UNIX; > - strncpy(addr.sun_path, SHADER_DEBUG_SOCKET, sizeof(addr.sun_path) - 1); > - > - ret = bind(fd, (const struct sockaddr *)&addr, sizeof(addr)); > - if (ret == -1) { > - perror("listen"); > - return -1; > - } > - > - ret = listen(fd, 1); > - if (ret == -1) { > - perror("listen"); > - goto done; > - } > - > - while(1) { > - int client_fd; > - size_t count; > - char ack[] = DEBUG_HANDSHAKE_ACK; > - > - client_fd = accept(fd, NULL, NULL); > - if (client_fd == -1) { > - perror("accept"); > - goto done; > - } > - > - count = read(client_fd, &version, sizeof(version)); > - if (count != sizeof(version)) { > - perror("read version"); > - goto loop_out; > - } > - > - if (version != DEBUG_HANDSHAKE_VERSION) { > - fprintf(stderr, "Bad debug handshake\n"); > - goto loop_out; > - } > - > - count = read(client_fd, ((char *)&dh) + 1, sizeof(dh) - 1); > - if (count != sizeof(dh) - 1) { > - perror("read handshake"); > - goto loop_out; > - } > - > - count = write(client_fd, ack, sizeof(ack)); > - if (count != sizeof(ack)) { > - perror("write ack"); > - goto loop_out; > - } > - dh_handle = dh.flink_handle; > - if (debug > 0) { > - printf("Handshake completed successfully\n" > - "\tprotocol version = %d\n" > - "\tflink handle = %d\n" > - "\tper thread scratch = %x\n", version, > - dh.flink_handle, dh.per_thread_scratch); > - } > - > - loop_out: > - close(client_fd); > - break; > - } > - > -done: > - close(fd); > - return dh_handle; > -} > - > -static void > -setup_hw_bits(void) > -{ > - intel_register_write(INST_PM, GEN6_GLOBAL_DEBUG_ENABLE | > - GEN6_GLOBAL_DEBUG_ENABLE << 16); > - old_td_ctl = intel_register_read(GEN6_TD_CTL); > - intel_register_write(GEN6_TD_CTL, GEN6_TD_CTL_FORCE_TD_BKPT); > -} > - > -int main(int argc, char* argv[]) { > - struct pci_device *pci_dev; > - volatile uint8_t *scratch = NULL; > - int bits[64]; > - int devid = -1, opt; > - > - while ((opt = getopt(argc, argv, "cdr:pf?h")) != -1) { > - switch (opt) { > - case 'c': > - clear_waits = 1; > - break; > - case 'd': > - debug = 1; > - break; > - case 'r': > - parse_data(optarg); > - exit(0); > - break; > - case 'p': > - devid = atoi(optarg); > - break; > - case 'f': > - force_clear = 1; > - break; > - case '?': > - case 'h': > - default: > - exit(0); > - } > - } > - > - pci_dev = intel_get_pci_device(); > - if (devid == -1) > - devid = pci_dev->device_id; > - if (identify_device(devid)) { > - abort(); > - } > - > - assert(intel_register_access_init(pci_dev, 1) == 0); > - > - memset(bits, -1, sizeof(bits)); > - /* > - * These events have to occur before the SR runs, or we need > - * non-blocking versions of the functions. > - */ > - if (!clear_waits) { > - int dh_handle; > - drm_fd = drm_open_driver(DRIVER_INTEL); > - bufmgr = drm_intel_bufmgr_gem_init(drm_fd, 4096); > - > - setup_hw_bits(); > - > - /* We are probably root, make files world friendly */ > - umask(0); > - dh_handle = wait_for_scratch_bo(); > - if (dh_handle == -1) { > - printf("No handle from mesa, please enter manually: "); > - if (fscanf(stdin, "%1d", &dh_handle) == 0) > - exit(1); > - } > - scratch_bo = intel_bo_gem_create_from_name(bufmgr, "scratch", dh_handle); > - if (scratch_bo == NULL) { > - fprintf(stderr, "Couldn't flink buffer\n"); > - abort(); > - } > - signal(SIGINT, db_shutdown); > - printf("Press Ctrl-C to stop\n"); > - } else { > - int time = force_clear ? 0 : 20000; > - while (wait_for_attn(time, bits)) { > - clear_attn(bits[0]); > - memset(bits, -1, sizeof(bits)); > - } > - die(0); > - } > - > - scratch = map_debug_buffer(); > - while (shutting_down == 0) { > - int num_events, i; > - > - memset(bits, -1, sizeof(bits)); > - num_events = wait_for_attn(-1, bits); > - if (num_events == 0) > - break; > - > - for (i = 0; i < num_events; i++) { > - assert(bits[i] < 64 && bits[i] >= 0); > - if (collect_data(bits[i], scratch)) { > - bits[i] = -1; > - continue; > - } > - clear_attn(bits[i]); > - } > - } > - > - die(0); > - return 0; > -} > diff --git a/debugger/system_routine/.gitignore b/debugger/system_routine/.gitignore > deleted file mode 100644 > index d19500cf..00000000 > --- a/debugger/system_routine/.gitignore > +++ /dev/null > @@ -1,10 +0,0 @@ > -evict.h > -eviction_macro > -sr > -sr.asm > -sr.c > -sr.cpp > -tiny > -tiny.asm > -tiny.c > -tiny.cpp > diff --git a/debugger/system_routine/eviction_macro.c b/debugger/system_routine/eviction_macro.c > deleted file mode 100644 > index 1da22332..00000000 > --- a/debugger/system_routine/eviction_macro.c > +++ /dev/null > @@ -1,48 +0,0 @@ > -/* > - * Copyright © 2011 Intel Corporation > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice (including the next > - * paragraph) shall be included in all copies or substantial portions of the > - * Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > - * IN THE SOFTWARE. > - * > - * Authors: > - * Ben Widawsky <ben@bwidawsk.net> > - * > - */ > - > -#include <stdio.h> > - > -#define START 0x100 > -#define END ((128 << 10) / 4) > - > -int main(int argc, char *argv[]) { > - int i; > - printf("#ifdef SANDYBRIDGE\n"); > - printf("#define EVICT_CACHE \\\n"); > - printf("\tmov (1) m0.5:ud g0.5:ud FLAGS; \\\n"); > - for (i = START; i < END - 8; i+=0x8) { > - printf("\tmov (1) m0.2:ud 0x%04x:ud FLAGS; \\\n", i); > - printf("\tWRITE_SCRATCH4(m0); \\\n"); > - } > - > - printf("\tmov (1) m0.2:ud 0x%04x:ud FLAGS; \\\n", i); > - printf("\tWRITE_SCRATCH4(m0)\n"); > - printf("#else\n"); > - printf("#define EVICT_CACHE\n"); > - printf("#endif\n"); > -} > diff --git a/debugger/system_routine/pre_cpp.py b/debugger/system_routine/pre_cpp.py > deleted file mode 100755 > index 584d2af0..00000000 > --- a/debugger/system_routine/pre_cpp.py > +++ /dev/null > @@ -1,126 +0,0 @@ > -#!/usr/bin/env python3 > - > -# Copyright © 2011 Intel Corporation > -# > -# Permission is hereby granted, free of charge, to any person obtaining a copy > -# of this software and associated documentation files (the "Software"), to deal > -# in the Software without restriction, including without limitation the rights > -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > -# copies of the Software, and to permit persons to whom the Software is > -# furnished to do so, subject to the following conditions: > -# > -# The above copyright notice and this permission notice (including the next > -# paragraph) shall be included in all copies or substantial portions of the > -# Software. > -# > -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE > -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, > -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > -# SOFTWARE. > -# > -# Authors: > -# Ben Widawsky <ben@bwidawsk.net> > - > -#very limited C-like preprocessor > - > -#limitations: > -# no macro substitutions > -# no multiline definitions > -# divide operator is // > - > -import sys,re > - > -# make sure both input file and stdout are handled as utf-8 text, regardless > -# of current locale (eg. LANG=C which tells python to use ascii encoding) > -sys.stdout = open(sys.__stdout__.fileno(), "a", encoding="utf-8") > -file = open(sys.argv[1], "r", encoding="utf-8") > - > -lines = file.readlines() > -len(lines) > -out = dict() > -defines = dict() > - > -count = 0 > -#create a dict for our output > -for line in lines: > - out[count] = line > - count = count + 1 > - > -#done is considered #define <name> <number> > -def is_done(string): > - m = re.match("#define\s+(\w+?)\s+([a-fA-F0-9\-]+?)\s*$", string) > - return m > - > -#skip macros, the real cpp will handle it > -def skip(string): > - #macro > - m = re.match("#define\s+\w+\(.+", string) > - return m != None > - > -#put contants which are done being evaluated into the dictionary > -def easy_constants(): > - ret = 0 > - for lineno, string in out.items(): > - if skip(string): > - continue > - m = is_done(string) > - if m != None: > - key = m.group(1) > - value = m.group(2) > - if not key in defines: > - defines[key] = int(eval(value)) > - ret = 1 > - return ret > - > -#replace names with dictionary values > -def simple_replace(): > - ret = 0 > - for lineno, string in out.items(): > - if skip(string): > - continue > - for key, value in defines.items(): > - if is_done(string): > - continue > - s = re.subn(key, repr(value), string) > - if s[1] > 0: > - out[lineno] = s[0] > - ret = s[1] > - return ret > - > -#evaluate expressions to try to simplify them > -def collapse_constants(): > - ret = 0 > - for lineno, string in out.items(): > - if skip(string): > - continue > - if is_done(string): > - continue > - m = re.match("#define\s+(.+?)\s+(.+)$", string) > - if m != None: > - try: > - out[lineno] = "#define " + m.group(1) + " " + repr(eval(m.group(2))) > - ret = 1 > - except NameError as ne: > - #this happens before a variable is resolved in simple_replace > - continue > - except SyntaxError: > - #this happens with something like #define foo bar, which the > - #regular cpp can handle > - continue > - except: > - raise KeyboardInterrupt > - return ret; > - > -while True: > - ret = 0 > - ret += easy_constants() > - ret += simple_replace() > - ret += collapse_constants() > - if ret == 0: > - break; > - > -for lineno, string in out.items(): > - print(string.rstrip()) > diff --git a/debugger/system_routine/sr.g4a b/debugger/system_routine/sr.g4a > deleted file mode 100644 > index a70e7712..00000000 > --- a/debugger/system_routine/sr.g4a > +++ /dev/null > @@ -1,277 +0,0 @@ > -/* > - * Copyright © 2011 Intel Corporation > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice (including the next > - * paragraph) shall be included in all copies or substantial portions of the > - * Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > - * IN THE SOFTWARE. > - * > - * Authors: > - * Ben Widawsky <ben@bwidawsk.net> > - * > - */ > - > -#include "debug.h" > -#include "evict.h" > - > -#define CR0_0_ME_STATE_CTRL (1 << 31) > -#define CR0_0_BP_SUPPRESS (1 << 15) > -#define CR0_0_SPF_EN (1 << 2) > -#define CR0_0_ACC_DIS (1 << 1) > -#define CR0_1_BES_CTRL (1 << 31) > -#define CR0_1_HALT_CTRL (1 << 30) > -#define CR0_1_SOFT_EXCEPTION_CTRL (1 << 29) > -#define CR0_1_ILLGL_OP_STS (1 << 28) > -#define CR0_1_STACK_OVRFLW_STS (1 << 27) > - > -#define CR0_0_ENTRY_UNMASK (CR0_0_SPF_EN | CR0_0_ACC_DIS) > -// TODO: Need to fix this for non breakpoint case > -#define CR0_1_ENTRY_UNMASK ~(CR0_1_BES_CTRL) > -#define CR0_0_RETURN_MASK ~(CR0_0_ME_STATE_CTRL | CR0_0_SPF_EN | CR0_0_ACC_DIS) > - > -// TODO: not sure how to make this not hardcoded > -#define PER_THREAD_SCRATCH_SIZE (1 << 20) > -#define PER_THREAD_QWORDS (PER_THREAD_SCRATCH_SIZE >> 4) > - > -/* Should get this from brw_defines.h */ > -#define BRW_DATAPORT_OWORD_BLOCK_2_OWORDS 2 > -#define BRW_DATAPORT_OWORD_BLOCK_4_OWORDS 3 > -#define BRW_DATAPORT_OWORD_BLOCK_8_OWORDS 4 > -#define GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE 8 > -#define BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ 0 > - > -/* desc field, ie. dword3 6.3.66.2 and 2.11.2.1.4 */ > -#define SEND_MLEN_5 (5<<25) > -#define SEND_MLEN_3 (3<<25) > -#define SEND_MLEN_2 (2<<25) > -#define SEND_MLEN_1 (1<<25) > -#define SEND_RLEN_1 (1<<20) > -#define SEND_RLEN_0 (0<<20) > -#define SEND_HEADER_PRESENT (1<<19) > -#define SEND_WRITE_COMMIT (1<<17) > -#define SEND_TYPE_WRITE (GEN6_DATAPORT_WRITE_MESSAGE_OWORD_BLOCK_WRITE<<13) > -#define SEND_TYPE_READ (BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ<<13) > -#define SEND_BLOCK_SIZE1 (BRW_DATAPORT_OWORD_BLOCK_2_OWORDS<<8) > -#define SEND_BLOCK_SIZE2 (BRW_DATAPORT_OWORD_BLOCK_4_OWORDS<<8) > -#define SEND_BLOCK_SIZE4 (BRW_DATAPORT_OWORD_BLOCK_8_OWORDS<<8) > -#define SEND_BINDING_TABLE (255<<0) > -// No write commit > -#define WRITE_DESC1_XXX SEND_BINDING_TABLE | SEND_BLOCK_SIZE1 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_2 > -#define WRITE_DESC1_WC SEND_BINDING_TABLE | SEND_BLOCK_SIZE1 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_2 | SEND_WRITE_COMMIT > -#define WRITE_DESC2 SEND_BINDING_TABLE | SEND_BLOCK_SIZE2 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_3 > -#define WRITE_DESC4 SEND_BINDING_TABLE | SEND_BLOCK_SIZE4 | SEND_TYPE_WRITE | SEND_HEADER_PRESENT | SEND_MLEN_5 > -#define RECV_DESC1 SEND_BINDING_TABLE | SEND_BLOCK_SIZE1 | SEND_TYPE_READ | SEND_HEADER_PRESENT | SEND_MLEN_1 | SEND_RLEN_1 > -//#define SEND_DESC1 0x40902FF > -#define SEND_DESC1_WC 0x40b02FF > - > -/* ex_desc field 6.3.66.2 */ > -#define SEND_DP_RENDER_CACHE (5<<0) > -#define SEND_EOT (1<<5) > -#define SEND_EX_DESC SEND_DP_RENDER_CACHE > - > -/** > - * WRITE_SCRATCH1 - Write 2 owords. > - * cdst.2 - offset > - * cdst.5 - per thread scratch base, relative to gsba?? > - * cdst+1 - data to be written. > - */ > -#define WRITE_SCRATCH1(cdst) \ > - send (16) null cdst SEND_EX_DESC WRITE_DESC1_XXX FLAGS > -#define WRITE_SCRATCH1_WC(cdst) \ > - send (16) g1 cdst SEND_EX_DESC WRITE_DESC1_WC FLAGS > -#define WRITE_SCRATCH2(cdst) \ > - send (16) null cdst SEND_EX_DESC WRITE_DESC2 FLAGS > -#define WRITE_SCRATCH4(cdst) \ > - send (16) null cdst SEND_EX_DESC WRITE_DESC4 FLAGS > - > -/** > - * READ_SCRATCH1 - Read 2 owords. > - * cdst.2 - offset > - * cdst.5 - per thread scratch base, relative to gsba?? > - * grf - register where read data is populated. > - */ > -#define READ_SCRATCH1(grf, cdst) \ > - send (16) grf:ud cdst SEND_EX_DESC RECV_DESC1 FLAGS > - > -/** > - * SET_OFFSET - setup mrf for the given offset prior to a send instruction. > - * mrf - message register to be used as the header. > - * offset - offset. > - * > - * If a WRITE_SCRATCH follows, mrf+1 -> mrf+1+n should contain the data to be > - * written. > - */ > -#define SET_OFFSET(mrf, offset) \ > - mov (1) mrf.5:ud g0.5:ud FLAGS; \ > - mov (1) mrf.2:ud offset:ud FLAGS > - > -/** > - * SAVE_CRF - save the control register > - * clobbers: m0.2, m0.5 > - */ > -#define CR_OFFSET 0x40 > -#define SAVE_CRF \ > - SET_OFFSET(m0, CR_OFFSET); \ > - mov (8) m1:ud 0xdeadbeef:ud FLAGS; \ > - mov (1) m1.0:ud cr0.0 FLAGS; \ > - mov (1) m1.1:ud cr0.1 FLAGS; \ > - mov (1) m1.2:ud cr0.2 FLAGS; \ > - mov (1) m1.3:ud sr0:ud FLAGS; \ > - WRITE_SCRATCH1(m0) > - > -/* > - * clobbers: m0.2, m0.5 > - */ > -#define STORE_GRF(grf, offset) \ > - SET_OFFSET(m0, offset); \ > - mov (8) m1:ud grf:ud FLAGS; \ > - WRITE_SCRATCH1(m0) > - > -/* > - * clobbers: m0.2, m0.5 > - */ > -#define LOAD_GRF(grf, offset) \ > - SET_OFFSET(m0, offset); \ > - READ_SCRATCH1(grf, m0) > - > -/* > - * clobbers: mrf.2 mrf.5 > - */ > -#define STORE_MRF(mrf, offset) \ > - SET_OFFSET(mrf, offset); \ > - WRITE_SCRATCH1(mrf) > - > -/* > - * non-quirky semantics, unlike STORE_MRF > - * clobbers: g1 > - */ > -#define LOAD_MRF(mrf, offset) \ > - LOAD_GRF(g1, offset); \ > - mov (8) mrf:ud g1:ud FLAGS > - > -#define SAVE_ALL_MRF \ > - /* m1 is saved already */ \ > - STORE_MRF(m1, 0x2); \ > - STORE_MRF(m2, 0x4); \ > - STORE_MRF(m3, 0x6); \ > - STORE_MRF(m4, 0x8); \ > - STORE_MRF(m5, 0xa); \ > - STORE_MRF(m6, 0xc); \ > - STORE_MRF(m7, 0xe); \ > - STORE_MRF(m8, 0x10); \ > - STORE_MRF(m9, 0x12); \ > - STORE_MRF(m10, 0x14); \ > - STORE_MRF(m11, 0x16); \ > - STORE_MRF(m12, 0x18); \ > - STORE_MRF(m13, 0x1a); \ > - STORE_MRF(m14, 0x1c) > - > -#define RESTORE_ALL_MRF \ > - LOAD_MRF(m15, 0x1c); \ > - LOAD_MRF(m14, 0x1a); \ > - LOAD_MRF(m13, 0x18); \ > - LOAD_MRF(m12, 0x16); \ > - LOAD_MRF(m11, 0x14); \ > - LOAD_MRF(m10, 0x12); \ > - LOAD_MRF(m9, 0x10); \ > - LOAD_MRF(m8, 0xe); \ > - LOAD_MRF(m7, 0xc); \ > - LOAD_MRF(m6, 0xa); \ > - LOAD_MRF(m5, 0x8); \ > - LOAD_MRF(m4, 0x6); \ > - LOAD_MRF(m3, 0x4); \ > - LOAD_MRF(m2, 0x2); \ > - LOAD_MRF(m1, 0x0) > - > -#ifndef SANDYBRIDGE > - #error Only SandyBridge is supported > -#endif > - > -/* Default flags for an instruction */ > -#define FLAGS { ALIGN1, SWITCH, MASK_DISABLE, ACCWRCTRL} > - > -/* > - * We can clobber m0, and g0.4, everything else must be saved. > - */ > -Enter: > - nop; > - > - or (1) cr0.0 cr0.0 CR0_0_ENTRY_UNMASK:ud FLAGS; > - > - /* > - * g0.5 has the per thread scratch space when running in FS or VS. > - * If we don't have a valid g0.5, we can calculate a per thread scratch offset > - * using the system registers. The problem is we do not have a good way to know > - * the offset from GSBA. The system routine will have to be hardcoded or > - * dynamically patched with the correct offset. > - * TID is in sr0.0[2:0] > - * EUID is in sr0.0[11:8] > - */ > - > -#ifdef GPGPU > - mov (1) g0.4:ud 0:ud FLAGS; > -#if 0 > - /* This should work according to the docs, the add blows up */ > - shr (1) g0.8:uw sr0.0:uw 5 FLAGS; > - add (1) g0.16:ub gr0.16:ub sr0.0:ub FLAGS; > -#else > - shr (1) g0.8:uw sr0.0:uw 5 FLAGS; > - mov (1) g0.9:uw sr0.0:uw FLAGS; > - and (1) g0.9:uw g0.9:uw 0x7:uw FLAGS; > - add (1) g0.8:uw g0.8:uw g0.9:uw FLAGS; > - mov (1) g0.9:uw 0:uw FLAGS; > - mul (1) g0.4:ud g0.4:ud PER_THREAD_QWORDS FLAGS; > -#endif > -#endif > - > - mov (8) m0:ud 0:ud FLAGS; > - > - /* Saves must occur in order so as not to clobber the next register */ > - STORE_MRF(m0, 0); > - STORE_GRF(g0, 0x20); > - STORE_GRF(g1, 0x22); > - SAVE_ALL_MRF; > - > - mov (8) g1:ud STATE_EU_MSG:ud FLAGS; > - STORE_GRF(g1, STATE_QWORD); > - > - mov (8) g1:ud DEBUG_PROTOCOL_VERSION:ud FLAGS; > - STORE_GRF(g1, COMMUNICATION_QWORD); > - > - SAVE_CRF; > - > - EVICT_CACHE; > - wait n1:ud; > - EVICT_CACHE; > - > - /* Using this to try to keep coherency */ > - LOAD_GRF(g1, CR_OFFSET); > - LOAD_GRF(g1, COMMUNICATION_QWORD); > - LOAD_GRF(g1, STATE_QWORD); > - > - RESTORE_ALL_MRF; > - LOAD_GRF(g1, 0x22); > - LOAD_GRF(g0, 0x20); > - > - /* Clear breakpoint status */ > - and (1) cr0.1 cr0.1 CR0_1_ENTRY_UNMASK:ud FLAGS; > - > - /* set breakpoint suppress this should be conditional on bes */ > - or (1) cr0.0 cr0.0 CR0_0_BP_SUPPRESS:ud FLAGS; > - > - and (1) cr0.0 cr0.0 CR0_0_RETURN_MASK:ud FLAGS; > - nop; > diff --git a/debugger/system_routine/test.g4a b/debugger/system_routine/test.g4a > deleted file mode 100644 > index e4296e01..00000000 > --- a/debugger/system_routine/test.g4a > +++ /dev/null > @@ -1,64 +0,0 @@ > -/* > - * Copyright © 2011 Intel Corporation > - * > - * Permission is hereby granted, free of charge, to any person obtaining a > - * copy of this software and associated documentation files (the "Software"), > - * to deal in the Software without restriction, including without limitation > - * the rights to use, copy, modify, merge, publish, distribute, sublicense, > - * and/or sell copies of the Software, and to permit persons to whom the > - * Software is furnished to do so, subject to the following conditions: > - * > - * The above copyright notice and this permission notice (including the next > - * paragraph) shall be included in all copies or substantial portions of the > - * Software. > - * > - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > - * IN THE SOFTWARE. > - * > - * Authors: > - * Ben Widawsky <ben@bwidawsk.net> > - * > - */ > - > -#include "debug.h" > - > -#define CR0_0_ME_STATE_CTRL (1 << 31) > -#define CR0_0_BP_SUPPRESS (1 << 15) > -#define CR0_0_SPF_EN (1 << 2) > -#define CR0_0_ACC_DIS (1 << 1) > -#define CR0_1_BES_CTRL (1 << 31) > -#define CR0_1_HALT_CTRL (1 << 30) > -#define CR0_1_SOFT_EXCEPTION_CTRL (1 << 29) > -#define CR0_1_ILLGL_OP_STS (1 << 28) > -#define CR0_1_STACK_OVRFLW_STS (1 << 27) > - > -#define CR0_0_ENTRY_UNMASK (CR0_0_SPF_EN | CR0_0_ACC_DIS) > -// TODO: Need to fix this for non breakpoint case > -#define CR0_1_ENTRY_UNMASK ~(CR0_1_BES_CTRL) > -#define CR0_0_RETURN_MASK ~(CR0_0_ME_STATE_CTRL | CR0_0_SPF_EN | CR0_0_ACC_DIS) > - > -#ifndef SANDYBRIDGE > - #error Only SandyBridge is supported > -#endif > - > -/* Default flags for an instruction */ > -#define FLAGS { ALIGN1, SWITCH, MASK_DISABLE, ACCWRCTRL} > - > -Enter: > - nop; > - > - or (1) cr0.0 cr0.0 CR0_0_ENTRY_UNMASK:ud FLAGS; > - > - /* Clear breakpoint status */ > - and (1) cr0.1 cr0.1 CR0_1_ENTRY_UNMASK:ud FLAGS; > - > - /* set breakpoint suppress this should be conditional on bes */ > - or (1) cr0.0 cr0.0 CR0_0_BP_SUPPRESS:ud FLAGS; > - > - and (1) cr0.0 cr0.0 CR0_0_RETURN_MASK:ud FLAGS; > - nop; > -- > 2.20.1 > _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-04-10 10:32 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-04-08 12:26 [igt-dev] [PATCH i-g-t] debugger: Remove shader debugger Arkadiusz Hiler 2019-04-08 13:52 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork 2019-04-08 16:47 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 2019-04-10 10:32 ` [igt-dev] [PATCH i-g-t] " Petri Latvala
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox