Received: by 2002:ab2:1689:0:b0:1f7:5705:b850 with SMTP id d9csp2192166lqa; Tue, 30 Apr 2024 10:24:57 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWZN++2W6G+lpZAfTKc+fWYYOKcwr7sDW4fvRXAGbT4I5xVyJxkWMkRzvu1tRgc3vHbt0H0cWX2CSpmfYhHSztWDc8OV6eUtL8yn0ZTYQ== X-Google-Smtp-Source: AGHT+IGB88sqXcxDsZr2bT/fajVLTxG/5rzyREstFTTMAzOn81imqlOIzxYlCL5IpBtcUnMflSFF X-Received: by 2002:a05:6214:29e7:b0:6a0:585d:a4c6 with SMTP id jv7-20020a05621429e700b006a0585da4c6mr7380qvb.6.1714497897619; Tue, 30 Apr 2024 10:24:57 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1714497897; cv=pass; d=google.com; s=arc-20160816; b=SgIZkDz28seXngZpL2aflC0ZNvAi9j62M90XmasiIMBmJCJDiWwYChzzCc+pjdTkgZ RQ3IYtcej5EjMXHWYz2HqWM9udQqV4j6TO4ODxQ7iWVOkYFWe0tL22bZ9N3iZiDQdpty 1mgfSOWtIHDpVIq3Lrpgt0xlfGaYuBYdwmuxEbyqlUfu7btX2cmXuaq6nMJqC2JF2Uah 2+0BTrh4nrEXxiWkFBx4EgvIpbUGNCLg0wULAIja7Ft3jT0bIPJv2wwhQ4KLmx+yhQqg IYq7mfoh/m+wVa5RQsoYNxXylZiYHufxxsbCaP5zi6Ip/J7HZBO7Psexh+hKIF8JfEgy LP2Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:dkim-signature:message-id; bh=u6cvR+X+VTN7k+bifr0f/ldVo1lSqSo24pnGJ+MMSJI=; fh=BGRuwqN15tL0fWyp5U/uxOJjpTOO5xRn0i3/oCaDrd8=; b=AlQLCcl552aza48RvuV9jRXAk2P95ZEUVYwaJSYm6jg/vP+w6IatET5HbI2oDVjXLc xOQ6pQvcA4deALxHVo30PRK0MlOyOnE3RDED+V2shYDdY+St/DxAvgsM0d+JqWc3gCkP 8JRHQjqYTKPVO78tfNMaav//lmnscTx39iGN/TnbI2r65d3npKO/7RM+O8S6uHc+JRWR VZZag26xeJM+qb/F+xg5Y3YdpRwFq+jw+VfsicQWui0yS8bAkspypajRaPBjKuaKgPX0 IUjgGEWchtGaLt3d8vnNflt5B6qxjGkWCcmfW0GQ8QBoAw/vw441q91nnAuPLIdfC3mX stGA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=jsx8jlX4; arc=pass (i=1 spf=pass spfdomain=linux.dev dkim=pass dkdomain=linux.dev dmarc=pass fromdomain=linux.dev); spf=pass (google.com: domain of linux-kernel+bounces-164507-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-164507-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id 1-20020a05621420e100b0069b7a4e618csi29170109qvk.249.2024.04.30.10.24.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Apr 2024 10:24:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-164507-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=jsx8jlX4; arc=pass (i=1 spf=pass spfdomain=linux.dev dkim=pass dkdomain=linux.dev dmarc=pass fromdomain=linux.dev); spf=pass (google.com: domain of linux-kernel+bounces-164507-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-164507-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev 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 ny.mirrors.kernel.org (Postfix) with ESMTPS id 47E1D1C21665 for ; Tue, 30 Apr 2024 17:24:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CA2D9181B85; Tue, 30 Apr 2024 17:24:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="jsx8jlX4" Received: from out-189.mta1.migadu.com (out-189.mta1.migadu.com [95.215.58.189]) (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 648FF180A7B for ; Tue, 30 Apr 2024 17:24:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.189 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714497863; cv=none; b=DlcQ9xBJRPmeJnC1/3bN1TeEqTS9/95S4Z/Nf1f/3YsekKziIFsS18DMmTPZwBDkf/YuXUw1mtbWGFEZbZ81hyBIWUAmy95SAhEtw0NBuz4rSGqVuepRE8U6aYHvq0WHYAs8Z9OG1elcuWheRrGr0r1/iXfMKH60CLsKIR25j2A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714497863; c=relaxed/simple; bh=Jbv1CKbQH51NNLt8FPHzeC5K5vgSUIcTCy7hPITqKnU=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=bUeY3ux/kLk5gMBa0Bnflv8p5hdLo7VvsINwvOFAXOENtmmzwiy99RHogCMBTXi2KTFuGg7LrYUbr9U7QE47wUKxlGHr1TBL7Tnw74U8qm3OFLVovnU0d2JhRdVrmq5dTcigWX4b4LVE8ohL6aDb4N6UHXvzozJjJhHEn5prgMM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=jsx8jlX4; arc=none smtp.client-ip=95.215.58.189 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Message-ID: <960adb98-9f66-4d62-88b2-3e512601459f@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1714497857; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=u6cvR+X+VTN7k+bifr0f/ldVo1lSqSo24pnGJ+MMSJI=; b=jsx8jlX4Sov6HY+0dGT//4ZF3dTWYZ6YdVetSf/GlBFSoJS36LWmsY9fiuKSHHl+kgMdbK NsnZT1WKQK/xJAnBDbR/SToC16qBz2V9P8KC6H8Hi280PqydlYt6bD6b6L2ANA9K2ZJEsW Gp/yPwvqYf2y/e9RiRI7C+eejsYQQXg= Date: Wed, 1 May 2024 01:24:09 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Subject: Re: [v1,1/3] drm/panel: ili9341: Correct use of device property APIs To: Andy Shevchenko Cc: Neil Armstrong , Randy Dunlap , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Jessica Zhang , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter References: <20240425142706.2440113-2-andriy.shevchenko@linux.intel.com> <2599705c-0a64-4742-b1d7-330e9fde6e7a@linux.dev> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Sui Jingfeng In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_OUT Hi, On 2024/4/30 22:32, Andy Shevchenko wrote: > On Fri, Apr 26, 2024 at 04:43:18AM +0800, Sui Jingfeng wrote: >> On 2024/4/26 03:10, Andy Shevchenko wrote: >>> On Fri, Apr 26, 2024 at 02:08:16AM +0800, Sui Jingfeng wrote: >>>> On 2024/4/25 22:26, Andy Shevchenko wrote: >>>>> It seems driver missed the point of proper use of device property APIs. >>>>> Correct this by updating headers and calls respectively. >>>> You are using the 'seems' here exactly saying that you are not 100% sure. > To add here, "seems" is used to show that I have no knowledge on what was > the idea behind this implementation by the original author. Plus my knowledge > in the firmware node / device property APIs and use cases in Linux kernel. > >>>> Please allow me to tell you the truth: This patch again has ZERO effect. >>>> It fix nothing. And this patch is has the risks to be wrong. >>> Huh?! Really, stop commenting the stuff you do not understand. >> I'm actually a professional display drivers developer at the downstream >> in the past, despite my contribution to upstream is less. But I believe >> that all panel driver developers know what I'm talking about. So please >> have take a look at my replies. > Okay. > >>>> Simple because the "ili9341_probe() ---> ili9341_dbi_prob()" code path >>>> is DT dependent. >>>> >>>> First of all, the devm_of_find_backlight() is called in ili9341_dbi_probe() >>>> under *non-DT* environment, devm_of_find_backlight() is just a just a >>>> no-op and will return NULL. NULL is not an error code, so ili9341_dbi_probe() >>>> won't rage quit. But the several side effect is that the backlight will >>>> NOT works at all. >>> Is it a problem? >> Yes, it is. >> >> The core problem is that the driver you are modifying has *implicit* *dependency* on DT. >> The implicit dependency is due to the calling of devm_of_find_backlight(). This function >> is a no-op under non-DT systems. > Okay. > >> Therefore, before the devm_of_find_backlight() and >> the device_get_match_data() function can truly DT independent. > True for the first part, not true for the second. > >> Removing the "OF" dependency just let the tigers run out from the jail. >> >> It is not really meant to targeting at you, but I thinks, all of drm_panel drivers >> that has the devm_of_find_backlight() invoked will suffer such concerns. >> In short, the reason is that the *implicit* *dependency* populates and >> the undefined behavior gets triggered. > Still no problem statement. My hardware works nicely on non-DT environment. > (And since it's Arduino-based one, I assume it will work on DT environments > the very same way.) > >> I'm sure you know that device_get_match_data() is same with of_device_get_match_data() >> for DT based systems. For non DT based systems, device_get_match_data() is just *undefined* >> Note that ACPI is not in the scope of the discussion here, as all of the drm bridges and >> panels driver under drivers/gpu/drm/ hasn't the ACPI support yet. > This patch shows exactly how to bring back the ACPI support to one of them > (as it's done for tinyDRM cases). > >> Therefore, at present, >> it safe to say that device_get_match_data() is *undefined* under no-DT environment. > This is not true. > >> Removing the "OF" dependency hints to us that it allows the driver to be probed as a >> pure SPI device under non DT systems. When device_get_match_data() is called, it returns >> NULL to us now. As a result, the drm driver being modified will tears down. >> >> See bellow code snippet extracted frompanel-ilitek-ili9341.c: >> >> >> ``` >> ili->conf = of_device_get_match_data(dev); >> if (!ili->conf) { >> dev_err(dev, "missing device configuration\n"); >> return -ENODEV; >> } >> ``` >> >>>> It is actually considered as fatal bug for *panels* if the backlight of >>>> it is not light up, at least the brightness of *won't* be able to adjust. >>>> What's worse, if there is no sane platform setup code at the firmware >>>> or boot loader stage to set a proper initial state. The screen is complete >>>> dark. Even though the itself panel is refreshing framebuffers, it can not >>>> be seen by human's eye. Simple because of no backlight. >>> Can you imagine that I may have different hardware that considered >>> this is non-fatal error? >>> >> Yes, I can imagine. >> >> I believe you have the hardware which make you patch correct to run >> in 99.9% of all cases. But as long as there one bug happened, you patch >> are going to be blamed. >> >> Because its your patch that open the door, both from the perceptive of >> practice and from the perceptive of the concept (static analysis). >> >>>> Second, the ili9341_dbi_probe() requires additional device properties to >>>> be able to works very well on the rotation screen case. See the calling >>>> of "device_property_read_u32(dev, "rotation", &rotation)" in >>>> ili9341_dbi_probe() function. >>> Yes, exactly, and how does it object the purpose of this patch? >> Because under *non-DT* environment, your commit message do not give a >> valid description, how does the additional device property can be acquired >> is not demonstrated. >> >> And it is exactly your patch open the non-DT code path (way or possibility). >> It isn't has such risks before your patch is applied. In other words, >> previously, the driver has the 'OF' dependency as the guard, all of the >> potential risk(or problem) are suppressed. It is a extremely safe policy, >> and it is also a extremely perfect defend. >> >> And suddenly, you patch release the dangerous tiger from the cage. >> So I think you can imagine... > No, I can't, sorry. I don't see how dangerous will be the use of DRM panel > in a wrong configuration. The same can very well happen on improperly working > hardware (backlight part) or simply when somebody didn't correctly set a DT > or manually use it when it should not be. But again I see *no* problem > statement, only some worries. > > And on top of that I made tinyDRM drivers to be accessible on ACPI platforms > and so far I have none complains about the tigers that left the cage. > >>>> Combine with those two factors, it is actually can conclude that the >>>> panel-ilitek-ili9394 driver has the *implicit* dependency on 'OF'. >>>> Removing the 'OF' dependency from its Kconfig just trigger the >>>> leakage of such risks. >>> What?! >>> >> Posting a patch is actually doing the defensive works, such a saying >> may not sound fair for you, but this is just the hash cruel reality. >> Sorry for saying that. :( > So, the summary of your message is that: > - there's no understanding how ACPI (or any other non-DT fwnode based > environment) can utilise the driver > - there's a worry about some problems which can't be stated clearly > - there's a neglecting of the previous successful cases specific for DRM > (tinyDRM drivers) > > As a result of the false input, the non-constructive conclusion was given. > > And note, I converted dozens if not hundredth of drivers that used to be > OF-only and haven't heart any negative feedback before this case. Maybe > we (reviewers of my patches and maintainers who applied them and end users) > miss a BIG DEAL here? Please, elaborate how dropping OF dependency can be > dangerous as a free walking tiger. > >>>> My software node related patches can help to reduce part of the potential >>>> risks, but it still need some extra work. And it is not landed yet. >>> Your patch has nothing to do with this series. > I am not going to repeat the above. > >> With my patch applied, this is way to meet the gap under non-DT systems. >> Users of this driver could managed to attach(complete) absent properties >> to the SPI device with software node properties. Register the swnode >> properties group into the system prior the panel driver is probed. There >> may need some quirk. But at the least there has a way to go. When there >> has a way to go, things become self-consistent. Viewed from both the >> practice of viewpoint and the concept of viewpoint. >> >> And the dangerous tiger will steer its way to the direction of "ACPI >> support is missing". But both of will be safe then. I have no obvious opinions then, code inside this patch seems no obvious problem for majority applications. Sorry about the noise and thanks for reply. -- Best regards, Sui