diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-10-01 09:36:57 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-03-19 12:26:38 -0400 |
commit | c6d2ac2c36f80b8be15d47a8da6fca803a432e1c (patch) | |
tree | 14ccf607e0b43c3520fed23b8fdf2a2e0f898666 | |
parent | 18b53e905756930d6d4e691e1e1c3b43dba0c973 (diff) |
drm/radeon: add get_allowed_info_register for r6xx/r7xx
Registers that can be fetched from the info ioctl.
Tested-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 26 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 2 |
3 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 2fcad344492f..8f6d862a1882 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -109,6 +109,32 @@ extern int evergreen_rlc_resume(struct radeon_device *rdev); | |||
109 | extern void rv770_set_clk_bypass_mode(struct radeon_device *rdev); | 109 | extern void rv770_set_clk_bypass_mode(struct radeon_device *rdev); |
110 | 110 | ||
111 | /** | 111 | /** |
112 | * r600_get_allowed_info_register - fetch the register for the info ioctl | ||
113 | * | ||
114 | * @rdev: radeon_device pointer | ||
115 | * @reg: register offset in bytes | ||
116 | * @val: register value | ||
117 | * | ||
118 | * Returns 0 for success or -EINVAL for an invalid register | ||
119 | * | ||
120 | */ | ||
121 | int r600_get_allowed_info_register(struct radeon_device *rdev, | ||
122 | u32 reg, u32 *val) | ||
123 | { | ||
124 | switch (reg) { | ||
125 | case GRBM_STATUS: | ||
126 | case GRBM_STATUS2: | ||
127 | case R_000E50_SRBM_STATUS: | ||
128 | case DMA_STATUS_REG: | ||
129 | case UVD_STATUS: | ||
130 | *val = RREG32(reg); | ||
131 | return 0; | ||
132 | default: | ||
133 | return -EINVAL; | ||
134 | } | ||
135 | } | ||
136 | |||
137 | /** | ||
112 | * r600_get_xclk - get the xclk | 138 | * r600_get_xclk - get the xclk |
113 | * | 139 | * |
114 | * @rdev: radeon_device pointer | 140 | * @rdev: radeon_device pointer |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 558be7a88b2f..f2c343717c4b 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -940,6 +940,7 @@ static struct radeon_asic r600_asic = { | |||
940 | .mc_wait_for_idle = &r600_mc_wait_for_idle, | 940 | .mc_wait_for_idle = &r600_mc_wait_for_idle, |
941 | .get_xclk = &r600_get_xclk, | 941 | .get_xclk = &r600_get_xclk, |
942 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, | 942 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, |
943 | .get_allowed_info_register = r600_get_allowed_info_register, | ||
943 | .gart = { | 944 | .gart = { |
944 | .tlb_flush = &r600_pcie_gart_tlb_flush, | 945 | .tlb_flush = &r600_pcie_gart_tlb_flush, |
945 | .get_page_entry = &rs600_gart_get_page_entry, | 946 | .get_page_entry = &rs600_gart_get_page_entry, |
@@ -1024,6 +1025,7 @@ static struct radeon_asic rv6xx_asic = { | |||
1024 | .mc_wait_for_idle = &r600_mc_wait_for_idle, | 1025 | .mc_wait_for_idle = &r600_mc_wait_for_idle, |
1025 | .get_xclk = &r600_get_xclk, | 1026 | .get_xclk = &r600_get_xclk, |
1026 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, | 1027 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, |
1028 | .get_allowed_info_register = r600_get_allowed_info_register, | ||
1027 | .gart = { | 1029 | .gart = { |
1028 | .tlb_flush = &r600_pcie_gart_tlb_flush, | 1030 | .tlb_flush = &r600_pcie_gart_tlb_flush, |
1029 | .get_page_entry = &rs600_gart_get_page_entry, | 1031 | .get_page_entry = &rs600_gart_get_page_entry, |
@@ -1116,6 +1118,7 @@ static struct radeon_asic rs780_asic = { | |||
1116 | .mc_wait_for_idle = &r600_mc_wait_for_idle, | 1118 | .mc_wait_for_idle = &r600_mc_wait_for_idle, |
1117 | .get_xclk = &r600_get_xclk, | 1119 | .get_xclk = &r600_get_xclk, |
1118 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, | 1120 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, |
1121 | .get_allowed_info_register = r600_get_allowed_info_register, | ||
1119 | .gart = { | 1122 | .gart = { |
1120 | .tlb_flush = &r600_pcie_gart_tlb_flush, | 1123 | .tlb_flush = &r600_pcie_gart_tlb_flush, |
1121 | .get_page_entry = &rs600_gart_get_page_entry, | 1124 | .get_page_entry = &rs600_gart_get_page_entry, |
@@ -1221,6 +1224,7 @@ static struct radeon_asic rv770_asic = { | |||
1221 | .mc_wait_for_idle = &r600_mc_wait_for_idle, | 1224 | .mc_wait_for_idle = &r600_mc_wait_for_idle, |
1222 | .get_xclk = &rv770_get_xclk, | 1225 | .get_xclk = &rv770_get_xclk, |
1223 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, | 1226 | .get_gpu_clock_counter = &r600_get_gpu_clock_counter, |
1227 | .get_allowed_info_register = r600_get_allowed_info_register, | ||
1224 | .gart = { | 1228 | .gart = { |
1225 | .tlb_flush = &r600_pcie_gart_tlb_flush, | 1229 | .tlb_flush = &r600_pcie_gart_tlb_flush, |
1226 | .get_page_entry = &rs600_gart_get_page_entry, | 1230 | .get_page_entry = &rs600_gart_get_page_entry, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 4259daf94d91..3e1346d585b3 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -384,6 +384,8 @@ u32 r600_gfx_get_wptr(struct radeon_device *rdev, | |||
384 | struct radeon_ring *ring); | 384 | struct radeon_ring *ring); |
385 | void r600_gfx_set_wptr(struct radeon_device *rdev, | 385 | void r600_gfx_set_wptr(struct radeon_device *rdev, |
386 | struct radeon_ring *ring); | 386 | struct radeon_ring *ring); |
387 | int r600_get_allowed_info_register(struct radeon_device *rdev, | ||
388 | u32 reg, u32 *val); | ||
387 | /* r600 irq */ | 389 | /* r600 irq */ |
388 | int r600_irq_process(struct radeon_device *rdev); | 390 | int r600_irq_process(struct radeon_device *rdev); |
389 | int r600_irq_init(struct radeon_device *rdev); | 391 | int r600_irq_init(struct radeon_device *rdev); |