Received: by 2002:a05:6a10:6006:0:0:0:0 with SMTP id w6csp193237pxa; Wed, 26 Aug 2020 22:33:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyov8hssrwgFnvVOxztmRgQAY8Nz7IFDpv51FrpQMq55rGrdqA4mDqnJaki+gr7+JMCO9Yy X-Received: by 2002:a17:906:f84b:: with SMTP id ks11mr14837147ejb.264.1598506400602; Wed, 26 Aug 2020 22:33:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598506400; cv=none; d=google.com; s=arc-20160816; b=nybI6ZLoWFFxlkbHvST0acpcxW1CqfOCi+fZezB/oo33hfJ3avxaRNdF/o78Xu0XpK cyPDHLOlBxLjFbYtpydbnQtrQhbsWj3ypF+rjGLn2k5EFiSoK6pZeQNqQWrnkmqylaYd 2K+CNeK3eKtnGUJuLrh8irMcW30drAxs0rNESZrtT/qjXDWxJwkunbW+Ue/nKT3KjVf8 1/m9Wxt2EemtBUNOZLQ02CYIxnfymiVBXTEievPqXtqSW76x3t4F5mTqfdyYoVeqpEaD Mjuy83nNvg5d9r8jOQmCu58Lef998dY766nSXDigpQnadWC4xTSs2lHjpmHatXw5+C4k 6V8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=bf2rqF6BAK5D4hPugV7d7delD8442g8W9XT02V7+aCE=; b=BpHIeHsWuBYx95JP9EomPyV6MatCKQ03aFkd8wG/Gzug35RsOXIfg8+EgB5Dhl5tim ZavF27iRnnZFUmpEM9GT/ESqjp73Ayu8mS+pE8XrptBYnVrjbdd7qpLcKQ3dYnE0SlVu xQCYzPVJu/0oEzS5Gl7ubgp6rAAa+g5Uzo4Ijesa07SIkFuUTI3zswyBiHE7UYBd38Y9 p3yOrgcuTNEsG8rBZBatE5GLIq7i32PcK6oWqQFuEzIYBwkFhbV6FP/+zuAFXf1Q5lbO VM8Q6y+ZhJ8JaGfktf5kmVscbKCtyfy/USdjMZgoDSkY0NhbBd8pYeJsFX6ZnnRJiot7 V7Gg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p7si838414edq.72.2020.08.26.22.32.55; Wed, 26 Aug 2020 22:33:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=canonical.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726123AbgH0FbB (ORCPT + 99 others); Thu, 27 Aug 2020 01:31:01 -0400 Received: from youngberry.canonical.com ([91.189.89.112]:37744 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725909AbgH0FbA (ORCPT ); Thu, 27 Aug 2020 01:31:00 -0400 Received: from mail-pf1-f200.google.com ([209.85.210.200]) by youngberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1kBAUz-0004Xq-NR for linux-kernel@vger.kernel.org; Thu, 27 Aug 2020 05:30:57 +0000 Received: by mail-pf1-f200.google.com with SMTP id d3so3237292pfh.17 for ; Wed, 26 Aug 2020 22:30:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=bf2rqF6BAK5D4hPugV7d7delD8442g8W9XT02V7+aCE=; b=PuYnjnBGxN31Y7RHLxJ00wEa0a8g+wYqQ3s8BQXE6Zc7q5DrWnbxFuRv0OkMd3XHOb My2LWb/5lxnlD20DQNgBT3uoLJQQUfNLahGlr5IbCY87tYog8r73ZEzG1Ne+8t1m/16Z vntkKqSMVTdcIPTB4nnzNuS/UM3sJ+S5zWAV7LUbfEt9f+avPH0jK2e8zcaKaaCTw7yo phW7JZmEfOa8TLjQ8UAUMfa0JCmH1FRrsY6RYzV1I0f0vWeWWWhTPOlUf14J1eBrJGOa 3brRT9a3VjrgfnqU/kV7LBNOnVbG68sDeak8e6lX4PQSPTDtreX5erCgn5lTkFBqS1Ff uuBQ== X-Gm-Message-State: AOAM53027v6opbEzEEskUNEISTLZFFL8UopVMttyBNNG6JUauPFHS9de mZTo7CRFmh1zhNVY3WgriHqQrRUQe3sLSaNcwQrJn3fjsBvISWo6X+D3GL3wxRxRXgVj3D1dOwT JdVjLbeZnQ+5YkB73f+kL786IvXmrhk5LjnS+EOPTGw== X-Received: by 2002:a63:af47:: with SMTP id s7mr13687768pgo.335.1598506256182; Wed, 26 Aug 2020 22:30:56 -0700 (PDT) X-Received: by 2002:a63:af47:: with SMTP id s7mr13687753pgo.335.1598506255857; Wed, 26 Aug 2020 22:30:55 -0700 (PDT) Received: from canonical.com (61-220-137-37.HINET-IP.hinet.net. [61.220.137.37]) by smtp.gmail.com with ESMTPSA id n68sm1000195pfn.145.2020.08.26.22.30.55 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 26 Aug 2020 22:30:55 -0700 (PDT) From: Koba Ko To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: anthony.wong@canonical.com Subject: [PATCH] drm/dp: For MST hub, Get max_link_rate&max_lane from extended rx capability field if EXTENDED_RECEIVER_CAPABILITY_FILED_PRESENT is set. Date: Thu, 27 Aug 2020 13:30:53 +0800 Message-Id: <20200827053053.11271-1-koba.ko@canonical.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- drivers/gpu/drm/drm_dp_mst_topology.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 67dd72ea200e..3b84c6801281 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -3497,6 +3497,8 @@ static int drm_dp_get_vc_payload_bw(u8 dp_link_bw, u8 dp_link_count) int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool mst_state) { int ret = 0; + u8 dpcd_ext = 0; + unsigned int dpcd_offset = 0; struct drm_dp_mst_branch *mstb = NULL; mutex_lock(&mgr->payload_lock); @@ -3510,9 +3512,15 @@ int drm_dp_mst_topology_mgr_set_mst(struct drm_dp_mst_topology_mgr *mgr, bool ms struct drm_dp_payload reset_pay; WARN_ON(mgr->mst_primary); + drm_dp_dpcd_read(mgr->aux, + DP_TRAINING_AUX_RD_INTERVAL, + &dpcd_ext, sizeof(dpcd_ext)); + + dpcd_offset = + ((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, DP_DPCD_REV, mgr->dpcd, DP_RECEIVER_CAP_SIZE); + ret = drm_dp_dpcd_read(mgr->aux, dpcd_offset, mgr->dpcd, DP_RECEIVER_CAP_SIZE); if (ret != DP_RECEIVER_CAP_SIZE) { DRM_DEBUG_KMS("failed to read DPCD\n"); goto out_unlock; -- 2.25.1