[Intel-gfx] [PATCH] test/testdisplay:add cursor test
Signed-off-by: Hai Lan hai@intel.com --- tests/testdisplay.c | 32 +--- 1 files changed, 25 insertions(+), 7 deletions(-) diff --git a/tests/testdisplay.c b/tests/testdisplay.c index 01f31dc..174d5c7 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -75,7 +75,7 @@ struct udev_monitor *uevent_monitor; drmModeRes *resources; int fd, modes; int dump_info = 0, test_all_modes =0, test_preferred_mode = 0, force_mode = 0, - test_plane, enable_tiling; + test_plane, enable_tiling, test_cursor; int sleep_between_modes = 5; uint32_t depth = 24; @@ -823,7 +823,7 @@ set_mode(struct connector *c) cairo_surface_t *surface; cairo_status_t status; cairo_t *cr; - uint32_t handle; + uint32_t handle,cursor_handle; if (test_all_modes) c-mode = c-connector-modes[j]; @@ -872,7 +872,6 @@ set_mode(struct connector *c) handle, fb_id); cairo_surface_destroy(surface); gem_close(fd, handle); - if (ret) { fprintf(stderr, failed to add fb (%dx%d): %s\n, width, height, strerror(errno)); @@ -888,6 +887,21 @@ set_mode(struct connector *c) continue; } + if (test_cursor) { + cursor_handle = gem_create(fd,64*64*4); + char * cursor_buff = gem_mmap(fd, cursor_handle, 64*64*4, PROT_READ | PROT_WRITE); + for(int i=0;i64*64*4;i++) + *(cursor_buff+i)=0xff; + + drmModeSetCursor(fd,c-crtc,cursor_handle,64,64); + for(int i=0;i10;i++) { + drmModeMoveCursor(fd,c-crtc,i*100, 0); + sleep(1); + } + drmModeSetCursor(fd,c-crtc,0,64,64); + gem_close(fd, cursor_handle); + } + if (test_plane) enable_plane(c); @@ -931,7 +945,7 @@ static int update_display(void) dump_planes(); } - if (test_preferred_mode || test_all_modes || force_mode) { + if (test_preferred_mode || test_all_modes || force_mode || test_cursor) { /* Find any connected displays */ for (c = 0; c resources-count_connectors; c++) { connectors[c].id = resources-connectors[c]; @@ -944,11 +958,11 @@ static int update_display(void) extern char *optarg; extern int optind, opterr, optopt; -static char optstr[] = hiaf:s:d:pmt; +static char optstr[] = hiaf:s:d:pmtc; static void usage(char *name) { - fprintf(stderr, usage: %s [-hiafs]\n, name); + fprintf(stderr, usage: %s [-hiaf:s:d:pmtc]\n, name); fprintf(stderr, \t-i\tdump info\n); fprintf(stderr, \t-a\ttest all modes\n); fprintf(stderr, \t-s\tduration\tsleep between each mode test\n); @@ -959,6 +973,7 @@ static void usage(char *name) fprintf(stderr, \t-f\tclock MHz,hdisp,hsync-start,hsync-end,htotal,\n); fprintf(stderr, \t\tvdisp,vsync-start,vsync-end,vtotal\n); fprintf(stderr, \t\ttest force mode\n); + fprintf(stderr, \t-c\ttest cursor\n); fprintf(stderr, \tDefault is to test all modes.\n); exit(0); } @@ -1048,6 +1063,9 @@ int main(int argc, char **argv) case 't': enable_tiling = 1; break; + case 'c': + test_cursor = 1; + break; default: fprintf(stderr, unknown option %c\n, c); /* fall through */ @@ -1057,7 +1075,7 @@ int main(int argc, char **argv) } } if (!test_all_modes !force_mode !dump_info - !test_preferred_mode) + !test_preferred_mode !test_cursor) test_all_modes = 1; for (i = 0; i ARRAY_SIZE(modules); i++) { -- 1.7.0.1 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] test/testdisplay:add cursor test
Dear Hai, Am Samstag, den 22.10.2011, 22:03 -0400 schrieb Hai Lan: what does this test do? For the unknowledgeable user what is supposed to happen, that means, when is the test successful and when not? Signed-off-by: Hai Lan hai@intel.com --- tests/testdisplay.c | 32 +--- 1 files changed, 25 insertions(+), 7 deletions(-) diff --git a/tests/testdisplay.c b/tests/testdisplay.c index 01f31dc..174d5c7 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -75,7 +75,7 @@ struct udev_monitor *uevent_monitor; drmModeRes *resources; int fd, modes; int dump_info = 0, test_all_modes =0, test_preferred_mode = 0, force_mode = 0, - test_plane, enable_tiling; + test_plane, enable_tiling, test_cursor; int sleep_between_modes = 5; uint32_t depth = 24; @@ -823,7 +823,7 @@ set_mode(struct connector *c) cairo_surface_t *surface; cairo_status_t status; cairo_t *cr; - uint32_t handle; + uint32_t handle,cursor_handle; Missing space? if (test_all_modes) c-mode = c-connector-modes[j]; @@ -872,7 +872,6 @@ set_mode(struct connector *c) handle, fb_id); cairo_surface_destroy(surface); gem_close(fd, handle); - if (ret) { fprintf(stderr, failed to add fb (%dx%d): %s\n, width, height, strerror(errno)); @@ -888,6 +887,21 @@ set_mode(struct connector *c) continue; } + if (test_cursor) { + cursor_handle = gem_create(fd,64*64*4); + char * cursor_buff = gem_mmap(fd, cursor_handle, 64*64*4, PROT_READ | PROT_WRITE); + for(int i=0;i64*64*4;i++) + *(cursor_buff+i)=0xff; + + drmModeSetCursor(fd,c-crtc,cursor_handle,64,64); + for(int i=0;i10;i++) { + drmModeMoveCursor(fd,c-crtc,i*100, 0); + sleep(1); + } + drmModeSetCursor(fd,c-crtc,0,64,64); + gem_close(fd, cursor_handle); + } + if (test_plane) enable_plane(c); @@ -931,7 +945,7 @@ static int update_display(void) dump_planes(); } - if (test_preferred_mode || test_all_modes || force_mode) { + if (test_preferred_mode || test_all_modes || force_mode || test_cursor) { /* Find any connected displays */ for (c = 0; c resources-count_connectors; c++) { connectors[c].id = resources-connectors[c]; @@ -944,11 +958,11 @@ static int update_display(void) extern char *optarg; extern int optind, opterr, optopt; -static char optstr[] = hiaf:s:d:pmt; +static char optstr[] = hiaf:s:d:pmtc; static void usage(char *name) { - fprintf(stderr, usage: %s [-hiafs]\n, name); + fprintf(stderr, usage: %s [-hiaf:s:d:pmtc]\n, name); fprintf(stderr, \t-i\tdump info\n); fprintf(stderr, \t-a\ttest all modes\n); fprintf(stderr, \t-s\tduration\tsleep between each mode test\n); @@ -959,6 +973,7 @@ static void usage(char *name) fprintf(stderr, \t-f\tclock MHz,hdisp,hsync-start,hsync-end,htotal,\n); fprintf(stderr, \t\tvdisp,vsync-start,vsync-end,vtotal\n); fprintf(stderr, \t\ttest force mode\n); + fprintf(stderr, \t-c\ttest cursor\n); fprintf(stderr, \tDefault is to test all modes.\n); exit(0); } @@ -1048,6 +1063,9 @@ int main(int argc, char **argv) case 't': enable_tiling = 1; break; + case 'c': + test_cursor = 1; + break; default: fprintf(stderr, unknown option %c\n, c); /* fall through */ @@ -1057,7 +1075,7 @@ int main(int argc, char **argv) } } if (!test_all_modes !force_mode !dump_info - !test_preferred_mode) + !test_preferred_mode !test_cursor) test_all_modes = 1; for (i = 0; i ARRAY_SIZE(modules); i++) { Thanks, Paul signature.asc Description: This is a digitally signed message part ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH] test/testdisplay:add cursor test
what does this test do? For the unknowledgeable user what is supposed to happen, that means, when is the test successful and when not? I wrote this patch to test whether the cursor can work OK. It needs the tester to watch the screen. If the tester can see the white cursor move from left to right, it can prove that the cursor works OK. If not, the cursor driver is wrong. Thanks Hai Lan ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] CRT not detected via hotplug on resume
Keith, sorry for the late reply, but it took until now until the problem came back. My problem was that with my G35 (GMA X3500) 00:02.0 VGA compatible controller: Intel Corporation 82G35 Express Integrated Graphics Controller (rev 03) (prog-if 00 [VGA controller]) Subsystem: ASUSTeK Computer Inc. Device 8276 Flags: bus master, fast devsel, latency 0, IRQ 44 Memory at fe80 (32-bit, non-prefetchable) [size=1M] Memory at d000 (64-bit, prefetchable) [size=256M] I/O ports at cc00 [size=8] Expansion ROM at unassigned [disabled] Capabilities: access denied Kernel driver in use: i915 SDVO did not come up after resume in rare cases, i.e. the screen stays black (machine is fine, login via ssh is no problem at all): http://lists.freedesktop.org/archives/intel-gfx/2011-September/012132.html Now I got a register dump from a clean resume: http://bokomoko.de/~rd/GMA3500-black-screen/intel_reg_dump-20111022-working- screen.dump and a not working resume http://bokomoko.de/~rd/GMA3500-black-screen/intel_reg_dump-20111022-black- screen.dump Here is the diff of the register dumps, a few registers are different: blackbox:~# diff -u intel_reg_dump-20111022-working-screen.dump intel_reg_dump-20111022-black-screen.dump --- intel_reg_dump-20111022-working-screen.dump 2011-10-22 18:17:31.740634880 +0200 +++ intel_reg_dump-20111022-black-screen.dump 2011-10-22 18:14:10.651270448 +0200 @@ -1,4 +1,4 @@ - DCC: 0x0018 ( �y�dcz�T�v�H���d�{�) + DCC: 0x0018 ( �|�t}�d���z�X��d�~�) CHDECMISC: 0x00ac (XOR bank/rank, ch2 enh disabled, ch1 enh enabled, ch0 enh enabled, flex disabled, ep not present) C0DRB0: 0x0018 (0x0008) C0DRB1: 0x00180010 (0x0010) @@ -51,18 +51,18 @@ DSPAPOS: 0x (0, 0) DSPASIZE: 0x (1, 1) DSPABASE: 0x -DSPASURF: 0x0144c000 +DSPASURF: 0x0e4eb000 DSPATILEOFF: 0x PIPEACONF: 0xc000 (enabled, active) PIPEASRC: 0x04ff03ff (1280, 1024) - PIPEASTAT: 0x0307 (status: VSYNC_INT_STATUS DLINE_COMPARE_STATUS SVBLANK_INT_STATUS VBLANK_INT_STATUS OREG_UPDATE_STATUS) + PIPEASTAT: 0x00040203 (status: SVBLANK_INT_ENABLE VSYNC_INT_STATUS VBLANK_INT_STATUS OREG_UPDATE_STATUS) PIPEA_GMCH_DATA_M: 0x PIPEA_GMCH_DATA_N: 0x PIPEA_DP_LINK_M: 0x PIPEA_DP_LINK_N: 0x CURSOR_A_BASE: 0x0195 CURSOR_A_CONTROL: 0x0427 - CURSOR_A_POSITION: 0x0267800b + CURSOR_A_POSITION: 0x024b0182 FPA0: 0x00020e08 (n = 2, m1 = 14, m2 = 8) FPA1: 0x00020e08 (n = 2, m1 = 14, m2 = 8) DPLL_A: 0xd4020c00 (enabled, dvo, default clock, DAC/serial mode, p1 = 2, p2 = 10) @@ -150,7 +150,7 @@ FBC_CONTROL2: 0x FBC_FENCE_OFF: 0x FBC_MOD_NUM: 0x - MI_MODE: 0x0240 + MI_MODE: 0x0040 MI_ARB_STATE: 0x0044 MI_RDRET_STATE: 0x ECOSKPD: 0x0307 @@ -195,36 +195,36 @@ FENCE 5: 0x (disabled) FENCE 6: 0x (disabled) FENCE 7: 0x (disabled) -FENCE 8: 0x085f809d (disabled) -FENCE 9: 0x08af7000 (disabled) - FENCE 10: 0x0ae6409d (disabled) - FENCE 11: 0x0b363000 (disabled) - FENCE 12: 0x0e4eb09d (disabled) - FENCE 13: 0x0e9ea000 (disabled) - FENCE 14: 0x04f5d09d (disabled) - FENCE 15: 0x04f84000 (disabled) - FENCE START 0: 0x085f809d ( enabled, X tile walk, 5120 pitch, 0x085f8000 start) - FENCE END 0: 0x08af7000 ( 0x08af7000 end) - FENCE START 1: 0x0ae6409d ( enabled, X tile walk, 5120 pitch, 0x0ae64000 start) - FENCE END 1: 0x0b363000 ( 0x0b363000 end) - FENCE START 2: 0x0e4eb09d ( enabled, X tile walk, 5120 pitch, 0x0e4eb000 start) - FENCE END 2: 0x0e9ea000 ( 0x0e9ea000 end) - FENCE START 3: 0x04f5d09d ( enabled, X tile walk, 5120 pitch, 0x04f5d000 start) - FENCE END 3: 0x04f84000 ( 0x04f84000 end) - FENCE START 4: 0x07ddb06d ( enabled, X tile walk, 3584 pitch, 0x07ddb000 start) - FENCE END 4: 0x080da000 ( 0x080da000 end) - FENCE START 5: 0x048f109d ( enabled, X tile walk, 5120 pitch, 0x048f1000 start) - FENCE END 5: 0x04918000 ( 0x04918000 end) - FENCE START 6: 0x0d39e09d ( enabled, X tile walk, 5120 pitch, 0x0d39e000 start) - FENCE END 6: 0x0d89d000 ( 0x0d89d000 end) - FENCE START 7: 0x0144c09d
Re: [Intel-gfx] [PATCH] test/testdisplay:add cursor test
On Oct 22, 2011 10:13 AM, Hai Lan hai@intel.com wrote: Signed-off-by: Hai Lan hai@intel.com I like this one, simple and functional. Reviewed-by: Eugeni Dodonov eugeni.dodo...@intel.com ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH 2/3] drm/i915: Force sync command ordering (Gen6+)
The docs say this is required for Gen7, and since the bit was added for Gen6, we are also setting it there pit pf paranoia. Particularly as Chris points out, if PIPE_CONTROL counts as a 3d state packet. This was found through doc inspection by Ken and applies to Gen6+; Cc: Keith Packard kei...@keithp.com Reported-by: Kenneth Graunke kenn...@whitecape.org Signed-off-by: Ben Widawsky b...@bwidawsk.net Reviewed-by: Chris Wilson ch...@chris-wilson.co.uk Reviewed-by: Daniel Vetter daniel.vet...@ffwll.ch --- drivers/gpu/drm/i915/i915_gem_execbuffer.c |9 +++-- drivers/gpu/drm/i915/i915_reg.h|1 + drivers/gpu/drm/i915/intel_ringbuffer.c|3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 1d66c24..1589a19 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -967,6 +967,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, struct intel_ring_buffer *ring; u32 exec_start, exec_len; u32 seqno; + u32 mask; int ret, mode, i; if (!i915_gem_check_execbuffer(args)) { @@ -1127,6 +1128,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, } mode = args-flags I915_EXEC_CONSTANTS_MASK; + mask = I915_EXEC_CONSTANTS_MASK; switch (mode) { case I915_EXEC_CONSTANTS_REL_GENERAL: case I915_EXEC_CONSTANTS_ABSOLUTE: @@ -1140,6 +1142,10 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, mode == I915_EXEC_CONSTANTS_REL_SURFACE) return -EINVAL; + /* The HW changed the meaning on this bit on gen6 */ + if (INTEL_INFO(dev)-gen = 6) + mask = ~I915_EXEC_CONSTANTS_REL_SURFACE; + ret = intel_ring_begin(ring, 4); if (ret) goto err; @@ -1147,8 +1153,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, intel_ring_emit(ring, MI_NOOP); intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1)); intel_ring_emit(ring, INSTPM); - intel_ring_emit(ring, - I915_EXEC_CONSTANTS_MASK 16 | mode); + intel_ring_emit(ring, mask 16 | mode); intel_ring_advance(ring); dev_priv-relative_constants_mode = mode; diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 138eae1..51569f2 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -436,6 +436,7 @@ #define INSTPM_AGPBUSY_DIS (111) /* gen3: when disabled, pending interrupts will not assert AGPBUSY# and will only be delivered when out of C3. */ +#define INSTPM_FORCE_ORDERING(17) /* GEN6+ */ #define ACTHD 0x020c8 #define FW_BLC 0x020d8 #define FW_BLC20x020dc diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 0e99589..a3c0b13 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -297,6 +297,9 @@ static int init_render_ring(struct intel_ring_buffer *ring) } if (INTEL_INFO(dev)-gen = 6) { + I915_WRITE(INSTPM, + INSTPM_FORCE_ORDERING 16 | + INSTPM_FORCE_ORDERING); } else if (IS_GEN5(dev)) { ret = init_pipe_control(ring); if (ret) -- 1.7.7 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH 3/3] drm/i915: extract constant offset setting
Simple refactor. Cc: Keith Packard kei...@keithp.com Reviewed-by: Chris Wilson ch...@chris-wilson.co.uk Signed-off-by: Ben Widawsky b...@bwidawsk.net --- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 82 1 files changed, 46 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 1589a19..a5c856b 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -954,6 +954,50 @@ i915_gem_execbuffer_retire_commands(struct drm_device *dev, } static int +i915_gem_set_constant_offset(struct intel_ring_buffer *ring, int mode) +{ + struct drm_device *dev = ring-dev; + struct drm_i915_private *dev_priv = dev-dev_private; + uint32_t mask = I915_EXEC_CONSTANTS_MASK; + int ret; + + switch (mode) { + case I915_EXEC_CONSTANTS_REL_GENERAL: + case I915_EXEC_CONSTANTS_ABSOLUTE: + case I915_EXEC_CONSTANTS_REL_SURFACE: + if (ring == dev_priv-ring[RCS] + mode != dev_priv-relative_constants_mode) { + if (INTEL_INFO(dev)-gen 4) + return -EINVAL; + + if (INTEL_INFO(dev)-gen 5 + mode == I915_EXEC_CONSTANTS_REL_SURFACE) + return -EINVAL; + + /* The HW changed the meaning on this bit on gen6 */ + if (INTEL_INFO(dev)-gen = 6) + mask = ~I915_EXEC_CONSTANTS_REL_SURFACE; + + ret = intel_ring_begin(ring, 4); + if (ret) + return ret; + + intel_ring_emit(ring, MI_NOOP); + intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1)); + intel_ring_emit(ring, INSTPM); + intel_ring_emit(ring, mask 16 | mode); + intel_ring_advance(ring); + + dev_priv-relative_constants_mode = mode; + } + return 0; + default: + DRM_ERROR(execbuf with unknown constants: %d\n, mode); + return -EINVAL; + } +} + +static int i915_gem_do_execbuffer(struct drm_device *dev, void *data, struct drm_file *file, struct drm_i915_gem_execbuffer2 *args, @@ -967,7 +1011,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, struct intel_ring_buffer *ring; u32 exec_start, exec_len; u32 seqno; - u32 mask; int ret, mode, i; if (!i915_gem_check_execbuffer(args)) { @@ -1128,42 +1171,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, } mode = args-flags I915_EXEC_CONSTANTS_MASK; - mask = I915_EXEC_CONSTANTS_MASK; - switch (mode) { - case I915_EXEC_CONSTANTS_REL_GENERAL: - case I915_EXEC_CONSTANTS_ABSOLUTE: - case I915_EXEC_CONSTANTS_REL_SURFACE: - if (ring == dev_priv-ring[RCS] - mode != dev_priv-relative_constants_mode) { - if (INTEL_INFO(dev)-gen 4) - return -EINVAL; - - if (INTEL_INFO(dev)-gen 5 - mode == I915_EXEC_CONSTANTS_REL_SURFACE) - return -EINVAL; - - /* The HW changed the meaning on this bit on gen6 */ - if (INTEL_INFO(dev)-gen = 6) - mask = ~I915_EXEC_CONSTANTS_REL_SURFACE; - - ret = intel_ring_begin(ring, 4); - if (ret) - goto err; - - intel_ring_emit(ring, MI_NOOP); - intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1)); - intel_ring_emit(ring, INSTPM); - intel_ring_emit(ring, mask 16 | mode); - intel_ring_advance(ring); - - dev_priv-relative_constants_mode = mode; - } - break; - default: - DRM_ERROR(execbuf with unknown constants: %d\n, mode); - ret = -EINVAL; + ret = i915_gem_set_constant_offset(ring, mode); + if (ret) goto err; - } trace_i915_gem_ring_dispatch(ring, seqno); -- 1.7.7 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx