diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index ea4d3734e6d9..2a1b1876b431 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -119,6 +119,11 @@ u32 r600_get_xclk(struct radeon_device *rdev) | |||
119 | return rdev->clock.spll.reference_freq; | 119 | return rdev->clock.spll.reference_freq; |
120 | } | 120 | } |
121 | 121 | ||
122 | int r600_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk) | ||
123 | { | ||
124 | return 0; | ||
125 | } | ||
126 | |||
122 | /* get temperature in millidegrees */ | 127 | /* get temperature in millidegrees */ |
123 | int rv6xx_get_temp(struct radeon_device *rdev) | 128 | int rv6xx_get_temp(struct radeon_device *rdev) |
124 | { | 129 | { |
@@ -1045,20 +1050,27 @@ int r600_mc_wait_for_idle(struct radeon_device *rdev) | |||
1045 | 1050 | ||
1046 | uint32_t rs780_mc_rreg(struct radeon_device *rdev, uint32_t reg) | 1051 | uint32_t rs780_mc_rreg(struct radeon_device *rdev, uint32_t reg) |
1047 | { | 1052 | { |
1053 | unsigned long flags; | ||
1048 | uint32_t r; | 1054 | uint32_t r; |
1049 | 1055 | ||
1056 | spin_lock_irqsave(&rdev->mc_idx_lock, flags); | ||
1050 | WREG32(R_0028F8_MC_INDEX, S_0028F8_MC_IND_ADDR(reg)); | 1057 | WREG32(R_0028F8_MC_INDEX, S_0028F8_MC_IND_ADDR(reg)); |
1051 | r = RREG32(R_0028FC_MC_DATA); | 1058 | r = RREG32(R_0028FC_MC_DATA); |
1052 | WREG32(R_0028F8_MC_INDEX, ~C_0028F8_MC_IND_ADDR); | 1059 | WREG32(R_0028F8_MC_INDEX, ~C_0028F8_MC_IND_ADDR); |
1060 | spin_unlock_irqrestore(&rdev->mc_idx_lock, flags); | ||
1053 | return r; | 1061 | return r; |
1054 | } | 1062 | } |
1055 | 1063 | ||
1056 | void rs780_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) | 1064 | void rs780_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
1057 | { | 1065 | { |
1066 | unsigned long flags; | ||
1067 | |||
1068 | spin_lock_irqsave(&rdev->mc_idx_lock, flags); | ||
1058 | WREG32(R_0028F8_MC_INDEX, S_0028F8_MC_IND_ADDR(reg) | | 1069 | WREG32(R_0028F8_MC_INDEX, S_0028F8_MC_IND_ADDR(reg) | |
1059 | S_0028F8_MC_IND_WR_EN(1)); | 1070 | S_0028F8_MC_IND_WR_EN(1)); |
1060 | WREG32(R_0028FC_MC_DATA, v); | 1071 | WREG32(R_0028FC_MC_DATA, v); |
1061 | WREG32(R_0028F8_MC_INDEX, 0x7F); | 1072 | WREG32(R_0028F8_MC_INDEX, 0x7F); |
1073 | spin_unlock_irqrestore(&rdev->mc_idx_lock, flags); | ||
1062 | } | 1074 | } |
1063 | 1075 | ||
1064 | static void r600_mc_program(struct radeon_device *rdev) | 1076 | static void r600_mc_program(struct radeon_device *rdev) |
@@ -2092,20 +2104,27 @@ static void r600_gpu_init(struct radeon_device *rdev) | |||
2092 | */ | 2104 | */ |
2093 | u32 r600_pciep_rreg(struct radeon_device *rdev, u32 reg) | 2105 | u32 r600_pciep_rreg(struct radeon_device *rdev, u32 reg) |
2094 | { | 2106 | { |
2107 | unsigned long flags; | ||
2095 | u32 r; | 2108 | u32 r; |
2096 | 2109 | ||
2110 | spin_lock_irqsave(&rdev->pciep_idx_lock, flags); | ||
2097 | WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); | 2111 | WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); |
2098 | (void)RREG32(PCIE_PORT_INDEX); | 2112 | (void)RREG32(PCIE_PORT_INDEX); |
2099 | r = RREG32(PCIE_PORT_DATA); | 2113 | r = RREG32(PCIE_PORT_DATA); |
2114 | spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags); | ||
2100 | return r; | 2115 | return r; |
2101 | } | 2116 | } |
2102 | 2117 | ||
2103 | void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v) | 2118 | void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
2104 | { | 2119 | { |
2120 | unsigned long flags; | ||
2121 | |||
2122 | spin_lock_irqsave(&rdev->pciep_idx_lock, flags); | ||
2105 | WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); | 2123 | WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); |
2106 | (void)RREG32(PCIE_PORT_INDEX); | 2124 | (void)RREG32(PCIE_PORT_INDEX); |
2107 | WREG32(PCIE_PORT_DATA, (v)); | 2125 | WREG32(PCIE_PORT_DATA, (v)); |
2108 | (void)RREG32(PCIE_PORT_DATA); | 2126 | (void)RREG32(PCIE_PORT_DATA); |
2127 | spin_unlock_irqrestore(&rdev->pciep_idx_lock, flags); | ||
2109 | } | 2128 | } |
2110 | 2129 | ||
2111 | /* | 2130 | /* |