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 X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8B5AFC4360C for ; Wed, 25 Sep 2019 21:33:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5626B222BF for ; Wed, 25 Sep 2019 21:33:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569447218; bh=TszXw7S5GIEzEo992EEMfz4W0WtzSxu1MBpaBhf4tmw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:List-ID:From; b=uEj01bUjaAZdhjF1sWO1kD+VdMfParRj0ULQ39tDCHzdQNyuoAWnTNdzEarAnzI0I MpJdwSwzbomNg0IzYdHUUKwskQPJ0/3ibr/UJ73ANLx/0l+peOa/+92FyEXNSbNRik rCr4IdGDpzLxGs2Tvnqpo/QXw1HedRrhXa50DoI8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727077AbfIYVdi (ORCPT ); Wed, 25 Sep 2019 17:33:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:45994 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727058AbfIYVdh (ORCPT ); Wed, 25 Sep 2019 17:33:37 -0400 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 95011222BD; Wed, 25 Sep 2019 21:33:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569447215; bh=TszXw7S5GIEzEo992EEMfz4W0WtzSxu1MBpaBhf4tmw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=QlI2Sj1D5LJahPlbpQRPzC/Kfp42A3NwekR29GtyvfIPAZlvPN1zAfycydpBTfcd8 IvT8WVCyptqcO23hrQq7/1AbSsfzPRa68TLRQRP+hrXx+5Qsz/4M4CfEt25gMVn9on EMq0EmayAeKNvnaIFqzE8CzGz5kGoSiMNjw4W64I= Received: by mail-qt1-f181.google.com with SMTP id m15so298885qtq.2; Wed, 25 Sep 2019 14:33:35 -0700 (PDT) X-Gm-Message-State: APjAAAU/MDgYmsvDWUxhr0S/Q958v/NMn7J4JTGJNu6zn2KE6uwZuvLx +uW755Pt4Q2Nc+sOQUjGxURuNzeHmiO1sPSfVA== X-Google-Smtp-Source: APXvYqy9YJ9VRUtFzrkZ+iKb5Tx5rlamJJuwaAKBRmCflwCEbYKpuVBbZPPVrEImTOCJgn8Jl5TlEwRQfbhe0HNZXOU= X-Received: by 2002:a0c:8a6d:: with SMTP id 42mr1647258qvu.138.1569447214653; Wed, 25 Sep 2019 14:33:34 -0700 (PDT) MIME-Version: 1.0 References: <20190924181244.7159-1-nsaenzjulienne@suse.de> <43fb5fe1de317d65a4edf592f88ea150c6e3b8cc.camel@suse.de> In-Reply-To: From: Rob Herring Date: Wed, 25 Sep 2019 16:33:23 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 00/11] of: Fix DMA configuration for non-DT masters To: Robin Murphy Cc: Nicolas Saenz Julienne , devicetree@vger.kernel.org, Matthias Brugger , linux-arm-msm , linux-wireless , "linux-kernel@vger.kernel.org" , dri-devel , etnaviv@lists.freedesktop.org, linux-tegra@vger.kernel.org, Florian Fainelli , Stefan Wahren , james.quinlan@broadcom.com, linux-pci@vger.kernel.org, "open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM" , xen-devel@lists.xenproject.org, Dan Williams , freedreno , Frank Rowand , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , Linux Media Mailing List Content-Type: text/plain; charset="UTF-8" Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org On Wed, Sep 25, 2019 at 11:52 AM Robin Murphy wrote: > > On 25/09/2019 17:16, Rob Herring wrote: > > On Wed, Sep 25, 2019 at 10:30 AM Nicolas Saenz Julienne > > wrote: > >> > >> On Wed, 2019-09-25 at 16:09 +0100, Robin Murphy wrote: > >>> On 25/09/2019 15:52, Nicolas Saenz Julienne wrote: > >>>> On Tue, 2019-09-24 at 16:59 -0500, Rob Herring wrote: > >>>>> On Tue, Sep 24, 2019 at 1:12 PM Nicolas Saenz Julienne > >>>>> wrote: > >>>>>> Hi All, > >>>>>> this series tries to address one of the issues blocking us from > >>>>>> upstreaming Broadcom's STB PCIe controller[1]. Namely, the fact that > >>>>>> devices not represented in DT which sit behind a PCI bus fail to get the > >>>>>> bus' DMA addressing constraints. > >>>>>> > >>>>>> This is due to the fact that of_dma_configure() assumes it's receiving a > >>>>>> DT node representing the device being configured, as opposed to the PCIe > >>>>>> bridge node we currently pass. This causes the code to directly jump > >>>>>> into PCI's parent node when checking for 'dma-ranges' and misses > >>>>>> whatever was set there. > >>>>>> > >>>>>> To address this I create a new API in OF - inspired from Robin Murphys > >>>>>> original proposal[2] - which accepts a bus DT node as it's input in > >>>>>> order to configure a device's DMA constraints. The changes go deep into > >>>>>> of/address.c's implementation, as a device being having a DT node > >>>>>> assumption was pretty strong. > >>>>>> > >>>>>> On top of this work, I also cleaned up of_dma_configure() removing its > >>>>>> redundant arguments and creating an alternative function for the special > >>>>>> cases > >>>>>> not applicable to either the above case or the default usage. > >>>>>> > >>>>>> IMO the resulting functions are more explicit. They will probably > >>>>>> surface some hacky usages that can be properly fixed as I show with the > >>>>>> DT fixes on the Layerscape platform. > >>>>>> > >>>>>> This was also tested on a Raspberry Pi 4 with a custom PCIe driver and > >>>>>> on a Seattle AMD board. > >>>>> > >>>>> Humm, I've been working on this issue too. Looks similar though yours > >>>>> has a lot more churn and there's some other bugs I've found. > >>>> > >>>> That's good news, and yes now that I see it, some stuff on my series is > >>>> overly > >>>> complicated. Specially around of_translate_*(). > >>>> > >>>> On top of that, you removed in of_dma_get_range(): > >>>> > >>>> - /* > >>>> - * At least empty ranges has to be defined for parent node if > >>>> - * DMA is supported > >>>> - */ > >>>> - if (!ranges) > >>>> - break; > >>>> > >>>> Which I assumed was bound to the standard and makes things easier. > >>>> > >>>>> Can you test out this branch[1]. I don't have any h/w needing this, > >>>>> but wrote a unittest and tested with modified QEMU. > >>>> > >>>> I reviewed everything, I did find a minor issue, see the patch attached. > >>> > >>> WRT that patch, the original intent of "force_dma" was purely to > >>> consider a device DMA-capable regardless of the presence of > >>> "dma-ranges". Expecting of_dma_configure() to do anything for a non-OF > >>> device has always been bogus - magic paravirt devices which appear out > >>> of nowhere and expect to be treated as genuine DMA masters are a > >>> separate problem that we haven't really approached yet. > >> > >> I agree it's clearly abusing the function. I have no problem with the behaviour > >> change if it's OK with you. > > Thinking about it, you could probably just remove that call from the Xen > DRM driver now anyway - since the dma-direct rework, we lost the ability > to set dma_dummy_ops by default, and NULL ops now represent what it > (presumably) wants. Not xen_dma_ops? In any case, I'll send out a patch for the the Xen folks to comment on. > >> Robin, have you looked into supporting multiple dma-ranges? It's the next thing > >> we need for BCM STB's PCIe. I'll have a go at it myself if nothing is in the > >> works already. > > > > Multiple dma-ranges as far as configuring inbound windows should work > > already other than the bug when there's any parent translation. But if > > you mean supporting multiple DMA offsets and masks per device in the > > DMA API, there's nothing in the works yet. > > There's also the in-between step of making of_dma_get_range() return a > size based on all the dma-ranges entries rather than only the first one > - otherwise, something like [1] can lead to pretty unworkable default > masks. We implemented that when doing acpi_dma_get_range(), it's just > that the OF counterpart never caught up. Right. I suppose we assume any holes in the ranges are addressable by the device but won't get used for other reasons (such as no memory there). However, to be correct, the range of the dma offset plus mask would need to be within the min start and max end addresses. IOW, while we need to round up (0xa_8000_0000 - 0x2c1c_0000) to the next power of 2, the 'correct' thing to do is round down. Rob > [1] > http://linux-arm.org/git?p=linux-rm.git;a=commitdiff;h=a2814af56b3486c2985a95540a88d8f9fa3a699f From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: Re: [PATCH 00/11] of: Fix DMA configuration for non-DT masters Date: Wed, 25 Sep 2019 16:33:23 -0500 Message-ID: References: <20190924181244.7159-1-nsaenzjulienne@suse.de> <43fb5fe1de317d65a4edf592f88ea150c6e3b8cc.camel@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Robin Murphy Cc: "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Matthias Brugger , Frank Rowand , linux-arm-msm , linux-wireless , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , dri-devel , etnaviv-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, "open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM" , Florian Fainelli , Stefan Wahren , james.quinlan-dY08KVG/lbpWk0Htik3J/w@public.gmane.org, linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, xen-devel-GuqFBffKawtpuQazS67q72D2FQJk+8+b@public.gmane.org, Dan Williams , freedreno , Nicolas Saenz Julienne , Linux Media Mailing List List-Id: linux-tegra@vger.kernel.org T24gV2VkLCBTZXAgMjUsIDIwMTkgYXQgMTE6NTIgQU0gUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJw aHlAYXJtLmNvbT4gd3JvdGU6Cj4KPiBPbiAyNS8wOS8yMDE5IDE3OjE2LCBSb2IgSGVycmluZyB3 cm90ZToKPiA+IE9uIFdlZCwgU2VwIDI1LCAyMDE5IGF0IDEwOjMwIEFNIE5pY29sYXMgU2Flbnog SnVsaWVubmUKPiA+IDxuc2FlbnpqdWxpZW5uZUBzdXNlLmRlPiB3cm90ZToKPiA+Pgo+ID4+IE9u IFdlZCwgMjAxOS0wOS0yNSBhdCAxNjowOSArMDEwMCwgUm9iaW4gTXVycGh5IHdyb3RlOgo+ID4+ PiBPbiAyNS8wOS8yMDE5IDE1OjUyLCBOaWNvbGFzIFNhZW56IEp1bGllbm5lIHdyb3RlOgo+ID4+ Pj4gT24gVHVlLCAyMDE5LTA5LTI0IGF0IDE2OjU5IC0wNTAwLCBSb2IgSGVycmluZyB3cm90ZToK PiA+Pj4+PiBPbiBUdWUsIFNlcCAyNCwgMjAxOSBhdCAxOjEyIFBNIE5pY29sYXMgU2FlbnogSnVs aWVubmUKPiA+Pj4+PiA8bnNhZW56anVsaWVubmVAc3VzZS5kZT4gd3JvdGU6Cj4gPj4+Pj4+IEhp IEFsbCwKPiA+Pj4+Pj4gdGhpcyBzZXJpZXMgdHJpZXMgdG8gYWRkcmVzcyBvbmUgb2YgdGhlIGlz c3VlcyBibG9ja2luZyB1cyBmcm9tCj4gPj4+Pj4+IHVwc3RyZWFtaW5nIEJyb2FkY29tJ3MgU1RC IFBDSWUgY29udHJvbGxlclsxXS4gTmFtZWx5LCB0aGUgZmFjdCB0aGF0Cj4gPj4+Pj4+IGRldmlj ZXMgbm90IHJlcHJlc2VudGVkIGluIERUIHdoaWNoIHNpdCBiZWhpbmQgYSBQQ0kgYnVzIGZhaWwg dG8gZ2V0IHRoZQo+ID4+Pj4+PiBidXMnIERNQSBhZGRyZXNzaW5nIGNvbnN0cmFpbnRzLgo+ID4+ Pj4+Pgo+ID4+Pj4+PiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IG9mX2RtYV9jb25maWd1 cmUoKSBhc3N1bWVzIGl0J3MgcmVjZWl2aW5nIGEKPiA+Pj4+Pj4gRFQgbm9kZSByZXByZXNlbnRp bmcgdGhlIGRldmljZSBiZWluZyBjb25maWd1cmVkLCBhcyBvcHBvc2VkIHRvIHRoZSBQQ0llCj4g Pj4+Pj4+IGJyaWRnZSBub2RlIHdlIGN1cnJlbnRseSBwYXNzLiBUaGlzIGNhdXNlcyB0aGUgY29k ZSB0byBkaXJlY3RseSBqdW1wCj4gPj4+Pj4+IGludG8gUENJJ3MgcGFyZW50IG5vZGUgd2hlbiBj aGVja2luZyBmb3IgJ2RtYS1yYW5nZXMnIGFuZCBtaXNzZXMKPiA+Pj4+Pj4gd2hhdGV2ZXIgd2Fz IHNldCB0aGVyZS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gVG8gYWRkcmVzcyB0aGlzIEkgY3JlYXRlIGEg bmV3IEFQSSBpbiBPRiAtIGluc3BpcmVkIGZyb20gUm9iaW4gTXVycGh5cwo+ID4+Pj4+PiBvcmln aW5hbCBwcm9wb3NhbFsyXSAtIHdoaWNoIGFjY2VwdHMgYSBidXMgRFQgbm9kZSBhcyBpdCdzIGlu cHV0IGluCj4gPj4+Pj4+IG9yZGVyIHRvIGNvbmZpZ3VyZSBhIGRldmljZSdzIERNQSBjb25zdHJh aW50cy4gVGhlIGNoYW5nZXMgZ28gZGVlcCBpbnRvCj4gPj4+Pj4+IG9mL2FkZHJlc3MuYydzIGlt cGxlbWVudGF0aW9uLCBhcyBhIGRldmljZSBiZWluZyBoYXZpbmcgYSBEVCBub2RlCj4gPj4+Pj4+ IGFzc3VtcHRpb24gd2FzIHByZXR0eSBzdHJvbmcuCj4gPj4+Pj4+Cj4gPj4+Pj4+IE9uIHRvcCBv ZiB0aGlzIHdvcmssIEkgYWxzbyBjbGVhbmVkIHVwIG9mX2RtYV9jb25maWd1cmUoKSByZW1vdmlu ZyBpdHMKPiA+Pj4+Pj4gcmVkdW5kYW50IGFyZ3VtZW50cyBhbmQgY3JlYXRpbmcgYW4gYWx0ZXJu YXRpdmUgZnVuY3Rpb24gZm9yIHRoZSBzcGVjaWFsCj4gPj4+Pj4+IGNhc2VzCj4gPj4+Pj4+IG5v dCBhcHBsaWNhYmxlIHRvIGVpdGhlciB0aGUgYWJvdmUgY2FzZSBvciB0aGUgZGVmYXVsdCB1c2Fn ZS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gSU1PIHRoZSByZXN1bHRpbmcgZnVuY3Rpb25zIGFyZSBtb3Jl IGV4cGxpY2l0LiBUaGV5IHdpbGwgcHJvYmFibHkKPiA+Pj4+Pj4gc3VyZmFjZSBzb21lIGhhY2t5 IHVzYWdlcyB0aGF0IGNhbiBiZSBwcm9wZXJseSBmaXhlZCBhcyBJIHNob3cgd2l0aCB0aGUKPiA+ Pj4+Pj4gRFQgZml4ZXMgb24gdGhlIExheWVyc2NhcGUgcGxhdGZvcm0uCj4gPj4+Pj4+Cj4gPj4+ Pj4+IFRoaXMgd2FzIGFsc28gdGVzdGVkIG9uIGEgUmFzcGJlcnJ5IFBpIDQgd2l0aCBhIGN1c3Rv bSBQQ0llIGRyaXZlciBhbmQKPiA+Pj4+Pj4gb24gYSBTZWF0dGxlIEFNRCBib2FyZC4KPiA+Pj4+ Pgo+ID4+Pj4+IEh1bW0sIEkndmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgaXNzdWUgdG9vLiBMb29r cyBzaW1pbGFyIHRob3VnaCB5b3Vycwo+ID4+Pj4+IGhhcyBhIGxvdCBtb3JlIGNodXJuIGFuZCB0 aGVyZSdzIHNvbWUgb3RoZXIgYnVncyBJJ3ZlIGZvdW5kLgo+ID4+Pj4KPiA+Pj4+IFRoYXQncyBn b29kIG5ld3MsIGFuZCB5ZXMgbm93IHRoYXQgSSBzZWUgaXQsIHNvbWUgc3R1ZmYgb24gbXkgc2Vy aWVzIGlzCj4gPj4+PiBvdmVybHkKPiA+Pj4+IGNvbXBsaWNhdGVkLiBTcGVjaWFsbHkgYXJvdW5k IG9mX3RyYW5zbGF0ZV8qKCkuCj4gPj4+Pgo+ID4+Pj4gT24gdG9wIG9mIHRoYXQsIHlvdSByZW1v dmVkIGluIG9mX2RtYV9nZXRfcmFuZ2UoKToKPiA+Pj4+Cj4gPj4+PiAtICAgLyoKPiA+Pj4+IC0g ICAgKiBBdCBsZWFzdCBlbXB0eSByYW5nZXMgaGFzIHRvIGJlIGRlZmluZWQgZm9yIHBhcmVudCBu b2RlIGlmCj4gPj4+PiAtICAgICogRE1BIGlzIHN1cHBvcnRlZAo+ID4+Pj4gLSAgICAqLwo+ID4+ Pj4gLSAgIGlmICghcmFuZ2VzKQo+ID4+Pj4gLSAgICAgICAgICAgYnJlYWs7Cj4gPj4+Pgo+ID4+ Pj4gV2hpY2ggSSBhc3N1bWVkIHdhcyBib3VuZCB0byB0aGUgc3RhbmRhcmQgYW5kIG1ha2VzIHRo aW5ncyBlYXNpZXIuCj4gPj4+Pgo+ID4+Pj4+IENhbiB5b3UgdGVzdCBvdXQgdGhpcyBicmFuY2hb MV0uIEkgZG9uJ3QgaGF2ZSBhbnkgaC93IG5lZWRpbmcgdGhpcywKPiA+Pj4+PiBidXQgd3JvdGUg YSB1bml0dGVzdCBhbmQgdGVzdGVkIHdpdGggbW9kaWZpZWQgUUVNVS4KPiA+Pj4+Cj4gPj4+PiBJ IHJldmlld2VkIGV2ZXJ5dGhpbmcsIEkgZGlkIGZpbmQgYSBtaW5vciBpc3N1ZSwgc2VlIHRoZSBw YXRjaCBhdHRhY2hlZC4KPiA+Pj4KPiA+Pj4gV1JUIHRoYXQgcGF0Y2gsIHRoZSBvcmlnaW5hbCBp bnRlbnQgb2YgImZvcmNlX2RtYSIgd2FzIHB1cmVseSB0bwo+ID4+PiBjb25zaWRlciBhIGRldmlj ZSBETUEtY2FwYWJsZSByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZgo+ID4+PiAiZG1hLXJh bmdlcyIuIEV4cGVjdGluZyBvZl9kbWFfY29uZmlndXJlKCkgdG8gZG8gYW55dGhpbmcgZm9yIGEg bm9uLU9GCj4gPj4+IGRldmljZSBoYXMgYWx3YXlzIGJlZW4gYm9ndXMgLSBtYWdpYyBwYXJhdmly dCBkZXZpY2VzIHdoaWNoIGFwcGVhciBvdXQKPiA+Pj4gb2Ygbm93aGVyZSBhbmQgZXhwZWN0IHRv IGJlIHRyZWF0ZWQgYXMgZ2VudWluZSBETUEgbWFzdGVycyBhcmUgYQo+ID4+PiBzZXBhcmF0ZSBw cm9ibGVtIHRoYXQgd2UgaGF2ZW4ndCByZWFsbHkgYXBwcm9hY2hlZCB5ZXQuCj4gPj4KPiA+PiBJ IGFncmVlIGl0J3MgY2xlYXJseSBhYnVzaW5nIHRoZSBmdW5jdGlvbi4gSSBoYXZlIG5vIHByb2Js ZW0gd2l0aCB0aGUgYmVoYXZpb3VyCj4gPj4gY2hhbmdlIGlmIGl0J3MgT0sgd2l0aCB5b3UuCj4K PiBUaGlua2luZyBhYm91dCBpdCwgeW91IGNvdWxkIHByb2JhYmx5IGp1c3QgcmVtb3ZlIHRoYXQg Y2FsbCBmcm9tIHRoZSBYZW4KPiBEUk0gZHJpdmVyIG5vdyBhbnl3YXkgLSBzaW5jZSB0aGUgZG1h LWRpcmVjdCByZXdvcmssIHdlIGxvc3QgdGhlIGFiaWxpdHkKPiB0byBzZXQgZG1hX2R1bW15X29w cyBieSBkZWZhdWx0LCBhbmQgTlVMTCBvcHMgbm93IHJlcHJlc2VudCB3aGF0IGl0Cj4gKHByZXN1 bWFibHkpIHdhbnRzLgoKTm90IHhlbl9kbWFfb3BzPyBJbiBhbnkgY2FzZSwgSSdsbCBzZW5kIG91 dCBhIHBhdGNoIGZvciB0aGUgdGhlIFhlbgpmb2xrcyB0byBjb21tZW50IG9uLgoKPiA+PiBSb2Jp biwgaGF2ZSB5b3UgbG9va2VkIGludG8gc3VwcG9ydGluZyBtdWx0aXBsZSBkbWEtcmFuZ2VzPyBJ dCdzIHRoZSBuZXh0IHRoaW5nCj4gPj4gd2UgbmVlZCBmb3IgQkNNIFNUQidzIFBDSWUuIEknbGwg aGF2ZSBhIGdvIGF0IGl0IG15c2VsZiBpZiBub3RoaW5nIGlzIGluIHRoZQo+ID4+IHdvcmtzIGFs cmVhZHkuCj4gPgo+ID4gTXVsdGlwbGUgZG1hLXJhbmdlcyBhcyBmYXIgYXMgY29uZmlndXJpbmcg aW5ib3VuZCB3aW5kb3dzIHNob3VsZCB3b3JrCj4gPiBhbHJlYWR5IG90aGVyIHRoYW4gdGhlIGJ1 ZyB3aGVuIHRoZXJlJ3MgYW55IHBhcmVudCB0cmFuc2xhdGlvbi4gQnV0IGlmCj4gPiB5b3UgbWVh biBzdXBwb3J0aW5nIG11bHRpcGxlIERNQSBvZmZzZXRzIGFuZCBtYXNrcyBwZXIgZGV2aWNlIGlu IHRoZQo+ID4gRE1BIEFQSSwgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3b3JrcyB5ZXQuCj4KPiBU aGVyZSdzIGFsc28gdGhlIGluLWJldHdlZW4gc3RlcCBvZiBtYWtpbmcgb2ZfZG1hX2dldF9yYW5n ZSgpIHJldHVybiBhCj4gc2l6ZSBiYXNlZCBvbiBhbGwgdGhlIGRtYS1yYW5nZXMgZW50cmllcyBy YXRoZXIgdGhhbiBvbmx5IHRoZSBmaXJzdCBvbmUKPiAtIG90aGVyd2lzZSwgc29tZXRoaW5nIGxp a2UgWzFdIGNhbiBsZWFkIHRvIHByZXR0eSB1bndvcmthYmxlIGRlZmF1bHQKPiBtYXNrcy4gV2Ug aW1wbGVtZW50ZWQgdGhhdCB3aGVuIGRvaW5nIGFjcGlfZG1hX2dldF9yYW5nZSgpLCBpdCdzIGp1 c3QKPiB0aGF0IHRoZSBPRiBjb3VudGVycGFydCBuZXZlciBjYXVnaHQgdXAuCgpSaWdodC4gSSBz dXBwb3NlIHdlIGFzc3VtZSBhbnkgaG9sZXMgaW4gdGhlIHJhbmdlcyBhcmUgYWRkcmVzc2FibGUg YnkKdGhlIGRldmljZSBidXQgd29uJ3QgZ2V0IHVzZWQgZm9yIG90aGVyIHJlYXNvbnMgKHN1Y2gg YXMgbm8gbWVtb3J5CnRoZXJlKS4gSG93ZXZlciwgdG8gYmUgY29ycmVjdCwgdGhlIHJhbmdlIG9m IHRoZSBkbWEgb2Zmc2V0IHBsdXMgbWFzawp3b3VsZCBuZWVkIHRvIGJlIHdpdGhpbiB0aGUgbWlu IHN0YXJ0IGFuZCBtYXggZW5kIGFkZHJlc3Nlcy4gSU9XLAp3aGlsZSB3ZSBuZWVkIHRvIHJvdW5k IHVwICgweGFfODAwMF8wMDAwIC0gMHgyYzFjXzAwMDApIHRvIHRoZSBuZXh0CnBvd2VyIG9mIDIs IHRoZSAnY29ycmVjdCcgdGhpbmcgdG8gZG8gaXMgcm91bmQgZG93bi4KClJvYgoKPiBbMV0KPiBo dHRwOi8vbGludXgtYXJtLm9yZy9naXQ/cD1saW51eC1ybS5naXQ7YT1jb21taXRkaWZmO2g9YTI4 MTRhZjU2YjM0ODZjMjk4NWE5NTU0MGE4OGQ4ZjlmYTNhNjk5ZgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVk cmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8= 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 X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FBC7C4360D for ; Wed, 25 Sep 2019 21:33:41 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E82A921D80 for ; Wed, 25 Sep 2019 21:33:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Q/kLJhrY"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="QlI2Sj1D" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E82A921D80 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ut/57LJ17sQREZZSN6Fy/b07utHdlNPeGhN0xfiRFjQ=; b=Q/kLJhrYh2JnEw Y4zzw3TIWwOi+eJuvyq6LxTpK6lF9FrYLIs/lnlBKdm/tgDx7qCzzUt0hkkTqmJTcBgBzitjwrTwo zKcCaesJQiKDo5vkUNcd1b2bMsCtez/xkGgEcdM2dt132IeKmjvyhKvVqVP2VMZwEzTtc66ukxN00 BI0e/z2oNLnTv8DEygySLC+deWR9IUAoNuiORh9k5NGYuXXt52VTavjXd7DbnaqRQgY4OsWrzWF0i fpV4Rei7zfY5+DJjwEiJa5mqpFqXM1K6+bHaVL/y/qQNlRqbq21/9dwmZq4RVXJacedQ234vb30by piTFfk2ImUfX7pYp13sQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iDEuq-0007Ms-Eh; Wed, 25 Sep 2019 21:33:40 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iDEum-0007MD-Gz for linux-arm-kernel@lists.infradead.org; Wed, 25 Sep 2019 21:33:38 +0000 Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9EB8E222C1 for ; Wed, 25 Sep 2019 21:33:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569447215; bh=TszXw7S5GIEzEo992EEMfz4W0WtzSxu1MBpaBhf4tmw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=QlI2Sj1D5LJahPlbpQRPzC/Kfp42A3NwekR29GtyvfIPAZlvPN1zAfycydpBTfcd8 IvT8WVCyptqcO23hrQq7/1AbSsfzPRa68TLRQRP+hrXx+5Qsz/4M4CfEt25gMVn9on EMq0EmayAeKNvnaIFqzE8CzGz5kGoSiMNjw4W64I= Received: by mail-qt1-f181.google.com with SMTP id w14so240145qto.9 for ; Wed, 25 Sep 2019 14:33:35 -0700 (PDT) X-Gm-Message-State: APjAAAW4K6FFJxtU/Yhlo4HTr4csSowFMmKr25bLdMA+b3/YzNUxpQ5u awkDftrAtWK7Ma44gzDFLWx1BZPKeRfsT74YFg== X-Google-Smtp-Source: APXvYqy9YJ9VRUtFzrkZ+iKb5Tx5rlamJJuwaAKBRmCflwCEbYKpuVBbZPPVrEImTOCJgn8Jl5TlEwRQfbhe0HNZXOU= X-Received: by 2002:a0c:8a6d:: with SMTP id 42mr1647258qvu.138.1569447214653; Wed, 25 Sep 2019 14:33:34 -0700 (PDT) MIME-Version: 1.0 References: <20190924181244.7159-1-nsaenzjulienne@suse.de> <43fb5fe1de317d65a4edf592f88ea150c6e3b8cc.camel@suse.de> In-Reply-To: From: Rob Herring Date: Wed, 25 Sep 2019 16:33:23 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 00/11] of: Fix DMA configuration for non-DT masters To: Robin Murphy X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190925_143336_612123_9800F83C X-CRM114-Status: GOOD ( 30.93 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , devicetree@vger.kernel.org, Matthias Brugger , Frank Rowand , linux-arm-msm , linux-wireless , "linux-kernel@vger.kernel.org" , dri-devel , etnaviv@lists.freedesktop.org, "open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM" , Florian Fainelli , Stefan Wahren , james.quinlan@broadcom.com, linux-pci@vger.kernel.org, linux-tegra@vger.kernel.org, xen-devel@lists.xenproject.org, Dan Williams , freedreno , Nicolas Saenz Julienne , Linux Media Mailing List Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Wed, Sep 25, 2019 at 11:52 AM Robin Murphy wrote: > > On 25/09/2019 17:16, Rob Herring wrote: > > On Wed, Sep 25, 2019 at 10:30 AM Nicolas Saenz Julienne > > wrote: > >> > >> On Wed, 2019-09-25 at 16:09 +0100, Robin Murphy wrote: > >>> On 25/09/2019 15:52, Nicolas Saenz Julienne wrote: > >>>> On Tue, 2019-09-24 at 16:59 -0500, Rob Herring wrote: > >>>>> On Tue, Sep 24, 2019 at 1:12 PM Nicolas Saenz Julienne > >>>>> wrote: > >>>>>> Hi All, > >>>>>> this series tries to address one of the issues blocking us from > >>>>>> upstreaming Broadcom's STB PCIe controller[1]. Namely, the fact that > >>>>>> devices not represented in DT which sit behind a PCI bus fail to get the > >>>>>> bus' DMA addressing constraints. > >>>>>> > >>>>>> This is due to the fact that of_dma_configure() assumes it's receiving a > >>>>>> DT node representing the device being configured, as opposed to the PCIe > >>>>>> bridge node we currently pass. This causes the code to directly jump > >>>>>> into PCI's parent node when checking for 'dma-ranges' and misses > >>>>>> whatever was set there. > >>>>>> > >>>>>> To address this I create a new API in OF - inspired from Robin Murphys > >>>>>> original proposal[2] - which accepts a bus DT node as it's input in > >>>>>> order to configure a device's DMA constraints. The changes go deep into > >>>>>> of/address.c's implementation, as a device being having a DT node > >>>>>> assumption was pretty strong. > >>>>>> > >>>>>> On top of this work, I also cleaned up of_dma_configure() removing its > >>>>>> redundant arguments and creating an alternative function for the special > >>>>>> cases > >>>>>> not applicable to either the above case or the default usage. > >>>>>> > >>>>>> IMO the resulting functions are more explicit. They will probably > >>>>>> surface some hacky usages that can be properly fixed as I show with the > >>>>>> DT fixes on the Layerscape platform. > >>>>>> > >>>>>> This was also tested on a Raspberry Pi 4 with a custom PCIe driver and > >>>>>> on a Seattle AMD board. > >>>>> > >>>>> Humm, I've been working on this issue too. Looks similar though yours > >>>>> has a lot more churn and there's some other bugs I've found. > >>>> > >>>> That's good news, and yes now that I see it, some stuff on my series is > >>>> overly > >>>> complicated. Specially around of_translate_*(). > >>>> > >>>> On top of that, you removed in of_dma_get_range(): > >>>> > >>>> - /* > >>>> - * At least empty ranges has to be defined for parent node if > >>>> - * DMA is supported > >>>> - */ > >>>> - if (!ranges) > >>>> - break; > >>>> > >>>> Which I assumed was bound to the standard and makes things easier. > >>>> > >>>>> Can you test out this branch[1]. I don't have any h/w needing this, > >>>>> but wrote a unittest and tested with modified QEMU. > >>>> > >>>> I reviewed everything, I did find a minor issue, see the patch attached. > >>> > >>> WRT that patch, the original intent of "force_dma" was purely to > >>> consider a device DMA-capable regardless of the presence of > >>> "dma-ranges". Expecting of_dma_configure() to do anything for a non-OF > >>> device has always been bogus - magic paravirt devices which appear out > >>> of nowhere and expect to be treated as genuine DMA masters are a > >>> separate problem that we haven't really approached yet. > >> > >> I agree it's clearly abusing the function. I have no problem with the behaviour > >> change if it's OK with you. > > Thinking about it, you could probably just remove that call from the Xen > DRM driver now anyway - since the dma-direct rework, we lost the ability > to set dma_dummy_ops by default, and NULL ops now represent what it > (presumably) wants. Not xen_dma_ops? In any case, I'll send out a patch for the the Xen folks to comment on. > >> Robin, have you looked into supporting multiple dma-ranges? It's the next thing > >> we need for BCM STB's PCIe. I'll have a go at it myself if nothing is in the > >> works already. > > > > Multiple dma-ranges as far as configuring inbound windows should work > > already other than the bug when there's any parent translation. But if > > you mean supporting multiple DMA offsets and masks per device in the > > DMA API, there's nothing in the works yet. > > There's also the in-between step of making of_dma_get_range() return a > size based on all the dma-ranges entries rather than only the first one > - otherwise, something like [1] can lead to pretty unworkable default > masks. We implemented that when doing acpi_dma_get_range(), it's just > that the OF counterpart never caught up. Right. I suppose we assume any holes in the ranges are addressable by the device but won't get used for other reasons (such as no memory there). However, to be correct, the range of the dma offset plus mask would need to be within the min start and max end addresses. IOW, while we need to round up (0xa_8000_0000 - 0x2c1c_0000) to the next power of 2, the 'correct' thing to do is round down. Rob > [1] > http://linux-arm.org/git?p=linux-rm.git;a=commitdiff;h=a2814af56b3486c2985a95540a88d8f9fa3a699f _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2ED7C432C2 for ; Wed, 25 Sep 2019 21:34:03 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B2C4121D80 for ; Wed, 25 Sep 2019 21:34:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="QlI2Sj1D" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B2C4121D80 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iDEun-0002tQ-V5; Wed, 25 Sep 2019 21:33:37 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1iDEum-0002tL-Ro for xen-devel@lists.xenproject.org; Wed, 25 Sep 2019 21:33:36 +0000 X-Inumbo-ID: 218ba2f4-dfdc-11e9-bf31-bc764e2007e4 Received: from mail.kernel.org (unknown [198.145.29.99]) by localhost (Halon) with ESMTPS id 218ba2f4-dfdc-11e9-bf31-bc764e2007e4; Wed, 25 Sep 2019 21:33:36 +0000 (UTC) Received: from mail-qt1-f177.google.com (mail-qt1-f177.google.com [209.85.160.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A0B7B222C2 for ; Wed, 25 Sep 2019 21:33:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1569447215; bh=TszXw7S5GIEzEo992EEMfz4W0WtzSxu1MBpaBhf4tmw=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=QlI2Sj1D5LJahPlbpQRPzC/Kfp42A3NwekR29GtyvfIPAZlvPN1zAfycydpBTfcd8 IvT8WVCyptqcO23hrQq7/1AbSsfzPRa68TLRQRP+hrXx+5Qsz/4M4CfEt25gMVn9on EMq0EmayAeKNvnaIFqzE8CzGz5kGoSiMNjw4W64I= Received: by mail-qt1-f177.google.com with SMTP id o12so292317qtf.3 for ; Wed, 25 Sep 2019 14:33:35 -0700 (PDT) X-Gm-Message-State: APjAAAUFkzxcbsuHlWt/IXm6rtVEDdnqG7fDLyidzlY8PFrhWpjb9Dol YxRfIhiNH2iwiGg7Ph3qbYGcRzdECG44dnH+/A== X-Google-Smtp-Source: APXvYqy9YJ9VRUtFzrkZ+iKb5Tx5rlamJJuwaAKBRmCflwCEbYKpuVBbZPPVrEImTOCJgn8Jl5TlEwRQfbhe0HNZXOU= X-Received: by 2002:a0c:8a6d:: with SMTP id 42mr1647258qvu.138.1569447214653; Wed, 25 Sep 2019 14:33:34 -0700 (PDT) MIME-Version: 1.0 References: <20190924181244.7159-1-nsaenzjulienne@suse.de> <43fb5fe1de317d65a4edf592f88ea150c6e3b8cc.camel@suse.de> In-Reply-To: From: Rob Herring Date: Wed, 25 Sep 2019 16:33:23 -0500 X-Gmail-Original-Message-ID: Message-ID: To: Robin Murphy Subject: Re: [Xen-devel] [PATCH 00/11] of: Fix DMA configuration for non-DT masters X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , devicetree@vger.kernel.org, Matthias Brugger , Frank Rowand , linux-arm-msm , linux-wireless , "linux-kernel@vger.kernel.org" , dri-devel , etnaviv@lists.freedesktop.org, "open list:DMA GENERIC OFFLOAD ENGINE SUBSYSTEM" , Florian Fainelli , Stefan Wahren , james.quinlan@broadcom.com, linux-pci@vger.kernel.org, linux-tegra@vger.kernel.org, xen-devel@lists.xenproject.org, Dan Williams , freedreno , Nicolas Saenz Julienne , Linux Media Mailing List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gV2VkLCBTZXAgMjUsIDIwMTkgYXQgMTE6NTIgQU0gUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJw aHlAYXJtLmNvbT4gd3JvdGU6Cj4KPiBPbiAyNS8wOS8yMDE5IDE3OjE2LCBSb2IgSGVycmluZyB3 cm90ZToKPiA+IE9uIFdlZCwgU2VwIDI1LCAyMDE5IGF0IDEwOjMwIEFNIE5pY29sYXMgU2Flbnog SnVsaWVubmUKPiA+IDxuc2FlbnpqdWxpZW5uZUBzdXNlLmRlPiB3cm90ZToKPiA+Pgo+ID4+IE9u IFdlZCwgMjAxOS0wOS0yNSBhdCAxNjowOSArMDEwMCwgUm9iaW4gTXVycGh5IHdyb3RlOgo+ID4+ PiBPbiAyNS8wOS8yMDE5IDE1OjUyLCBOaWNvbGFzIFNhZW56IEp1bGllbm5lIHdyb3RlOgo+ID4+ Pj4gT24gVHVlLCAyMDE5LTA5LTI0IGF0IDE2OjU5IC0wNTAwLCBSb2IgSGVycmluZyB3cm90ZToK PiA+Pj4+PiBPbiBUdWUsIFNlcCAyNCwgMjAxOSBhdCAxOjEyIFBNIE5pY29sYXMgU2FlbnogSnVs aWVubmUKPiA+Pj4+PiA8bnNhZW56anVsaWVubmVAc3VzZS5kZT4gd3JvdGU6Cj4gPj4+Pj4+IEhp IEFsbCwKPiA+Pj4+Pj4gdGhpcyBzZXJpZXMgdHJpZXMgdG8gYWRkcmVzcyBvbmUgb2YgdGhlIGlz c3VlcyBibG9ja2luZyB1cyBmcm9tCj4gPj4+Pj4+IHVwc3RyZWFtaW5nIEJyb2FkY29tJ3MgU1RC IFBDSWUgY29udHJvbGxlclsxXS4gTmFtZWx5LCB0aGUgZmFjdCB0aGF0Cj4gPj4+Pj4+IGRldmlj ZXMgbm90IHJlcHJlc2VudGVkIGluIERUIHdoaWNoIHNpdCBiZWhpbmQgYSBQQ0kgYnVzIGZhaWwg dG8gZ2V0IHRoZQo+ID4+Pj4+PiBidXMnIERNQSBhZGRyZXNzaW5nIGNvbnN0cmFpbnRzLgo+ID4+ Pj4+Pgo+ID4+Pj4+PiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IG9mX2RtYV9jb25maWd1 cmUoKSBhc3N1bWVzIGl0J3MgcmVjZWl2aW5nIGEKPiA+Pj4+Pj4gRFQgbm9kZSByZXByZXNlbnRp bmcgdGhlIGRldmljZSBiZWluZyBjb25maWd1cmVkLCBhcyBvcHBvc2VkIHRvIHRoZSBQQ0llCj4g Pj4+Pj4+IGJyaWRnZSBub2RlIHdlIGN1cnJlbnRseSBwYXNzLiBUaGlzIGNhdXNlcyB0aGUgY29k ZSB0byBkaXJlY3RseSBqdW1wCj4gPj4+Pj4+IGludG8gUENJJ3MgcGFyZW50IG5vZGUgd2hlbiBj aGVja2luZyBmb3IgJ2RtYS1yYW5nZXMnIGFuZCBtaXNzZXMKPiA+Pj4+Pj4gd2hhdGV2ZXIgd2Fz IHNldCB0aGVyZS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gVG8gYWRkcmVzcyB0aGlzIEkgY3JlYXRlIGEg bmV3IEFQSSBpbiBPRiAtIGluc3BpcmVkIGZyb20gUm9iaW4gTXVycGh5cwo+ID4+Pj4+PiBvcmln aW5hbCBwcm9wb3NhbFsyXSAtIHdoaWNoIGFjY2VwdHMgYSBidXMgRFQgbm9kZSBhcyBpdCdzIGlu cHV0IGluCj4gPj4+Pj4+IG9yZGVyIHRvIGNvbmZpZ3VyZSBhIGRldmljZSdzIERNQSBjb25zdHJh aW50cy4gVGhlIGNoYW5nZXMgZ28gZGVlcCBpbnRvCj4gPj4+Pj4+IG9mL2FkZHJlc3MuYydzIGlt cGxlbWVudGF0aW9uLCBhcyBhIGRldmljZSBiZWluZyBoYXZpbmcgYSBEVCBub2RlCj4gPj4+Pj4+ IGFzc3VtcHRpb24gd2FzIHByZXR0eSBzdHJvbmcuCj4gPj4+Pj4+Cj4gPj4+Pj4+IE9uIHRvcCBv ZiB0aGlzIHdvcmssIEkgYWxzbyBjbGVhbmVkIHVwIG9mX2RtYV9jb25maWd1cmUoKSByZW1vdmlu ZyBpdHMKPiA+Pj4+Pj4gcmVkdW5kYW50IGFyZ3VtZW50cyBhbmQgY3JlYXRpbmcgYW4gYWx0ZXJu YXRpdmUgZnVuY3Rpb24gZm9yIHRoZSBzcGVjaWFsCj4gPj4+Pj4+IGNhc2VzCj4gPj4+Pj4+IG5v dCBhcHBsaWNhYmxlIHRvIGVpdGhlciB0aGUgYWJvdmUgY2FzZSBvciB0aGUgZGVmYXVsdCB1c2Fn ZS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gSU1PIHRoZSByZXN1bHRpbmcgZnVuY3Rpb25zIGFyZSBtb3Jl IGV4cGxpY2l0LiBUaGV5IHdpbGwgcHJvYmFibHkKPiA+Pj4+Pj4gc3VyZmFjZSBzb21lIGhhY2t5 IHVzYWdlcyB0aGF0IGNhbiBiZSBwcm9wZXJseSBmaXhlZCBhcyBJIHNob3cgd2l0aCB0aGUKPiA+ Pj4+Pj4gRFQgZml4ZXMgb24gdGhlIExheWVyc2NhcGUgcGxhdGZvcm0uCj4gPj4+Pj4+Cj4gPj4+ Pj4+IFRoaXMgd2FzIGFsc28gdGVzdGVkIG9uIGEgUmFzcGJlcnJ5IFBpIDQgd2l0aCBhIGN1c3Rv bSBQQ0llIGRyaXZlciBhbmQKPiA+Pj4+Pj4gb24gYSBTZWF0dGxlIEFNRCBib2FyZC4KPiA+Pj4+ Pgo+ID4+Pj4+IEh1bW0sIEkndmUgYmVlbiB3b3JraW5nIG9uIHRoaXMgaXNzdWUgdG9vLiBMb29r cyBzaW1pbGFyIHRob3VnaCB5b3Vycwo+ID4+Pj4+IGhhcyBhIGxvdCBtb3JlIGNodXJuIGFuZCB0 aGVyZSdzIHNvbWUgb3RoZXIgYnVncyBJJ3ZlIGZvdW5kLgo+ID4+Pj4KPiA+Pj4+IFRoYXQncyBn b29kIG5ld3MsIGFuZCB5ZXMgbm93IHRoYXQgSSBzZWUgaXQsIHNvbWUgc3R1ZmYgb24gbXkgc2Vy aWVzIGlzCj4gPj4+PiBvdmVybHkKPiA+Pj4+IGNvbXBsaWNhdGVkLiBTcGVjaWFsbHkgYXJvdW5k IG9mX3RyYW5zbGF0ZV8qKCkuCj4gPj4+Pgo+ID4+Pj4gT24gdG9wIG9mIHRoYXQsIHlvdSByZW1v dmVkIGluIG9mX2RtYV9nZXRfcmFuZ2UoKToKPiA+Pj4+Cj4gPj4+PiAtICAgLyoKPiA+Pj4+IC0g ICAgKiBBdCBsZWFzdCBlbXB0eSByYW5nZXMgaGFzIHRvIGJlIGRlZmluZWQgZm9yIHBhcmVudCBu b2RlIGlmCj4gPj4+PiAtICAgICogRE1BIGlzIHN1cHBvcnRlZAo+ID4+Pj4gLSAgICAqLwo+ID4+ Pj4gLSAgIGlmICghcmFuZ2VzKQo+ID4+Pj4gLSAgICAgICAgICAgYnJlYWs7Cj4gPj4+Pgo+ID4+ Pj4gV2hpY2ggSSBhc3N1bWVkIHdhcyBib3VuZCB0byB0aGUgc3RhbmRhcmQgYW5kIG1ha2VzIHRo aW5ncyBlYXNpZXIuCj4gPj4+Pgo+ID4+Pj4+IENhbiB5b3UgdGVzdCBvdXQgdGhpcyBicmFuY2hb MV0uIEkgZG9uJ3QgaGF2ZSBhbnkgaC93IG5lZWRpbmcgdGhpcywKPiA+Pj4+PiBidXQgd3JvdGUg YSB1bml0dGVzdCBhbmQgdGVzdGVkIHdpdGggbW9kaWZpZWQgUUVNVS4KPiA+Pj4+Cj4gPj4+PiBJ IHJldmlld2VkIGV2ZXJ5dGhpbmcsIEkgZGlkIGZpbmQgYSBtaW5vciBpc3N1ZSwgc2VlIHRoZSBw YXRjaCBhdHRhY2hlZC4KPiA+Pj4KPiA+Pj4gV1JUIHRoYXQgcGF0Y2gsIHRoZSBvcmlnaW5hbCBp bnRlbnQgb2YgImZvcmNlX2RtYSIgd2FzIHB1cmVseSB0bwo+ID4+PiBjb25zaWRlciBhIGRldmlj ZSBETUEtY2FwYWJsZSByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZgo+ID4+PiAiZG1hLXJh bmdlcyIuIEV4cGVjdGluZyBvZl9kbWFfY29uZmlndXJlKCkgdG8gZG8gYW55dGhpbmcgZm9yIGEg bm9uLU9GCj4gPj4+IGRldmljZSBoYXMgYWx3YXlzIGJlZW4gYm9ndXMgLSBtYWdpYyBwYXJhdmly dCBkZXZpY2VzIHdoaWNoIGFwcGVhciBvdXQKPiA+Pj4gb2Ygbm93aGVyZSBhbmQgZXhwZWN0IHRv IGJlIHRyZWF0ZWQgYXMgZ2VudWluZSBETUEgbWFzdGVycyBhcmUgYQo+ID4+PiBzZXBhcmF0ZSBw cm9ibGVtIHRoYXQgd2UgaGF2ZW4ndCByZWFsbHkgYXBwcm9hY2hlZCB5ZXQuCj4gPj4KPiA+PiBJ IGFncmVlIGl0J3MgY2xlYXJseSBhYnVzaW5nIHRoZSBmdW5jdGlvbi4gSSBoYXZlIG5vIHByb2Js ZW0gd2l0aCB0aGUgYmVoYXZpb3VyCj4gPj4gY2hhbmdlIGlmIGl0J3MgT0sgd2l0aCB5b3UuCj4K PiBUaGlua2luZyBhYm91dCBpdCwgeW91IGNvdWxkIHByb2JhYmx5IGp1c3QgcmVtb3ZlIHRoYXQg Y2FsbCBmcm9tIHRoZSBYZW4KPiBEUk0gZHJpdmVyIG5vdyBhbnl3YXkgLSBzaW5jZSB0aGUgZG1h LWRpcmVjdCByZXdvcmssIHdlIGxvc3QgdGhlIGFiaWxpdHkKPiB0byBzZXQgZG1hX2R1bW15X29w cyBieSBkZWZhdWx0LCBhbmQgTlVMTCBvcHMgbm93IHJlcHJlc2VudCB3aGF0IGl0Cj4gKHByZXN1 bWFibHkpIHdhbnRzLgoKTm90IHhlbl9kbWFfb3BzPyBJbiBhbnkgY2FzZSwgSSdsbCBzZW5kIG91 dCBhIHBhdGNoIGZvciB0aGUgdGhlIFhlbgpmb2xrcyB0byBjb21tZW50IG9uLgoKPiA+PiBSb2Jp biwgaGF2ZSB5b3UgbG9va2VkIGludG8gc3VwcG9ydGluZyBtdWx0aXBsZSBkbWEtcmFuZ2VzPyBJ dCdzIHRoZSBuZXh0IHRoaW5nCj4gPj4gd2UgbmVlZCBmb3IgQkNNIFNUQidzIFBDSWUuIEknbGwg aGF2ZSBhIGdvIGF0IGl0IG15c2VsZiBpZiBub3RoaW5nIGlzIGluIHRoZQo+ID4+IHdvcmtzIGFs cmVhZHkuCj4gPgo+ID4gTXVsdGlwbGUgZG1hLXJhbmdlcyBhcyBmYXIgYXMgY29uZmlndXJpbmcg aW5ib3VuZCB3aW5kb3dzIHNob3VsZCB3b3JrCj4gPiBhbHJlYWR5IG90aGVyIHRoYW4gdGhlIGJ1 ZyB3aGVuIHRoZXJlJ3MgYW55IHBhcmVudCB0cmFuc2xhdGlvbi4gQnV0IGlmCj4gPiB5b3UgbWVh biBzdXBwb3J0aW5nIG11bHRpcGxlIERNQSBvZmZzZXRzIGFuZCBtYXNrcyBwZXIgZGV2aWNlIGlu IHRoZQo+ID4gRE1BIEFQSSwgdGhlcmUncyBub3RoaW5nIGluIHRoZSB3b3JrcyB5ZXQuCj4KPiBU aGVyZSdzIGFsc28gdGhlIGluLWJldHdlZW4gc3RlcCBvZiBtYWtpbmcgb2ZfZG1hX2dldF9yYW5n ZSgpIHJldHVybiBhCj4gc2l6ZSBiYXNlZCBvbiBhbGwgdGhlIGRtYS1yYW5nZXMgZW50cmllcyBy YXRoZXIgdGhhbiBvbmx5IHRoZSBmaXJzdCBvbmUKPiAtIG90aGVyd2lzZSwgc29tZXRoaW5nIGxp a2UgWzFdIGNhbiBsZWFkIHRvIHByZXR0eSB1bndvcmthYmxlIGRlZmF1bHQKPiBtYXNrcy4gV2Ug aW1wbGVtZW50ZWQgdGhhdCB3aGVuIGRvaW5nIGFjcGlfZG1hX2dldF9yYW5nZSgpLCBpdCdzIGp1 c3QKPiB0aGF0IHRoZSBPRiBjb3VudGVycGFydCBuZXZlciBjYXVnaHQgdXAuCgpSaWdodC4gSSBz dXBwb3NlIHdlIGFzc3VtZSBhbnkgaG9sZXMgaW4gdGhlIHJhbmdlcyBhcmUgYWRkcmVzc2FibGUg YnkKdGhlIGRldmljZSBidXQgd29uJ3QgZ2V0IHVzZWQgZm9yIG90aGVyIHJlYXNvbnMgKHN1Y2gg YXMgbm8gbWVtb3J5CnRoZXJlKS4gSG93ZXZlciwgdG8gYmUgY29ycmVjdCwgdGhlIHJhbmdlIG9m IHRoZSBkbWEgb2Zmc2V0IHBsdXMgbWFzawp3b3VsZCBuZWVkIHRvIGJlIHdpdGhpbiB0aGUgbWlu IHN0YXJ0IGFuZCBtYXggZW5kIGFkZHJlc3Nlcy4gSU9XLAp3aGlsZSB3ZSBuZWVkIHRvIHJvdW5k IHVwICgweGFfODAwMF8wMDAwIC0gMHgyYzFjXzAwMDApIHRvIHRoZSBuZXh0CnBvd2VyIG9mIDIs IHRoZSAnY29ycmVjdCcgdGhpbmcgdG8gZG8gaXMgcm91bmQgZG93bi4KClJvYgoKPiBbMV0KPiBo dHRwOi8vbGludXgtYXJtLm9yZy9naXQ/cD1saW51eC1ybS5naXQ7YT1jb21taXRkaWZmO2g9YTI4 MTRhZjU2YjM0ODZjMjk4NWE5NTU0MGE4OGQ4ZjlmYTNhNjk5ZgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t YWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==