From nobody Thu Dec 18 04:32:12 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 D02BC22A4E4 for ; Fri, 30 May 2025 10:03:43 +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=1748599426; cv=none; b=AF3mtG5w6AmoFTcFdTLdaE25lJIi9eoIz6thVTbGIX5U9R3Dzjvba5P5F4LAFBu6ct9h5ksUqf8vsMovffdqzzB9QF9Rd3WTJp6YqmFVeglLnQGxWVnkiQmDp6a/we30e9VfdkMgWTgwTycM6aM1TpCkJ8NLfdJfnzm3MGzRGe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599426; c=relaxed/simple; bh=HGyPSVtzdcBDpGufuO3ijtSqnKP+AC9vcerGQQxlGgM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=V1BoKD+wghmOakGQWsdZc/5fx5hZn6gM0oeZsTNwXljzjFA7XtONhWkyr5jGOyMpYYCePROKHsq8nd41QwwtECe2nqrlyqIqJLRpztuYiBncnIyo7/ZutO3A46KzVaHNLxXI3RkuBqwPuefv1tgZH6n61qszmTGtUSBoHaAtQcA= 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 4b7zLb357lz1fy6H; Fri, 30 May 2025 18:02:31 +0800 (CST) Received: from dggemv706-chm.china.huawei.com (unknown [10.3.19.33]) by mail.maildlp.com (Postfix) with ESMTPS id 0DF2218005F; Fri, 30 May 2025 18:03:36 +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, 30 May 2025 18:03:35 +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, 30 May 2025 18:03:35 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 01/10] drm/hisilicon/hibmc: fix the i2c device resource leak when vdac init failed Date: Fri, 30 May 2025 17:54:23 +0800 Message-ID: <20250530095432.1206966-2-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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: 94ee73ee3020 ("drm/hisilicon/hibmc: add dp hw moduel in hibmc driver= ") Signed-off-by: Baihan Li --- 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 | 9 +++++++-- 3 files changed, 13 insertions(+), 2 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..36401b46034c 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c @@ -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 Dec 18 04:32:12 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 3D9D22222C0 for ; Fri, 30 May 2025 10:03: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=1748599422; cv=none; b=lwYpA++HwOUtJfYZwyPSTr/jlMXY36Wzs+jTzf8w1AqzdqkMI6VTSyuKQAYdGIaCJKdE1INe5I0Z6v2X0rP8/7tFqleNwXJ93F3WB2p6s2/QLQcUS4N+lgeXAntmXTJEOr/398oBV3CJ1+5GHdNQPIcX5XgeDkBW5O3bl8xiXcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599422; c=relaxed/simple; bh=gNpJ+H6/yFGkTaocCW9K0hFPX5Orp7Ia0BuXtwB+U+I=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=CM0C1AJKT/LSfWc7nhms5wyZTt+U9U2msD9K5ytsMe1SXNvkIe0WxbOwEh2zxFZ1L4uKCekRE8YmZnVTAUvY9wPyANTrnpVKY1+mHGI5+soJmrulCNwO29BPNfq38E7tYw1fI4PzwOQp83imKPIjpHNGCuNH78d1dj+TkKJv/f0= 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.162.112]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4b7zLd1bgSz23jSL; Fri, 30 May 2025 18:02:33 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id AD1281401E9; Fri, 30 May 2025 18:03:36 +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, 30 May 2025 18:03: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, 30 May 2025 18:03:35 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 02/10] drm/hisilicon/hibmc: fix dp probabilistical detect errors after HPD irq Date: Fri, 30 May 2025 17:54:24 +0800 Message-ID: <20250530095432.1206966-3-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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 a flag to hold the sink status, and changed detect_ctx() functions by using flag to check status. Fixes: 3c7623fb5bb6 ("drm/hisilicon/hibmc: Enable this hot plug detect of i= rq feature") Signed-off-by: Baihan Li --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 1 + .../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 38 +++++++++++++------ 2 files changed, 28 insertions(+), 11 deletions(-) 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..68867475508c 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h @@ -50,6 +50,7 @@ struct hibmc_dp { struct drm_dp_aux aux; struct hibmc_dp_cbar_cfg cfg; u32 irq_status; + int hpd_status; }; =20 int hibmc_dp_hw_init(struct hibmc_dp *dp); 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..191fb434baa7 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c @@ -13,7 +13,8 @@ #include "hibmc_drm_drv.h" #include "dp/dp_hw.h" =20 -#define DP_MASKED_SINK_HPD_PLUG_INT BIT(2) +#define HIBMC_DP_MASKED_SINK_HPD_PLUG_INT BIT(2) +#define HIBMC_DP_MASKED_SINK_HPD_UNPLUG_INT BIT(3) =20 static int hibmc_dp_connector_get_modes(struct drm_connector *connector) { @@ -34,9 +35,12 @@ 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); =20 - return drm_connector_helper_detect_from_ddc(connector, ctx, force); + if (dp->hpd_status) + return connector_status_connected; + else + return connector_status_disconnected; } =20 static const struct drm_connector_helper_funcs hibmc_dp_conn_helper_funcs = =3D { @@ -115,22 +119,34 @@ irqreturn_t hibmc_dp_hpd_isr(int irq, void *arg) { struct drm_device *dev =3D (struct drm_device *)arg; struct hibmc_drm_private *priv =3D to_hibmc_drm_private(dev); + struct hibmc_dp *dp =3D &priv->dp; int idx; =20 if (!drm_dev_enter(dev, &idx)) return -ENODEV; =20 - if (priv->dp.irq_status & DP_MASKED_SINK_HPD_PLUG_INT) { - drm_dbg_dp(&priv->dev, "HPD IN isr occur!\n"); - hibmc_dp_hpd_cfg(&priv->dp); + if (dp->hpd_status) { /* only check unplug int when the last status is HP= D in */ + if ((dp->irq_status & HIBMC_DP_MASKED_SINK_HPD_UNPLUG_INT)) { + drm_dbg_dp(dev, "HPD OUT isr occur."); + hibmc_dp_reset_link(dp); + dp->hpd_status =3D 0; + if (dev->registered) + drm_connector_helper_hpd_irq_event(&dp->connector); + } else { + drm_warn(dev, "HPD OUT occurs, irq status err: %u", dp->irq_status); + } } else { - drm_dbg_dp(&priv->dev, "HPD OUT isr occur!\n"); - hibmc_dp_reset_link(&priv->dp); + if (dp->irq_status & HIBMC_DP_MASKED_SINK_HPD_PLUG_INT) { + drm_dbg_dp(&priv->dev, "HPD IN isr occur."); + hibmc_dp_hpd_cfg(dp); + dp->hpd_status =3D 1; + if (dev->registered) + drm_connector_helper_hpd_irq_event(&dp->connector); + } else { + drm_warn(dev, "HPD IN occurs, irq status err: %u", dp->irq_status); + } } =20 - if (dev->registered) - drm_connector_helper_hpd_irq_event(&priv->dp.connector); - drm_dev_exit(idx); =20 return IRQ_HANDLED; --=20 2.33.0 From nobody Thu Dec 18 04:32:12 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 3D96D221FC9 for ; Fri, 30 May 2025 10:03: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=1748599422; cv=none; b=jagIo+HOs44OPQSTon5GMoPS5AqosWEJkv16rcThT8cP+PPxGZCsRFCACQTkxhLkCzVgD3w+d7xBZTo7btkntP8hEsP/1xCfPd15vZMsbRUTdWcNAkVPxbR2g8m3wagLaCACj3MyucuPNjgXDhx8td5j1jHuCQT3gOYJrgAmUa8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599422; c=relaxed/simple; bh=8it403lhkvaN3M2kdx0D7sGFD/Y9wx01vswL0y7oAqg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nxYqqZxDPpYYUQejmNtzt42s+grz6BQnMd1sKbDPtEKAXE1jg58iCnsTC5lSiytt9GeW2p8yK7nlLVKriX3he8Fzg8w9jpam7GvGLjcjMTrWtXQ7jK99MCrgo0AFiIiEueAuFo4kGZwecepXyH5xkKjgVm7igP91Y0bHeM5eAxQ= 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.234]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4b7zLd2g58z23jkK; Fri, 30 May 2025 18:02:33 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id D35B8140113; Fri, 30 May 2025 18:03:36 +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, 30 May 2025 18:03: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, 30 May 2025 18:03:36 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 03/10] drm/hisilicon/hibmc: fix irq_request()'s irq name variable is local Date: Fri, 30 May 2025 17:54:25 +0800 Message-ID: <20250530095432.1206966-4-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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 of irq name is passed to devm_request_threaded_irq(), 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 --- 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 Dec 18 04:32:12 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 ADB9422B8C1 for ; Fri, 30 May 2025 10:03:45 +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=1748599427; cv=none; b=GVX0moMb5qwNkmurEwHWpJ6Uf0QgqtefrW3iSLvzq7sLc4+7jGQfeWk1nZzJ36bjugl86dRRWztD+frHe3hy7xrOoof3Y6qzfkGUCngmS79I8FyW0J6M5MMlEJy7nOvCWNGdPMsLpNAVIBWCyEIua3HLPEeCYgiwzzFvyGwRDy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599427; c=relaxed/simple; bh=kX4B4BQksI3+MU7dHz52m2j0bAaVorfoROVGij9J0dQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ET/9ZX82yVVpHnUwxV5UluQ55LsQpPhqUXe//uPCcDK4s2PtBkPU1xVXzDKX+kuLhzd5phK67gsend9QezckVO6CylZMH7V+vChfDy3YSS2CSe2PmpjwYAaxwHPagQ7WYrqHOgKOsoyvWjapr1CsraZZbmMg9c0SgL+pSK9GnsY= 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.214]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4b7zLc6nZSz1fy6C; Fri, 30 May 2025 18:02:32 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id 8D4AF1A016C; Fri, 30 May 2025 18:03:37 +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, 30 May 2025 18:03:37 +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, 30 May 2025 18:03:36 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 04/10] drm/hisilicon/hibmc: fix the hibmc loaded failed bug Date: Fri, 30 May 2025 17:54:26 +0800 Message-ID: <20250530095432.1206966-5-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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. Fixes: b3df5e65cc03 ("drm/hibmc: Drop drm_vblank_cleanup") Reported-by: oushixiong1025@163.com Signed-off-by: Baihan Li --- 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 Dec 18 04:32:12 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 959D72222A0 for ; Fri, 30 May 2025 10:03:40 +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=1748599422; cv=none; b=BrUVfba+pCICd+iEnrCkkGdhFIn+FlMvK38XsvWz/6BqfUOwxX1QY9eSlFkuQjZjOxpE+tQKYfLJhfcvTDhjVKEuZ4NN9MGdEIl3ASWf5wgSBRpNtwLPMOrw1+2sQ33eBT23xUC+8j2xCMWsUNzsvNuQKFBxoPLl5FrEaBsWbsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599422; c=relaxed/simple; bh=8Dds+AW4wKXW0QoNFVJzCxEfXvXy5FdAF5wXO8RoNDg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sDksy8w6gz7V7rE3pTwiNJGProDReDC68HPCa2UCTvqX86tEywdQyia0ZLyXq2pb2lZ0ikbJyu0YOzhP9pbihVGzeN40y6MwGteR3nuZWvJvuJ7qQlG6V88epwXENKagouqvkeRElJsOcQUKH5BxqAVV70FaCe1ohUfS5VlOr34= 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.162.112]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4b7zLd5ygzz2TSL4; Fri, 30 May 2025 18:02:33 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id BFB8E1401E9; Fri, 30 May 2025 18:03:37 +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, 30 May 2025 18:03:37 +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, 30 May 2025 18:03:37 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 05/10] drm/hisilicon/hibmc: fix rare monitors cannot display problem Date: Fri, 30 May 2025 17:54:27 +0800 Message-ID: <20250530095432.1206966-6-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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 DP Link training successful at 8.1Gbps with some monitors' max link rate are 2.7Gbps. So change the default 8.1Gbps link rate to the rate that reads from devices' capabilities. Fixes: f9698f802e50 ("drm/hisilicon/hibmc: Restructuring the header dp_reg.= h") Signed-off-by: Baihan Li --- 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 8f0daec7d174..ee0b543afd7f 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 Dec 18 04:32:12 2025 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) (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 C487F22B8D0 for ; Fri, 30 May 2025 10:03:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.189 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599428; cv=none; b=LfHhzhuSuVpkDD+BDjibOqWPPY6XP0y7yk0djSxWrmVf6gPOZ0SAvcOpIlA5PUz9T54S2FYVQ1Im3D8jpKO+a1kg9wGd61VtO0SEDXEgQ41JZ9cTSuRq1KJ2tFIL+Ie5nGexqqahCIHICLBsp3AjR4SivW0sc7wGCVnvxYbh3ZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599428; c=relaxed/simple; bh=wZ3ir5p1+a+IHOaGqQdqBBbDJXEiSVgRLAr6Z2xxecs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fMcB842CpgLkj/7USWGS/ZNv5tDzmgFNf07aIJ/e6uwfF3LkCtpDq8/++cj5m9ljR3iWZwXco050784Kyj3srzKKVnUMw7DeG0RDKZMvmWFaUS2uCbcXarAQC9y2dqXDAf4ZhnqzVUrO9lSF2ap6+xWs4e7qmL33mVozNjHV38k= 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.189 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.252]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4b7zHX1ZfWzCtWk; Fri, 30 May 2025 17:59:52 +0800 (CST) Received: from dggemv706-chm.china.huawei.com (unknown [10.3.19.33]) by mail.maildlp.com (Postfix) with ESMTPS id 59293180B27; Fri, 30 May 2025 18:03:38 +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, 30 May 2025 18:03:38 +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, 30 May 2025 18:03:37 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 06/10] drm/hisilicon/hibmc: add dp mode valid check Date: Fri, 30 May 2025 17:54:28 +0800 Message-ID: <20250530095432.1206966-7-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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 --- drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c | 10 ++++ drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.h | 7 +++ .../gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 59 +++++++++++++++++++ 3 files changed, 76 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 ee0b543afd7f..4f93d60b932b 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -259,6 +259,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 68867475508c..ebc7256ad006 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 { @@ -51,6 +55,7 @@ struct hibmc_dp { struct hibmc_dp_cbar_cfg cfg; u32 irq_status; int hpd_status; + bool is_connected; }; =20 int hibmc_dp_hw_init(struct hibmc_dp *dp); @@ -61,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 191fb434baa7..e4b13f21ccb3 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c @@ -16,8 +16,31 @@ #define HIBMC_DP_MASKED_SINK_HPD_PLUG_INT BIT(2) #define HIBMC_DP_MASKED_SINK_HPD_UNPLUG_INT BIT(3) =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) { + struct hibmc_dp *dp =3D to_hibmc_dp(connector); const struct drm_edid *drm_edid; int count; =20 @@ -27,6 +50,8 @@ static int hibmc_dp_connector_get_modes(struct drm_connec= tor *connector) =20 count =3D drm_edid_connector_add_modes(connector); =20 + dp->is_connected =3D !!count; + drm_edid_free(drm_edid); =20 return count; @@ -43,9 +68,43 @@ 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; + + if (!dp->is_connected) { + *status =3D MODE_OK; + return 0; + } + + /* 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); + if (cur_val > max_val) + *status =3D MODE_CLOCK_HIGH; + else + *status =3D 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; +} + 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 Dec 18 04:32:12 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 95A352222C2 for ; Fri, 30 May 2025 10:03:40 +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=1748599422; cv=none; b=s8CohhCPjMhmddQDwpQKDO4SuwyuyW05MxaaJje00JWGlGP1BM6IiOlOQBKuPMkliYCCLQ97qxrQ7htsp2dQnrdmPGjTAKCPw4HUKd/BYyQsbFLsWbU2DPgyXWa4Wg9e4VBFTp3fesjbf4RSr1WdTWAIe7W3/wyXHmddqCVR7js= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599422; c=relaxed/simple; bh=6k00c+g1toqFlC7nSAbHPwqsqMHFp72vbTSQHJdqPUs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XIx4dWLbEBHUz/s3qN86AhuqER1qJfBRHtTlvutAQG+9krp/dNyszK3SWnJ+5t8ziXgdlMNuSyGSerrHhHqNQr06KZXlVFRP/OeQZtxjqTaRSjLCFtaLSbu8P83J5TxqNfCykFfCvHy90RHc1Uc0JHMDxxPK5gZwbpSZhDwzTWY= 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.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4b7zLf4QPJz2TSL7; Fri, 30 May 2025 18:02:34 +0800 (CST) Received: from dggemv706-chm.china.huawei.com (unknown [10.3.19.33]) by mail.maildlp.com (Postfix) with ESMTPS id 8B3EF140293; Fri, 30 May 2025 18:03:38 +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, 30 May 2025 18:03:38 +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, 30 May 2025 18:03:37 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 07/10] drm/hisilicon/hibmc: add dp encoder modeset Date: Fri, 30 May 2025 17:54:29 +0800 Message-ID: <20250530095432.1206966-8-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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 GPU display control enable in dp_mode_set(), which is already in vdac's mode_set, however, if vdac is not connected, GPU cannot work. Fixes: f9698f802e50 ("drm/hisilicon/hibmc: Restructuring the header dp_reg.= h") Signed-off-by: Baihan Li --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c b/drivers/gpu/d= rm/hisilicon/hibmc/hibmc_drm_dp.c index e4b13f21ccb3..d9ae7567ebb7 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_dp.c @@ -11,6 +11,7 @@ #include =20 #include "hibmc_drm_drv.h" +#include "hibmc_drm_regs.h" #include "dp/dp_hw.h" =20 #define HIBMC_DP_MASKED_SINK_HPD_PLUG_INT BIT(2) @@ -169,9 +170,26 @@ static void hibmc_dp_encoder_disable(struct drm_encode= r *drm_encoder, hibmc_dp_display_en(dp, false); } =20 +static void hibmc_dp_encoder_mode_set(struct drm_encoder *encoder, + struct drm_crtc_state *crtc_state, + struct drm_connector_state *conn_state) +{ + struct drm_device *dev =3D encoder->dev; + struct hibmc_drm_private *priv =3D to_hibmc_drm_private(dev); + u32 reg; + + reg =3D readl(priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE); + reg |=3D HIBMC_DISPLAY_CONTROL_FPVDDEN(1); + reg |=3D HIBMC_DISPLAY_CONTROL_PANELDATE(1); + reg |=3D HIBMC_DISPLAY_CONTROL_FPEN(1); + reg |=3D HIBMC_DISPLAY_CONTROL_VBIASEN(1); + writel(reg, priv->mmio + HIBMC_DISPLAY_CONTROL_HISILE); +} + static const struct drm_encoder_helper_funcs hibmc_dp_encoder_helper_funcs= =3D { .atomic_enable =3D hibmc_dp_encoder_enable, .atomic_disable =3D hibmc_dp_encoder_disable, + .atomic_mode_set =3D hibmc_dp_encoder_mode_set, }; =20 irqreturn_t hibmc_dp_hpd_isr(int irq, void *arg) --=20 2.33.0 From nobody Thu Dec 18 04:32:12 2025 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) (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 599FD225403 for ; Fri, 30 May 2025 10:03:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.188 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599424; cv=none; b=F0mW8BMMXNazOsAV5bIGmwSGC/7itRI4xCRm1vvltduR3jzl8gXLimPQysNBNAKvFiGTlOaAV4mkhXxDGFZU3KToo2ixpmLkjNeljQ0jJLW8lYJQFSahRYzYhROnMgwotk3dObCfhOacXKdYwRlql0O9NbljiZAkIzFjkGesZ78= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599424; c=relaxed/simple; bh=lneAPk+oAwu16jDGnrIcQSPwbJhuJxGvJxchusKt1gI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=awf4+SEIQLn34EzduoZ1ReSxuCL1zqZMmi9KCnMs86BLJP4Lfk/qDnjK9sSfg3YQe9fJ7Xe5OspBGCgDObPtl6Wdz/VQYqaBkUdlo/YbbuTbrwi+PC3fOjZvIKIdF4X3GkAJWcT1kPQ9ZYzjsbJjoKXSwjKVpe792/VK/2ePn60= 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.188 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.105]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4b7zLT1P84ztRw8; Fri, 30 May 2025 18:02:25 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id 247031401E9; Fri, 30 May 2025 18:03:39 +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, 30 May 2025 18:03:38 +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, 30 May 2025 18:03:38 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 08/10] drm/hisilicon/hibmc: fix DP no showing after HPD with VGA connected Date: Fri, 30 May 2025 17:54:30 +0800 Message-ID: <20250530095432.1206966-9-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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 the system started with VGA connected, the desktop like GDM cannot get DP's CRTC when DP device is plugged in, because there is only one crtc sharing use of VGA and DP. So change VGA to disconnected when DP is connected. Fixes: 4c962bc929f1 ("drm/hisilicon/hibmc: Add vga connector detect functio= ns") Signed-off-by: Baihan Li --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 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 36401b46034c..73dd3d5fc26c 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c @@ -49,6 +49,18 @@ static int hibmc_connector_get_modes(struct drm_connecto= r *connector) return count; } =20 +static int hibmc_vdac_detect(struct drm_connector *connector, struct drm_m= odeset_acquire_ctx *ctx, + bool force) +{ + struct hibmc_drm_private *priv =3D to_hibmc_drm_private(connector->dev); + struct hibmc_dp *dp =3D &priv->dp; + + if (dp->hpd_status) + return connector_status_disconnected; + + return connector_status_connected; +} + static void hibmc_connector_destroy(struct drm_connector *connector) { struct hibmc_vdac *vdac =3D to_hibmc_vdac(connector); @@ -60,7 +72,7 @@ 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, + .detect_ctx =3D hibmc_vdac_detect, }; =20 static const struct drm_connector_funcs hibmc_connector_funcs =3D { --=20 2.33.0 From nobody Thu Dec 18 04:32:12 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 C14F522D4F2 for ; Fri, 30 May 2025 10:03:46 +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=1748599428; cv=none; b=bnfB86cQe4COR2YrTMTRoEbUE7GDmlnZk4F6+OINPLFeqdoF7b4A3dq6mn4gRvYRIc5dRaEH9DqTffwIoJ1manZp1K5BvAdIQF2Hnso00oxYMulm3rJNIMUrjbnYTi0Y+M0VHgam6K0NBh5vjW0iR4EVu2+delYFtx1yZ40baRg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599428; c=relaxed/simple; bh=mDCzqgVG/YMS/4jeZL7qdvquA+VdsUNZ/seaj0/cieY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SrlZe+sjlOizngXxXyHoBhjLlra78A+NWGKpFPENM4BhpB30LyGaqVGCjJZsWDU9YpGQ/NqKzaTsAlAM9aEu4wDeNPE5HW9sEfBvUKx08GQrEYEe0WV/hFemHrhj108vKNCtjf7fuk9ouEDc9j/0abRGAhSq7JQv5EmucD7iPDo= 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.163]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4b7zNs4wm4z27jJR; Fri, 30 May 2025 18:04:29 +0800 (CST) Received: from dggemv712-chm.china.huawei.com (unknown [10.1.198.32]) by mail.maildlp.com (Postfix) with ESMTPS id 5F5AD18005F; Fri, 30 May 2025 18:03:39 +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, 30 May 2025 18:03:39 +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, 30 May 2025 18:03:38 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 09/10] drm/hisilicon/hibmc: fix HPD no showing with VGA para of GRUB Date: Fri, 30 May 2025 17:54:31 +0800 Message-ID: <20250530095432.1206966-10-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems100002.china.huawei.com (7.221.188.206) To kwepemq100007.china.huawei.com (7.202.195.175) From: Baihan Li In early OS versions=EF=BC=8C there is a bug in hibmc-drm driver previously, so some OS add a VGA parameter in GRUB(video=3DVGA-1:640x480-32@60me) to fix the bug, that will config a force VGA mode to drm driver. However, the HPD problem exists that mentioned in previous patch, so change VGA's status in force() to compatible with some older OS versions. Fixes: f9698f802e50 ("drm/hisilicon/hibmc: Restructuring the header dp_reg.= h") Signed-off-by: Baihan Li --- drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu= /drm/hisilicon/hibmc/hibmc_drm_vdac.c index 73dd3d5fc26c..d609ccda2f2a 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c @@ -61,6 +61,19 @@ static int hibmc_vdac_detect(struct drm_connector *conne= ctor, struct drm_modeset return connector_status_connected; } =20 +static void hibmc_vdac_force(struct drm_connector *connector) +{ + struct hibmc_drm_private *priv =3D to_hibmc_drm_private(connector->dev); + struct hibmc_dp *dp =3D &priv->dp; + + if (dp->hpd_status) { + connector->status =3D connector_status_disconnected; + return; + } + + connector->status =3D connector_status_connected; +} + static void hibmc_connector_destroy(struct drm_connector *connector) { struct hibmc_vdac *vdac =3D to_hibmc_vdac(connector); @@ -81,6 +94,7 @@ static const struct drm_connector_funcs hibmc_connector_f= uncs =3D { .reset =3D drm_atomic_helper_connector_reset, .atomic_duplicate_state =3D drm_atomic_helper_connector_duplicate_state, .atomic_destroy_state =3D drm_atomic_helper_connector_destroy_state, + .force =3D hibmc_vdac_force, }; =20 static void hibmc_encoder_mode_set(struct drm_encoder *encoder, --=20 2.33.0 From nobody Thu Dec 18 04:32:12 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 58CA42253BD for ; Fri, 30 May 2025 10:03:41 +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=1748599424; cv=none; b=F9F0lzSjKGWoelhbHgPYnT11s3uJlJd20JPSVKidrzhCKedx+YkORlq+UWrNqRV+1MgxbcMTLjp68QIUVDrDIpfRmWtSYDqfCQNtE+Qw+IGbOjuPhueqSGzYsMgRRx5w7XBSvL7YYjzwAVw1H1xad1wmii8Hs/y8iL4V5tr+7l8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748599424; c=relaxed/simple; bh=QJc5X+8onIOf6465HrHQuG8TgHMSgnhXrfkx6XN01zM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KrRebf6r5AsR/2GQhBj29bb4Or3aaYePapA1gHy7xXVVICiby6/PVwGoj/3rgU/ETpDzWpBHIJ5SSkCJLW5eaDbaKgnxTxjKaTwuB8jZDw8KxvlPIkKylBHJrPbLVZRFR/G6nIRk8C64WPCsS1UnZkAavUwmFItD2fHxaemQlpg= 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.234]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4b7zLh3870z23jVV; Fri, 30 May 2025 18:02:36 +0800 (CST) Received: from dggemv705-chm.china.huawei.com (unknown [10.3.19.32]) by mail.maildlp.com (Postfix) with ESMTPS id E26AB140113; Fri, 30 May 2025 18:03:39 +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, 30 May 2025 18:03:39 +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, 30 May 2025 18:03:39 +0800 From: Yongbang Shi To: , , , , , , , CC: , , , , , , , , , Subject: [PATCH drm-dp 10/10] drm/hisilicon/hibmc: fix no showing problem with loading hibmc manually Date: Fri, 30 May 2025 17:54:32 +0800 Message-ID: <20250530095432.1206966-11-shiyongbang@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250530095432.1206966-1-shiyongbang@huawei.com> References: <20250530095432.1206966-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: 94ee73ee3020 ("drm/hisilicon/hibmc: add dp hw moduel in hibmc driver= ") Signed-off-by: Baihan Li --- 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 4f93d60b932b..e1b9589ce639 100644 --- a/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c +++ b/drivers/gpu/drm/hisilicon/hibmc/dp/dp_hw.c @@ -172,13 +172,15 @@ 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); /* 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