diff options
-rw-r--r-- | benchmarks/Makefile.am | 17 | ||||
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | lib/Makefile.am | 19 | ||||
-rw-r--r-- | lib/instdone.c | 6 | ||||
-rw-r--r-- | lib/instdone.h | 4 | ||||
-rw-r--r-- | lib/intel_batchbuffer.c | 47 | ||||
-rw-r--r-- | lib/intel_batchbuffer.h | 4 | ||||
-rw-r--r-- | lib/intel_drm.c | 57 | ||||
-rw-r--r-- | lib/intel_gpu_tools.h | 21 | ||||
-rw-r--r-- | lib/intel_mmio.c (renamed from lib/intel_gpu_tools.c) | 98 | ||||
-rw-r--r-- | lib/intel_pci.c | 71 | ||||
-rw-r--r-- | tests/gem_bad_address.c | 1 | ||||
-rw-r--r-- | tests/gem_bad_batch.c | 1 | ||||
-rw-r--r-- | tests/gem_bad_blit.c | 7 | ||||
-rw-r--r-- | tests/gem_pread_after_blit.c | 13 | ||||
-rw-r--r-- | tests/gem_ringfill.c | 5 | ||||
-rw-r--r-- | tests/gem_tiled_blits.c | 50 | ||||
-rw-r--r-- | tests/gem_tiled_pread.c | 50 | ||||
-rw-r--r-- | tools/intel_audio_dump.c | 4 | ||||
-rw-r--r-- | tools/intel_error_decode.c | 14 | ||||
-rw-r--r-- | tools/intel_gpu_dump.c | 16 | ||||
-rw-r--r-- | tools/intel_gpu_time.c | 2 | ||||
-rw-r--r-- | tools/intel_gpu_top.c | 14 | ||||
-rw-r--r-- | tools/intel_gtt.c | 6 | ||||
-rw-r--r-- | tools/intel_lid.c | 2 | ||||
-rw-r--r-- | tools/intel_reg_dumper.c | 9 | ||||
-rw-r--r-- | tools/intel_reg_read.c | 2 | ||||
-rw-r--r-- | tools/intel_reg_snapshot.c | 6 | ||||
-rw-r--r-- | tools/intel_reg_write.c | 2 |
29 files changed, 309 insertions, 246 deletions
diff --git a/benchmarks/Makefile.am b/benchmarks/Makefile.am index 3196b2c2..6829bbef 100644 --- a/benchmarks/Makefile.am +++ b/benchmarks/Makefile.am @@ -1,8 +1,15 @@ -bin_PROGRAMS = \ - intel_upload_blit_large \ - intel_upload_blit_large_gtt \ - intel_upload_blit_large_map \ - intel_upload_blit_small +NULL=# + +bin_PROGRAMS = $(NULL) + +if HAVE_DRM +bin_PROGRAMS += \ + intel_upload_blit_large \ + intel_upload_blit_large_gtt \ + intel_upload_blit_large_map \ + intel_upload_blit_small \ + $(NULL) +endif BENCHMARK_LIBS = \ ../lib/libintel_tools.la \ diff --git a/configure.ac b/configure.ac index 8af20dbf..3ab2a8dc 100644 --- a/configure.ac +++ b/configure.ac @@ -40,7 +40,12 @@ AC_PROG_LIBTOOL AC_PROG_CC AM_PROG_CC_C_O -PKG_CHECK_MODULES(DRM, [libdrm_intel >= 2.4.6]) +PKG_CHECK_MODULES(DRM, [libdrm_intel >= 2.4.6], have_drm=yes, have_drm=no) +if test "x$have_drm" = "xyes"; then + AC_DEFINE([HAVE_DRM], 1, [Define to 1 if we have DRM support]) +fi +AM_CONDITIONAL(HAVE_DRM, test "x$have_drm" = "xyes") + PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10]) dnl Use lots of warning flags with GCC diff --git a/lib/Makefile.am b/lib/Makefile.am index eb3eba76..0c9380d5 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,16 +1,25 @@ +NULL=# + +AM_CFLAGS = $(WARN_CFLAGS) -I$(srcdir)/.. libintel_tools_la_SOURCES = \ - intel_batchbuffer.c \ intel_batchbuffer.h \ intel_chipset.h \ - intel_gpu_tools.c \ intel_gpu_tools.h \ + intel_mmio.c \ + intel_pci.c \ intel_reg.h \ instdone.c \ instdone.h \ - drmtest.c \ drmtest.h +if HAVE_DRM +libintel_tools_la_SOURCES += \ + intel_batchbuffer.c \ + intel_drm.c \ + drmtest.c \ + $(NULL) +AM_CFLAGS += $(DRM_CFLAGS) +endif + noinst_LTLIBRARIES = libintel_tools.la -AM_CFLAGS = $(DRM_CFLAGS) $(WARN_CFLAGS) \ - -I$(srcdir)/.. diff --git a/lib/instdone.c b/lib/instdone.c index d77061fa..722fb039 100644 --- a/lib/instdone.c +++ b/lib/instdone.c @@ -25,9 +25,11 @@ * */ -#include "intel_gpu_tools.h" #include "instdone.h" +#include "intel_chipset.h" +#include "intel_reg.h" + struct instdone_bit instdone_bits[MAX_INSTDONE_BITS]; int num_instdone_bits = 0; @@ -133,7 +135,7 @@ init_g4x_instdone1(void) } void -init_instdone_definitions(void) +init_instdone_definitions(uint32_t devid) { if (IS_GEN6(devid)) { /* Now called INSTDONE_1 in the docs. */ diff --git a/lib/instdone.h b/lib/instdone.h index ed34f833..c86a54a7 100644 --- a/lib/instdone.h +++ b/lib/instdone.h @@ -25,6 +25,8 @@ * */ +#include <stdint.h> + #define MAX_INSTDONE_BITS 100 struct instdone_bit { @@ -36,4 +38,4 @@ struct instdone_bit { extern struct instdone_bit instdone_bits[MAX_INSTDONE_BITS]; extern int num_instdone_bits; -void init_instdone_definitions(void); +void init_instdone_definitions(uint32_t devid); diff --git a/lib/intel_batchbuffer.c b/lib/intel_batchbuffer.c index 1e3148ab..ae5150e9 100644 --- a/lib/intel_batchbuffer.c +++ b/lib/intel_batchbuffer.c @@ -30,9 +30,13 @@ #include <stdio.h> #include <string.h> #include <assert.h> + #include "drm.h" #include "intel_batchbuffer.h" #include "intel_bufmgr.h" +#include "intel_chipset.h" +#include "intel_reg.h" +#include <i915_drm.h> void intel_batchbuffer_reset(struct intel_batchbuffer *batch) @@ -137,3 +141,46 @@ intel_batchbuffer_data(struct intel_batchbuffer *batch, memcpy(batch->ptr, data, bytes); batch->ptr += bytes; } + +void +intel_copy_bo(struct intel_batchbuffer *batch, + drm_intel_bo *dst_bo, drm_intel_bo *src_bo, + int width, int height, uint32_t devid) +{ + uint32_t src_tiling, dst_tiling, swizzle; + uint32_t src_pitch, dst_pitch; + uint32_t cmd_bits = 0; + + drm_intel_bo_get_tiling(src_bo, &src_tiling, &swizzle); + drm_intel_bo_get_tiling(dst_bo, &dst_tiling, &swizzle); + + src_pitch = width * 4; + if (IS_965(devid) && src_tiling != I915_TILING_NONE) { + src_pitch /= 4; + cmd_bits |= XY_SRC_COPY_BLT_SRC_TILED; + } + + dst_pitch = width * 4; + if (IS_965(devid) && dst_tiling != I915_TILING_NONE) { + dst_pitch /= 4; + cmd_bits |= XY_SRC_COPY_BLT_DST_TILED; + } + + BEGIN_BATCH(8); + OUT_BATCH(XY_SRC_COPY_BLT_CMD | + XY_SRC_COPY_BLT_WRITE_ALPHA | + XY_SRC_COPY_BLT_WRITE_RGB | + cmd_bits); + OUT_BATCH((3 << 24) | /* 32 bits */ + (0xcc << 16) | /* copy ROP */ + dst_pitch); + OUT_BATCH(0); /* dst x1,y1 */ + OUT_BATCH((height << 16) | width); /* dst x2,y2 */ + OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0); + OUT_BATCH(0); /* src x1,y1 */ + OUT_BATCH(src_pitch); + OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0); + ADVANCE_BATCH(); + + intel_batchbuffer_flush(batch); +} diff --git a/lib/intel_batchbuffer.h b/lib/intel_batchbuffer.h index 5b4ab930..fcd9ceb6 100644 --- a/lib/intel_batchbuffer.h +++ b/lib/intel_batchbuffer.h @@ -115,4 +115,8 @@ intel_batchbuffer_emit_mi_flush(struct intel_batchbuffer *batch) intel_batchbuffer_emit_dword(batch, MI_FLUSH); } +void intel_copy_bo(struct intel_batchbuffer *batch, + drm_intel_bo *dst_bo, drm_intel_bo *src_bo, + int width, int height, uint32_t devid); + #endif diff --git a/lib/intel_drm.c b/lib/intel_drm.c new file mode 100644 index 00000000..ca5e4738 --- /dev/null +++ b/lib/intel_drm.c @@ -0,0 +1,57 @@ +/* + * Copyright © 2008 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: + * Eric Anholt <eric@anholt.net> + * + */ + +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <err.h> +#include <assert.h> +#include <sys/ioctl.h> +#include <sys/fcntl.h> +#include <sys/stat.h> +#include <sys/mman.h> + +#include "intel_gpu_tools.h" +#include "i915_drm.h" + +uint32_t +intel_get_drm_devid(int fd) +{ + int ret; + struct drm_i915_getparam gp; + uint32_t devid; + + gp.param = I915_PARAM_CHIPSET_ID; + gp.value = (int *)&devid; + + ret = ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp)); + assert(ret == 0); + + return devid; +} diff --git a/lib/intel_gpu_tools.h b/lib/intel_gpu_tools.h index 259fd9a9..0251031a 100644 --- a/lib/intel_gpu_tools.h +++ b/lib/intel_gpu_tools.h @@ -25,19 +25,18 @@ * */ +#include <stdint.h> #include <sys/types.h> #include <pciaccess.h> -#include "i915_drm.h" -#include "intel_batchbuffer.h" + #include "intel_chipset.h" #include "intel_reg.h" -extern struct pci_device *pci_dev; -extern uint32_t devid; -extern void *mmio; - #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) +extern void *mmio; +void intel_get_mmio(struct pci_device *pci_dev); + static inline uint32_t INREG(uint32_t reg) { @@ -50,10 +49,8 @@ OUTREG(uint32_t reg, uint32_t val) *(volatile uint32_t *)((volatile char *)mmio + reg) = val; } -void intel_get_pci_device(void); -void intel_get_mmio(void); -void intel_get_drm_devid(int fd); -void intel_copy_bo(struct intel_batchbuffer *batch, - drm_intel_bo *dst_bo, drm_intel_bo *src_bo, - int width, int height); +struct pci_device *intel_get_pci_device(void); + +uint32_t intel_get_drm_devid(int fd); + void intel_map_file(char *); diff --git a/lib/intel_gpu_tools.c b/lib/intel_mmio.c index a699ae82..faaeeef6 100644 --- a/lib/intel_gpu_tools.c +++ b/lib/intel_mmio.c @@ -36,58 +36,12 @@ #include <sys/fcntl.h> #include <sys/stat.h> #include <sys/mman.h> + #include "intel_gpu_tools.h" -#include "i915_drm.h" -#include "intel_batchbuffer.h" -#include "intel_chipset.h" -struct pci_device *pci_dev; -uint32_t devid; void *mmio; void -intel_get_drm_devid(int fd) -{ - int ret; - struct drm_i915_getparam gp; - - gp.param = I915_PARAM_CHIPSET_ID; - gp.value = (int *)&devid; - - ret = ioctl(fd, DRM_IOCTL_I915_GETPARAM, &gp, sizeof(gp)); - assert(ret == 0); -} - -void -intel_get_pci_device(void) -{ - int err; - - err = pci_system_init(); - if (err != 0) { - fprintf(stderr, "Couldn't initialize PCI system: %s\n", - strerror(err)); - exit(1); - } - - /* Grab the graphics card */ - pci_dev = pci_device_find_by_slot(0, 0, 2, 0); - if (pci_dev == NULL) - errx(1, "Couldn't find graphics card"); - - err = pci_device_probe(pci_dev); - if (err != 0) { - fprintf(stderr, "Couldn't probe graphics card: %s\n", - strerror(err)); - exit(1); - } - - if (pci_dev->vendor_id != 0x8086) - errx(1, "Graphics card is non-intel"); - devid = pci_dev->device_id; -} - -void intel_map_file(char *file) { int fd; @@ -110,13 +64,13 @@ intel_map_file(char *file) } void -intel_get_mmio(void) +intel_get_mmio(struct pci_device *pci_dev) { + uint32_t devid; int mmio_bar; int err; - intel_get_pci_device(); - + devid = pci_dev->device_id; if (IS_9XX(devid)) mmio_bar = 0; else @@ -135,47 +89,3 @@ intel_get_mmio(void) } } -void -intel_copy_bo(struct intel_batchbuffer *batch, - drm_intel_bo *dst_bo, drm_intel_bo *src_bo, - int width, int height) -{ - uint32_t src_tiling, dst_tiling, swizzle; - uint32_t src_pitch, dst_pitch; - uint32_t cmd_bits = 0; - - drm_intel_bo_get_tiling(src_bo, &src_tiling, &swizzle); - drm_intel_bo_get_tiling(dst_bo, &dst_tiling, &swizzle); - - src_pitch = width * 4; - if (IS_965(devid) && src_tiling != I915_TILING_NONE) { - src_pitch /= 4; - cmd_bits |= XY_SRC_COPY_BLT_SRC_TILED; - } - - dst_pitch = width * 4; - if (IS_965(devid) && dst_tiling != I915_TILING_NONE) { - dst_pitch /= 4; - cmd_bits |= XY_SRC_COPY_BLT_DST_TILED; - } - - BEGIN_BATCH(8); - OUT_BATCH(XY_SRC_COPY_BLT_CMD | - XY_SRC_COPY_BLT_WRITE_ALPHA | - XY_SRC_COPY_BLT_WRITE_RGB | - cmd_bits); - OUT_BATCH((3 << 24) | /* 32 bits */ - (0xcc << 16) | /* copy ROP */ - dst_pitch); - OUT_BATCH(0); /* dst x1,y1 */ - OUT_BATCH((height << 16) | width); /* dst x2,y2 */ - OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0); - OUT_BATCH(0); /* src x1,y1 */ - OUT_BATCH(src_pitch); - OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0); - ADVANCE_BATCH(); - - intel_batchbuffer_flush(batch); -} - - diff --git a/lib/intel_pci.c b/lib/intel_pci.c new file mode 100644 index 00000000..3bfacb53 --- /dev/null +++ b/lib/intel_pci.c @@ -0,0 +1,71 @@ +/* + * Copyright © 2008 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: + * Eric Anholt <eric@anholt.net> + * + */ + +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <err.h> +#include <assert.h> +#include <sys/ioctl.h> +#include <sys/fcntl.h> +#include <sys/stat.h> +#include <sys/mman.h> + +#include "intel_gpu_tools.h" + +struct pci_device * +intel_get_pci_device(void) +{ + struct pci_device *pci_dev; + int err; + + err = pci_system_init(); + if (err != 0) { + fprintf(stderr, "Couldn't initialize PCI system: %s\n", + strerror(err)); + exit(1); + } + + /* Grab the graphics card */ + pci_dev = pci_device_find_by_slot(0, 0, 2, 0); + if (pci_dev == NULL) + errx(1, "Couldn't find graphics card"); + + err = pci_device_probe(pci_dev); + if (err != 0) { + fprintf(stderr, "Couldn't probe graphics card: %s\n", + strerror(err)); + exit(1); + } + + if (pci_dev->vendor_id != 0x8086) + errx(1, "Graphics card is non-intel"); + + return pci_dev; +} diff --git a/tests/gem_bad_address.c b/tests/gem_bad_address.c index 56a71aa2..188020d4 100644 --- a/tests/gem_bad_address.c +++ b/tests/gem_bad_address.c @@ -65,7 +65,6 @@ int main(int argc, char **argv) int fd; fd = drm_open_any(); - intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); diff --git a/tests/gem_bad_batch.c b/tests/gem_bad_batch.c index ba8aa5d4..da2870bf 100644 --- a/tests/gem_bad_batch.c +++ b/tests/gem_bad_batch.c @@ -61,7 +61,6 @@ int main(int argc, char **argv) int fd; fd = drm_open_any(); - intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); diff --git a/tests/gem_bad_blit.c b/tests/gem_bad_blit.c index 9a52529e..362b5aca 100644 --- a/tests/gem_bad_blit.c +++ b/tests/gem_bad_blit.c @@ -63,7 +63,7 @@ struct intel_batchbuffer *batch; #define BAD_GTT_DEST ((256*1024*1024)) /* past end of aperture */ static void -bad_blit(drm_intel_bo *src_bo) +bad_blit(drm_intel_bo *src_bo, uint32_t devid) { uint32_t src_pitch = 512, dst_pitch = 512; uint32_t cmd_bits = 0; @@ -100,10 +100,11 @@ bad_blit(drm_intel_bo *src_bo) int main(int argc, char **argv) { drm_intel_bo *src; + uint32_t devid; int fd; fd = drm_open_any(); - intel_get_drm_devid(fd); + devid = intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); @@ -111,7 +112,7 @@ int main(int argc, char **argv) src = drm_intel_bo_alloc(bufmgr, "src", 128 * 128, 4096); - bad_blit(src); + bad_blit(src, devid); intel_batchbuffer_free(batch); drm_intel_bufmgr_destroy(bufmgr); diff --git a/tests/gem_pread_after_blit.c b/tests/gem_pread_after_blit.c index 5abdb38a..4ba9a627 100644 --- a/tests/gem_pread_after_blit.c +++ b/tests/gem_pread_after_blit.c @@ -131,9 +131,10 @@ main(int argc, char **argv) drm_intel_bo *src1, *src2, *bo; uint32_t start1 = 0; uint32_t start2 = 1024 * 1024 / 4; + uint32_t devid; fd = drm_open_any(); - intel_get_drm_devid(fd); + devid = intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); @@ -146,21 +147,21 @@ main(int argc, char **argv) /* First, do a full-buffer read after blitting */ printf("Large read after blit 1\n"); - intel_copy_bo(batch, bo, src1, width, height); + intel_copy_bo(batch, bo, src1, width, height, devid); verify_large_read(bo, start1); printf("Large read after blit 2\n"); - intel_copy_bo(batch, bo, src2, width, height); + intel_copy_bo(batch, bo, src2, width, height, devid); verify_large_read(bo, start2); printf("Small reads after blit 1\n"); - intel_copy_bo(batch, bo, src1, width, height); + intel_copy_bo(batch, bo, src1, width, height, devid); verify_small_read(bo, start1); printf("Small reads after blit 2\n"); - intel_copy_bo(batch, bo, src2, width, height); + intel_copy_bo(batch, bo, src2, width, height, devid); verify_small_read(bo, start2); printf("Large read after blit 3\n"); - intel_copy_bo(batch, bo, src1, width, height); + intel_copy_bo(batch, bo, src1, width, height, devid); verify_large_read(bo, start1); drm_intel_bo_unreference(src1); diff --git a/tests/gem_ringfill.c b/tests/gem_ringfill.c index d245f1fe..c9860aa6 100644 --- a/tests/gem_ringfill.c +++ b/tests/gem_ringfill.c @@ -55,11 +55,12 @@ static const int size = 1024 * 1024; int main(int argc, char **argv) { int fd; + uint32_t devid; int i; drm_intel_bo *src_bo, *dst_bo; fd = drm_open_any(); - intel_get_drm_devid(fd); + devid = intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); @@ -84,7 +85,7 @@ int main(int argc, char **argv) * doing this, we aren't likely to with this test. */ for (i = 0; i < 128 * 1024 / (8 * 4) * 1.25; i++) { - intel_copy_bo(batch, dst_bo, src_bo, width, height); + intel_copy_bo(batch, dst_bo, src_bo, width, height, devid); intel_batchbuffer_flush(batch); } diff --git a/tests/gem_tiled_blits.c b/tests/gem_tiled_blits.c index 54378b19..212b4b7b 100644 --- a/tests/gem_tiled_blits.c +++ b/tests/gem_tiled_blits.c @@ -60,47 +60,7 @@ static drm_intel_bufmgr *bufmgr; struct intel_batchbuffer *batch; static int width = 512, height = 512; - -static void -copy_bo(drm_intel_bo *dst_bo, drm_intel_bo *src_bo) -{ - uint32_t src_tiling, dst_tiling, swizzle; - uint32_t src_pitch, dst_pitch; - uint32_t cmd_bits = 0; - - drm_intel_bo_get_tiling(src_bo, &src_tiling, &swizzle); - drm_intel_bo_get_tiling(dst_bo, &dst_tiling, &swizzle); - - src_pitch = width * 4; - if (IS_965(devid) && src_tiling != I915_TILING_NONE) { - src_pitch /= 4; - cmd_bits |= XY_SRC_COPY_BLT_SRC_TILED; - } - - dst_pitch = width * 4; - if (IS_965(devid) && dst_tiling != I915_TILING_NONE) { - dst_pitch /= 4; - cmd_bits |= XY_SRC_COPY_BLT_DST_TILED; - } - - BEGIN_BATCH(8); - OUT_BATCH(XY_SRC_COPY_BLT_CMD | - XY_SRC_COPY_BLT_WRITE_ALPHA | - XY_SRC_COPY_BLT_WRITE_RGB | - cmd_bits); - OUT_BATCH((3 << 24) | /* 32 bits */ - (0xcc << 16) | /* copy ROP */ - dst_pitch); - OUT_BATCH(0); /* dst x1,y1 */ - OUT_BATCH((height << 16) | width); /* dst x2,y2 */ - OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0); - OUT_BATCH(0); /* src x1,y1 */ - OUT_BATCH(src_pitch); - OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0); - ADVANCE_BATCH(); - - intel_batchbuffer_flush(batch); -} +static uint32_t devid; static drm_intel_bo * create_bo(uint32_t start_val) @@ -126,7 +86,7 @@ create_bo(uint32_t start_val) } drm_intel_bo_unmap(linear_bo); - copy_bo(bo, linear_bo); + intel_copy_bo (batch, bo, linear_bo, width, height, devid); drm_intel_bo_unreference(linear_bo); @@ -142,7 +102,7 @@ check_bo(drm_intel_bo *bo, uint32_t start_val) linear_bo = drm_intel_bo_alloc(bufmgr, "linear dst", 1024 * 1024, 4096); - copy_bo(linear_bo, bo); + intel_copy_bo(batch, linear_bo, bo, width, height, devid); drm_intel_bo_map(linear_bo, 0); linear = linear_bo->virtual; @@ -171,7 +131,7 @@ int main(int argc, char **argv) int i; fd = drm_open_any(); - intel_get_drm_devid(fd); + devid = intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); @@ -196,7 +156,7 @@ int main(int argc, char **argv) if (src == dst) continue; - copy_bo(bo[dst], bo[src]); + intel_copy_bo(batch, bo[dst], bo[src], width, height, devid); bo_start_val[dst] = bo_start_val[src]; /* diff --git a/tests/gem_tiled_pread.c b/tests/gem_tiled_pread.c index a6b99bde..e19453ed 100644 --- a/tests/gem_tiled_pread.c +++ b/tests/gem_tiled_pread.c @@ -58,49 +58,8 @@ static const int size = 1024 * 1024; #define PAGE_SIZE 4096 -static void -copy_bo(drm_intel_bo *dst_bo, drm_intel_bo *src_bo) -{ - uint32_t src_tiling, dst_tiling, swizzle; - uint32_t src_pitch, dst_pitch; - uint32_t cmd_bits = 0; - - drm_intel_bo_get_tiling(src_bo, &src_tiling, &swizzle); - drm_intel_bo_get_tiling(dst_bo, &dst_tiling, &swizzle); - - src_pitch = width * 4; - if (IS_965(devid) && src_tiling != I915_TILING_NONE) { - src_pitch /= 4; - cmd_bits |= XY_SRC_COPY_BLT_SRC_TILED; - } - - dst_pitch = width * 4; - if (IS_965(devid) && dst_tiling != I915_TILING_NONE) { - dst_pitch /= 4; - cmd_bits |= XY_SRC_COPY_BLT_DST_TILED; - } - - BEGIN_BATCH(8); - OUT_BATCH(XY_SRC_COPY_BLT_CMD | - XY_SRC_COPY_BLT_WRITE_ALPHA | - XY_SRC_COPY_BLT_WRITE_RGB | - cmd_bits); - OUT_BATCH((3 << 24) | /* 32 bits */ - (0xcc << 16) | /* copy ROP */ - dst_pitch); - OUT_BATCH(0); /* dst x1,y1 */ - OUT_BATCH((height << 16) | width); /* dst x2,y2 */ - OUT_RELOC(dst_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, 0); - OUT_BATCH(0); /* src x1,y1 */ - OUT_BATCH(src_pitch); - OUT_RELOC(src_bo, I915_GEM_DOMAIN_RENDER, 0, 0); - ADVANCE_BATCH(); - - intel_batchbuffer_flush(batch); -} - static drm_intel_bo * -create_bo(void) +create_bo(uint32_t devid) { drm_intel_bo *bo, *linear_bo; uint32_t *linear; @@ -122,7 +81,7 @@ create_bo(void) linear[i] = val++; drm_intel_bo_unmap(linear_bo); - copy_bo(bo, linear_bo); + intel_copy_bo(batch, bo, linear_bo, width, height, devid); drm_intel_bo_unreference(linear_bo); @@ -163,19 +122,20 @@ int main(int argc, char **argv) { int fd; + uint32_t devid; drm_intel_bo *bo; int i, iter = 100; uint32_t buf[width * height]; uint32_t tiling, swizzle; fd = drm_open_any(); - intel_get_drm_devid(fd); + devid = intel_get_drm_devid(fd); bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); drm_intel_bufmgr_gem_enable_reuse(bufmgr); batch = intel_batchbuffer_alloc(bufmgr); - bo = create_bo(); + bo = create_bo(devid); drm_intel_bo_get_tiling(bo, &tiling, &swizzle); diff --git a/tools/intel_audio_dump.c b/tools/intel_audio_dump.c index 704ad235..f371b942 100644 --- a/tools/intel_audio_dump.c +++ b/tools/intel_audio_dump.c @@ -38,6 +38,7 @@ #include <fcntl.h> #include <getopt.h> #include <arpa/inet.h> + #include "intel_gpu_tools.h" #define AUD_CONFIG 0x62000 @@ -187,7 +188,8 @@ int main(int argc, char **argv) int i; do_self_tests(); - intel_get_mmio(); + + intel_get_mmio(intel_get_pci_device()); /* printf("%-18s %8s %s\n\n", "register name", "raw value", "description"); */ diff --git a/tools/intel_error_decode.c b/tools/intel_error_decode.c index d4bf8bcf..af205dc3 100644 --- a/tools/intel_error_decode.c +++ b/tools/intel_error_decode.c @@ -55,9 +55,15 @@ #include "instdone.h" static void -print_instdone (unsigned int instdone, unsigned int instdone1) +print_instdone (uint32_t devid, unsigned int instdone, unsigned int instdone1) { int i; + static int once; + + if (!once) { + init_instdone_definitions(devid); + once = 1; + } for (i = 0; i < num_instdone_bits; i++) { int busy = 0; @@ -190,11 +196,11 @@ read_data_file (const char * filename) matched = sscanf (line, " INSTDONE: 0x%08x\n", ®); if (matched) - print_instdone (reg, -1); + print_instdone (devid, reg, -1); matched = sscanf (line, " INSTDONE1: 0x%08x\n", ®); if (matched) - print_instdone (-1, reg); + print_instdone (devid, -1, reg); continue; } @@ -247,8 +253,6 @@ main (int argc, char *argv[]) return 1; } - init_instdone_definitions(); - if (argc == 1) { path = "/debug/dri/0"; err = stat (path, &st); diff --git a/tools/intel_gpu_dump.c b/tools/intel_gpu_dump.c index 9fd3f123..a6d2acb4 100644 --- a/tools/intel_gpu_dump.c +++ b/tools/intel_gpu_dump.c @@ -92,7 +92,7 @@ print_instdone (unsigned int instdone, unsigned int instdone1) * exit()). */ static void -read_data_file (const char * filename, int is_batch) +read_data_file (uint32_t devid, const char * filename, int is_batch) { FILE *file; uint32_t *data = NULL; @@ -250,7 +250,9 @@ main (int argc, char *argv[]) const char *path; struct stat st; int err; + uint32_t devid; uint32_t instdone, instdone1 = 0; + struct pci_device *pci_dev; if (argc > 2) { fprintf (stderr, @@ -271,8 +273,10 @@ main (int argc, char *argv[]) return 1; } - intel_get_mmio(); - init_instdone_definitions(); + pci_dev = intel_get_pci_device(); + devid = pci_dev->device_id; + intel_get_mmio(pci_dev); + init_instdone_definitions(devid); if (argc == 1) { path = "/debug/dri/0"; @@ -352,7 +356,7 @@ main (int argc, char *argv[]) asprintf (&filename, "%s/i915_batchbuffers", path); intel_decode_context_set_head_tail(acthd, 0xffffffff); - read_data_file (filename, 1); + read_data_file (devid, filename, 1); free (filename); asprintf (&filename, "%s/i915_ringbuffer_data", path); @@ -360,10 +364,10 @@ main (int argc, char *argv[]) printf("Ringbuffer: "); printf("Reminder: head pointer is GPU read, tail pointer is CPU " "write\n"); - read_data_file (filename, 0); + read_data_file (devid, filename, 0); free (filename); } else { - read_data_file (path, 1); + read_data_file (devid, path, 1); } return 0; diff --git a/tools/intel_gpu_time.c b/tools/intel_gpu_time.c index b36bf389..c30b84d2 100644 --- a/tools/intel_gpu_time.c +++ b/tools/intel_gpu_time.c @@ -65,7 +65,7 @@ int main(int argc, char **argv) static struct rusage rusage; int status; - intel_get_mmio(); + intel_get_mmio(intel_get_pci_device()); if (argc == 1) { fprintf(stderr, "usage: %s cmd [args...]\n", argv[0]); diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c index 3ddbd387..b82a9bd8 100644 --- a/tools/intel_gpu_top.c +++ b/tools/intel_gpu_top.c @@ -137,8 +137,9 @@ print_clock(char *name, int clock) { } static int -print_clock_info(void) +print_clock_info(struct pci_device *pci_dev) { + uint32_t devid = pci_dev->device_id; uint16_t gcfgc; if (IS_GM45(devid)) { @@ -284,11 +285,16 @@ print_percentage_bar(float percent, int cur_line_len) int main(int argc, char **argv) { - intel_get_mmio(); + struct pci_device *pci_dev; uint32_t ring_size; + uint32_t devid; int i; - init_instdone_definitions(); + pci_dev = intel_get_pci_device(); + devid = pci_dev->device_id; + intel_get_mmio(pci_dev); + init_instdone_definitions(devid); + for (i = 0; i < num_instdone_bits; i++) { top_bits[i].bit = &instdone_bits[i]; top_bits[i].count = 0; @@ -362,7 +368,7 @@ int main(int argc, char **argv) printf("%s", clear_screen); - print_clock_info(); + print_clock_info(pci_dev); percent = ring_idle / SAMPLES_TO_PERCENT_RATIO; len = printf("%30s: %3d%%: ", "ring idle", percent); diff --git a/tools/intel_gtt.c b/tools/intel_gtt.c index 2e71104c..2c1639cd 100644 --- a/tools/intel_gtt.c +++ b/tools/intel_gtt.c @@ -42,10 +42,14 @@ int main(int argc, char **argv) { + struct pci_device *pci_dev; int start, aper_size; unsigned char *gtt; + uint32_t devid; - intel_get_mmio(); + pci_dev = intel_get_pci_device(); + devid = pci_dev->device_id; + intel_get_mmio(pci_dev); if (!IS_9XX(devid)) { printf("Unsupported chipset for gtt dumper\n"); diff --git a/tools/intel_lid.c b/tools/intel_lid.c index 71eedb29..908224ee 100644 --- a/tools/intel_lid.c +++ b/tools/intel_lid.c @@ -117,7 +117,7 @@ int main(int argc, char **argv) { int swf14, acpi_lid; - intel_get_mmio(); + intel_get_mmio(intel_get_pci_device()); while (1) { swf14 = INREG(SWF14); diff --git a/tools/intel_reg_dumper.c b/tools/intel_reg_dumper.c index 8a9cf7a0..b1a7e47a 100644 --- a/tools/intel_reg_dumper.c +++ b/tools/intel_reg_dumper.c @@ -33,6 +33,8 @@ #include <err.h> #include "intel_gpu_tools.h" +static uint32_t devid; + #define DEBUGSTRING(func) static void func(char **result, int reg, uint32_t val) DEBUGSTRING(i830_16bit_func) @@ -1658,10 +1660,15 @@ intel_dump_regs(void) int main(int argc, char** argv) { + struct pci_device *pci_dev; + + pci_dev = intel_get_pci_device(); + devid = pci_dev->device_id; /* XXX not true when mapping! */ + if (argc == 2) intel_map_file(argv[1]); else - intel_get_mmio(); + intel_get_mmio(pci_dev); if (HAS_PCH_SPLIT(devid) || getenv("HAS_PCH_SPLIT")) ironlake_dump_regs(); diff --git a/tools/intel_reg_read.c b/tools/intel_reg_read.c index 9a7712fc..02599245 100644 --- a/tools/intel_reg_read.c +++ b/tools/intel_reg_read.c @@ -53,7 +53,7 @@ int main(int argc, char** argv) exit(1); } - intel_get_mmio(); + intel_get_mmio(intel_get_pci_device()); if (!strcmp(argv[1], "-f")) { dump_range(0x00000, 0x00fff); /* VGA registers */ diff --git a/tools/intel_reg_snapshot.c b/tools/intel_reg_snapshot.c index f8219280..fcc8b812 100644 --- a/tools/intel_reg_snapshot.c +++ b/tools/intel_reg_snapshot.c @@ -29,9 +29,13 @@ int main(int argc, char** argv) { + struct pci_device *pci_dev; + uint32_t devid; int mmio_bar; - intel_get_mmio(); + pci_dev = intel_get_pci_device(); + devid = pci_dev->device_id; + intel_get_mmio(pci_dev); if (IS_9XX(devid)) mmio_bar = 0; diff --git a/tools/intel_reg_write.c b/tools/intel_reg_write.c index 7bed0623..c8af9bbf 100644 --- a/tools/intel_reg_write.c +++ b/tools/intel_reg_write.c @@ -43,7 +43,7 @@ int main(int argc, char** argv) exit(1); } - intel_get_mmio(); + intel_get_mmio(intel_get_pci_device()); sscanf(argv[1], "0x%x", ®); sscanf(argv[2], "0x%x", &value); ptr = (volatile uint32_t *)((volatile char *)mmio + reg); |