diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r100.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r100.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index 9fc61dd68bc0..d71333033b2b 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -2853,21 +2853,28 @@ static void r100_pll_errata_after_data(struct radeon_device *rdev) | |||
2853 | 2853 | ||
2854 | uint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg) | 2854 | uint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg) |
2855 | { | 2855 | { |
2856 | unsigned long flags; | ||
2856 | uint32_t data; | 2857 | uint32_t data; |
2857 | 2858 | ||
2859 | spin_lock_irqsave(&rdev->pll_idx_lock, flags); | ||
2858 | WREG8(RADEON_CLOCK_CNTL_INDEX, reg & 0x3f); | 2860 | WREG8(RADEON_CLOCK_CNTL_INDEX, reg & 0x3f); |
2859 | r100_pll_errata_after_index(rdev); | 2861 | r100_pll_errata_after_index(rdev); |
2860 | data = RREG32(RADEON_CLOCK_CNTL_DATA); | 2862 | data = RREG32(RADEON_CLOCK_CNTL_DATA); |
2861 | r100_pll_errata_after_data(rdev); | 2863 | r100_pll_errata_after_data(rdev); |
2864 | spin_unlock_irqrestore(&rdev->pll_idx_lock, flags); | ||
2862 | return data; | 2865 | return data; |
2863 | } | 2866 | } |
2864 | 2867 | ||
2865 | void r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) | 2868 | void r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
2866 | { | 2869 | { |
2870 | unsigned long flags; | ||
2871 | |||
2872 | spin_lock_irqsave(&rdev->pll_idx_lock, flags); | ||
2867 | WREG8(RADEON_CLOCK_CNTL_INDEX, ((reg & 0x3f) | RADEON_PLL_WR_EN)); | 2873 | WREG8(RADEON_CLOCK_CNTL_INDEX, ((reg & 0x3f) | RADEON_PLL_WR_EN)); |
2868 | r100_pll_errata_after_index(rdev); | 2874 | r100_pll_errata_after_index(rdev); |
2869 | WREG32(RADEON_CLOCK_CNTL_DATA, v); | 2875 | WREG32(RADEON_CLOCK_CNTL_DATA, v); |
2870 | r100_pll_errata_after_data(rdev); | 2876 | r100_pll_errata_after_data(rdev); |
2877 | spin_unlock_irqrestore(&rdev->pll_idx_lock, flags); | ||
2871 | } | 2878 | } |
2872 | 2879 | ||
2873 | static void r100_set_safe_registers(struct radeon_device *rdev) | 2880 | static void r100_set_safe_registers(struct radeon_device *rdev) |
@@ -2926,9 +2933,11 @@ static int r100_debugfs_cp_ring_info(struct seq_file *m, void *data) | |||
2926 | seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp); | 2933 | seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp); |
2927 | seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw); | 2934 | seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw); |
2928 | seq_printf(m, "%u dwords in ring\n", count); | 2935 | seq_printf(m, "%u dwords in ring\n", count); |
2929 | for (j = 0; j <= count; j++) { | 2936 | if (ring->ready) { |
2930 | i = (rdp + j) & ring->ptr_mask; | 2937 | for (j = 0; j <= count; j++) { |
2931 | seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]); | 2938 | i = (rdp + j) & ring->ptr_mask; |
2939 | seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]); | ||
2940 | } | ||
2932 | } | 2941 | } |
2933 | return 0; | 2942 | return 0; |
2934 | } | 2943 | } |