Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp9614720ybc; Sat, 30 Nov 2019 10:40:51 -0800 (PST) X-Google-Smtp-Source: APXvYqwXPy9VO8w8FdGMTArTVEC6iB3Mu7asjHFPWWPm+TwdZ//AXxfQIVWhvtO3qYLLmMkhs3PU X-Received: by 2002:a05:6402:50a:: with SMTP id m10mr47955831edv.47.1575139250942; Sat, 30 Nov 2019 10:40:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575139250; cv=none; d=google.com; s=arc-20160816; b=ai/TZxQI4UgmWVisnn/tow+XYcC5Zss3qgTC4JUNwTfkRqXNv//RaSm/wtiOErRjDc 1HsmJtDQ3Rgk4Gx6pmA8x2221V0+7rKQ4TtkVsb7b7vZF6cgEWXrqf7YqcE71NN9qaZp llurA5K2vFEEZtxyIwfwdKmPfFPWNH7Il8ebsQhACjQ0nblf6ilEAjDxzyp/lojMNaSE v1TyfZB8/BJ4wWkDB0xlCLW0aYmnoNcjSyM6NI0RqBmfPEPxb1XhveXMxmHth+SxoccT hFLhS0D90Bbeo5FftcdndNHSDVDH4+0VAZ43R8WSiJTO9iPPoOMHt0N4IW22QD81uJhl f2lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=CyHHFJp2Gs1Mt5oXtJiggRMkVlwmo7yWvGP5ot7H7mk=; b=y+vci4aPvmeTmx0FaAzyzmys274GwPFDDsKU18qX+rNFvtnPc8gJtnmmwED43sKdu+ /kpe6YjeiEV26lJpejjz+dE0/Y6Hm9rv31pLLipTJraw9CuvUgYhSiHcDcHROFDlcTmB AxEaYvEB/vglXX9jk4opj5KY9r1dNDgp8ykd0vgyYMjn/YOrzoW5cO64LO5bwZXjE9bD O1CyRgxgKARhxk3BNd45jJhU31HeAebQdwAWFrzzyKMYozIJos3cTmb1FzjIuZ73cWL5 buuRQdQmnH4RmZKeiRMZA6ogWwBRklW/VdfsBCXsGunGQIhLPQD+OuD6ehw7/NxEfcuU 3l9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qAiM54mA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h13si8342793ejb.253.2019.11.30.10.40.27; Sat, 30 Nov 2019 10:40:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qAiM54mA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727266AbfK3Sj1 (ORCPT + 99 others); Sat, 30 Nov 2019 13:39:27 -0500 Received: from mail-ed1-f66.google.com ([209.85.208.66]:33015 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726936AbfK3Sj1 (ORCPT ); Sat, 30 Nov 2019 13:39:27 -0500 Received: by mail-ed1-f66.google.com with SMTP id l63so1097088ede.0; Sat, 30 Nov 2019 10:39:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=CyHHFJp2Gs1Mt5oXtJiggRMkVlwmo7yWvGP5ot7H7mk=; b=qAiM54mAvXoOnICoLu1O9KRN6bvk3hIoAUcjwCkrYS74oIEsLTY/IDkCxc2XRIveOI 3WEST/O1EJ9Mr26J3psniVYsnr11Q/noXuZLDX3Bg33xfLHoglx1rUU8VAVVj64p6lI/ Q/GkASxUBSZ8mUIkYu7hCkCYWCeUVAL9JU6Vn0Q7VM0f0iNGmodA0OTuiEkdy0/0qbQN 3kEChGzTLrh1eSOX7MWntoPSHOJ/91yigxQb5/zU4Udtlj5lQD4necKd/JtMKqsdAVOQ GVwxlla1ZZHHKtESY6dQelGAmhJ4Eg72+RtNS+UBDRC/2GvtN6TWunZpxaGCff4Gy/4n R/YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=CyHHFJp2Gs1Mt5oXtJiggRMkVlwmo7yWvGP5ot7H7mk=; b=AJg/EjnyoBEZ658cIupBsa0JzReQoGEXpz479zhyKpB8/9FvXcahPV+7xUCNzSxjNt LzFyGKrHm269uzoqrgW0kmrCNyDddrpLvuzn8FZcS11dqWoPURFm2ZdJvLGIquT5GATe nPzef3hlv42xdUSGkmFIzoJxl/9wPFrOGEhw0Dlp1b21gSrkyzONhADOJ722hxDiDTKZ Jb9MOOb0LGbUmG1OMDLPnvAxiIwGEsnxdWrU/M0cEHIlbfRbBgac3HpRrI65cHzJQ+nH 9dGAaVR6AXWXehgwWrL/Vf5yAmX/34UEc5u4K94mmfzQyQaCgbQt5iN98HK1mSxg8TSM 61kQ== X-Gm-Message-State: APjAAAU6dA7PErdbm55Jzl52wbRUFoNC2FWJ1Hw+HQBnJPU07eDewVaP x5adwIlplu8Xkn7rqREO5S1fq4kO6F/vRccTHp0= X-Received: by 2002:a17:906:34d7:: with SMTP id h23mr10012882ejb.90.1575139162974; Sat, 30 Nov 2019 10:39:22 -0800 (PST) MIME-Version: 1.0 References: <20190630203614.5290-1-robdclark@gmail.com> <20190630203614.5290-2-robdclark@gmail.com> In-Reply-To: From: Rob Clark Date: Sat, 30 Nov 2019 10:39:10 -0800 Message-ID: Subject: Re: [PATCH 1/4] dt-bindings: chosen: document panel-id binding To: Rob Herring Cc: dri-devel , linux-arm-msm , freedreno , aarch64-laptops@lists.linaro.org, Rob Clark , Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "linux-kernel@vger.kernel.org" , Vasily Khoruzhick Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Nov 30, 2019 at 10:37 AM Rob Clark wrote: > > On Mon, Jul 1, 2019 at 7:03 AM Rob Herring wrote: > > > > On Sun, Jun 30, 2019 at 2:36 PM Rob Clark wrote: > > > > > > From: Rob Clark > > > > > > The panel-id property in chosen can be used to communicate which panel, > > > of multiple possibilities, is installed. > > > > > > Signed-off-by: Rob Clark > > > --- > > > Documentation/devicetree/bindings/chosen.txt | 69 ++++++++++++++++++++ > > > 1 file changed, 69 insertions(+) > > > > I need to update this file to say it's moved to the schema repository... > > > > But I don't think that will matter... > > > > > diff --git a/Documentation/devicetree/bindings/chosen.txt b/Documentation/devicetree/bindings/chosen.txt > > > index 45e79172a646..d502e6489b8b 100644 > > > --- a/Documentation/devicetree/bindings/chosen.txt > > > +++ b/Documentation/devicetree/bindings/chosen.txt > > > @@ -68,6 +68,75 @@ on PowerPC "stdout" if "stdout-path" is not found. However, the > > > "linux,stdout-path" and "stdout" properties are deprecated. New platforms > > > should only use the "stdout-path" property. > > > > > > +panel-id > > > +-------- > > > + > > > +For devices that have multiple possible display panels (multi-sourcing the > > > +display panels is common on laptops, phones, tablets), this allows the > > > +bootloader to communicate which panel is installed, e.g. > > > > How does the bootloader figure out which panel? Why can't the kernel > > do the same thing? > > > > > + > > > +/ { > > > + chosen { > > > + panel-id = <0xc4>; > > > + }; > > > + > > > + ivo_panel { > > > + compatible = "ivo,m133nwf4-r0"; > > > + power-supply = <&vlcm_3v3>; > > > + no-hpd; > > > + > > > + ports { > > > + port { > > > + ivo_panel_in_edp: endpoint { > > > + remote-endpoint = <&sn65dsi86_out_ivo>; > > > + }; > > > + }; > > > + }; > > > + }; > > > + > > > + boe_panel { > > > + compatible = "boe,nv133fhm-n61"; > > > > Both panels are going to probe. So the bootloader needs to disable the > > not populated panel setting 'status' (or delete the node). If you do > > that, do you even need 'panel-id'? > > > > So, I'm finally having some time to revisit this proposal.. I have a > few updates: > > + Updated DtbLoader.efi to read UEFIDisplayInfo and get the panel-id > so I can drop the efi/libstub patch[1] > + I can drop drm_of_find_panel_id() and fold the logic to look at > /chosen/panel-id into drm_of_find_panel_or_bridge() so that each > driver or bridge doesn't need an update > > This doesn't realy solve the issue that both panels will probe. On > the other hand, I really don't want to make the DtbLoader know enough > about the dt structure of each laptop to patch dt, since that is not > going to be scalable at all. (Likewise, there is some interest for > devices that use u-boot to take the panel-id from a uboot env var and > patch dt, but again knowing enough to intelligently patch the dt is > not going to be feasible.) > > But, an alternate solution could be, instead of adding a 'panel-id' > node in chosen, I could add it as an optional property in the panel > node. So taking my original example of the yoga c630 laptops, with > the two possible panel id's 0xc4 and 0xc5: > > ivo_panel { > compatible = "ivo,m133nwf4-r0"; > panel-id = <0xc4>; correction, the ivo panel should have panel-id = <0xc5> > status = "disabled"; > > ports { > port { > ivo_panel_in_edp: endpoint { > remote-endpoint = <&sn65dsi86_out_ivo>; > }; > }; > }; > }; > > boe_panel { > compatible = "boe,nv133fhm-n61"; > panel-id = <0xc4>; > status = "disabled"; > > ports { > port { > boe_panel_in_edp: endpoint { > remote-endpoint = <&sn65dsi86_out_boe>; > }; > }; > }; > }; > > sn65dsi86: bridge@2c { > compatible = "ti,sn65dsi86"; > > ports { > #address-cells = <1>; > #size-cells = <0>; > > port@0 { > reg = <0>; > sn65dsi86_in_a: endpoint { > remote-endpoint = <&dsi0_out>; > }; > }; > > port@1 { > reg = <1>; > > sn65dsi86_out_boe: endpoint@c4 { > remote-endpoint = <&boe_panel_in_edp>; > }; > > sn65dsi86_out_ivo: endpoint@c5 { > remote-endpoint = <&ivo_panel_in_edp>; > }; > }; > }; > }; > > With this, the "firmware" (DtbLoader, u-boot, etc) could crawl the > entire dt looking for a node with a panel-id that matches the one it's > looking for, and change that node's status to enabled. > > The advantage would be that the other panel(s) that is not installed > will not be probed. The downsides are that (1) the drm drivers would > have to loop over all the endpoints to find the active panel (some > drivers do this already, most do not), and (2) the property name > "panel-id" (or whatever we pick) will now be somehow special, you > couldn't re-use that name elsewhere without potential to confuse the > firmware. And it is more complexity in the firmware (although at > least it can be done generically) compared to just adding a property > in chosen. > > Not sure if this is better, I thought my initial proposal was more > elegant. I am open to other suggestions, anything other than teaching > DtbLoader/u-boot about the specific dt of each different device that > would use this. > > BR, > -R > > [1] https://github.com/robclark/edk2/commits/dtbloader