[PATCH 13/14] drm/msm/dp: move next_bridge handling to dp_display
Kuogee Hsieh
quic_khsieh at quicinc.com
Fri Jan 19 21:14:18 UTC 2024
Dmitry,
I am testing this patch serial with msm-next branch.
This patch cause system crash during booting up for me.
Is this patch work for you?
On 12/29/2023 2:56 PM, Dmitry Baryshkov wrote:
> Remove two levels of indirection and fetch next bridge directly in
> dp_display_probe_tail().
>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
> ---
> drivers/gpu/drm/msm/dp/dp_display.c | 42 +++++++++--------------------
> drivers/gpu/drm/msm/dp/dp_parser.c | 14 ----------
> drivers/gpu/drm/msm/dp/dp_parser.h | 14 ----------
> 3 files changed, 13 insertions(+), 57 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
> index 4de0857c31ce..923df47efcc9 100644
> --- a/drivers/gpu/drm/msm/dp/dp_display.c
> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
> @@ -1195,16 +1195,24 @@ static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pde
> return NULL;
> }
>
> -static int dp_display_get_next_bridge(struct msm_dp *dp);
> -
> static int dp_display_probe_tail(struct device *dev)
> {
> struct msm_dp *dp = dev_get_drvdata(dev);
> int ret;
>
> - ret = dp_display_get_next_bridge(dp);
> - if (ret)
> - return ret;
> + /*
> + * External bridges are mandatory for eDP interfaces: one has to
> + * provide at least an eDP panel (which gets wrapped into panel-bridge).
> + *
> + * For DisplayPort interfaces external bridges are optional, so
> + * silently ignore an error if one is not present (-ENODEV).
> + */
> + dp->next_bridge = devm_drm_of_get_bridge(&dp->pdev->dev, dp->pdev->dev.of_node, 1, 0);
> + if (IS_ERR(dp->next_bridge)) {
> + ret = PTR_ERR(dp->next_bridge);
> + if (dp->is_edp || ret != -ENODEV)
> + return ret;
> + }
>
> ret = component_add(dev, &dp_display_comp_ops);
> if (ret)
> @@ -1397,30 +1405,6 @@ void dp_display_debugfs_init(struct msm_dp *dp_display, struct dentry *root, boo
> }
> }
>
> -static int dp_display_get_next_bridge(struct msm_dp *dp)
> -{
> - int rc;
> - struct dp_display_private *dp_priv;
> -
> - dp_priv = container_of(dp, struct dp_display_private, dp_display);
> -
> - /*
> - * External bridges are mandatory for eDP interfaces: one has to
> - * provide at least an eDP panel (which gets wrapped into panel-bridge).
> - *
> - * For DisplayPort interfaces external bridges are optional, so
> - * silently ignore an error if one is not present (-ENODEV).
> - */
> - rc = devm_dp_parser_find_next_bridge(&dp->pdev->dev, dp_priv->parser);
> - if (!dp->is_edp && rc == -ENODEV)
> - return 0;
> -
> - if (!rc)
> - dp->next_bridge = dp_priv->parser->next_bridge;
> -
> - return rc;
> -}
> -
> int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
> struct drm_encoder *encoder)
> {
> diff --git a/drivers/gpu/drm/msm/dp/dp_parser.c b/drivers/gpu/drm/msm/dp/dp_parser.c
> index aa135d5cedbd..f95ab3c5c72c 100644
> --- a/drivers/gpu/drm/msm/dp/dp_parser.c
> +++ b/drivers/gpu/drm/msm/dp/dp_parser.c
> @@ -24,20 +24,6 @@ static int dp_parser_ctrl_res(struct dp_parser *parser)
> return 0;
> }
>
> -int devm_dp_parser_find_next_bridge(struct device *dev, struct dp_parser *parser)
> -{
> - struct platform_device *pdev = parser->pdev;
> - struct drm_bridge *bridge;
> -
> - bridge = devm_drm_of_get_bridge(dev, pdev->dev.of_node, 1, 0);
> - if (IS_ERR(bridge))
> - return PTR_ERR(bridge);
> -
> - parser->next_bridge = bridge;
> -
> - return 0;
> -}
> -
> static int dp_parser_parse(struct dp_parser *parser)
> {
> int rc = 0;
> diff --git a/drivers/gpu/drm/msm/dp/dp_parser.h b/drivers/gpu/drm/msm/dp/dp_parser.h
> index bc56e0e8c446..2b39b1c394ae 100644
> --- a/drivers/gpu/drm/msm/dp/dp_parser.h
> +++ b/drivers/gpu/drm/msm/dp/dp_parser.h
> @@ -22,7 +22,6 @@
> struct dp_parser {
> struct platform_device *pdev;
> struct phy *phy;
> - struct drm_bridge *next_bridge;
> };
>
> /**
> @@ -38,17 +37,4 @@ struct dp_parser {
> */
> struct dp_parser *dp_parser_get(struct platform_device *pdev);
>
> -/**
> - * devm_dp_parser_find_next_bridge() - find an additional bridge to DP
> - *
> - * @dev: device to tie bridge lifetime to
> - * @parser: dp_parser data from client
> - *
> - * This function is used to find any additional bridge attached to
> - * the DP controller. The eDP interface requires a panel bridge.
> - *
> - * Return: 0 if able to get the bridge, otherwise negative errno for failure.
> - */
> -int devm_dp_parser_find_next_bridge(struct device *dev, struct dp_parser *parser);
> -
> #endif
More information about the dri-devel
mailing list