linux/drivers/gpu/drm/radeon
Felix Kuehling 81ffbbedc3 drm/radeon: fix deferred page-flip detection logic on Avivo-based ASICs
This fixes page-flip-related flickering observed on Iconia Tab W500.

The update_pending status returned by radeon_page_flip is very accurate on
Avivo-based ASICs when vpos is negative.

Experiments were conducted on several ASIC generations ranging from RS690
to Cayman where the page flip was artificially timed to occur at a specific
vpos. With negative vpos, overriding update_pending always lead to
flickering.

The same experiment on RV380 and RV410 showed that update_pending is not
accurate with negative vpos. In most cases update_pending == 1 is returned
although the flip would complete before the start of the next frame.
Therefore I left the behaviour unchanged for pre-AVIVO ASICs for
performance reasons, although this may result in flickering in rare cases.

This change also makes the logic a little easier to understand.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
Signed-off-by: Dave Airlie <airlied@redhat.com>
2012-02-29 10:23:50 +00:00
..
reg_srcs drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
.gitignore
atom-bits.h
atom-names.h
atom-types.h
atom.c drm: introduce drm_can_sleep and use in intel/radeon drivers. (v2) 2012-01-06 10:01:35 +00:00
atom.h drm/radeon/kms/atom: fix handling of FB scratch indices 2011-10-19 09:47:47 +01:00
atombios_crtc.c drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
atombios_dp.c drm/radeon/kms: fix TRAVIS panel setup 2012-02-02 15:26:50 +00:00
atombios_encoders.c drm/radeon/kms: refine TMDS dual link checks 2012-01-24 17:35:52 +00:00
atombios_i2c.c drm/radeon/kms/dce3+: add support for hw i2c using atom 2012-02-03 09:38:05 +00:00
atombios.h drm/radeon/kms: add missing external encoder action 2011-06-17 09:28:01 +10:00
avivod.h
cayman_blit_shaders.c drm/radeon/kms: add blit support for cayman (v2) 2011-05-26 09:19:31 +10:00
cayman_blit_shaders.h drm/radeon/kms: add blit support for cayman (v2) 2011-05-26 09:19:31 +10:00
evergreen_blit_kms.c drm/radeon/kms: common definitions for blit copy code 2012-02-03 09:31:14 +00:00
evergreen_blit_shaders.c
evergreen_blit_shaders.h
evergreen_cs.c drm/radeon/evergreen: make texdw[] array larger 2012-02-16 09:18:13 +00:00
evergreen_reg.h drm/radeon/kms: add wait_for_vblank asic callback 2012-02-27 14:46:13 +00:00
evergreen.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
evergreend.h drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
Kconfig drm/radeon/kms: clean up the radeon kms Kconfig 2011-05-26 09:22:05 +10:00
Makefile drm/radeon/kms/dce3+: add support for hw i2c using atom 2012-02-03 09:38:05 +00:00
mkregtable.c
ni_reg.h
ni.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
nid.h drm/radeon/kms: add some missing semaphore init 2012-01-23 11:03:26 +00:00
ObjectID.h
r100_track.h drm/radeon: Remove more bogus inlines in the radeon driver. 2011-10-18 09:44:52 +01:00
r100.c drm/radeon/kms: move clock/pcie setting callbacks into pm struct 2012-02-29 10:15:16 +00:00
r100d.h
r200.c drm/radeon/kms: add r1xx/r2xx CS support for tiled textures 2012-02-03 09:41:35 +00:00
r300_cmdbuf.c drm/radeon: Move more code out of line 2011-10-18 09:53:05 +01:00
r300_reg.h
r300.c drm/radeon/kms: reorganize gart callbacks 2012-02-29 10:14:57 +00:00
r300d.h
r420.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
r420d.h
r500_reg.h drm/radeon/kms: add wait_for_vblank asic callback 2012-02-27 14:46:13 +00:00
r520.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
r520d.h
r600_audio.c drm/radeon/kms: support for audio on Evergreen 2011-12-19 18:40:26 +00:00
r600_blit_kms.c drm/radeon/kms: common definitions for blit copy code 2012-02-03 09:31:14 +00:00
r600_blit_shaders.c
r600_blit_shaders.h
r600_blit.c drm/radeon: drop inlines in r600_blit.c 2011-10-18 09:44:38 +01:00
r600_cp.c drm/radeon/kms: add support for semaphores v3 2011-12-20 19:49:36 +00:00
r600_cs.c drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
r600_hdmi.c drm/radeon/kms: define TMDS/LVTM HDMI enabling bits 2012-01-03 09:40:47 +00:00
r600_reg.h
r600.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
r600d.h drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
radeon_acpi.c drm/radeon/kms: Skip ACPI call to ATIF when possible 2011-12-01 09:57:34 +00:00
radeon_agp.c
radeon_asic.c drm/radeon/kms: clean up radeon_asic struct (v2) 2012-02-29 10:16:20 +00:00
radeon_asic.h drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
radeon_atombios.c drm/radeon/kms/atom: fix possible segfault in pm setup 2012-01-03 09:17:16 +00:00
radeon_atpx_handler.c drm/radeon: fix use after free in ATRM bios reading code. 2012-02-02 15:25:16 +00:00
radeon_benchmark.c drm/radeon/kms: reorganize copy callbacks 2012-02-29 10:14:14 +00:00
radeon_bios.c drm/radeon: finish getting bios earlier 2012-01-24 17:34:32 +00:00
radeon_blit_common.h drm/radeon/kms: common definitions for blit copy code 2012-02-03 09:31:14 +00:00
radeon_clocks.c drm/radeon/kms: move clock/pcie setting callbacks into pm struct 2012-02-29 10:15:16 +00:00
radeon_combios.c drm/radeon/kms/combios: fix dynamic allocation of PM clock modes 2011-11-12 17:46:40 +00:00
radeon_connectors.c drm/radeon/kms: set HPD polarity in hpd_init() 2011-11-03 17:53:18 +00:00
radeon_cp.c drm: move pci bus master enable into driver. 2012-02-16 18:31:07 +00:00
radeon_cs.c drm/radeon: also make the cs_parse function per ring 2012-02-29 10:11:30 +00:00
radeon_cursor.c drm/radeon: Set cursor x/y to 0 when x/yorigin > 0. 2011-10-03 18:37:37 +01:00
radeon_device.c drm/radeon/kms: disable output polling when suspended 2012-02-01 15:41:39 +00:00
radeon_display.c drm/radeon: fix deferred page-flip detection logic on Avivo-based ASICs 2012-02-29 10:23:50 +00:00
radeon_drv.c drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
radeon_drv.h
radeon_encoders.c drm/radeon/kms: refine TMDS dual link checks 2012-01-24 17:35:52 +00:00
radeon_family.h drm/radeon/kms: add family ids for llano APUs 2011-06-02 10:47:37 +10:00
radeon_fb.c drm: do not set fb_info->pixmap fields 2012-02-09 10:34:43 +00:00
radeon_fence.c drm/radeon/kms: Add support for multi-ring sync in CS ioctl (v2) 2012-01-06 09:16:09 +00:00
radeon_gart.c drm/radeon: double lock typo in radeon_vm_bo_rmv() 2012-01-09 12:49:48 +00:00
radeon_gem.c drm/radeon/kms: check if vm is supported in VA ioctl 2012-01-09 12:10:09 +00:00
radeon_i2c.c drm/radeon/kms/dce3+: add support for hw i2c using atom 2012-02-03 09:38:05 +00:00
radeon_ioc32.c
radeon_irq_kms.c drm/radeon/kms: Add an MSI quirk for Dell RS690 2012-01-23 11:00:48 +00:00
radeon_irq.c drm/radeon: Move more code out of line 2011-10-18 09:53:05 +01:00
radeon_kms.c drm: move pci bus master enable into driver. 2012-02-16 18:31:07 +00:00
radeon_legacy_crtc.c Merge tag 'v3.2-rc6' of /home/airlied/devel/kernel/linux-2.6 into drm-core-next 2011-12-20 14:43:53 +00:00
radeon_legacy_encoders.c
radeon_legacy_tv.c drm/radeon: Move more code out of line 2011-10-18 09:53:05 +01:00
radeon_mem.c drivers: use kzalloc/kcalloc instead of 'kmalloc+memset', where possible 2011-07-25 20:57:13 -07:00
radeon_mode.h drm/radeon/kms: refine TMDS dual link checks 2012-01-24 17:35:52 +00:00
radeon_object.c drm/radeon: add support for evergreen/ni tiling informations v11 2012-02-13 12:28:13 +00:00
radeon_object.h drm/radeon: GPU virtual memory support v22 2012-01-06 09:15:42 +00:00
radeon_pm.c drm/radeon/kms: move clock/pcie setting callbacks into pm struct 2012-02-29 10:15:16 +00:00
radeon_reg.h drm/radeon/kms: add wait_for_vblank asic callback 2012-02-27 14:46:13 +00:00
radeon_ring.c drm/radeon: fix IB debugfs files for multiple cards 2012-02-29 10:11:54 +00:00
radeon_sa.c drm/radeon: introduce a sub allocator and convert ib pool to it v4 2011-12-20 19:52:12 +00:00
radeon_semaphore.c drm/radeon: allocate semaphore from the ib pool 2012-01-05 10:03:53 +00:00
radeon_state.c drm/radeon: Move more code out of line 2011-10-18 09:53:05 +01:00
radeon_test.c drm/radeon/kms: add missing ring ready check in sync tests 2012-01-05 10:02:42 +00:00
radeon_trace_points.c
radeon_trace.h
radeon_ttm.c drm/radeon/kms: reorganize copy callbacks 2012-02-29 10:14:14 +00:00
radeon.h drm/radeon/kms: clean up radeon_asic struct (v2) 2012-02-29 10:16:20 +00:00
rs100d.h
rs400.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
rs400d.h
rs600.c drm/radeon/kms: move clock/pcie setting callbacks into pm struct 2012-02-29 10:15:16 +00:00
rs600d.h
rs690.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
rs690d.h
rv200d.h
rv250d.h
rv350d.h
rv515.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
rv515d.h
rv770.c drm/radeon/kms: make ring_start, ring_test, and ib_test per ring 2012-02-29 10:14:47 +00:00
rv770d.h