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

Commit c6cf7777 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/radeon: set default clocks for SI when DPM is disabled



Fix patching of vddc values for SI and enable manually forcing
clocks to default levels as per NI.

This improves the out of the box performance with SI asics.

Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 338a95a9
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -1504,8 +1504,8 @@ void evergreen_pm_misc(struct radeon_device *rdev)
	struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;
	struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;


	if (voltage->type == VOLTAGE_SW) {
	if (voltage->type == VOLTAGE_SW) {
		/* 0xff01 is a flag rather then an actual voltage */
		/* 0xff0x are flags rather then an actual voltage */
		if (voltage->voltage == 0xff01)
		if ((voltage->voltage & 0xff00) == 0xff00)
			return;
			return;
		if (voltage->voltage && (voltage->voltage != rdev->pm.current_vddc)) {
		if (voltage->voltage && (voltage->voltage != rdev->pm.current_vddc)) {
			radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
			radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
@@ -1525,8 +1525,8 @@ void evergreen_pm_misc(struct radeon_device *rdev)
			voltage = &rdev->pm.power_state[req_ps_idx].
			voltage = &rdev->pm.power_state[req_ps_idx].
				clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage;
				clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage;


		/* 0xff01 is a flag rather then an actual voltage */
		/* 0xff0x are flags rather then an actual voltage */
		if (voltage->vddci == 0xff01)
		if ((voltage->vddci & 0xff00) == 0xff00)
			return;
			return;
		if (voltage->vddci && (voltage->vddci != rdev->pm.current_vddci)) {
		if (voltage->vddci && (voltage->vddci != rdev->pm.current_vddci)) {
			radeon_atom_set_voltage(rdev, voltage->vddci, SET_VOLTAGE_TYPE_ASIC_VDDCI);
			radeon_atom_set_voltage(rdev, voltage->vddci, SET_VOLTAGE_TYPE_ASIC_VDDCI);
+4 −0
Original line number Original line Diff line number Diff line
@@ -2441,6 +2441,10 @@ static bool radeon_atombios_parse_pplib_clock_info(struct radeon_device *rdev,
	case ATOM_VIRTUAL_VOLTAGE_ID1:
	case ATOM_VIRTUAL_VOLTAGE_ID1:
	case ATOM_VIRTUAL_VOLTAGE_ID2:
	case ATOM_VIRTUAL_VOLTAGE_ID2:
	case ATOM_VIRTUAL_VOLTAGE_ID3:
	case ATOM_VIRTUAL_VOLTAGE_ID3:
	case ATOM_VIRTUAL_VOLTAGE_ID4:
	case ATOM_VIRTUAL_VOLTAGE_ID5:
	case ATOM_VIRTUAL_VOLTAGE_ID6:
	case ATOM_VIRTUAL_VOLTAGE_ID7:
		if (radeon_atom_get_max_vddc(rdev, VOLTAGE_TYPE_VDDC,
		if (radeon_atom_get_max_vddc(rdev, VOLTAGE_TYPE_VDDC,
					     rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage,
					     rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage,
					     &vddc) == 0)
					     &vddc) == 0)
+4 −4
Original line number Original line Diff line number Diff line
@@ -852,7 +852,7 @@ static void radeon_pm_resume_old(struct radeon_device *rdev)
{
{
	/* set up the default clocks if the MC ucode is loaded */
	/* set up the default clocks if the MC ucode is loaded */
	if ((rdev->family >= CHIP_BARTS) &&
	if ((rdev->family >= CHIP_BARTS) &&
	    (rdev->family <= CHIP_CAYMAN) &&
	    (rdev->family <= CHIP_HAINAN) &&
	    rdev->mc_fw) {
	    rdev->mc_fw) {
		if (rdev->pm.default_vddc)
		if (rdev->pm.default_vddc)
			radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
			radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
@@ -896,7 +896,7 @@ static void radeon_pm_resume_dpm(struct radeon_device *rdev)
	if (ret) {
	if (ret) {
		DRM_ERROR("radeon: dpm resume failed\n");
		DRM_ERROR("radeon: dpm resume failed\n");
		if ((rdev->family >= CHIP_BARTS) &&
		if ((rdev->family >= CHIP_BARTS) &&
		    (rdev->family <= CHIP_CAYMAN) &&
		    (rdev->family <= CHIP_HAINAN) &&
		    rdev->mc_fw) {
		    rdev->mc_fw) {
			if (rdev->pm.default_vddc)
			if (rdev->pm.default_vddc)
				radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
				radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
@@ -947,7 +947,7 @@ static int radeon_pm_init_old(struct radeon_device *rdev)
		radeon_pm_init_profile(rdev);
		radeon_pm_init_profile(rdev);
		/* set up the default clocks if the MC ucode is loaded */
		/* set up the default clocks if the MC ucode is loaded */
		if ((rdev->family >= CHIP_BARTS) &&
		if ((rdev->family >= CHIP_BARTS) &&
		    (rdev->family <= CHIP_CAYMAN) &&
		    (rdev->family <= CHIP_HAINAN) &&
		    rdev->mc_fw) {
		    rdev->mc_fw) {
			if (rdev->pm.default_vddc)
			if (rdev->pm.default_vddc)
				radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
				radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
@@ -1032,7 +1032,7 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev)
	if (ret) {
	if (ret) {
		rdev->pm.dpm_enabled = false;
		rdev->pm.dpm_enabled = false;
		if ((rdev->family >= CHIP_BARTS) &&
		if ((rdev->family >= CHIP_BARTS) &&
		    (rdev->family <= CHIP_CAYMAN) &&
		    (rdev->family <= CHIP_HAINAN) &&
		    rdev->mc_fw) {
		    rdev->mc_fw) {
			if (rdev->pm.default_vddc)
			if (rdev->pm.default_vddc)
				radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
				radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,