summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h
diff options
context:
space:
mode:
authorArchit Taneja <architt@codeaurora.org>2018-02-21 09:37:22 -0500
committerRob Clark <robdclark@gmail.com>2018-06-03 16:49:00 -0400
commit8d58ef346f30cbbeb9213a7eb90c832abf903fa0 (patch)
tree0dbc64fbd8e99b8c2e7554b19f35536bc7008fcc /drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h
parentacb1acdb69c85375ee80777336dff4df2682da11 (diff)
downloadlinux-8d58ef346f30cbbeb9213a7eb90c832abf903fa0.tar.bz2
drm/msm/mdp5: Add global state as a private atomic object
Global shared resources (hwpipes, hwmixers and SMP) for MDP5 are implemented as a part of atomic state by subclassing drm_atomic_state. The preferred approach is to use the drm_private_obj infrastructure available in the atomic core. mdp5_global_state is introduced as a drm atomic private object. The two funcs mdp5_get_global_state() and mdp5_get_existing_global_state() are the two variants that will be used to access mdp5_global_state. This will replace the existing mdp5_state struct (which subclasses drm_atomic_state) and the funcs around it. These will be removed later once we mdp5_global_state is put to use everywhere. Changes in v3: - Added glob_state_lock instead of pushing it into the core - Added to the msm atomic helper patch set Changes in v4: - None Signed-off-by: Archit Taneja <architt@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h')
-rw-r--r--drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h
index 425a03d213e5..76f0ddfca322 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.h
@@ -55,6 +55,13 @@ struct mdp5_kms {
struct mdp5_state *state;
struct drm_modeset_lock state_lock;
+ /*
+ * Global private object state, Do not access directly, use
+ * mdp5_global_get_state()
+ */
+ struct drm_modeset_lock glob_state_lock;
+ struct drm_private_obj glob_state;
+
struct mdp5_smp *smp;
struct mdp5_ctl_manager *ctlm;
@@ -95,6 +102,24 @@ struct mdp5_state {
struct mdp5_state *__must_check
mdp5_get_state(struct drm_atomic_state *s);
+/* Global private object state for tracking resources that are shared across
+ * multiple kms objects (planes/crtcs/etc).
+ */
+#define to_mdp5_global_state(x) container_of(x, struct mdp5_global_state, base)
+struct mdp5_global_state {
+ struct drm_private_state base;
+
+ struct drm_atomic_state *state;
+ struct mdp5_kms *mdp5_kms;
+
+ struct mdp5_hw_pipe_state hwpipe;
+ struct mdp5_hw_mixer_state hwmixer;
+ struct mdp5_smp_state smp;
+};
+
+struct mdp5_global_state * mdp5_get_existing_global_state(struct mdp5_kms *mdp5_kms);
+struct mdp5_global_state *__must_check mdp5_get_global_state(struct drm_atomic_state *s);
+
/* Atomic plane state. Subclasses the base drm_plane_state in order to
* track assigned hwpipe and hw specific state.
*/