The SRO readout helpers need to distinguish bridge-backed private objects from other private objects, because bridges require special readout ordering through the encoder bridge chains.
Add drm_private_obj_is_bridge() which checks whether a private object's funcs pointer matches the bridge private state funcs. Reviewed-by: Maarten Lankhorst <[email protected]> Signed-off-by: Maxime Ripard <[email protected]> --- drivers/gpu/drm/drm_bridge.c | 15 +++++++++++++++ include/drm/drm_bridge.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index e237366199a7..b2d77824e4be 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -589,4 +589,19 @@ static const struct drm_private_state_funcs drm_bridge_priv_state_funcs = { }; +/** + * drm_private_obj_is_bridge - check if a private object backs a bridge + * @obj: private object to check + * + * RETURNS: + * + * True if @obj is the &drm_private_obj embedded in a &struct drm_bridge, + * false otherwise. + */ +bool drm_private_obj_is_bridge(struct drm_private_obj *obj) +{ + return obj && obj->funcs == &drm_bridge_priv_state_funcs; +} +EXPORT_SYMBOL(drm_private_obj_is_bridge); + /** * drm_bridge_attach - attach the bridge to an encoder's chain diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 54cf0d223bba..a22a0bdf3251 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -1235,4 +1235,6 @@ drm_priv_to_bridge(struct drm_private_obj *priv) } +bool drm_private_obj_is_bridge(struct drm_private_obj *obj); + bool drm_bridge_enter(struct drm_bridge *bridge, int *idx); void drm_bridge_exit(int idx); -- 2.55.0
