From patchwork Thu May 30 10:01:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jani Nikula X-Patchwork-Id: 800850 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (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 083AF18396D; Thu, 30 May 2024 10:02:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063329; cv=none; b=RO6TKHYmfCDymWm7nfg/5XbC5rsumkb9qY+PRnzYkV3j4cRacCzlr5e3sAk9kqZiV5Zlj+xU2X+N3Lwj8ZtdjDQN8C49DTb8XHhEub+pa+C9wfdaq32dpUzFQeY1QNb2VzeANTqDkGD8K8kMoqYHjCSzssrc0NCo/vM2T7r0RzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063329; c=relaxed/simple; bh=1LP2rTo7NH0u3HUMgvoQtIkwfwWpjfpCFYaEhS+TgdI=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=GxglIErD6S4CYv44SZseejnN8HDEfo+fS/TVCwjUjAkHmdpfg1/u5hUqUizfaSgabkaYWDILodFr1sn4lozPKiy0tGD7NbWBdXc20YaapB0+kRMnukxiMeJI2zt6HtUF4/S7hCPNJ+wT5JtiFD5GpuuAoUPeDYihiYzjIqJWhmM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=R83T4z8O; arc=none smtp.client-ip=198.175.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="R83T4z8O" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1717063328; x=1748599328; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=1LP2rTo7NH0u3HUMgvoQtIkwfwWpjfpCFYaEhS+TgdI=; b=R83T4z8O1rpXRNZ9Ji6yJHaVjStc4ZVqQg1wtDs7tcoO88ywDLuXjB4w O5Xbo3C4NTwMPvJmMe5Z26ILxCDOPLtZ5pN1ngvCIfQt4z180RvHe9etZ MwnZagCmmzrE+NaCmNGeNkeY5KyWMY73QBGF/AzP2S3yCuw2YOO1quIXw S4U6HsRFpDpbHo6WFYQUXRam1ULm4RAdNnxjsrfqCI+wNoXfFMwDLQuZj ZfBlGxZN4DXiclewHdB/gYf9vr5RIHqzuEKwQwwyMPqs1ThFFiHgPqTXP YoiRbCWGPK8tMYsH5ZMW3vcwVg/JkjOM5EHq8tVLXKP9TRFsiM4qQAszT A==; X-CSE-ConnectionGUID: 54nMk7gVQSC6eP6wt2W/CQ== X-CSE-MsgGUID: WFX1lcDkRTGCBVxNkai47A== X-IronPort-AV: E=McAfee;i="6600,9927,11087"; a="24942804" X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="24942804" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:07 -0700 X-CSE-ConnectionGUID: 899tdr+XSt+622yob0QDcA== X-CSE-MsgGUID: q2Tk505KSB+DoG7+DejYbQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="40235059" Received: from fdefranc-mobl3.ger.corp.intel.com (HELO localhost) ([10.245.246.132]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:04 -0700 From: Jani Nikula To: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Cc: inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, Jani Nikula , stable@vger.kernel.org Subject: [PATCH 1/4] drm/exynos/vidi: fix memory leak in .get_modes() Date: Thu, 30 May 2024 13:01:51 +0300 Message-Id: <20240530100154.317683-1-jani.nikula@intel.com> X-Mailer: git-send-email 2.39.2 Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo The duplicated EDID is never freed. Fix it. Cc: stable@vger.kernel.org Signed-off-by: Jani Nikula --- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index fab135308b70..11a720fef32b 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -309,6 +309,7 @@ static int vidi_get_modes(struct drm_connector *connector) struct vidi_context *ctx = ctx_from_connector(connector); struct edid *edid; int edid_len; + int count; /* * the edid data comes from user side and it would be set @@ -328,7 +329,11 @@ static int vidi_get_modes(struct drm_connector *connector) drm_connector_update_edid_property(connector, edid); - return drm_add_edid_modes(connector, edid); + count = drm_add_edid_modes(connector, edid); + + kfree(edid); + + return count; } static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = { From patchwork Thu May 30 10:01:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jani Nikula X-Patchwork-Id: 800439 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (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 946CA18396D for ; Thu, 30 May 2024 10:02:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063335; cv=none; b=GHj3odukO9dHJDQ3r4ZrPu8VA2ack6CufhxSNbUJZPJWbEUHP4jIyIt6OwosXJ1YLXVG0JMPF3tN+h7uG4aRv4NhDBeB0UoLf+fPGL++k3qlwMw+hPUxeacdyz4aEC5fg2kFfaJR7k5uB6Xv9zMmc1zATsCrQpm+ki7ay434/Lg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063335; c=relaxed/simple; bh=m5WISLEMqfoNeM122Roua0nYgI5s4y5ndZ/g5kaDfME=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Ejaj13VxOGg2eFfMu/limGSUctOv9gzpgWJY1spIl8cvI1id8wAx0etpeie9uCmrJl7MVh853lu/0PbExmzdjuNWmTnel46GX/GXaeyy7G6A2/PvQliWkasMiDVug7XC69Y1cpf0Zyd+LE+k9PpxTWFZIY7dBxM1bkNxEZEK0Fg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=P5H0jgET; arc=none smtp.client-ip=198.175.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="P5H0jgET" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1717063334; x=1748599334; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=m5WISLEMqfoNeM122Roua0nYgI5s4y5ndZ/g5kaDfME=; b=P5H0jgETax2iQqjafADarzSYf7ev2eC2GqP6R0/Smvdg5R2iL0HL0MYx bZe/lCOEpE1UJDiLs1CBgekFZ78uPzkSCklm6Z9urC+V5GT1MUQx21L5R SfEbADxh4JADpMjKJgKHBn/Aj9htSKSmcMAL7HPW5O9nh2xqAac7LB2Xw REFBqmg2L60NmJNDRnEcoMAu8mS2UbrahE5nPRgisBgJ1KoEvCn6/CyLd TQc88cry7/BdDzIY83a/IEj2F06aQN2fiy0aplnr8fSghefbqaTvX5AvZ 4/LpgCT/L58wCq9FTBGChvRQyXc1q1JEND/HFNS30xi5Objx2mS8cMZzM w==; X-CSE-ConnectionGUID: Ut+rQZ6fRGGhXtaezSe3xA== X-CSE-MsgGUID: cMzisG5MShaZ1Xx8BYHT2A== X-IronPort-AV: E=McAfee;i="6600,9927,11087"; a="24942815" X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="24942815" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:13 -0700 X-CSE-ConnectionGUID: lxyK9rz0Q7+v/HD2lNqHwg== X-CSE-MsgGUID: +zGJSRRWTcuPnOqn7+gXGA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="40235103" Received: from fdefranc-mobl3.ger.corp.intel.com (HELO localhost) ([10.245.246.132]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:10 -0700 From: Jani Nikula To: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Cc: inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, Jani Nikula Subject: [PATCH 2/4] drm/exynos/vidi: use drm_edid_duplicate() Date: Thu, 30 May 2024 13:01:52 +0300 Message-Id: <20240530100154.317683-2-jani.nikula@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240530100154.317683-1-jani.nikula@intel.com> References: <20240530100154.317683-1-jani.nikula@intel.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Don't open code drm_edid_duplicate(). While at it, drop the error message on allocation failure. Signed-off-by: Jani Nikula --- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index 11a720fef32b..f613df719a02 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -308,7 +308,6 @@ static int vidi_get_modes(struct drm_connector *connector) { struct vidi_context *ctx = ctx_from_connector(connector); struct edid *edid; - int edid_len; int count; /* @@ -320,12 +319,9 @@ static int vidi_get_modes(struct drm_connector *connector) return 0; } - edid_len = (1 + ctx->raw_edid->extensions) * EDID_LENGTH; - edid = kmemdup(ctx->raw_edid, edid_len, GFP_KERNEL); - if (!edid) { - DRM_DEV_DEBUG_KMS(ctx->dev, "failed to allocate edid\n"); + edid = drm_edid_duplicate(ctx->raw_edid); + if (!edid) return 0; - } drm_connector_update_edid_property(connector, edid); From patchwork Thu May 30 10:01:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jani Nikula X-Patchwork-Id: 800849 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (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 2BE8A18396D for ; Thu, 30 May 2024 10:02:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063348; cv=none; b=NaXRxdvZS2gHcrBxbrL42TQOC2e1BPrh52i9TxA2vgw+NLzteYeeFch2QO7B2u0PRvOIuHdOqlehiONLA5uFzcq6Q2rWulkldWebMVj2dMlAszmE55hqTU/qvYOH1zhpiUQTK1XPdM4kzBR0JMM9LZHZmeeVErRU4Qy8rWWTYro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063348; c=relaxed/simple; bh=TV8L7SOfK4ik4ni0oilI243+kNblJd3tywN/0cG5/qk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CP6A29stqHECvuO7YFmadSf5c9Kef5apR8ibFim765o6653q1AERiumluKpnDm4I1kTlxGlk1i3zSYRKceFzrUpfAqI0GqT5KWh0kRaislNHmVPvGWaTHhABMv3df5TfQzncsYvZNwFwU78eiACKt6A4MceAuGoARHZED9/NWx0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=eG28fZYp; arc=none smtp.client-ip=198.175.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="eG28fZYp" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1717063347; x=1748599347; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TV8L7SOfK4ik4ni0oilI243+kNblJd3tywN/0cG5/qk=; b=eG28fZYphVzyT0Yv8rIz1O9XK6QDUtKHVczYikyM0oFCXj4fsjx2nART vm3yyAIfsDLiT5nEq5noRhuksR0mFO1V4lB6l1cer3KvA6S0RhKpM/O5W 9yo+A3Ff5DQxdAHEmq3wMnh5QjBCOhZPy7LWaDAGWohsM+6THjszaf9Dk +Sp0TC0SLcCse3qu7ZEYZqYaD47kVxp2MN6cGT4A2R0PqYoTR12oeDZd5 ME5OVHBXHklMyuZSitnEOUP6vVmQmrK0ppW34iF8bf2Nm2FJlym9kF+2V g1OaUcdS67+Gufheu4tHEMtI3xZhlDCAMCNt7Wfp4Czcj0huLqDQs/Ept g==; X-CSE-ConnectionGUID: PzGG6FlgQ2yL/Yd02KRCvw== X-CSE-MsgGUID: yYHTjr6lRoyuC5cSkkTEiw== X-IronPort-AV: E=McAfee;i="6600,9927,11087"; a="24942841" X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="24942841" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:27 -0700 X-CSE-ConnectionGUID: r/VNIMo/QmWVkH1yT9iFTg== X-CSE-MsgGUID: preaaPqTSQ2aCTnQMxZ0pg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="40235192" Received: from fdefranc-mobl3.ger.corp.intel.com (HELO localhost) ([10.245.246.132]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:17 -0700 From: Jani Nikula To: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Cc: inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, Jani Nikula Subject: [PATCH 3/4] drm/exynos/vidi: simplify fake edid handling Date: Thu, 30 May 2024 13:01:53 +0300 Message-Id: <20240530100154.317683-3-jani.nikula@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240530100154.317683-1-jani.nikula@intel.com> References: <20240530100154.317683-1-jani.nikula@intel.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Avoid assigning fake_edid_info to ctx->raw_edid. Always keep ctx->raw_edid either an allocated pointer or NULL. Defer fake_edid_info handling to .get_modes(). This should be functionally equivalent but slightly easier to follow. Signed-off-by: Jani Nikula --- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 40 +++++++----------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index f613df719a02..d93801ace79a 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -195,12 +195,11 @@ static ssize_t vidi_store_connection(struct device *dev, if (ctx->connected > 1) return -EINVAL; - /* use fake edid data for test. */ - if (!ctx->raw_edid) - ctx->raw_edid = (struct edid *)fake_edid_info; - - /* if raw_edid isn't same as fake data then it can't be tested. */ - if (ctx->raw_edid != (struct edid *)fake_edid_info) { + /* + * Use fake edid data for test. If raw_edid is set then it can't be + * tested. + */ + if (ctx->raw_edid) { DRM_DEV_DEBUG_KMS(dev, "edid data is not fake data.\n"); return -EINVAL; } @@ -261,15 +260,9 @@ int vidi_connection_ioctl(struct drm_device *drm_dev, void *data, return -ENOMEM; } } else { - /* - * with connection = 0, free raw_edid - * only if raw edid data isn't same as fake data. - */ - if (ctx->raw_edid && ctx->raw_edid != - (struct edid *)fake_edid_info) { - kfree(ctx->raw_edid); - ctx->raw_edid = NULL; - } + /* with connection = 0, free raw_edid */ + kfree(ctx->raw_edid); + ctx->raw_edid = NULL; } ctx->connected = vidi->connection; @@ -310,16 +303,7 @@ static int vidi_get_modes(struct drm_connector *connector) struct edid *edid; int count; - /* - * the edid data comes from user side and it would be set - * to ctx->raw_edid through specific ioctl. - */ - if (!ctx->raw_edid) { - DRM_DEV_DEBUG_KMS(ctx->dev, "raw_edid is null.\n"); - return 0; - } - - edid = drm_edid_duplicate(ctx->raw_edid); + edid = drm_edid_duplicate(ctx->raw_edid ?: fake_edid_info); if (!edid) return 0; @@ -467,10 +451,8 @@ static void vidi_remove(struct platform_device *pdev) { struct vidi_context *ctx = platform_get_drvdata(pdev); - if (ctx->raw_edid != (struct edid *)fake_edid_info) { - kfree(ctx->raw_edid); - ctx->raw_edid = NULL; - } + kfree(ctx->raw_edid); + ctx->raw_edid = NULL; component_del(&pdev->dev, &vidi_component_ops); } From patchwork Thu May 30 10:01:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jani Nikula X-Patchwork-Id: 800438 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) (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 BE75D6F2E8 for ; Thu, 30 May 2024 10:02:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.12 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063350; cv=none; b=D8ANyu/OjjtNpiPmO5Pvvk+nXiaPSl2eJi4vbtQPnk49IH5MOJ3VdLQYjH8eMJpn5AF1ipZQ1akMu9HhUesDcD1XbylOa5ZeeWaQQq2UtHt3iqlzv50V6RumniSBXwNwwcN5cYhL39qAiEvEo2nliI+rvi8sv/BJWselzBPj9ck= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717063350; c=relaxed/simple; bh=bdC56qRyRLu0SFAStyq2sOD2Am7JE6h4a5f09loTAGI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=hLEl+0BB/Lttv8e3xuAzSRAQcMaW8e2nUc6KPYrlwJWa/uwXmP1cTN6xGjqA48e3GD6xFgFoSGYvyQzPqQLqEtwg1peLDjw7ecf+5qlVkqDOkijRFBJV2vPsIIwlMuqGNVDCwQtj3vWgbmLa6I2zfxpj9mcCeAwcIENzb8NIm74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=F+5q5biq; arc=none smtp.client-ip=198.175.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="F+5q5biq" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1717063349; x=1748599349; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bdC56qRyRLu0SFAStyq2sOD2Am7JE6h4a5f09loTAGI=; b=F+5q5biqDeRNcE98PRUvoNFfYJszF0FlagiR/Ubjq5uWH3TVI4nylgHA 3HkZbsJtAjs2mhh7Me9g5x/vHWAydHMUq6JqtUeV865mEvdBM5lfZfXz9 0+0fTVMdNw/NReEXRwzc5/CKQjhOjr04zxDWkIxHY+Ij9F/5doT59K1tc PEfnu8/ZRbphHZggubYKwxvUhpT4XDCwd+PeHDCpWexS78gR883gUtB9v vc7Hfb+tD1gP2tETLKZ97hY59biR1VD6SMdI2kSWcpRnpvQsALoz9buBH rhySopYbpxFHXiOaQ+m75XsfemGs6oCmirHGkzqKYeolnd9ph0fK6OUq+ A==; X-CSE-ConnectionGUID: gKXqrFa4SjyU0kDDKjbYCw== X-CSE-MsgGUID: 2iOH/gasS7SgBv77LzL75Q== X-IronPort-AV: E=McAfee;i="6600,9927,11087"; a="24942846" X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="24942846" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:27 -0700 X-CSE-ConnectionGUID: USdyqaMBRqC2tVPOYJnXLA== X-CSE-MsgGUID: aose0NSlSGSwexDzzAfp3A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,201,1712646000"; d="scan'208";a="40235289" Received: from fdefranc-mobl3.ger.corp.intel.com (HELO localhost) ([10.245.246.132]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2024 03:02:24 -0700 From: Jani Nikula To: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Cc: inki.dae@samsung.com, sw0312.kim@samsung.com, kyungmin.park@samsung.com, Jani Nikula Subject: [PATCH 4/4] drm/exynos/vidi: convert to struct drm_edid Date: Thu, 30 May 2024 13:01:54 +0300 Message-Id: <20240530100154.317683-4-jani.nikula@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240530100154.317683-1-jani.nikula@intel.com> References: <20240530100154.317683-1-jani.nikula@intel.com> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Prefer the struct drm_edid based functions for storing the EDID and updating the connector. It would be better if the vidi connection ioctl passed in the EDID size separately instead of relying on the extension count specified in the EDID, but that's what we have to rely on. Signed-off-by: Jani Nikula --- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 44 ++++++++++++++---------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index d93801ace79a..6de0cced6c9d 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -41,7 +41,7 @@ struct vidi_context { struct exynos_drm_crtc *crtc; struct drm_connector connector; struct exynos_drm_plane planes[WINDOWS_NR]; - struct edid *raw_edid; + const struct drm_edid *raw_edid; unsigned int clkdiv; unsigned int connected; bool suspended; @@ -245,23 +245,27 @@ int vidi_connection_ioctl(struct drm_device *drm_dev, void *data, } if (vidi->connection) { - struct edid *raw_edid; + const struct drm_edid *drm_edid; + const struct edid *raw_edid; + size_t size; - raw_edid = (struct edid *)(unsigned long)vidi->edid; - if (!drm_edid_is_valid(raw_edid)) { + raw_edid = (const struct edid *)(unsigned long)vidi->edid; + size = (raw_edid->extensions + 1) * EDID_LENGTH; + + drm_edid = drm_edid_alloc(raw_edid, size); + if (!drm_edid) + return -ENOMEM; + + if (!drm_edid_valid(drm_edid)) { + drm_edid_free(drm_edid); DRM_DEV_DEBUG_KMS(ctx->dev, "edid data is invalid.\n"); return -EINVAL; } - ctx->raw_edid = drm_edid_duplicate(raw_edid); - if (!ctx->raw_edid) { - DRM_DEV_DEBUG_KMS(ctx->dev, - "failed to allocate raw_edid.\n"); - return -ENOMEM; - } + ctx->raw_edid = drm_edid; } else { /* with connection = 0, free raw_edid */ - kfree(ctx->raw_edid); + drm_edid_free(ctx->raw_edid); ctx->raw_edid = NULL; } @@ -300,18 +304,22 @@ static const struct drm_connector_funcs vidi_connector_funcs = { static int vidi_get_modes(struct drm_connector *connector) { struct vidi_context *ctx = ctx_from_connector(connector); - struct edid *edid; + const struct drm_edid *drm_edid; int count; - edid = drm_edid_duplicate(ctx->raw_edid ?: fake_edid_info); - if (!edid) + if (ctx->raw_edid) + drm_edid = drm_edid_dup(ctx->raw_edid); + else + drm_edid = drm_edid_alloc(fake_edid_info, sizeof(fake_edid_info)); + + if (!drm_edid) return 0; - drm_connector_update_edid_property(connector, edid); + drm_edid_connector_update(connector, drm_edid); - count = drm_add_edid_modes(connector, edid); + count = drm_edid_connector_add_modes(connector); - kfree(edid); + drm_edid_free(drm_edid); return count; } @@ -451,7 +459,7 @@ static void vidi_remove(struct platform_device *pdev) { struct vidi_context *ctx = platform_get_drvdata(pdev); - kfree(ctx->raw_edid); + drm_edid_free(ctx->raw_edid); ctx->raw_edid = NULL; component_del(&pdev->dev, &vidi_component_ops);