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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC926C433EF for ; Fri, 15 Oct 2021 19:33:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C629B61151 for ; Fri, 15 Oct 2021 19:33:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238423AbhJOTfq (ORCPT ); Fri, 15 Oct 2021 15:35:46 -0400 Received: from mga04.intel.com ([192.55.52.120]:35572 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235221AbhJOTfp (ORCPT ); Fri, 15 Oct 2021 15:35:45 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10138"; a="226748258" X-IronPort-AV: E=Sophos;i="5.85,376,1624345200"; d="scan'208";a="226748258" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Oct 2021 12:33:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,376,1624345200"; d="scan'208";a="481811620" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.171]) by orsmga007.jf.intel.com with SMTP; 15 Oct 2021 12:33:30 -0700 Received: by stinkbox (sSMTP sendmail emulation); Fri, 15 Oct 2021 22:33:29 +0300 Date: Fri, 15 Oct 2021 22:33:29 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Claudio Suarez Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-tegra@vger.kernel.org, intel-gfx@lists.freedesktop.org, David Airlie , Daniel Vetter , Laurent Pinchart , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Alex Deucher , Christian =?iso-8859-1?Q?K=F6nig?= , Pan Xinhui , Emma Anholt , Maxime Ripard , Thierry Reding , Patrik Jakobsson , Jingoo Han , Rob Clark , Sean Paul , linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Chen-Yu Tsai , Sandy Huang , heiko@sntech.de, Neil Armstrong , Robert Foss , Ben Skeggs , nouveau@lists.freedesktop.org Subject: Re: [PATCH 01/15] gpu/drm: make drm_add_edid_modes() consistent when updating connector->display_info Message-ID: References: <20211015113713.630119-1-cssk@net-c.es> <20211015113713.630119-2-cssk@net-c.es> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Patchwork-Hint: comment Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On Fri, Oct 15, 2021 at 09:24:06PM +0200, Claudio Suarez wrote: > On Fri, Oct 15, 2021 at 03:03:13PM +0300, Ville Syrjälä wrote: > > On Fri, Oct 15, 2021 at 01:36:59PM +0200, Claudio Suarez wrote: > > > According to the documentation, drm_add_edid_modes > > > "... Also fills out the &drm_display_info structure and ELD in @connector > > > with any information which can be derived from the edid." > > > > > > drm_add_edid_modes accepts a struct edid *edid parameter which may have a > > > value or may be null. When it is not null, connector->display_info and > > > connector->eld are updated according to the edid. When edid=NULL, only > > > connector->eld is reset. Reset connector->display_info to be consistent > > > and accurate. > > > > > > Signed-off-by: Claudio Suarez > > > --- > > > drivers/gpu/drm/drm_edid.c | 2 ++ > > > 1 file changed, 2 insertions(+) > > > > > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > > > index 6325877c5fd6..6cbe09b2357c 100644 > > > --- a/drivers/gpu/drm/drm_edid.c > > > +++ b/drivers/gpu/drm/drm_edid.c > > > @@ -5358,10 +5358,12 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) > > > > > > if (edid == NULL) { > > > clear_eld(connector); > > > + drm_reset_display_info(connector); > > > return 0; > > > } > > > if (!drm_edid_is_valid(edid)) { > > > clear_eld(connector); > > > + drm_reset_display_info(connector); > > > > Looks easier if you pull both of those out from these branches and > > just call them unconditionally at the start. > > After looking at the full code, I am not sure. This is the code: > ================== > int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid) > { > int num_modes = 0; > u32 quirks; > > if (edid == NULL) { > clear_eld(connector); > drm_reset_display_info(connector); <--- added by me > return 0; > } > if (!drm_edid_is_valid(edid)) { > clear_eld(connector); > drm_reset_display_info(connector); <--- added by me > drm_warn(connector->dev, "%s: EDID invalid.\n", > connector->name); > return 0; > } > > drm_edid_to_eld(connector, edid); > > quirks = drm_add_display_info(connector, edid); > etc... > ================= > > If we move those out of these branches and edid != NULL, we are executing an > unnecessary clear_eld(connector) and an unnecessary drm_reset_display_info(connector) > because the fields will be set in the next drm_edid_to_eld(connector, edid) and > drm_add_display_info(connector, edid) > > Do we want this ? Seems fine by me. And maybe we could nuke the second drm_reset_display_info() from deeper inside drm_add_display_info()? Not sure if drm_add_display_info() still has to be able to operate standalone or not. Hmm. Another option is to just move all these NULL/invalid edid checks into drm_edid_to_eld() and drm_add_display_info(). -- Ville Syrjälä Intel