Commit 48ef779f authored by Alex Deucher's avatar Alex Deucher Committed by Christian König

drm/radeon: start to document the functions r100.c

Still a lot more to do.
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
parent 09db8644
...@@ -65,6 +65,19 @@ MODULE_FIRMWARE(FIRMWARE_R520); ...@@ -65,6 +65,19 @@ MODULE_FIRMWARE(FIRMWARE_R520);
#include "r100_track.h" #include "r100_track.h"
/* This files gather functions specifics to:
* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280
* and others in some cases.
*/
/**
* r100_wait_for_vblank - vblank wait asic callback.
*
* @rdev: radeon_device pointer
* @crtc: crtc to wait for vblank on
*
* Wait for vblank on the requested crtc (r1xx-r4xx).
*/
void r100_wait_for_vblank(struct radeon_device *rdev, int crtc) void r100_wait_for_vblank(struct radeon_device *rdev, int crtc)
{ {
struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc]; struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc];
...@@ -99,22 +112,49 @@ void r100_wait_for_vblank(struct radeon_device *rdev, int crtc) ...@@ -99,22 +112,49 @@ void r100_wait_for_vblank(struct radeon_device *rdev, int crtc)
} }
} }
/* This files gather functions specifics to: /**
* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 * r100_pre_page_flip - pre-pageflip callback.
*
* @rdev: radeon_device pointer
* @crtc: crtc to prepare for pageflip on
*
* Pre-pageflip callback (r1xx-r4xx).
* Enables the pageflip irq (vblank irq).
*/ */
void r100_pre_page_flip(struct radeon_device *rdev, int crtc) void r100_pre_page_flip(struct radeon_device *rdev, int crtc)
{ {
/* enable the pflip int */ /* enable the pflip int */
radeon_irq_kms_pflip_irq_get(rdev, crtc); radeon_irq_kms_pflip_irq_get(rdev, crtc);
} }
/**
* r100_post_page_flip - pos-pageflip callback.
*
* @rdev: radeon_device pointer
* @crtc: crtc to cleanup pageflip on
*
* Post-pageflip callback (r1xx-r4xx).
* Disables the pageflip irq (vblank irq).
*/
void r100_post_page_flip(struct radeon_device *rdev, int crtc) void r100_post_page_flip(struct radeon_device *rdev, int crtc)
{ {
/* disable the pflip int */ /* disable the pflip int */
radeon_irq_kms_pflip_irq_put(rdev, crtc); radeon_irq_kms_pflip_irq_put(rdev, crtc);
} }
/**
* r100_page_flip - pageflip callback.
*
* @rdev: radeon_device pointer
* @crtc_id: crtc to cleanup pageflip on
* @crtc_base: new address of the crtc (GPU MC address)
*
* Does the actual pageflip (r1xx-r4xx).
* During vblank we take the crtc lock and wait for the update_pending
* bit to go high, when it does, we release the lock, and allow the
* double buffered update to take place.
* Returns the current update pending status.
*/
u32 r100_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base) u32 r100_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)
{ {
struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id];
...@@ -141,6 +181,15 @@ u32 r100_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base) ...@@ -141,6 +181,15 @@ u32 r100_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)
return RREG32(RADEON_CRTC_OFFSET + radeon_crtc->crtc_offset) & RADEON_CRTC_OFFSET__GUI_TRIG_OFFSET; return RREG32(RADEON_CRTC_OFFSET + radeon_crtc->crtc_offset) & RADEON_CRTC_OFFSET__GUI_TRIG_OFFSET;
} }
/**
* r100_pm_get_dynpm_state - look up dynpm power state callback.
*
* @rdev: radeon_device pointer
*
* Look up the optimal power state based on the
* current state of the GPU (r1xx-r5xx).
* Used for dynpm only.
*/
void r100_pm_get_dynpm_state(struct radeon_device *rdev) void r100_pm_get_dynpm_state(struct radeon_device *rdev)
{ {
int i; int i;
...@@ -223,6 +272,15 @@ void r100_pm_get_dynpm_state(struct radeon_device *rdev) ...@@ -223,6 +272,15 @@ void r100_pm_get_dynpm_state(struct radeon_device *rdev)
pcie_lanes); pcie_lanes);
} }
/**
* r100_pm_init_profile - Initialize power profiles callback.
*
* @rdev: radeon_device pointer
*
* Initialize the power states used in profile mode
* (r1xx-r3xx).
* Used for profile mode only.
*/
void r100_pm_init_profile(struct radeon_device *rdev) void r100_pm_init_profile(struct radeon_device *rdev)
{ {
/* default */ /* default */
...@@ -262,6 +320,14 @@ void r100_pm_init_profile(struct radeon_device *rdev) ...@@ -262,6 +320,14 @@ void r100_pm_init_profile(struct radeon_device *rdev)
rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 0; rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 0;
} }
/**
* r100_pm_misc - set additional pm hw parameters callback.
*
* @rdev: radeon_device pointer
*
* Set non-clock parameters associated with a power state
* (voltage, pcie lanes, etc.) (r1xx-r4xx).
*/
void r100_pm_misc(struct radeon_device *rdev) void r100_pm_misc(struct radeon_device *rdev)
{ {
int requested_index = rdev->pm.requested_power_state_index; int requested_index = rdev->pm.requested_power_state_index;
...@@ -353,6 +419,13 @@ void r100_pm_misc(struct radeon_device *rdev) ...@@ -353,6 +419,13 @@ void r100_pm_misc(struct radeon_device *rdev)
} }
} }
/**
* r100_pm_prepare - pre-power state change callback.
*
* @rdev: radeon_device pointer
*
* Prepare for a power state change (r1xx-r4xx).
*/
void r100_pm_prepare(struct radeon_device *rdev) void r100_pm_prepare(struct radeon_device *rdev)
{ {
struct drm_device *ddev = rdev->ddev; struct drm_device *ddev = rdev->ddev;
...@@ -377,6 +450,13 @@ void r100_pm_prepare(struct radeon_device *rdev) ...@@ -377,6 +450,13 @@ void r100_pm_prepare(struct radeon_device *rdev)
} }
} }
/**
* r100_pm_finish - post-power state change callback.
*
* @rdev: radeon_device pointer
*
* Clean up after a power state change (r1xx-r4xx).
*/
void r100_pm_finish(struct radeon_device *rdev) void r100_pm_finish(struct radeon_device *rdev)
{ {
struct drm_device *ddev = rdev->ddev; struct drm_device *ddev = rdev->ddev;
...@@ -401,6 +481,14 @@ void r100_pm_finish(struct radeon_device *rdev) ...@@ -401,6 +481,14 @@ void r100_pm_finish(struct radeon_device *rdev)
} }
} }
/**
* r100_gui_idle - gui idle callback.
*
* @rdev: radeon_device pointer
*
* Check of the GUI (2D/3D engines) are idle (r1xx-r5xx).
* Returns true if idle, false if not.
*/
bool r100_gui_idle(struct radeon_device *rdev) bool r100_gui_idle(struct radeon_device *rdev)
{ {
if (RREG32(RADEON_RBBM_STATUS) & RADEON_RBBM_ACTIVE) if (RREG32(RADEON_RBBM_STATUS) & RADEON_RBBM_ACTIVE)
...@@ -410,6 +498,15 @@ bool r100_gui_idle(struct radeon_device *rdev) ...@@ -410,6 +498,15 @@ bool r100_gui_idle(struct radeon_device *rdev)
} }
/* hpd for digital panel detect/disconnect */ /* hpd for digital panel detect/disconnect */
/**
* r100_hpd_sense - hpd sense callback.
*
* @rdev: radeon_device pointer
* @hpd: hpd (hotplug detect) pin
*
* Checks if a digital monitor is connected (r1xx-r4xx).
* Returns true if connected, false if not connected.
*/
bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd)
{ {
bool connected = false; bool connected = false;
...@@ -429,6 +526,14 @@ bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) ...@@ -429,6 +526,14 @@ bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd)
return connected; return connected;
} }
/**
* r100_hpd_set_polarity - hpd set polarity callback.
*
* @rdev: radeon_device pointer
* @hpd: hpd (hotplug detect) pin
*
* Set the polarity of the hpd pin (r1xx-r4xx).
*/
void r100_hpd_set_polarity(struct radeon_device *rdev, void r100_hpd_set_polarity(struct radeon_device *rdev,
enum radeon_hpd_id hpd) enum radeon_hpd_id hpd)
{ {
...@@ -457,6 +562,14 @@ void r100_hpd_set_polarity(struct radeon_device *rdev, ...@@ -457,6 +562,14 @@ void r100_hpd_set_polarity(struct radeon_device *rdev,
} }
} }
/**
* r100_hpd_init - hpd setup callback.
*
* @rdev: radeon_device pointer
*
* Setup the hpd pins used by the card (r1xx-r4xx).
* Set the polarity, and enable the hpd interrupts.
*/
void r100_hpd_init(struct radeon_device *rdev) void r100_hpd_init(struct radeon_device *rdev)
{ {
struct drm_device *dev = rdev->ddev; struct drm_device *dev = rdev->ddev;
...@@ -471,6 +584,14 @@ void r100_hpd_init(struct radeon_device *rdev) ...@@ -471,6 +584,14 @@ void r100_hpd_init(struct radeon_device *rdev)
radeon_irq_kms_enable_hpd(rdev, enable); radeon_irq_kms_enable_hpd(rdev, enable);
} }
/**
* r100_hpd_fini - hpd tear down callback.
*
* @rdev: radeon_device pointer
*
* Tear down the hpd pins used by the card (r1xx-r4xx).
* Disable the hpd interrupts.
*/
void r100_hpd_fini(struct radeon_device *rdev) void r100_hpd_fini(struct radeon_device *rdev)
{ {
struct drm_device *dev = rdev->ddev; struct drm_device *dev = rdev->ddev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment