From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 20B6EC71151 for ; Fri, 13 Jun 2025 15:01:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6A79710EA13; Fri, 13 Jun 2025 15:01:45 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.b="PHbKPSJZ"; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id A44CD10EA21; Fri, 13 Jun 2025 15:01:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=7ifeFQlCfnlrvlAu7O+jqznbnYK+QGc+SLzHls5U6iM=; b=PHbKPSJZSOtRu+G/H5TDtUmbnl 7n7erSZNRHsjcBCfF7L2aictphZo+ixetT7WTY5S8Z8+PM9EY/1L2DiQLrfiTHV+z0lZq8rMc0OMo PbNz42usqq4/yriPR2BqhS+xDcqbJ9sz7iLN+VkZL5Mi4APBECLwETynwsV073aWg/AAiYpV+qKnh snnBSXCgDLajteWmDvsDWRbjkZPct+YqkrXtyTEMJDhN4wPtkJF2n4L7kF4rN7Vc7Uq7SFrrZVi6R 25x7HJI36lyUjzMnAi9DMrKlLaSmU8+gB636Cg4McwS2g+tugHWjGKjdnrPU1CEXm+JtRYqeehu6t xVWUsi+w==; Received: from [189.6.13.79] (helo=killbill.home) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1uQ5uP-00342T-5O; Fri, 13 Jun 2025 17:01:33 +0200 From: Melissa Wen To: Alex Hung , Mario Limonciello , Rodrigo Siqueira , maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch Cc: Jani Nikula , Michel Daenzer , amd-gfx@lists.freedesktop.org, Jani Nikula , dri-devel@lists.freedesktop.org, kernel-dev@igalia.com Subject: [PATCH v4 12/14] drm/edid: introduce a helper that compares edid data from two drm_edid Date: Fri, 13 Jun 2025 11:58:14 -0300 Message-ID: <20250613150015.245917-13-mwen@igalia.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250613150015.245917-1-mwen@igalia.com> References: <20250613150015.245917-1-mwen@igalia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" AMD driver has a function used to compare if two edid are the same; this is useful to some of the link detection algorithms implemented by amdgpu. Since the amdgpu function can be helpful for other drivers, this commit abstracts the AMD function to make it available at the DRM level by wrapping existent drm_edid_eq(). v2: - rename drm_edid_eq to drm_edid_eq_buf (jani) - add NULL checks (jani) v3: - fix kernel-doc (jani) - fix parameter names Reviewed-by: Jani Nikula Co-developed-by: Rodrigo Siqueira Signed-off-by: Rodrigo Siqueira Signed-off-by: Melissa Wen --- drivers/gpu/drm/drm_edid.c | 24 +++++++++++++++++++++--- include/drm/drm_edid.h | 2 ++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index d5772a3d27f1..056e070b2f55 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -1820,8 +1820,8 @@ static bool edid_block_is_zero(const void *edid) return mem_is_zero(edid, EDID_LENGTH); } -static bool drm_edid_eq(const struct drm_edid *drm_edid, - const void *raw_edid, size_t raw_edid_size) +static bool drm_edid_eq_buf(const struct drm_edid *drm_edid, + const void *raw_edid, size_t raw_edid_size) { bool edid1_present = drm_edid && drm_edid->edid && drm_edid->size; bool edid2_present = raw_edid && raw_edid_size; @@ -6915,7 +6915,7 @@ static int _drm_edid_connector_property_update(struct drm_connector *connector, const void *old_edid = connector->edid_blob_ptr->data; size_t old_edid_size = connector->edid_blob_ptr->length; - if (old_edid && !drm_edid_eq(drm_edid, old_edid, old_edid_size)) { + if (old_edid && !drm_edid_eq_buf(drm_edid, old_edid, old_edid_size)) { connector->epoch_counter++; drm_dbg_kms(dev, "[CONNECTOR:%d:%s] EDID changed, epoch counter %llu\n", connector->base.id, connector->name, @@ -7520,3 +7520,21 @@ bool drm_edid_is_digital(const struct drm_edid *drm_edid) drm_edid->edid->input & DRM_EDID_INPUT_DIGITAL; } EXPORT_SYMBOL(drm_edid_is_digital); + +/** + * drm_edid_eq - Check if EDIDs are equal + * + * @drm_edid_1: first drm_edid to compare edid + * @drm_edid_2: second drm_edid to compare edid + * + * Return true if EDIDs are equal. + */ +bool drm_edid_eq(const struct drm_edid *drm_edid_1, + const struct drm_edid *drm_edid_2) +{ + const void *edid_1 = drm_edid_1 ? drm_edid_1->edid : NULL; + size_t edid_1_size = drm_edid_1 ? drm_edid_1->size : 0; + + return drm_edid_eq_buf(drm_edid_2, edid_1, edid_1_size); +} +EXPORT_SYMBOL(drm_edid_eq); diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h index 960592167486..e7a9a4928b97 100644 --- a/include/drm/drm_edid.h +++ b/include/drm/drm_edid.h @@ -469,6 +469,8 @@ int drm_edid_connector_update(struct drm_connector *connector, const struct drm_edid *edid); int drm_edid_connector_add_modes(struct drm_connector *connector); bool drm_edid_is_digital(const struct drm_edid *drm_edid); +bool drm_edid_eq(const struct drm_edid *drm_edid_first, + const struct drm_edid *drm_edid_second); void drm_edid_get_product_id(const struct drm_edid *drm_edid, struct drm_edid_product_id *id); void drm_edid_print_product_id(struct drm_printer *p, -- 2.47.2