Received: by 2002:a05:7208:9594:b0:7e:5202:c8b4 with SMTP id gs20csp1586725rbb; Mon, 26 Feb 2024 14:34:56 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCUlIB61UNkmmLc24M0igrNQYJ2uJu6qfW/HA46hVhfFK8TrFvbNL6bv7i7lXxm70IqXlbTHsl547XrDUiGLfCrfaHxRYCCuKA3OmW0VHw== X-Google-Smtp-Source: AGHT+IG9Q1sck9lGiY+I96zFgk6Kr/OkJVXoToacLqxdDY7CrZ0xqmHsl4J4Bn4BoCK/W1i8TUV3 X-Received: by 2002:a05:6a20:c108:b0:1a0:e7fd:88ce with SMTP id bh8-20020a056a20c10800b001a0e7fd88cemr466126pzb.36.1708986896019; Mon, 26 Feb 2024 14:34:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1708986896; cv=pass; d=google.com; s=arc-20160816; b=JLAhtnEEL1E83UlphWD/N5dnsETelYRUjdNQlKSTxuNNvH3mUZLKvpe7b7D0AqEADo jpkFiKFNWNHVTQK2r/LOrkvCR0YoAa/vDDffZ5xqJe8WzDOokAWzgRKlNPWUy8os14nv Xo38M+G87nqMlCka0vCVQisguLMMdXJ2TDURrcvzyDV6PiaVoUpaaT7BHzjaSfbzjFS3 4p9GDsO1zl6fplvxvTEk8OLc6K+C2H0Y8SYaCyyjAE88jjRifFtse50sW1crsNJx/HnC FFMkl59rzImQ+3VPM8Vdp+A918ybk0hvCOYyvbjfhXZXPXadoSw+tXcPRogR/IDl2U/6 14Wg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=vuIzu435dlmGo3lOGVsPepILsYzogjK0C5/lBC0KUtk=; fh=qMqScZTPJuw77VDmnUeaBkH/ZlP0U35dktGLNN3M+dE=; b=SboMKIBRm5YZf+ujDmqfDOGUtQOJHWnNbQ4xoW4ebN07W8NVP3ttl2K8Q4UxJ/GEDB 1Vx/nBPFNutVmsKGR3yH4HMXoODTvRgMfYOa/xRzPyx4iSoPWPI3APql1bPE9aR7MKcf wrdu9moJCzCdEccydbR9G4xtQROQeFpYbA04FUovqnfbWONL4+7X6FpwZyo6mTlN9kLD BI7NBvdlFNl5dIHimyWqnUiv48Bv+rHq8d+U9Wp17Io3tWCKcyWhASn8RWOOjBnD5trV 1x4paB+tIBrgtRmpQhBOwdr2N9or/1Z8vZ2X4GraxJYhDXP3XAKgbxuu+hu0C+ZDOhw4 oikw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=af5UOfVa; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-82405-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-82405-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id hq6-20020a056a00680600b006e0975f5ebdsi4399019pfb.177.2024.02.26.14.34.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Feb 2024 14:34:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-82405-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=af5UOfVa; arc=pass (i=1 spf=pass spfdomain=chromium.org dkim=pass dkdomain=chromium.org dmarc=pass fromdomain=chromium.org); spf=pass (google.com: domain of linux-kernel+bounces-82405-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-82405-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 436B1B21CE1 for ; Mon, 26 Feb 2024 22:29:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D0EBF1332BA; Mon, 26 Feb 2024 22:29:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="af5UOfVa" Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01530133297 for ; Mon, 26 Feb 2024 22:29:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708986576; cv=none; b=gNihK53A2777egmmHH3OBXyG+r8GtR5mcsJ0IFgBEz/lWJZGslF+Jg9DMP8i6DL5cdnARVgvoStzxPBpali1gPnpTpdfkiw/nGCe1ovAereaACtm/AipVnwHZ9kP2SdiUgUYCr74ESpD3Cbsdb6BaoGk+xaIX6and0KGtyW1qEQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708986576; c=relaxed/simple; bh=DsDDSyPBgZqnY3CSzZlOLHq/B5mOa9M41a1se4ku2zU=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=OU0TN4FlS7D6xJPxmzCegqYiuT+x0dxNL9E5RhhBBDUl/Uoq46Lw8Fp0foYGrcT5MgaZhyJU2XvuIGH8NeR2ORAYtK6oVSkvaxrXpk3DrmoosNWNzfgiSrRfMvgW0rb9C7+17WMew27ufNdX3RxNgKOdjh/YbqMGsvDJHU5qoVY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=af5UOfVa; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-a28a6cef709so556487066b.1 for ; Mon, 26 Feb 2024 14:29:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1708986572; x=1709591372; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=vuIzu435dlmGo3lOGVsPepILsYzogjK0C5/lBC0KUtk=; b=af5UOfVaWAxaDugkaTnj7y6IhKiWNZnYd+pfuqUbrSNgNf/9RUV/V/1gOzpl/+QXxA upjJMaTea1s7sfOxn9knRN2lIrDN/E+TwMw39Pdd+RSVpiF7NPC8Cwe0jquLiIwBnlWO LWVGqr6LVigqUjmDJDz055/zspHsKgV1xYr9Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708986572; x=1709591372; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vuIzu435dlmGo3lOGVsPepILsYzogjK0C5/lBC0KUtk=; b=PCtGAG/xIbhWJCUxrgcLuWFOyAP4KsYiSNOclZiokCJqXNGRYOwNCU9RJvjy4ONgnO mBh2zPn8M+ydoN5fd3OZDeSrR9g6neM1280esx0yA8zbjwApnkK25ErOnIodLd5PV5qr qUD2ktjka2htGrzp4xnEArfykF4pmMRMs3F+RLd7hLaUU18YZqFKo2nmT6oQqYJHJY+6 XmRTBWkcfL9kpCajs3RkFeMvHloiISSC3A1NvkeKtdafZvlx2aFDvjvtTouJwBXqR+UI FJ2M0aNkOM3pewgdIJQX0Tbw93zsCCYrXNcymU8DXos+W/am7anGcOlMSTv6LrmJqU2n XbTA== X-Forwarded-Encrypted: i=1; AJvYcCWPhCdTPBaMKcbQa6idPDWMRArp5vkY3efwI9h8GKGl5ck3UIVamGoq4a2JCoQqDwndhuYUZVQQ4yLC1Oj7kAaajWucT7oGcqIzAWc/ X-Gm-Message-State: AOJu0YzeAXe1hOCpTa12ntXtVSHYM3N5jDVTwSd1YqnSMsOxnWrRsfrj SnIJFvdGdwg+J8F8yZs1PP0tOQvoDN9dGvYArVCInrUmDW34v53mKJyU7M2+Uo2xy2Nm08Jo0l0 U+qBW X-Received: by 2002:a17:906:5841:b0:a42:e756:23ef with SMTP id h1-20020a170906584100b00a42e75623efmr4902955ejs.7.1708986572470; Mon, 26 Feb 2024 14:29:32 -0800 (PST) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com. [209.85.128.45]) by smtp.gmail.com with ESMTPSA id hu11-20020a170907a08b00b00a3fcbd4eb2esm157498ejc.1.2024.02.26.14.29.31 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 26 Feb 2024 14:29:31 -0800 (PST) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-412a2c2ce88so4455e9.1 for ; Mon, 26 Feb 2024 14:29:31 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUywyrLDep7Iae5CGOqwyDuv44ynSdJCqHWz3RpikrbMkumFcsu4lZyQAI3L5C0erX1JG1TluponU2hQF0f6uW2mnO16JdoZlA3SohE X-Received: by 2002:a05:600c:1d8b:b0:412:a80e:a5cc with SMTP id p11-20020a05600c1d8b00b00412a80ea5ccmr28353wms.1.1708986571269; Mon, 26 Feb 2024 14:29:31 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240223223958.3887423-1-hsinyi@chromium.org> <20240223223958.3887423-3-hsinyi@chromium.org> In-Reply-To: <20240223223958.3887423-3-hsinyi@chromium.org> From: Doug Anderson Date: Mon, 26 Feb 2024 14:29:17 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 2/2] drm/panel: panel-edp: Match with panel hash for overridden modes To: Hsin-Yi Wang Cc: Neil Armstrong , Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Fri, Feb 23, 2024 at 2:40=E2=80=AFPM Hsin-Yi Wang = wrote: > > It's found that some panels have variants that they share the same panel = id > although their EDID and names are different. One of the variants requires > using overridden modes to resolve glitching issue as described in commit > 70e0d5550f5c ("drm/panel-edp: Add auo_b116xa3_mode"). Other variants shou= ld > use the modes parsed from EDID. > > For example, AUO 0x405c B116XAK01.0, it has at least 2 different variants > that EDID and panel name are different, but using the same panel id. One = of > the variants require using overridden mode. Same case for AUO 0x615c > B116XAN06.1. > > Add such entries and use the hash of the EDID to match the panel needs th= e > overridden modes. As pointed out in an offline discussion, it's possible that we might want to "ignore" some of these bytes for the purpose of the CRC. Specifically, we might want to ignore: * byte 16 - Week of manufacture * byte 17 - Year of manufacture * byte 127 - Checksum That way if a manufacturer actually is updating those numbers in production we can still have one hash that captures all the panels. I have no idea if manufacturers actually are, but IMO the hash of the rest of the base block should be sufficient to differentiate between different panels anyway. It would be easy to just zero out those 3 bytes before computing the CRC. What do you think? > @@ -758,13 +762,13 @@ static void panel_edp_parse_panel_timing_node(struc= t device *dev, > dev_err(dev, "Reject override mode: No display_timing fou= nd\n"); > } > > -static const struct edp_panel_entry *find_edp_panel(u32 panel_id); > +static const struct edp_panel_entry *find_edp_panel(u32 panel_id, u32 pa= nel_hash); > > static int generic_edp_panel_probe(struct device *dev, struct panel_edp = *panel) > { > struct panel_desc *desc; > void *base_block; > - u32 panel_id; > + u32 panel_id, panel_hash; > char vend[4]; > u16 product_id; > u32 reliable_ms =3D 0; > @@ -796,15 +800,17 @@ static int generic_edp_panel_probe(struct device *d= ev, struct panel_edp *panel) > base_block =3D drm_edid_get_base_block(panel->ddc); > if (base_block) { > panel_id =3D drm_edid_get_panel_id(base_block); > + panel_hash =3D crc32_le(~0, base_block, EDID_LENGTH) ^ 0x= ffffffff; Any reason you need to XOR with 0xffffffff? > @@ -2077,13 +2098,32 @@ static const struct edp_panel_entry edp_panels[] = =3D { > { /* sentinal */ } > }; > > -static const struct edp_panel_entry *find_edp_panel(u32 panel_id) > +/* > + * Similar to edp_panels, this table lists panel variants that require u= sing > + * overridden modes but have the same panel id as one of the entries in = edp_panels. > + * > + * Sort first by vendor, then by product ID. Add ", then by hash" just in case we need it. > +static const struct edp_panel_entry *find_edp_panel(u32 panel_id, u32 pa= nel_hash) > { > const struct edp_panel_entry *panel; > > - if (!panel_id) > + if (!panel_id || !panel_hash) > return NULL; IMO just remove the check above. Not sure why it was there in the first place. Maybe I had it from some older version of the code? Callers shouldn't be calling us with a panel ID / hash of 0 anyway, and if they do they'll go through the loop and return NULL anyway. -Doug