Currently the bigjoiner state copy logic is kind of a byzantine mess. Clean it up to operate in the following manner during a full modeset: 1) master uapi -> hw state copy 2) master hw -> slave hw state copy And during a non-modeset update we do: 1) master uapi -> hw state light copy 2) master hw -> slave hw state light copy I think that is now easier to reason about since we never do any kind of master uapi -> slave hw state copy short circuit that could happen previously. Obviously this does now depend on the master uapi->hw copy always happening before the master hw -> slave hw copy, but that is guaranteed by the fact that we always add both crtcs to the state early, the crtcs are registered in pipe order (so the compute_config loop happens in pipe order), and the hardware requires the master pipe has to be lower than the slave pipe as well. And for good measure we shall add a check+WARN for this before doing the bigjoiner crtc assignment. v2: Fix uapi.ctm vs. hw.ctm copy-paste fail Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220204072049.1610-1-ville.syrjala@linux.intel.com Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>
60 lines
2.0 KiB
C
60 lines
2.0 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_ATOMIC_H__
|
|
#define __INTEL_ATOMIC_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_atomic_state;
|
|
struct drm_connector;
|
|
struct drm_connector_state;
|
|
struct drm_crtc;
|
|
struct drm_crtc_state;
|
|
struct drm_device;
|
|
struct drm_i915_private;
|
|
struct drm_property;
|
|
struct intel_atomic_state;
|
|
struct intel_connector;
|
|
struct intel_crtc;
|
|
struct intel_crtc_state;
|
|
|
|
int intel_digital_connector_atomic_get_property(struct drm_connector *connector,
|
|
const struct drm_connector_state *state,
|
|
struct drm_property *property,
|
|
u64 *val);
|
|
int intel_digital_connector_atomic_set_property(struct drm_connector *connector,
|
|
struct drm_connector_state *state,
|
|
struct drm_property *property,
|
|
u64 val);
|
|
int intel_digital_connector_atomic_check(struct drm_connector *conn,
|
|
struct drm_atomic_state *state);
|
|
struct drm_connector_state *
|
|
intel_digital_connector_duplicate_state(struct drm_connector *connector);
|
|
bool intel_connector_needs_modeset(struct intel_atomic_state *state,
|
|
struct drm_connector *connector);
|
|
bool intel_any_crtc_needs_modeset(struct intel_atomic_state *state);
|
|
struct intel_digital_connector_state *
|
|
intel_atomic_get_digital_connector_state(struct intel_atomic_state *state,
|
|
struct intel_connector *connector);
|
|
|
|
struct drm_crtc_state *intel_crtc_duplicate_state(struct drm_crtc *crtc);
|
|
void intel_crtc_destroy_state(struct drm_crtc *crtc,
|
|
struct drm_crtc_state *state);
|
|
void intel_crtc_free_hw_state(struct intel_crtc_state *crtc_state);
|
|
struct drm_atomic_state *intel_atomic_state_alloc(struct drm_device *dev);
|
|
void intel_atomic_state_free(struct drm_atomic_state *state);
|
|
void intel_atomic_state_clear(struct drm_atomic_state *state);
|
|
|
|
struct intel_crtc_state *
|
|
intel_atomic_get_crtc_state(struct drm_atomic_state *state,
|
|
struct intel_crtc *crtc);
|
|
|
|
int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
|
|
struct intel_crtc *intel_crtc,
|
|
struct intel_crtc_state *crtc_state);
|
|
|
|
#endif /* __INTEL_ATOMIC_H__ */
|