diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2013-02-14 10:04:02 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-02-20 08:51:20 -0500 |
commit | 454d2e2a32f02a4f8e0364ba0e8ce4f8dbe9810c (patch) | |
tree | c9727360424260a40aba4b037bbca4457efe4c1d /drivers/gpu/drm/radeon/rv770.c | |
parent | 0e34d0945ed16aeb72c863be4efe4cd0c62f9c53 (diff) | |
download | linux-454d2e2a32f02a4f8e0364ba0e8ce4f8dbe9810c.tar.gz linux-454d2e2a32f02a4f8e0364ba0e8ce4f8dbe9810c.tar.bz2 linux-454d2e2a32f02a4f8e0364ba0e8ce4f8dbe9810c.zip |
drm/radeon: add a asic callback to get the xclk
This is required to get the reference clock used
by the gfx engine for things like timestamps. Fixes
support for GL extensions the use timestamps on
certain boards.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 1b2444f4d8f4..d63fe1d0f53f 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c @@ -43,6 +43,31 @@ static void rv770_gpu_init(struct radeon_device *rdev); void rv770_fini(struct radeon_device *rdev); static void rv770_pcie_gen2_enable(struct radeon_device *rdev); +#define PCIE_BUS_CLK 10000 +#define TCLK (PCIE_BUS_CLK / 10) + +/** + * rv770_get_xclk - get the xclk + * + * @rdev: radeon_device pointer + * + * Returns the reference clock used by the gfx engine + * (r7xx-cayman). + */ +u32 rv770_get_xclk(struct radeon_device *rdev) +{ + u32 reference_clock = rdev->clock.spll.reference_freq; + u32 tmp = RREG32(CG_CLKPIN_CNTL); + + if (tmp & MUX_TCLK_TO_XCLK) + return TCLK; + + if (tmp & XTALIN_DIVIDE) + return reference_clock / 4; + + return reference_clock; +} + u32 rv770_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base) { struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; |