drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c- Extension
.c- Size
- 57638 bytes
- Lines
- 1819
- 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.
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
link_dp_training.hlink_dp_training_8b_10b.hlink_dp_training_128b_132b.hlink_dp_training_auxless.hlink_dp_training_dpia.hlink_dp_training_fixed_vs_pe_retimer.hlink_dpcd.hlink/accessories/link_dp_trace.hlink_dp_phy.hlink_dp_capability.hlink_edp_panel_control.hlink/link_detection.hlink/link_validation.hatomfirmware.hlink_enc_cfg.hresource.hdm_helpers.h
Detected Declarations
function filesfunction dp_initialize_scrambling_data_symbolsfunction dp_training_pattern_to_dpcd_training_patternfunction dp_get_nibble_at_indexfunction dp_wait_for_training_aux_rd_intervalfunction get_max_pre_emphasis_for_voltage_swingfunction maximize_lane_settingsfunction dp_hw_to_dpcd_lane_settingsfunction get_dpcd_link_ratefunction dp_translate_training_aux_read_intervalfunction dp_get_cr_failurefunction is_repeaterfunction dp_is_max_vs_reachedfunction dp_is_cr_donefunction dp_is_ch_eq_donefunction dp_is_symbol_lockedfunction dp_is_interlane_alignedfunction dp_check_interlane_alignedfunction dp_get_eq_aux_rd_intervalfunction dp_check_dpcd_reqeust_statusfunction dp_check_link_loss_statusfunction dp_get_lane_status_and_lane_adjustfunction override_lane_settingsfunction dp_get_lttpr_mode_overridefunction override_training_settingsfunction decide_cr_training_patternfunction decide_eq_training_patternfunction dp_decide_lttpr_modefunction dp_decide_lane_settingsfunction dp_decide_training_settingsfunction configure_lttpr_mode_transparentfunction configure_lttpr_mode_non_transparentfunction dpcd_configure_lttpr_modefunction repeater_training_donefunction dpcd_exit_training_modefunction dpcd_configure_channel_codingfunction dpcd_set_training_patternfunction dpcd_set_link_settingsfunction dpcd_set_lane_settingsfunction dpcd_set_lt_pattern_and_lane_settingsfunction start_clock_recovery_pattern_earlyfunction dp_set_hw_test_patternfunction dp_set_hw_training_patternfunction perform_post_lt_adj_req_sequencefunction dp_transition_to_video_idlefunction dp_perform_link_trainingfunction perform_link_training_with_retries
Annotated Snippet
switch (link_settings->link_rate) {
case LINK_RATE_UHBR10:
link_rate = 0x1;
break;
case LINK_RATE_UHBR20:
link_rate = 0x2;
break;
case LINK_RATE_UHBR13_5:
link_rate = 0x4;
break;
default:
link_rate = 0;
break;
}
else if (encoding == DP_8b_10b_ENCODING)
link_rate = (uint8_t) link_settings->link_rate;
else
link_rate = 0;
return link_rate;
}
/* Only used for channel equalization */
uint32_t dp_translate_training_aux_read_interval(uint32_t dpcd_aux_read_interval)
{
unsigned int aux_rd_interval_us = 400;
switch (dpcd_aux_read_interval) {
case 0x01:
aux_rd_interval_us = 4000;
break;
case 0x02:
aux_rd_interval_us = 8000;
break;
case 0x03:
aux_rd_interval_us = 12000;
break;
case 0x04:
aux_rd_interval_us = 16000;
break;
case 0x05:
aux_rd_interval_us = 32000;
break;
case 0x06:
aux_rd_interval_us = 64000;
break;
default:
break;
}
return aux_rd_interval_us;
}
enum link_training_result dp_get_cr_failure(enum dc_lane_count ln_count,
union lane_status *dpcd_lane_status)
{
enum link_training_result result = LINK_TRAINING_SUCCESS;
if (ln_count >= LANE_COUNT_ONE && !dpcd_lane_status[0].bits.CR_DONE_0)
result = LINK_TRAINING_CR_FAIL_LANE0;
else if (ln_count >= LANE_COUNT_TWO && !dpcd_lane_status[1].bits.CR_DONE_0)
result = LINK_TRAINING_CR_FAIL_LANE1;
else if (ln_count >= LANE_COUNT_FOUR && !dpcd_lane_status[2].bits.CR_DONE_0)
result = LINK_TRAINING_CR_FAIL_LANE23;
else if (ln_count >= LANE_COUNT_FOUR && !dpcd_lane_status[3].bits.CR_DONE_0)
result = LINK_TRAINING_CR_FAIL_LANE23;
return result;
}
bool is_repeater(const struct link_training_settings *lt_settings, uint32_t offset)
{
return (lt_settings->lttpr_mode == LTTPR_MODE_NON_TRANSPARENT) && (offset != 0);
}
bool dp_is_max_vs_reached(
const struct link_training_settings *lt_settings)
{
uint32_t lane;
for (lane = 0; lane <
(uint32_t)(lt_settings->link_settings.lane_count);
lane++) {
if (lt_settings->dpcd_lane_settings[lane].bits.VOLTAGE_SWING_SET
== VOLTAGE_SWING_MAX_LEVEL)
return true;
}
return false;
}
bool dp_is_cr_done(enum dc_lane_count ln_count,
Annotation
- Immediate include surface: `link_dp_training.h`, `link_dp_training_8b_10b.h`, `link_dp_training_128b_132b.h`, `link_dp_training_auxless.h`, `link_dp_training_dpia.h`, `link_dp_training_fixed_vs_pe_retimer.h`, `link_dpcd.h`, `link/accessories/link_dp_trace.h`.
- Detected declarations: `function files`, `function dp_initialize_scrambling_data_symbols`, `function dp_training_pattern_to_dpcd_training_pattern`, `function dp_get_nibble_at_index`, `function dp_wait_for_training_aux_rd_interval`, `function get_max_pre_emphasis_for_voltage_swing`, `function maximize_lane_settings`, `function dp_hw_to_dpcd_lane_settings`, `function get_dpcd_link_rate`, `function dp_translate_training_aux_read_interval`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.