From patchwork Thu Aug 22 13:57:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Francis X-Patchwork-Id: 11109349 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 912D613B1 for ; Thu, 22 Aug 2019 13:57:55 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 79A2E22CE3 for ; Thu, 22 Aug 2019 13:57:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 79A2E22CE3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B32C36EB3F; Thu, 22 Aug 2019 13:57:52 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-eopbgr750089.outbound.protection.outlook.com [40.107.75.89]) by gabe.freedesktop.org (Postfix) with ESMTPS id CFD4E6EB40 for ; Thu, 22 Aug 2019 13:57:48 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HGnjEugw9Xcu2sPz7/b3ZT5Bcx+jrgeeRDg8pZ8DFUuIEbTDWnCfQee2snlGFMHw5rBXMdpkERN+pZS48+KxdrcA3L6HUziGlp8D3QypzXtaOZ1mBZB2wijof67eIs3Xc6bMtqxFOIM5O3HYogWkoJhJh1S5hPIm1JprFULP2H6ZZ1e187jaWRIpdkm8SQcsLab/8RPUZDFkSN/KDtKVY3JrKpQ3Rvkkr037VKEcvde6BZ8nxWRz2K94xeWM1hQHLbKEgTsatRNnu2GYeIuwLOdbi/J7jvkX2mbYGI9sLhBN46RUm2KT/+gjsF81Vj8BU7kraLLcYPJu68CF3MwG/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WD6PuSzOr8D1s3jt+KG3wrkteGxV5smKpWuuOkVbS7E=; b=S89zjrUkOrD7X1kFN2S2mePf46jTT0NJmn5846eBSIpHVYfCfz8SB+4GNAsO9To72GUoV82HQ/84jf3NXUn4qONhHgvsuE0Xhx77XaM9I5S1igWvBRpm39m5yUOsc6+AA5fuyL3EZgZL++MrBB3VLS2JFNhxWlhKHgv6JSX49OLYZYJlyesI4wkA82CfBmSly5Xjbr+bX+QFbUeDlcK5A9vGKdqpXwN+isiItKgAGOI2wTOtzPcFUONK9eGuaU4YvEHvOwbi+M2OPyOaP+feofCwjYSVmCSudnfVhtzqyTZUcZoJpaqrBTKDHpUVtCtdkIsf2AMUDGvRZPSP2bp5yQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=amd.com; dmarc=permerror action=none header.from=amd.com; dkim=none (message not signed); arc=none Received: from DM3PR12CA0085.namprd12.prod.outlook.com (2603:10b6:0:57::29) by CY4PR12MB1269.namprd12.prod.outlook.com (2603:10b6:903:40::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Thu, 22 Aug 2019 13:57:47 +0000 Received: from CO1NAM03FT023.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::205) by DM3PR12CA0085.outlook.office365.com (2603:10b6:0:57::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2199.15 via Frontend Transport; Thu, 22 Aug 2019 13:57:47 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT023.mail.protection.outlook.com (10.152.80.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2178.16 via Frontend Transport; Thu, 22 Aug 2019 13:57:46 +0000 Received: from localhost.localdomain (10.180.168.240) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Thu, 22 Aug 2019 08:57:44 -0500 From: David Francis To: Subject: [PATCH v4 1/5] drm/dp-mst: Add PBN calculation for DSC modes Date: Thu, 22 Aug 2019 09:57:37 -0400 Message-ID: <20190822135741.12923-2-David.Francis@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822135741.12923-1-David.Francis@amd.com> References: <20190822135741.12923-1-David.Francis@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(396003)(136003)(376002)(346002)(39860400002)(2980300002)(428003)(189003)(199004)(47776003)(2906002)(6666004)(6916009)(5660300002)(1076003)(186003)(53936002)(356004)(426003)(81156014)(81166006)(4326008)(16586007)(316002)(305945005)(36756003)(26005)(76176011)(126002)(478600001)(2351001)(2616005)(14444005)(476003)(336012)(48376002)(70206006)(50466002)(86362001)(11346002)(50226002)(70586007)(446003)(8936002)(51416003)(486006)(49486002)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR12MB1269; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3ca30a03-619c-4046-0e67-08d72708b630 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328); SRVR:CY4PR12MB1269; X-MS-TrafficTypeDiagnostic: CY4PR12MB1269: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 01371B902F X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: Mo+1/ItXL+A2kEAZpnLcSMHY85QQpFM28w1jLjT6YeIFaVRqrs52xbf899yVFCTGf9JbnLlDV/HdWEXlDxk1yaNOVWp4yJon++NjH/2DzhMpXG9OkR8JhbJ0MUJY8kvK1TcgN5S+M1lMuRsLHOfpRo8C7k6bwQaTO1tbP+Aa+krS7zPqva8XqjjsuSo46Z8+D0guxpfUgbN2AxVcqX+oiAGE4mt+GoN6h/GyKEkg/J342FpJ4F/LvmwaIQfdgqLFFqXv7btkXuLjhRMcT3D/GBGzJGRT8m1Hgp5VK/deihXWnGlD/xbr4xABcNBwtpXFxnQh9AEY3bVBclsdIFOYXJXrgPfNm74N5MQog3vEa1NNjFC30Vu8Q5x5ghEqFnASomgxDdGxxQKxBdPI/uob+Z7wfrrwRRSeJfc4Pd6UD3c= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2019 13:57:46.4057 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3ca30a03-619c-4046-0e67-08d72708b630 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1269 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WD6PuSzOr8D1s3jt+KG3wrkteGxV5smKpWuuOkVbS7E=; b=r+ifApXrnthDt5JEdbs/rr49rhDMRw0ljiY6iEloUMEAc+IAlhgd8ktIFJeZ1YLBazWH4Jykp2sGdw49sTuz6NolQRDW7DGY2Y/QhKnonLmnB4YzP6CglZxTm+4aF0sXqOEX3cEVed0mHngNp00SJDW54dzx9RMAz+JGqkd1/1A= X-Mailman-Original-Authentication-Results: spf=none (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; lists.freedesktop.org; dkim=none (message not signed) header.d=none;lists.freedesktop.org; dmarc=permerror action=none header.from=amd.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Francis Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" With DSC, bpp can be a multiple of 1/16, so drm_dp_calc_pbn_mode is insufficient. Add drm_dp_calc_pbn_mode_dsc, a function which is the same as drm_dp_calc_pbn_mode, but the bpp is in units of 1/16. Reviewed-by: Lyude Paul Signed-off-by: David Francis --- drivers/gpu/drm/drm_dp_mst_topology.c | 43 +++++++++++++++++++++++++++ include/drm/drm_dp_mst_helper.h | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 82add736e17d..8e2e731c35c5 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -3591,6 +3591,49 @@ static int test_calc_pbn_mode(void) return 0; } +/** + * drm_dp_calc_pbn_mode_dsc() - Calculate the PBN for a mode with DSC enabled. + * @clock: dot clock for the mode + * @dsc_bpp: dsc bits per pixel x16 (e.g. dsc_bpp = 136 is 8.5 bpp) + * + * This uses the formula in the spec to calculate the PBN value for a mode, + * given that the mode is using DSC + * Returns: + * PBN required for this mode + */ +int drm_dp_calc_pbn_mode_dsc(int clock, int dsc_bpp) +{ + u64 kbps; + s64 peak_kbps; + u32 numerator; + u32 denominator; + + kbps = clock * dsc_bpp; + + /* + * margin 5300ppm + 300ppm ~ 0.6% as per spec, factor is 1.006 + * The unit of 54/64Mbytes/sec is an arbitrary unit chosen based on + * common multiplier to render an integer PBN for all link rate/lane + * counts combinations + * calculate + * peak_kbps *= (1/16) bppx16 to bpp + * peak_kbps *= (1006/1000) + * peak_kbps *= (64/54) + * peak_kbps *= 8 convert to bytes + * + * Divide numerator and denominator by 16 to avoid overflow + */ + + numerator = 64 * 1006 / 16; + denominator = 54 * 8 * 1000 * 1000; + + kbps *= numerator; + peak_kbps = drm_fixp_from_fraction(kbps, denominator); + + return drm_fixp2int_ceil(peak_kbps); +} +EXPORT_SYMBOL(drm_dp_calc_pbn_mode_dsc); + /* we want to kick the TX after we've ack the up/down IRQs. */ static void drm_dp_mst_kick_tx(struct drm_dp_mst_topology_mgr *mgr) { diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h index 2ba6253ea6d3..ddb518f2157a 100644 --- a/include/drm/drm_dp_mst_helper.h +++ b/include/drm/drm_dp_mst_helper.h @@ -611,7 +611,7 @@ struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_ int drm_dp_calc_pbn_mode(int clock, int bpp); - +int drm_dp_calc_pbn_mode_dsc(int clock, int dsc_bpp); bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port, int pbn, int slots); From patchwork Thu Aug 22 13:57:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Francis X-Patchwork-Id: 11109347 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6744714DB for ; Thu, 22 Aug 2019 13:57:53 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4E86422CE3 for ; Thu, 22 Aug 2019 13:57:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4E86422CE3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C28CD6EB40; Thu, 22 Aug 2019 13:57:51 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM04-SN1-obe.outbound.protection.outlook.com (mail-eopbgr700080.outbound.protection.outlook.com [40.107.70.80]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4B0A96EB3F for ; Thu, 22 Aug 2019 13:57:50 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=It61KkfuBWzw6C7RKB6aE0in+rvKgRnY6JOtVNrkTX9N9U4ta2ZV3Q2C+KxKhbXkg2Nb4jQzgP7dKCghM2uVyLC/+DuS5JS0Apx5TkGFGEY3IDpnvkZantFRdKoYu2BSaSPITdIv3MLMloJ33ZfgJK325BRHtUg9k4WnWU2yWwbDxy4hmN29v0wUX5Sk2oTI3gxrbRKHpEfc6KfREBqLTc5aSZ1cVAeX/P975K4L8GEEWlldMACmD4RVuS3eVCmYsPZc8G18txQwCWKhf6wgnF2rUDuUAXqfsQN1rrozZpQa1wUek4fpyxc1iGzFYuLVW7KKeNGZ3vvYwkSyDglLgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BhnFxwuDTx5hpmT3OcJQP3Rt2TnQVf6HyR7XNSCJebg=; b=UQgFQI9v1CYTWFBP0V5eLvCmG5AuC6jJXpyAH3p5ziRcA3Ymyrln3p1gUzNL/7LDMokyWbKNnF4t7ayWRtHmyHet0XDcFRn+L3RET41frhsg88qYxj8m94yBKKdm7GebUMzQee+SSTxNE180X7Z5LiOKLicqMu2lhD/VJqPhtmoV2rs1liCUHxZZxo4HYBhh9DsEylU9/5dL97mShywP48146zFGWZ6FJ6oAg0Xour8D/9VFd1f40k5vWmHAzuxMDcZvvbA4VlbG9NHTart+9Dx8tzjHwonjrOZl8BCY29uWeEzCVa+qPpJlsKex0FB8oTTbgSmsjoLt0+eYI42ufg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=amd.com; dmarc=permerror action=none header.from=amd.com; dkim=none (message not signed); arc=none Received: from DM3PR12CA0085.namprd12.prod.outlook.com (2603:10b6:0:57::29) by BYAPR12MB2711.namprd12.prod.outlook.com (2603:10b6:a03:68::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.18; Thu, 22 Aug 2019 13:57:48 +0000 Received: from CO1NAM03FT023.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::205) by DM3PR12CA0085.outlook.office365.com (2603:10b6:0:57::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2199.15 via Frontend Transport; Thu, 22 Aug 2019 13:57:48 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT023.mail.protection.outlook.com (10.152.80.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2178.16 via Frontend Transport; Thu, 22 Aug 2019 13:57:47 +0000 Received: from localhost.localdomain (10.180.168.240) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Thu, 22 Aug 2019 08:57:45 -0500 From: David Francis To: Subject: [PATCH v4 2/5] drm/dp-mst: Parse FEC capability on MST ports Date: Thu, 22 Aug 2019 09:57:38 -0400 Message-ID: <20190822135741.12923-3-David.Francis@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822135741.12923-1-David.Francis@amd.com> References: <20190822135741.12923-1-David.Francis@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(346002)(396003)(136003)(39860400002)(376002)(2980300002)(428003)(189003)(199004)(8936002)(305945005)(4326008)(81166006)(81156014)(336012)(53936002)(86362001)(2351001)(8676002)(50226002)(426003)(126002)(1076003)(486006)(476003)(47776003)(5660300002)(478600001)(186003)(50466002)(316002)(2616005)(26005)(48376002)(49486002)(11346002)(76176011)(36756003)(6916009)(2906002)(6666004)(16586007)(356004)(70206006)(446003)(51416003)(70586007); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR12MB2711; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8ec2342e-612a-4790-0519-08d72708b6e5 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328); SRVR:BYAPR12MB2711; X-MS-TrafficTypeDiagnostic: BYAPR12MB2711: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4714; X-Forefront-PRVS: 01371B902F X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: YvX/LjAkgIJ+4FxCZrlnrfFbnV5dmn2IQqOF/oLFPjYDi5gpyqDEjETWWKZedDCcdzEImuJvEEr6gP8w2HFOqtRwy5HQ1NAeq54ZH33lXzaisHIbZggNegAsSdLt3P9GJ6+uDCb5GyLrjvudCtHxuz79NsRBfEaxbu68HWYwyda5FGIqAldARhtmpUUFII7SFMGxT+WkBD7Dy54jOavsl5+QL3NvWP+1aSumWFVsqbxQTbFPKa6hfyWfp+PMGvj0IeZkPSElCE9yu6PQfO1AoHJEYgotAlVN5dI/n//3UfAJrG0SRfuemPiv8eHfp0qkGv5bBMQAuuRxDoq5Tikx3I+IkCwnM4zL58AALkIHdln1CNneSfRvpU1AQHlOisISTI7LpLKC8LXqYH57oAsRy8y0L8ji/PQHBSiQuiIdsgM= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2019 13:57:47.5916 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8ec2342e-612a-4790-0519-08d72708b6e5 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB2711 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BhnFxwuDTx5hpmT3OcJQP3Rt2TnQVf6HyR7XNSCJebg=; b=S/rSVBm3GeIGpyEKOZtQyjpatAWKgjXT/7zaoJfrFj6g+eae96fvuez15q8lZMTkMuwhgmHCCJXC3v9GzmNBm64ByijTJzIuQr8CIRh2FXNbOvBbmbp6DIRRDHDWvHQUtnRO/NTr7DUc/A8x9OE1z38A4Z++Br0pBqJRTgG2nLI= X-Mailman-Original-Authentication-Results: spf=none (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; lists.freedesktop.org; dkim=none (message not signed) header.d=none;lists.freedesktop.org; dmarc=permerror action=none header.from=amd.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Francis Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" As of DP1.4, ENUM_PATH_RESOURCES returns a bit indicating if FEC can be supported up to that point in the MST network. The bit is the first byte of the ENUM_PATH_RESOURCES ack reply, bottom-most bit (refer to section 2.11.9.4 of DP standard, v1.4) That value is needed for FEC and DSC support Store it on drm_dp_mst_port Signed-off-by: David Francis Reviewed-by: Lyude Paul --- drivers/gpu/drm/drm_dp_mst_topology.c | 2 ++ include/drm/drm_dp_mst_helper.h | 3 +++ 2 files changed, 5 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 8e2e731c35c5..50a044718439 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -553,6 +553,7 @@ static bool drm_dp_sideband_parse_enum_path_resources_ack(struct drm_dp_sideband { int idx = 1; repmsg->u.path_resources.port_number = (raw->msg[idx] >> 4) & 0xf; + repmsg->u.path_resources.fec_capable = raw->msg[idx] & 0x1; idx++; if (idx > raw->curlen) goto fail_len; @@ -2183,6 +2184,7 @@ static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr, DRM_DEBUG_KMS("enum path resources %d: %d %d\n", txmsg->reply.u.path_resources.port_number, txmsg->reply.u.path_resources.full_payload_bw_number, txmsg->reply.u.path_resources.avail_payload_bw_number); port->available_pbn = txmsg->reply.u.path_resources.avail_payload_bw_number; + port->fec_capable = txmsg->reply.u.path_resources.fec_capable; } } diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h index ddb518f2157a..fa973773a4a7 100644 --- a/include/drm/drm_dp_mst_helper.h +++ b/include/drm/drm_dp_mst_helper.h @@ -108,6 +108,8 @@ struct drm_dp_mst_port { * audio-capable. */ bool has_audio; + + bool fec_capable; }; /** @@ -312,6 +314,7 @@ struct drm_dp_port_number_req { struct drm_dp_enum_path_resources_ack_reply { u8 port_number; + bool fec_capable; u16 full_payload_bw_number; u16 avail_payload_bw_number; }; From patchwork Thu Aug 22 13:57:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Francis X-Patchwork-Id: 11109351 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 433A113B1 for ; Thu, 22 Aug 2019 13:58:00 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2B44B22CE3 for ; Thu, 22 Aug 2019 13:58:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2B44B22CE3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2466F6EB41; Thu, 22 Aug 2019 13:57:59 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-eopbgr770053.outbound.protection.outlook.com [40.107.77.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8EEE06EB3F for ; Thu, 22 Aug 2019 13:57:51 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YeMF4QD1k1RpPSkE+quPksWiJ492QLaKBPjntktNvDNJbTRvaZxo0SsbgZpM5s5HOI0DhOh8+PG/T8EEcnBx55lGtjqesxO75l5pbxSOvwu0W6k0Pd34PumDVz4H9PUkSDwGcGtPieC+4cMD1GC+WQ6SvKIsasmxgAr2uKjrsH6X9npjQi0+UCPd1KSluuV2vgRa+3eCQNRVzyLNtcdl21zk7V7avaejbEy/xOP4Nlm1Rfjro4F9tEqWALhAm3hsFZRtGNu9iUWzV6YrDcvGNwLzk5O3b9zRrGBYy2MseP913vMiJFeuclewUFjUmfUtIEmPVH8efhJWEtc7EUMlig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6tghymll+DLkIrA+sT+JSr3VAT/xCTp3q8vQOIIaaWc=; b=Md/8xip3E+4WhOwiRaPmZnPsaF+HzQhUBMsa1TR2Eg/fokJsEgf19cs2LX+teccHaRTpLbHqeAsStKfWXL9a+1DNngJBbn436mv+M0z5DMeCXBvnMZM9pEKbslPwbNA7P2J7pDCede8nyTIog7zyxz9bQbwZyvUcIwetn3byc3W4JFRSdPx5+Hi5qQp6iNZPFPFNHHIg7fFQo1DrOVXjOYDrU6DtiJ3b+cADkxViIAz+bX5ezfBpMEPc/U7gnXlQys4/LIgUlsv16JGtnKyoN8reKemGREcmZgu8s4YW3wyJxRf4+Z+R5s4f12wNQhneIzIic0O0J1D+7v2wAMVxRw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=permerror action=none header.from=amd.com; dkim=none (message not signed); arc=none Received: from DM3PR12CA0074.namprd12.prod.outlook.com (2603:10b6:0:57::18) by BN6PR12MB1266.namprd12.prod.outlook.com (2603:10b6:404:14::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Thu, 22 Aug 2019 13:57:49 +0000 Received: from CO1NAM03FT023.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::203) by DM3PR12CA0074.outlook.office365.com (2603:10b6:0:57::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2199.14 via Frontend Transport; Thu, 22 Aug 2019 13:57:49 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT023.mail.protection.outlook.com (10.152.80.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2178.16 via Frontend Transport; Thu, 22 Aug 2019 13:57:49 +0000 Received: from localhost.localdomain (10.180.168.240) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Thu, 22 Aug 2019 08:57:45 -0500 From: David Francis To: Subject: [PATCH v4 3/5] drm/dp-mst: Add MST support to DP DPCD R/W functions Date: Thu, 22 Aug 2019 09:57:39 -0400 Message-ID: <20190822135741.12923-4-David.Francis@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822135741.12923-1-David.Francis@amd.com> References: <20190822135741.12923-1-David.Francis@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(346002)(396003)(136003)(39860400002)(376002)(2980300002)(428003)(189003)(199004)(51416003)(126002)(81166006)(16586007)(50466002)(4326008)(26005)(76176011)(14444005)(86362001)(70586007)(70206006)(8936002)(336012)(426003)(186003)(478600001)(36756003)(6916009)(6666004)(47776003)(356004)(48376002)(49486002)(81156014)(8676002)(50226002)(316002)(2906002)(476003)(305945005)(2351001)(54906003)(446003)(486006)(2616005)(5660300002)(11346002)(1076003)(53936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR12MB1266; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9394ad19-9dfa-4f81-eb8d-08d72708b7cb X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328); SRVR:BN6PR12MB1266; X-MS-TrafficTypeDiagnostic: BN6PR12MB1266: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-Forefront-PRVS: 01371B902F X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: Sl3ukovUJ62uTKEk7oLhif8WXt/+sCgdZOjLGefpYRUeGucTfIpfN3vFZVp+t83WKq6CcID3YefzO+2172mBkOJCFeA0gDz+sZ1/egNpGOkyhHFGkbSmW/BAa4IN4nIzs1thXSWsVkBvWrsnFUh6IrH/YUqrY75MxsXKuGlw7JAlia09jC6A8aOYPAN1fwT1Ka4PRCh0hly3pVPsHpJXlmrNgDcgunmw6ro8S8516vZaXIvm9X+ftJ+c8mFkMpsJVP8rm6LTBaYnn4P+EMYkNtZJZxoCPB78dIWr0/qqkDkjV1lkXKsyjQ/hRXThxpMqU+WtGiLJnpZTkEPhE+Gq1whClL6I2vXnIk4LSyBM5RytWkp/72oBA4SD3D8F2Z3h/jh2BXT/fYEb9ndZg/df5Tz67WAelSrde0vAgqG0efM= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2019 13:57:49.1079 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9394ad19-9dfa-4f81-eb8d-08d72708b7cb X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1266 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6tghymll+DLkIrA+sT+JSr3VAT/xCTp3q8vQOIIaaWc=; b=yld0Q+c60Df2OAGsR8lJQWnHW3c4tTmZZO3flNlj0N2plftsOOUxHORQ8HYXXb6HxeaH04j0+vbX5R+EDrIMve1Z+ahGyKgSqiNziNK/ryx96TbUgE975UC8QzQV67H3sOH18ZgM9IxJCH0eHK/vYLeYIVUP0J0NygSBjMdJjn0= X-Mailman-Original-Authentication-Results: spf=none (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=permerror action=none header.from=amd.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Leo Li , David Francis Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Instead of having drm_dp_dpcd_read/write and drm_dp_mst_dpcd_read/write as entry points into the aux code, have drm_dp_dpcd_read/write handle both. This means that DRM drivers can make MST DPCD read/writes. v2: Fix spacing Cc: Leo Li Cc: Lyude Paul Signed-off-by: David Francis Reviewed-by: Lyude Paul --- drivers/gpu/drm/drm_dp_aux_dev.c | 12 ++---------- drivers/gpu/drm/drm_dp_helper.c | 10 ++++++++-- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_dp_aux_dev.c b/drivers/gpu/drm/drm_dp_aux_dev.c index 0cfb386754c3..418cad4f649a 100644 --- a/drivers/gpu/drm/drm_dp_aux_dev.c +++ b/drivers/gpu/drm/drm_dp_aux_dev.c @@ -163,11 +163,7 @@ static ssize_t auxdev_read_iter(struct kiocb *iocb, struct iov_iter *to) break; } - if (aux_dev->aux->is_remote) - res = drm_dp_mst_dpcd_read(aux_dev->aux, pos, buf, - todo); - else - res = drm_dp_dpcd_read(aux_dev->aux, pos, buf, todo); + res = drm_dp_dpcd_read(aux_dev->aux, pos, buf, todo); if (res <= 0) break; @@ -215,11 +211,7 @@ static ssize_t auxdev_write_iter(struct kiocb *iocb, struct iov_iter *from) break; } - if (aux_dev->aux->is_remote) - res = drm_dp_mst_dpcd_write(aux_dev->aux, pos, buf, - todo); - else - res = drm_dp_dpcd_write(aux_dev->aux, pos, buf, todo); + res = drm_dp_mst_dpcd_write(aux_dev->aux, pos, buf, todo); if (res <= 0) break; diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index ffc68d305afe..b1599760b6a3 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -30,6 +30,7 @@ #include #include +#include #include #include @@ -251,7 +252,7 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, /** * drm_dp_dpcd_read() - read a series of bytes from the DPCD - * @aux: DisplayPort AUX channel + * @aux: DisplayPort AUX channel (SST or MST) * @offset: address of the (first) register to read * @buffer: buffer to store the register values * @size: number of bytes in @buffer @@ -268,6 +269,8 @@ ssize_t drm_dp_dpcd_read(struct drm_dp_aux *aux, unsigned int offset, { int ret; + if (aux->is_remote) + return drm_dp_mst_dpcd_read(aux, offset, buffer, size); /* * HP ZR24w corrupts the first DPCD access after entering power save * mode. Eg. on a read, the entire buffer will be filled with the same @@ -296,7 +299,7 @@ EXPORT_SYMBOL(drm_dp_dpcd_read); /** * drm_dp_dpcd_write() - write a series of bytes to the DPCD - * @aux: DisplayPort AUX channel + * @aux: DisplayPort AUX channel (SST or MST) * @offset: address of the (first) register to write * @buffer: buffer containing the values to write * @size: number of bytes in @buffer @@ -313,6 +316,9 @@ ssize_t drm_dp_dpcd_write(struct drm_dp_aux *aux, unsigned int offset, { int ret; + if (aux->is_remote) + return drm_dp_mst_dpcd_write(aux, offset, buffer, size); + ret = drm_dp_dpcd_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, size); drm_dp_dump_access(aux, DP_AUX_NATIVE_WRITE, offset, buffer, ret); From patchwork Thu Aug 22 13:57:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Francis X-Patchwork-Id: 11109353 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 888CF14DB for ; Thu, 22 Aug 2019 13:58:04 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7043422CE3 for ; Thu, 22 Aug 2019 13:58:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7043422CE3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9FAB96EB44; Thu, 22 Aug 2019 13:58:03 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM05-CO1-obe.outbound.protection.outlook.com (mail-eopbgr720059.outbound.protection.outlook.com [40.107.72.59]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3C49B6EB3F for ; Thu, 22 Aug 2019 13:57:52 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OX4w9s36U+mwU3zGho5d3qIUP3Eo+BSxu2b5atyGpvtzHj5dNo/pdWh1422sOCVxYOVZYcraO1WK8FSCieaeGcgvYNvTLwzwxOOcjERe3JzmpLxHq21wjo0H4UrJtAQjKAsMH39s8e9GDbpt05cYrKPY2jXTtdFIo3nhUfcYGcmkNW2X+TtQYhm9ExWaRKzYF7p6JlII69FdkXl5dNujrEkODEv/k6E9OtiDIdTxq00mLmsNTfYw2AMlqae3JZ4KMwRTeWPXPxfh9KILTeoBq8j8PHc/mgH/2pbxEvpPh3kFkRP5PvelHqlgyYSDXl6mv+XnQfbVMcB0J/jlsmx5DA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yrgy8YFf4sJPFZphNL00IXXWk5RtwebiY/2bwUEnFF0=; b=htdbxM10nhzxxLCNrr2vScWbDIZe/qB8E6lb0MIgQRB3NOKSvesDEqdsAq3LUsyKSfRDm9jtwSfV40u9BlfbHn4ALRwpMKedA1MCPPFWlt1r2CS5urUYMDUff+ODN6sI7N6GLgcGriE4dRY/Ytq2A3vMDh6egxCc6jBFHtg+p1WPx4R8TzckuB6CIGa+4icWMPH7TAEL4cNGASCJzQNn7N+yxk7LuUICVTtmWwVH3Og5mzT5VqQIrTeJljRNMgsiPG+WlZEaFlEG4H1MeJPIw6paCDFfNXrxt0G7p9p3RipjQW6g1xs/oOqJRf3InTmkicQBkNPCS7++gDr5HRGsrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.freedesktop.org smtp.mailfrom=amd.com; dmarc=permerror action=none header.from=amd.com; dkim=none (message not signed); arc=none Received: from DM3PR12CA0074.namprd12.prod.outlook.com (2603:10b6:0:57::18) by DM5PR12MB1529.namprd12.prod.outlook.com (2603:10b6:4:3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.18; Thu, 22 Aug 2019 13:57:51 +0000 Received: from CO1NAM03FT023.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::203) by DM3PR12CA0074.outlook.office365.com (2603:10b6:0:57::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2199.14 via Frontend Transport; Thu, 22 Aug 2019 13:57:50 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT023.mail.protection.outlook.com (10.152.80.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2178.16 via Frontend Transport; Thu, 22 Aug 2019 13:57:50 +0000 Received: from localhost.localdomain (10.180.168.240) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Thu, 22 Aug 2019 08:57:45 -0500 From: David Francis To: Subject: [PATCH v4 4/5] drm/dp-mst: Fill branch->num_ports Date: Thu, 22 Aug 2019 09:57:40 -0400 Message-ID: <20190822135741.12923-5-David.Francis@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822135741.12923-1-David.Francis@amd.com> References: <20190822135741.12923-1-David.Francis@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(376002)(396003)(346002)(2980300002)(428003)(189003)(199004)(1076003)(36756003)(426003)(8676002)(6916009)(51416003)(336012)(186003)(26005)(49486002)(50466002)(48376002)(53936002)(4326008)(47776003)(14444005)(16586007)(305945005)(6666004)(356004)(2906002)(478600001)(2616005)(476003)(126002)(81156014)(81166006)(11346002)(50226002)(8936002)(5660300002)(70206006)(446003)(70586007)(486006)(76176011)(86362001)(316002)(2351001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1529; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 97dddb2b-56d3-4c62-7713-08d72708b885 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328); SRVR:DM5PR12MB1529; X-MS-TrafficTypeDiagnostic: DM5PR12MB1529: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2657; X-Forefront-PRVS: 01371B902F X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: Tkp7oUiMmKG/QgNDPSLC3P1I1HNMWGugPz44p0vpx8mTGOfOKRrYTUcInJovU/vCyy52+1oIPIKpMZJ+gYryTVlGF2BrHX5/pnSc8mMeVjl3rvWlxi1YEvQpot4E5nvd9cHvKD+XnNy1VjrBAT38DglZufu0Tj+Lk5auUsoH24Ja5fFMIItrouiQm+ECwk3NBqP4N0EdIWYpV1o1Y0mubIPPuMwSmlmXgHiCHCbQJGQFzgGLpjX2wt/GCFbbjUdu3/P+Zg6kNSpOqaaZuWmda3gdvkUc+HQEsCMN9POXy0fcDW/QAO0hafomnAdkMJbtjTHGIYe9AEeIvIaXx3+LZHEge/fEhhQtrG4nI90LBvye/1DZhAyth/6ftzFx8fvI+q2c4yAFdIpAkuCOiQ3ufuUtvdlOmMhxs8ncMrFSSLk= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2019 13:57:50.3169 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 97dddb2b-56d3-4c62-7713-08d72708b885 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1529 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yrgy8YFf4sJPFZphNL00IXXWk5RtwebiY/2bwUEnFF0=; b=XCMNLBZfTKHIU3LfIrHIYSG9cyUlW+ulyZex+ZWYc6VXhkllHy0mCtR+wmqis8p8eiJhlmX5t1Z+jDxkzhibarMW2woNcS+6IpQa87f7VR8pS3Unz1qpAYmg6nypbZuR0abmkqexHGzXbivDhwNOGFpeTeQb87gJY0icCBmiVMo= X-Mailman-Original-Authentication-Results: spf=none (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; lists.freedesktop.org; dkim=none (message not signed) header.d=none;lists.freedesktop.org; dmarc=permerror action=none header.from=amd.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: David Francis Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This field on drm_dp_mst_branch was never filled Initialize it to zero when the list of ports is created. When a port is added to the list, increment num_ports, and when a port is removed from the list, decrement num_ports. v2: remember to decrement on port removal Signed-off-by: David Francis Reviewed-by: Lyude Paul --- drivers/gpu/drm/drm_dp_mst_topology.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index 50a044718439..af4b5cec7c84 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -919,6 +919,7 @@ static struct drm_dp_mst_branch *drm_dp_add_mst_branch_device(u8 lct, u8 *rad) INIT_LIST_HEAD(&mstb->ports); kref_init(&mstb->topology_kref); kref_init(&mstb->malloc_kref); + mstb->num_ports = 0; return mstb; } @@ -1669,6 +1670,7 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, mutex_lock(&mstb->mgr->lock); drm_dp_mst_topology_get_port(port); list_add(&port->next, &mstb->ports); + mstb->num_ports++; mutex_unlock(&mstb->mgr->lock); } @@ -1703,6 +1705,7 @@ static void drm_dp_add_port(struct drm_dp_mst_branch *mstb, /* remove it from the port list */ mutex_lock(&mstb->mgr->lock); list_del(&port->next); + mstb->num_ports--; mutex_unlock(&mstb->mgr->lock); /* drop port list reference */ drm_dp_mst_topology_put_port(port); From patchwork Thu Aug 22 13:57:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Francis X-Patchwork-Id: 11109355 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 80F4114DB for ; Thu, 22 Aug 2019 13:58:08 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 65B6C22CE3 for ; Thu, 22 Aug 2019 13:58:08 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 65B6C22CE3 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A396E6EB46; Thu, 22 Aug 2019 13:58:07 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-eopbgr740087.outbound.protection.outlook.com [40.107.74.87]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1F0E36EB44 for ; Thu, 22 Aug 2019 13:57:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bxPK5JYB/KU9FqUm1uMAN3ce6WGXgKDHKIskPRlmbNB9TX6noCcJoYlY74a45Cbz5XpvWLMXRfr9b71F8kvRiM9A8ii5jqhOBv4mFHQGT/bSu+v+fmySl6D1yqqwWFBkrFtT8fYnjm2oOk0S5yf0nAUMuihKton5o2SrHnauD7WFYOr3DeoLxAv5N9KHms7eahm6iSaSS6jy2VoGShYfoC/5i7K0eHkYxIDGWNnWBsn7ZEqqSb3XLqk6oe+iSOcL4QeTYEzUCnbkjfKouoIenPpounJvFKSS+xvA3Cm+HSRL++nu1iGubIxwF+y+ITOjyKvmUzMQRcUdQN6NYtA1XA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YW17DyWPvcWSBuG1eQ4f332Eg6cWUuWuLaEmPrj9ziM=; b=aNNAV0Pde+3InHNSXu969IQhF3SkaNbNPKs9Uw6CxB2cH2RG1JV4DnUDDJdfrWOiymaSMTCTr+E9T6Kmm8x3Tpgap5tHA3r8xaCZfEmLqloXAuzr4WkfjCAhZD1M4Pt3WC0ZCImOIZ+4JYHXaouer3dH+I2FDn3asFH/8/ZSTVU/FaG1ld7VPVN4+ZJ2nL/RddmYX0SalEbpuN/qhTEbMsjfjHrBBDE+cU/EHwC6SH+R1zWhvmfARwqOXVMkq+1CZlFJDG8r1PTIKTz5JcZtKncGR9rfthBeblARCXpLJJTJzWyX7erfHPY40pOKT9iE5n5VJeWdhjNY+ddzYUPAYw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none (sender ip is 165.204.84.17) smtp.rcpttodomain=redhat.com smtp.mailfrom=amd.com; dmarc=permerror action=none header.from=amd.com; dkim=none (message not signed); arc=none Received: from DM3PR12CA0074.namprd12.prod.outlook.com (2603:10b6:0:57::18) by DM5PR12MB1274.namprd12.prod.outlook.com (2603:10b6:3:78::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.18; Thu, 22 Aug 2019 13:57:52 +0000 Received: from CO1NAM03FT023.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::203) by DM3PR12CA0074.outlook.office365.com (2603:10b6:0:57::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2199.14 via Frontend Transport; Thu, 22 Aug 2019 13:57:52 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT023.mail.protection.outlook.com (10.152.80.157) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2178.16 via Frontend Transport; Thu, 22 Aug 2019 13:57:51 +0000 Received: from localhost.localdomain (10.180.168.240) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Thu, 22 Aug 2019 08:57:46 -0500 From: David Francis To: Subject: [PATCH v4 5/5] drm/dp-mst: Add helpers for querying and enabling MST DSC Date: Thu, 22 Aug 2019 09:57:41 -0400 Message-ID: <20190822135741.12923-6-David.Francis@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190822135741.12923-1-David.Francis@amd.com> References: <20190822135741.12923-1-David.Francis@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(136003)(39860400002)(396003)(376002)(346002)(2980300002)(428003)(199004)(189003)(486006)(50466002)(186003)(2906002)(11346002)(70206006)(4326008)(2616005)(426003)(126002)(53936002)(478600001)(336012)(476003)(50226002)(446003)(48376002)(81156014)(316002)(1076003)(81166006)(36756003)(6916009)(26005)(2351001)(5024004)(8676002)(14444005)(356004)(6666004)(305945005)(76176011)(54906003)(16586007)(8936002)(86362001)(47776003)(5660300002)(70586007)(51416003)(49486002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB1274; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e9324d4e-4eb9-40c5-50a4-08d72708b920 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328); SRVR:DM5PR12MB1274; X-MS-TrafficTypeDiagnostic: DM5PR12MB1274: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 01371B902F X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: uLPzGbwgMUsYpYD4pb/rnvwhlOOOdWlaDxy05iJFXPEw0HXkEJIq9M7R0jMwACHPlB6YrBoBbcRy80NgmljnKOw9SiyxRkZVwz5mb5HDhcZ5fjHerxbNC6tEEBvWpNMR6ChYOsv9YQwWS5qmx1FVK3aCOWUNiby7rT35NyjVl1v3ookI4J/8pGrYlkHgDvbw2t6C6M6hs01ok3wkTEC0J2uv+gPdiw5IaM5+YMO/ZWg5G0OZ59swWVzgVwt76Rh7xXl6AE3WTEYW3eTp3Rg0ispsQeNipADl9v/LaseyodtM22G8dGqccfk1LSuU3vF61evWU1ahsheTnLeTDU1CICUGWpYNXRR+vWY6bXBE9QRrfAzjcze/uYiKpaNVxxE67tX/k9G8UDPCDPp+RBaqagskNDp8C2JP4PaPz9R6CY4= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Aug 2019 13:57:51.3507 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e9324d4e-4eb9-40c5-50a4-08d72708b920 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1274 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YW17DyWPvcWSBuG1eQ4f332Eg6cWUuWuLaEmPrj9ziM=; b=Roo+soJWG4XqC7WDuIZORv7hiJVL6RdXmT7UtHeowSlMN6PSF7JUrvi/Chl6e/ApznEKFcbC95FSql0CMSwm1CYUYNa6l9wNyFR9uvc6ThBDp4DR8Hc0pkudm38zzyCsnvAOAL6OTxEhKNBhD+iSgnbJrAs0XKOYmf7Bc7LAmis= X-Mailman-Original-Authentication-Results: spf=none (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=permerror action=none header.from=amd.com; X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Wenjing Liu , David Francis , Nikola Cornij Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Add drm_dp_mst_dsc_caps_for_port and drm_dp_mst_dsc_enable, two helper functions for MST DSC The former, given a port, returns the raw DPCD DSC caps off that port. The latter, given a port, enables or disables DSC on that port. In both cases, the port given as input should be a leaf of the MST tree with an attached display. The logic for this is somewhat complicated, as DSC can be enabled in 4 different ways. Case 1: DP-to-DP peer device if the branch immediately upstream has - PDT = DP_PEER_DEVICE_DP_MST_BRANCHING (2) - DPCD rev. >= DP 1.4 - Exactly one input and one output - The output has PDT = DP_PEER_DEVICE_SST_SINK (3) In this case, DSC could be possible either on the endpoint or the peer device. Prefer the endpoint, which is possible if - The endpoint has DP_DSC_DECOMPRESSION_IS_SUPPORTED bit set - The endpoint has DP_FEC_CAPABLE bit set - The peer device has DSC_PASSTHROUGH_CAPABILITY bit set (from DP v2.0) Otherwise, use the peer device Case 2: DP-to-HDMI peer device If the output port has - PDT = DP_PEER_DEVICE_DP_LEGACY_CONV (4) - DPCD rev. >= DP 1.4 - LDPS = true - MCS = false In this case, DSC can only be attempted on the peer device (the output port) Case 3: Virtual DP Sink (Internal Display Panel) If the output port has - DPCD rev. >= DP 1.4 - port_num >= 8 In this case, DSC can only be attempted on the peer device (the output port) Case 4: Synaptix Workaround If the output has - link DPCD rev. >= DP 1.4 - link branch_dev_id = 0x90CC24 (Synaptix) - There is exactly one branch device between the link and output In this case, DSC can be attempted, but only using the *link* aux device's caps. This is a quirk. Cc: Lyude Paul Cc: Wenjing Liu Cc: Nikola Cornij Signed-off-by: David Francis --- drivers/gpu/drm/drm_dp_mst_topology.c | 195 ++++++++++++++++++++++++++ include/drm/drm_dp_mst_helper.h | 3 + 2 files changed, 198 insertions(+) diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c index af4b5cec7c84..00ddc54af65b 100644 --- a/drivers/gpu/drm/drm_dp_mst_topology.c +++ b/drivers/gpu/drm/drm_dp_mst_topology.c @@ -4186,3 +4186,198 @@ static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_aux *aux) { i2c_del_adapter(&aux->ddc); } + +/** + * drm_dp_mst_is_virtual_dpcd() - Is the given port a virtual DPCD device? + * @port: The port to check + * + * Returns: + * true if the port is a virtual DPCD peer device, false otherwise + */ +static bool drm_dp_mst_is_virtual_dpcd(struct drm_dp_mst_port *port) +{ + struct drm_dp_mst_port *downstream_port; + + if (!port) + return false; + + /* Virtual DP Sink (Internal Display Panel) */ + if (port->port_num >= 8 && port->dpcd_rev >= DP_DPCD_REV_14) + return true; + + /* DP-to-HDMI Protocol Converter */ + if (port->pdt == DP_PEER_DEVICE_DP_LEGACY_CONV && + !port->mcs && + port->ldps && + port->dpcd_rev >= DP_DPCD_REV_14) + return true; + + /* DP-to-DP */ + if (port->pdt == DP_PEER_DEVICE_MST_BRANCHING && + port->mstb && + port->dpcd_rev >= DP_DPCD_REV_14 && + port->mstb->num_ports == 2) { + list_for_each_entry(downstream_port, &port->mstb->ports, next) { + if (!downstream_port->input && + downstream_port->pdt == DP_PEER_DEVICE_SST_SINK) + return true; + } + } + + return false; +} + +/** + * drm_dp_mst_is_virtual_dpcd() - Test for Synaptix DSC quirk + * @port: The port to check + * + * Some Synaptix MST hubs support DSC even though they do not support virtual + * DPCD. This is a quirk. + * + * Returns: + * true if the Synaptix workaround is required, false otherwise + */ +static bool drm_dp_mst_dsc_synaptix_workaround(struct drm_dp_mst_port *port) +{ + u8 data[3] = { 0 }; + u32 dev_id; + struct drm_dp_aux *phys_aux; + + /* The hub must be directly connected to the connector */ + if (port->mgr->mst_primary != port->parent) + return false; + + phys_aux = port->mgr->aux; + if (drm_dp_dpcd_read(phys_aux, DP_BRANCH_OUI, data, 3) < 0) + return false; + dev_id = (data[0] << 16) & (data[1] << 8) & data[3]; + /* Synaptix device ID */ + if (dev_id != 0x90CC24) + return false; + + if (drm_dp_dpcd_read(phys_aux, DP_DPCD_REV, data, 1) < 0) + return false; + /* Must be DPCD rev. 1.4 or later */ + if (data[0] < DP_DPCD_REV_14) + return false; + + if (drm_dp_dpcd_read(&port->aux, + DP_DOWNSTREAMPORT_PRESENT, data, 1) < 0) + return false; + /* Must not be a VGA converter */ + if ((data[0] & 7) == 3) + return false; + + return true; +} + +/** + * drm_dp_mst_dsc_aux_for_port() - Find the correct aux for DSC + * @port: The port to check. A leaf of the MST tree with an attached display. + * + * Depending on the situation, DSC may be enabled via the endpoint aux, + * the immediately upstream aux, or the connector's physical aux. + * + * Returns: + * NULL if DSC cannot be enabled on this port, otherwise the aux device + */ +struct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(struct drm_dp_mst_port *port) +{ + u8 upstream_dsc = 0; + u8 endpoint_dsc = 0; + u8 endpoint_fec = 0; + struct drm_dp_mst_port *immediate_upstream_port; + struct drm_dp_mst_port *fec_port; + + if (port && port->parent) + immediate_upstream_port = port->parent->port_parent; + else + immediate_upstream_port = NULL; + + fec_port = immediate_upstream_port; + while (fec_port) { + if (!fec_port->fec_capable) + return NULL; + + fec_port = fec_port->parent->port_parent; + } + + if (immediate_upstream_port) { + if (drm_dp_dpcd_read(&immediate_upstream_port->aux, + DP_DSC_SUPPORT, &upstream_dsc, 1) < 0) + return NULL; + } + + if (drm_dp_dpcd_read(&port->aux, + DP_DSC_SUPPORT, &endpoint_dsc, 1) < 0) + return NULL; + if (drm_dp_dpcd_read(&port->aux, + DP_FEC_CAPABILITY, &endpoint_fec, 1) < 0) + return NULL; + + /* Enpoint decompression with DP-to-DP peer device */ + if (drm_dp_mst_is_virtual_dpcd(immediate_upstream_port) + && (upstream_dsc & 0x2) /* DSC passthrough */ + && (endpoint_fec & DP_FEC_CAPABLE) + && (endpoint_dsc & DP_DSC_DECOMPRESSION_IS_SUPPORTED)) + return &port->aux; + + /* Virtual DPCD decompression with DP-to-DP peer device */ + if (drm_dp_mst_is_virtual_dpcd(immediate_upstream_port)) + return &immediate_upstream_port->aux; + + /* Virtual DPCD decompression with DP-to-HDMI or Virtual DP Sink */ + if (drm_dp_mst_is_virtual_dpcd(port)) + return &port->aux; + + /* Synaptix workaround */ + if (drm_dp_mst_dsc_synaptix_workaround(port)) + return port->mgr->aux; + + return NULL; +} + +/** + * drm_dp_mst_dsc_aux_for_port() - Retrieve the DSC capability registers + * @port: The port to check. A leaf of the MST tree with an attached display. + * @caps: Output. A pointer to an array at least 16 bytes long + * + * Reads the DSC capability registers (DSC_SUPPORT through + * BITS_PER_PIXEL_INCREMENT) and store them in the given pointer. Use + * the correct aux for DSC on the given port. + * + * Returns: + * The number of bytes read on success, or a negative error code on failure + */ +int drm_dp_mst_dsc_caps_for_port(struct drm_dp_mst_port *port, u8 *caps) +{ + struct drm_dp_aux *aux = drm_dp_mst_dsc_aux_for_port(port); + + if (!aux) + return -EINVAL; + + return drm_dp_dpcd_read(aux, DP_DSC_SUPPORT, caps, 16); +} +EXPORT_SYMBOL(drm_dp_mst_dsc_caps_for_port); + +/** + * drm_dp_mst_dsc_aux_for_port() - Enable DSC on an MST endpoint + * @port: The port to check. A leaf of the MST tree with an attached display. + * @enable: true for turn on DSC, false for turn off DSC + * + * Writes DP_DSC_ENABLE on the correct aux for the given port. + * + * Returns: + * The number of bytes written on success, or a negative error code on failure + */ +int drm_dp_mst_dsc_enable(struct drm_dp_mst_port *port, bool enable) +{ + struct drm_dp_aux *aux = drm_dp_mst_dsc_aux_for_port(port); + u8 enable_dsc = enable ? 1 : 0; + + if (!aux) + return -EINVAL; + + return drm_dp_dpcd_write(aux, DP_DSC_ENABLE, &enable_dsc, 1); +} +EXPORT_SYMBOL(drm_dp_mst_dsc_enable); diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h index fa973773a4a7..0f70dc8dfbeb 100644 --- a/include/drm/drm_dp_mst_helper.h +++ b/include/drm/drm_dp_mst_helper.h @@ -674,6 +674,9 @@ int __must_check drm_dp_mst_atomic_check(struct drm_atomic_state *state); void drm_dp_mst_get_port_malloc(struct drm_dp_mst_port *port); void drm_dp_mst_put_port_malloc(struct drm_dp_mst_port *port); +int drm_dp_mst_dsc_caps_for_port(struct drm_dp_mst_port *port, u8 *caps); +int drm_dp_mst_dsc_enable(struct drm_dp_mst_port *port, bool enable); + extern const struct drm_private_state_funcs drm_dp_mst_topology_state_funcs; /**