Skip to content
Permalink
Maxime-Ripard/…
Switch branches/tags

Commits on Mar 17, 2021

  1. drm/vc4: hdmi: Force YUV422 if the rate is too high

    When using the modes that need the highest pixel rate we support (such
    as 4k at 60Hz), using a 10 or 12 bpc output will put us over the limit
    of what we can achieve.
    
    In such a case, let's force our output to be YUV422 so that we can go
    back down under the required clock rate.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  2. drm/vc4: hdmi: Move the pixel rate calculation to a helper

    In order to implement a fallback mechanism to YUV422 when the pixel rate
    is too high, let's move the pixel rate computation to a function of its
    own that will be shared across two functions.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  3. drm/vc4: hdmi: Support HDMI YUV output

    The HDMI controllers in the BCM2711 support YUV444 and YUV420 outputs,
    let's add support for it.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  4. drm/vc4: hdmi: Rework the infoframe prototype

    In order to support a YUV output, we're going to need to have access to
    the bridge state in the vc4_hdmi_set_avi_infoframe function. Since we
    also need the connector state in that function, let's pass the full
    atomic state.
    
    While we're at it, since all those functions actually need the vc4_hdmi
    structure, let's pass it instead of the drm_encoder.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  5. drm/vc4: hdmi: Change CSC callback prototype

    In order to support the YUV output, we'll need the atomic state to know
    what is the state of the associated property in the CSC setup callback.
    
    Let's change the prototype of that callback to allow us to access it.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  6. drm/vc4: hdmi: Define colorspace matrices

    The current CSC setup code for the BCM2711 uses a sequence of register
    writes to configure the CSC depending on whether we output using a full
    or limited range.
    
    However, with the upcoming introduction of the YUV output, we're going
    to add new matrices to perform the conversions, so we should switch to
    something a bit more flexible that takes the matrix as an argument and
    programs the CSC accordingly.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  7. drm/vc4: hdmi: Replace CSC_CTL hardcoded value by defines

    On BCM2711, the HDMI_CSC_CTL register value has been hardcoded to an
    opaque value. Let's replace it with properly defined values.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  8. drm/vc4: hdmi: Move XBAR setup to csc_setup

    On the BCM2711, the HDMI_VEC_INTERFACE_XBAR register configuration
    depends on whether we're using an RGB or YUV output. Let's move that
    configuration to the CSC setup.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  9. drm/vc4: hdmi: Convert to bridge

    Converting the HDMI controller to a bridge seems like the preferred way
    to support an YUV output, so let's do this.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  10. drm/vc4: hdmi: Remove limited_rgb_range

    The limited_rgb_range field in the vc4_hdmi_encoder structure is used to
    tell whether we're supposed to output with a full or limited RGB range.
    
    This is redundant with the new helper we introduced, so let's convert to
    that helper and drop that field.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  11. drm/vc4: hdmi: Use full range helper in csc functions

    The CSC callbacks takes a boolean as an argument to tell whether we're
    using the full range or limited range RGB.
    
    However, with the upcoming YUV support, the logic will be a bit more
    complex. In order to address this, let's make the callbacks take the
    entire mode, and call our new helper to tell whether the full or limited
    range RGB should be used.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  12. drm/vc4: hdmi: Add full range RGB helper

    We're going to need to tell whether we want to run with a full or
    limited range RGB output in multiple places in the code, so let's create
    a helper that will return whether we need with full range or not.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  13. drm/vc4: Rework the encoder retrieval code

    Due to a FIFO that cannot be flushed between the pixelvalve and the HDMI
    controllers on BCM2711, we need to carefully disable both at boot time
    if they were left enabled by the firmware.
    
    However, at the time we're running that code, the struct drm_connector
    encoder pointer isn't set yet, and thus we cannot retrieve the encoder
    associated to our CRTC.
    
    We can however make use of the fact that we have a less flexible setup
    than what DRM allows where we have a 1:1 relationship between our CRTCs
    and encoders (and connectors), and thus store the crtc associated to our
    encoder at boot time.
    
    We cannot do that at the time the encoders are probed though, since the
    CRTCs won't be probed yet and thus we don't know at that time which CRTC
    index we're going to get, so let's do this in two passes: we can first
    bind all the components and then once they all are bound, we can iterate
    over all the encoders to find their associated CRTC and set the pointer.
    
    This is similar to what we're doing to set the possible_crtcs field.
    
    Fixes: 875a4d5 ("drm/vc4: drv: Disable the CRTC at boot time")
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  14. drm/vc4: crtc: Skip the TXP

    The vc4_set_crtc_possible_masks is meant to run over all the encoders
    and then set their possible_crtcs mask to their associated pixelvalve.
    
    However, since the commit 39fcb28 ("drm/vc4: txp: Turn the TXP into
    a CRTC of its own"), the TXP has been turned to a CRTC and encoder of
    its own, and while it does indeed register an encoder, it no longer has
    an associated pixelvalve. The code will thus run over the TXP encoder
    and set a bogus possible_crtcs mask, overriding the one set in the TXP
    bind function.
    
    In order to fix this, let's skip any virtual encoder.
    
    Fixes: 39fcb28 ("drm/vc4: txp: Turn the TXP into a CRTC of its own")
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  15. drm/vc4: txp: Properly set the possible_crtcs mask

    The current code does a binary or on the possible_crtcs variable of the
    TXP encoder, while we want to set it to that value instead.
    
    Fixes: 39fcb28 ("drm/vc4: txp: Turn the TXP into a CRTC of its own")
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  16. drm/bridge: dw-hdmi: Use helpers

    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  17. drm/bridge: Add HDMI output fmt helper

    The atomic_get_output_bus_fmts bridge callback is there to list the
    available formats for output by decreasing order of preference.
    
    On HDMI controllers, we have a fairly static list that will depend on
    what the HDMI sink is capable of and the BPC our controller can output.
    
    The dw-hdmi driver already has that code done in a fairly generic
    manner, so let's turn that code into an helper for all the HDMI
    controllers to reuse.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021
  18. drm: Introduce new HDMI helpers

    The new bridge rework to support the input and output formats introduced
    some boilerplate code that will need to be shared across drivers.
    
    Since dw-hdmi is the only driver so far, let's introduce those helpers
    based on that code.
    
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    mripard authored and intel-lab-lkp committed Mar 17, 2021

Commits on Mar 16, 2021

  1. Merge tag 'gvt-next-2021-03-16' of https://github.com/intel/gvt-linux

    …into drm-intel-next
    
    gvt-next-2021-03-16
    
    - Parse accurate vGPU virtual display rate (Colin)
    - Convert vblank timer as per-vGPU based on current rate (Colin)
    - spelling fix (Bhaskar)
    
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    From: Zhenyu Wang <zhenyuw@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210316074330.GC1551@zhen-hp.sh.intel.com
    jnikula committed Mar 16, 2021

Commits on Mar 15, 2021

  1. drm/i915/dp_link_training: Convert DRM_DEBUG_KMS to drm_dbg_kms

    One instance of DRM_DEBUG_KMS was leftover in dp_link_training, convert
    it to the new shiny.
    
    Signed-off-by: Sean Paul <seanpaul@chromium.org>
    Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210310214845.29021-2-sean@poorly.run
    atseanpaul authored and jnikula committed Mar 15, 2021
  2. drm/i915/dp_link_training: Add newlines to debug messages

    This patch adds some newlines which are missing from debug messages.
    This will prevent logs from being stacked up in dmesg.
    
    Signed-off-by: Sean Paul <seanpaul@chromium.org>
    Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210310214845.29021-1-sean@poorly.run
    atseanpaul authored and jnikula committed Mar 15, 2021
  3. i915/perf: Start hrtimer only if sampling the OA buffer

    SAMPLE_OA parameter enables sampling of OA buffer and results in a call
    to init the OA buffer which initializes the OA unit head/tail pointers.
    The OA_EXPONENT parameter controls the periodicity of the OA reports in
    the OA buffer and results in starting a hrtimer.
    
    Before gen12, all use cases required the use of the OA buffer and i915
    enforced this setting when vetting out the parameters passed. In these
    platforms the hrtimer was enabled if OA_EXPONENT was passed. This worked
    fine since it was implied that SAMPLE_OA is always passed.
    
    With gen12, this changed. Users can use perf without enabling the OA
    buffer as in OAR use cases. While an OAR use case should ideally not
    start the hrtimer, we see that passing an OA_EXPONENT parameter will
    start the hrtimer even though SAMPLE_OA is not specified. This results
    in an uninitialized OA buffer, so the head/tail pointers used to track
    the buffer are zero.
    
    This itself does not fail, but if we ran a use-case that SAMPLED the OA
    buffer previously, then the OA_TAIL register is still pointing to an old
    value. When the timer callback runs, it ends up calculating a
    wrong/large number of available reports. Since we do a spinlock_irq_save
    and start processing a large number of reports, NMI watchdog fires and
    causes a crash.
    
    Start the timer only if SAMPLE_OA is specified.
    
    v2:
    - Drop SAMPLE OA check when appending samples (Ashutosh)
    - Prevent read if OA buffer is not being sampled
    
    Fixes: 00a7f0d ("drm/i915/tgl: Add perf support on TGL")
    Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
    Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
    Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210305210947.58751-1-umesh.nerlige.ramappa@intel.com
    unerlige authored and llandwerlin-intel committed Mar 15, 2021

Commits on Mar 12, 2021

  1. drm/i915: s/plane_res_b/blocks/ etc.

    Rename a bunch of the skl+ watermark struct members to
    have sensible names. Avoids me having to think what
    plane_res_b/etc. means.
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210305153610.12177-7-ville.syrjala@linux.intel.com
    Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    vsyrjala committed Mar 12, 2021
  2. drm/i915: Extract skl_check_wm_level() and skl_check_nv12_wm_level()

    Make the code more typo proof by extracting small helpers that
    do the "do we have enough DDB for the WM level?" checks in
    a consistent manner.
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210305153610.12177-6-ville.syrjala@linux.intel.com
    Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    vsyrjala committed Mar 12, 2021
  3. drm/i915: Calculate min_ddb_alloc for trans_wm

    Let's make all the "do we have enough DDB for this WM level?"
    checks use min_ddb_alloc. To achieve that we need to populate
    this for the transition watermarks as well.
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210305153610.12177-5-ville.syrjala@linux.intel.com
    Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    vsyrjala committed Mar 12, 2021
  4. drm/i915: Check SAGV wm min_ddb_alloc rather than plane_res_b

    For non-transition watermarks we are supposed to check min_ddb_alloc
    rather than plane_res_b when determining if we have enough DDB space
    for it. A bit too much copy pasta made me check the wrong thing.
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Fixes: df4a50a ("drm/i915: Zero out SAGV wm when we don't have enough DDB for it")
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210305153610.12177-4-ville.syrjala@linux.intel.com
    Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    vsyrjala committed Mar 12, 2021
  5. drm/i915: Tighten SAGV constraint for pre-tgl

    Say we have two planes enabled with watermarks configured
    as follows:
    plane A: wm0=enabled/can_sagv=false, wm1=enabled/can_sagv=true
    plane B: wm0=enabled/can_sagv=true,  wm1=disabled
    
    This is possible since the latency we use to calculate
    can_sagv may not be the same for both planes due to
    skl_needs_memory_bw_wa().
    
    In this case skl_crtc_can_enable_sagv() will see that
    both planes have enabled at least one watermark level
    with can_sagv==true, and thus proceeds to allow SAGV.
    However, since plane B does not have wm1 enabled
    plane A can't actually use it either. Thus we are
    now running with SAGV enabled, but plane A can't
    actually tolerate the extra latency it imposes.
    
    To remedy this only allow SAGV on if the highest common
    enabled watermark level for all active planes can tolerate
    the extra SAGV latency.
    
    Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210305153610.12177-3-ville.syrjala@linux.intel.com
    Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
    vsyrjala committed Mar 12, 2021
  6. drm/i915: Workaround async flip + VT-d corruption on HSW/BDW

    On HSW/BDW with VT-d active the first tile row scanned out
    after the first async flip of the frame often ends up corrupted.
    
    Whether the corruption happens or not depends on the scanline
    on which the async flip happens, but the behaviour seems very
    consistent. Ie. the same set of scanlines (which are most scanlines)
    always show the corruption. And another set of scanlines (far less
    of them) never shows the corruption.
    
    I discovered that disabling the fetch-stride stretching
    feature cures the corruption. This is some kind of TLB related
    prefetch thing AFAIK. We already disable it on SNB primary
    planes due to a documented workaround. The hardware folks
    indicated that disabling this should be fine, so let's go
    with that.
    
    And while we're here, let's document the relevant bits on all
    pre-skl platforms.
    
    Fixes: 2a636e2 ("drm/i915: Implement async flip for ivb/hsw")
    Fixes: cda195f ("drm/i915: Implement async flips for bdw")
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210220103303.3448-1-ville.syrjala@linux.intel.com
    Reviewed-by: Karthik B S <karthik.b.s@intel.com>
    vsyrjala committed Mar 12, 2021

Commits on Mar 11, 2021

  1. drm/i915: Tolerate bogus DPLL selection

    Let's check that we actually found the PLL before doing the
    port_clock readout, just in case the hardware was severly
    misprogrammed by the previous guy. Not sure the hw would
    even survive such misprogramming without hanging but no
    real harm in checking anyway.
    
    Cc: Karthik B S <karthik.b.s@intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210310194351.6233-1-ville.syrjala@linux.intel.com
    Reviewed-by: Karthik B S <karthik.b.s@intel.com>
    vsyrjala committed Mar 11, 2021
  2. Merge drm/drm-next into drm-intel-next

    Sync up with upstream.
    
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    jnikula committed Mar 11, 2021

Commits on Mar 8, 2021

  1. drm/i915: Extend icl_sanitize_encoder_pll_mapping() to all DDI platforms

    Now that all the encoder clock stuff is uniformly abstracted
    for all hsw+ platforms, let's extend icl_sanitize_encoder_pll_mapping()
    to cover all of them.
    
    Not sure there is a particular benefit in doing so, but less special
    cases always makes me happy.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210224144214.24803-7-ville.syrjala@linux.intel.com
    Reviewed-by: Mika Kahola <mika.kahola@intel.com>
    vsyrjala committed Mar 8, 2021
  2. drm/i915: Add encoder->is_clock_enabled()

    Support reading out the current state of the DDI clock.
    
    Not sure we really want this. Seems a bit excessive just to
    restore the debug print to icl_sanitize_encoder_pll_mapping()?
    But maybe there's more use for it?
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210224144214.24803-6-ville.syrjala@linux.intel.com
    Reviewed-by: Mika Kahola <mika.kahola@intel.com>
    vsyrjala committed Mar 8, 2021
  3. drm/i915: Move DDI clock readout to encoder->get_config()

    Move the *_get_ddi_pll() stuff into the encodet->get_config() hook.
    There it neatly sits next to the matching .{enable,disable}_clock()
    functions.
    
    In order to avoid excessive boilerplate I changed the behaviour
    such that all platforms now do the readout via
    crtc_state->port_dpll[].
    
    ICL+ TC is still a bit special due to TBTPLL not having a functional
    .get_freq(). Should probably change that by adopting the LCPLL
    approach, but that would require a fairly substantial rework of the
    DPLL ID handling. So leave it for later.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210224144214.24803-5-ville.syrjala@linux.intel.com
    Reviewed-by: Mika Kahola <mika.kahola@intel.com>
    vsyrjala committed Mar 8, 2021
  4. drm/i915: Use pipes instead crtc indices in PLL state tracking

    All the other places we have use pipes instead of crtc indices
    when tracking resource usage. Life is easier when we do it
    the same way always, so switch the dpll mgr to using pipes as
    well. Looks like it was actually mixing these up in some cases
    so it would not even have worked correctly except when the
    device has a contiguous set of pipes starting from pipe A.
    Granted, that is the typical case but supposedly it may not
    always hold on modern hw.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210224144214.24803-4-ville.syrjala@linux.intel.com
    Reviewed-by: Mika Kahola <mika.kahola@intel.com>
    vsyrjala committed Mar 8, 2021
  5. drm/i915: Do intel_dpll_readout_hw_state() after encoder readout

    The clock readout for DDI encoders needs to moved into the encoders.
    To that end intel_dpll_readout_hw_state() needs to happen after
    the encoder readout as otherwise it can't correctly populate
    the PLL crtc_mask/active_mask bitmasks.
    
    v2: Populate DPLL ref clocks before the encoder->get_config()
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210225161225.30746-1-ville.syrjala@linux.intel.com
    Reviewed-by: Mika Kahola <mika.kahola@intel.com>
    vsyrjala committed Mar 8, 2021
Older