|
@@ -88,21 +88,39 @@ u32 evergreen_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)
|
|
|
/* get temperature in millidegrees */
|
|
|
int evergreen_get_temp(struct radeon_device *rdev)
|
|
|
{
|
|
|
- u32 temp = (RREG32(CG_MULT_THERMAL_STATUS) & ASIC_T_MASK) >>
|
|
|
- ASIC_T_SHIFT;
|
|
|
- u32 actual_temp = 0;
|
|
|
-
|
|
|
- if (temp & 0x400)
|
|
|
- actual_temp = -256;
|
|
|
- else if (temp & 0x200)
|
|
|
- actual_temp = 255;
|
|
|
- else if (temp & 0x100) {
|
|
|
- actual_temp = temp & 0x1ff;
|
|
|
- actual_temp |= ~0x1ff;
|
|
|
- } else
|
|
|
- actual_temp = temp & 0xff;
|
|
|
+ u32 temp, toffset, actual_temp = 0;
|
|
|
+
|
|
|
+ if (rdev->family == CHIP_JUNIPER) {
|
|
|
+ toffset = (RREG32(CG_THERMAL_CTRL) & TOFFSET_MASK) >>
|
|
|
+ TOFFSET_SHIFT;
|
|
|
+ temp = (RREG32(CG_TS0_STATUS) & TS0_ADC_DOUT_MASK) >>
|
|
|
+ TS0_ADC_DOUT_SHIFT;
|
|
|
+
|
|
|
+ if (toffset & 0x100)
|
|
|
+ actual_temp = temp / 2 - (0x200 - toffset);
|
|
|
+ else
|
|
|
+ actual_temp = temp / 2 + toffset;
|
|
|
+
|
|
|
+ actual_temp = actual_temp * 1000;
|
|
|
+
|
|
|
+ } else {
|
|
|
+ temp = (RREG32(CG_MULT_THERMAL_STATUS) & ASIC_T_MASK) >>
|
|
|
+ ASIC_T_SHIFT;
|
|
|
+
|
|
|
+ if (temp & 0x400)
|
|
|
+ actual_temp = -256;
|
|
|
+ else if (temp & 0x200)
|
|
|
+ actual_temp = 255;
|
|
|
+ else if (temp & 0x100) {
|
|
|
+ actual_temp = temp & 0x1ff;
|
|
|
+ actual_temp |= ~0x1ff;
|
|
|
+ } else
|
|
|
+ actual_temp = temp & 0xff;
|
|
|
+
|
|
|
+ actual_temp = (actual_temp * 1000) / 2;
|
|
|
+ }
|
|
|
|
|
|
- return (actual_temp * 1000) / 2;
|
|
|
+ return actual_temp;
|
|
|
}
|
|
|
|
|
|
int sumo_get_temp(struct radeon_device *rdev)
|