Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e33df25f authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

drm/radeon/kms: add thermal sensor support for fusion APUs

parent d5e455e4
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -57,6 +57,14 @@ u32 evergreen_get_temp(struct radeon_device *rdev)
	return actual_temp * 1000;
	return actual_temp * 1000;
}
}


u32 sumo_get_temp(struct radeon_device *rdev)
{
	u32 temp = RREG32(CG_THERMAL_STATUS) & 0xff;
	u32 actual_temp = (temp >> 1) & 0xff;

	return actual_temp * 1000;
}

void evergreen_pm_misc(struct radeon_device *rdev)
void evergreen_pm_misc(struct radeon_device *rdev)
{
{
	int req_ps_idx = rdev->pm.requested_power_state_index;
	int req_ps_idx = rdev->pm.requested_power_state_index;
+3 −1
Original line number Original line Diff line number Diff line
@@ -164,11 +164,13 @@
#define		SE_SC_BUSY					(1 << 29)
#define		SE_SC_BUSY					(1 << 29)
#define		SE_DB_BUSY					(1 << 30)
#define		SE_DB_BUSY					(1 << 30)
#define		SE_CB_BUSY					(1 << 31)
#define		SE_CB_BUSY					(1 << 31)

/* evergreen */
#define	CG_MULT_THERMAL_STATUS				0x740
#define	CG_MULT_THERMAL_STATUS				0x740
#define		ASIC_T(x)			        ((x) << 16)
#define		ASIC_T(x)			        ((x) << 16)
#define		ASIC_T_MASK			        0x7FF0000
#define		ASIC_T_MASK			        0x7FF0000
#define		ASIC_T_SHIFT			        16
#define		ASIC_T_SHIFT			        16
/* APU */
#define	CG_THERMAL_STATUS			        0x678


#define	HDP_HOST_PATH_CNTL				0x2C00
#define	HDP_HOST_PATH_CNTL				0x2C00
#define	HDP_NONSURFACE_BASE				0x2C04
#define	HDP_NONSURFACE_BASE				0x2C04
+2 −0
Original line number Original line Diff line number Diff line
@@ -180,6 +180,7 @@ void rs690_pm_info(struct radeon_device *rdev);
extern u32 rv6xx_get_temp(struct radeon_device *rdev);
extern u32 rv6xx_get_temp(struct radeon_device *rdev);
extern u32 rv770_get_temp(struct radeon_device *rdev);
extern u32 rv770_get_temp(struct radeon_device *rdev);
extern u32 evergreen_get_temp(struct radeon_device *rdev);
extern u32 evergreen_get_temp(struct radeon_device *rdev);
extern u32 sumo_get_temp(struct radeon_device *rdev);


/*
/*
 * Fences.
 * Fences.
@@ -687,6 +688,7 @@ enum radeon_int_thermal_type {
	THERMAL_TYPE_RV6XX,
	THERMAL_TYPE_RV6XX,
	THERMAL_TYPE_RV770,
	THERMAL_TYPE_RV770,
	THERMAL_TYPE_EVERGREEN,
	THERMAL_TYPE_EVERGREEN,
	THERMAL_TYPE_SUMO,
};
};


struct radeon_voltage {
struct radeon_voltage {
+4 −0
Original line number Original line Diff line number Diff line
@@ -449,6 +449,9 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev,
	case THERMAL_TYPE_EVERGREEN:
	case THERMAL_TYPE_EVERGREEN:
		temp = evergreen_get_temp(rdev);
		temp = evergreen_get_temp(rdev);
		break;
		break;
	case THERMAL_TYPE_SUMO:
		temp = sumo_get_temp(rdev);
		break;
	default:
	default:
		temp = 0;
		temp = 0;
		break;
		break;
@@ -487,6 +490,7 @@ static int radeon_hwmon_init(struct radeon_device *rdev)
	case THERMAL_TYPE_RV6XX:
	case THERMAL_TYPE_RV6XX:
	case THERMAL_TYPE_RV770:
	case THERMAL_TYPE_RV770:
	case THERMAL_TYPE_EVERGREEN:
	case THERMAL_TYPE_EVERGREEN:
	case THERMAL_TYPE_SUMO:
		rdev->pm.int_hwmon_dev = hwmon_device_register(rdev->dev);
		rdev->pm.int_hwmon_dev = hwmon_device_register(rdev->dev);
		if (IS_ERR(rdev->pm.int_hwmon_dev)) {
		if (IS_ERR(rdev->pm.int_hwmon_dev)) {
			err = PTR_ERR(rdev->pm.int_hwmon_dev);
			err = PTR_ERR(rdev->pm.int_hwmon_dev);