49,19 → 49,19 |
* radeon_get_vblank_counter_kms - get frame count |
* |
* @dev: drm dev pointer |
* @crtc: crtc to get the frame count from |
* @pipe: crtc to get the frame count from |
* |
* Gets the frame count on the requested crtc (all asics). |
* Returns frame count on success, -EINVAL on failure. |
*/ |
u32 radeon_get_vblank_counter_kms(struct drm_device *dev, int crtc) |
u32 radeon_get_vblank_counter_kms(struct drm_device *dev, unsigned int pipe) |
{ |
int vpos, hpos, stat; |
u32 count; |
struct radeon_device *rdev = dev->dev_private; |
|
if (crtc < 0 || crtc >= rdev->num_crtc) { |
DRM_ERROR("Invalid crtc %d\n", crtc); |
if (pipe >= rdev->num_crtc) { |
DRM_ERROR("Invalid crtc %u\n", pipe); |
return -EINVAL; |
} |
|
73,21 → 73,21 |
* and start of vsync, so vpos >= 0 means to bump the hw frame counter |
* result by 1 to give the proper appearance to caller. |
*/ |
if (rdev->mode_info.crtcs[crtc]) { |
if (rdev->mode_info.crtcs[pipe]) { |
/* Repeat readout if needed to provide stable result if |
* we cross start of vsync during the queries. |
*/ |
do { |
count = radeon_get_vblank_counter(rdev, crtc); |
count = radeon_get_vblank_counter(rdev, pipe); |
/* Ask radeon_get_crtc_scanoutpos to return vpos as |
* distance to start of vblank, instead of regular |
* vertical scanout pos. |
*/ |
stat = radeon_get_crtc_scanoutpos( |
dev, crtc, GET_DISTANCE_TO_VBLANKSTART, |
dev, pipe, GET_DISTANCE_TO_VBLANKSTART, |
&vpos, &hpos, NULL, NULL, |
&rdev->mode_info.crtcs[crtc]->base.hwmode); |
} while (count != radeon_get_vblank_counter(rdev, crtc)); |
&rdev->mode_info.crtcs[pipe]->base.hwmode); |
} while (count != radeon_get_vblank_counter(rdev, pipe)); |
|
if (((stat & (DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE)) != |
(DRM_SCANOUTPOS_VALID | DRM_SCANOUTPOS_ACCURATE))) { |
94,8 → 94,8 |
DRM_DEBUG_VBL("Query failed! stat %d\n", stat); |
} |
else { |
DRM_DEBUG_VBL("crtc %d: dist from vblank start %d\n", |
crtc, vpos); |
DRM_DEBUG_VBL("crtc %u: dist from vblank start %d\n", |
pipe, vpos); |
|
/* Bump counter if we are at >= leading edge of vblank, |
* but before vsync where vpos would turn negative and |
107,7 → 107,7 |
} |
else { |
/* Fallback to use value as is. */ |
count = radeon_get_vblank_counter(rdev, crtc); |
count = radeon_get_vblank_counter(rdev, pipe); |
DRM_DEBUG_VBL("NULL mode info! Returned count may be wrong.\n"); |
} |
|