drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c
Extension
.c
Size
61346 bytes
Lines
1966
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (ret) {
			dev_err(smu->adev->dev, "%s gfx clk Failed!", attempt_string);
			return ret;
		}
		single_dpm_table = &(dpm_context->dpm_tables.gfx_table);
		ret = smu_cmn_print_dpm_clk_levels(smu, single_dpm_table,
						   cur_value, buf, offset);
		if (ret < 0)
			return ret;
		break;

	case SMU_MCLK:
		ret = arcturus_get_current_clk_freq_by_table(smu, SMU_UCLK, &cur_value);
		if (ret) {
			dev_err(smu->adev->dev, "%s mclk Failed!", attempt_string);
			return ret;
		}
		single_dpm_table = &(dpm_context->dpm_tables.uclk_table);
		ret = smu_cmn_print_dpm_clk_levels(smu, single_dpm_table,
						   cur_value, buf, offset);
		if (ret < 0)
			return ret;
		break;

	case SMU_SOCCLK:
		ret = arcturus_get_current_clk_freq_by_table(smu, SMU_SOCCLK, &cur_value);
		if (ret) {
			dev_err(smu->adev->dev, "%s socclk Failed!", attempt_string);
			return ret;
		}
		single_dpm_table = &(dpm_context->dpm_tables.soc_table);
		ret = smu_cmn_print_dpm_clk_levels(smu, single_dpm_table,
						   cur_value, buf, offset);
		if (ret < 0)
			return ret;
		break;

	case SMU_FCLK:
		ret = arcturus_get_current_clk_freq_by_table(smu, SMU_FCLK, &cur_value);
		if (ret) {
			dev_err(smu->adev->dev, "%s fclk Failed!", attempt_string);
			return ret;
		}
		single_dpm_table = &(dpm_context->dpm_tables.fclk_table);
		ret = smu_cmn_print_dpm_clk_levels(smu, single_dpm_table,
						   cur_value, buf, offset);
		if (ret < 0)
			return ret;
		break;

	case SMU_VCLK:
		ret = arcturus_get_current_clk_freq_by_table(smu, SMU_VCLK, &cur_value);
		if (ret) {
			dev_err(smu->adev->dev, "%s vclk Failed!", attempt_string);
			return ret;
		}
		single_dpm_table = &(dpm_context->dpm_tables.vclk_table);
		ret = smu_cmn_print_dpm_clk_levels(smu, single_dpm_table,
						   cur_value, buf, offset);
		if (ret < 0)
			return ret;
		break;

	case SMU_DCLK:
		ret = arcturus_get_current_clk_freq_by_table(smu, SMU_DCLK, &cur_value);
		if (ret) {
			dev_err(smu->adev->dev, "%s dclk Failed!", attempt_string);
			return ret;
		}
		single_dpm_table = &(dpm_context->dpm_tables.dclk_table);
		ret = smu_cmn_print_dpm_clk_levels(smu, single_dpm_table,
						   cur_value, buf, offset);
		if (ret < 0)
			return ret;
		break;

	case SMU_PCIE:
		gen_speed = smu_v11_0_get_current_pcie_link_speed_level(smu);
		lane_width = smu_v11_0_get_current_pcie_link_width_level(smu);
		pcie_table = &(dpm_context->dpm_tables.pcie_table);
		/* Populate with current state - arcturus only has boot level lclk */
		pcie_table->lclk_levels = 1;
		pcie_table->pcie_gen[0] = gen_speed;
		pcie_table->pcie_lane[0] = lane_width;
		pcie_table->lclk_freq[0] =
			smu->smu_table.boot_values.lclk / 100;
		ret = smu_cmn_print_pcie_levels(smu, pcie_table, gen_speed,
						lane_width, buf, offset);
		if (ret < 0)
			return ret;

Annotation

Implementation Notes