summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.com>2017-03-02 10:37:11 +0100
committerTomeu Vizoso <tomeu.vizoso@collabora.com>2017-03-21 15:50:54 +0100
commit301ad44cdf1b868b1ab89096721da91fa8541fdc (patch)
treeef18781db6cadae7f8f49f1fc449dc56b33448ec /tools
parente7a0d06730f77842998368660fb45fe5c1738fda (diff)
lib: Open debugfs files for the given DRM device
When opening a DRM debugfs file, locate the right path based on the given DRM device FD. This is needed so, in setups with more than one DRM device, any operations on debugfs files affect the expected DRM device. v2: - rebased and fixed new API additions v3: - updated chamelium test, which was missed previously - use the minor of the device for the debugfs path, not the major - have a proper exit handler for calling igt_hpd_storm_reset with the right device fd. Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> Reviewed-by: Robert Foss <robert.foss@collabora.com> Acked-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tools')
-rw-r--r--tools/intel_display_crc.c2
-rw-r--r--tools/intel_display_poller.c8
-rw-r--r--tools/intel_dp_compliance.c6
-rw-r--r--tools/intel_forcewaked.c10
-rw-r--r--tools/intel_gpu_top.c8
-rw-r--r--tools/intel_guc_logger.c10
-rw-r--r--tools/intel_infoframes.c7
-rw-r--r--tools/intel_l3_parity.c2
-rw-r--r--tools/intel_panel_fitter.c9
-rw-r--r--tools/intel_perf_counters.c2
-rw-r--r--tools/intel_reg.c12
-rw-r--r--tools/intel_watermark.c23
12 files changed, 71 insertions, 28 deletions
diff --git a/tools/intel_display_crc.c b/tools/intel_display_crc.c
index ba9ec5ba..d1b28ea7 100644
--- a/tools/intel_display_crc.c
+++ b/tools/intel_display_crc.c
@@ -67,7 +67,7 @@ static void print_crcs(display_crc_t *ctx)
char *crc_str;
int i;
- pipe_crc = igt_pipe_crc_new(ctx->pipe, INTEL_PIPE_CRC_SOURCE_AUTO);
+ pipe_crc = igt_pipe_crc_new(ctx->fd, ctx->pipe, INTEL_PIPE_CRC_SOURCE_AUTO);
for (i = 0; i < ctx->n_crcs; i++) {
igt_pipe_crc_collect_crc(pipe_crc, &crc);
diff --git a/tools/intel_display_poller.c b/tools/intel_display_poller.c
index 63c930fb..c501c79d 100644
--- a/tools/intel_display_poller.c
+++ b/tools/intel_display_poller.c
@@ -965,6 +965,7 @@ int main(int argc, char *argv[])
int pipe = 0, bit = 0, target_scanline = 0, target_fuzz = 1;
bool test_pixelcount = false;
uint32_t devid;
+ int drm_fd;
uint32_t min[2*128] = {};
uint32_t max[2*128] = {};
uint32_t a, b;
@@ -1186,7 +1187,10 @@ int main(int argc, char *argv[])
break;
}
- intel_register_access_init(intel_get_pci_device(), 0);
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
printf("%s?\n", test_name(test, pipe, bit, test_pixelcount));
@@ -1263,6 +1267,8 @@ int main(int argc, char *argv[])
intel_register_access_fini();
+ close(drm_fd);
+
if (quit)
return 0;
diff --git a/tools/intel_dp_compliance.c b/tools/intel_dp_compliance.c
index 1b2c1d38..4b4d255d 100644
--- a/tools/intel_dp_compliance.c
+++ b/tools/intel_dp_compliance.c
@@ -229,13 +229,13 @@ static void clear_test_active(void)
static void setup_debugfs_files(void)
{
- test_type_fp = igt_debugfs_fopen(INTEL_DP_TEST_TYPE_FILE, "r");
+ test_type_fp = igt_debugfs_fopen(drm_fd, INTEL_DP_TEST_TYPE_FILE, "r");
igt_require(test_type_fp);
- test_data_fp = igt_debugfs_fopen(INTEL_DP_TEST_DATA_FILE, "r");
+ test_data_fp = igt_debugfs_fopen(drm_fd, INTEL_DP_TEST_DATA_FILE, "r");
igt_require(test_data_fp);
- test_active_fp = igt_debugfs_fopen(INTEL_DP_TEST_ACTIVE_FILE, "w+");
+ test_active_fp = igt_debugfs_fopen(drm_fd, INTEL_DP_TEST_ACTIVE_FILE, "w+");
igt_require(test_active_fp);
/* Reset the active flag for safety */
diff --git a/tools/intel_forcewaked.c b/tools/intel_forcewaked.c
index 01ca0253..aa8e3f8b 100644
--- a/tools/intel_forcewaked.c
+++ b/tools/intel_forcewaked.c
@@ -36,6 +36,7 @@
#include <unistd.h>
#include "intel_io.h"
#include "intel_chipset.h"
+#include "drmtest.h"
bool daemonized;
@@ -63,6 +64,7 @@ is_alive(void) {
int main(int argc, char *argv[])
{
+ int drm_fd;
int ret;
if (argc > 2 || (argc == 2 && !strncmp(argv[1], "-h", 2))) {
@@ -79,7 +81,10 @@ int main(int argc, char *argv[])
INFO_PRINT("started daemon");
}
- ret = intel_register_access_init(intel_get_pci_device(), 1);
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
+ ret = intel_register_access_init(intel_get_pci_device(), 1, drm_fd);
if (ret) {
INFO_PRINT("Couldn't init register access\n");
exit(1);
@@ -90,13 +95,14 @@ int main(int argc, char *argv[])
if (!is_alive()) {
INFO_PRINT("gpu reset? restarting daemon\n");
intel_register_access_fini();
- ret = intel_register_access_init(intel_get_pci_device(), 1);
+ ret = intel_register_access_init(intel_get_pci_device(), 1, drm_fd);
if (ret)
INFO_PRINT("Reg access init fail\n");
}
sleep(1);
}
intel_register_access_fini();
+ close(drm_fd);
INFO_PRINT("Forcewake unlock\n");
if (daemonized) {
diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c
index 4f327c6d..78488764 100644
--- a/tools/intel_gpu_top.c
+++ b/tools/intel_gpu_top.c
@@ -46,6 +46,7 @@
#include "instdone.h"
#include "intel_reg.h"
#include "intel_chipset.h"
+#include "drmtest.h"
#define FORCEWAKE 0xA18C
#define FORCEWAKE_ACK 0x130090
@@ -410,6 +411,7 @@ usage(const char *appname)
int main(int argc, char **argv)
{
uint32_t devid;
+ int drm_fd;
struct pci_device *pci_dev;
struct ring render_ring = {
.name = "render",
@@ -510,8 +512,11 @@ int main(int argc, char **argv)
top_bits_sorted[i] = &top_bits[i];
}
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
/* Grab access to the registers */
- intel_register_access_init(pci_dev, 0);
+ intel_register_access_init(pci_dev, 0, drm_fd);
ring_init(&render_ring);
if (IS_GEN4(devid) || IS_GEN5(devid))
@@ -714,5 +719,6 @@ int main(int argc, char **argv)
fclose(output);
intel_register_access_fini();
+ close(drm_fd);
return 0;
}
diff --git a/tools/intel_guc_logger.c b/tools/intel_guc_logger.c
index c9ea60d0..3079878e 100644
--- a/tools/intel_guc_logger.c
+++ b/tools/intel_guc_logger.c
@@ -47,7 +47,7 @@ int verbosity_level = 3; /* by default capture logs at max verbosity */
uint32_t produced, consumed;
uint64_t total_bytes_written;
int num_buffers = NUM_SUBBUFS;
-int relay_fd, outfile_fd = -1;
+int relay_fd, drm_fd, outfile_fd = -1;
uint32_t test_duration, max_filesize;
pthread_cond_t underflow_cond, overflow_cond;
bool stop_logging, discard_oldlogs, capturing_stopped;
@@ -59,7 +59,7 @@ static void guc_log_control(bool enable_logging)
uint64_t val;
int ret;
- control_fd = igt_debugfs_open(CONTROL_FILE_NAME, O_WRONLY);
+ control_fd = igt_debugfs_open(drm_fd, CONTROL_FILE_NAME, O_WRONLY);
igt_assert_f(control_fd >= 0, "couldn't open the guc log control file\n");
val = enable_logging ? ((verbosity_level << 4) | 0x1) : 0;
@@ -228,7 +228,7 @@ static void init_flusher_thread(void)
static void open_relay_file(void)
{
- relay_fd = igt_debugfs_open(RELAY_FILE_NAME, O_RDONLY);
+ relay_fd = igt_debugfs_open(drm_fd, RELAY_FILE_NAME, O_RDONLY);
igt_assert_f(relay_fd >= 0, "couldn't open the guc log file\n");
/* Purge the old/boot-time logs from the relay buffer.
@@ -374,6 +374,9 @@ int main(int argc, char **argv)
process_command_line(argc, argv);
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
init_main_thread();
/* Use a separate thread for flushing the logs to a file on disk.
@@ -434,5 +437,6 @@ int main(int argc, char **argv)
free(read_buffer);
close(relay_fd);
close(outfile_fd);
+ close(drm_fd);
igt_exit();
}
diff --git a/tools/intel_infoframes.c b/tools/intel_infoframes.c
index e03cb2c0..813430c9 100644
--- a/tools/intel_infoframes.c
+++ b/tools/intel_infoframes.c
@@ -1081,6 +1081,7 @@ printf("Options:\n"
int main(int argc, char *argv[])
{
int opt;
+ int drm_fd;
int ret = 0;
Transcoder transcoder = TRANSC_INVALID;
DipType dip = DIP_INVALID;
@@ -1107,8 +1108,11 @@ int main(int argc, char *argv[])
printf("WARNING: This is just a debugging tool! Don't expect it to work"
" perfectly: the Kernel might undo our changes.\n");
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
pci_dev = intel_get_pci_device();
- intel_register_access_init(pci_dev, 0);
+ intel_register_access_init(pci_dev, 0, drm_fd);
intel_check_pch();
if (IS_GEN4(pci_dev->device_id))
@@ -1257,5 +1261,6 @@ int main(int argc, char *argv[])
out:
intel_register_access_fini();
+ close(drm_fd);
return ret;
}
diff --git a/tools/intel_l3_parity.c b/tools/intel_l3_parity.c
index 8692bef8..dce7f320 100644
--- a/tools/intel_l3_parity.c
+++ b/tools/intel_l3_parity.c
@@ -194,7 +194,7 @@ int main(int argc, char *argv[])
if (intel_gen(devid) < 7 || IS_VALLEYVIEW(devid))
exit(77);
- assert(intel_register_access_init(intel_get_pci_device(), 0) == 0);
+ assert(intel_register_access_init(intel_get_pci_device(), 0, device) == 0);
dir = igt_sysfs_open(device, NULL);
diff --git a/tools/intel_panel_fitter.c b/tools/intel_panel_fitter.c
index 5519361e..48b2fd89 100644
--- a/tools/intel_panel_fitter.c
+++ b/tools/intel_panel_fitter.c
@@ -33,6 +33,7 @@
#include "intel_io.h"
#include "intel_chipset.h"
#include "intel_reg.h"
+#include "drmtest.h"
int gen;
@@ -265,7 +266,7 @@ static void print_usage(void)
int main (int argc, char *argv[])
{
- int opt;
+ int opt, drm_fd;
int ret = 0;
char intel_pipe = '\0';
int x = 0, y = 0;
@@ -278,8 +279,11 @@ int main (int argc, char *argv[])
"with overscan compensation properties: it is just a temporary "
"solution that may or may not work. Use it at your own risk.\n");
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
pci_dev = intel_get_pci_device();
- intel_register_access_init(pci_dev, 0);
+ intel_register_access_init(pci_dev, 0, drm_fd);
devid = pci_dev->device_id;
if (!HAS_PCH_SPLIT(devid)) {
@@ -342,5 +346,6 @@ int main (int argc, char *argv[])
out:
intel_register_access_fini();
+ close(drm_fd);
return ret;
}
diff --git a/tools/intel_perf_counters.c b/tools/intel_perf_counters.c
index 04a6aba9..50c4bce6 100644
--- a/tools/intel_perf_counters.c
+++ b/tools/intel_perf_counters.c
@@ -483,7 +483,7 @@ main(int argc, char **argv)
if (oacontrol) {
/* Forcewake */
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, fd);
/* Enable performance counters */
intel_register_write(OACONTROL,
diff --git a/tools/intel_reg.c b/tools/intel_reg.c
index 01a3671e..7b58d0b8 100644
--- a/tools/intel_reg.c
+++ b/tools/intel_reg.c
@@ -32,6 +32,7 @@
#include <sys/types.h>
#include <unistd.h>
+#include "igt.h"
#include "intel_io.h"
#include "intel_chipset.h"
@@ -57,6 +58,7 @@ struct config {
struct pci_device *pci_dev;
char *mmiofile;
uint32_t devid;
+ int drm_fd;
/* read: number of registers to read */
uint32_t count;
@@ -409,7 +411,7 @@ static int intel_reg_read(struct config *config, int argc, char *argv[])
if (config->mmiofile)
intel_mmio_use_dump_file(config->mmiofile);
else
- intel_register_access_init(config->pci_dev, 0);
+ intel_register_access_init(config->pci_dev, 0, config->drm_fd);
for (i = 1; i < argc; i++) {
struct reg reg;
@@ -439,7 +441,7 @@ static int intel_reg_write(struct config *config, int argc, char *argv[])
return EXIT_FAILURE;
}
- intel_register_access_init(config->pci_dev, 0);
+ intel_register_access_init(config->pci_dev, 0, config->drm_fd);
for (i = 1; i < argc; i += 2) {
struct reg reg;
@@ -477,7 +479,7 @@ static int intel_reg_dump(struct config *config, int argc, char *argv[])
if (config->mmiofile)
intel_mmio_use_dump_file(config->mmiofile);
else
- intel_register_access_init(config->pci_dev, 0);
+ intel_register_access_init(config->pci_dev, 0, config->drm_fd);
for (i = 0; i < config->regcount; i++) {
reg = &config->regs[i];
@@ -877,6 +879,9 @@ int main(int argc, char *argv[])
config.devid = config.pci_dev->device_id;
}
+ /* Just to make sure we open the right debugfs files */
+ config.drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
if (read_reg_spec(&config) < 0) {
return EXIT_FAILURE;
}
@@ -895,6 +900,7 @@ int main(int argc, char *argv[])
ret = command->function(&config, argc, argv);
+ close(config.drm_fd);
free(config.mmiofile);
return ret;
diff --git a/tools/intel_watermark.c b/tools/intel_watermark.c
index e9a2b057..d98ef19b 100644
--- a/tools/intel_watermark.c
+++ b/tools/intel_watermark.c
@@ -30,11 +30,11 @@
#include <string.h>
#include "intel_io.h"
#include "intel_chipset.h"
+#include "drmtest.h"
static uint32_t display_base;
static uint32_t devid;
-
-#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
+static int drm_fd;
static uint32_t read_reg(uint32_t addr)
{
@@ -143,7 +143,7 @@ static void ilk_wm_dump(void)
int num_pipes = is_gen7_plus(devid) ? 3 : 2;
struct ilk_wm wm = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
for (i = 0; i < num_pipes; i++) {
dspcntr[i] = read_reg(0x70180 + i * 0x1000);
@@ -291,7 +291,7 @@ static void vlv_wm_dump(void)
uint32_t dsp_ss_pm, ddr_setup2;
struct gmch_wm wms[MAX_PLANE] = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
dsparb = read_reg(0x70030);
dsparb2 = read_reg(0x70060);
@@ -507,7 +507,7 @@ static void g4x_wm_dump(void)
uint32_t mi_arb_state;
struct gmch_wm wms[MAX_PLANE] = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
dspacntr = read_reg(0x70180);
dspbcntr = read_reg(0x71180);
@@ -593,7 +593,7 @@ static void gen4_wm_dump(void)
uint32_t mi_arb_state;
struct gmch_wm wms[MAX_PLANE] = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
dsparb = read_reg(0x70030);
fw1 = read_reg(0x70034);
@@ -664,7 +664,7 @@ static void pnv_wm_dump(void)
uint32_t cbr;
struct gmch_wm wms[MAX_PLANE] = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
dsparb = read_reg(0x70030);
fw1 = read_reg(0x70034);
@@ -754,7 +754,7 @@ static void gen3_wm_dump(void)
uint32_t mi_arb_state;
struct gmch_wm wms[MAX_PLANE] = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
dsparb = read_reg(0x70030);
instpm = read_reg(0x20c0);
@@ -823,7 +823,7 @@ static void gen2_wm_dump(void)
uint32_t mi_state;
struct gmch_wm wms[MAX_PLANE] = {};
- intel_register_access_init(intel_get_pci_device(), 0);
+ intel_register_access_init(intel_get_pci_device(), 0, drm_fd);
dsparb = read_reg(0x70030);
mem_mode = read_reg(0x20cc);
@@ -900,6 +900,9 @@ int main(int argc, char *argv[])
{
devid = intel_get_pci_device()->device_id;
+ /* Just to make sure we open the right debugfs files */
+ drm_fd = drm_open_driver_master(DRIVER_INTEL);
+
if (IS_VALLEYVIEW(devid) || IS_CHERRYVIEW(devid)) {
display_base = 0x180000;
vlv_wm_dump();
@@ -920,5 +923,7 @@ int main(int argc, char *argv[])
return 1;
}
+ close(drm_fd);
+
return 0;
}