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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id DA452C433F5 for ; Wed, 25 May 2022 16:30:46 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.337288.561838 (Exim 4.92) (envelope-from ) id 1nttth-0004m1-57; Wed, 25 May 2022 16:30:09 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 337288.561838; Wed, 25 May 2022 16:30:09 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nttth-0004lu-28; Wed, 25 May 2022 16:30:09 +0000 Received: by outflank-mailman (input) for mailman id 337288; Wed, 25 May 2022 16:30:07 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ntttf-0004hU-D9 for xen-devel@lists.xenproject.org; Wed, 25 May 2022 16:30:07 +0000 Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [2a00:1450:4864:20::132]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id eefb7727-dc47-11ec-837f-e5687231ffcc; Wed, 25 May 2022 18:30:05 +0200 (CEST) Received: by mail-lf1-x132.google.com with SMTP id p22so36816771lfo.10 for ; Wed, 25 May 2022 09:30:05 -0700 (PDT) Received: from [192.168.1.7] ([212.22.223.21]) by smtp.gmail.com with ESMTPSA id u11-20020ac25bcb000000b0047889d37464sm1095708lfn.196.2022.05.25.09.30.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 25 May 2022 09:30:04 -0700 (PDT) X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: eefb7727-dc47-11ec-837f-e5687231ffcc DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=+i+Dct5KOGPoWYK+pPUyiAaWMirerzarztidBbbxZ50=; b=ZIDsYUSjntwVSYs3vZQiv9wBkNSJozZuXgBa82+HoJAikAvCUlWvwBZNMfLB8/l1Tm 0g8Ybm/2mCAzS/JaKwQQ5C+kFvbo63EBpqb16lOVY7GjHFiZSlpxQ8/fTC7SqBl9J81l 0Mn0B4qqJFUyvMmFoq1MFCJllsjSVlPVbwaC+n8wEZ94iMJ5/NcLE6Of3GvQsVKWP61a 0rTaKU/Zkoecq05tbn/hqd+yYZTJQ4yWzUX8Uv6y906biVx6pDeW+5bPszd36lDbjem0 lfVpRgdweA45U4nONp+eJEabdVTwV7SQg4QVujaFP7nMdse/KWFd1zvtLl6x0jT7ddlS sc3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=+i+Dct5KOGPoWYK+pPUyiAaWMirerzarztidBbbxZ50=; b=BqM1D1129fKfkB7aOIwSJylMgQY9EjdRUUGTUyySZaHIqfYJx9YygPyxopzqmn/WYi rcUT88PwspDCCItO/VuRRKfum24UJoE6WW8X1Syq1GNFUH4axJZNJOmr8Hyes3lnWm8M 9+HW5wm4nafmf/LbQ1o0hLIkglKa9BntWJcUuUPDNHOdx6AesgbzAOvwposauCd+kwu/ e58OG2f7fGNP6U1teDDDW9A8sU5EePkB+A3zkq84WLF5CHUbtgmz6sEAgjonm27GqQeh mpqzRErtJPXNujhJABX5u+ib5F0eoY6QCQA68s3N7YVnnchZA/NFfQqQcqu2UwAzUcXk bDpw== X-Gm-Message-State: AOAM5320hIW86XhjFqSOBvgUJC20dmKLhfiwWrd34saea1D3DpMGWulT NpwXR4eZl8IehHbAUGBa2zU= X-Google-Smtp-Source: ABdhPJyRJqRI3QzG8Wbqpo4lLfYsbAk6Wd5A09iq3QQCnhw2JyTAn6EmWhKwHvIjEqXcFQbDcFfXTA== X-Received: by 2002:a05:6512:1051:b0:478:8351:6665 with SMTP id c17-20020a056512105100b0047883516665mr7696489lfb.390.1653496204674; Wed, 25 May 2022 09:30:04 -0700 (PDT) Subject: Re: [PATCH V2 5/7] dt-bindings: Add xen,dev-domid property description for xen-grant DMA ops To: Saravana Kannan , Rob Herring , Stefano Stabellini Cc: xen-devel , "open list:DRM DRIVER FOR QEMU'S CIRRUS DEVICE" , DTML , Linux Kernel Mailing List , Linux ARM , Arnd Bergmann , Oleksandr Tyshchenko , Jason Wang , Krzysztof Kozlowski , Julien Grall , Juergen Gross , "Michael S. Tsirkin" , Christoph Hellwig , Jean-Philippe Brucker References: <1651947548-4055-1-git-send-email-olekstysh@gmail.com> <1651947548-4055-6-git-send-email-olekstysh@gmail.com> <56e8c32d-6771-7179-005f-26ca58555659@gmail.com> <460a746c-6b61-214b-4653-44a1430e314d@gmail.com> <6f469e9c-c26e-f4be-9a85-710afb0d77eb@gmail.com> <390ba7bb-ee9e-b7b7-5f08-71a7245fa4ec@gmail.com> <20220524160134.GE3730540-robh@kernel.org> From: Oleksandr Message-ID: Date: Wed, 25 May 2022 19:30:02 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US On 24.05.22 21:34, Saravana Kannan wrote: Hello all > " > > On Tue, May 24, 2022 at 9:01 AM Rob Herring wrote: >> +Saravana >> >> On Mon, May 23, 2022 at 06:58:13PM -0700, Stefano Stabellini wrote: >>> On Mon, 23 May 2022, Oleksandr wrote: >>>>>> On Thu, 19 May 2022, Oleksandr wrote: >>>>>>>> On Wed, May 18, 2022 at 5:06 PM Oleksandr wrote: >>>>>>>>> On 18.05.22 17:32, Arnd Bergmann wrote: >>>>>>>>>> On Sat, May 7, 2022 at 7:19 PM Oleksandr Tyshchenko >>>>>>>>>> wrote: >>>>>>>>>> This would mean having a device >>>>>>>>>> node for the grant-table mechanism that can be referred to using >>>>>>>>>> the >>>>>>>>>> 'iommus' >>>>>>>>>> phandle property, with the domid as an additional argument. >>>>>>>>> I assume, you are speaking about something like the following? >>>>>>>>> >>>>>>>>> >>>>>>>>> xen_dummy_iommu { >>>>>>>>> compatible = "xen,dummy-iommu"; >>>>>>>>> #iommu-cells = <1>; >>>>>>>>> }; >>>>>>>>> >>>>>>>>> virtio@3000 { >>>>>>>>> compatible = "virtio,mmio"; >>>>>>>>> reg = <0x3000 0x100>; >>>>>>>>> interrupts = <41>; >>>>>>>>> >>>>>>>>> /* The device is located in Xen domain with ID 1 */ >>>>>>>>> iommus = <&xen_dummy_iommu 1>; >>>>>>>>> }; >>>>>>>> Right, that's that's the idea, >>>>>>> thank you for the confirmation >>>>>>> >>>>>>> >>>>>>> >>>>>>>> except I would not call it a 'dummy'. >>>>>>>> From the perspective of the DT, this behaves just like an IOMMU, >>>>>>>> even if the exact mechanism is different from most hardware IOMMU >>>>>>>> implementations. >>>>>>> well, agree >>>>>>> >>>>>>> >>>>>>>>>> It does not quite fit the model that Linux currently uses for >>>>>>>>>> iommus, >>>>>>>>>> as that has an allocator for dma_addr_t space >>>>>>>>> yes (# 3/7 adds grant-table based allocator) >>>>>>>>> >>>>>>>>> >>>>>>>>>> , but it would think it's >>>>>>>>>> conceptually close enough that it makes sense for the binding. >>>>>>>>> Interesting idea. I am wondering, do we need an extra actions for >>>>>>>>> this >>>>>>>>> to work in Linux guest (dummy IOMMU driver, etc)? >>>>>>>> It depends on how closely the guest implementation can be made to >>>>>>>> resemble a normal iommu. If you do allocate dma_addr_t addresses, >>>>>>>> it may actually be close enough that you can just turn the grant-table >>>>>>>> code into a normal iommu driver and change nothing else. >>>>>>> Unfortunately, I failed to find a way how use grant references at the >>>>>>> iommu_ops level (I mean to fully pretend that we are an IOMMU driver). I >>>>>>> am >>>>>>> not too familiar with that, so what is written below might be wrong or >>>>>>> at >>>>>>> least not precise. >>>>>>> >>>>>>> The normal IOMMU driver in Linux doesn’t allocate DMA addresses by >>>>>>> itself, it >>>>>>> just maps (IOVA-PA) what was requested to be mapped by the upper layer. >>>>>>> The >>>>>>> DMA address allocation is done by the upper layer (DMA-IOMMU which is >>>>>>> the glue >>>>>>> layer between DMA API and IOMMU API allocates IOVA for PA?). But, all >>>>>>> what we >>>>>>> need here is just to allocate our specific grant-table based DMA >>>>>>> addresses >>>>>>> (DMA address = grant reference + offset in the page), so let’s say we >>>>>>> need an >>>>>>> entity to take a physical address as parameter and return a DMA address >>>>>>> (what >>>>>>> actually commit #3/7 is doing), and that’s all. So working at the >>>>>>> dma_ops >>>>>>> layer we get exactly what we need, with the minimal changes to guest >>>>>>> infrastructure. In our case the Xen itself acts as an IOMMU. >>>>>>> >>>>>>> Assuming that we want to reuse the IOMMU infrastructure somehow for our >>>>>>> needs. >>>>>>> I think, in that case we will likely need to introduce a new specific >>>>>>> IOVA >>>>>>> allocator (alongside with a generic one) to be hooked up by the >>>>>>> DMA-IOMMU >>>>>>> layer if we run on top of Xen. But, even having the specific IOVA >>>>>>> allocator to >>>>>>> return what we indeed need (DMA address = grant reference + offset in >>>>>>> the >>>>>>> page) we will still need the specific minimal required IOMMU driver to >>>>>>> be >>>>>>> present in the system anyway in order to track the mappings(?) and do >>>>>>> nothing >>>>>>> with them, returning a success (this specific IOMMU driver should have >>>>>>> all >>>>>>> mandatory callbacks implemented). >>>>>>> >>>>>>> I completely agree, it would be really nice to reuse generic IOMMU >>>>>>> bindings >>>>>>> rather than introducing Xen specific property if what we are trying to >>>>>>> implement in current patch series fits in the usage of "iommus" in Linux >>>>>>> more-less. But, if we will have to add more complexity/more components >>>>>>> to the >>>>>>> code for the sake of reusing device tree binding, this raises a question >>>>>>> whether that’s worthwhile. >>>>>>> >>>>>>> Or I really missed something? >>>>>> I think Arnd was primarily suggesting to reuse the IOMMU Device Tree >>>>>> bindings, not necessarily the IOMMU drivers framework in Linux (although >>>>>> that would be an added bonus.) >>>>>> >>>>>> I know from previous discussions with you that making the grant table >>>>>> fit in the existing IOMMU drivers model is difficult, but just reusing >>>>>> the Device Tree bindings seems feasible? >>>>> I started experimenting with that. As wrote in a separate email, I got a >>>>> deferred probe timeout, >>>>> >>>>> after inserting required nodes into guest device tree, which seems to be a >>>>> consequence of the unavailability of IOMMU, I will continue to investigate >>>>> this question. >>>> >>>> I have experimented with that. Yes, just reusing the Device Tree bindings is >>>> technically feasible (and we are able to do this by only touching >>>> grant-dma-ops.c), although deferred probe timeout still stands (as there is no >>>> IOMMU driver being present actually). >>>> >>>> [ 0.583771] virtio-mmio 2000000.virtio: deferred probe timeout, ignoring >>>> dependency >>>> [ 0.615556] virtio_blk virtio0: [vda] 4096000 512-byte logical blocks (2.10 >>>> GB/1.95 GiB) >>>> >>>> >>>> Below the working diff (on top of current series): >>>> >>>> diff --git a/drivers/xen/grant-dma-ops.c b/drivers/xen/grant-dma-ops.c >>>> index da9c7ff..6586152 100644 >>>> --- a/drivers/xen/grant-dma-ops.c >>>> +++ b/drivers/xen/grant-dma-ops.c >>>> @@ -272,17 +272,24 @@ static const struct dma_map_ops xen_grant_dma_ops = { >>>> >>>> bool xen_is_grant_dma_device(struct device *dev) >>>> { >>>> + struct device_node *iommu_np; >>>> + bool has_iommu; >>>> + >>>> /* XXX Handle only DT devices for now */ >>>> if (!dev->of_node) >>>> return false; >>>> >>>> - return of_property_read_bool(dev->of_node, "xen,backend-domid"); >>>> + iommu_np = of_parse_phandle(dev->of_node, "iommus", 0); >>>> + has_iommu = iommu_np && of_device_is_compatible(iommu_np, >>>> "xen,grant-dma"); >>>> + of_node_put(iommu_np); >>>> + >>>> + return has_iommu; >>>> } >>>> >>>> void xen_grant_setup_dma_ops(struct device *dev) >>>> { >>>> struct xen_grant_dma_data *data; >>>> - uint32_t domid; >>>> + struct of_phandle_args iommu_spec; >>>> >>>> data = find_xen_grant_dma_data(dev); >>>> if (data) { >>>> @@ -294,16 +301,30 @@ void xen_grant_setup_dma_ops(struct device *dev) >>>> if (!dev->of_node) >>>> goto err; >>>> >>>> - if (of_property_read_u32(dev->of_node, "xen,backend-domid", &domid)) { >>>> - dev_err(dev, "xen,backend-domid property is not present\n"); >>>> + if (of_parse_phandle_with_args(dev->of_node, "iommus", "#iommu-cells", >>>> + 0, &iommu_spec)) { >>>> + dev_err(dev, "Cannot parse iommus property\n"); >>>> + goto err; >>>> + } >>>> + >>>> + if (!of_device_is_compatible(iommu_spec.np, "xen,grant-dma") || >>>> + iommu_spec.args_count != 1) { >>>> + dev_err(dev, "Incompatible IOMMU node\n"); >>>> + of_node_put(iommu_spec.np); >>>> goto err; >>>> } >>>> >>>> + of_node_put(iommu_spec.np); >>>> + >>>> data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); >>>> if (!data) >>>> goto err; >>>> >>>> - data->backend_domid = domid; >>>> + /* >>>> + * The endpoint ID here means the ID of the domain where the >>>> corresponding >>>> + * backend is running >>>> + */ >>>> + data->backend_domid = iommu_spec.args[0]; >>>> >>>> if (xa_err(xa_store(&xen_grant_dma_devices, (unsigned long)dev, data, >>>> GFP_KERNEL))) { >>>> (END) >>>> >>>> >>>> >>>> Below, the nodes generated by Xen toolstack: >>>> >>>> xen_grant_dma { >> Nit: iommu { >> >>>> compatible = "xen,grant-dma"; >>>> #iommu-cells = <0x01>; >>>> phandle = <0xfde9>; >>>> }; >>>> >>>> virtio@2000000 { >>>> compatible = "virtio,mmio"; >>>> reg = <0x00 0x2000000 0x00 0x200>; >>>> interrupts = <0x00 0x01 0xf01>; >>>> interrupt-parent = <0xfde8>; >>>> dma-coherent; >>>> iommus = <0xfde9 0x01>; >>>> }; >>> Not bad! I like it. >>> >>> >>>> I am wondering, would be the proper solution to eliminate deferred probe >>>> timeout issue in our particular case (without introducing an extra IOMMU >>>> driver)? >>> In reality I don't think there is a way to do that. I would create an >>> empty skelethon IOMMU driver for xen,grant-dma. >> Does it have to be an empty driver? Originally, IOMMU 'drivers' were not >> drivers, but they've been getting converted. Can that be done here? >> >> Short of that, I think we could have some sort of skip probe list for >> deferred probe. Not sure if that would be easiest as IOMMU specific or >> global. > Hi Oleksandr, > > If you do fw_devlink.strict=1, you'll notice that the consumers of > this "iommu" won't probe at all or will delay the boot by some number > of seconds. The eventual goal is to go towards fw_devlink.strict=1 > being the default. ok, I got it. Let's me please explain our particular case in details, sorry I may repeat some information which I have already mentioned elsewhere, but it maybe better to keep the whole context here. We have Xen grant DMA-mapping layer added by previous commit [1]. For it to operate properly we need a way to communicate some per-device information using device-tree, and this information is Xen specific. This is what the current commit is doing by introducing new binding to describe that. The next commit [2] will use that new binding to retrieve required information. There was a suggestion to consider reusing generic device-tree IOMMU bindings to communicate this specific information instead of introducing a custom property. Although it requires more effort for the Xen toolstack (instead of adding a code to insert a single "xen,backend-domid" property, we need to generate fake IOMMU node, reserve phandle for it, etc), from the device tree PoV it looks indeed good (we reuse endpoint ID to pass the ID of the domain where the corresponding backend is running), and resulting code to retrieve this information in our DMA-mapping layer also looks simple enough [3]. Using generic device-tree IOMMU bindings:          iommu {                  compatible = "xen,grant-dma";                  #iommu-cells = <0x01>;                  phandle = <0xfde9>;          };          virtio@2000000 {                  compatible = "virtio,mmio";                  reg = <0x00 0x2000000 0x00 0x200>;                  interrupts = <0x00 0x01 0xf01>;                  interrupt-parent = <0xfde8>;                  dma-coherent;                  iommus = <0xfde9 0x01>;          }; Using Xen specific property:          virtio@2000000 {                  compatible = "virtio,mmio";                  reg = <0x00 0x2000000 0x00 0x200>;                  interrupts = <0x00 0x01 0xf01>;                  interrupt-parent = <0xfde8>;                  dma-coherent;                  xen,backend-domid = <0x01>;          }; The main problem is that idea doesn't quite fit into how Linux currently behaves for the "iommus" property. Of course, just reusing IOMMU bindings (without having a corresponding driver) leads to the deferred probe timeout issue afterwards, because the IOMMU device never becomes available. From my understanding, our DMA-mapping layer we are consider to reuse IOMMU bindings for, *cannot* be converted into the proper IOMMU driver. Sure, we will need to find a way how to deal with it, if we really want to reuse the IOMMU bindings. And yes, one idea was to just implement stub IOMMU driver for that purpose, I have rechecked, it works fine with that stub driver [4]. > > From a fw_devlik perspective, please implement a driver. Ideally a > real one, but at least an empty one. The empty one doesn't need to be > an IOMMU driver, but at least just do a return 0 in the probe > function. If I got things right, I am afraid, for the "of_iommu" case the empty driver is not enough. The driver should at least register iommu_ops, but the "of_xlate" callback should be *not* implemented. In that case, we will get NO_IOMMU (>0 : there is no IOMMU, or one was unavailable for non-fatal reasons) which is also a success condition, so -EPROBE_DEFER won't be returned. https://elixir.bootlin.com/linux/v5.18/source/drivers/iommu/of_iommu.c#L32 Otherwise, of_iommu_xlate() will call driver_deferred_probe_check_state(). https://elixir.bootlin.com/linux/v5.18/source/drivers/iommu/of_iommu.c#L43 > Also, if it's not a device, why even have a "compatible" > property (removing it won't necessarily remove the deferred probe > timeout issue you see)? Will any code be using "xen,grant-dma" to look > up the node? Yes > If so, that driver could be the one that probes this > device. At least from a fw_devlink perspective, it just needs to have > a driver that binds to this device. Agree > > Also, if we aren't going to implement a driver and have the supplier > ("xen,grant-dma") behave like a device (as in, have a driver that > probes), I'd rather that the iommu binding not be used at all as this > would be an exception to how every other iommu device behaves. Agree Saravana, thank you for the explanation. To summarize, as I understand, we have three options (the first two are clear enough, the third is unclear yet): 1. Do not try to reuse IOMMU bindings for current xen-virtio enabling work, use "xen,backend-domid" property. 2. Reuse IOMMU bindings, for that purpose introduce stub IOMMU driver. It is a standalone entity in my example, but it can be a part of grant-dma-ops.c which actually uses "xen,grant-dma" compatible to look up a node. 3. Try to find other options how to reuse IOMMU bindings but *without* introducing stub IOMMU driver, such as skip list for deferred probe, etc. What do the maintainers think regarding the option to go forward? [1] https://lore.kernel.org/xen-devel/1651947548-4055-4-git-send-email-olekstysh@gmail.com/ [2] https://lore.kernel.org/xen-devel/1651947548-4055-7-git-send-email-olekstysh@gmail.com/ [3] https://lore.kernel.org/xen-devel/390ba7bb-ee9e-b7b7-5f08-71a7245fa4ec@gmail.com/ [4] https://lore.kernel.org/xen-devel/606dfdcc-ec10-0c4a-04e9-72cd73ee6676@gmail.com/ > > -Saravana -- Regards, Oleksandr Tyshchenko 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id F16D6C433EF for ; Wed, 25 May 2022 16:31:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=wKDJSB+d9aemUnZF61ERaCVopcPBn/slR2v+Z7pCX5s=; b=25j76SNarM4ENRF4bel/gK+QKw 2bV6e39zt2tkVyvq9H2zs6nhQuPVBtVIPX8Ooeq7jLsK00lI4HDzzWU/PsqC85HjUo75TztW82zPv XfBVzLOIAHupIpu3IMcGDiABiGElijPqOXLf4RFb69qgKqYHwOeFsI6SMydAl0eYyHlY247nWCK/J wkF/bG76p1baIgE1fxeamCLZwwE9PEEriHUqCUnpgMcMpfPBTZvl88OLy77Z7QFqtqw1E4/sU5gA/ r9kysp17DRE0N9jzj1bZMvS0qTLrKdbR3rG7Z/0PvtZzqgF+3oK3RghucagSALxkF9uDh9EeHhtLX gZagJW9A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntttk-00BpVp-Ht; Wed, 25 May 2022 16:30:12 +0000 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ntttf-00BpUw-Q6 for linux-arm-kernel@lists.infradead.org; Wed, 25 May 2022 16:30:10 +0000 Received: by mail-lf1-x134.google.com with SMTP id j10so13366216lfe.12 for ; Wed, 25 May 2022 09:30:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=+i+Dct5KOGPoWYK+pPUyiAaWMirerzarztidBbbxZ50=; b=ZIDsYUSjntwVSYs3vZQiv9wBkNSJozZuXgBa82+HoJAikAvCUlWvwBZNMfLB8/l1Tm 0g8Ybm/2mCAzS/JaKwQQ5C+kFvbo63EBpqb16lOVY7GjHFiZSlpxQ8/fTC7SqBl9J81l 0Mn0B4qqJFUyvMmFoq1MFCJllsjSVlPVbwaC+n8wEZ94iMJ5/NcLE6Of3GvQsVKWP61a 0rTaKU/Zkoecq05tbn/hqd+yYZTJQ4yWzUX8Uv6y906biVx6pDeW+5bPszd36lDbjem0 lfVpRgdweA45U4nONp+eJEabdVTwV7SQg4QVujaFP7nMdse/KWFd1zvtLl6x0jT7ddlS sc3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=+i+Dct5KOGPoWYK+pPUyiAaWMirerzarztidBbbxZ50=; b=8QC/3jcajcmkXfSU58EuGBI5eKohq8gbawg8/UQqGDgGVvZ7ILR5cacw/XA0cofsZH iRAYDONoWCZXkM+eJiTJVqSQYTehrMvZH2omQLSSZQjamKxzBPid92iY21yI0oAqP0Ma XvnYcKQUhCeqEHsbM7EsDot6h1tAqPmZxXGY8kohhDM9WWNTJEvK9HxSUmFae4mV6qyg vXbSIKtrU1ayddoN6aPOM4E9Dkr0WFBBJV6jDPXv1Q0u8FZ16sz/sTYxW836CCSAc5fV sSxM8tMZlehCpobNqH5EhNXaa+2h2MiK+qLxWy6uoWZFMyJs9mQbrXFWygbvWlO/2mSP o2+Q== X-Gm-Message-State: AOAM533HxZ/I+5k8QckPZOMq6iqrb5Mh+N4BV3X1MTQSnp0o6lDHCUcL yE1JDBUyKCpnt00+vMVFhfc= X-Google-Smtp-Source: ABdhPJyRJqRI3QzG8Wbqpo4lLfYsbAk6Wd5A09iq3QQCnhw2JyTAn6EmWhKwHvIjEqXcFQbDcFfXTA== X-Received: by 2002:a05:6512:1051:b0:478:8351:6665 with SMTP id c17-20020a056512105100b0047883516665mr7696489lfb.390.1653496204674; Wed, 25 May 2022 09:30:04 -0700 (PDT) Received: from [192.168.1.7] ([212.22.223.21]) by smtp.gmail.com with ESMTPSA id u11-20020ac25bcb000000b0047889d37464sm1095708lfn.196.2022.05.25.09.30.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 25 May 2022 09:30:04 -0700 (PDT) Subject: Re: [PATCH V2 5/7] dt-bindings: Add xen,dev-domid property description for xen-grant DMA ops To: Saravana Kannan , Rob Herring , Stefano Stabellini Cc: xen-devel , "open list:DRM DRIVER FOR QEMU'S CIRRUS DEVICE" , DTML , Linux Kernel Mailing List , Linux ARM , Arnd Bergmann , Oleksandr Tyshchenko , Jason Wang , Krzysztof Kozlowski , Julien Grall , Juergen Gross , "Michael S. Tsirkin" , Christoph Hellwig , Jean-Philippe Brucker References: <1651947548-4055-1-git-send-email-olekstysh@gmail.com> <1651947548-4055-6-git-send-email-olekstysh@gmail.com> <56e8c32d-6771-7179-005f-26ca58555659@gmail.com> <460a746c-6b61-214b-4653-44a1430e314d@gmail.com> <6f469e9c-c26e-f4be-9a85-710afb0d77eb@gmail.com> <390ba7bb-ee9e-b7b7-5f08-71a7245fa4ec@gmail.com> <20220524160134.GE3730540-robh@kernel.org> From: Oleksandr Message-ID: Date: Wed, 25 May 2022 19:30:02 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220525_093007_920780_7F8DA7E1 X-CRM114-Status: GOOD ( 51.14 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDI0LjA1LjIyIDIxOjM0LCBTYXJhdmFuYSBLYW5uYW4gd3JvdGU6CgpIZWxsbyBhbGwKCj4g Igo+Cj4gT24gVHVlLCBNYXkgMjQsIDIwMjIgYXQgOTowMSBBTSBSb2IgSGVycmluZyA8cm9iaEBr ZXJuZWwub3JnPiB3cm90ZToKPj4gK1NhcmF2YW5hCj4+Cj4+IE9uIE1vbiwgTWF5IDIzLCAyMDIy IGF0IDA2OjU4OjEzUE0gLTA3MDAsIFN0ZWZhbm8gU3RhYmVsbGluaSB3cm90ZToKPj4+IE9uIE1v biwgMjMgTWF5IDIwMjIsIE9sZWtzYW5kciB3cm90ZToKPj4+Pj4+IE9uIFRodSwgMTkgTWF5IDIw MjIsIE9sZWtzYW5kciB3cm90ZToKPj4+Pj4+Pj4gT24gV2VkLCBNYXkgMTgsIDIwMjIgYXQgNTow NiBQTSBPbGVrc2FuZHIgPG9sZWtzdHlzaEBnbWFpbC5jb20+IHdyb3RlOgo+Pj4+Pj4+Pj4gT24g MTguMDUuMjIgMTc6MzIsIEFybmQgQmVyZ21hbm4gd3JvdGU6Cj4+Pj4+Pj4+Pj4gT24gU2F0LCBN YXkgNywgMjAyMiBhdCA3OjE5IFBNIE9sZWtzYW5kciBUeXNoY2hlbmtvCj4+Pj4+Pj4+Pj4gPG9s ZWtzdHlzaEBnbWFpbC5jb20+IHdyb3RlOgo+Pj4+Pj4+Pj4+ICAgICAgVGhpcyB3b3VsZCBtZWFu IGhhdmluZyBhIGRldmljZQo+Pj4+Pj4+Pj4+IG5vZGUgZm9yIHRoZSBncmFudC10YWJsZSBtZWNo YW5pc20gdGhhdCBjYW4gYmUgcmVmZXJyZWQgdG8gdXNpbmcKPj4+Pj4+Pj4+PiB0aGUKPj4+Pj4+ Pj4+PiAnaW9tbXVzJwo+Pj4+Pj4+Pj4+IHBoYW5kbGUgcHJvcGVydHksIHdpdGggdGhlIGRvbWlk IGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQuCj4+Pj4+Pj4+PiBJIGFzc3VtZSwgeW91IGFyZSBz cGVha2luZyBhYm91dCBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nPwo+Pj4+Pj4+Pj4KPj4+ Pj4+Pj4+Cj4+Pj4+Pj4+PiB4ZW5fZHVtbXlfaW9tbXUgewo+Pj4+Pj4+Pj4gICAgICAgIGNvbXBh dGlibGUgPSAieGVuLGR1bW15LWlvbW11IjsKPj4+Pj4+Pj4+ICAgICAgICAjaW9tbXUtY2VsbHMg PSA8MT47Cj4+Pj4+Pj4+PiB9Owo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IHZpcnRpb0AzMDAwIHsKPj4+ Pj4+Pj4+ICAgICAgICBjb21wYXRpYmxlID0gInZpcnRpbyxtbWlvIjsKPj4+Pj4+Pj4+ICAgICAg ICByZWcgPSA8MHgzMDAwIDB4MTAwPjsKPj4+Pj4+Pj4+ICAgICAgICBpbnRlcnJ1cHRzID0gPDQx PjsKPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiAgICAgICAgLyogVGhlIGRldmljZSBpcyBsb2NhdGVkIGlu IFhlbiBkb21haW4gd2l0aCBJRCAxICovCj4+Pj4+Pj4+PiAgICAgICAgaW9tbXVzID0gPCZ4ZW5f ZHVtbXlfaW9tbXUgMT47Cj4+Pj4+Pj4+PiB9Owo+Pj4+Pj4+PiBSaWdodCwgdGhhdCdzIHRoYXQn cyB0aGUgaWRlYSwKPj4+Pj4+PiB0aGFuayB5b3UgZm9yIHRoZSBjb25maXJtYXRpb24KPj4+Pj4+ Pgo+Pj4+Pj4+Cj4+Pj4+Pj4KPj4+Pj4+Pj4gICAgIGV4Y2VwdCBJIHdvdWxkIG5vdCBjYWxsIGl0 IGEgJ2R1bW15Jy4KPj4+Pj4+Pj4gICAgRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIERULCB0 aGlzIGJlaGF2ZXMganVzdCBsaWtlIGFuIElPTU1VLAo+Pj4+Pj4+PiBldmVuIGlmIHRoZSBleGFj dCBtZWNoYW5pc20gaXMgZGlmZmVyZW50IGZyb20gbW9zdCBoYXJkd2FyZSBJT01NVQo+Pj4+Pj4+ PiBpbXBsZW1lbnRhdGlvbnMuCj4+Pj4+Pj4gd2VsbCwgYWdyZWUKPj4+Pj4+Pgo+Pj4+Pj4+Cj4+ Pj4+Pj4+Pj4gSXQgZG9lcyBub3QgcXVpdGUgZml0IHRoZSBtb2RlbCB0aGF0IExpbnV4IGN1cnJl bnRseSB1c2VzIGZvcgo+Pj4+Pj4+Pj4+IGlvbW11cywKPj4+Pj4+Pj4+PiBhcyB0aGF0IGhhcyBh biBhbGxvY2F0b3IgZm9yIGRtYV9hZGRyX3Qgc3BhY2UKPj4+Pj4+Pj4+IHllcyAoIyAzLzcgYWRk cyBncmFudC10YWJsZSBiYXNlZCBhbGxvY2F0b3IpCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4KPj4+Pj4+ Pj4+PiAsIGJ1dCBpdCB3b3VsZCB0aGluayBpdCdzCj4+Pj4+Pj4+Pj4gY29uY2VwdHVhbGx5IGNs b3NlIGVub3VnaCB0aGF0IGl0IG1ha2VzIHNlbnNlIGZvciB0aGUgYmluZGluZy4KPj4+Pj4+Pj4+ IEludGVyZXN0aW5nIGlkZWEuIEkgYW0gd29uZGVyaW5nLCBkbyB3ZSBuZWVkIGFuIGV4dHJhIGFj dGlvbnMgZm9yCj4+Pj4+Pj4+PiB0aGlzCj4+Pj4+Pj4+PiB0byB3b3JrIGluIExpbnV4IGd1ZXN0 IChkdW1teSBJT01NVSBkcml2ZXIsIGV0Yyk/Cj4+Pj4+Pj4+IEl0IGRlcGVuZHMgb24gaG93IGNs b3NlbHkgdGhlIGd1ZXN0IGltcGxlbWVudGF0aW9uIGNhbiBiZSBtYWRlIHRvCj4+Pj4+Pj4+IHJl c2VtYmxlIGEgbm9ybWFsIGlvbW11LiBJZiB5b3UgZG8gYWxsb2NhdGUgZG1hX2FkZHJfdCBhZGRy ZXNzZXMsCj4+Pj4+Pj4+IGl0IG1heSBhY3R1YWxseSBiZSBjbG9zZSBlbm91Z2ggdGhhdCB5b3Ug Y2FuIGp1c3QgdHVybiB0aGUgZ3JhbnQtdGFibGUKPj4+Pj4+Pj4gY29kZSBpbnRvIGEgbm9ybWFs IGlvbW11IGRyaXZlciBhbmQgY2hhbmdlIG5vdGhpbmcgZWxzZS4KPj4+Pj4+PiBVbmZvcnR1bmF0 ZWx5LCBJIGZhaWxlZCB0byBmaW5kIGEgd2F5IGhvdyB1c2UgZ3JhbnQgcmVmZXJlbmNlcyBhdCB0 aGUKPj4+Pj4+PiBpb21tdV9vcHMgbGV2ZWwgKEkgbWVhbiB0byBmdWxseSBwcmV0ZW5kIHRoYXQg d2UgYXJlIGFuIElPTU1VIGRyaXZlcikuIEkKPj4+Pj4+PiBhbQo+Pj4+Pj4+IG5vdCB0b28gZmFt aWxpYXIgd2l0aCB0aGF0LCBzbyB3aGF0IGlzIHdyaXR0ZW4gYmVsb3cgbWlnaHQgYmUgd3Jvbmcg b3IKPj4+Pj4+PiBhdAo+Pj4+Pj4+IGxlYXN0IG5vdCBwcmVjaXNlLgo+Pj4+Pj4+Cj4+Pj4+Pj4g VGhlIG5vcm1hbCBJT01NVSBkcml2ZXIgaW4gTGludXggZG9lc27igJl0IGFsbG9jYXRlIERNQSBh ZGRyZXNzZXMgYnkKPj4+Pj4+PiBpdHNlbGYsIGl0Cj4+Pj4+Pj4ganVzdCBtYXBzIChJT1ZBLVBB KSB3aGF0IHdhcyByZXF1ZXN0ZWQgdG8gYmUgbWFwcGVkIGJ5IHRoZSB1cHBlciBsYXllci4KPj4+ Pj4+PiBUaGUKPj4+Pj4+PiBETUEgYWRkcmVzcyBhbGxvY2F0aW9uIGlzIGRvbmUgYnkgdGhlIHVw cGVyIGxheWVyIChETUEtSU9NTVUgd2hpY2ggaXMKPj4+Pj4+PiB0aGUgZ2x1ZQo+Pj4+Pj4+IGxh eWVyIGJldHdlZW4gRE1BIEFQSSBhbmQgSU9NTVUgQVBJIGFsbG9jYXRlcyBJT1ZBIGZvciBQQT8p LiBCdXQsIGFsbAo+Pj4+Pj4+IHdoYXQgd2UKPj4+Pj4+PiBuZWVkIGhlcmUgaXMganVzdCB0byBh bGxvY2F0ZSBvdXIgc3BlY2lmaWMgZ3JhbnQtdGFibGUgYmFzZWQgRE1BCj4+Pj4+Pj4gYWRkcmVz c2VzCj4+Pj4+Pj4gKERNQSBhZGRyZXNzID0gZ3JhbnQgcmVmZXJlbmNlICsgb2Zmc2V0IGluIHRo ZSBwYWdlKSwgc28gbGV04oCZcyBzYXkgd2UKPj4+Pj4+PiBuZWVkIGFuCj4+Pj4+Pj4gZW50aXR5 IHRvIHRha2UgYSBwaHlzaWNhbCBhZGRyZXNzIGFzIHBhcmFtZXRlciBhbmQgcmV0dXJuIGEgRE1B IGFkZHJlc3MKPj4+Pj4+PiAod2hhdAo+Pj4+Pj4+IGFjdHVhbGx5IGNvbW1pdCAjMy83IGlzIGRv aW5nKSwgYW5kIHRoYXTigJlzIGFsbC4gU28gd29ya2luZyBhdCB0aGUKPj4+Pj4+PiBkbWFfb3Bz Cj4+Pj4+Pj4gbGF5ZXIgd2UgZ2V0IGV4YWN0bHkgd2hhdCB3ZSBuZWVkLCB3aXRoIHRoZSBtaW5p bWFsIGNoYW5nZXMgdG8gZ3Vlc3QKPj4+Pj4+PiBpbmZyYXN0cnVjdHVyZS4gSW4gb3VyIGNhc2Ug dGhlIFhlbiBpdHNlbGYgYWN0cyBhcyBhbiBJT01NVS4KPj4+Pj4+Pgo+Pj4+Pj4+IEFzc3VtaW5n IHRoYXQgd2Ugd2FudCB0byByZXVzZSB0aGUgSU9NTVUgaW5mcmFzdHJ1Y3R1cmUgc29tZWhvdyBm b3Igb3VyCj4+Pj4+Pj4gbmVlZHMuCj4+Pj4+Pj4gSSB0aGluaywgaW4gdGhhdCBjYXNlIHdlIHdp bGwgbGlrZWx5IG5lZWQgdG8gaW50cm9kdWNlIGEgbmV3IHNwZWNpZmljCj4+Pj4+Pj4gSU9WQQo+ Pj4+Pj4+IGFsbG9jYXRvciAoYWxvbmdzaWRlIHdpdGggYSBnZW5lcmljIG9uZSkgdG8gYmUgaG9v a2VkIHVwIGJ5IHRoZQo+Pj4+Pj4+IERNQS1JT01NVQo+Pj4+Pj4+IGxheWVyIGlmIHdlIHJ1biBv biB0b3Agb2YgWGVuLiBCdXQsIGV2ZW4gaGF2aW5nIHRoZSBzcGVjaWZpYyBJT1ZBCj4+Pj4+Pj4g YWxsb2NhdG9yIHRvCj4+Pj4+Pj4gcmV0dXJuIHdoYXQgd2UgaW5kZWVkIG5lZWQgKERNQSBhZGRy ZXNzID0gZ3JhbnQgcmVmZXJlbmNlICsgb2Zmc2V0IGluCj4+Pj4+Pj4gdGhlCj4+Pj4+Pj4gcGFn ZSkgd2Ugd2lsbCBzdGlsbCBuZWVkIHRoZSBzcGVjaWZpYyBtaW5pbWFsIHJlcXVpcmVkIElPTU1V IGRyaXZlciB0bwo+Pj4+Pj4+IGJlCj4+Pj4+Pj4gcHJlc2VudCBpbiB0aGUgc3lzdGVtIGFueXdh eSBpbiBvcmRlciB0byB0cmFjayB0aGUgbWFwcGluZ3MoPykgYW5kIGRvCj4+Pj4+Pj4gbm90aGlu Zwo+Pj4+Pj4+IHdpdGggdGhlbSwgcmV0dXJuaW5nIGEgc3VjY2VzcyAodGhpcyBzcGVjaWZpYyBJ T01NVSBkcml2ZXIgc2hvdWxkIGhhdmUKPj4+Pj4+PiBhbGwKPj4+Pj4+PiBtYW5kYXRvcnkgY2Fs bGJhY2tzIGltcGxlbWVudGVkKS4KPj4+Pj4+Pgo+Pj4+Pj4+IEkgY29tcGxldGVseSBhZ3JlZSwg aXQgd291bGQgYmUgcmVhbGx5IG5pY2UgdG8gcmV1c2UgZ2VuZXJpYyBJT01NVQo+Pj4+Pj4+IGJp bmRpbmdzCj4+Pj4+Pj4gcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgWGVuIHNwZWNpZmljIHByb3Bl cnR5IGlmIHdoYXQgd2UgYXJlIHRyeWluZyB0bwo+Pj4+Pj4+IGltcGxlbWVudCBpbiBjdXJyZW50 IHBhdGNoIHNlcmllcyBmaXRzIGluIHRoZSB1c2FnZSBvZiAiaW9tbXVzIiBpbiBMaW51eAo+Pj4+ Pj4+IG1vcmUtbGVzcy4gQnV0LCBpZiB3ZSB3aWxsIGhhdmUgdG8gYWRkIG1vcmUgY29tcGxleGl0 eS9tb3JlIGNvbXBvbmVudHMKPj4+Pj4+PiB0byB0aGUKPj4+Pj4+PiBjb2RlIGZvciB0aGUgc2Fr ZSBvZiByZXVzaW5nIGRldmljZSB0cmVlIGJpbmRpbmcsIHRoaXMgcmFpc2VzIGEgcXVlc3Rpb24K Pj4+Pj4+PiB3aGV0aGVyIHRoYXTigJlzIHdvcnRod2hpbGUuCj4+Pj4+Pj4KPj4+Pj4+PiBPciBJ IHJlYWxseSBtaXNzZWQgc29tZXRoaW5nPwo+Pj4+Pj4gSSB0aGluayBBcm5kIHdhcyBwcmltYXJp bHkgc3VnZ2VzdGluZyB0byByZXVzZSB0aGUgSU9NTVUgRGV2aWNlIFRyZWUKPj4+Pj4+IGJpbmRp bmdzLCBub3QgbmVjZXNzYXJpbHkgdGhlIElPTU1VIGRyaXZlcnMgZnJhbWV3b3JrIGluIExpbnV4 IChhbHRob3VnaAo+Pj4+Pj4gdGhhdCB3b3VsZCBiZSBhbiBhZGRlZCBib251cy4pCj4+Pj4+Pgo+ Pj4+Pj4gSSBrbm93IGZyb20gcHJldmlvdXMgZGlzY3Vzc2lvbnMgd2l0aCB5b3UgdGhhdCBtYWtp bmcgdGhlIGdyYW50IHRhYmxlCj4+Pj4+PiBmaXQgaW4gdGhlIGV4aXN0aW5nIElPTU1VIGRyaXZl cnMgbW9kZWwgaXMgZGlmZmljdWx0LCBidXQganVzdCByZXVzaW5nCj4+Pj4+PiB0aGUgRGV2aWNl IFRyZWUgYmluZGluZ3Mgc2VlbXMgZmVhc2libGU/Cj4+Pj4+IEkgc3RhcnRlZCBleHBlcmltZW50 aW5nIHdpdGggdGhhdC4gQXMgd3JvdGUgaW4gYSBzZXBhcmF0ZSBlbWFpbCwgSSBnb3QgYQo+Pj4+ PiBkZWZlcnJlZCBwcm9iZSB0aW1lb3V0LAo+Pj4+Pgo+Pj4+PiBhZnRlciBpbnNlcnRpbmcgcmVx dWlyZWQgbm9kZXMgaW50byBndWVzdCBkZXZpY2UgdHJlZSwgd2hpY2ggc2VlbXMgdG8gYmUgYQo+ Pj4+PiBjb25zZXF1ZW5jZSBvZiB0aGUgdW5hdmFpbGFiaWxpdHkgb2YgSU9NTVUsIEkgd2lsbCBj b250aW51ZSB0byBpbnZlc3RpZ2F0ZQo+Pj4+PiB0aGlzIHF1ZXN0aW9uLgo+Pj4+Cj4+Pj4gSSBo YXZlIGV4cGVyaW1lbnRlZCB3aXRoIHRoYXQuIFllcywganVzdCByZXVzaW5nIHRoZSBEZXZpY2Ug VHJlZSBiaW5kaW5ncyBpcwo+Pj4+IHRlY2huaWNhbGx5IGZlYXNpYmxlIChhbmQgd2UgYXJlIGFi bGUgdG8gZG8gdGhpcyBieSBvbmx5IHRvdWNoaW5nCj4+Pj4gZ3JhbnQtZG1hLW9wcy5jKSwgYWx0 aG91Z2ggZGVmZXJyZWQgcHJvYmUgdGltZW91dCBzdGlsbCBzdGFuZHMgKGFzIHRoZXJlIGlzIG5v Cj4+Pj4gSU9NTVUgZHJpdmVyIGJlaW5nIHByZXNlbnQgYWN0dWFsbHkpLgo+Pj4+Cj4+Pj4gWyAg ICAwLjU4Mzc3MV0gdmlydGlvLW1taW8gMjAwMDAwMC52aXJ0aW86IGRlZmVycmVkIHByb2JlIHRp bWVvdXQsIGlnbm9yaW5nCj4+Pj4gZGVwZW5kZW5jeQo+Pj4+IFsgICAgMC42MTU1NTZdIHZpcnRp b19ibGsgdmlydGlvMDogW3ZkYV0gNDA5NjAwMCA1MTItYnl0ZSBsb2dpY2FsIGJsb2NrcyAoMi4x MAo+Pj4+IEdCLzEuOTUgR2lCKQo+Pj4+Cj4+Pj4KPj4+PiBCZWxvdyB0aGUgd29ya2luZyBkaWZm IChvbiB0b3Agb2YgY3VycmVudCBzZXJpZXMpOgo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMveGVuL2dyYW50LWRtYS1vcHMuYyBiL2RyaXZlcnMveGVuL2dyYW50LWRtYS1vcHMuYwo+Pj4+ IGluZGV4IGRhOWM3ZmYuLjY1ODYxNTIgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy94ZW4vZ3Jh bnQtZG1hLW9wcy5jCj4+Pj4gKysrIGIvZHJpdmVycy94ZW4vZ3JhbnQtZG1hLW9wcy5jCj4+Pj4g QEAgLTI3MiwxNyArMjcyLDI0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgeGVu X2dyYW50X2RtYV9vcHMgPSB7Cj4+Pj4KPj4+PiAgIGJvb2wgeGVuX2lzX2dyYW50X2RtYV9kZXZp Y2Uoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+ICAgewo+Pj4+ICsgICAgICAgc3RydWN0IGRldmlj ZV9ub2RlICppb21tdV9ucDsKPj4+PiArICAgICAgIGJvb2wgaGFzX2lvbW11Owo+Pj4+ICsKPj4+ PiAgICAgICAgICAvKiBYWFggSGFuZGxlIG9ubHkgRFQgZGV2aWNlcyBmb3Igbm93ICovCj4+Pj4g ICAgICAgICAgaWYgKCFkZXYtPm9mX25vZGUpCj4+Pj4gICAgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7Cj4+Pj4KPj4+PiAtICAgICAgIHJldHVybiBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2 LT5vZl9ub2RlLCAieGVuLGJhY2tlbmQtZG9taWQiKTsKPj4+PiArICAgICAgIGlvbW11X25wID0g b2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJpb21tdXMiLCAwKTsKPj4+PiArICAgICAg IGhhc19pb21tdSA9IGlvbW11X25wICYmIG9mX2RldmljZV9pc19jb21wYXRpYmxlKGlvbW11X25w LAo+Pj4+ICJ4ZW4sZ3JhbnQtZG1hIik7Cj4+Pj4gKyAgICAgICBvZl9ub2RlX3B1dChpb21tdV9u cCk7Cj4+Pj4gKwo+Pj4+ICsgICAgICAgcmV0dXJuIGhhc19pb21tdTsKPj4+PiAgIH0KPj4+Pgo+ Pj4+ICAgdm9pZCB4ZW5fZ3JhbnRfc2V0dXBfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ Pj4gICB7Cj4+Pj4gICAgICAgICAgc3RydWN0IHhlbl9ncmFudF9kbWFfZGF0YSAqZGF0YTsKPj4+ PiAtICAgICAgIHVpbnQzMl90IGRvbWlkOwo+Pj4+ICsgICAgICAgc3RydWN0IG9mX3BoYW5kbGVf YXJncyBpb21tdV9zcGVjOwo+Pj4+Cj4+Pj4gICAgICAgICAgZGF0YSA9IGZpbmRfeGVuX2dyYW50 X2RtYV9kYXRhKGRldik7Cj4+Pj4gICAgICAgICAgaWYgKGRhdGEpIHsKPj4+PiBAQCAtMjk0LDE2 ICszMDEsMzAgQEAgdm9pZCB4ZW5fZ3JhbnRfc2V0dXBfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4+Pj4gICAgICAgICAgaWYgKCFkZXYtPm9mX25vZGUpCj4+Pj4gICAgICAgICAgICAgICAg ICBnb3RvIGVycjsKPj4+Pgo+Pj4+IC0gICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRl di0+b2Zfbm9kZSwgInhlbixiYWNrZW5kLWRvbWlkIiwgJmRvbWlkKSkgewo+Pj4+IC0gICAgICAg ICAgICAgICBkZXZfZXJyKGRldiwgInhlbixiYWNrZW5kLWRvbWlkIHByb3BlcnR5IGlzIG5vdCBw cmVzZW50XG4iKTsKPj4+PiArICAgICAgIGlmIChvZl9wYXJzZV9waGFuZGxlX3dpdGhfYXJncyhk ZXYtPm9mX25vZGUsICJpb21tdXMiLCAiI2lvbW11LWNlbGxzIiwKPj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAwLCAmaW9tbXVfc3BlYykpIHsKPj4+PiArICAgICAgICAgICAgICAgZGV2X2Vy cihkZXYsICJDYW5ub3QgcGFyc2UgaW9tbXVzIHByb3BlcnR5XG4iKTsKPj4+PiArICAgICAgICAg ICAgICAgZ290byBlcnI7Cj4+Pj4gKyAgICAgICB9Cj4+Pj4gKwo+Pj4+ICsgICAgICAgaWYgKCFv Zl9kZXZpY2VfaXNfY29tcGF0aWJsZShpb21tdV9zcGVjLm5wLCAieGVuLGdyYW50LWRtYSIpIHx8 Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaW9tbXVfc3BlYy5hcmdzX2NvdW50ICE9IDEp IHsKPj4+PiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJJbmNvbXBhdGlibGUgSU9NTVUg bm9kZVxuIik7Cj4+Pj4gKyAgICAgICAgICAgICAgIG9mX25vZGVfcHV0KGlvbW11X3NwZWMubnAp Owo+Pj4+ICAgICAgICAgICAgICAgICAgZ290byBlcnI7Cj4+Pj4gICAgICAgICAgfQo+Pj4+Cj4+ Pj4gKyAgICAgICBvZl9ub2RlX3B1dChpb21tdV9zcGVjLm5wKTsKPj4+PiArCj4+Pj4gICAgICAg ICAgZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwo+ Pj4+ICAgICAgICAgIGlmICghZGF0YSkKPj4+PiAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOwo+ Pj4+Cj4+Pj4gLSAgICAgICBkYXRhLT5iYWNrZW5kX2RvbWlkID0gZG9taWQ7Cj4+Pj4gKyAgICAg ICAvKgo+Pj4+ICsgICAgICAgICogVGhlIGVuZHBvaW50IElEIGhlcmUgbWVhbnMgdGhlIElEIG9m IHRoZSBkb21haW4gd2hlcmUgdGhlCj4+Pj4gY29ycmVzcG9uZGluZwo+Pj4+ICsgICAgICAgICog YmFja2VuZCBpcyBydW5uaW5nCj4+Pj4gKyAgICAgICAgKi8KPj4+PiArICAgICAgIGRhdGEtPmJh Y2tlbmRfZG9taWQgPSBpb21tdV9zcGVjLmFyZ3NbMF07Cj4+Pj4KPj4+PiAgICAgICAgICBpZiAo eGFfZXJyKHhhX3N0b3JlKCZ4ZW5fZ3JhbnRfZG1hX2RldmljZXMsICh1bnNpZ25lZCBsb25nKWRl diwgZGF0YSwKPj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCkpKSB7Cj4+ Pj4gKEVORCkKPj4+Pgo+Pj4+Cj4+Pj4KPj4+PiBCZWxvdywgdGhlIG5vZGVzIGdlbmVyYXRlZCBi eSBYZW4gdG9vbHN0YWNrOgo+Pj4+Cj4+Pj4gICAgICAgICAgeGVuX2dyYW50X2RtYSB7Cj4+IE5p dDogaW9tbXUgewo+Pgo+Pj4+ICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJ4ZW4sZ3Jh bnQtZG1hIjsKPj4+PiAgICAgICAgICAgICAgICAgICNpb21tdS1jZWxscyA9IDwweDAxPjsKPj4+ PiAgICAgICAgICAgICAgICAgIHBoYW5kbGUgPSA8MHhmZGU5PjsKPj4+PiAgICAgICAgICB9Owo+ Pj4+Cj4+Pj4gICAgICAgICAgdmlydGlvQDIwMDAwMDAgewo+Pj4+ICAgICAgICAgICAgICAgICAg Y29tcGF0aWJsZSA9ICJ2aXJ0aW8sbW1pbyI7Cj4+Pj4gICAgICAgICAgICAgICAgICByZWcgPSA8 MHgwMCAweDIwMDAwMDAgMHgwMCAweDIwMD47Cj4+Pj4gICAgICAgICAgICAgICAgICBpbnRlcnJ1 cHRzID0gPDB4MDAgMHgwMSAweGYwMT47Cj4+Pj4gICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQt cGFyZW50ID0gPDB4ZmRlOD47Cj4+Pj4gICAgICAgICAgICAgICAgICBkbWEtY29oZXJlbnQ7Cj4+ Pj4gICAgICAgICAgICAgICAgICBpb21tdXMgPSA8MHhmZGU5IDB4MDE+Owo+Pj4+ICAgICAgICAg IH07Cj4+PiBOb3QgYmFkISBJIGxpa2UgaXQuCj4+Pgo+Pj4KPj4+PiBJIGFtIHdvbmRlcmluZywg d291bGQgYmUgdGhlIHByb3BlciBzb2x1dGlvbiB0byBlbGltaW5hdGUgZGVmZXJyZWQgcHJvYmUK Pj4+PiB0aW1lb3V0IGlzc3VlIGluIG91ciBwYXJ0aWN1bGFyIGNhc2UgKHdpdGhvdXQgaW50cm9k dWNpbmcgYW4gZXh0cmEgSU9NTVUKPj4+PiBkcml2ZXIpPwo+Pj4gSW4gcmVhbGl0eSBJIGRvbid0 IHRoaW5rIHRoZXJlIGlzIGEgd2F5IHRvIGRvIHRoYXQuIEkgd291bGQgY3JlYXRlIGFuCj4+PiBl bXB0eSBza2VsZXRob24gSU9NTVUgZHJpdmVyIGZvciB4ZW4sZ3JhbnQtZG1hLgo+PiBEb2VzIGl0 IGhhdmUgdG8gYmUgYW4gZW1wdHkgZHJpdmVyPyBPcmlnaW5hbGx5LCBJT01NVSAnZHJpdmVycycg d2VyZSBub3QKPj4gZHJpdmVycywgYnV0IHRoZXkndmUgYmVlbiBnZXR0aW5nIGNvbnZlcnRlZC4g Q2FuIHRoYXQgYmUgZG9uZSBoZXJlPwo+Pgo+PiBTaG9ydCBvZiB0aGF0LCBJIHRoaW5rIHdlIGNv dWxkIGhhdmUgc29tZSBzb3J0IG9mIHNraXAgcHJvYmUgbGlzdCBmb3IKPj4gZGVmZXJyZWQgcHJv YmUuIE5vdCBzdXJlIGlmIHRoYXQgd291bGQgYmUgZWFzaWVzdCBhcyBJT01NVSBzcGVjaWZpYyBv cgo+PiBnbG9iYWwuCj4gSGkgT2xla3NhbmRyLAo+Cj4gSWYgeW91IGRvIGZ3X2Rldmxpbmsuc3Ry aWN0PTEsIHlvdSdsbCBub3RpY2UgdGhhdCB0aGUgY29uc3VtZXJzIG9mCj4gdGhpcyAiaW9tbXUi IHdvbid0IHByb2JlIGF0IGFsbCBvciB3aWxsIGRlbGF5IHRoZSBib290IGJ5IHNvbWUgbnVtYmVy Cj4gb2Ygc2Vjb25kcy4gVGhlIGV2ZW50dWFsIGdvYWwgaXMgdG8gZ28gdG93YXJkcyBmd19kZXZs aW5rLnN0cmljdD0xCj4gYmVpbmcgdGhlIGRlZmF1bHQuCgpvaywgSSBnb3QgaXQuCgpMZXQncyBt ZSBwbGVhc2UgZXhwbGFpbiBvdXIgcGFydGljdWxhciBjYXNlIGluIGRldGFpbHMsIHNvcnJ5IEkg bWF5IApyZXBlYXQgc29tZSBpbmZvcm1hdGlvbiB3aGljaCBJIGhhdmUgYWxyZWFkeSBtZW50aW9u ZWQgZWxzZXdoZXJlLCBidXQgaXQgCm1heWJlIGJldHRlciB0byBrZWVwIHRoZSB3aG9sZSBjb250 ZXh0IGhlcmUuCgpXZSBoYXZlIFhlbiBncmFudCBETUEtbWFwcGluZyBsYXllciBhZGRlZCBieSBw cmV2aW91cyBjb21taXQgWzFdLiBGb3IgaXQgCnRvIG9wZXJhdGUgcHJvcGVybHkgd2UgbmVlZCBh IHdheSB0byBjb21tdW5pY2F0ZSBzb21lIHBlci1kZXZpY2UgCmluZm9ybWF0aW9uIHVzaW5nIGRl dmljZS10cmVlLAphbmQgdGhpcyBpbmZvcm1hdGlvbiBpcyBYZW4gc3BlY2lmaWMuIFRoaXMgaXMg d2hhdCB0aGUgY3VycmVudCBjb21taXQgaXMgCmRvaW5nIGJ5IGludHJvZHVjaW5nIG5ldyBiaW5k aW5nIHRvIGRlc2NyaWJlIHRoYXQuIFRoZSBuZXh0IGNvbW1pdCBbMl0gCndpbGwgdXNlIHRoYXQg bmV3IGJpbmRpbmcgdG8gcmV0cmlldmUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFRoZXJlIHdhcyBh IApzdWdnZXN0aW9uIHRvIGNvbnNpZGVyIHJldXNpbmcgZ2VuZXJpYyBkZXZpY2UtdHJlZSBJT01N VSBiaW5kaW5ncyB0byAKY29tbXVuaWNhdGUgdGhpcyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpbnN0 ZWFkIG9mIGludHJvZHVjaW5nIGEgY3VzdG9tIApwcm9wZXJ0eS4KCkFsdGhvdWdoIGl0IHJlcXVp cmVzIG1vcmUgZWZmb3J0IGZvciB0aGUgWGVuIHRvb2xzdGFjayAoaW5zdGVhZCBvZiAKYWRkaW5n IGEgY29kZSB0byBpbnNlcnQgYSBzaW5nbGUgInhlbixiYWNrZW5kLWRvbWlkIiBwcm9wZXJ0eSwg d2UgbmVlZCAKdG8gZ2VuZXJhdGUgZmFrZSBJT01NVSBub2RlLCByZXNlcnZlIHBoYW5kbGUgZm9y IGl0LCBldGMpLCBmcm9tIHRoZSAKZGV2aWNlIHRyZWUgUG9WIGl0IGxvb2tzIGluZGVlZCBnb29k ICh3ZSByZXVzZSBlbmRwb2ludCBJRCB0byBwYXNzIHRoZSAKSUQgb2YgdGhlIGRvbWFpbiB3aGVy ZSB0aGUgY29ycmVzcG9uZGluZyBiYWNrZW5kIGlzIHJ1bm5pbmcpLCBhbmQgCnJlc3VsdGluZyBj b2RlIHRvIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRpb24gaW4gb3VyIERNQS1tYXBwaW5nIGxheWVy IAphbHNvIGxvb2tzIHNpbXBsZSBlbm91Z2ggWzNdLgoKVXNpbmcgZ2VuZXJpYyBkZXZpY2UtdHJl ZSBJT01NVSBiaW5kaW5nczoKCiDCoMKgwqDCoMKgwqDCoMKgIGlvbW11IHsKIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbXBhdGlibGUgPSAieGVuLGdyYW50LWRtYSI7CiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAjaW9tbXUtY2VsbHMgPSA8MHgwMT47CiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwaGFuZGxlID0gPDB4ZmRlOT47CiDCoMKgwqDC oMKgwqDCoMKgIH07CiDCoMKgwqDCoMKgwqDCoMKgIHZpcnRpb0AyMDAwMDAwIHsKIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbXBhdGlibGUgPSAidmlydGlvLG1taW8iOwogwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnID0gPDB4MDAgMHgyMDAwMDAwIDB4MDAg MHgyMDA+OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZXJydXB0cyA9IDww eDAwIDB4MDEgMHhmMDE+OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZXJy dXB0LXBhcmVudCA9IDwweGZkZTg+OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZG1hLWNvaGVyZW50OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW9tbXVzID0g PDB4ZmRlOSAweDAxPjsKIMKgwqDCoMKgwqDCoMKgwqAgfTsKClVzaW5nIFhlbiBzcGVjaWZpYyBw cm9wZXJ0eToKCiDCoMKgwqDCoMKgwqDCoMKgIHZpcnRpb0AyMDAwMDAwIHsKIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbXBhdGlibGUgPSAidmlydGlvLG1taW8iOwogwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnID0gPDB4MDAgMHgyMDAwMDAwIDB4MDAgMHgy MDA+OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZXJydXB0cyA9IDwweDAw IDB4MDEgMHhmMDE+OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZXJydXB0 LXBhcmVudCA9IDwweGZkZTg+OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1h LWNvaGVyZW50OwogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGVuLGJhY2tlbmQt ZG9taWQgPSA8MHgwMT47CiDCoMKgwqDCoMKgwqDCoMKgIH07CgoKVGhlIG1haW4gcHJvYmxlbSBp cyB0aGF0IGlkZWEgZG9lc24ndCBxdWl0ZSBmaXQgaW50byBob3cgTGludXggY3VycmVudGx5IApi ZWhhdmVzIGZvciB0aGUgImlvbW11cyIgcHJvcGVydHkuIE9mIGNvdXJzZSwganVzdCByZXVzaW5n IElPTU1VIApiaW5kaW5ncyAod2l0aG91dCBoYXZpbmcgYSBjb3JyZXNwb25kaW5nIGRyaXZlcikg bGVhZHMgdG8gdGhlIGRlZmVycmVkIApwcm9iZSB0aW1lb3V0IGlzc3VlIGFmdGVyd2FyZHMsIGJl Y2F1c2UgdGhlIElPTU1VIGRldmljZSBuZXZlciBiZWNvbWVzIAphdmFpbGFibGUuIEZyb20gbXkg dW5kZXJzdGFuZGluZywgb3VyIERNQS1tYXBwaW5nIGxheWVyIHdlIGFyZSBjb25zaWRlciAKdG8g cmV1c2UgSU9NTVUgYmluZGluZ3MgZm9yLCAqY2Fubm90KiBiZSBjb252ZXJ0ZWQgaW50byB0aGUg cHJvcGVyIElPTU1VIApkcml2ZXIuCgpTdXJlLCB3ZSB3aWxsIG5lZWQgdG8gZmluZCBhIHdheSBo b3cgdG8gZGVhbCB3aXRoIGl0LCBpZiB3ZSByZWFsbHkgd2FudCAKdG8gcmV1c2UgdGhlIElPTU1V IGJpbmRpbmdzLiBBbmQgeWVzLCBvbmUgaWRlYSB3YXMgdG8ganVzdCBpbXBsZW1lbnQgCnN0dWIg SU9NTVUgZHJpdmVyIGZvciB0aGF0IHB1cnBvc2UsIEkgaGF2ZSByZWNoZWNrZWQsIGl0IHdvcmtz IGZpbmUgd2l0aCAKdGhhdCBzdHViIGRyaXZlciBbNF0uCgo+Cj4gIEZyb20gYSBmd19kZXZsaWsg cGVyc3BlY3RpdmUsIHBsZWFzZSBpbXBsZW1lbnQgYSBkcml2ZXIuIElkZWFsbHkgYQo+IHJlYWwg b25lLCBidXQgYXQgbGVhc3QgYW4gZW1wdHkgb25lLiBUaGUgZW1wdHkgb25lIGRvZXNuJ3QgbmVl ZCB0byBiZQo+IGFuIElPTU1VIGRyaXZlciwgYnV0IGF0IGxlYXN0IGp1c3QgZG8gYSByZXR1cm4g MCBpbiB0aGUgcHJvYmUKPiBmdW5jdGlvbi4KCgpJZiBJIGdvdCB0aGluZ3MgcmlnaHQsIEkgYW0g YWZyYWlkLCBmb3IgdGhlICJvZl9pb21tdSIgY2FzZSB0aGUgZW1wdHkgCmRyaXZlciBpcyBub3Qg ZW5vdWdoLiBUaGUgZHJpdmVyIHNob3VsZCBhdCBsZWFzdCByZWdpc3RlciBpb21tdV9vcHMsIGJ1 dCAKdGhlICJvZl94bGF0ZSIgY2FsbGJhY2sgc2hvdWxkIGJlICpub3QqIGltcGxlbWVudGVkLgpJ biB0aGF0IGNhc2UsIHdlIHdpbGwgZ2V0IE5PX0lPTU1VICg+MCA6IHRoZXJlIGlzIG5vIElPTU1V LCBvciBvbmUgd2FzIAp1bmF2YWlsYWJsZSBmb3Igbm9uLWZhdGFsIHJlYXNvbnMpIHdoaWNoIGlz IGFsc28gYSBzdWNjZXNzIGNvbmRpdGlvbiwgc28gCi1FUFJPQkVfREVGRVIgd29uJ3QgYmUgcmV0 dXJuZWQuCgpodHRwczovL2VsaXhpci5ib290bGluLmNvbS9saW51eC92NS4xOC9zb3VyY2UvZHJp dmVycy9pb21tdS9vZl9pb21tdS5jI0wzMgoKT3RoZXJ3aXNlLCBvZl9pb21tdV94bGF0ZSgpIHdp bGwgY2FsbCBkcml2ZXJfZGVmZXJyZWRfcHJvYmVfY2hlY2tfc3RhdGUoKS4KCmh0dHBzOi8vZWxp eGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y1LjE4L3NvdXJjZS9kcml2ZXJzL2lvbW11L29mX2lvbW11 LmMjTDQzCgo+ICAgQWxzbywgaWYgaXQncyBub3QgYSBkZXZpY2UsIHdoeSBldmVuIGhhdmUgYSAi Y29tcGF0aWJsZSIKPiBwcm9wZXJ0eSAocmVtb3ZpbmcgaXQgd29uJ3QgbmVjZXNzYXJpbHkgcmVt b3ZlIHRoZSBkZWZlcnJlZCBwcm9iZQo+IHRpbWVvdXQgaXNzdWUgeW91IHNlZSk/IFdpbGwgYW55 IGNvZGUgYmUgdXNpbmcgInhlbixncmFudC1kbWEiIHRvIGxvb2sKPiB1cCB0aGUgbm9kZT8KClll cwoKCj4gICBJZiBzbywgdGhhdCBkcml2ZXIgY291bGQgYmUgdGhlIG9uZSB0aGF0IHByb2JlcyB0 aGlzCj4gZGV2aWNlLiBBdCBsZWFzdCBmcm9tIGEgZndfZGV2bGluayBwZXJzcGVjdGl2ZSwgaXQg anVzdCBuZWVkcyB0byBoYXZlCj4gYSBkcml2ZXIgdGhhdCBiaW5kcyB0byB0aGlzIGRldmljZS4K CkFncmVlCgoKPgo+IEFsc28sIGlmIHdlIGFyZW4ndCBnb2luZyB0byBpbXBsZW1lbnQgYSBkcml2 ZXIgYW5kIGhhdmUgdGhlIHN1cHBsaWVyCj4gKCJ4ZW4sZ3JhbnQtZG1hIikgYmVoYXZlIGxpa2Ug YSBkZXZpY2UgKGFzIGluLCBoYXZlIGEgZHJpdmVyIHRoYXQKPiBwcm9iZXMpLCBJJ2QgcmF0aGVy IHRoYXQgdGhlIGlvbW11IGJpbmRpbmcgbm90IGJlIHVzZWQgYXQgYWxsIGFzIHRoaXMKPiB3b3Vs ZCBiZSBhbiBleGNlcHRpb24gdG8gaG93IGV2ZXJ5IG90aGVyIGlvbW11IGRldmljZSBiZWhhdmVz LgoKQWdyZWUKCgpTYXJhdmFuYSwgdGhhbmsgeW91IGZvciB0aGUgZXhwbGFuYXRpb24uCgoKVG8g c3VtbWFyaXplLCBhcyBJIHVuZGVyc3RhbmQsIHdlIGhhdmUgdGhyZWUgb3B0aW9ucyAodGhlIGZp cnN0IHR3byBhcmUgCmNsZWFyIGVub3VnaCwgdGhlIHRoaXJkIGlzIHVuY2xlYXIgeWV0KToKCjEu IERvIG5vdCB0cnkgdG8gcmV1c2UgSU9NTVUgYmluZGluZ3MgZm9yIGN1cnJlbnQgeGVuLXZpcnRp byBlbmFibGluZyAKd29yaywgdXNlICJ4ZW4sYmFja2VuZC1kb21pZCIgcHJvcGVydHkuCjIuIFJl dXNlIElPTU1VIGJpbmRpbmdzLCBmb3IgdGhhdCBwdXJwb3NlIGludHJvZHVjZSBzdHViIElPTU1V IGRyaXZlci4gCkl0IGlzIGEgc3RhbmRhbG9uZSBlbnRpdHkgaW4gbXkgZXhhbXBsZSwgYnV0IGl0 IGNhbiBiZSBhIHBhcnQgb2YgCmdyYW50LWRtYS1vcHMuYyB3aGljaAphY3R1YWxseSB1c2VzICJ4 ZW4sZ3JhbnQtZG1hIiBjb21wYXRpYmxlIHRvIGxvb2sgdXAgYSBub2RlLgozLiBUcnkgdG8gZmlu ZCBvdGhlciBvcHRpb25zIGhvdyB0byByZXVzZSBJT01NVSBiaW5kaW5ncyBidXQgKndpdGhvdXQq IAppbnRyb2R1Y2luZyBzdHViIElPTU1VIGRyaXZlciwgc3VjaCBhcyBza2lwIGxpc3QgZm9yIGRl ZmVycmVkIHByb2JlLCBldGMuCgoKV2hhdCBkbyB0aGUgbWFpbnRhaW5lcnMgdGhpbmsgcmVnYXJk aW5nIHRoZSBvcHRpb24gdG8gZ28gZm9yd2FyZD8KCgpbMV0gCmh0dHBzOi8vbG9yZS5rZXJuZWwu b3JnL3hlbi1kZXZlbC8xNjUxOTQ3NTQ4LTQwNTUtNC1naXQtc2VuZC1lbWFpbC1vbGVrc3R5c2hA Z21haWwuY29tLwoKWzJdIApodHRwczovL2xvcmUua2VybmVsLm9yZy94ZW4tZGV2ZWwvMTY1MTk0 NzU0OC00MDU1LTctZ2l0LXNlbmQtZW1haWwtb2xla3N0eXNoQGdtYWlsLmNvbS8KClszXSAKaHR0 cHM6Ly9sb3JlLmtlcm5lbC5vcmcveGVuLWRldmVsLzM5MGJhN2JiLWVlOWUtYjdiNy01ZjA4LTcx YTcyNDVmYTRlY0BnbWFpbC5jb20vCgpbNF0gCmh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3hlbi1k ZXZlbC82MDZkZmRjYy1lYzEwLTBjNGEtMDRlOS03MmNkNzNlZTY2NzZAZ21haWwuY29tLwoKPgo+ IC1TYXJhdmFuYQoKLS0gClJlZ2FyZHMsCgpPbGVrc2FuZHIgVHlzaGNoZW5rbwoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK