From nobody Thu Oct 9 04:19:41 2025 Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40409283FF0 for ; Fri, 20 Jun 2025 09:40:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.35 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412435; cv=none; b=sYp6qe6rL93TvJQMGTIeG0P+mfq/IvDCH8aloeu4XyEDItR37aA++mwRuLxwyu0vd3Wvpg4sK/95IHUFF97ZZj9FBLOprsqFYVDmZK5id9FDIg6H5UWahjnXfuWLfS8cw9hcKZOfhW7mFzuAdUJQxr16f0ku2RH5PFsjHkRc0A0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412435; c=relaxed/simple; bh=LKXOC3vOP3VAnMLid+jWjytndoUpPq5+UVDHqX/+YVc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gzbrxJhWiAZxavzNN5CXlK6Fi389RTH821Xh0kHzSD3joaJPCqkSDdHEjKq5hZTEHFRKOEwhugdNSo0xwCX0ltbCeijCeNavGvRoPYJ2aTTz1TO7+o2tYd/Ka1UI3wkyUkqeUw7pgQGZClQZVCGkk69erf4XBKC9436w1dx0qFI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4bNsql240rz27g80; Fri, 20 Jun 2025 17:38:59 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id D1A68180043; Fri, 20 Jun 2025 17:40:30 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv712-chm.china.huawei.com (10.1.198.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:30 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:30 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 01/10] drm/hisilicon/hibmc: fix the i2c device resource leak when vdac init failed Date: Fri, 20 Jun 2025 17:30:55 +0800 Message-ID: <20250620093104.2016196-2-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li Currently the driver missed to clean the i2c adapter when vdac init failed. It may cause resource leak. Fixes: a0d078d06e516 ("drm/hisilicon: Features to support reading resolutio= ns from EDID") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi Reviewed-by: Dmitry Baryshkov --- ChangeLog: v1 -> v2: - use the hibmc_ddc_del() in hibmc_connector_destroy(), suggested by Dmit= ry Baryshkov. - fix the tag, suggested by Dmitry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 1 + drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c | 5 +++++ drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 11 ++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/= drm/hisilicon/hibmc/hibmc_drm_drv.h index 274feabe7df0..ca8502e2760c 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h @@ -69,6 +69,7 @@ int hibmc_de_init(struct hibmc_drm_private *priv); int hibmc_vdac_init(struct hibmc_drm_private *priv); =20 int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_vdac *connec= tor); +void hibmc_ddc_del(struct hibmc_vdac *vdac); =20 int hibmc_dp_init(struct hibmc_drm_private *priv); =20 diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c b/drivers/gpu/= drm/hisilicon/hibmc/hibmc_drm_i2c.c index 99b3b77b5445..44860011855e 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c @@ -95,3 +95,8 @@ int hibmc_ddc_create(struct drm_device *drm_dev, struct h= ibmc_vdac *vdac) =20 return i2c_bit_add_bus(&vdac->adapter); } + +void hibmc_ddc_del(struct hibmc_vdac *vdac) +{ + i2c_del_adapter(&vdac->adapter); +} diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu= /drm/hisilicon/hibmc/hibmc_drm_vdac.c index e8a527ede854..841e81f47b68 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c @@ -53,7 +53,7 @@ static void hibmc_connector_destroy(struct drm_connector = *connector) { struct hibmc_vdac *vdac =3D to_hibmc_vdac(connector); =20 - i2c_del_adapter(&vdac->adapter); + hibmc_ddc_del(vdac); drm_connector_cleanup(connector); } =20 @@ -110,7 +110,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv) ret =3D drmm_encoder_init(dev, encoder, NULL, DRM_MODE_ENCODER_DAC, NULL); if (ret) { drm_err(dev, "failed to init encoder: %d\n", ret); - return ret; + goto err; } =20 drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs); @@ -121,7 +121,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv) &vdac->adapter); if (ret) { drm_err(dev, "failed to init connector: %d\n", ret); - return ret; + goto err; } =20 drm_connector_helper_add(connector, &hibmc_connector_helper_funcs); @@ -131,4 +131,9 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv) connector->polled =3D DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DIS= CONNECT; =20 return 0; + +err: + hibmc_ddc_del(vdac); + + return ret; } --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB9CB2836BD for ; Fri, 20 Jun 2025 09:40:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412436; cv=none; b=EtXSkzC79MrOtFrDMz8eU7NjxUOtnpecQHDo7tFlo98UN4KCX68jTwi5RScIDJ/2vXjuIkhAV6Rx3UVvzehTM3jKxWWPStDwF3zJiCj2Y1baD3TI9+0kIjZnWhozHsmCqcsihiG9Jh3JCpEfrESX6bu1Fvra3mhjA6Mc+X65GqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412436; c=relaxed/simple; bh=wnNuWBhhiBYhfwf1/wOF3T9jJmwhlRTf8Gd5LjIiUkY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kYfvOOm6zdMysn89Hbic1m8llgLJk0WVwz3COmgaBpqkbACeOyqyzydJW3cOm7OzXvj9+rD9jDGmFkZh+NJNUPCeTw6F7XfbuuYb8qAHc72HpvPi94Nbvg0Gtzy/kRqMpV7naJXswaPfcbzizwwiGiyqgxuXfx7Ptznsp/LsHTI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4bNsqm6nqsz2BdTx; Fri, 20 Jun 2025 17:39:00 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id 5D44B180043; Fri, 20 Jun 2025 17:40:31 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv705-chm.china.huawei.com (10.3.19.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:31 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:30 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 02/10] drm/hisilicon/hibmc: fix dp probabilistical detect errors after HPD irq Date: Fri, 20 Jun 2025 17:30:56 +0800 Message-ID: <20250620093104.2016196-3-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li The debouncing when HPD pulled out still remains sometimes, 200ms still can not ensure helper_detect() is correct. So add more checks and hibmc_dp_link_training0() in detect_ctx(). Fixes: 3c7623fb5bb6 ("drm/hisilicon/hibmc: Enable this hot plug detect of i= rq feature") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- ChangeLog: v1 -> v2: - don't use the flag, and use more checks in detect_ctx(), suggested by D= mitry Baryshkov. - delete if (dev->registered), suggested by Dmitry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 24 +++++++++++++++---- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 2 ++ .../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 19 +++++++++++---- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.c index 8f0daec7d174..8a965e143012 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -238,19 +238,33 @@ void hibmc_dp_display_en(struct hibmc_dp *dp, bool en= able) msleep(50); } =20 -int hibmc_dp_mode_set(struct hibmc_dp *dp, struct drm_display_mode *mode) +int hibmc_dp_detect_link(struct hibmc_dp *dp) { struct hibmc_dp_dev *dp_dev =3D dp->dp_dev; - int ret; + int ret =3D 0; + + mutex_lock(&dp->link_train_mutex); =20 if (!dp_dev->link.status.channel_equalized) { ret =3D hibmc_dp_link_training(dp_dev); - if (ret) { + if (ret) drm_err(dp->drm_dev, "dp link training failed, ret: %d\n", ret); - return ret; - } } =20 + mutex_unlock(&dp->link_train_mutex); + + return ret; +} + +int hibmc_dp_mode_set(struct hibmc_dp *dp, struct drm_display_mode *mode) +{ + struct hibmc_dp_dev *dp_dev =3D dp->dp_dev; + int ret; + + ret =3D hibmc_dp_detect_link(dp); + if (ret) + return ret; + hibmc_dp_display_en(dp, false); hibmc_dp_link_cfg(dp_dev, mode); =20 diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.h index 665f5b166dfb..9b45e88e47e4 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h @@ -50,9 +50,11 @@ struct hibmc_dp { struct drm_dp_aux aux; struct hibmc_dp_cbar_cfg cfg; u32 irq_status; + struct mutex link_train_mutex; /* link training mutex */ }; =20 int hibmc_dp_hw_init(struct hibmc_dp *dp); +int hibmc_dp_detect_link(struct hibmc_dp *dp); int hibmc_dp_mode_set(struct hibmc_dp *dp, struct drm_display_mode *mode); void hibmc_dp_display_en(struct hibmc_dp *dp, bool enable); void hibmc_dp_set_cbar(struct hibmc_dp *dp, const struct hibmc_dp_cbar_cfg= *cfg); diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c b/drivers/gpu/d= rm/hisilicon/hibmc/hibmc_drm_dp.c index d06832e62e96..c0de796225b7 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c @@ -34,9 +34,19 @@ static int hibmc_dp_connector_get_modes(struct drm_conne= ctor *connector) static int hibmc_dp_detect(struct drm_connector *connector, struct drm_modeset_acquire_ctx *ctx, bool force) { - mdelay(200); + struct hibmc_dp *dp =3D to_hibmc_dp(connector); + + if (!(dp->irq_status & DP_MASKED_SINK_HPD_PLUG_INT)) + return connector_status_disconnected; + + if (drm_connector_helper_detect_from_ddc(connector, ctx, force) !=3D + connector_status_connected) + return connector_status_disconnected; =20 - return drm_connector_helper_detect_from_ddc(connector, ctx, force); + if (hibmc_dp_detect_link(dp)) + return connector_status_connected; + + return connector_status_disconnected; } =20 static const struct drm_connector_helper_funcs hibmc_dp_conn_helper_funcs = =3D { @@ -128,8 +138,7 @@ irqreturn_t hibmc_dp_hpd_isr(int irq, void *arg) hibmc_dp_reset_link(&priv->dp); } =20 - if (dev->registered) - drm_connector_helper_hpd_irq_event(&priv->dp.connector); + drm_connector_helper_hpd_irq_event(&priv->dp.connector); =20 drm_dev_exit(idx); =20 @@ -178,5 +187,7 @@ int hibmc_dp_init(struct hibmc_drm_private *priv) =20 connector->polled =3D DRM_CONNECTOR_POLL_HPD; =20 + mutex_init(&dp->link_train_mutex); + return 0; } --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBA36284663 for ; Fri, 20 Jun 2025 09:40:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412435; cv=none; b=ENNhnf1hhi8yPr5uQYvcg080wFJVa1OZdmk30v+gn/VU0RZ9MMystngLugVHOFx+L3SpW5Mi03oyXFdUMZtvyCq+GNfoO0gJdVYqXHr+PyesDM8Js78AeUWsz9xQACnir7KRNKfmZ/tnRyoUqKaHhStSBZ4FkxvhIvSmJ+5KSXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412435; c=relaxed/simple; bh=wkLE+HtfkADxMyuo8oRbWuno/RfClIBXRSHahEZz6Aw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KvCBbXVYkS42QOF4Wb2ZAkylI1qIq9bb8jOQqANKFMhxgO1N3CQggtuBPUtP+0q0r9v+Riu0YGGPRPZxJEqnlJQec7onWxEcho8bS/mfHTYNeG8NdBG0ZF5BXOWtCWqzyPiUrQ9fNevGENfMjDR5B8u/32YB8oUgZgqXZn2J4I4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4bNsqn18kxz2BdX8; Fri, 20 Jun 2025 17:39:01 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id 9240D1A0188; Fri, 20 Jun 2025 17:40:31 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv705-chm.china.huawei.com (10.3.19.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:31 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:30 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 03/10] drm/hisilicon/hibmc: fix irq_request()'s irq name variable is local Date: Fri, 20 Jun 2025 17:30:57 +0800 Message-ID: <20250620093104.2016196-4-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li The local variable is passed in request_irq (), and there will be use after free problem, which will make request_irq failed. Using the global irq name instead of it to fix. Fixes: b11bc1ae4658 ("drm/hisilicon/hibmc: Add MSI irq getting and requesti= ng for HPD") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi Reviewed-by: Dmitry Baryshkov --- ChangeLog: v1 -> v2: - add explanations in commit, suggested by Dmitry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/= drm/hisilicon/hibmc/hibmc_drm_drv.c index 768b97f9e74a..4cdcc34070ee 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c @@ -32,7 +32,7 @@ =20 DEFINE_DRM_GEM_FOPS(hibmc_fops); =20 -static const char *g_irqs_names_map[HIBMC_MAX_VECTORS] =3D { "vblank", "hp= d" }; +static const char *g_irqs_names_map[HIBMC_MAX_VECTORS] =3D { "hibmc-vblank= ", "hibmc-hpd" }; =20 static irqreturn_t hibmc_interrupt(int irq, void *arg) { @@ -277,7 +277,6 @@ static void hibmc_unload(struct drm_device *dev) static int hibmc_msi_init(struct drm_device *dev) { struct pci_dev *pdev =3D to_pci_dev(dev->dev); - char name[32] =3D {0}; int valid_irq_num; int irq; int ret; @@ -292,9 +291,6 @@ static int hibmc_msi_init(struct drm_device *dev) valid_irq_num =3D ret; =20 for (int i =3D 0; i < valid_irq_num; i++) { - snprintf(name, ARRAY_SIZE(name) - 1, "%s-%s-%s", - dev->driver->name, pci_name(pdev), g_irqs_names_map[i]); - irq =3D pci_irq_vector(pdev, i); =20 if (i) @@ -302,10 +298,10 @@ static int hibmc_msi_init(struct drm_device *dev) ret =3D devm_request_threaded_irq(&pdev->dev, irq, hibmc_dp_interrupt, hibmc_dp_hpd_isr, - IRQF_SHARED, name, dev); + IRQF_SHARED, g_irqs_names_map[i], dev); else ret =3D devm_request_irq(&pdev->dev, irq, hibmc_interrupt, - IRQF_SHARED, name, dev); + IRQF_SHARED, g_irqs_names_map[i], dev); if (ret) { drm_err(dev, "install irq failed: %d\n", ret); return ret; --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46DDE283C82 for ; Fri, 20 Jun 2025 09:40:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412436; cv=none; b=gdPh7WztlfmZ8JuS0QfVv8xkY6hYjb/XvmN0c68SsydE9+vOGQFh470RxIYdBNDxD8lHVIdPr8MHAOMf9wHyrsRa81iTlWn0klfZKWG+3BcEkuSt5HQ8DfZfS5oqa6ehVcfhw4Na8zO3MESTVeLvx3GXBwgo2BzV0tkPHt3kq50= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412436; c=relaxed/simple; bh=4F03rQp8oRDiNRl0XYLEA7FvaOgJWBV/Nq4a9ykoyXU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lZEq1Sci2OoAcJBkpem2fj+7wYFmCiw2o9ebcmXeYOMNLjaYZ+59pvYIeb8tXT64GjAAg20JE6btI4npPJVo1nXg0wV/U4MXLynFD+bD9lP62JlhjXdKGPhtkqJiWq8haCE46rXhCd5Y2WeemEYbbGQuChdIjZ0I0jAZpqp85rQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4bNspk4CMNz28fVv; Fri, 20 Jun 2025 17:38:06 +0800 (CST) Received: from dggemv706-chm.china.huawei.com (unknown [10.3.19.33]) by mail.maildlp.com (Postfix) with ESMTPS id 3B1F61A0188; Fri, 20 Jun 2025 17:40:32 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv706-chm.china.huawei.com (10.3.19.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:31 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:31 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 04/10] drm/hisilicon/hibmc: fix the hibmc loaded failed bug Date: Fri, 20 Jun 2025 17:30:58 +0800 Message-ID: <20250620093104.2016196-5-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li When hibmc loaded failed, the driver use hibmc_unload to free the resource, but the mutexes in mode.config are not init, which will access an NULL pointer. Just change goto statement to return, because hibnc_hw_init() doesn't need to free anything. Fixes: b3df5e65cc03 ("drm/hibmc: Drop drm_vblank_cleanup") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/= drm/hisilicon/hibmc/hibmc_drm_drv.c index 4cdcc34070ee..ac552c339671 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c @@ -319,13 +319,13 @@ static int hibmc_load(struct drm_device *dev) =20 ret =3D hibmc_hw_init(priv); if (ret) - goto err; + return ret; =20 ret =3D drmm_vram_helper_init(dev, pci_resource_start(pdev, 0), pci_resource_len(pdev, 0)); if (ret) { drm_err(dev, "Error initializing VRAM MM; %d\n", ret); - goto err; + return ret; } =20 ret =3D hibmc_kms_init(priv); --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96122283FCD for ; Fri, 20 Jun 2025 09:40:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412442; cv=none; b=do0fT5ye8P1CAckzJvR/2y6liiVHePBQWIuoxlIjL1EWzB/k+u0tFNE82KY710lvLUs2uehat8kysSVh4ee7eFoEDv4AYprvHAbESsSesj5Uio8Ovgb9Q0/KHunYwo1vy83u31KTBRox5Uy5PycZK/pn+ekZB0ourQEYQfC4PMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412442; c=relaxed/simple; bh=xcs+1AiEwvrm4hA8lKhZDnmmh/XlLBwIYvotOA+Kyx8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lTq4kMgr2JblKt437ejmEt0i5kK+NQ7IL8y4pr+GHXaDtWgGvs0otaWV5LO1ZanbY3I2fSZ3wQ6sdW7YjFQFctLoChaoHk5FNB4phfNWBe03qAE0xyh2UUwTvD9mAygvI6QqHjKx0jJ8BER8Pw72fcJMdVg4Fgotpj1M4h2H/Dw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4bNsmF2fVpz10XSD; Fri, 20 Jun 2025 17:35:57 +0800 (CST) Received: from dggemv706-chm.china.huawei.com (unknown [10.3.19.33]) by mail.maildlp.com (Postfix) with ESMTPS id 721E014027A; Fri, 20 Jun 2025 17:40:32 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv706-chm.china.huawei.com (10.3.19.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:32 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:31 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 05/10] drm/hisilicon/hibmc: fix rare monitors cannot display problem Date: Fri, 20 Jun 2025 17:30:59 +0800 Message-ID: <20250620093104.2016196-6-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li In some case, the dp link training success at 8.1Gbps, but the sink's maximum supported rate is less than 8.1G. So change the default 8.1Gbps link rate to the rate that reads from devices' capabilities. Fixes: 54063d86e036 ("drm/hisilicon/hibmc: add dp link moduel in hibmc driv= ers") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- ChangeLog: v1 -> v2: - fix the tag, suggested by Dmitry Baryshkov. - add explanations in commit, suggested by Dmitry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h | 4 ++- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 6 +--- drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c | 33 +++++++++++++------ .../gpu/drm/hisilicon/hibmc/dp/dp_serdes.c | 12 ------- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h b/drivers/gpu/drm= /hisilicon/hibmc/dp/dp_comm.h index 4add05c7f161..18a961466ff0 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_comm.h @@ -25,6 +25,9 @@ struct hibmc_link_status { struct hibmc_link_cap { u8 link_rate; u8 lanes; + int rx_dpcd_revision; + bool is_tps3; + bool is_tps4; }; =20 struct hibmc_dp_link { @@ -62,7 +65,6 @@ struct hibmc_dp_dev { =20 void hibmc_dp_aux_init(struct hibmc_dp *dp); int hibmc_dp_link_training(struct hibmc_dp_dev *dp); -int hibmc_dp_serdes_init(struct hibmc_dp_dev *dp); int hibmc_dp_serdes_rate_switch(u8 rate, struct hibmc_dp_dev *dp); int hibmc_dp_serdes_set_tx_cfg(struct hibmc_dp_dev *dp, u8 train_set[HIBMC= _DP_LANE_NUM_MAX]); =20 diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.c index 8a965e143012..98cc534ba794 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -154,7 +154,6 @@ int hibmc_dp_hw_init(struct hibmc_dp *dp) { struct drm_device *drm_dev =3D dp->drm_dev; struct hibmc_dp_dev *dp_dev; - int ret; =20 dp_dev =3D devm_kzalloc(drm_dev->dev, sizeof(struct hibmc_dp_dev), GFP_KE= RNEL); if (!dp_dev) @@ -166,13 +165,10 @@ int hibmc_dp_hw_init(struct hibmc_dp *dp) =20 dp_dev->dev =3D drm_dev; dp_dev->base =3D dp->mmio + HIBMC_DP_OFFSET; + dp_dev->serdes_base =3D dp_dev->base + HIBMC_DP_HOST_OFFSET; =20 hibmc_dp_aux_init(dp); =20 - ret =3D hibmc_dp_serdes_init(dp_dev); - if (ret) - return ret; - dp_dev->link.cap.lanes =3D 0x2; dp_dev->link.cap.link_rate =3D DP_LINK_BW_8_1; =20 diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c b/drivers/gpu/drm= /hisilicon/hibmc/dp/dp_link.c index 74f7832ea53e..6c69fa2ae9cf 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_link.c @@ -39,6 +39,14 @@ static int hibmc_dp_link_training_configure(struct hibmc= _dp_dev *dp) /* enhanced frame */ hibmc_dp_reg_write_field(dp, HIBMC_DP_VIDEO_CTRL, HIBMC_DP_CFG_STREAM_FRA= ME_MODE, 0x1); =20 + ret =3D hibmc_dp_get_serdes_rate_cfg(dp); + if (ret < 0) + return ret; + + ret =3D hibmc_dp_serdes_rate_switch(ret, dp); + if (ret) + return ret; + /* set rate and lane count */ buf[0] =3D dp->link.cap.link_rate; buf[1] =3D DP_LANE_COUNT_ENHANCED_FRAME_EN | dp->link.cap.lanes; @@ -325,6 +333,20 @@ static int hibmc_dp_link_downgrade_training_eq(struct = hibmc_dp_dev *dp) return hibmc_dp_link_reduce_rate(dp); } =20 +static void hibmc_dp_update_caps(struct hibmc_dp_dev *dp) +{ + dp->link.cap.rx_dpcd_revision =3D dp->dpcd[DP_DPCD_REV]; + + dp->link.cap.is_tps3 =3D (dp->dpcd[DP_DPCD_REV] >=3D DP_DPCD_REV_13) && + (dp->dpcd[DP_MAX_LANE_COUNT] & DP_TPS3_SUPPORTED); + dp->link.cap.is_tps4 =3D (dp->dpcd[DP_DPCD_REV] >=3D DP_DPCD_REV_14) && + (dp->dpcd[DP_MAX_DOWNSPREAD] & DP_TPS4_SUPPORTED); + dp->link.cap.link_rate =3D dp->dpcd[DP_MAX_LINK_RATE]; + dp->link.cap.lanes =3D dp->dpcd[DP_MAX_LANE_COUNT] & DP_MAX_LANE_COUNT_MA= SK; + if (dp->link.cap.lanes > HIBMC_DP_LANE_NUM_MAX) + dp->link.cap.lanes =3D HIBMC_DP_LANE_NUM_MAX; +} + int hibmc_dp_link_training(struct hibmc_dp_dev *dp) { struct hibmc_dp_link *link =3D &dp->link; @@ -334,16 +356,7 @@ int hibmc_dp_link_training(struct hibmc_dp_dev *dp) if (ret) drm_err(dp->dev, "dp aux read dpcd failed, ret: %d\n", ret); =20 - dp->link.cap.link_rate =3D dp->dpcd[DP_MAX_LINK_RATE]; - dp->link.cap.lanes =3D 0x2; - - ret =3D hibmc_dp_get_serdes_rate_cfg(dp); - if (ret < 0) - return ret; - - ret =3D hibmc_dp_serdes_rate_switch(ret, dp); - if (ret) - return ret; + hibmc_dp_update_caps(dp); =20 while (true) { ret =3D hibmc_dp_link_training_cr_pre(dp); diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_serdes.c b/drivers/gpu/d= rm/hisilicon/hibmc/dp/dp_serdes.c index 676059d4c1e6..8191233aa965 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_serdes.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_serdes.c @@ -57,15 +57,3 @@ int hibmc_dp_serdes_rate_switch(u8 rate, struct hibmc_dp= _dev *dp) =20 return 0; } - -int hibmc_dp_serdes_init(struct hibmc_dp_dev *dp) -{ - dp->serdes_base =3D dp->base + HIBMC_DP_HOST_OFFSET; - - writel(FIELD_PREP(HIBMC_DP_PMA_TXDEEMPH, DP_SERDES_VOL0_PRE0), - dp->serdes_base + HIBMC_DP_PMA_LANE0_OFFSET); - writel(FIELD_PREP(HIBMC_DP_PMA_TXDEEMPH, DP_SERDES_VOL0_PRE0), - dp->serdes_base + HIBMC_DP_PMA_LANE1_OFFSET); - - return hibmc_dp_serdes_rate_switch(DP_SERDES_BW_8_1, dp); -} --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA54E283C8D for ; Fri, 20 Jun 2025 09:40:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412438; cv=none; b=Q8gA/5CrmTIMz72VrefZzT22VuFM0C48Wt0vuNGTAgolO2vXSk6cKU2OTf/ro/Hq14wa8WO47xoszrvje04Cf1Ju3OIvm8A4IHrFxUvO74iob50dw4nZCSK4agRQi4ES9EyhHeQDLLvNcdesZUYYiWJBuQW0IZWfIkHEudyU3bU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412438; c=relaxed/simple; bh=/ijnEtaFvPdoKs2uS9Jhy1lXP6WnzkzuD2IFg4iqfRw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DH9ls4e+aKOuQGjM3cUHCaWEjtUHtFeY9gmM0m7TX0lbML+U3ZJR5KkwbxEO8KelcoJf0iiB2JZbY22Kj1y9L2m0zNZIgv3c83WAcsvQHtgexbxFbB23Ozy8AYGW/cunHUVOpO2RI0LzlPNeRom4fvDU820Dd9E1v3oJdoB9/8Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4bNstb2bdXz2y8wF; Fri, 20 Jun 2025 17:41:27 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id 247441A016C; Fri, 20 Jun 2025 17:40:33 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv712-chm.china.huawei.com (10.1.198.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:32 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:32 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 06/10] drm/hisilicon/hibmc: add dp mode valid check Date: Fri, 20 Jun 2025 17:31:00 +0800 Message-ID: <20250620093104.2016196-7-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li If DP is connected, add mode check and BW check in mode_valid_ctx() to ensure DP's cfg is usable. Fixes: f9698f802e50 ("drm/hisilicon/hibmc: Restructuring the header dp_reg.= h") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- ChangeLog: v1 -> v2: - delete if (!dp->is_connected) in hibmc_dp_mode_valid(), suggested by Dm= itry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 10 ++++ drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 6 +++ .../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 51 +++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.c index 98cc534ba794..5b1f943b601c 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -273,6 +273,16 @@ void hibmc_dp_reset_link(struct hibmc_dp *dp) dp->dp_dev->link.status.channel_equalized =3D false; } =20 +u8 hibmc_dp_get_link_rate(struct hibmc_dp *dp) +{ + return dp->dp_dev->link.cap.link_rate; +} + +u8 hibmc_dp_get_lanes(struct hibmc_dp *dp) +{ + return dp->dp_dev->link.cap.lanes; +} + static const struct hibmc_dp_color_raw g_rgb_raw[] =3D { {CBAR_COLOR_BAR, 0x000, 0x000, 0x000}, {CBAR_WHITE, 0xfff, 0xfff, 0xfff}, diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.h index 9b45e88e47e4..0059a2648a38 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h @@ -12,6 +12,10 @@ #include #include =20 +/* 27 * 10000000 * 80% =3D 216000000 */ +#define DP_MODE_VALI_CAL 216000000 +#define BPP_24 24 + struct hibmc_dp_dev; =20 enum hibmc_dp_cbar_pattern { @@ -62,5 +66,7 @@ void hibmc_dp_reset_link(struct hibmc_dp *dp); void hibmc_dp_hpd_cfg(struct hibmc_dp *dp); void hibmc_dp_enable_int(struct hibmc_dp *dp); void hibmc_dp_disable_int(struct hibmc_dp *dp); +u8 hibmc_dp_get_link_rate(struct hibmc_dp *dp); +u8 hibmc_dp_get_lanes(struct hibmc_dp *dp); =20 #endif diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c b/drivers/gpu/d= rm/hisilicon/hibmc/hibmc_drm_dp.c index c0de796225b7..40f95880b278 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c @@ -15,6 +15,28 @@ =20 #define DP_MASKED_SINK_HPD_PLUG_INT BIT(2) =20 +struct hibmc_dp_disp_clk { + u16 hdisplay; + u16 vdisplay; + u32 clock; +}; + +static const struct hibmc_dp_disp_clk hibmc_dp_clk_table[] =3D { + {640, 480, 25175}, /* 25175 khz */ + {800, 600, 40000}, /* 40000 khz */ + {1024, 768, 65000}, /* 65000 khz */ + {1152, 864, 80000}, /* 80000 khz */ + {1280, 768, 79500}, /* 79500 khz */ + {1280, 720, 74250}, /* 74250 khz */ + {1280, 960, 108000}, /* 108000 khz */ + {1280, 1024, 108000}, /* 108000 khz */ + {1440, 900, 106500}, /* 106500 khz */ + {1600, 900, 108000}, /* 108000 khz */ + {1600, 1200, 162000}, /* 162000 khz */ + {1920, 1080, 148500}, /* 148500 khz */ + {1920, 1200, 193250}, /* 193250 khz */ +}; + static int hibmc_dp_connector_get_modes(struct drm_connector *connector) { const struct drm_edid *drm_edid; @@ -49,9 +71,38 @@ static int hibmc_dp_detect(struct drm_connector *connect= or, return connector_status_disconnected; } =20 +static int hibmc_dp_mode_valid(struct drm_connector *connector, + const struct drm_display_mode *mode, + struct drm_modeset_acquire_ctx *ctx, + enum drm_mode_status *status) +{ + struct hibmc_dp *dp =3D to_hibmc_dp(connector); + u64 cur_val, max_val; + + /* check DP link BW */ + cur_val =3D (u64)mode->htotal * mode->vtotal * drm_mode_vrefresh(mode) * = BPP_24; + max_val =3D (u64)hibmc_dp_get_link_rate(dp) * DP_MODE_VALI_CAL * hibmc_dp= _get_lanes(dp); + + *status =3D cur_val > max_val ? MODE_CLOCK_HIGH : MODE_OK; + + /* check the clock */ + for (size_t i =3D 0; i < ARRAY_SIZE(hibmc_dp_clk_table); i++) { + if (hibmc_dp_clk_table[i].hdisplay =3D=3D mode->hdisplay && + hibmc_dp_clk_table[i].vdisplay =3D=3D mode->vdisplay) { + if (hibmc_dp_clk_table[i].clock !=3D mode->clock) { + *status =3D MODE_CLOCK_RANGE; + return 0; + } + } + } + + return 0; +} + static const struct drm_connector_helper_funcs hibmc_dp_conn_helper_funcs = =3D { .get_modes =3D hibmc_dp_connector_get_modes, .detect_ctx =3D hibmc_dp_detect, + .mode_valid_ctx =3D hibmc_dp_mode_valid, }; =20 static int hibmc_dp_late_register(struct drm_connector *connector) --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35D0827CCF0 for ; Fri, 20 Jun 2025 09:40:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412436; cv=none; b=c4rC3NaqhngYBPtmD/uNE6EuWd2W7kDqh4epLtbbuMTiXiCdhXRizKfduWpcLn6/YhG7+VcGaPRjahgRU0f7/ZMt3rcVmodocZT4/6MOq37i5GLveFOgMgS9mKPuZadntniT63bFvzhpaJTfhKKKScJI+/2yNQ8RR7yRE4mRjLo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412436; c=relaxed/simple; bh=AnjOHa+qv9lnzUlSc0ChLjErf3qcfsW5NrUfWsFhkhQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JO4GALg9wE9HcPvqZI69BWkRs6SjA77Q3Fe5JhA64caKzKAZZKTD94ldrVZ/ZTiNKuLzfaae6se0GJbb+qHa3jUz3AO7PnkFhwBHbS7LWVf5E8AClN5L6UeUBU32QfnJiLwuKxHISgPuaBoHs8p/6SMwepAFCwjuOa7sTu934QI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4bNspl5R4vz28fWQ; Fri, 20 Jun 2025 17:38:07 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id 660121A016C; Fri, 20 Jun 2025 17:40:33 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv712-chm.china.huawei.com (10.1.198.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:33 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:32 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 07/10] drm/hisilicon/hibmc: fix dp and vga cannot show together Date: Fri, 20 Jun 2025 17:31:01 +0800 Message-ID: <20250620093104.2016196-8-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li If VGA and DP connected together, there will be only one can get crtc. Add encoder possible_clones to support two connectors enable. Fixes: 0ab6ea261c1f ("drm/hisilicon/hibmc: add dp module in hibmc") Fixes: 3c7623fb5bb6 ("drm/hisilicon/hibmc: Enable this hot plug detect of i= rq feature") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- ChangeLog: v1 -> v2: - don't tie VGA and DP status, suggested by Dmitry Baryshkov. - use crtc clone to let 2 connectors can display simultaneous --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/= drm/hisilicon/hibmc/hibmc_drm_drv.c index ac552c339671..289304500ab0 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c @@ -115,6 +115,8 @@ static const struct drm_mode_config_funcs hibmc_mode_fu= ncs =3D { static int hibmc_kms_init(struct hibmc_drm_private *priv) { struct drm_device *dev =3D &priv->dev; + struct drm_encoder *encoder; + u32 clone_mask =3D 0; int ret; =20 ret =3D drmm_mode_config_init(dev); @@ -154,6 +156,12 @@ static int hibmc_kms_init(struct hibmc_drm_private *pr= iv) return ret; } =20 + drm_for_each_encoder(encoder, dev) + clone_mask |=3D drm_encoder_mask(encoder); + + drm_for_each_encoder(encoder, dev) + encoder->possible_clones =3D clone_mask; + return 0; } =20 --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0408A28936F for ; Fri, 20 Jun 2025 09:40:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412443; cv=none; b=mUsjK/jCn+5uDXgc83bIjbhk/6vTNH9gT6bbkQuc1r+AE4UzQJkCsjFljKW3DgsWxzks2lk0C/7GMr6kGBW1W3deJ8mb9QfoFKAPJSVO5zEB/fDqm94Xe/YnljKfBD40Y1Ks4DeAv6J2pKnWh+LfXn/xwv/ZAef8d+McZViWV4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412443; c=relaxed/simple; bh=CqTl0mMy1u6JMU3k3FTj/LetaayA/gmIcDsps8OsrH8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=R4INBicFg1l/nMHwdNy77aKHDpjPGvUPUG0aoysXDQUMXgRKLGYszNRNoVypA2Ce6fRgp6mBfj+9JSTpQnyA3EV+tI+gPmay+0ldPfnyiokQSfGbbiYCwi+8AEUgnmeQ4yn4RpGhgrWzVXA5hlbrXc1aZ+GCqgyl/N9pGi4vq6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4bNsmG5z96z10XT7; Fri, 20 Jun 2025 17:35:58 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id E609A180236; Fri, 20 Jun 2025 17:40:33 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv705-chm.china.huawei.com (10.3.19.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:33 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:32 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 08/10] drm/hisilicon/hibmc: fix no showing when no connectors connected Date: Fri, 20 Jun 2025 17:31:02 +0800 Message-ID: <20250620093104.2016196-9-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li Our chip support KVM over IP feature, so hibmc driver need to support displaying without any connectors plugged in. Deleting the detect_ctx() of VGA to make it connected when no connector is detected. Fixes: 4c962bc929f1 ("drm/hisilicon/hibmc: Add vga connector detect functio= ns") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu= /drm/hisilicon/hibmc/hibmc_drm_vdac.c index 841e81f47b68..953474d04b5c 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c @@ -60,7 +60,6 @@ static void hibmc_connector_destroy(struct drm_connector = *connector) static const struct drm_connector_helper_funcs hibmc_connector_helper_funcs =3D { .get_modes =3D hibmc_connector_get_modes, - .detect_ctx =3D drm_connector_helper_detect_from_ddc, }; =20 static const struct drm_connector_funcs hibmc_connector_funcs =3D { --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0715F289342 for ; Fri, 20 Jun 2025 09:40:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412441; cv=none; b=oVH7t3VygARNPVtAEEC2tBXjKAbpXpxpOnFSbFr/cpf14hCu7DvSj8kyelHECBSJoaPLeNxgEkaYwV1KAgUuzxIGWbqwe8wtvUGSHkZm9JBGLr1BJkZyaNvmUbK7bLGK2Ex0QR1vxk1k9mcTP1K0bYxJOt9EeqmqtmsgYGhdKGQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412441; c=relaxed/simple; bh=dco+88cc+qOlIkE6vMe00lxJu53rq044z/EJKJb9neY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SXzXUC/Zu9cRHkaQjftQJDEo3Zo69xWWOR6GGT/XVAYWMUMwQ6KFKEt4OfqCyUloHUThao3WTBnAylwvAryn7Qsu0KduTOPeMkZKTWlZwRe/MJh72rCdQz1a8s+WQcqhKG1VJ/t5tFWwbMOpckI/7I/SdqJ7b79tWeAHWG0b8xQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4bNsn52JYxz2Cd53; Fri, 20 Jun 2025 17:36:41 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id 9B685180043; Fri, 20 Jun 2025 17:40:36 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv705-chm.china.huawei.com (10.3.19.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:33 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:33 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 09/10] drm/hisilicon/hibmc: fix no showing problem with loading hibmc manually Date: Fri, 20 Jun 2025 17:31:03 +0800 Message-ID: <20250620093104.2016196-10-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li When using command rmmod and insmod, there is no showing in second time insmoding. Because DP controller won't send HPD signals, if connection doesn't change or controller isn't reset. So add reset before unreset in hibmc_dp_hw_init(). Fixes: 3c7623fb5bb6 ("drm/hisilicon/hibmc: Enable this hot plug detect of i= rq feature") Fixes: 94ee73ee3020 ("drm/hisilicon/hibmc: add dp hw moduel in hibmc driver= ") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- ChangeLog: v1 -> v2: - fix the tag, suggested by Dmitry Baryshkov. - separate the patch, suggested by Dmitry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.c index 5b1f943b601c..edb7539d830e 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -178,6 +178,8 @@ int hibmc_dp_hw_init(struct hibmc_dp *dp) writel(0, dp_dev->base + HIBMC_DP_INTR_ENABLE); writel(HIBMC_DP_INT_RST, dp_dev->base + HIBMC_DP_INTR_ORIGINAL_STATUS); /* rst */ + writel(0, dp_dev->base + HIBMC_DP_DPTX_RST_CTRL); + usleep_range(30, 50); writel(HIBMC_DP_DPTX_RST, dp_dev->base + HIBMC_DP_DPTX_RST_CTRL); /* clock enable */ writel(HIBMC_DP_CLK_EN, dp_dev->base + HIBMC_DP_DPTX_CLK_CTRL); --=20 2.33.0 From nobody Thu Oct 9 04:19:41 2025 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EED7227CCF0 for ; Fri, 20 Jun 2025 09:40:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412440; cv=none; b=m7tAqHN+a7JgxKnoktPWZANYCuyYU3ZFJ2BzPUXBMQQP0VBpgNk42Ki1l9UPYnSf9ZOA4J4oYm17vWBRVsfc4Eg01JGl7DyBKKAGrGSKc853Jq6dZUQiwko6D3Rwy+G9J9KqkxP2sybF526HQQZ2oLD9IkO22mVDKeNkTXTE1jA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750412440; c=relaxed/simple; bh=XOH54/zjPvf9VfACbhCE8L/pumAVzyXtBKoFSLujQhc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=DUKLJYBANHhC+M41MjCTD7rY5BnO1H8fYEcc8atRaUGB1cUzMKmPpctw/blO4otA+sCmCQFVzj8Wfp7yNgZ9niKzcFPGgJ9I8rVHoOFGmbkOZUp+QxFZWykg/rO/DwD4JPsiC1MWDUYnPYHjsg0yF0A6fQLU89/w1GrY1lnvi5w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4bNsqt2h70z2BdXF; Fri, 20 Jun 2025 17:39:06 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id C7BF21A0188; Fri, 20 Jun 2025 17:40:36 +0800 (CST) Received: from kwepemq100007.china.huawei.com (7.202.195.175) by dggemv705-chm.china.huawei.com (10.3.19.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:36 +0800 Received: from localhost.huawei.com (10.169.71.169) by kwepemq100007.china.huawei.com (7.202.195.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 20 Jun 2025 17:40:33 +0800 From: Yongbang Shi To: , , , , , , , , CC: , , , , , , , , , Subject: [PATCH v2 drm-dp 10/10] drm/hisilicon/hibmc: adapting modification for the former commit Date: Fri, 20 Jun 2025 17:31:04 +0800 Message-ID: <20250620093104.2016196-11-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250620093104.2016196-1-shiyongbang@huawei.com> References: <20250620093104.2016196-1-shiyongbang@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) Content-Type: text/plain; charset="utf-8" From: Baihan Li Add colorbar disable operation and move hdcp opreation behind the reset controller operation. Fixes: 3c7623fb5bb6 ("drm/hisilicon/hibmc: Enable this hot plug detect of i= rq feature") Fixes: 94ee73ee3020 ("drm/hisilicon/hibmc: add dp hw moduel in hibmc driver= ") Signed-off-by: Baihan Li Signed-off-by: Yongbang Shi --- ChangeLog: v1 -> v2: - separate the patch, suggested by Dmitry Baryshkov. --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c b/drivers/gpu/drm/h= isilicon/hibmc/dp/dp_hw.c index edb7539d830e..bb19636caf77 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -172,15 +172,17 @@ int hibmc_dp_hw_init(struct hibmc_dp *dp) dp_dev->link.cap.lanes =3D 0x2; dp_dev->link.cap.link_rate =3D DP_LINK_BW_8_1; =20 - /* hdcp data */ - writel(HIBMC_DP_HDCP, dp_dev->base + HIBMC_DP_HDCP_CFG); /* int init */ writel(0, dp_dev->base + HIBMC_DP_INTR_ENABLE); writel(HIBMC_DP_INT_RST, dp_dev->base + HIBMC_DP_INTR_ORIGINAL_STATUS); + /* clr colorbar */ + writel(0, dp_dev->base + HIBMC_DP_COLOR_BAR_CTRL); /* rst */ writel(0, dp_dev->base + HIBMC_DP_DPTX_RST_CTRL); usleep_range(30, 50); writel(HIBMC_DP_DPTX_RST, dp_dev->base + HIBMC_DP_DPTX_RST_CTRL); + /* hdcp data */ + writel(HIBMC_DP_HDCP, dp_dev->base + HIBMC_DP_HDCP_CFG); /* clock enable */ writel(HIBMC_DP_CLK_EN, dp_dev->base + HIBMC_DP_DPTX_CLK_CTRL); =20 --=20 2.33.0