diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2021-09-05 18:58:05 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2021-09-05 18:58:05 -0700 | 
| commit | 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17 (patch) | |
| tree | a226b265d692d1933c0541802527d8aeb0d469ab /drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | |
| parent | 818b26588994d9d95743fca0a427f08ec6c1c41d (diff) | |
| parent | 3e204d6b76b29274cc8e57f8bd8d9873f04a7f48 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 5.15 merge window.
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 196 | 
1 files changed, 1 insertions, 195 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c index 86add0f4ea4d..494b2e1717d5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c @@ -1232,157 +1232,6 @@ int amdgpu_atombios_get_leakage_vddc_based_on_leakage_idx(struct amdgpu_device *  	return amdgpu_atombios_get_max_vddc(adev, VOLTAGE_TYPE_VDDC, leakage_idx, voltage);  } -int amdgpu_atombios_get_leakage_id_from_vbios(struct amdgpu_device *adev, -					      u16 *leakage_id) -{ -	union set_voltage args; -	int index = GetIndexIntoMasterTable(COMMAND, SetVoltage); -	u8 frev, crev; - -	if (!amdgpu_atom_parse_cmd_header(adev->mode_info.atom_context, index, &frev, &crev)) -		return -EINVAL; - -	switch (crev) { -	case 3: -	case 4: -		args.v3.ucVoltageType = 0; -		args.v3.ucVoltageMode = ATOM_GET_LEAKAGE_ID; -		args.v3.usVoltageLevel = 0; - -		amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); - -		*leakage_id = le16_to_cpu(args.v3.usVoltageLevel); -		break; -	default: -		DRM_ERROR("Unknown table version %d, %d\n", frev, crev); -		return -EINVAL; -	} - -	return 0; -} - -int amdgpu_atombios_get_leakage_vddc_based_on_leakage_params(struct amdgpu_device *adev, -							     u16 *vddc, u16 *vddci, -							     u16 virtual_voltage_id, -							     u16 vbios_voltage_id) -{ -	int index = GetIndexIntoMasterTable(DATA, ASIC_ProfilingInfo); -	u8 frev, crev; -	u16 data_offset, size; -	int i, j; -	ATOM_ASIC_PROFILING_INFO_V2_1 *profile; -	u16 *leakage_bin, *vddc_id_buf, *vddc_buf, *vddci_id_buf, *vddci_buf; - -	*vddc = 0; -	*vddci = 0; - -	if (!amdgpu_atom_parse_data_header(adev->mode_info.atom_context, index, &size, -				    &frev, &crev, &data_offset)) -		return -EINVAL; - -	profile = (ATOM_ASIC_PROFILING_INFO_V2_1 *) -		(adev->mode_info.atom_context->bios + data_offset); - -	switch (frev) { -	case 1: -		return -EINVAL; -	case 2: -		switch (crev) { -		case 1: -			if (size < sizeof(ATOM_ASIC_PROFILING_INFO_V2_1)) -				return -EINVAL; -			leakage_bin = (u16 *) -				(adev->mode_info.atom_context->bios + data_offset + -				 le16_to_cpu(profile->usLeakageBinArrayOffset)); -			vddc_id_buf = (u16 *) -				(adev->mode_info.atom_context->bios + data_offset + -				 le16_to_cpu(profile->usElbVDDC_IdArrayOffset)); -			vddc_buf = (u16 *) -				(adev->mode_info.atom_context->bios + data_offset + -				 le16_to_cpu(profile->usElbVDDC_LevelArrayOffset)); -			vddci_id_buf = (u16 *) -				(adev->mode_info.atom_context->bios + data_offset + -				 le16_to_cpu(profile->usElbVDDCI_IdArrayOffset)); -			vddci_buf = (u16 *) -				(adev->mode_info.atom_context->bios + data_offset + -				 le16_to_cpu(profile->usElbVDDCI_LevelArrayOffset)); - -			if (profile->ucElbVDDC_Num > 0) { -				for (i = 0; i < profile->ucElbVDDC_Num; i++) { -					if (vddc_id_buf[i] == virtual_voltage_id) { -						for (j = 0; j < profile->ucLeakageBinNum; j++) { -							if (vbios_voltage_id <= leakage_bin[j]) { -								*vddc = vddc_buf[j * profile->ucElbVDDC_Num + i]; -								break; -							} -						} -						break; -					} -				} -			} -			if (profile->ucElbVDDCI_Num > 0) { -				for (i = 0; i < profile->ucElbVDDCI_Num; i++) { -					if (vddci_id_buf[i] == virtual_voltage_id) { -						for (j = 0; j < profile->ucLeakageBinNum; j++) { -							if (vbios_voltage_id <= leakage_bin[j]) { -								*vddci = vddci_buf[j * profile->ucElbVDDCI_Num + i]; -								break; -							} -						} -						break; -					} -				} -			} -			break; -		default: -			DRM_ERROR("Unknown table version %d, %d\n", frev, crev); -			return -EINVAL; -		} -		break; -	default: -		DRM_ERROR("Unknown table version %d, %d\n", frev, crev); -		return -EINVAL; -	} - -	return 0; -} - -union get_voltage_info { -	struct _GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 in; -	struct _GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2 evv_out; -}; - -int amdgpu_atombios_get_voltage_evv(struct amdgpu_device *adev, -				    u16 virtual_voltage_id, -				    u16 *voltage) -{ -	int index = GetIndexIntoMasterTable(COMMAND, GetVoltageInfo); -	u32 entry_id; -	u32 count = adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.count; -	union get_voltage_info args; - -	for (entry_id = 0; entry_id < count; entry_id++) { -		if (adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].v == -		    virtual_voltage_id) -			break; -	} - -	if (entry_id >= count) -		return -EINVAL; - -	args.in.ucVoltageType = VOLTAGE_TYPE_VDDC; -	args.in.ucVoltageMode = ATOM_GET_VOLTAGE_EVV_VOLTAGE; -	args.in.usVoltageLevel = cpu_to_le16(virtual_voltage_id); -	args.in.ulSCLKFreq = -		cpu_to_le32(adev->pm.dpm.dyn_state.vddc_dependency_on_sclk.entries[entry_id].clk); - -	amdgpu_atom_execute_table(adev->mode_info.atom_context, index, (uint32_t *)&args); - -	*voltage = le16_to_cpu(args.evv_out.usVoltageLevel); - -	return 0; -} -  union voltage_object_info {  	struct _ATOM_VOLTAGE_OBJECT_INFO v1;  	struct _ATOM_VOLTAGE_OBJECT_INFO_V2 v2; @@ -1905,40 +1754,6 @@ static uint32_t cail_reg_read(struct card_info *info, uint32_t reg)  	return r;  } -/** - * cail_ioreg_write - write IO register - * - * @info: atom card_info pointer - * @reg: IO register offset - * @val: value to write to the pll register - * - * Provides a IO register accessor for the atom interpreter (r4xx+). - */ -static void cail_ioreg_write(struct card_info *info, uint32_t reg, uint32_t val) -{ -	struct amdgpu_device *adev = drm_to_adev(info->dev); - -	WREG32_IO(reg, val); -} - -/** - * cail_ioreg_read - read IO register - * - * @info: atom card_info pointer - * @reg: IO register offset - * - * Provides an IO register accessor for the atom interpreter (r4xx+). - * Returns the value of the IO register. - */ -static uint32_t cail_ioreg_read(struct card_info *info, uint32_t reg) -{ -	struct amdgpu_device *adev = drm_to_adev(info->dev); -	uint32_t r; - -	r = RREG32_IO(reg); -	return r; -} -  static ssize_t amdgpu_atombios_get_vbios_version(struct device *dev,  						 struct device_attribute *attr,  						 char *buf) @@ -1947,7 +1762,7 @@ static ssize_t amdgpu_atombios_get_vbios_version(struct device *dev,  	struct amdgpu_device *adev = drm_to_adev(ddev);  	struct atom_context *ctx = adev->mode_info.atom_context; -	return snprintf(buf, PAGE_SIZE, "%s\n", ctx->vbios_version); +	return sysfs_emit(buf, "%s\n", ctx->vbios_version);  }  static DEVICE_ATTR(vbios_version, 0444, amdgpu_atombios_get_vbios_version, @@ -1998,15 +1813,6 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)  	atom_card_info->dev = adev_to_drm(adev);  	atom_card_info->reg_read = cail_reg_read;  	atom_card_info->reg_write = cail_reg_write; -	/* needed for iio ops */ -	if (adev->rio_mem) { -		atom_card_info->ioreg_read = cail_ioreg_read; -		atom_card_info->ioreg_write = cail_ioreg_write; -	} else { -		DRM_DEBUG("PCI I/O BAR is not found. Using MMIO to access ATOM BIOS\n"); -		atom_card_info->ioreg_read = cail_reg_read; -		atom_card_info->ioreg_write = cail_reg_write; -	}  	atom_card_info->mc_read = cail_mc_read;  	atom_card_info->mc_write = cail_mc_write;  	atom_card_info->pll_read = cail_pll_read; | 
