[PATCH 35/44] drm/i915/hdmi_frl_dfm: Add helpers to read/write FRL DFM registers
Ankit Nautiyal <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-gfx,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-xe |
|---|---|
| Message-ID | <[email protected]> |
Introduce helpers to read/write FRL Data Flow Metering registers. Signed-off-by: Ankit Nautiyal <[email protected]> --- .../gpu/drm/i915/display/intel_hdmi_frl_dfm.c | 42 +++++++++++++++++++ .../gpu/drm/i915/display/intel_hdmi_frl_dfm.h | 5 +++ 2 files changed, 47 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.c b/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.c index 56ade6009983..51a09c05bef3 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.c @@ -7,7 +7,12 @@ #include <drm/drm_connector.h> +#include "intel_de.h" +#include "intel_display_driver.h" +#include "intel_display_regs.h" +#include "intel_display_types.h" #include "intel_hdmi_frl_dfm.h" +#include "intel_hdmi_frl_dfm_regs.h" /* DFM constraints and tolerance values */ #define TB_BORROWED_MAX 400 @@ -702,3 +707,40 @@ bool intel_hdmi_frl_dfm_dsc_requirement_met(struct intel_hdmi_frl_dfm *frl_dfm) return true; } + +void intel_hdmi_frl_dfm_write(const struct intel_crtc_state *crtc_state) +{ + struct intel_display *display = to_intel_display(crtc_state); + enum transcoder cpu_trans = crtc_state->cpu_transcoder; + i915_reg_t reg; + u32 val; + + if (!crtc_state->frl.enable) + return; + + reg = TRANS_HDMI_FRL_DFMWRCTL(display, cpu_trans); + val = TB_ACTUAL_OFFSET(crtc_state->frl.tb_actual); + intel_de_rmw(display, reg, TB_ACTUAL_OFFSET_MASK, val); + + reg = TRANS_HDMI_FRL_DFMTHRSH(display, cpu_trans); + val = TB_MIN_THESHOLD(crtc_state->frl.tb_threshold_min); + intel_de_rmw(display, reg, TB_MIN_THESHOLD_MASK, val); +} + +void intel_hdmi_frl_dfm_read(struct intel_crtc_state *crtc_state) +{ + struct intel_display *display = to_intel_display(crtc_state); + enum transcoder cpu_trans = crtc_state->cpu_transcoder; + u32 val; + + if (!crtc_state->frl.enable) + return; + + val = intel_de_read(display, TRANS_HDMI_FRL_DFMWRCTL(display, cpu_trans)); + crtc_state->frl.tb_actual = + REG_FIELD_GET(TB_ACTUAL_OFFSET_MASK, val); + + val = intel_de_read(display, TRANS_HDMI_FRL_DFMTHRSH(display, cpu_trans)); + crtc_state->frl.tb_threshold_min = + REG_FIELD_GET(TB_MIN_THESHOLD_MASK, val); +} diff --git a/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.h b/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.h index 70a66679bdbc..1bfc70067518 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.h +++ b/drivers/gpu/drm/i915/display/intel_hdmi_frl_dfm.h @@ -7,6 +7,8 @@ #include <linux/types.h> +struct intel_crtc_state; + /* All the input config needed to compute DFM requirements */ struct intel_hdmi_frl_dfm_input_config { /* @@ -115,4 +117,7 @@ bool intel_hdmi_frl_dfm_nondsc_requirement_met(struct intel_hdmi_frl_dfm *frl_df bool intel_hdmi_frl_dfm_dsc_requirement_met(struct intel_hdmi_frl_dfm *frl_dfm); +void intel_hdmi_frl_dfm_write(const struct intel_crtc_state *crtc_state); +void intel_hdmi_frl_dfm_read(struct intel_crtc_state *crtc_state); + #endif -- 2.50.1