From nobody Sun Dec 14 21:54:09 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 0A5A0151985; Wed, 5 Feb 2025 11:51:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738756268; cv=none; b=oLtisSoJxvKzZOQIzcMDK0NUcFNgIJmSK95POw1tNJtGtt2zOd9hy+zTaU/ux/FnTklnNHPOhHwgDoTg4GWoIPnqKkZh7miAMU0V3qwovwSaPjhD6oVlGIs3gTg3Q1Qau332txp6c1A4dppkYmTbLsc8KeMtTaSuf6oV2TsV7qc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738756268; c=relaxed/simple; bh=0jjde1bLlKaytC/84IATIp4MCHe01xGwkBsd2JsCFK0=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=X1C4B5wq1ZWuAXoNNw5CYlvZEgSN/5XMGLHP3h+7qZ+T8C/mrdf75H1UTXMZetuYK7j2s76xH2N6rkHoOk+Afq2vyAvxbe4GWvme6DNRKP7Da8fwQ1jb92R/FLehVCrK990uU2Sw4l8WpnmXLfIPJ3l5z6BVVmIex7WWPDGktkk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=BYTbs25L; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="BYTbs25L" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 515Boerv2525990 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Feb 2025 05:50:40 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1738756240; bh=VCtGI+uCG2hWdsoWCIe4rbkbeS3s2t98T4jUhXD2A+c=; h=From:To:Subject:Date:In-Reply-To:References; b=BYTbs25La01gzes7U3VWPeKdIFbiB38mEOMZ2tjGXU28ns//v9JAOAIhx9a8Ffp/L utiaMWNrEBZdD5Eo/aAhb5FclsbjrHXD49+OMcFqEPYp3vq0Pc9Nr/T0uJeb/S4c+O k5XAvKGVUXUmFPBPfGxCc2ROuPSUJO1d1D1EUr50= Received: from DFLE107.ent.ti.com (dfle107.ent.ti.com [10.64.6.28]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 515Boesf101811 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 5 Feb 2025 05:50:40 -0600 Received: from DFLE101.ent.ti.com (10.64.6.22) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Wed, 5 Feb 2025 05:50:40 -0600 Received: from lelvsmtp5.itg.ti.com (10.180.75.250) by DFLE101.ent.ti.com (10.64.6.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Wed, 5 Feb 2025 05:50:40 -0600 Received: from hkshenoy.dhcp.ti.com (hkshenoy.dhcp.ti.com [172.24.227.96]) by lelvsmtp5.itg.ti.com (8.15.2/8.15.2) with ESMTP id 515BoPCi043245; Wed, 5 Feb 2025 05:50:33 -0600 From: Harikrishna Shenoy To: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v3 1/2] dt-bindings: drm/bridge: Add no-hpd property Date: Wed, 5 Feb 2025 17:20:24 +0530 Message-ID: <20250205115025.3133487-2-h-shenoy@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250205115025.3133487-1-h-shenoy@ti.com> References: <20250205115025.3133487-1-h-shenoy@ti.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-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" From: Rahul T R The mhdp bridge can work without its HPD pin hooked up to the connector, but the current bridge driver throws an error when hpd line is not connected to the connector. For such cases, we need an indication for no-hpd, using which we can bypass the hpd detection and instead use the auxiliary channels connected to the DP connector to confirm the connection. So add no-hpd property to the bindings, to disable hpd when not connected or unusable due to DP0-HPD not connected to correct HPD=20 pin on SOC like in case of J721S2. Signed-off-by: Rahul T R Signed-off-by: Jayesh Choudhary --- .../devicetree/bindings/display/bridge/cdns,mhdp8546.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546= .yaml b/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml index c2b369456e4e..3a6c6d837593 100644 --- a/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml +++ b/Documentation/devicetree/bindings/display/bridge/cdns,mhdp8546.yaml @@ -57,6 +57,12 @@ properties: interrupts: maxItems: 1 =20 + cdns,no-hpd: + type: boolean + description: + Set if the HPD line on the bridge isn't hooked up to anything or is + otherwise unusable. + ports: $ref: /schemas/graph.yaml#/properties/ports =20 --=20 2.34.1 From nobody Sun Dec 14 21:54:09 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 D830221D5AD; Wed, 5 Feb 2025 11:51:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738756274; cv=none; b=PKQDvOnQy/dD+9rOs15KsK57y7Lo7xOMrGGhhuV4fCZdVPsi1A60133Y4a9a4mNMAuU5jMnlF4bpW91kFHEWqMvqBSBC3KZ+O4HSNiRASALWpZ1Ydt8orYlfTvRVQnQ+zTaJ+aZ6kDgn1rqyX4y6G6pW0h7oIVZyWXj67oygkdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738756274; c=relaxed/simple; bh=dZXz4pMPrpn0TzsozhsZsqOV2je53Ztfm3Br8dQ2X2w=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W41iAxRNXuvst84Hy6ICoOZH5vf8ZsxxBwL6grpMFenPXRLVnswG4A8nlQCm30R/uUyR5eQOevcLB3XloSdHTz+rz9wJHaTrBTHPjA6mh4BVzvu1TsJcc+SP4cRi5VCo9Gv/OPZtV3LRExyI6fYmqCRBU7uwQ+KHjp/g+C/XbS0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=vd2Wr/Of; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="vd2Wr/Of" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 515Bol852591319 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 5 Feb 2025 05:50:47 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1738756247; bh=OaM5rfFZ68e3HGHbqVx4CWq+S7n+bCh/84iARh27Z8s=; h=From:To:Subject:Date:In-Reply-To:References; b=vd2Wr/Ofyd/J3tkzUwdPdMLJG86LDY+rTuIjJIRaaZ1MLNxfsccUGF+QvLY49pg2B zwRX7KtYf8Ozuj/dptFFjsMkZ/FfA4oDzYJ9gk2Oh5keVi2cXuBrua0s5MLMTabMe5 M9Y95caWOOUOhEHT4MoM1KXGNJT1k1tZJRWRQeTg= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 515BolxH025164 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 5 Feb 2025 05:50:47 -0600 Received: from DFLE104.ent.ti.com (10.64.6.25) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Wed, 5 Feb 2025 05:50:47 -0600 Received: from lelvsmtp5.itg.ti.com (10.180.75.250) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Wed, 5 Feb 2025 05:50:46 -0600 Received: from hkshenoy.dhcp.ti.com (hkshenoy.dhcp.ti.com [172.24.227.96]) by lelvsmtp5.itg.ti.com (8.15.2/8.15.2) with ESMTP id 515BoPCj043245; Wed, 5 Feb 2025 05:50:40 -0600 From: Harikrishna Shenoy To: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v3 2/2] drm: bridge: cdns-mhdp8546: Add support for no-hpd Date: Wed, 5 Feb 2025 17:20:25 +0530 Message-ID: <20250205115025.3133487-3-h-shenoy@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250205115025.3133487-1-h-shenoy@ti.com> References: <20250205115025.3133487-1-h-shenoy@ti.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-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" From: Rahul T R In J721S2 EVMs DP0 hpd is not connected to correct hpd pin on SOC, to=20 handle such cases, Add support for "no-hpd" property in the device=20 tree node to disable hpd. Also change the log level for dpcd read failuers to debug, since=20 framework retries 32 times for each read. Adding timeout in to wait asynchronously for state to change to=20 MHDP_HW_READY. With HPD the driver acts only on the interrupt,=20 which is enabled only after both have happened.Here the driver waits=20 in the attach until everything is ready, and then probes the DP=20 given the HPD interrupt is broken. Add update_link_status in case of no_hpd in cdns_mhdp_bridge_detect() to=20 update status of mhdp->plugged via polling, as cdns_mhdp_bridge_detect()=20 is being polled by drm framework. Signed-off-by: Rahul T R [j-choudhary@ti.com: Fix cdns_mhdp_attach hook for no-hpd usecase] Signed-off-by: Jayesh Choudhary [h-shenoy@ti.com: Updated mhdp->plugged status in cdns_mhdp_bridge_detect for no-hpd usecase] Signed-off-by: Harikrishna Shenoy --- .../drm/bridge/cadence/cdns-mhdp8546-core.c | 54 ++++++++++++++++--- .../drm/bridge/cadence/cdns-mhdp8546-core.h | 1 + 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/= gpu/drm/bridge/cadence/cdns-mhdp8546-core.c index 6a121a2700d2..223370717ce8 100644 --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c @@ -53,6 +53,8 @@ #include "cdns-mhdp8546-hdcp.h" #include "cdns-mhdp8546-j721e.h" =20 +static int cdns_mhdp_update_link_status(struct cdns_mhdp_device *mhdp); + static void cdns_mhdp_bridge_hpd_enable(struct drm_bridge *bridge) { struct cdns_mhdp_device *mhdp =3D bridge_to_mhdp(bridge); @@ -768,7 +770,8 @@ static int cdns_mhdp_fw_activate(const struct firmware = *fw, * MHDP_HW_STOPPED happens only due to driver removal when * bridge should already be detached. */ - cdns_mhdp_bridge_hpd_enable(&mhdp->bridge); + if (!mhdp->no_hpd) + cdns_mhdp_bridge_hpd_enable(&mhdp->bridge); =20 spin_unlock(&mhdp->start_lock); =20 @@ -862,7 +865,7 @@ static ssize_t cdns_mhdp_transfer(struct drm_dp_aux *au= x, ret =3D cdns_mhdp_dpcd_read(mhdp, msg->address, msg->buffer, msg->size); if (ret) { - dev_err(mhdp->dev, + dev_dbg(mhdp->dev, "Failed to read DPCD addr %u\n", msg->address); =20 @@ -1752,8 +1755,22 @@ static int cdns_mhdp_attach(struct drm_bridge *bridg= e, =20 spin_unlock(&mhdp->start_lock); =20 + if (mhdp->no_hpd) { + ret =3D wait_event_timeout(mhdp->fw_load_wq, + mhdp->hw_state =3D=3D MHDP_HW_READY, + msecs_to_jiffies(100)); + if (ret =3D=3D 0) { + dev_err(mhdp->dev, "%s: Timeout waiting for fw loading\n", + __func__); + return -ETIMEDOUT; + } + + cdns_mhdp_update_link_status(mhdp); + return 0; + } + /* Enable SW event interrupts */ - if (hw_ready) + if (hw_ready && !mhdp->no_hpd) cdns_mhdp_bridge_hpd_enable(bridge); =20 return 0; @@ -2217,6 +2234,19 @@ static enum drm_connector_status cdns_mhdp_bridge_de= tect(struct drm_bridge *brid { struct cdns_mhdp_device *mhdp =3D bridge_to_mhdp(bridge); =20 + if (mhdp->no_hpd) { + int ret =3D cdns_mhdp_update_link_status(mhdp); + + if (mhdp->connector.dev) { + if (ret < 0) + schedule_work(&mhdp->modeset_retry_work); + else + drm_kms_helper_hotplug_event(mhdp->bridge.dev); + } else { + drm_bridge_hpd_notify(&mhdp->bridge, cdns_mhdp_detect(mhdp)); + } + } + return cdns_mhdp_detect(mhdp); } =20 @@ -2284,7 +2314,16 @@ static int cdns_mhdp_update_link_status(struct cdns_= mhdp_device *mhdp) =20 mutex_lock(&mhdp->link_mutex); =20 - mhdp->plugged =3D cdns_mhdp_detect_hpd(mhdp, &hpd_pulse); + if (mhdp->no_hpd) { + ret =3D drm_dp_dpcd_read_link_status(&mhdp->aux, status); + hpd_pulse =3D false; + if (ret < 0) + mhdp->plugged =3D false; + else + mhdp->plugged =3D true; + } else { + mhdp->plugged =3D cdns_mhdp_detect_hpd(mhdp, &hpd_pulse); + } =20 if (!mhdp->plugged) { cdns_mhdp_link_down(mhdp); @@ -2481,6 +2520,8 @@ static int cdns_mhdp_probe(struct platform_device *pd= ev) mhdp->aux.dev =3D dev; mhdp->aux.transfer =3D cdns_mhdp_transfer; =20 + mhdp->no_hpd =3D of_property_read_bool(dev->of_node, "cdns,no-hpd"); + mhdp->regs =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(mhdp->regs)) { dev_err(dev, "Failed to get memory resource\n"); @@ -2556,8 +2597,9 @@ static int cdns_mhdp_probe(struct platform_device *pd= ev) =20 mhdp->bridge.of_node =3D pdev->dev.of_node; mhdp->bridge.funcs =3D &cdns_mhdp_bridge_funcs; - mhdp->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | - DRM_BRIDGE_OP_HPD; + mhdp->bridge.ops =3D DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; + if (!mhdp->no_hpd) + mhdp->bridge.ops |=3D DRM_BRIDGE_OP_HPD; mhdp->bridge.type =3D DRM_MODE_CONNECTOR_DisplayPort; =20 ret =3D phy_init(mhdp->phy); diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h b/drivers/= gpu/drm/bridge/cadence/cdns-mhdp8546-core.h index bad2fc0c7306..48517193cf0b 100644 --- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h +++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.h @@ -388,6 +388,7 @@ struct cdns_mhdp_device { =20 bool link_up; bool plugged; + bool no_hpd; =20 /* * "start_lock" protects the access to bridge_attached and --=20 2.34.1