From: Jeykumar Sankaran <jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
To: Sean Paul <sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>
Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH v2] drm/msm/dpu: add display port support in DPU
Date: Tue, 04 Dec 2018 15:45:57 -0800 [thread overview]
Message-ID: <9a2605ebc04bae5d5923b447bf742516@codeaurora.org> (raw)
In-Reply-To: <20181203144735.GQ154160@art_vandelay>
On 2018-12-03 06:47, Sean Paul wrote:
> On Tue, Nov 27, 2018 at 02:28:30PM -0800, Jeykumar Sankaran wrote:
>> Add display port support in DPU by creating hooks
>> for DP encoder enumeration and encoder mode
>> initialization.
>>
>> This change is based on the SDM845 Display port
>> driver changes[1].
>>
>> changes in v2:
>> - rebase on [2] (Sean Paul)
>> - remove unwanted error checks and
>> switch cases (Jordan Crouse)
>>
>> [1] https://lwn.net/Articles/768265/
>> [2] https://lkml.org/lkml/2018/11/17/87
>>
>> Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
>> ---
>> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 8 ++---
>> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 47
> +++++++++++++++++++++++++----
>> 2 files changed, 45 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>> index d3f4501..1f6b4b1 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
>> @@ -2015,7 +2015,7 @@ static int dpu_encoder_setup_display(struct
> dpu_encoder_virt *dpu_enc,
>> {
>> int ret = 0;
>> int i = 0;
>> - enum dpu_intf_type intf_type;
>> + enum dpu_intf_type intf_type = INTF_NONE;
>
> dpu_intf_type seems unnecessary, you could just use the
> DRM_MODE_ENCODER_*
> value
> directly?
>
enum dpu_intf_type enumerates HW interface types the SOC has. Below
switch
case maps the DRM_MODE_ENCODER_* to HW dpu_intf_type it should reserve.
Note that DRM_MODE_ENCODER_* and dpu_intf_type are not mapped 1-to-1.
e.g. DRM_MODE_ENCODER_TMDS can be mapped to HDMI or DisplayPort.
Thanks,
Jeykumar S.
>> struct dpu_enc_phys_init_params phys_params;
>>
>> if (!dpu_enc || !dpu_kms) {
>> @@ -2038,9 +2038,9 @@ static int dpu_encoder_setup_display(struct
> dpu_encoder_virt *dpu_enc,
>> case DRM_MODE_ENCODER_DSI:
>> intf_type = INTF_DSI;
>> break;
>> - default:
>> - DPU_ERROR_ENC(dpu_enc, "unsupported display interface
> type\n");
>> - return -EINVAL;
>> + case DRM_MODE_ENCODER_TMDS:
>> + intf_type = INTF_DP;
>> + break;
>> }
>>
>> WARN_ON(disp_info->num_of_h_tiles < 1);
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
>> index 985c855..7d931ae 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
>> @@ -473,6 +473,32 @@ static void _dpu_kms_initialize_dsi(struct
> drm_device *dev,
>> }
>> }
>>
>> +static void _dpu_kms_initialize_displayport(struct drm_device *dev,
>> + struct msm_drm_private *priv,
>> + struct dpu_kms *dpu_kms)
>> +{
>> + struct drm_encoder *encoder = NULL;
>> + int rc;
>> +
>> + if (!priv->dp)
>> + return;
>> +
>> + encoder = dpu_encoder_init(dev, DRM_MODE_ENCODER_TMDS);
>> + if (IS_ERR(encoder)) {
>> + DPU_ERROR("encoder init failed for dsi display\n");
>> + return;
>> + }
>> +
>> + rc = msm_dp_modeset_init(priv->dp, dev, encoder);
>> + if (rc) {
>> + DPU_ERROR("modeset_init failed for DP, rc = %d\n", rc);
>> + drm_encoder_cleanup(encoder);
>> + return;
>> + }
>> +
>> + priv->encoders[priv->num_encoders++] = encoder;
>
> No need to keep track of drm resources at the driver level, the core
> will
> do
> this for you. So can you please add a patch preceding this one to
> remove
> the
> priv->encoders/crtc/planes/connectors arrays?
>
>> +}
>> +
>> /**
>> * _dpu_kms_setup_displays - create encoders, bridges and connectors
>> * for underlying displays
>> @@ -487,6 +513,8 @@ static void _dpu_kms_setup_displays(struct
> drm_device *dev,
>
> Why are these functions voids? Seems like there are plenty of places
> for
> them to
> fail :)
>
> Let's add a patch to the beginning of this series to properly handle
> failures in
> setup_displays and initialize_dsi
>
>> {
>> _dpu_kms_initialize_dsi(dev, priv, dpu_kms);
>>
>> + _dpu_kms_initialize_displayport(dev, priv, dpu_kms);
>> +
>> /**
>> * Extend this function to initialize other
>> * types of displays
>> @@ -723,13 +751,20 @@ static void _dpu_kms_set_encoder_mode(struct
> msm_kms *kms,
>> info.capabilities = cmd_mode ? MSM_DISPLAY_CAP_CMD_MODE :
>> MSM_DISPLAY_CAP_VID_MODE;
>>
>> - /* TODO: No support for DSI swap */
>> - for (i = 0; i < ARRAY_SIZE(priv->dsi); i++) {
>> - if (priv->dsi[i]) {
>> - info.h_tile_instance[info.num_of_h_tiles] = i;
>> - info.num_of_h_tiles++;
>> + switch (info.intf_type) {
>> + case DRM_MODE_ENCODER_DSI:
>> + /* TODO: No support for DSI swap */
>> + for (i = 0; i < ARRAY_SIZE(priv->dsi); i++) {
>> + if (priv->dsi[i]) {
>> + info.h_tile_instance[info.num_of_h_tiles]
> = i;
>> + info.num_of_h_tiles++;
>> + }
>> }
>> - }
>> + break;
>> + case DRM_MODE_ENCODER_TMDS:
>> + info.num_of_h_tiles = 1;
>> + break;
>> + };
>>
>> rc = dpu_encoder_setup(encoder->dev, encoder, &info);
>> if (rc)
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> Forum,
>> a Linux Foundation Collaborative Project
>>
>> _______________________________________________
>> Freedreno mailing list
>> Freedreno@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/freedreno
--
Jeykumar S
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
prev parent reply other threads:[~2018-12-04 23:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-27 22:28 [PATCH v2] drm/msm/dpu: add display port support in DPU Jeykumar Sankaran
[not found] ` <1543357710-3918-1-git-send-email-jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-12-01 7:35 ` kbuild test robot
2018-12-03 14:47 ` Sean Paul
2018-12-04 3:02 ` Jeykumar Sankaran
[not found] ` <3ee2493cf6b31c903add62e837364056-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-12-04 13:52 ` Sean Paul
2018-12-04 23:45 ` Jeykumar Sankaran [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9a2605ebc04bae5d5923b447bf742516@codeaurora.org \
--to=jsanka-sgv2jx0feol9jmxxk+q4oq@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org \
--cc=seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.