From patchwork Mon Sep 20 08:44:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Schneider-Pargmann X-Patchwork-Id: 12504831 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-18.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2DFFC433F5 for ; Mon, 20 Sep 2021 08:46:40 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 AB1C360EB2 for ; Mon, 20 Sep 2021 08:46:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org AB1C360EB2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IInhgZmUChk9a8AuM5lJbb8vhManVU92IT73DJ4PI2o=; b=X0GQ3IXAUzhA8D V4/NfipJVouFokz9L0ErQatQRCVt3M0O0MUHgk69xVLMpqRd4RmRoC2SnqKpiGboQdWKyuYt71Qux lo2MCbI9t+U6TeunWcI5Je4L1TpwamCutvV9jva1Xs6ofg20mtyJ+AtzJJFTKc2tBgTXTnTZhPDhh hzq2pEyk3j7vLfkaLDrRbc5hAUYXio8NJUYCZrgaCgecVA/bskf4ZjIm+moP3nxKVERs1nnwT0R0z 4AyqldlwH32GloeenkNh0IRsbqkxNiNdLPEsmB9zTTFmE9Ju4rbaY7PZO5ZmP+l1mg4bltHHPjnUZ uOIzCG5sGWolDQBFvuig==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mSEwS-000xcT-So; Mon, 20 Sep 2021 08:46:24 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mSEul-000wlz-2g for linux-mediatek@lists.infradead.org; Mon, 20 Sep 2021 08:44:51 +0000 Received: by mail-wm1-x32e.google.com with SMTP id e26so12514584wmk.2 for ; Mon, 20 Sep 2021 01:44:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EJPl7f3LPkIPQ06T8ABg3Ledt/ZkphTOZM0mxR7K32o=; b=b1q8cXO80vUCm98WuFW6fY4Akgw81+/g3Unm8gu1kp+Wu86jf7dA/cuDKUPYk3ugji Th0MNLiQITibB4szEx0uZ4G6zSkrXg1uNieDqh9tASAA0XcI6O76RJzwg5VCPsVhM3ma W4PfEcIIFrabbDWbdMtVbha/CIlHigYdgehHGiULgvz6+NO9blqITqKo/T/1etCfBO4r XKR4DbRD93XbrW7htJrCzAgK4V3f3RXlPh7LLHEHs2hyITt4M8x81SjchSvhwNZsg/fO tnznVfjwwEAoac4b9V9sM67oXTQdHU26jebpK4vEMc/4Qn+Nc9ae5PoknvphShKdYxzY vZlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EJPl7f3LPkIPQ06T8ABg3Ledt/ZkphTOZM0mxR7K32o=; b=bDG5zsFYqUpYkihkZJx9ifvWaIEfZo4IvIxGYAvp3Ou63+OilTsZN/8ZTIbMf+f1Cz xyiw2yeK5PEeVdvesKhw+HwsduopnK07r/S4v9HJfAQvgvDo8rhpDbblRNe1Lgide8gV ot1kuFzVdY09irXq+uxs/u8bNzg4DSH0EJ13twjydM6PwT2DLbwvlHyoS4utpw6FcPFA UuRp1fw4y+u0mK178cYsOUfCk0b9P4dp1CJLBCoemcZWkJDFn//7h0YfSJ2jzVPAmwcM M4T+qTZLKgfqaGbAr0CpetI35Bhi68of8OzAV3rUvDxxTOmEDn4Sjac9QUENQVF+OSmb UvWA== X-Gm-Message-State: AOAM532Zq4Xcjnep8UBdthAIqjib6WBNiCSD1J3rqfwpec2Se5K4+Udc +GgWa/K+rXYe0ZwE8056fQiwEw== X-Google-Smtp-Source: ABdhPJwj5oTDXVrz5HI5AN8BbgBOu7UBDrKz2HfAxFfA1Rb8x+w2Vi4Zf2Tg+DIAeYuffW6X+dc/oQ== X-Received: by 2002:a05:600c:1c9e:: with SMTP id k30mr22503335wms.74.1632127476953; Mon, 20 Sep 2021 01:44:36 -0700 (PDT) Received: from blmsp.lan ([2a02:2454:3e6:c900::97e]) by smtp.gmail.com with ESMTPSA id w1sm18433911wmc.19.2021.09.20.01.44.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Sep 2021 01:44:36 -0700 (PDT) From: Markus Schneider-Pargmann To: Chun-Kuang Hu , Philipp Zabel Cc: Sam Ravnborg , dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Markus Schneider-Pargmann Subject: [PATCH v2 6/6] drm/mediatek: Add mt8195 DisplayPort driver Date: Mon, 20 Sep 2021 10:44:24 +0200 Message-Id: <20210920084424.231825-7-msp@baylibre.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210920084424.231825-1-msp@baylibre.com> References: <20210920084424.231825-1-msp@baylibre.com> MIME-Version: 1.0 X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org This patch adds a DisplayPort driver for the Mediatek mt8195 SoC and a according phy driver mediatek-dp-phy. It supports both functional units on the mt8195, the embedded DisplayPort as well as the external DisplayPort units. It offers hot-plug-detection, audio up to 8 channels, and DisplayPort 1.4 with up to 4 lanes. The driver creates a child device for the phy. The child device will never exist without the parent being active. As they are sharing a register range, the parent passes a regmap pointer to the child so that both can work with the same register range. The phy driver sets device data that is read by the parent to get the phy device that can be used to control the phy properties. This driver is based on an initial version by Jason-JH.Lin . Signed-off-by: Markus Schneider-Pargmann --- Notes: Changes v1 -> v2: - Fix checkpatch --strict suggestions - General cleanups of the code. - Remove all remaining non-atomic functions. - Remove unused includes and sort them. - Remove unused select GENERIC_PHY - Rename phy registers DP_PHY -> MTK_DP_PHY - Replace usage of delays with usleep_range. - Split the phy register accesses into a separate phy driver. - Use a lock to guard access to mtk_dp->edid as it can be allocated/used/freed in different threads - use struct dp_sdp for sdp packets. Changes RFC -> v1: - Removed unused register definitions. - Replaced workqueue with threaded irq. - Removed connector code. - Move to atomic_* drm functions. - General cleanups of the code. - Remove unused select GENERIC_PHY. drivers/gpu/drm/mediatek/Kconfig | 7 + drivers/gpu/drm/mediatek/Makefile | 2 + drivers/gpu/drm/mediatek/mtk_dp.c | 2855 ++++++++++++++++++++++++ drivers/gpu/drm/mediatek/mtk_dp_reg.h | 498 +++++ drivers/gpu/drm/mediatek/mtk_drm_drv.c | 1 + drivers/gpu/drm/mediatek/mtk_drm_drv.h | 1 + drivers/phy/mediatek/Kconfig | 8 + drivers/phy/mediatek/Makefile | 1 + drivers/phy/mediatek/phy-mtk-dp.c | 218 ++ include/linux/soc/mediatek/mtk-mmsys.h | 2 + 10 files changed, 3593 insertions(+) create mode 100644 drivers/gpu/drm/mediatek/mtk_dp.c create mode 100644 drivers/gpu/drm/mediatek/mtk_dp_reg.h create mode 100644 drivers/phy/mediatek/phy-mtk-dp.c diff --git a/drivers/gpu/drm/mediatek/Kconfig b/drivers/gpu/drm/mediatek/Kconfig index 2976d21e9a34..029b94c71613 100644 --- a/drivers/gpu/drm/mediatek/Kconfig +++ b/drivers/gpu/drm/mediatek/Kconfig @@ -28,3 +28,10 @@ config DRM_MEDIATEK_HDMI select PHY_MTK_HDMI help DRM/KMS HDMI driver for Mediatek SoCs + +config MTK_DPTX_SUPPORT + tristate "DRM DPTX Support for Mediatek SoCs" + depends on DRM_MEDIATEK + select PHY_MTK_DP + help + DRM/KMS Display Port driver for Mediatek SoCs. diff --git a/drivers/gpu/drm/mediatek/Makefile b/drivers/gpu/drm/mediatek/Makefile index 29098d7c8307..d86a6406055e 100644 --- a/drivers/gpu/drm/mediatek/Makefile +++ b/drivers/gpu/drm/mediatek/Makefile @@ -21,3 +21,5 @@ mediatek-drm-hdmi-objs := mtk_cec.o \ mtk_hdmi_ddc.o obj-$(CONFIG_DRM_MEDIATEK_HDMI) += mediatek-drm-hdmi.o + +obj-$(CONFIG_MTK_DPTX_SUPPORT) += mtk_dp.o diff --git a/drivers/gpu/drm/mediatek/mtk_dp.c b/drivers/gpu/drm/mediatek/mtk_dp.c new file mode 100644 index 000000000000..5d95ff68b0df --- /dev/null +++ b/drivers/gpu/drm/mediatek/mtk_dp.c @@ -0,0 +1,2855 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2019 MediaTek Inc. + * Copyright (c) 2021 BayLibre + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include