* [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support
@ 2024-10-18 21:49 Dmitry Baryshkov
2024-10-18 21:49 ` [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed Dmitry Baryshkov
` (8 more replies)
0 siblings, 9 replies; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
Alexander Stein
One of the features that drm_bridge_connector can't handle currently is
setting of the ycbcr_420_allowed flag on the connector. Add the flag to
the drm_bridge struct and propagate it to the drm_connector as AND of
all flags in the bridge chain.
As an example of the conversion, enable the flag on the DW HDMI bridge,
MSM DP bridge, display connector drivers (for DisplayPort and HDMI
outputs) and AUX bridges.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
Dmitry Baryshkov (6):
drm/display: bridge_connector: handle ycbcr_420_allowed
drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
drm/bridge: aux: allow interlaced and YCbCr 420 output
drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag
drivers/gpu/drm/bridge/aux-bridge.c | 4 ++++
drivers/gpu/drm/bridge/aux-hpd-bridge.c | 4 ++++
drivers/gpu/drm/bridge/display-connector.c | 4 ++++
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 +++
drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++--
drivers/gpu/drm/drm_atomic.c | 2 ++
drivers/gpu/drm/msm/dp/dp_display.c | 4 ++--
drivers/gpu/drm/msm/dp/dp_drm.c | 10 ++++------
drivers/gpu/drm/msm/dp/dp_drm.h | 7 ++++---
include/drm/drm_bridge.h | 5 +++++
10 files changed, 36 insertions(+), 13 deletions(-)
---
base-commit: 7f796de9da37b78e05edde94ebc7e3f9ee53b3b4
change-id: 20241018-bridge-yuv420-aab94d4575de
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
@ 2024-10-18 21:49 ` Dmitry Baryshkov
2024-10-21 9:55 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump Dmitry Baryshkov
` (7 subsequent siblings)
8 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
Follow the interlace_allowed example and calculate drm_connector's
ycbcr_420_allowed flag as AND of all drm_bridge's ycbcr_420_allowed
flags in a chain. This is one of the gaps between several
bridge-specific connector implementations and drm_bridge_connector.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++--
include/drm/drm_bridge.h | 5 +++++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c
index 3da5b8bf8259..320c297008aa 100644
--- a/drivers/gpu/drm/display/drm_bridge_connector.c
+++ b/drivers/gpu/drm/display/drm_bridge_connector.c
@@ -397,11 +397,11 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
bridge_connector->encoder = encoder;
/*
- * TODO: Handle doublescan_allowed, stereo_allowed and
- * ycbcr_420_allowed.
+ * TODO: Handle doublescan_allowed and stereo_allowed.
*/
connector = &bridge_connector->base;
connector->interlace_allowed = true;
+ connector->ycbcr_420_allowed = true;
/*
* Initialise connector status handling. First locate the furthest
@@ -414,6 +414,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
drm_for_each_bridge_in_chain(encoder, bridge) {
if (!bridge->interlace_allowed)
connector->interlace_allowed = false;
+ if (!bridge->ycbcr_420_allowed)
+ connector->ycbcr_420_allowed = false;
if (bridge->ops & DRM_BRIDGE_OP_EDID)
bridge_connector->bridge_edid = bridge;
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 75019d16be64..e8d735b7f6a4 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -802,6 +802,11 @@ struct drm_bridge {
* modes.
*/
bool interlace_allowed;
+ /**
+ * @ycbcr_420_allowed: Indicate that the bridge can handle YCbCr 420
+ * output.
+ */
+ bool ycbcr_420_allowed;
/**
* @pre_enable_prev_first: The bridge requires that the prev
* bridge @pre_enable function is called before its @pre_enable,
--
2.39.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
2024-10-18 21:49 ` [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed Dmitry Baryshkov
@ 2024-10-18 21:49 ` Dmitry Baryshkov
2024-10-21 9:56 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP Dmitry Baryshkov
` (6 subsequent siblings)
8 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
Although the interlace_allowed and ycbcr_420_allowed flags are a part of
the struct drm_connector rather than struct drm_connector_state, still
include them into state dump in order to ease debugging of the setup
issues.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/drm_atomic.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 0fc99da93afe..9ea2611770f4 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1132,6 +1132,8 @@ static void drm_atomic_connector_print_state(struct drm_printer *p,
drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector->name);
drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : "(null)");
drm_printf(p, "\tself_refresh_aware=%d\n", state->self_refresh_aware);
+ drm_printf(p, "\tinterlace_allowed=%d\n", connector->interlace_allowed);
+ drm_printf(p, "\tycbcr_420_allowed=%d\n", connector->ycbcr_420_allowed);
drm_printf(p, "\tmax_requested_bpc=%d\n", state->max_requested_bpc);
drm_printf(p, "\tcolorspace=%s\n", drm_get_colorspace_name(state->colorspace));
--
2.39.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
2024-10-18 21:49 ` [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed Dmitry Baryshkov
2024-10-18 21:49 ` [PATCH 2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump Dmitry Baryshkov
@ 2024-10-18 21:49 ` Dmitry Baryshkov
2024-10-21 7:29 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output Dmitry Baryshkov
` (5 subsequent siblings)
8 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
Allow YCbCr 420 output for HDMI and DisplayPort connectors. Other
bridges in the chain still might limit YCbCr 420 support on the
corresponding connector.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/bridge/display-connector.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
index ab8e00baf3f1..aab9ce7be94c 100644
--- a/drivers/gpu/drm/bridge/display-connector.c
+++ b/drivers/gpu/drm/bridge/display-connector.c
@@ -270,6 +270,10 @@ static int display_connector_probe(struct platform_device *pdev)
/* All the supported connector types support interlaced modes. */
conn->bridge.interlace_allowed = true;
+ if (type == DRM_MODE_CONNECTOR_HDMIA ||
+ type == DRM_MODE_CONNECTOR_DisplayPort)
+ conn->bridge.ycbcr_420_allowed = true;
+
/* Get the optional connector label. */
of_property_read_string(pdev->dev.of_node, "label", &label);
--
2.39.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
` (2 preceding siblings ...)
2024-10-18 21:49 ` [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP Dmitry Baryshkov
@ 2024-10-18 21:49 ` Dmitry Baryshkov
2024-10-21 9:54 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge Dmitry Baryshkov
` (4 subsequent siblings)
8 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
As both aux bridges are merely passthrough bridges, mark them as
supporting interlaced and YCbCr 420 data. Other bridges in the chain
still might limit interlaced and YCbCr 420 data support on the
corresponding connector.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/bridge/aux-bridge.c | 4 ++++
drivers/gpu/drm/bridge/aux-hpd-bridge.c | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/drivers/gpu/drm/bridge/aux-bridge.c b/drivers/gpu/drm/bridge/aux-bridge.c
index b29980f95379..e3e95ccec1ae 100644
--- a/drivers/gpu/drm/bridge/aux-bridge.c
+++ b/drivers/gpu/drm/bridge/aux-bridge.c
@@ -120,6 +120,10 @@ static int drm_aux_bridge_probe(struct auxiliary_device *auxdev,
data->bridge.funcs = &drm_aux_bridge_funcs;
data->bridge.of_node = data->dev->of_node;
+ /* passthrough data, allow everything */
+ data->bridge.interlace_allowed = true;
+ data->bridge.ycbcr_420_allowed = true;
+
return devm_drm_bridge_add(data->dev, &data->bridge);
}
diff --git a/drivers/gpu/drm/bridge/aux-hpd-bridge.c b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
index 6886db2d9e00..48f297c78ee6 100644
--- a/drivers/gpu/drm/bridge/aux-hpd-bridge.c
+++ b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
@@ -180,6 +180,10 @@ static int drm_aux_hpd_bridge_probe(struct auxiliary_device *auxdev,
data->bridge.ops = DRM_BRIDGE_OP_HPD;
data->bridge.type = id->driver_data;
+ /* passthrough data, allow everything */
+ data->bridge.interlace_allowed = true;
+ data->bridge.ycbcr_420_allowed = true;
+
auxiliary_set_drvdata(auxdev, data);
return devm_drm_bridge_add(data->dev, &data->bridge);
--
2.39.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
` (3 preceding siblings ...)
2024-10-18 21:49 ` [PATCH 4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output Dmitry Baryshkov
@ 2024-10-18 21:49 ` Dmitry Baryshkov
2024-10-21 9:57 ` Neil Armstrong
` (2 more replies)
2024-10-18 21:49 ` [PATCH 6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag Dmitry Baryshkov
` (3 subsequent siblings)
8 siblings, 3 replies; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
Instead of forcing the ycbcr_420_allowed flag to be set on the created
drm_connector, set it on the drm_bridge instance and allow
drm_bridge_connecgtor to propagate it to the drm_connector.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/msm/dp/dp_display.c | 4 ++--
drivers/gpu/drm/msm/dp/dp_drm.c | 10 ++++------
drivers/gpu/drm/msm/dp/dp_drm.h | 7 ++++---
3 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index e1228fb093ee..0ddd8abca499 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -1467,14 +1467,14 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
dp_priv = container_of(dp_display, struct dp_display_private, dp_display);
- ret = dp_bridge_init(dp_display, dev, encoder);
+ ret = dp_bridge_init(dp_display, dev, encoder, yuv_supported);
if (ret) {
DRM_DEV_ERROR(dev->dev,
"failed to create dp bridge: %d\n", ret);
return ret;
}
- dp_display->connector = dp_drm_connector_init(dp_display, encoder, yuv_supported);
+ dp_display->connector = dp_drm_connector_init(dp_display, encoder);
if (IS_ERR(dp_display->connector)) {
ret = PTR_ERR(dp_display->connector);
DRM_DEV_ERROR(dev->dev,
diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c
index 1b9be5bd97f1..7eb1621f9e7f 100644
--- a/drivers/gpu/drm/msm/dp/dp_drm.c
+++ b/drivers/gpu/drm/msm/dp/dp_drm.c
@@ -289,7 +289,7 @@ static const struct drm_bridge_funcs edp_bridge_ops = {
};
int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
- struct drm_encoder *encoder)
+ struct drm_encoder *encoder, bool yuv_supported)
{
int rc;
struct msm_dp_bridge *dp_bridge;
@@ -304,6 +304,7 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
bridge = &dp_bridge->bridge;
bridge->funcs = dp_display->is_edp ? &edp_bridge_ops : &dp_bridge_ops;
bridge->type = dp_display->connector_type;
+ bridge->ycbcr_420_allowed = yuv_supported;
/*
* Many ops only make sense for DP. Why?
@@ -351,8 +352,8 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
}
/* connector initialization */
-struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
- bool yuv_supported)
+struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
+ struct drm_encoder *encoder)
{
struct drm_connector *connector = NULL;
@@ -363,9 +364,6 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct dr
if (!dp_display->is_edp)
drm_connector_attach_dp_subconnector_property(connector);
- if (yuv_supported)
- connector->ycbcr_420_allowed = true;
-
drm_connector_attach_encoder(connector, encoder);
return connector;
diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_drm.h
index 45e57ac25a4d..ae632fcc407c 100644
--- a/drivers/gpu/drm/msm/dp/dp_drm.h
+++ b/drivers/gpu/drm/msm/dp/dp_drm.h
@@ -19,10 +19,11 @@ struct msm_dp_bridge {
#define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge)
-struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
- bool yuv_supported);
+struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
+ struct drm_encoder *encoder);
int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
- struct drm_encoder *encoder);
+ struct drm_encoder *encoder,
+ bool yuv_supported);
void dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
struct drm_bridge_state *old_bridge_state);
--
2.39.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
` (4 preceding siblings ...)
2024-10-18 21:49 ` [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge Dmitry Baryshkov
@ 2024-10-18 21:49 ` Dmitry Baryshkov
2024-10-21 7:30 ` Neil Armstrong
2024-10-21 7:17 ` [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Maxime Ripard
` (2 subsequent siblings)
8 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-18 21:49 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
Alexander Stein
Set the drm_bridge's ycbcr_420_allowed flag if the YCbCr 420 output is
supported by the hardware.
Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 0031f3c54882..996733ed2c00 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -3503,6 +3503,9 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev,
hdmi->bridge.of_node = pdev->dev.of_node;
hdmi->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
+ if (hdmi->version >= 0x200a)
+ hdmi->bridge.ycbcr_420_allowed = plat_data->ycbcr_420_allowed;
+
memset(&pdevinfo, 0, sizeof(pdevinfo));
pdevinfo.parent = dev;
pdevinfo.id = PLATFORM_DEVID_AUTO;
--
2.39.5
^ permalink raw reply related [flat|nested] 22+ messages in thread
* Re: [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
` (5 preceding siblings ...)
2024-10-18 21:49 ` [PATCH 6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag Dmitry Baryshkov
@ 2024-10-21 7:17 ` Maxime Ripard
2024-10-21 12:32 ` Neil Armstrong
2024-10-24 19:54 ` Dmitry Baryshkov
8 siblings, 0 replies; 22+ messages in thread
From: Maxime Ripard @ 2024-10-21 7:17 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: dri-devel, freedreno, linux-arm-msm, linux-kernel, Abhinav Kumar,
Alexander Stein, Andrzej Hajda, David Airlie, Jernej Skrabec,
Jonas Karlman, Laurent Pinchart, Maarten Lankhorst,
Marijn Suijten, Maxime Ripard, Neil Armstrong, Rob Clark,
Robert Foss, Sean Paul, Simona Vetter, Thomas Zimmermann
On Sat, 19 Oct 2024 00:49:11 +0300, Dmitry Baryshkov wrote:
> One of the features that drm_bridge_connector can't handle currently is
> setting of the ycbcr_420_allowed flag on the connector. Add the flag to
> the drm_bridge struct and propagate it to the drm_connector as AND of
> all flags in the bridge chain.
>
>
> [ ... ]
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Thanks!
Maxime
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
2024-10-18 21:49 ` [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP Dmitry Baryshkov
@ 2024-10-21 7:29 ` Neil Armstrong
2024-10-21 9:06 ` Dmitry Baryshkov
0 siblings, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 7:29 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> Allow YCbCr 420 output for HDMI and DisplayPort connectors. Other
> bridges in the chain still might limit YCbCr 420 support on the
> corresponding connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/bridge/display-connector.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
> index ab8e00baf3f1..aab9ce7be94c 100644
> --- a/drivers/gpu/drm/bridge/display-connector.c
> +++ b/drivers/gpu/drm/bridge/display-connector.c
> @@ -270,6 +270,10 @@ static int display_connector_probe(struct platform_device *pdev)
> /* All the supported connector types support interlaced modes. */
> conn->bridge.interlace_allowed = true;
>
> + if (type == DRM_MODE_CONNECTOR_HDMIA ||
> + type == DRM_MODE_CONNECTOR_DisplayPort)
> + conn->bridge.ycbcr_420_allowed = true;
> +
> /* Get the optional connector label. */
> of_property_read_string(pdev->dev.of_node, "label", &label);
>
>
I think we should make sure all HDMI bridges can filter out 420 before
landing this, no ?
Neil
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag
2024-10-18 21:49 ` [PATCH 6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag Dmitry Baryshkov
@ 2024-10-21 7:30 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 7:30 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
Alexander Stein
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> Set the drm_bridge's ycbcr_420_allowed flag if the YCbCr 420 output is
> supported by the hardware.
>
> Cc: Alexander Stein <alexander.stein@ew.tq-group.com>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> index 0031f3c54882..996733ed2c00 100644
> --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
> @@ -3503,6 +3503,9 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev,
> hdmi->bridge.of_node = pdev->dev.of_node;
> hdmi->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
>
> + if (hdmi->version >= 0x200a)
> + hdmi->bridge.ycbcr_420_allowed = plat_data->ycbcr_420_allowed;
> +
> memset(&pdevinfo, 0, sizeof(pdevinfo));
> pdevinfo.parent = dev;
> pdevinfo.id = PLATFORM_DEVID_AUTO;
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
2024-10-21 7:29 ` Neil Armstrong
@ 2024-10-21 9:06 ` Dmitry Baryshkov
2024-10-21 9:54 ` neil.armstrong
0 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-21 9:06 UTC (permalink / raw)
To: neil.armstrong
Cc: Andrzej Hajda, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten, dri-devel, linux-kernel,
linux-arm-msm, freedreno
On Mon, 21 Oct 2024 at 10:29, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>
> On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> > Allow YCbCr 420 output for HDMI and DisplayPort connectors. Other
> > bridges in the chain still might limit YCbCr 420 support on the
> > corresponding connector.
> >
> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> > ---
> > drivers/gpu/drm/bridge/display-connector.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
> > index ab8e00baf3f1..aab9ce7be94c 100644
> > --- a/drivers/gpu/drm/bridge/display-connector.c
> > +++ b/drivers/gpu/drm/bridge/display-connector.c
> > @@ -270,6 +270,10 @@ static int display_connector_probe(struct platform_device *pdev)
> > /* All the supported connector types support interlaced modes. */
> > conn->bridge.interlace_allowed = true;
> >
> > + if (type == DRM_MODE_CONNECTOR_HDMIA ||
> > + type == DRM_MODE_CONNECTOR_DisplayPort)
> > + conn->bridge.ycbcr_420_allowed = true;
> > +
> > /* Get the optional connector label. */
> > of_property_read_string(pdev->dev.of_node, "label", &label);
> >
> >
>
> I think we should make sure all HDMI bridges can filter out 420 before
> landing this, no ?
No, it's the other way around: if one of the bridges in a chain
doesn't set 420_allowed, then 420_allowed won't be set for the
connector, disallowing YCbCr 420 modes.
Before this patchset the bridge / platform drivers had to manually set
the flag on the created connector (see dw-hdmi + meson-encoder-hdmi or
msm/dp).
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
2024-10-21 9:06 ` Dmitry Baryshkov
@ 2024-10-21 9:54 ` neil.armstrong
0 siblings, 0 replies; 22+ messages in thread
From: neil.armstrong @ 2024-10-21 9:54 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Andrzej Hajda, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten, dri-devel, linux-kernel,
linux-arm-msm, freedreno
On 21/10/2024 11:06, Dmitry Baryshkov wrote:
> On Mon, 21 Oct 2024 at 10:29, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>
>> On 18/10/2024 23:49, Dmitry Baryshkov wrote:
>>> Allow YCbCr 420 output for HDMI and DisplayPort connectors. Other
>>> bridges in the chain still might limit YCbCr 420 support on the
>>> corresponding connector.
>>>
>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>>> ---
>>> drivers/gpu/drm/bridge/display-connector.c | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/bridge/display-connector.c b/drivers/gpu/drm/bridge/display-connector.c
>>> index ab8e00baf3f1..aab9ce7be94c 100644
>>> --- a/drivers/gpu/drm/bridge/display-connector.c
>>> +++ b/drivers/gpu/drm/bridge/display-connector.c
>>> @@ -270,6 +270,10 @@ static int display_connector_probe(struct platform_device *pdev)
>>> /* All the supported connector types support interlaced modes. */
>>> conn->bridge.interlace_allowed = true;
>>>
>>> + if (type == DRM_MODE_CONNECTOR_HDMIA ||
>>> + type == DRM_MODE_CONNECTOR_DisplayPort)
>>> + conn->bridge.ycbcr_420_allowed = true;
>>> +
>>> /* Get the optional connector label. */
>>> of_property_read_string(pdev->dev.of_node, "label", &label);
>>>
>>>
>>
>> I think we should make sure all HDMI bridges can filter out 420 before
>> landing this, no ?
>
> No, it's the other way around: if one of the bridges in a chain
> doesn't set 420_allowed, then 420_allowed won't be set for the
> connector, disallowing YCbCr 420 modes.
> Before this patchset the bridge / platform drivers had to manually set
> the flag on the created connector (see dw-hdmi + meson-encoder-hdmi or
> msm/dp).
>
Right, sorry for the noise...
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output
2024-10-18 21:49 ` [PATCH 4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output Dmitry Baryshkov
@ 2024-10-21 9:54 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 9:54 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> As both aux bridges are merely passthrough bridges, mark them as
> supporting interlaced and YCbCr 420 data. Other bridges in the chain
> still might limit interlaced and YCbCr 420 data support on the
> corresponding connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/bridge/aux-bridge.c | 4 ++++
> drivers/gpu/drm/bridge/aux-hpd-bridge.c | 4 ++++
> 2 files changed, 8 insertions(+)
>
> diff --git a/drivers/gpu/drm/bridge/aux-bridge.c b/drivers/gpu/drm/bridge/aux-bridge.c
> index b29980f95379..e3e95ccec1ae 100644
> --- a/drivers/gpu/drm/bridge/aux-bridge.c
> +++ b/drivers/gpu/drm/bridge/aux-bridge.c
> @@ -120,6 +120,10 @@ static int drm_aux_bridge_probe(struct auxiliary_device *auxdev,
> data->bridge.funcs = &drm_aux_bridge_funcs;
> data->bridge.of_node = data->dev->of_node;
>
> + /* passthrough data, allow everything */
> + data->bridge.interlace_allowed = true;
> + data->bridge.ycbcr_420_allowed = true;
> +
> return devm_drm_bridge_add(data->dev, &data->bridge);
> }
>
> diff --git a/drivers/gpu/drm/bridge/aux-hpd-bridge.c b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
> index 6886db2d9e00..48f297c78ee6 100644
> --- a/drivers/gpu/drm/bridge/aux-hpd-bridge.c
> +++ b/drivers/gpu/drm/bridge/aux-hpd-bridge.c
> @@ -180,6 +180,10 @@ static int drm_aux_hpd_bridge_probe(struct auxiliary_device *auxdev,
> data->bridge.ops = DRM_BRIDGE_OP_HPD;
> data->bridge.type = id->driver_data;
>
> + /* passthrough data, allow everything */
> + data->bridge.interlace_allowed = true;
> + data->bridge.ycbcr_420_allowed = true;
> +
> auxiliary_set_drvdata(auxdev, data);
>
> return devm_drm_bridge_add(data->dev, &data->bridge);
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed
2024-10-18 21:49 ` [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed Dmitry Baryshkov
@ 2024-10-21 9:55 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 9:55 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> Follow the interlace_allowed example and calculate drm_connector's
> ycbcr_420_allowed flag as AND of all drm_bridge's ycbcr_420_allowed
> flags in a chain. This is one of the gaps between several
> bridge-specific connector implementations and drm_bridge_connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++--
> include/drm/drm_bridge.h | 5 +++++
> 2 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c
> index 3da5b8bf8259..320c297008aa 100644
> --- a/drivers/gpu/drm/display/drm_bridge_connector.c
> +++ b/drivers/gpu/drm/display/drm_bridge_connector.c
> @@ -397,11 +397,11 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
> bridge_connector->encoder = encoder;
>
> /*
> - * TODO: Handle doublescan_allowed, stereo_allowed and
> - * ycbcr_420_allowed.
> + * TODO: Handle doublescan_allowed and stereo_allowed.
> */
> connector = &bridge_connector->base;
> connector->interlace_allowed = true;
> + connector->ycbcr_420_allowed = true;
>
> /*
> * Initialise connector status handling. First locate the furthest
> @@ -414,6 +414,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm,
> drm_for_each_bridge_in_chain(encoder, bridge) {
> if (!bridge->interlace_allowed)
> connector->interlace_allowed = false;
> + if (!bridge->ycbcr_420_allowed)
> + connector->ycbcr_420_allowed = false;
>
> if (bridge->ops & DRM_BRIDGE_OP_EDID)
> bridge_connector->bridge_edid = bridge;
> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> index 75019d16be64..e8d735b7f6a4 100644
> --- a/include/drm/drm_bridge.h
> +++ b/include/drm/drm_bridge.h
> @@ -802,6 +802,11 @@ struct drm_bridge {
> * modes.
> */
> bool interlace_allowed;
> + /**
> + * @ycbcr_420_allowed: Indicate that the bridge can handle YCbCr 420
> + * output.
> + */
> + bool ycbcr_420_allowed;
> /**
> * @pre_enable_prev_first: The bridge requires that the prev
> * bridge @pre_enable function is called before its @pre_enable,
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
2024-10-18 21:49 ` [PATCH 2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump Dmitry Baryshkov
@ 2024-10-21 9:56 ` Neil Armstrong
0 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 9:56 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> Although the interlace_allowed and ycbcr_420_allowed flags are a part of
> the struct drm_connector rather than struct drm_connector_state, still
> include them into state dump in order to ease debugging of the setup
> issues.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/drm_atomic.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index 0fc99da93afe..9ea2611770f4 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -1132,6 +1132,8 @@ static void drm_atomic_connector_print_state(struct drm_printer *p,
> drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector->name);
> drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : "(null)");
> drm_printf(p, "\tself_refresh_aware=%d\n", state->self_refresh_aware);
> + drm_printf(p, "\tinterlace_allowed=%d\n", connector->interlace_allowed);
> + drm_printf(p, "\tycbcr_420_allowed=%d\n", connector->ycbcr_420_allowed);
> drm_printf(p, "\tmax_requested_bpc=%d\n", state->max_requested_bpc);
> drm_printf(p, "\tcolorspace=%s\n", drm_get_colorspace_name(state->colorspace));
>
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
2024-10-18 21:49 ` [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge Dmitry Baryshkov
@ 2024-10-21 9:57 ` Neil Armstrong
2024-10-21 9:57 ` Neil Armstrong
2024-10-21 18:55 ` Abhinav Kumar
2 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 9:57 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> Instead of forcing the ycbcr_420_allowed flag to be set on the created
> drm_connector, set it on the drm_bridge instance and allow
> drm_bridge_connecgtor to propagate it to the drm_connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/dp/dp_display.c | 4 ++--
> drivers/gpu/drm/msm/dp/dp_drm.c | 10 ++++------
> drivers/gpu/drm/msm/dp/dp_drm.h | 7 ++++---
> 3 files changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
> index e1228fb093ee..0ddd8abca499 100644
> --- a/drivers/gpu/drm/msm/dp/dp_display.c
> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
> @@ -1467,14 +1467,14 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
>
> dp_priv = container_of(dp_display, struct dp_display_private, dp_display);
>
> - ret = dp_bridge_init(dp_display, dev, encoder);
> + ret = dp_bridge_init(dp_display, dev, encoder, yuv_supported);
> if (ret) {
> DRM_DEV_ERROR(dev->dev,
> "failed to create dp bridge: %d\n", ret);
> return ret;
> }
>
> - dp_display->connector = dp_drm_connector_init(dp_display, encoder, yuv_supported);
> + dp_display->connector = dp_drm_connector_init(dp_display, encoder);
> if (IS_ERR(dp_display->connector)) {
> ret = PTR_ERR(dp_display->connector);
> DRM_DEV_ERROR(dev->dev,
> diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c
> index 1b9be5bd97f1..7eb1621f9e7f 100644
> --- a/drivers/gpu/drm/msm/dp/dp_drm.c
> +++ b/drivers/gpu/drm/msm/dp/dp_drm.c
> @@ -289,7 +289,7 @@ static const struct drm_bridge_funcs edp_bridge_ops = {
> };
>
> int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> - struct drm_encoder *encoder)
> + struct drm_encoder *encoder, bool yuv_supported)
> {
> int rc;
> struct msm_dp_bridge *dp_bridge;
> @@ -304,6 +304,7 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> bridge = &dp_bridge->bridge;
> bridge->funcs = dp_display->is_edp ? &edp_bridge_ops : &dp_bridge_ops;
> bridge->type = dp_display->connector_type;
> + bridge->ycbcr_420_allowed = yuv_supported;
>
> /*
> * Many ops only make sense for DP. Why?
> @@ -351,8 +352,8 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> }
>
> /* connector initialization */
> -struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
> - bool yuv_supported)
> +struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
> + struct drm_encoder *encoder)
> {
> struct drm_connector *connector = NULL;
>
> @@ -363,9 +364,6 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct dr
> if (!dp_display->is_edp)
> drm_connector_attach_dp_subconnector_property(connector);
>
> - if (yuv_supported)
> - connector->ycbcr_420_allowed = true;
> -
> drm_connector_attach_encoder(connector, encoder);
>
> return connector;
> diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_drm.h
> index 45e57ac25a4d..ae632fcc407c 100644
> --- a/drivers/gpu/drm/msm/dp/dp_drm.h
> +++ b/drivers/gpu/drm/msm/dp/dp_drm.h
> @@ -19,10 +19,11 @@ struct msm_dp_bridge {
>
> #define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge)
>
> -struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
> - bool yuv_supported);
> +struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
> + struct drm_encoder *encoder);
> int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> - struct drm_encoder *encoder);
> + struct drm_encoder *encoder,
> + bool yuv_supported);
>
> void dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
> struct drm_bridge_state *old_bridge_state);
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
2024-10-18 21:49 ` [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge Dmitry Baryshkov
2024-10-21 9:57 ` Neil Armstrong
@ 2024-10-21 9:57 ` Neil Armstrong
2024-10-21 18:55 ` Abhinav Kumar
2 siblings, 0 replies; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 9:57 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> Instead of forcing the ycbcr_420_allowed flag to be set on the created
> drm_connector, set it on the drm_bridge instance and allow
> drm_bridge_connecgtor to propagate it to the drm_connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/dp/dp_display.c | 4 ++--
> drivers/gpu/drm/msm/dp/dp_drm.c | 10 ++++------
> drivers/gpu/drm/msm/dp/dp_drm.h | 7 ++++---
> 3 files changed, 10 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
> index e1228fb093ee..0ddd8abca499 100644
> --- a/drivers/gpu/drm/msm/dp/dp_display.c
> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
> @@ -1467,14 +1467,14 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
>
> dp_priv = container_of(dp_display, struct dp_display_private, dp_display);
>
> - ret = dp_bridge_init(dp_display, dev, encoder);
> + ret = dp_bridge_init(dp_display, dev, encoder, yuv_supported);
> if (ret) {
> DRM_DEV_ERROR(dev->dev,
> "failed to create dp bridge: %d\n", ret);
> return ret;
> }
>
> - dp_display->connector = dp_drm_connector_init(dp_display, encoder, yuv_supported);
> + dp_display->connector = dp_drm_connector_init(dp_display, encoder);
> if (IS_ERR(dp_display->connector)) {
> ret = PTR_ERR(dp_display->connector);
> DRM_DEV_ERROR(dev->dev,
> diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c
> index 1b9be5bd97f1..7eb1621f9e7f 100644
> --- a/drivers/gpu/drm/msm/dp/dp_drm.c
> +++ b/drivers/gpu/drm/msm/dp/dp_drm.c
> @@ -289,7 +289,7 @@ static const struct drm_bridge_funcs edp_bridge_ops = {
> };
>
> int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> - struct drm_encoder *encoder)
> + struct drm_encoder *encoder, bool yuv_supported)
> {
> int rc;
> struct msm_dp_bridge *dp_bridge;
> @@ -304,6 +304,7 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> bridge = &dp_bridge->bridge;
> bridge->funcs = dp_display->is_edp ? &edp_bridge_ops : &dp_bridge_ops;
> bridge->type = dp_display->connector_type;
> + bridge->ycbcr_420_allowed = yuv_supported;
>
> /*
> * Many ops only make sense for DP. Why?
> @@ -351,8 +352,8 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> }
>
> /* connector initialization */
> -struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
> - bool yuv_supported)
> +struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
> + struct drm_encoder *encoder)
> {
> struct drm_connector *connector = NULL;
>
> @@ -363,9 +364,6 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct dr
> if (!dp_display->is_edp)
> drm_connector_attach_dp_subconnector_property(connector);
>
> - if (yuv_supported)
> - connector->ycbcr_420_allowed = true;
> -
> drm_connector_attach_encoder(connector, encoder);
>
> return connector;
> diff --git a/drivers/gpu/drm/msm/dp/dp_drm.h b/drivers/gpu/drm/msm/dp/dp_drm.h
> index 45e57ac25a4d..ae632fcc407c 100644
> --- a/drivers/gpu/drm/msm/dp/dp_drm.h
> +++ b/drivers/gpu/drm/msm/dp/dp_drm.h
> @@ -19,10 +19,11 @@ struct msm_dp_bridge {
>
> #define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge)
>
> -struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
> - bool yuv_supported);
> +struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display,
> + struct drm_encoder *encoder);
> int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
> - struct drm_encoder *encoder);
> + struct drm_encoder *encoder,
> + bool yuv_supported);
>
> void dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,
> struct drm_bridge_state *old_bridge_state);
>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
` (6 preceding siblings ...)
2024-10-21 7:17 ` [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Maxime Ripard
@ 2024-10-21 12:32 ` Neil Armstrong
2024-10-21 18:22 ` Dmitry Baryshkov
2024-10-24 19:54 ` Dmitry Baryshkov
8 siblings, 1 reply; 22+ messages in thread
From: Neil Armstrong @ 2024-10-21 12:32 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
Alexander Stein
Hi,
On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> One of the features that drm_bridge_connector can't handle currently is
> setting of the ycbcr_420_allowed flag on the connector. Add the flag to
> the drm_bridge struct and propagate it to the drm_connector as AND of
> all flags in the bridge chain.
>
> As an example of the conversion, enable the flag on the DW HDMI bridge,
> MSM DP bridge, display connector drivers (for DisplayPort and HDMI
> outputs) and AUX bridges.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> Dmitry Baryshkov (6):
> drm/display: bridge_connector: handle ycbcr_420_allowed
> drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
> drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
> drm/bridge: aux: allow interlaced and YCbCr 420 output
> drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
How do you plan to merge this serie ?
> drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag
>
> drivers/gpu/drm/bridge/aux-bridge.c | 4 ++++
> drivers/gpu/drm/bridge/aux-hpd-bridge.c | 4 ++++
> drivers/gpu/drm/bridge/display-connector.c | 4 ++++
> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 3 +++
> drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++--
> drivers/gpu/drm/drm_atomic.c | 2 ++
> drivers/gpu/drm/msm/dp/dp_display.c | 4 ++--
> drivers/gpu/drm/msm/dp/dp_drm.c | 10 ++++------
> drivers/gpu/drm/msm/dp/dp_drm.h | 7 ++++---
> include/drm/drm_bridge.h | 5 +++++
> 10 files changed, 36 insertions(+), 13 deletions(-)
> ---
> base-commit: 7f796de9da37b78e05edde94ebc7e3f9ee53b3b4
> change-id: 20241018-bridge-yuv420-aab94d4575de
>
> Best regards,
Neil
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support
2024-10-21 12:32 ` Neil Armstrong
@ 2024-10-21 18:22 ` Dmitry Baryshkov
2024-10-22 12:15 ` neil.armstrong
0 siblings, 1 reply; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-21 18:22 UTC (permalink / raw)
To: neil.armstrong
Cc: Andrzej Hajda, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten, dri-devel, linux-kernel,
linux-arm-msm, freedreno, Alexander Stein
On Mon, 21 Oct 2024 at 15:32, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>
> Hi,
>
> On 18/10/2024 23:49, Dmitry Baryshkov wrote:
> > One of the features that drm_bridge_connector can't handle currently is
> > setting of the ycbcr_420_allowed flag on the connector. Add the flag to
> > the drm_bridge struct and propagate it to the drm_connector as AND of
> > all flags in the bridge chain.
> >
> > As an example of the conversion, enable the flag on the DW HDMI bridge,
> > MSM DP bridge, display connector drivers (for DisplayPort and HDMI
> > outputs) and AUX bridges.
> >
> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> > ---
> > Dmitry Baryshkov (6):
> > drm/display: bridge_connector: handle ycbcr_420_allowed
> > drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
> > drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
> > drm/bridge: aux: allow interlaced and YCbCr 420 output
> > drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
>
> How do you plan to merge this serie ?
Once Abhinav ack's the msm/dp change, I'd like to land it through
drm-misc. I think it's the most logical way to go.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
2024-10-18 21:49 ` [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge Dmitry Baryshkov
2024-10-21 9:57 ` Neil Armstrong
2024-10-21 9:57 ` Neil Armstrong
@ 2024-10-21 18:55 ` Abhinav Kumar
2 siblings, 0 replies; 22+ messages in thread
From: Abhinav Kumar @ 2024-10-21 18:55 UTC (permalink / raw)
To: Dmitry Baryshkov, Andrzej Hajda, Neil Armstrong, Robert Foss,
Laurent Pinchart, Jonas Karlman, Jernej Skrabec,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie,
Simona Vetter, Rob Clark, Sean Paul, Marijn Suijten
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno
On 10/18/2024 2:49 PM, Dmitry Baryshkov wrote:
> Instead of forcing the ycbcr_420_allowed flag to be set on the created
> drm_connector, set it on the drm_bridge instance and allow
> drm_bridge_connecgtor to propagate it to the drm_connector.
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> ---
> drivers/gpu/drm/msm/dp/dp_display.c | 4 ++--
> drivers/gpu/drm/msm/dp/dp_drm.c | 10 ++++------
> drivers/gpu/drm/msm/dp/dp_drm.h | 7 ++++---
> 3 files changed, 10 insertions(+), 11 deletions(-)
>
For MSM part,
Acked-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support
2024-10-21 18:22 ` Dmitry Baryshkov
@ 2024-10-22 12:15 ` neil.armstrong
0 siblings, 0 replies; 22+ messages in thread
From: neil.armstrong @ 2024-10-22 12:15 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Andrzej Hajda, Robert Foss, Laurent Pinchart, Jonas Karlman,
Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten, dri-devel, linux-kernel,
linux-arm-msm, freedreno, Alexander Stein
On 21/10/2024 20:22, Dmitry Baryshkov wrote:
> On Mon, 21 Oct 2024 at 15:32, Neil Armstrong <neil.armstrong@linaro.org> wrote:
>>
>> Hi,
>>
>> On 18/10/2024 23:49, Dmitry Baryshkov wrote:
>>> One of the features that drm_bridge_connector can't handle currently is
>>> setting of the ycbcr_420_allowed flag on the connector. Add the flag to
>>> the drm_bridge struct and propagate it to the drm_connector as AND of
>>> all flags in the bridge chain.
>>>
>>> As an example of the conversion, enable the flag on the DW HDMI bridge,
>>> MSM DP bridge, display connector drivers (for DisplayPort and HDMI
>>> outputs) and AUX bridges.
>>>
>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
>>> ---
>>> Dmitry Baryshkov (6):
>>> drm/display: bridge_connector: handle ycbcr_420_allowed
>>> drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
>>> drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
>>> drm/bridge: aux: allow interlaced and YCbCr 420 output
>>> drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
>>
>> How do you plan to merge this serie ?
>
> Once Abhinav ack's the msm/dp change, I'd like to land it through
> drm-misc. I think it's the most logical way to go.
Yup, Abhinav acked it, LGTM
Neil
>
>
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
` (7 preceding siblings ...)
2024-10-21 12:32 ` Neil Armstrong
@ 2024-10-24 19:54 ` Dmitry Baryshkov
8 siblings, 0 replies; 22+ messages in thread
From: Dmitry Baryshkov @ 2024-10-24 19:54 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, Rob Clark,
Abhinav Kumar, Sean Paul, Marijn Suijten, Dmitry Baryshkov
Cc: dri-devel, linux-kernel, linux-arm-msm, freedreno,
Alexander Stein
On Sat, 19 Oct 2024 00:49:11 +0300, Dmitry Baryshkov wrote:
> One of the features that drm_bridge_connector can't handle currently is
> setting of the ycbcr_420_allowed flag on the connector. Add the flag to
> the drm_bridge struct and propagate it to the drm_connector as AND of
> all flags in the bridge chain.
>
> As an example of the conversion, enable the flag on the DW HDMI bridge,
> MSM DP bridge, display connector drivers (for DisplayPort and HDMI
> outputs) and AUX bridges.
>
> [...]
Applied to drm-misc-next, thanks!
[1/6] drm/display: bridge_connector: handle ycbcr_420_allowed
commit: 3ced1c68751299c0cdf6a1ceeafdbe77db7d4956
[2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump
commit: 58e6d652d138ef163d0b6b4d19f0fc9d4e8519fa
[3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP
commit: d5cd8280c52bad44d5943fa7501bf9f20718d432
[4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output
commit: c44a0faf5397134b3100c00cc8a8d72528bc422a
[5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge
commit: 785324db2d7a44e866161b6309fbda9a2178d455
[6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag
commit: 8a8fed657d0427f6765a48c93152a8d86cfe613c
Best regards,
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2024-10-24 19:54 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-18 21:49 [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Dmitry Baryshkov
2024-10-18 21:49 ` [PATCH 1/6] drm/display: bridge_connector: handle ycbcr_420_allowed Dmitry Baryshkov
2024-10-21 9:55 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 2/6] drm/atomic: add interlaced and ycbcr_420 flags to connector's state dump Dmitry Baryshkov
2024-10-21 9:56 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 3/6] drm/bridge: display-connector: allow YCbCr 420 for HDMI and DP Dmitry Baryshkov
2024-10-21 7:29 ` Neil Armstrong
2024-10-21 9:06 ` Dmitry Baryshkov
2024-10-21 9:54 ` neil.armstrong
2024-10-18 21:49 ` [PATCH 4/6] drm/bridge: aux: allow interlaced and YCbCr 420 output Dmitry Baryshkov
2024-10-21 9:54 ` Neil Armstrong
2024-10-18 21:49 ` [PATCH 5/6] drm/msm/dp: migrate the ycbcr_420_allowed to drm_bridge Dmitry Baryshkov
2024-10-21 9:57 ` Neil Armstrong
2024-10-21 9:57 ` Neil Armstrong
2024-10-21 18:55 ` Abhinav Kumar
2024-10-18 21:49 ` [PATCH 6/6] drm/bridge: dw-hdmi: set bridge's ycbcr_420_allowed flag Dmitry Baryshkov
2024-10-21 7:30 ` Neil Armstrong
2024-10-21 7:17 ` [PATCH 0/6] drm/bridge: add ycbcr_420_allowed support Maxime Ripard
2024-10-21 12:32 ` Neil Armstrong
2024-10-21 18:22 ` Dmitry Baryshkov
2024-10-22 12:15 ` neil.armstrong
2024-10-24 19:54 ` Dmitry Baryshkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox