/** * DOC: Common Primary Timing Generator (CMTG) * * The CMTG is a timing generator that runs in parallel to transcoders timing * generators (TG) to provide a synchronization mechanism where CMTG acts as * primary and transcoders TGs act as secondary to the CMTG. The CMTG outputs * its TG start and frame sync signals to the transcoders that are configured * as secondary, which use those signals to synchronize their own timing with * the CMTG's. * * The CMTG can be used only with eDP or MIPI command mode and supports the * following use cases: * * - Dual eDP: The CMTG can be used to keep two eDP TGs in sync when on a * dual eDP configuration (with or without PSR/PSR2 enabled). * * - Single eDP as secondary: It is also possible to use a single eDP * configuration with the transcoder TG as secondary to the CMTG. That would * allow a flow that would not require a modeset on the existing eDP when a * new eDP is added for a dual eDP configuration with CMTG. * * - DC6v: In DC6v, the transcoder might be off but the CMTG keeps running to * maintain frame timings. When exiting DC6v, the transcoder TG then is * synced back the CMTG. * * Currently, the driver does not use the CMTG, but we need to make sure that * we disable it in case we inherit a display configuration with it enabled.
*/
/* * We describe here only the minimum data required to allow us to properly * disable the CMTG if necessary.
*/ struct intel_cmtg_config { bool cmtg_a_enable; /* * Xe2_LPD adds a second CMTG that can be used for dual eDP async mode.
*/ bool cmtg_b_enable; bool trans_a_secondary; bool trans_b_secondary;
};
if (intel_cmtg_has_clock_sel(display) && clk_sel_clr)
intel_de_rmw(display, CMTG_CLK_SEL, clk_sel_clr, clk_sel_set);
}
/* * Read out CMTG configuration and, on platforms that allow disabling it without * a modeset, do it. * * This function must be called before any port PLL is disabled in the general * sanitization process, because we need whatever port PLL that is providing the * clock for CMTG to be on before accessing CMTG registers.
*/ void intel_cmtg_sanitize(struct intel_display *display)
{ struct intel_cmtg_config cmtg_config = {};
/* * FIXME: The driver is not prepared to handle cases where a modeset is * required for disabling the CMTG: we need a proper way of tracking * CMTG state and do the right syncronization with respect to triggering * the modeset as part of the disable sequence.
*/ if (intel_cmtg_disable_requires_modeset(display, &cmtg_config)) return;
intel_cmtg_disable(display, &cmtg_config);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.