#[non_exhaustive]pub struct TrainingConfig {
pub ffe_levels: FfeLevels,
pub flt_ready_polls: u32,
pub ltp_polls: u32,
pub frl_start_polls: u32,
pub no_timeout_poll_cap: u32,
pub max_retrains: u32,
pub exit_to_tmds_on_error: bool,
}Expand description
Per-attempt training configuration.
Construct via TrainingConfig::default and override fields as needed. Poll limits
are exact counts: N means exactly N polls before the state gives up. The defaults
assume one poll every 2 ms.
One train call makes at most `flt_ready_polls + (n_rates + max_retrains) × ltp_polls
- (max_retrains + 1) × frl_start_polls
polls, each limit replaced byno_timeout_poll_capwhile the sink setsFLT_no_timeout: 850 to 1350 polls with the defaults for one to six rates, 4500 to 7000 underFLT_no_timeout`.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.ffe_levels: FfeLevelsHighest TxFFE level the source supports, written to Config_1 (limited per rate).
Default 3, as the AMD and Intel drivers advertise: the sink can then request up to
three TxFFE raises per lane. Set it to 0 for a PHY that cannot apply TxFFE, so the
source does not advertise levels it cannot deliver; requests to raise a level are
then not acted on.
flt_ready_polls: u32Poll limit for FLT_ready in LTS:2. Default 50 (100 ms at 2 ms per poll).
ltp_polls: u32Poll limit for LTS:3. Default 100 (200 ms at 2 ms per poll).
frl_start_polls: u32Poll limit for FRL_start in LTS:P. Default 100 (200 ms at 2 ms per poll, the
FRL_start wait of the AMD and Intel drivers).
no_timeout_poll_cap: u32The LTS:2, LTS:3 and LTS:P poll limit while the sink sets FLT_no_timeout. When it
runs out the attempt ends with TrainingOutcome::NoTimeoutHold, leaving the link
as it is. Default 500 (1 s at 2 ms per poll, the AMD driver’s cap).
max_retrains: u32How many times one train call returns from LTS:P to LTS:3 when the sink requests
retraining (FLT_update). The next request after that ends the attempt with
FallbackReason::RetrainsExhausted; 0 falls back on the first one. Default 3,
the number of retries the AMD driver allows a failed procedure (it reruns the whole
procedure rather than LTS:3).
Unlike the poll limits, this bound holds under FLT_no_timeout as well: it is what
guarantees that the LTS:P ↔ LTS:3 cycle ends, so exhausting it falls back rather
than ending in TrainingOutcome::NoTimeoutHold. A compliance test that needs
more retrains raises it.
exit_to_tmds_on_error: boolWhether an SCDC or PHY error is followed by LTS:L, returning both ends to TMDS as a
fallback does. Default true. Turn it off to leave the sink and PHY as the error
left them, for example to inspect the sink’s registers; TrainingError then
reports TmdsExit::Skipped. While the sink sets FLT_no_timeout an error never
leads to LTS:L (TmdsExit::HeldUnderTest).
Trait Implementations§
Source§impl Clone for TrainingConfig
impl Clone for TrainingConfig
Source§fn clone(&self) -> TrainingConfig
fn clone(&self) -> TrainingConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more