2020-09-10 06:41:23

by Koba Ko

[permalink] [raw]
Subject: [PATCH] V2: Currently, DRM get the capability of the mst hub only from DP_DPCD_REV and get the slower speed even the mst hub can run in the faster speed.

As per DP-1.3, First check DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT.
If DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT is 1, read the DP_DP13_DPCD_REV to
get the faster capability.
If DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT is 0, read DP_DPCD_REV.

Signed-off-by: Koba Ko <[email protected]>
---
ChangeLog:
1. use drm_dp_read_dpcd_caps instead.
---
drivers/gpu/drm/drm_dp_mst_topology.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index 7753c718ddf9..293f71d0ae90 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -3694,8 +3694,8 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms
((dpcd_ext & DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT) ? DP_DP13_DPCD_REV : DP_DPCD_REV);

/* get dpcd info */
- ret = drm_dp_dpcd_read(mgr->aux, dpcd_offset, mgr->dpcd, DP_RECEIVER_CAP_SIZE);
- if (ret != DP_RECEIVER_CAP_SIZE) {
+ ret = drm_dp_read_dpcd_caps(mgr->aux, mgr->dpcd);
+ if (ret < 0) {
DRM_DEBUG_KMS("failed to read DPCD\n");
goto out_unlock;
}
--
2.25.1


2020-09-10 17:50:42

by Lyude Paul

[permalink] [raw]
Subject: Re: [PATCH] V2: Currently, DRM get the capability of the mst hub only from DP_DPCD_REV and get the slower speed even the mst hub can run in the faster speed.

The commit message should be shorter and follow the format other commits for
drm usually do, in this case something like:

drm/dp_mst: Retrieve extended DPCD caps for topology manager

On Thu, 2020-09-10 at 14:36 +0800, Koba Ko wrote:
> As per DP-1.3, First check DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT.
> If DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT is 1, read the DP_DP13_DPCD_REV to
> get the faster capability.
> If DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT is 0, read DP_DPCD_REV.
>
> Signed-off-by: Koba Ko <[email protected]>
> ---
> ChangeLog:
> 1. use drm_dp_read_dpcd_caps instead.
> ---
> drivers/gpu/drm/drm_dp_mst_topology.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c
> b/drivers/gpu/drm/drm_dp_mst_topology.c
> index 7753c718ddf9..293f71d0ae90 100644
> --- a/drivers/gpu/drm/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/drm_dp_mst_topology.c
> @@ -3694,8 +3694,8 @@ int drm_dp_mst_topology_mgr_set_mst(struct
> drm_dp_mst_topology_mgr *mgr, bool ms
> ((dpcd_ext & DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT)
> ? DP_DP13_DPCD_REV : DP_DPCD_REV);
>
> /* get dpcd info */
> - ret = drm_dp_dpcd_read(mgr->aux, dpcd_offset, mgr->dpcd,
> DP_RECEIVER_CAP_SIZE);
> - if (ret != DP_RECEIVER_CAP_SIZE) {
> + ret = drm_dp_read_dpcd_caps(mgr->aux, mgr->dpcd);
> + if (ret < 0) {
> DRM_DEBUG_KMS("failed to read DPCD\n");

Let's use drm_dbg_kms() here, and let's also print the return code when this
fails.

With those things fixed:

Reviewed-by: Lyude Paul <[email protected]>

> goto out_unlock;
> }
--
Cheers,
Lyude Paul (she/her)
Software Engineer at Red Hat