diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 25 | 
1 files changed, 17 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 491dc900065..d8ba6769065 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c @@ -78,18 +78,23 @@ u32 rv770_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base)  }  /* get temperature in millidegrees */ -u32 rv770_get_temp(struct radeon_device *rdev) +int rv770_get_temp(struct radeon_device *rdev)  {  	u32 temp = (RREG32(CG_MULT_THERMAL_STATUS) & ASIC_T_MASK) >>  		ASIC_T_SHIFT; -	u32 actual_temp = 0; +	int actual_temp; -	if ((temp >> 9) & 1) -		actual_temp = 0; -	else -		actual_temp = (temp >> 1) & 0xff; +	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; -	return actual_temp * 1000; +	return (actual_temp * 1000) / 2;  }  void rv770_pm_misc(struct radeon_device *rdev) @@ -316,7 +321,11 @@ static int rv770_cp_load_microcode(struct radeon_device *rdev)  		return -EINVAL;  	r700_cp_stop(rdev); -	WREG32(CP_RB_CNTL, RB_NO_UPDATE | (15 << 8) | (3 << 0)); +	WREG32(CP_RB_CNTL, +#ifdef __BIG_ENDIAN +	       BUF_SWAP_32BIT | +#endif +	       RB_NO_UPDATE | RB_BLKSZ(15) | RB_BUFSZ(3));  	/* Reset cp */  	WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP);  |