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=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=unavailable 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 BEB14C47078 for ; Fri, 21 May 2021 14:45:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9A757613E4 for ; Fri, 21 May 2021 14:45:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236952AbhEUOqt (ORCPT ); Fri, 21 May 2021 10:46:49 -0400 Received: from foss.arm.com ([217.140.110.172]:48950 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236881AbhEUOqR (ORCPT ); Fri, 21 May 2021 10:46:17 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DE4C011B3; Fri, 21 May 2021 07:44:49 -0700 (PDT) Received: from [10.57.73.64] (unknown [10.57.73.64]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 15AB43F73B; Fri, 21 May 2021 07:44:47 -0700 (PDT) Subject: Re: [PATCH v5 3/4] iommu: rockchip: Add internal ops to handle variants To: Benjamin Gaignard , joro@8bytes.org, will@kernel.org, robh+dt@kernel.org, heiko@sntech.de, xxm@rock-chips.com Cc: iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com References: <20210521083637.3221304-1-benjamin.gaignard@collabora.com> <20210521083637.3221304-4-benjamin.gaignard@collabora.com> From: Robin Murphy Message-ID: Date: Fri, 21 May 2021 15:44:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021-05-21 14:38, Benjamin Gaignard wrote: > > Le 21/05/2021 à 14:58, Robin Murphy a écrit : >> On 2021-05-21 09:36, Benjamin Gaignard wrote: >>> Add internal ops to be able to handle incoming variant v2. >>> The goal is to keep the overall structure of the framework but >>> to allow to add the evolution of this hardware block. >>> >>> The ops are global for a SoC because iommu domains are not >>> attached to a specific devices if they are for a virtuel device like >>> drm. Use a global variable shouldn't be since SoC usually doesn't >>> embedded different versions of the iommu hardware block. >>> If that happen one day a WARN_ON will be displayed at probe time. >> >> IMO it would be a grievous error if such a "virtual device" ever gets >> near the IOMMU API, so personally I wouldn't use that as a >> justification for anything :) >> >> FWIW you should be OK to handle things on a per-instance basis, it >> just means you have to defer some of the domain setup to .attach_dev >> time, like various other drivers do. That said, there's nothing wrong >> with the global if we do expect instances to be consistent across any >> given Rockchip SoC (and my gut feeling is that we probably should). > > I have tried that solution first but drm device appear to but such > "virtual device" so I had to use the global. Hmm, the "rockchip,display-subsystem" node is not associated with an IOMMU, and shouldn't even be passed to the DMA API either, because it's not a real piece of DMA capable hardware. Whatever the DRM stack is doing above, it should only be the actual VOP devices that we see down here. If not, that's indicative of something being wrong elsewhere. Like I say though, I think it's fine to use global ops simply on the expectation that that's how the new SOCs are going to be. In fact this reminds me, I think I started writing a patch somewhere to clean up the virtual device mess for rockchip-drm (IIRC I could see no reason why we can't just allocate the DRM device from the VOP driver, similar to what exynos-drm does). Maybe I should dig that up again... > I send a v6 to fix your others remarks. I guess I'll wait for v7 now then, since I got sidetracked before sending my review of patch #4 (heck, I've just spent the last half hour doing something else in the middle of writing this!) ;) Cheers, Robin. > > Thanks for your advice. > > Benjamin > >> >>> Signed-off-by: Benjamin Gaignard >>> --- >>> version 5: >>>   - Use of_device_get_match_data() >>>   - Add internal ops inside the driver >>> >>>   drivers/iommu/rockchip-iommu.c | 69 ++++++++++++++++++++++++---------- >>>   1 file changed, 50 insertions(+), 19 deletions(-) >>> >>> diff --git a/drivers/iommu/rockchip-iommu.c >>> b/drivers/iommu/rockchip-iommu.c >>> index 7a2932772fdf..e7b9bcf174b1 100644 >>> --- a/drivers/iommu/rockchip-iommu.c >>> +++ b/drivers/iommu/rockchip-iommu.c >>> @@ -19,6 +19,7 @@ >>>   #include >>>   #include >>>   #include >>> +#include >> >> This seems to be an unrelated and unnecessary change. >> >>>   #include >>>   #include >>>   #include >>> @@ -96,6 +97,14 @@ static const char * const rk_iommu_clocks[] = { >>>       "aclk", "iface", >>>   }; >>>   +struct rk_iommu_ops { >>> +    phys_addr_t (*pt_address)(u32 dte); >>> +    u32 (*mk_dtentries)(dma_addr_t pt_dma); >>> +    u32 (*mk_ptentries)(phys_addr_t page, int prot); >>> +    phys_addr_t (*dte_addr_phys)(phys_addr_t addr); >>> +    u32 pt_address_mask; >>> +}; >>> + >>>   struct rk_iommu { >>>       struct device *dev; >>>       void __iomem **bases; >>> @@ -116,6 +125,7 @@ struct rk_iommudata { >>>   }; >>>     static struct device *dma_dev; >>> +static const struct rk_iommu_ops *rk_ops; >>>     static inline void rk_table_flush(struct rk_iommu_domain *dom, >>> dma_addr_t dma, >>>                     unsigned int count) >>> @@ -215,11 +225,6 @@ static inline u32 rk_mk_dte(dma_addr_t pt_dma) >>>   #define RK_PTE_PAGE_READABLE      BIT(1) >>>   #define RK_PTE_PAGE_VALID         BIT(0) >>>   -static inline phys_addr_t rk_pte_page_address(u32 pte) >>> -{ >>> -    return (phys_addr_t)pte & RK_PTE_PAGE_ADDRESS_MASK; >>> -} >>> - >>>   static inline bool rk_pte_is_page_valid(u32 pte) >>>   { >>>       return pte & RK_PTE_PAGE_VALID; >>> @@ -451,7 +456,7 @@ static int rk_iommu_force_reset(struct rk_iommu >>> *iommu) >>>           rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, >>> DTE_ADDR_DUMMY); >>>             dte_addr = rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR); >>> -        if (dte_addr != (DTE_ADDR_DUMMY & RK_DTE_PT_ADDRESS_MASK)) { >>> +        if (dte_addr != (DTE_ADDR_DUMMY & rk_ops->pt_address_mask)) { >> >> Nit: might it make more sense to do something like: >> >>         dte_addr = rk_ops->pt_address(... DTE_ADDR_DUMMY); >>         rk_iommu_write(... dte_addr) >>         if (rk_iommu_read(...) != dte_addr) >> >> so that you don't need to bother defining ->pt_address_mask for just >> this one sanity-check? >> >>>               dev_err(iommu->dev, "Error during raw reset. >>> MMU_DTE_ADDR is not functioning\n"); >>>               return -EFAULT; >>>           } >>> @@ -470,6 +475,11 @@ static int rk_iommu_force_reset(struct rk_iommu >>> *iommu) >>>       return 0; >>>   } >>>   +static inline phys_addr_t rk_dte_addr_phys(phys_addr_t addr) >> >> The argument type here should be u32, since it's a DTE, not a physical >> address... >> >>> +{ >>> +    return addr; >>> +} >>> + >>>   static void log_iova(struct rk_iommu *iommu, int index, dma_addr_t >>> iova) >>>   { >>>       void __iomem *base = iommu->bases[index]; >>> @@ -489,7 +499,7 @@ static void log_iova(struct rk_iommu *iommu, int >>> index, dma_addr_t iova) >>>       page_offset = rk_iova_page_offset(iova); >>>         mmu_dte_addr = rk_iommu_read(base, RK_MMU_DTE_ADDR); >>> -    mmu_dte_addr_phys = (phys_addr_t)mmu_dte_addr; >>> +    mmu_dte_addr_phys = >>> rk_ops->dte_addr_phys((phys_addr_t)mmu_dte_addr); >> >> ...and the cast here should not be here, since it *is* the conversion >> that the called function is supposed to be performing. >> >>>       dte_addr_phys = mmu_dte_addr_phys + (4 * dte_index); >>>       dte_addr = phys_to_virt(dte_addr_phys); >>> @@ -498,14 +508,14 @@ static void log_iova(struct rk_iommu *iommu, >>> int index, dma_addr_t iova) >>>       if (!rk_dte_is_pt_valid(dte)) >>>           goto print_it; >>>   -    pte_addr_phys = rk_dte_pt_address(dte) + (pte_index * 4); >>> +    pte_addr_phys = rk_ops->pt_address(dte) + (pte_index * 4); >>>       pte_addr = phys_to_virt(pte_addr_phys); >>>       pte = *pte_addr; >>>         if (!rk_pte_is_page_valid(pte)) >>>           goto print_it; >>>   -    page_addr_phys = rk_pte_page_address(pte) + page_offset; >>> +    page_addr_phys = rk_ops->pt_address(pte) + page_offset; >>>       page_flags = pte & RK_PTE_PAGE_FLAGS_MASK; >>>     print_it: >>> @@ -601,13 +611,13 @@ static phys_addr_t rk_iommu_iova_to_phys(struct >>> iommu_domain *domain, >>>       if (!rk_dte_is_pt_valid(dte)) >>>           goto out; >>>   -    pt_phys = rk_dte_pt_address(dte); >>> +    pt_phys = rk_ops->pt_address(dte); >>>       page_table = (u32 *)phys_to_virt(pt_phys); >>>       pte = page_table[rk_iova_pte_index(iova)]; >>>       if (!rk_pte_is_page_valid(pte)) >>>           goto out; >>>   -    phys = rk_pte_page_address(pte) + rk_iova_page_offset(iova); >>> +    phys = rk_ops->pt_address(pte) + rk_iova_page_offset(iova); >>>   out: >>>       spin_unlock_irqrestore(&rk_domain->dt_lock, flags); >>>   @@ -679,14 +689,14 @@ static u32 *rk_dte_get_page_table(struct >>> rk_iommu_domain *rk_domain, >>>           return ERR_PTR(-ENOMEM); >>>       } >>>   -    dte = rk_mk_dte(pt_dma); >>> +    dte = rk_ops->mk_dtentries(pt_dma); >>>       *dte_addr = dte; >>>         rk_table_flush(rk_domain, pt_dma, NUM_PT_ENTRIES); >>>       rk_table_flush(rk_domain, >>>                  rk_domain->dt_dma + dte_index * sizeof(u32), 1); >>>   done: >>> -    pt_phys = rk_dte_pt_address(dte); >>> +    pt_phys = rk_ops->pt_address(dte); >>>       return (u32 *)phys_to_virt(pt_phys); >>>   } >>>   @@ -728,7 +738,7 @@ static int rk_iommu_map_iova(struct >>> rk_iommu_domain *rk_domain, u32 *pte_addr, >>>           if (rk_pte_is_page_valid(pte)) >>>               goto unwind; >>>   -        pte_addr[pte_count] = rk_mk_pte(paddr, prot); >>> +        pte_addr[pte_count] = rk_ops->mk_ptentries(paddr, prot); >>>             paddr += SPAGE_SIZE; >>>       } >>> @@ -750,7 +760,7 @@ static int rk_iommu_map_iova(struct >>> rk_iommu_domain *rk_domain, u32 *pte_addr, >>>                   pte_count * SPAGE_SIZE); >>>         iova += pte_count * SPAGE_SIZE; >>> -    page_phys = rk_pte_page_address(pte_addr[pte_count]); >>> +    page_phys = rk_ops->pt_address(pte_addr[pte_count]); >>>       pr_err("iova: %pad already mapped to %pa cannot remap to phys: >>> %pa prot: %#x\n", >>>              &iova, &page_phys, &paddr, prot); >>>   @@ -785,7 +795,8 @@ static int rk_iommu_map(struct iommu_domain >>> *domain, unsigned long _iova, >>>       dte_index = rk_domain->dt[rk_iova_dte_index(iova)]; >>>       pte_index = rk_iova_pte_index(iova); >>>       pte_addr = &page_table[pte_index]; >>> -    pte_dma = rk_dte_pt_address(dte_index) + pte_index * sizeof(u32); >>> + >>> +    pte_dma = rk_ops->pt_address(dte_index) + pte_index * sizeof(u32); >>>       ret = rk_iommu_map_iova(rk_domain, pte_addr, pte_dma, iova, >>>                   paddr, size, prot); >>>   @@ -821,7 +832,7 @@ static size_t rk_iommu_unmap(struct >>> iommu_domain *domain, unsigned long _iova, >>>           return 0; >>>       } >>>   -    pt_phys = rk_dte_pt_address(dte); >>> +    pt_phys = rk_ops->pt_address(dte); >>>       pte_addr = (u32 *)phys_to_virt(pt_phys) + rk_iova_pte_index(iova); >>>       pte_dma = pt_phys + rk_iova_pte_index(iova) * sizeof(u32); >>>       unmap_size = rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, >>> size); >>> @@ -1037,7 +1048,7 @@ static void rk_iommu_domain_free(struct >>> iommu_domain *domain) >>>       for (i = 0; i < NUM_DT_ENTRIES; i++) { >>>           u32 dte = rk_domain->dt[i]; >>>           if (rk_dte_is_pt_valid(dte)) { >>> -            phys_addr_t pt_phys = rk_dte_pt_address(dte); >>> +            phys_addr_t pt_phys = rk_ops->pt_address(dte); >>>               u32 *page_table = phys_to_virt(pt_phys); >>>               dma_unmap_single(dma_dev, pt_phys, >>>                        SPAGE_SIZE, DMA_TO_DEVICE); >>> @@ -1138,6 +1149,15 @@ static int rk_iommu_probe(struct >>> platform_device *pdev) >>>       iommu->dev = dev; >>>       iommu->num_mmu = 0; >>>   +    if (!rk_ops) >>> +        rk_ops = of_device_get_match_data(dev); >>> + >>> +    /* >>> +     * That should not happen unless different versions of the >>> +     * hardware block are embedded the same SoC >>> +     */ >>> +    WARN_ON(rk_ops != of_device_get_match_data(dev)); >> >> Nit: calling of_device_get_match_data() twice seems rather untidy - >> how about something like: >> >>     ops = of_device_get_match_data(dev); >>     if (!rk_ops) >>         rk_ops = ops; >>     else if (WARN_ON(rk_ops != ops)) >>         return -EINVAL; >> >> Either way I think it would be good to treat unexpected inconsistentcy >> as an actual error, rather than second-guessing the DT and carrying on >> under the assumption the device is something other than it claimed to be. >> >>> + >>>       iommu->bases = devm_kcalloc(dev, num_res, sizeof(*iommu->bases), >>>                       GFP_KERNEL); >>>       if (!iommu->bases) >>> @@ -1277,10 +1297,21 @@ static const struct dev_pm_ops >>> rk_iommu_pm_ops = { >>>                   pm_runtime_force_resume) >>>   }; >>>   +static struct rk_iommu_ops iommu_data_ops_v1 = { >>> +    .pt_address = &rk_dte_pt_address, >>> +    .mk_dtentries = &rk_mk_dte, >>> +    .mk_ptentries = &rk_mk_pte, >>> +    .dte_addr_phys = &rk_dte_addr_phys, >>> +    .pt_address_mask = RK_DTE_PT_ADDRESS_MASK, >>> +}; >>> + >>>   static const struct of_device_id rk_iommu_dt_ids[] = { >>> -    { .compatible = "rockchip,iommu" }, >>> +    {    .compatible = "rockchip,iommu", >>> +        .data = &iommu_data_ops_v1, >>> +    }, >>>       { /* sentinel */ } >>>   }; >>> +MODULE_DEVICE_TABLE(of, rk_iommu_dt_ids); >> >> As before, unrelated and unnecessary since this driver is still bool >> in the Kconfig. If you do want to support modular builds you'll also >> need to ensure rk_iommu_ops.owner is set, but do it all as a separate >> patch please. >> >> Thanks, >> Robin. >> >>>     static struct platform_driver rk_iommu_driver = { >>>       .probe = rk_iommu_probe, >>> >> 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=-15.2 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham 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 3EC37C47076 for ; Fri, 21 May 2021 14:45:00 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 E09F2613E4 for ; Fri, 21 May 2021 14:44:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E09F2613E4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id B379940F38; Fri, 21 May 2021 14:44:59 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xkCNdlmYqe_m; Fri, 21 May 2021 14:44:53 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTP id 2215840EE6; Fri, 21 May 2021 14:44:53 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 03D65C000E; Fri, 21 May 2021 14:44:53 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3FC53C0001 for ; Fri, 21 May 2021 14:44:52 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 20303401E1 for ; Fri, 21 May 2021 14:44:52 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id rvzr01-orZry for ; Fri, 21 May 2021 14:44:50 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp2.osuosl.org (Postfix) with ESMTP id AFEEA40153 for ; Fri, 21 May 2021 14:44:50 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DE4C011B3; Fri, 21 May 2021 07:44:49 -0700 (PDT) Received: from [10.57.73.64] (unknown [10.57.73.64]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 15AB43F73B; Fri, 21 May 2021 07:44:47 -0700 (PDT) Subject: Re: [PATCH v5 3/4] iommu: rockchip: Add internal ops to handle variants To: Benjamin Gaignard , joro@8bytes.org, will@kernel.org, robh+dt@kernel.org, heiko@sntech.de, xxm@rock-chips.com References: <20210521083637.3221304-1-benjamin.gaignard@collabora.com> <20210521083637.3221304-4-benjamin.gaignard@collabora.com> From: Robin Murphy Message-ID: Date: Fri, 21 May 2021 15:44:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, iommu@lists.linux-foundation.org, kernel@collabora.com, linux-arm-kernel@lists.infradead.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" T24gMjAyMS0wNS0yMSAxNDozOCwgQmVuamFtaW4gR2FpZ25hcmQgd3JvdGU6Cj4gCj4gTGUgMjEv MDUvMjAyMSDDoCAxNDo1OCwgUm9iaW4gTXVycGh5IGEgw6ljcml0wqA6Cj4+IE9uIDIwMjEtMDUt MjEgMDk6MzYsIEJlbmphbWluIEdhaWduYXJkIHdyb3RlOgo+Pj4gQWRkIGludGVybmFsIG9wcyB0 byBiZSBhYmxlIHRvIGhhbmRsZSBpbmNvbWluZyB2YXJpYW50IHYyLgo+Pj4gVGhlIGdvYWwgaXMg dG8ga2VlcCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIGZyYW1ld29yayBidXQKPj4+IHRv IGFsbG93IHRvIGFkZCB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgaGFyZHdhcmUgYmxvY2suCj4+Pgo+ Pj4gVGhlIG9wcyBhcmUgZ2xvYmFsIGZvciBhIFNvQyBiZWNhdXNlIGlvbW11IGRvbWFpbnMgYXJl IG5vdAo+Pj4gYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBkZXZpY2VzIGlmIHRoZXkgYXJlIGZvciBh IHZpcnR1ZWwgZGV2aWNlIGxpa2UKPj4+IGRybS4gVXNlIGEgZ2xvYmFsIHZhcmlhYmxlIHNob3Vs ZG4ndCBiZSBzaW5jZSBTb0MgdXN1YWxseSBkb2Vzbid0Cj4+PiBlbWJlZGRlZCBkaWZmZXJlbnQg dmVyc2lvbnMgb2YgdGhlIGlvbW11IGhhcmR3YXJlIGJsb2NrLgo+Pj4gSWYgdGhhdCBoYXBwZW4g b25lIGRheSBhIFdBUk5fT04gd2lsbCBiZSBkaXNwbGF5ZWQgYXQgcHJvYmUgdGltZS4KPj4KPj4g SU1PIGl0IHdvdWxkIGJlIGEgZ3JpZXZvdXMgZXJyb3IgaWYgc3VjaCBhICJ2aXJ0dWFsIGRldmlj ZSIgZXZlciBnZXRzIAo+PiBuZWFyIHRoZSBJT01NVSBBUEksIHNvIHBlcnNvbmFsbHkgSSB3b3Vs ZG4ndCB1c2UgdGhhdCBhcyBhIAo+PiBqdXN0aWZpY2F0aW9uIGZvciBhbnl0aGluZyA6KQo+Pgo+ PiBGV0lXIHlvdSBzaG91bGQgYmUgT0sgdG8gaGFuZGxlIHRoaW5ncyBvbiBhIHBlci1pbnN0YW5j ZSBiYXNpcywgaXQgCj4+IGp1c3QgbWVhbnMgeW91IGhhdmUgdG8gZGVmZXIgc29tZSBvZiB0aGUg ZG9tYWluIHNldHVwIHRvIC5hdHRhY2hfZGV2IAo+PiB0aW1lLCBsaWtlIHZhcmlvdXMgb3RoZXIg ZHJpdmVycyBkby4gVGhhdCBzYWlkLCB0aGVyZSdzIG5vdGhpbmcgd3JvbmcgCj4+IHdpdGggdGhl IGdsb2JhbCBpZiB3ZSBkbyBleHBlY3QgaW5zdGFuY2VzIHRvIGJlIGNvbnNpc3RlbnQgYWNyb3Nz IGFueSAKPj4gZ2l2ZW4gUm9ja2NoaXAgU29DIChhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3 ZSBwcm9iYWJseSBzaG91bGQpLgo+IAo+IEkgaGF2ZSB0cmllZCB0aGF0IHNvbHV0aW9uIGZpcnN0 IGJ1dCBkcm0gZGV2aWNlIGFwcGVhciB0byBidXQgc3VjaCAKPiAidmlydHVhbCBkZXZpY2UiIHNv IEkgaGFkIHRvIHVzZSB0aGUgZ2xvYmFsLgoKSG1tLCB0aGUgInJvY2tjaGlwLGRpc3BsYXktc3Vi c3lzdGVtIiBub2RlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gCklPTU1VLCBhbmQgc2hvdWxk bid0IGV2ZW4gYmUgcGFzc2VkIHRvIHRoZSBETUEgQVBJIGVpdGhlciwgYmVjYXVzZSBpdCdzIApu b3QgYSByZWFsIHBpZWNlIG9mIERNQSBjYXBhYmxlIGhhcmR3YXJlLiBXaGF0ZXZlciB0aGUgRFJN IHN0YWNrIGlzIApkb2luZyBhYm92ZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlIGFjdHVhbCBWT1Ag ZGV2aWNlcyB0aGF0IHdlIHNlZSBkb3duIApoZXJlLiBJZiBub3QsIHRoYXQncyBpbmRpY2F0aXZl IG9mIHNvbWV0aGluZyBiZWluZyB3cm9uZyBlbHNld2hlcmUuIExpa2UgCkkgc2F5IHRob3VnaCwg SSB0aGluayBpdCdzIGZpbmUgdG8gdXNlIGdsb2JhbCBvcHMgc2ltcGx5IG9uIHRoZSAKZXhwZWN0 YXRpb24gdGhhdCB0aGF0J3MgaG93IHRoZSBuZXcgU09DcyBhcmUgZ29pbmcgdG8gYmUuCgpJbiBm YWN0IHRoaXMgcmVtaW5kcyBtZSwgSSB0aGluayBJIHN0YXJ0ZWQgd3JpdGluZyBhIHBhdGNoIHNv bWV3aGVyZSB0byAKY2xlYW4gdXAgdGhlIHZpcnR1YWwgZGV2aWNlIG1lc3MgZm9yIHJvY2tjaGlw LWRybSAoSUlSQyBJIGNvdWxkIHNlZSBubyAKcmVhc29uIHdoeSB3ZSBjYW4ndCBqdXN0IGFsbG9j YXRlIHRoZSBEUk0gZGV2aWNlIGZyb20gdGhlIFZPUCBkcml2ZXIsIApzaW1pbGFyIHRvIHdoYXQg ZXh5bm9zLWRybSBkb2VzKS4gTWF5YmUgSSBzaG91bGQgZGlnIHRoYXQgdXAgYWdhaW4uLi4KCj4g SSBzZW5kIGEgdjYgdG8gZml4IHlvdXIgb3RoZXJzIHJlbWFya3MuCgpJIGd1ZXNzIEknbGwgd2Fp dCBmb3Igdjcgbm93IHRoZW4sIHNpbmNlIEkgZ290IHNpZGV0cmFja2VkIGJlZm9yZSAKc2VuZGlu ZyBteSByZXZpZXcgb2YgcGF0Y2ggIzQgKGhlY2ssIEkndmUganVzdCBzcGVudCB0aGUgbGFzdCBo YWxmIGhvdXIgCmRvaW5nIHNvbWV0aGluZyBlbHNlIGluIHRoZSBtaWRkbGUgb2Ygd3JpdGluZyB0 aGlzISkgOykKCkNoZWVycywKUm9iaW4uCgo+IAo+IFRoYW5rcyBmb3IgeW91ciBhZHZpY2UuCj4g Cj4gQmVuamFtaW4KPiAKPj4KPj4+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxi ZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+Pj4gLS0tCj4+PiB2ZXJzaW9uIDU6Cj4+ PiDCoCAtIFVzZSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoKQo+Pj4gwqAgLSBBZGQgaW50ZXJu YWwgb3BzIGluc2lkZSB0aGUgZHJpdmVyCj4+Pgo+Pj4gwqAgZHJpdmVycy9pb21tdS9yb2NrY2hp cC1pb21tdS5jIHwgNjkgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+Pj4gwqAg MSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQo+Pj4KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMgCj4+PiBiL2RyaXZl cnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwo+Pj4gaW5kZXggN2EyOTMyNzcyZmRmLi5lN2I5YmNm MTc0YjEgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMKPj4+ ICsrKyBiL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwo+Pj4gQEAgLTE5LDYgKzE5LDcg QEAKPj4+IMKgICNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPj4+IMKgICNpbmNsdWRlIDxsaW51 eC9saXN0Lmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvbW0uaD4KPj4+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4+Cj4+IFRoaXMgc2VlbXMgdG8gYmUgYW4gdW5yZWxhdGVkIGFuZCB1bm5l Y2Vzc2FyeSBjaGFuZ2UuCj4+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4gwqAg I2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4K Pj4+IEBAIC05Niw2ICs5NywxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJrX2lvbW11 X2Nsb2Nrc1tdID0gewo+Pj4gwqDCoMKgwqDCoCAiYWNsayIsICJpZmFjZSIsCj4+PiDCoCB9Owo+ Pj4gwqAgK3N0cnVjdCBya19pb21tdV9vcHMgewo+Pj4gK8KgwqDCoCBwaHlzX2FkZHJfdCAoKnB0 X2FkZHJlc3MpKHUzMiBkdGUpOwo+Pj4gK8KgwqDCoCB1MzIgKCpta19kdGVudHJpZXMpKGRtYV9h ZGRyX3QgcHRfZG1hKTsKPj4+ICvCoMKgwqAgdTMyICgqbWtfcHRlbnRyaWVzKShwaHlzX2FkZHJf dCBwYWdlLCBpbnQgcHJvdCk7Cj4+PiArwqDCoMKgIHBoeXNfYWRkcl90ICgqZHRlX2FkZHJfcGh5 cykocGh5c19hZGRyX3QgYWRkcik7Cj4+PiArwqDCoMKgIHUzMiBwdF9hZGRyZXNzX21hc2s7Cj4+ PiArfTsKPj4+ICsKPj4+IMKgIHN0cnVjdCBya19pb21tdSB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVj dCBkZXZpY2UgKmRldjsKPj4+IMKgwqDCoMKgwqAgdm9pZCBfX2lvbWVtICoqYmFzZXM7Cj4+PiBA QCAtMTE2LDYgKzEyNSw3IEBAIHN0cnVjdCBya19pb21tdWRhdGEgewo+Pj4gwqAgfTsKPj4+IMKg IMKgIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2Owo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmtfaW9tbXVfb3BzICpya19vcHM7Cj4+PiDCoCDCoCBzdGF0aWMgaW5saW5lIHZvaWQgcmtf dGFibGVfZmx1c2goc3RydWN0IHJrX2lvbW11X2RvbWFpbiAqZG9tLCAKPj4+IGRtYV9hZGRyX3Qg ZG1hLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQg aW50IGNvdW50KQo+Pj4gQEAgLTIxNSwxMSArMjI1LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcmtf bWtfZHRlKGRtYV9hZGRyX3QgcHRfZG1hKQo+Pj4gwqAgI2RlZmluZSBSS19QVEVfUEFHRV9SRUFE QUJMRcKgwqDCoMKgwqAgQklUKDEpCj4+PiDCoCAjZGVmaW5lIFJLX1BURV9QQUdFX1ZBTElEwqDC oMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4+IMKgIC1zdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJr X3B0ZV9wYWdlX2FkZHJlc3ModTMyIHB0ZSkKPj4+IC17Cj4+PiAtwqDCoMKgIHJldHVybiAocGh5 c19hZGRyX3QpcHRlICYgUktfUFRFX1BBR0VfQUREUkVTU19NQVNLOwo+Pj4gLX0KPj4+IC0KPj4+ IMKgIHN0YXRpYyBpbmxpbmUgYm9vbCBya19wdGVfaXNfcGFnZV92YWxpZCh1MzIgcHRlKQo+Pj4g wqAgewo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gcHRlICYgUktfUFRFX1BBR0VfVkFMSUQ7Cj4+PiBA QCAtNDUxLDcgKzQ1Niw3IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfZm9yY2VfcmVzZXQoc3RydWN0 IHJrX2lvbW11IAo+Pj4gKmlvbW11KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJrX2lvbW11X3dy aXRlKGlvbW11LT5iYXNlc1tpXSwgUktfTU1VX0RURV9BRERSLCAKPj4+IERURV9BRERSX0RVTU1Z KTsKPj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBkdGVfYWRkciA9IHJrX2lvbW11X3JlYWQoaW9t bXUtPmJhc2VzW2ldLCBSS19NTVVfRFRFX0FERFIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChk dGVfYWRkciAhPSAoRFRFX0FERFJfRFVNTVkgJiBSS19EVEVfUFRfQUREUkVTU19NQVNLKSkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkdGVfYWRkciAhPSAoRFRFX0FERFJfRFVNTVkgJiBya19v cHMtPnB0X2FkZHJlc3NfbWFzaykpIHsKPj4KPj4gTml0OiBtaWdodCBpdCBtYWtlIG1vcmUgc2Vu c2UgdG8gZG8gc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgIGR0ZV9hZGRyID0g cmtfb3BzLT5wdF9hZGRyZXNzKC4uLiBEVEVfQUREUl9EVU1NWSk7Cj4+IMKgwqDCoMKgwqDCoMKg IHJrX2lvbW11X3dyaXRlKC4uLiBkdGVfYWRkcikKPj4gwqDCoMKgwqDCoMKgwqAgaWYgKHJrX2lv bW11X3JlYWQoLi4uKSAhPSBkdGVfYWRkcikKPj4KPj4gc28gdGhhdCB5b3UgZG9uJ3QgbmVlZCB0 byBib3RoZXIgZGVmaW5pbmcgLT5wdF9hZGRyZXNzX21hc2sgZm9yIGp1c3QgCj4+IHRoaXMgb25l IHNhbml0eS1jaGVjaz8KPj4KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIo aW9tbXUtPmRldiwgIkVycm9yIGR1cmluZyByYXcgcmVzZXQuIAo+Pj4gTU1VX0RURV9BRERSIGlz IG5vdCBmdW5jdGlvbmluZ1xuIik7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVGQVVMVDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiBAQCAtNDcwLDYgKzQ3NSwx MSBAQCBzdGF0aWMgaW50IHJrX2lvbW11X2ZvcmNlX3Jlc2V0KHN0cnVjdCBya19pb21tdSAKPj4+ ICppb21tdSkKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoCB9Cj4+PiDCoCArc3RhdGlj IGlubGluZSBwaHlzX2FkZHJfdCBya19kdGVfYWRkcl9waHlzKHBoeXNfYWRkcl90IGFkZHIpCj4+ Cj4+IFRoZSBhcmd1bWVudCB0eXBlIGhlcmUgc2hvdWxkIGJlIHUzMiwgc2luY2UgaXQncyBhIERU RSwgbm90IGEgcGh5c2ljYWwgCj4+IGFkZHJlc3MuLi4KPj4KPj4+ICt7Cj4+PiArwqDCoMKgIHJl dHVybiBhZGRyOwo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lkIGxvZ19pb3ZhKHN0cnVj dCBya19pb21tdSAqaW9tbXUsIGludCBpbmRleCwgZG1hX2FkZHJfdCAKPj4+IGlvdmEpCj4+PiDC oCB7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgX19pb21lbSAqYmFzZSA9IGlvbW11LT5iYXNlc1tpbmRl eF07Cj4+PiBAQCAtNDg5LDcgKzQ5OSw3IEBAIHN0YXRpYyB2b2lkIGxvZ19pb3ZhKHN0cnVjdCBy a19pb21tdSAqaW9tbXUsIGludCAKPj4+IGluZGV4LCBkbWFfYWRkcl90IGlvdmEpCj4+PiDCoMKg wqDCoMKgIHBhZ2Vfb2Zmc2V0ID0gcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+IMKgIMKg wqDCoMKgwqAgbW11X2R0ZV9hZGRyID0gcmtfaW9tbXVfcmVhZChiYXNlLCBSS19NTVVfRFRFX0FE RFIpOwo+Pj4gLcKgwqDCoCBtbXVfZHRlX2FkZHJfcGh5cyA9IChwaHlzX2FkZHJfdCltbXVfZHRl X2FkZHI7Cj4+PiArwqDCoMKgIG1tdV9kdGVfYWRkcl9waHlzID0gCj4+PiBya19vcHMtPmR0ZV9h ZGRyX3BoeXMoKHBoeXNfYWRkcl90KW1tdV9kdGVfYWRkcik7Cj4+Cj4+IC4uLmFuZCB0aGUgY2Fz dCBoZXJlIHNob3VsZCBub3QgYmUgaGVyZSwgc2luY2UgaXQgKmlzKiB0aGUgY29udmVyc2lvbiAK Pj4gdGhhdCB0aGUgY2FsbGVkIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHBlcmZvcm1pbmcu Cj4+Cj4+PiDCoMKgwqDCoMKgIGR0ZV9hZGRyX3BoeXMgPSBtbXVfZHRlX2FkZHJfcGh5cyArICg0 ICogZHRlX2luZGV4KTsKPj4+IMKgwqDCoMKgwqAgZHRlX2FkZHIgPSBwaHlzX3RvX3ZpcnQoZHRl X2FkZHJfcGh5cyk7Cj4+PiBAQCAtNDk4LDE0ICs1MDgsMTQgQEAgc3RhdGljIHZvaWQgbG9nX2lv dmEoc3RydWN0IHJrX2lvbW11ICppb21tdSwgCj4+PiBpbnQgaW5kZXgsIGRtYV9hZGRyX3QgaW92 YSkKPj4+IMKgwqDCoMKgwqAgaWYgKCFya19kdGVfaXNfcHRfdmFsaWQoZHRlKSkKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIHByaW50X2l0Owo+Pj4gwqAgLcKgwqDCoCBwdGVfYWRkcl9waHlz ID0gcmtfZHRlX3B0X2FkZHJlc3MoZHRlKSArIChwdGVfaW5kZXggKiA0KTsKPj4+ICvCoMKgwqAg cHRlX2FkZHJfcGh5cyA9IHJrX29wcy0+cHRfYWRkcmVzcyhkdGUpICsgKHB0ZV9pbmRleCAqIDQp Owo+Pj4gwqDCoMKgwqDCoCBwdGVfYWRkciA9IHBoeXNfdG9fdmlydChwdGVfYWRkcl9waHlzKTsK Pj4+IMKgwqDCoMKgwqAgcHRlID0gKnB0ZV9hZGRyOwo+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoIXJr X3B0ZV9pc19wYWdlX3ZhbGlkKHB0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBwcmlu dF9pdDsKPj4+IMKgIC3CoMKgwqAgcGFnZV9hZGRyX3BoeXMgPSBya19wdGVfcGFnZV9hZGRyZXNz KHB0ZSkgKyBwYWdlX29mZnNldDsKPj4+ICvCoMKgwqAgcGFnZV9hZGRyX3BoeXMgPSBya19vcHMt PnB0X2FkZHJlc3MocHRlKSArIHBhZ2Vfb2Zmc2V0Owo+Pj4gwqDCoMKgwqDCoCBwYWdlX2ZsYWdz ID0gcHRlICYgUktfUFRFX1BBR0VfRkxBR1NfTUFTSzsKPj4+IMKgIMKgIHByaW50X2l0Ogo+Pj4g QEAgLTYwMSwxMyArNjExLDEzIEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBya19pb21tdV9pb3ZhX3Rv X3BoeXMoc3RydWN0IAo+Pj4gaW9tbXVfZG9tYWluICpkb21haW4sCj4+PiDCoMKgwqDCoMKgIGlm ICghcmtfZHRlX2lzX3B0X3ZhbGlkKGR0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXQ7Cj4+PiDCoCAtwqDCoMKgIHB0X3BoeXMgPSBya19kdGVfcHRfYWRkcmVzcyhkdGUpOwo+Pj4g K8KgwqDCoCBwdF9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKGR0ZSk7Cj4+PiDCoMKgwqDCoMKg IHBhZ2VfdGFibGUgPSAodTMyICopcGh5c190b192aXJ0KHB0X3BoeXMpOwo+Pj4gwqDCoMKgwqDC oCBwdGUgPSBwYWdlX3RhYmxlW3JrX2lvdmFfcHRlX2luZGV4KGlvdmEpXTsKPj4+IMKgwqDCoMKg wqAgaWYgKCFya19wdGVfaXNfcGFnZV92YWxpZChwdGUpKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gb3V0Owo+Pj4gwqAgLcKgwqDCoCBwaHlzID0gcmtfcHRlX3BhZ2VfYWRkcmVzcyhwdGUp ICsgcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+ICvCoMKgwqAgcGh5cyA9IHJrX29wcy0+ cHRfYWRkcmVzcyhwdGUpICsgcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+IMKgIG91dDoK Pj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmtfZG9tYWluLT5kdF9sb2Nr LCBmbGFncyk7Cj4+PiDCoCBAQCAtNjc5LDE0ICs2ODksMTQgQEAgc3RhdGljIHUzMiAqcmtfZHRl X2dldF9wYWdlX3RhYmxlKHN0cnVjdCAKPj4+IHJrX2lvbW11X2RvbWFpbiAqcmtfZG9tYWluLAo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+Pj4gwqDCoMKg wqDCoCB9Cj4+PiDCoCAtwqDCoMKgIGR0ZSA9IHJrX21rX2R0ZShwdF9kbWEpOwo+Pj4gK8KgwqDC oCBkdGUgPSBya19vcHMtPm1rX2R0ZW50cmllcyhwdF9kbWEpOwo+Pj4gwqDCoMKgwqDCoCAqZHRl X2FkZHIgPSBkdGU7Cj4+PiDCoCDCoMKgwqDCoMKgIHJrX3RhYmxlX2ZsdXNoKHJrX2RvbWFpbiwg cHRfZG1hLCBOVU1fUFRfRU5UUklFUyk7Cj4+PiDCoMKgwqDCoMKgIHJrX3RhYmxlX2ZsdXNoKHJr X2RvbWFpbiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJrX2RvbWFpbi0+ ZHRfZG1hICsgZHRlX2luZGV4ICogc2l6ZW9mKHUzMiksIDEpOwo+Pj4gwqAgZG9uZToKPj4+IC3C oMKgwqAgcHRfcGh5cyA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZSk7Cj4+PiArwqDCoMKgIHB0X3Bo eXMgPSBya19vcHMtPnB0X2FkZHJlc3MoZHRlKTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuICh1MzIg KilwaHlzX3RvX3ZpcnQocHRfcGh5cyk7Cj4+PiDCoCB9Cj4+PiDCoCBAQCAtNzI4LDcgKzczOCw3 IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfbWFwX2lvdmEoc3RydWN0IAo+Pj4gcmtfaW9tbXVfZG9t YWluICpya19kb21haW4sIHUzMiAqcHRlX2FkZHIsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHJrX3B0ZV9pc19wYWdlX3ZhbGlkKHB0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIHVud2luZDsKPj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBwdGVfYWRkcltwdGVfY291bnRd ID0gcmtfbWtfcHRlKHBhZGRyLCBwcm90KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBwdGVfYWRkcltw dGVfY291bnRdID0gcmtfb3BzLT5ta19wdGVudHJpZXMocGFkZHIsIHByb3QpOwo+Pj4gwqAgwqDC oMKgwqDCoMKgwqDCoMKgIHBhZGRyICs9IFNQQUdFX1NJWkU7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ IEBAIC03NTAsNyArNzYwLDcgQEAgc3RhdGljIGludCBya19pb21tdV9tYXBfaW92YShzdHJ1Y3Qg Cj4+PiBya19pb21tdV9kb21haW4gKnJrX2RvbWFpbiwgdTMyICpwdGVfYWRkciwKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRlX2NvdW50ICogU1BBR0VfU0laRSk7Cj4+ PiDCoCDCoMKgwqDCoMKgIGlvdmEgKz0gcHRlX2NvdW50ICogU1BBR0VfU0laRTsKPj4+IC3CoMKg wqAgcGFnZV9waHlzID0gcmtfcHRlX3BhZ2VfYWRkcmVzcyhwdGVfYWRkcltwdGVfY291bnRdKTsK Pj4+ICvCoMKgwqAgcGFnZV9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKHB0ZV9hZGRyW3B0ZV9j b3VudF0pOwo+Pj4gwqDCoMKgwqDCoCBwcl9lcnIoImlvdmE6ICVwYWQgYWxyZWFkeSBtYXBwZWQg dG8gJXBhIGNhbm5vdCByZW1hcCB0byBwaHlzOiAKPj4+ICVwYSBwcm90OiAlI3hcbiIsCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmlvdmEsICZwYWdlX3BoeXMsICZwYWRkciwgcHJvdCk7 Cj4+PiDCoCBAQCAtNzg1LDcgKzc5NSw4IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfbWFwKHN0cnVj dCBpb21tdV9kb21haW4gCj4+PiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIF9pb3ZhLAo+Pj4gwqDC oMKgwqDCoCBkdGVfaW5kZXggPSBya19kb21haW4tPmR0W3JrX2lvdmFfZHRlX2luZGV4KGlvdmEp XTsKPj4+IMKgwqDCoMKgwqAgcHRlX2luZGV4ID0gcmtfaW92YV9wdGVfaW5kZXgoaW92YSk7Cj4+ PiDCoMKgwqDCoMKgIHB0ZV9hZGRyID0gJnBhZ2VfdGFibGVbcHRlX2luZGV4XTsKPj4+IC3CoMKg wqAgcHRlX2RtYSA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZV9pbmRleCkgKyBwdGVfaW5kZXggKiBz aXplb2YodTMyKTsKPj4+ICsKPj4+ICvCoMKgwqAgcHRlX2RtYSA9IHJrX29wcy0+cHRfYWRkcmVz cyhkdGVfaW5kZXgpICsgcHRlX2luZGV4ICogc2l6ZW9mKHUzMik7Cj4+PiDCoMKgwqDCoMKgIHJl dCA9IHJrX2lvbW11X21hcF9pb3ZhKHJrX2RvbWFpbiwgcHRlX2FkZHIsIHB0ZV9kbWEsIGlvdmEs Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZGRyLCBzaXplLCBwcm90 KTsKPj4+IMKgIEBAIC04MjEsNyArODMyLDcgQEAgc3RhdGljIHNpemVfdCBya19pb21tdV91bm1h cChzdHJ1Y3QgCj4+PiBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBfaW92YSwK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAg LcKgwqDCoCBwdF9waHlzID0gcmtfZHRlX3B0X2FkZHJlc3MoZHRlKTsKPj4+ICvCoMKgwqAgcHRf cGh5cyA9IHJrX29wcy0+cHRfYWRkcmVzcyhkdGUpOwo+Pj4gwqDCoMKgwqDCoCBwdGVfYWRkciA9 ICh1MzIgKilwaHlzX3RvX3ZpcnQocHRfcGh5cykgKyBya19pb3ZhX3B0ZV9pbmRleChpb3ZhKTsK Pj4+IMKgwqDCoMKgwqAgcHRlX2RtYSA9IHB0X3BoeXMgKyBya19pb3ZhX3B0ZV9pbmRleChpb3Zh KSAqIHNpemVvZih1MzIpOwo+Pj4gwqDCoMKgwqDCoCB1bm1hcF9zaXplID0gcmtfaW9tbXVfdW5t YXBfaW92YShya19kb21haW4sIHB0ZV9hZGRyLCBwdGVfZG1hLCAKPj4+IHNpemUpOwo+Pj4gQEAg LTEwMzcsNyArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIHJrX2lvbW11X2RvbWFpbl9mcmVlKHN0cnVj dCAKPj4+IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+Pj4gwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgTlVNX0RUX0VOVFJJRVM7IGkrKykgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBkdGUg PSBya19kb21haW4tPmR0W2ldOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChya19kdGVfaXNf cHRfdmFsaWQoZHRlKSkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5c19hZGRyX3Qg cHRfcGh5cyA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaHlzX2FkZHJfdCBwdF9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKGR0ZSk7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKnBhZ2VfdGFibGUgPSBwaHlzX3RvX3ZpcnQo cHRfcGh5cyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfdW5tYXBfc2luZ2xl KGRtYV9kZXYsIHB0X3BoeXMsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBTUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKPj4+IEBAIC0xMTM4LDYgKzEx NDksMTUgQEAgc3RhdGljIGludCBya19pb21tdV9wcm9iZShzdHJ1Y3QgCj4+PiBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4+PiDCoMKgwqDCoMKgIGlvbW11LT5kZXYgPSBkZXY7Cj4+PiDCoMKgwqDC oMKgIGlvbW11LT5udW1fbW11ID0gMDsKPj4+IMKgICvCoMKgwqAgaWYgKCFya19vcHMpCj4+PiAr wqDCoMKgwqDCoMKgwqAgcmtfb3BzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4+ PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBUaGF0IHNob3VsZCBub3QgaGFwcGVu IHVubGVzcyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlCj4+PiArwqDCoMKgwqAgKiBoYXJkd2Fy ZSBibG9jayBhcmUgZW1iZWRkZWQgdGhlIHNhbWUgU29DCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvC oMKgwqAgV0FSTl9PTihya19vcHMgIT0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldikpOwo+ Pgo+PiBOaXQ6IGNhbGxpbmcgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCkgdHdpY2Ugc2VlbXMg cmF0aGVyIHVudGlkeSAtIAo+PiBob3cgYWJvdXQgc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IMKgwqDC oMKgb3BzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4+IMKgwqDCoMKgaWYgKCFy a19vcHMpCj4+IMKgwqDCoMKgwqDCoMKgIHJrX29wcyA9IG9wczsKPj4gwqDCoMKgwqBlbHNlIGlm IChXQVJOX09OKHJrX29wcyAhPSBvcHMpKQo+PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4KPj4gRWl0aGVyIHdheSBJIHRoaW5rIGl0IHdvdWxkIGJlIGdvb2QgdG8gdHJlYXQgdW5l eHBlY3RlZCBpbmNvbnNpc3RlbnRjeSAKPj4gYXMgYW4gYWN0dWFsIGVycm9yLCByYXRoZXIgdGhh biBzZWNvbmQtZ3Vlc3NpbmcgdGhlIERUIGFuZCBjYXJyeWluZyBvbiAKPj4gdW5kZXIgdGhlIGFz c3VtcHRpb24gdGhlIGRldmljZSBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBpdCBjbGFpbWVkIHRv IGJlLgo+Pgo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBpb21tdS0+YmFzZXMgPSBkZXZtX2tjYWxsb2Mo ZGV2LCBudW1fcmVzLCBzaXplb2YoKmlvbW11LT5iYXNlcyksCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+PiDCoMKgwqDCoMKgIGlm ICghaW9tbXUtPmJhc2VzKQo+Pj4gQEAgLTEyNzcsMTAgKzEyOTcsMjEgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIAo+Pj4gcmtfaW9tbXVfcG1fb3BzID0gewo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkKPj4+IMKg IH07Cj4+PiDCoCArc3RhdGljIHN0cnVjdCBya19pb21tdV9vcHMgaW9tbXVfZGF0YV9vcHNfdjEg PSB7Cj4+PiArwqDCoMKgIC5wdF9hZGRyZXNzID0gJnJrX2R0ZV9wdF9hZGRyZXNzLAo+Pj4gK8Kg wqDCoCAubWtfZHRlbnRyaWVzID0gJnJrX21rX2R0ZSwKPj4+ICvCoMKgwqAgLm1rX3B0ZW50cmll cyA9ICZya19ta19wdGUsCj4+PiArwqDCoMKgIC5kdGVfYWRkcl9waHlzID0gJnJrX2R0ZV9hZGRy X3BoeXMsCj4+PiArwqDCoMKgIC5wdF9hZGRyZXNzX21hc2sgPSBSS19EVEVfUFRfQUREUkVTU19N QVNLLAo+Pj4gK307Cj4+PiArCj4+PiDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBya19pb21tdV9kdF9pZHNbXSA9IHsKPj4+IC3CoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJyb2Nr Y2hpcCxpb21tdSIgfSwKPj4+ICvCoMKgwqAge8KgwqDCoCAuY29tcGF0aWJsZSA9ICJyb2NrY2hp cCxpb21tdSIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAmaW9tbXVfZGF0YV9vcHNfdjEs Cj4+PiArwqDCoMKgIH0sCj4+PiDCoMKgwqDCoMKgIHsgLyogc2VudGluZWwgKi8gfQo+Pj4gwqAg fTsKPj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBya19pb21tdV9kdF9pZHMpOwo+Pgo+PiBB cyBiZWZvcmUsIHVucmVsYXRlZCBhbmQgdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBkcml2ZXIgaXMg c3RpbGwgYm9vbCAKPj4gaW4gdGhlIEtjb25maWcuIElmIHlvdSBkbyB3YW50IHRvIHN1cHBvcnQg bW9kdWxhciBidWlsZHMgeW91J2xsIGFsc28gCj4+IG5lZWQgdG8gZW5zdXJlIHJrX2lvbW11X29w cy5vd25lciBpcyBzZXQsIGJ1dCBkbyBpdCBhbGwgYXMgYSBzZXBhcmF0ZSAKPj4gcGF0Y2ggcGxl YXNlLgo+Pgo+PiBUaGFua3MsCj4+IFJvYmluLgo+Pgo+Pj4gwqAgwqAgc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgcmtfaW9tbXVfZHJpdmVyID0gewo+Pj4gwqDCoMKgwqDCoCAucHJvYmUg PSBya19pb21tdV9wcm9iZSwKPj4+Cj4+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3Vu ZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0 aW5mby9pb21tdQ== 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=-15.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 EDF6CC47078 for ; Fri, 21 May 2021 14:46:40 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 4EFA361244 for ; Fri, 21 May 2021 14:46:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4EFA361244 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=desiato.20200630; 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=+TgtN03AfVzuBrWdOnk21G5w/jNsd6NAZWa6cKgxKGE=; b=alZgWaBkMvylvPOice9HjtxOUu UNLp0lfgnPcU6OmNuAJWQm+KzAJpeiOgns5bZowhkFgcn3vJZvFbPEHAKAMfju68hKDK4y9J8EjmR vVvjMAnCGvMXQj3+AAGTudElumlDUb7xnGjwmk/ttc5MxXA+/Z/jeiNPsWIqrPDZ2f8BXcbAcIdhx 0hY9LDXzmNAL5ucpwouOAgdFKJ3jFyTsJ1FDIwxynH5b08C1/lstbo1mVONpK8v+nkTKUiezci8LB RchptnFFAN7KrMA3ekjJpWswijC666ttd6ee84f5HoX2GGOUZ1EtydQYkG/TaIIsSF25uxZhnyE/p scno+8NA==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lk6Oh-005nz3-Dr; Fri, 21 May 2021 14:45:07 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lk6Ob-005nyH-9i; Fri, 21 May 2021 14:45:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:In-Reply-To:MIME-Version:Date:Message-ID:From:References:Cc:To: Subject:Sender:Reply-To:Content-ID:Content-Description; bh=V1hdSHqUjFYf8RX3TXs+Xw5rMWkoaGFWeyJuWu7oMTw=; b=IvE6elfmfnfoJghKOAyiZp/XFP DGJpSEliG/gYWWYw+jEosum/MwgrCp9fva2P6rmoX4SNGVnzOdpKzj6Jwrhq5kRFO584fZIQFLHjI VCQc4KaUmJ2qFYoitlc67ug/g63iv/uq5a/UmpqSjNPfrIspm0S4P4SacvyAQMOjc8Wd2GgNcoH1E ZP0hVNSU8/lRZGK9SJIBQtfFDrV/OlLHAtJAetOCaq4U9p56gtl0jJTYky3evBH5ZF3dSocReA6X8 NjpiCoEztzKRoPoeo4cpTPp9ffoTnWS4c9Mzl55Oxmvv2i5NoVOLnaoXH1tspaNwAitfuvPlC6UVt OL8M9IYA==; Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lk6OX-00HCXZ-Ph; Fri, 21 May 2021 14:45:00 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DE4C011B3; Fri, 21 May 2021 07:44:49 -0700 (PDT) Received: from [10.57.73.64] (unknown [10.57.73.64]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 15AB43F73B; Fri, 21 May 2021 07:44:47 -0700 (PDT) Subject: Re: [PATCH v5 3/4] iommu: rockchip: Add internal ops to handle variants To: Benjamin Gaignard , joro@8bytes.org, will@kernel.org, robh+dt@kernel.org, heiko@sntech.de, xxm@rock-chips.com Cc: iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com References: <20210521083637.3221304-1-benjamin.gaignard@collabora.com> <20210521083637.3221304-4-benjamin.gaignard@collabora.com> From: Robin Murphy Message-ID: Date: Fri, 21 May 2021 15:44:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210521_074457_960826_30060136 X-CRM114-Status: GOOD ( 43.37 ) 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 T24gMjAyMS0wNS0yMSAxNDozOCwgQmVuamFtaW4gR2FpZ25hcmQgd3JvdGU6Cj4gCj4gTGUgMjEv MDUvMjAyMSDDoCAxNDo1OCwgUm9iaW4gTXVycGh5IGEgw6ljcml0wqA6Cj4+IE9uIDIwMjEtMDUt MjEgMDk6MzYsIEJlbmphbWluIEdhaWduYXJkIHdyb3RlOgo+Pj4gQWRkIGludGVybmFsIG9wcyB0 byBiZSBhYmxlIHRvIGhhbmRsZSBpbmNvbWluZyB2YXJpYW50IHYyLgo+Pj4gVGhlIGdvYWwgaXMg dG8ga2VlcCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIGZyYW1ld29yayBidXQKPj4+IHRv IGFsbG93IHRvIGFkZCB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgaGFyZHdhcmUgYmxvY2suCj4+Pgo+ Pj4gVGhlIG9wcyBhcmUgZ2xvYmFsIGZvciBhIFNvQyBiZWNhdXNlIGlvbW11IGRvbWFpbnMgYXJl IG5vdAo+Pj4gYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBkZXZpY2VzIGlmIHRoZXkgYXJlIGZvciBh IHZpcnR1ZWwgZGV2aWNlIGxpa2UKPj4+IGRybS4gVXNlIGEgZ2xvYmFsIHZhcmlhYmxlIHNob3Vs ZG4ndCBiZSBzaW5jZSBTb0MgdXN1YWxseSBkb2Vzbid0Cj4+PiBlbWJlZGRlZCBkaWZmZXJlbnQg dmVyc2lvbnMgb2YgdGhlIGlvbW11IGhhcmR3YXJlIGJsb2NrLgo+Pj4gSWYgdGhhdCBoYXBwZW4g b25lIGRheSBhIFdBUk5fT04gd2lsbCBiZSBkaXNwbGF5ZWQgYXQgcHJvYmUgdGltZS4KPj4KPj4g SU1PIGl0IHdvdWxkIGJlIGEgZ3JpZXZvdXMgZXJyb3IgaWYgc3VjaCBhICJ2aXJ0dWFsIGRldmlj ZSIgZXZlciBnZXRzIAo+PiBuZWFyIHRoZSBJT01NVSBBUEksIHNvIHBlcnNvbmFsbHkgSSB3b3Vs ZG4ndCB1c2UgdGhhdCBhcyBhIAo+PiBqdXN0aWZpY2F0aW9uIGZvciBhbnl0aGluZyA6KQo+Pgo+ PiBGV0lXIHlvdSBzaG91bGQgYmUgT0sgdG8gaGFuZGxlIHRoaW5ncyBvbiBhIHBlci1pbnN0YW5j ZSBiYXNpcywgaXQgCj4+IGp1c3QgbWVhbnMgeW91IGhhdmUgdG8gZGVmZXIgc29tZSBvZiB0aGUg ZG9tYWluIHNldHVwIHRvIC5hdHRhY2hfZGV2IAo+PiB0aW1lLCBsaWtlIHZhcmlvdXMgb3RoZXIg ZHJpdmVycyBkby4gVGhhdCBzYWlkLCB0aGVyZSdzIG5vdGhpbmcgd3JvbmcgCj4+IHdpdGggdGhl IGdsb2JhbCBpZiB3ZSBkbyBleHBlY3QgaW5zdGFuY2VzIHRvIGJlIGNvbnNpc3RlbnQgYWNyb3Nz IGFueSAKPj4gZ2l2ZW4gUm9ja2NoaXAgU29DIChhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3 ZSBwcm9iYWJseSBzaG91bGQpLgo+IAo+IEkgaGF2ZSB0cmllZCB0aGF0IHNvbHV0aW9uIGZpcnN0 IGJ1dCBkcm0gZGV2aWNlIGFwcGVhciB0byBidXQgc3VjaCAKPiAidmlydHVhbCBkZXZpY2UiIHNv IEkgaGFkIHRvIHVzZSB0aGUgZ2xvYmFsLgoKSG1tLCB0aGUgInJvY2tjaGlwLGRpc3BsYXktc3Vi c3lzdGVtIiBub2RlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gCklPTU1VLCBhbmQgc2hvdWxk bid0IGV2ZW4gYmUgcGFzc2VkIHRvIHRoZSBETUEgQVBJIGVpdGhlciwgYmVjYXVzZSBpdCdzIApu b3QgYSByZWFsIHBpZWNlIG9mIERNQSBjYXBhYmxlIGhhcmR3YXJlLiBXaGF0ZXZlciB0aGUgRFJN IHN0YWNrIGlzIApkb2luZyBhYm92ZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlIGFjdHVhbCBWT1Ag ZGV2aWNlcyB0aGF0IHdlIHNlZSBkb3duIApoZXJlLiBJZiBub3QsIHRoYXQncyBpbmRpY2F0aXZl IG9mIHNvbWV0aGluZyBiZWluZyB3cm9uZyBlbHNld2hlcmUuIExpa2UgCkkgc2F5IHRob3VnaCwg SSB0aGluayBpdCdzIGZpbmUgdG8gdXNlIGdsb2JhbCBvcHMgc2ltcGx5IG9uIHRoZSAKZXhwZWN0 YXRpb24gdGhhdCB0aGF0J3MgaG93IHRoZSBuZXcgU09DcyBhcmUgZ29pbmcgdG8gYmUuCgpJbiBm YWN0IHRoaXMgcmVtaW5kcyBtZSwgSSB0aGluayBJIHN0YXJ0ZWQgd3JpdGluZyBhIHBhdGNoIHNv bWV3aGVyZSB0byAKY2xlYW4gdXAgdGhlIHZpcnR1YWwgZGV2aWNlIG1lc3MgZm9yIHJvY2tjaGlw LWRybSAoSUlSQyBJIGNvdWxkIHNlZSBubyAKcmVhc29uIHdoeSB3ZSBjYW4ndCBqdXN0IGFsbG9j YXRlIHRoZSBEUk0gZGV2aWNlIGZyb20gdGhlIFZPUCBkcml2ZXIsIApzaW1pbGFyIHRvIHdoYXQg ZXh5bm9zLWRybSBkb2VzKS4gTWF5YmUgSSBzaG91bGQgZGlnIHRoYXQgdXAgYWdhaW4uLi4KCj4g SSBzZW5kIGEgdjYgdG8gZml4IHlvdXIgb3RoZXJzIHJlbWFya3MuCgpJIGd1ZXNzIEknbGwgd2Fp dCBmb3Igdjcgbm93IHRoZW4sIHNpbmNlIEkgZ290IHNpZGV0cmFja2VkIGJlZm9yZSAKc2VuZGlu ZyBteSByZXZpZXcgb2YgcGF0Y2ggIzQgKGhlY2ssIEkndmUganVzdCBzcGVudCB0aGUgbGFzdCBo YWxmIGhvdXIgCmRvaW5nIHNvbWV0aGluZyBlbHNlIGluIHRoZSBtaWRkbGUgb2Ygd3JpdGluZyB0 aGlzISkgOykKCkNoZWVycywKUm9iaW4uCgo+IAo+IFRoYW5rcyBmb3IgeW91ciBhZHZpY2UuCj4g Cj4gQmVuamFtaW4KPiAKPj4KPj4+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxi ZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+Pj4gLS0tCj4+PiB2ZXJzaW9uIDU6Cj4+ PiDCoCAtIFVzZSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoKQo+Pj4gwqAgLSBBZGQgaW50ZXJu YWwgb3BzIGluc2lkZSB0aGUgZHJpdmVyCj4+Pgo+Pj4gwqAgZHJpdmVycy9pb21tdS9yb2NrY2hp cC1pb21tdS5jIHwgNjkgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+Pj4gwqAg MSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQo+Pj4KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMgCj4+PiBiL2RyaXZl cnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwo+Pj4gaW5kZXggN2EyOTMyNzcyZmRmLi5lN2I5YmNm MTc0YjEgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMKPj4+ ICsrKyBiL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwo+Pj4gQEAgLTE5LDYgKzE5LDcg QEAKPj4+IMKgICNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPj4+IMKgICNpbmNsdWRlIDxsaW51 eC9saXN0Lmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvbW0uaD4KPj4+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4+Cj4+IFRoaXMgc2VlbXMgdG8gYmUgYW4gdW5yZWxhdGVkIGFuZCB1bm5l Y2Vzc2FyeSBjaGFuZ2UuCj4+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4gwqAg I2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4K Pj4+IEBAIC05Niw2ICs5NywxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJrX2lvbW11 X2Nsb2Nrc1tdID0gewo+Pj4gwqDCoMKgwqDCoCAiYWNsayIsICJpZmFjZSIsCj4+PiDCoCB9Owo+ Pj4gwqAgK3N0cnVjdCBya19pb21tdV9vcHMgewo+Pj4gK8KgwqDCoCBwaHlzX2FkZHJfdCAoKnB0 X2FkZHJlc3MpKHUzMiBkdGUpOwo+Pj4gK8KgwqDCoCB1MzIgKCpta19kdGVudHJpZXMpKGRtYV9h ZGRyX3QgcHRfZG1hKTsKPj4+ICvCoMKgwqAgdTMyICgqbWtfcHRlbnRyaWVzKShwaHlzX2FkZHJf dCBwYWdlLCBpbnQgcHJvdCk7Cj4+PiArwqDCoMKgIHBoeXNfYWRkcl90ICgqZHRlX2FkZHJfcGh5 cykocGh5c19hZGRyX3QgYWRkcik7Cj4+PiArwqDCoMKgIHUzMiBwdF9hZGRyZXNzX21hc2s7Cj4+ PiArfTsKPj4+ICsKPj4+IMKgIHN0cnVjdCBya19pb21tdSB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVj dCBkZXZpY2UgKmRldjsKPj4+IMKgwqDCoMKgwqAgdm9pZCBfX2lvbWVtICoqYmFzZXM7Cj4+PiBA QCAtMTE2LDYgKzEyNSw3IEBAIHN0cnVjdCBya19pb21tdWRhdGEgewo+Pj4gwqAgfTsKPj4+IMKg IMKgIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2Owo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmtfaW9tbXVfb3BzICpya19vcHM7Cj4+PiDCoCDCoCBzdGF0aWMgaW5saW5lIHZvaWQgcmtf dGFibGVfZmx1c2goc3RydWN0IHJrX2lvbW11X2RvbWFpbiAqZG9tLCAKPj4+IGRtYV9hZGRyX3Qg ZG1hLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQg aW50IGNvdW50KQo+Pj4gQEAgLTIxNSwxMSArMjI1LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcmtf bWtfZHRlKGRtYV9hZGRyX3QgcHRfZG1hKQo+Pj4gwqAgI2RlZmluZSBSS19QVEVfUEFHRV9SRUFE QUJMRcKgwqDCoMKgwqAgQklUKDEpCj4+PiDCoCAjZGVmaW5lIFJLX1BURV9QQUdFX1ZBTElEwqDC oMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4+IMKgIC1zdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJr X3B0ZV9wYWdlX2FkZHJlc3ModTMyIHB0ZSkKPj4+IC17Cj4+PiAtwqDCoMKgIHJldHVybiAocGh5 c19hZGRyX3QpcHRlICYgUktfUFRFX1BBR0VfQUREUkVTU19NQVNLOwo+Pj4gLX0KPj4+IC0KPj4+ IMKgIHN0YXRpYyBpbmxpbmUgYm9vbCBya19wdGVfaXNfcGFnZV92YWxpZCh1MzIgcHRlKQo+Pj4g wqAgewo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gcHRlICYgUktfUFRFX1BBR0VfVkFMSUQ7Cj4+PiBA QCAtNDUxLDcgKzQ1Niw3IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfZm9yY2VfcmVzZXQoc3RydWN0 IHJrX2lvbW11IAo+Pj4gKmlvbW11KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJrX2lvbW11X3dy aXRlKGlvbW11LT5iYXNlc1tpXSwgUktfTU1VX0RURV9BRERSLCAKPj4+IERURV9BRERSX0RVTU1Z KTsKPj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBkdGVfYWRkciA9IHJrX2lvbW11X3JlYWQoaW9t bXUtPmJhc2VzW2ldLCBSS19NTVVfRFRFX0FERFIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChk dGVfYWRkciAhPSAoRFRFX0FERFJfRFVNTVkgJiBSS19EVEVfUFRfQUREUkVTU19NQVNLKSkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkdGVfYWRkciAhPSAoRFRFX0FERFJfRFVNTVkgJiBya19v cHMtPnB0X2FkZHJlc3NfbWFzaykpIHsKPj4KPj4gTml0OiBtaWdodCBpdCBtYWtlIG1vcmUgc2Vu c2UgdG8gZG8gc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgIGR0ZV9hZGRyID0g cmtfb3BzLT5wdF9hZGRyZXNzKC4uLiBEVEVfQUREUl9EVU1NWSk7Cj4+IMKgwqDCoMKgwqDCoMKg IHJrX2lvbW11X3dyaXRlKC4uLiBkdGVfYWRkcikKPj4gwqDCoMKgwqDCoMKgwqAgaWYgKHJrX2lv bW11X3JlYWQoLi4uKSAhPSBkdGVfYWRkcikKPj4KPj4gc28gdGhhdCB5b3UgZG9uJ3QgbmVlZCB0 byBib3RoZXIgZGVmaW5pbmcgLT5wdF9hZGRyZXNzX21hc2sgZm9yIGp1c3QgCj4+IHRoaXMgb25l IHNhbml0eS1jaGVjaz8KPj4KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIo aW9tbXUtPmRldiwgIkVycm9yIGR1cmluZyByYXcgcmVzZXQuIAo+Pj4gTU1VX0RURV9BRERSIGlz IG5vdCBmdW5jdGlvbmluZ1xuIik7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVGQVVMVDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiBAQCAtNDcwLDYgKzQ3NSwx MSBAQCBzdGF0aWMgaW50IHJrX2lvbW11X2ZvcmNlX3Jlc2V0KHN0cnVjdCBya19pb21tdSAKPj4+ ICppb21tdSkKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoCB9Cj4+PiDCoCArc3RhdGlj IGlubGluZSBwaHlzX2FkZHJfdCBya19kdGVfYWRkcl9waHlzKHBoeXNfYWRkcl90IGFkZHIpCj4+ Cj4+IFRoZSBhcmd1bWVudCB0eXBlIGhlcmUgc2hvdWxkIGJlIHUzMiwgc2luY2UgaXQncyBhIERU RSwgbm90IGEgcGh5c2ljYWwgCj4+IGFkZHJlc3MuLi4KPj4KPj4+ICt7Cj4+PiArwqDCoMKgIHJl dHVybiBhZGRyOwo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lkIGxvZ19pb3ZhKHN0cnVj dCBya19pb21tdSAqaW9tbXUsIGludCBpbmRleCwgZG1hX2FkZHJfdCAKPj4+IGlvdmEpCj4+PiDC oCB7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgX19pb21lbSAqYmFzZSA9IGlvbW11LT5iYXNlc1tpbmRl eF07Cj4+PiBAQCAtNDg5LDcgKzQ5OSw3IEBAIHN0YXRpYyB2b2lkIGxvZ19pb3ZhKHN0cnVjdCBy a19pb21tdSAqaW9tbXUsIGludCAKPj4+IGluZGV4LCBkbWFfYWRkcl90IGlvdmEpCj4+PiDCoMKg wqDCoMKgIHBhZ2Vfb2Zmc2V0ID0gcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+IMKgIMKg wqDCoMKgwqAgbW11X2R0ZV9hZGRyID0gcmtfaW9tbXVfcmVhZChiYXNlLCBSS19NTVVfRFRFX0FE RFIpOwo+Pj4gLcKgwqDCoCBtbXVfZHRlX2FkZHJfcGh5cyA9IChwaHlzX2FkZHJfdCltbXVfZHRl X2FkZHI7Cj4+PiArwqDCoMKgIG1tdV9kdGVfYWRkcl9waHlzID0gCj4+PiBya19vcHMtPmR0ZV9h ZGRyX3BoeXMoKHBoeXNfYWRkcl90KW1tdV9kdGVfYWRkcik7Cj4+Cj4+IC4uLmFuZCB0aGUgY2Fz dCBoZXJlIHNob3VsZCBub3QgYmUgaGVyZSwgc2luY2UgaXQgKmlzKiB0aGUgY29udmVyc2lvbiAK Pj4gdGhhdCB0aGUgY2FsbGVkIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHBlcmZvcm1pbmcu Cj4+Cj4+PiDCoMKgwqDCoMKgIGR0ZV9hZGRyX3BoeXMgPSBtbXVfZHRlX2FkZHJfcGh5cyArICg0 ICogZHRlX2luZGV4KTsKPj4+IMKgwqDCoMKgwqAgZHRlX2FkZHIgPSBwaHlzX3RvX3ZpcnQoZHRl X2FkZHJfcGh5cyk7Cj4+PiBAQCAtNDk4LDE0ICs1MDgsMTQgQEAgc3RhdGljIHZvaWQgbG9nX2lv dmEoc3RydWN0IHJrX2lvbW11ICppb21tdSwgCj4+PiBpbnQgaW5kZXgsIGRtYV9hZGRyX3QgaW92 YSkKPj4+IMKgwqDCoMKgwqAgaWYgKCFya19kdGVfaXNfcHRfdmFsaWQoZHRlKSkKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIHByaW50X2l0Owo+Pj4gwqAgLcKgwqDCoCBwdGVfYWRkcl9waHlz ID0gcmtfZHRlX3B0X2FkZHJlc3MoZHRlKSArIChwdGVfaW5kZXggKiA0KTsKPj4+ICvCoMKgwqAg cHRlX2FkZHJfcGh5cyA9IHJrX29wcy0+cHRfYWRkcmVzcyhkdGUpICsgKHB0ZV9pbmRleCAqIDQp Owo+Pj4gwqDCoMKgwqDCoCBwdGVfYWRkciA9IHBoeXNfdG9fdmlydChwdGVfYWRkcl9waHlzKTsK Pj4+IMKgwqDCoMKgwqAgcHRlID0gKnB0ZV9hZGRyOwo+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoIXJr X3B0ZV9pc19wYWdlX3ZhbGlkKHB0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBwcmlu dF9pdDsKPj4+IMKgIC3CoMKgwqAgcGFnZV9hZGRyX3BoeXMgPSBya19wdGVfcGFnZV9hZGRyZXNz KHB0ZSkgKyBwYWdlX29mZnNldDsKPj4+ICvCoMKgwqAgcGFnZV9hZGRyX3BoeXMgPSBya19vcHMt PnB0X2FkZHJlc3MocHRlKSArIHBhZ2Vfb2Zmc2V0Owo+Pj4gwqDCoMKgwqDCoCBwYWdlX2ZsYWdz ID0gcHRlICYgUktfUFRFX1BBR0VfRkxBR1NfTUFTSzsKPj4+IMKgIMKgIHByaW50X2l0Ogo+Pj4g QEAgLTYwMSwxMyArNjExLDEzIEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBya19pb21tdV9pb3ZhX3Rv X3BoeXMoc3RydWN0IAo+Pj4gaW9tbXVfZG9tYWluICpkb21haW4sCj4+PiDCoMKgwqDCoMKgIGlm ICghcmtfZHRlX2lzX3B0X3ZhbGlkKGR0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXQ7Cj4+PiDCoCAtwqDCoMKgIHB0X3BoeXMgPSBya19kdGVfcHRfYWRkcmVzcyhkdGUpOwo+Pj4g K8KgwqDCoCBwdF9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKGR0ZSk7Cj4+PiDCoMKgwqDCoMKg IHBhZ2VfdGFibGUgPSAodTMyICopcGh5c190b192aXJ0KHB0X3BoeXMpOwo+Pj4gwqDCoMKgwqDC oCBwdGUgPSBwYWdlX3RhYmxlW3JrX2lvdmFfcHRlX2luZGV4KGlvdmEpXTsKPj4+IMKgwqDCoMKg wqAgaWYgKCFya19wdGVfaXNfcGFnZV92YWxpZChwdGUpKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gb3V0Owo+Pj4gwqAgLcKgwqDCoCBwaHlzID0gcmtfcHRlX3BhZ2VfYWRkcmVzcyhwdGUp ICsgcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+ICvCoMKgwqAgcGh5cyA9IHJrX29wcy0+ cHRfYWRkcmVzcyhwdGUpICsgcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+IMKgIG91dDoK Pj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmtfZG9tYWluLT5kdF9sb2Nr LCBmbGFncyk7Cj4+PiDCoCBAQCAtNjc5LDE0ICs2ODksMTQgQEAgc3RhdGljIHUzMiAqcmtfZHRl X2dldF9wYWdlX3RhYmxlKHN0cnVjdCAKPj4+IHJrX2lvbW11X2RvbWFpbiAqcmtfZG9tYWluLAo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+Pj4gwqDCoMKg wqDCoCB9Cj4+PiDCoCAtwqDCoMKgIGR0ZSA9IHJrX21rX2R0ZShwdF9kbWEpOwo+Pj4gK8KgwqDC oCBkdGUgPSBya19vcHMtPm1rX2R0ZW50cmllcyhwdF9kbWEpOwo+Pj4gwqDCoMKgwqDCoCAqZHRl X2FkZHIgPSBkdGU7Cj4+PiDCoCDCoMKgwqDCoMKgIHJrX3RhYmxlX2ZsdXNoKHJrX2RvbWFpbiwg cHRfZG1hLCBOVU1fUFRfRU5UUklFUyk7Cj4+PiDCoMKgwqDCoMKgIHJrX3RhYmxlX2ZsdXNoKHJr X2RvbWFpbiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJrX2RvbWFpbi0+ ZHRfZG1hICsgZHRlX2luZGV4ICogc2l6ZW9mKHUzMiksIDEpOwo+Pj4gwqAgZG9uZToKPj4+IC3C oMKgwqAgcHRfcGh5cyA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZSk7Cj4+PiArwqDCoMKgIHB0X3Bo eXMgPSBya19vcHMtPnB0X2FkZHJlc3MoZHRlKTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuICh1MzIg KilwaHlzX3RvX3ZpcnQocHRfcGh5cyk7Cj4+PiDCoCB9Cj4+PiDCoCBAQCAtNzI4LDcgKzczOCw3 IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfbWFwX2lvdmEoc3RydWN0IAo+Pj4gcmtfaW9tbXVfZG9t YWluICpya19kb21haW4sIHUzMiAqcHRlX2FkZHIsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHJrX3B0ZV9pc19wYWdlX3ZhbGlkKHB0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIHVud2luZDsKPj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBwdGVfYWRkcltwdGVfY291bnRd ID0gcmtfbWtfcHRlKHBhZGRyLCBwcm90KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBwdGVfYWRkcltw dGVfY291bnRdID0gcmtfb3BzLT5ta19wdGVudHJpZXMocGFkZHIsIHByb3QpOwo+Pj4gwqAgwqDC oMKgwqDCoMKgwqDCoMKgIHBhZGRyICs9IFNQQUdFX1NJWkU7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ IEBAIC03NTAsNyArNzYwLDcgQEAgc3RhdGljIGludCBya19pb21tdV9tYXBfaW92YShzdHJ1Y3Qg Cj4+PiBya19pb21tdV9kb21haW4gKnJrX2RvbWFpbiwgdTMyICpwdGVfYWRkciwKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRlX2NvdW50ICogU1BBR0VfU0laRSk7Cj4+ PiDCoCDCoMKgwqDCoMKgIGlvdmEgKz0gcHRlX2NvdW50ICogU1BBR0VfU0laRTsKPj4+IC3CoMKg wqAgcGFnZV9waHlzID0gcmtfcHRlX3BhZ2VfYWRkcmVzcyhwdGVfYWRkcltwdGVfY291bnRdKTsK Pj4+ICvCoMKgwqAgcGFnZV9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKHB0ZV9hZGRyW3B0ZV9j b3VudF0pOwo+Pj4gwqDCoMKgwqDCoCBwcl9lcnIoImlvdmE6ICVwYWQgYWxyZWFkeSBtYXBwZWQg dG8gJXBhIGNhbm5vdCByZW1hcCB0byBwaHlzOiAKPj4+ICVwYSBwcm90OiAlI3hcbiIsCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmlvdmEsICZwYWdlX3BoeXMsICZwYWRkciwgcHJvdCk7 Cj4+PiDCoCBAQCAtNzg1LDcgKzc5NSw4IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfbWFwKHN0cnVj dCBpb21tdV9kb21haW4gCj4+PiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIF9pb3ZhLAo+Pj4gwqDC oMKgwqDCoCBkdGVfaW5kZXggPSBya19kb21haW4tPmR0W3JrX2lvdmFfZHRlX2luZGV4KGlvdmEp XTsKPj4+IMKgwqDCoMKgwqAgcHRlX2luZGV4ID0gcmtfaW92YV9wdGVfaW5kZXgoaW92YSk7Cj4+ PiDCoMKgwqDCoMKgIHB0ZV9hZGRyID0gJnBhZ2VfdGFibGVbcHRlX2luZGV4XTsKPj4+IC3CoMKg wqAgcHRlX2RtYSA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZV9pbmRleCkgKyBwdGVfaW5kZXggKiBz aXplb2YodTMyKTsKPj4+ICsKPj4+ICvCoMKgwqAgcHRlX2RtYSA9IHJrX29wcy0+cHRfYWRkcmVz cyhkdGVfaW5kZXgpICsgcHRlX2luZGV4ICogc2l6ZW9mKHUzMik7Cj4+PiDCoMKgwqDCoMKgIHJl dCA9IHJrX2lvbW11X21hcF9pb3ZhKHJrX2RvbWFpbiwgcHRlX2FkZHIsIHB0ZV9kbWEsIGlvdmEs Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZGRyLCBzaXplLCBwcm90 KTsKPj4+IMKgIEBAIC04MjEsNyArODMyLDcgQEAgc3RhdGljIHNpemVfdCBya19pb21tdV91bm1h cChzdHJ1Y3QgCj4+PiBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBfaW92YSwK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAg LcKgwqDCoCBwdF9waHlzID0gcmtfZHRlX3B0X2FkZHJlc3MoZHRlKTsKPj4+ICvCoMKgwqAgcHRf cGh5cyA9IHJrX29wcy0+cHRfYWRkcmVzcyhkdGUpOwo+Pj4gwqDCoMKgwqDCoCBwdGVfYWRkciA9 ICh1MzIgKilwaHlzX3RvX3ZpcnQocHRfcGh5cykgKyBya19pb3ZhX3B0ZV9pbmRleChpb3ZhKTsK Pj4+IMKgwqDCoMKgwqAgcHRlX2RtYSA9IHB0X3BoeXMgKyBya19pb3ZhX3B0ZV9pbmRleChpb3Zh KSAqIHNpemVvZih1MzIpOwo+Pj4gwqDCoMKgwqDCoCB1bm1hcF9zaXplID0gcmtfaW9tbXVfdW5t YXBfaW92YShya19kb21haW4sIHB0ZV9hZGRyLCBwdGVfZG1hLCAKPj4+IHNpemUpOwo+Pj4gQEAg LTEwMzcsNyArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIHJrX2lvbW11X2RvbWFpbl9mcmVlKHN0cnVj dCAKPj4+IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+Pj4gwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgTlVNX0RUX0VOVFJJRVM7IGkrKykgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBkdGUg PSBya19kb21haW4tPmR0W2ldOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChya19kdGVfaXNf cHRfdmFsaWQoZHRlKSkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5c19hZGRyX3Qg cHRfcGh5cyA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaHlzX2FkZHJfdCBwdF9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKGR0ZSk7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKnBhZ2VfdGFibGUgPSBwaHlzX3RvX3ZpcnQo cHRfcGh5cyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfdW5tYXBfc2luZ2xl KGRtYV9kZXYsIHB0X3BoeXMsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBTUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKPj4+IEBAIC0xMTM4LDYgKzEx NDksMTUgQEAgc3RhdGljIGludCBya19pb21tdV9wcm9iZShzdHJ1Y3QgCj4+PiBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4+PiDCoMKgwqDCoMKgIGlvbW11LT5kZXYgPSBkZXY7Cj4+PiDCoMKgwqDC oMKgIGlvbW11LT5udW1fbW11ID0gMDsKPj4+IMKgICvCoMKgwqAgaWYgKCFya19vcHMpCj4+PiAr wqDCoMKgwqDCoMKgwqAgcmtfb3BzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4+ PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBUaGF0IHNob3VsZCBub3QgaGFwcGVu IHVubGVzcyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlCj4+PiArwqDCoMKgwqAgKiBoYXJkd2Fy ZSBibG9jayBhcmUgZW1iZWRkZWQgdGhlIHNhbWUgU29DCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvC oMKgwqAgV0FSTl9PTihya19vcHMgIT0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldikpOwo+ Pgo+PiBOaXQ6IGNhbGxpbmcgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCkgdHdpY2Ugc2VlbXMg cmF0aGVyIHVudGlkeSAtIAo+PiBob3cgYWJvdXQgc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IMKgwqDC oMKgb3BzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4+IMKgwqDCoMKgaWYgKCFy a19vcHMpCj4+IMKgwqDCoMKgwqDCoMKgIHJrX29wcyA9IG9wczsKPj4gwqDCoMKgwqBlbHNlIGlm IChXQVJOX09OKHJrX29wcyAhPSBvcHMpKQo+PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4KPj4gRWl0aGVyIHdheSBJIHRoaW5rIGl0IHdvdWxkIGJlIGdvb2QgdG8gdHJlYXQgdW5l eHBlY3RlZCBpbmNvbnNpc3RlbnRjeSAKPj4gYXMgYW4gYWN0dWFsIGVycm9yLCByYXRoZXIgdGhh biBzZWNvbmQtZ3Vlc3NpbmcgdGhlIERUIGFuZCBjYXJyeWluZyBvbiAKPj4gdW5kZXIgdGhlIGFz c3VtcHRpb24gdGhlIGRldmljZSBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBpdCBjbGFpbWVkIHRv IGJlLgo+Pgo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBpb21tdS0+YmFzZXMgPSBkZXZtX2tjYWxsb2Mo ZGV2LCBudW1fcmVzLCBzaXplb2YoKmlvbW11LT5iYXNlcyksCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+PiDCoMKgwqDCoMKgIGlm ICghaW9tbXUtPmJhc2VzKQo+Pj4gQEAgLTEyNzcsMTAgKzEyOTcsMjEgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIAo+Pj4gcmtfaW9tbXVfcG1fb3BzID0gewo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkKPj4+IMKg IH07Cj4+PiDCoCArc3RhdGljIHN0cnVjdCBya19pb21tdV9vcHMgaW9tbXVfZGF0YV9vcHNfdjEg PSB7Cj4+PiArwqDCoMKgIC5wdF9hZGRyZXNzID0gJnJrX2R0ZV9wdF9hZGRyZXNzLAo+Pj4gK8Kg wqDCoCAubWtfZHRlbnRyaWVzID0gJnJrX21rX2R0ZSwKPj4+ICvCoMKgwqAgLm1rX3B0ZW50cmll cyA9ICZya19ta19wdGUsCj4+PiArwqDCoMKgIC5kdGVfYWRkcl9waHlzID0gJnJrX2R0ZV9hZGRy X3BoeXMsCj4+PiArwqDCoMKgIC5wdF9hZGRyZXNzX21hc2sgPSBSS19EVEVfUFRfQUREUkVTU19N QVNLLAo+Pj4gK307Cj4+PiArCj4+PiDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBya19pb21tdV9kdF9pZHNbXSA9IHsKPj4+IC3CoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJyb2Nr Y2hpcCxpb21tdSIgfSwKPj4+ICvCoMKgwqAge8KgwqDCoCAuY29tcGF0aWJsZSA9ICJyb2NrY2hp cCxpb21tdSIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAmaW9tbXVfZGF0YV9vcHNfdjEs Cj4+PiArwqDCoMKgIH0sCj4+PiDCoMKgwqDCoMKgIHsgLyogc2VudGluZWwgKi8gfQo+Pj4gwqAg fTsKPj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBya19pb21tdV9kdF9pZHMpOwo+Pgo+PiBB cyBiZWZvcmUsIHVucmVsYXRlZCBhbmQgdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBkcml2ZXIgaXMg c3RpbGwgYm9vbCAKPj4gaW4gdGhlIEtjb25maWcuIElmIHlvdSBkbyB3YW50IHRvIHN1cHBvcnQg bW9kdWxhciBidWlsZHMgeW91J2xsIGFsc28gCj4+IG5lZWQgdG8gZW5zdXJlIHJrX2lvbW11X29w cy5vd25lciBpcyBzZXQsIGJ1dCBkbyBpdCBhbGwgYXMgYSBzZXBhcmF0ZSAKPj4gcGF0Y2ggcGxl YXNlLgo+Pgo+PiBUaGFua3MsCj4+IFJvYmluLgo+Pgo+Pj4gwqAgwqAgc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgcmtfaW9tbXVfZHJpdmVyID0gewo+Pj4gwqDCoMKgwqDCoCAucHJvYmUg PSBya19pb21tdV9wcm9iZSwKPj4+Cj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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=-15.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 029D5C47076 for ; Fri, 21 May 2021 14:45:24 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 3EEAB613E4 for ; Fri, 21 May 2021 14:45:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3EEAB613E4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=FcuMyDpONcQMS03h3rNyKY0QLZsCxfDGkEl3apJt+z4=; b=TQGO8DrNzkG0536dN1Js+uAEcc hIlAG3XBoJvcc9FdHh2SphHudQH3ORFzWkvv30W+16oklN/+0D6gAOzO3hnCZKZVMRrfpMRG8Z8I3 abXpjlHniICbScvXlLpVZ3aHRF/3CO5ngSKDJuIgtk30p3z1iOKutPcKW4BZ6scs06ckEQBHmte39 bzqW3N03zW9STfrJO6L0z90VdAgGvuovbZUpzS9kpF4e9NYDw0uVuADt9yKZ3mZPHrn0P6rH4a3dx IwQiqcURdKMkEH8jpfjYUTAJ/35sUEScQBF+NLEwCIMkLgMhxVzPs3Ou8xvc/+L4N+b+p8HqZD/0Z 5WDXNrLw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lk6Oq-005o1F-8s; Fri, 21 May 2021 14:45:16 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lk6Ob-005nyH-9i; Fri, 21 May 2021 14:45:01 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:In-Reply-To:MIME-Version:Date:Message-ID:From:References:Cc:To: Subject:Sender:Reply-To:Content-ID:Content-Description; bh=V1hdSHqUjFYf8RX3TXs+Xw5rMWkoaGFWeyJuWu7oMTw=; b=IvE6elfmfnfoJghKOAyiZp/XFP DGJpSEliG/gYWWYw+jEosum/MwgrCp9fva2P6rmoX4SNGVnzOdpKzj6Jwrhq5kRFO584fZIQFLHjI VCQc4KaUmJ2qFYoitlc67ug/g63iv/uq5a/UmpqSjNPfrIspm0S4P4SacvyAQMOjc8Wd2GgNcoH1E ZP0hVNSU8/lRZGK9SJIBQtfFDrV/OlLHAtJAetOCaq4U9p56gtl0jJTYky3evBH5ZF3dSocReA6X8 NjpiCoEztzKRoPoeo4cpTPp9ffoTnWS4c9Mzl55Oxmvv2i5NoVOLnaoXH1tspaNwAitfuvPlC6UVt OL8M9IYA==; Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lk6OX-00HCXZ-Ph; Fri, 21 May 2021 14:45:00 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DE4C011B3; Fri, 21 May 2021 07:44:49 -0700 (PDT) Received: from [10.57.73.64] (unknown [10.57.73.64]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 15AB43F73B; Fri, 21 May 2021 07:44:47 -0700 (PDT) Subject: Re: [PATCH v5 3/4] iommu: rockchip: Add internal ops to handle variants To: Benjamin Gaignard , joro@8bytes.org, will@kernel.org, robh+dt@kernel.org, heiko@sntech.de, xxm@rock-chips.com Cc: iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@collabora.com References: <20210521083637.3221304-1-benjamin.gaignard@collabora.com> <20210521083637.3221304-4-benjamin.gaignard@collabora.com> From: Robin Murphy Message-ID: Date: Fri, 21 May 2021 15:44:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210521_074457_960826_30060136 X-CRM114-Status: GOOD ( 43.37 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms 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-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gMjAyMS0wNS0yMSAxNDozOCwgQmVuamFtaW4gR2FpZ25hcmQgd3JvdGU6Cj4gCj4gTGUgMjEv MDUvMjAyMSDDoCAxNDo1OCwgUm9iaW4gTXVycGh5IGEgw6ljcml0wqA6Cj4+IE9uIDIwMjEtMDUt MjEgMDk6MzYsIEJlbmphbWluIEdhaWduYXJkIHdyb3RlOgo+Pj4gQWRkIGludGVybmFsIG9wcyB0 byBiZSBhYmxlIHRvIGhhbmRsZSBpbmNvbWluZyB2YXJpYW50IHYyLgo+Pj4gVGhlIGdvYWwgaXMg dG8ga2VlcCB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhlIGZyYW1ld29yayBidXQKPj4+IHRv IGFsbG93IHRvIGFkZCB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgaGFyZHdhcmUgYmxvY2suCj4+Pgo+ Pj4gVGhlIG9wcyBhcmUgZ2xvYmFsIGZvciBhIFNvQyBiZWNhdXNlIGlvbW11IGRvbWFpbnMgYXJl IG5vdAo+Pj4gYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBkZXZpY2VzIGlmIHRoZXkgYXJlIGZvciBh IHZpcnR1ZWwgZGV2aWNlIGxpa2UKPj4+IGRybS4gVXNlIGEgZ2xvYmFsIHZhcmlhYmxlIHNob3Vs ZG4ndCBiZSBzaW5jZSBTb0MgdXN1YWxseSBkb2Vzbid0Cj4+PiBlbWJlZGRlZCBkaWZmZXJlbnQg dmVyc2lvbnMgb2YgdGhlIGlvbW11IGhhcmR3YXJlIGJsb2NrLgo+Pj4gSWYgdGhhdCBoYXBwZW4g b25lIGRheSBhIFdBUk5fT04gd2lsbCBiZSBkaXNwbGF5ZWQgYXQgcHJvYmUgdGltZS4KPj4KPj4g SU1PIGl0IHdvdWxkIGJlIGEgZ3JpZXZvdXMgZXJyb3IgaWYgc3VjaCBhICJ2aXJ0dWFsIGRldmlj ZSIgZXZlciBnZXRzIAo+PiBuZWFyIHRoZSBJT01NVSBBUEksIHNvIHBlcnNvbmFsbHkgSSB3b3Vs ZG4ndCB1c2UgdGhhdCBhcyBhIAo+PiBqdXN0aWZpY2F0aW9uIGZvciBhbnl0aGluZyA6KQo+Pgo+ PiBGV0lXIHlvdSBzaG91bGQgYmUgT0sgdG8gaGFuZGxlIHRoaW5ncyBvbiBhIHBlci1pbnN0YW5j ZSBiYXNpcywgaXQgCj4+IGp1c3QgbWVhbnMgeW91IGhhdmUgdG8gZGVmZXIgc29tZSBvZiB0aGUg ZG9tYWluIHNldHVwIHRvIC5hdHRhY2hfZGV2IAo+PiB0aW1lLCBsaWtlIHZhcmlvdXMgb3RoZXIg ZHJpdmVycyBkby4gVGhhdCBzYWlkLCB0aGVyZSdzIG5vdGhpbmcgd3JvbmcgCj4+IHdpdGggdGhl IGdsb2JhbCBpZiB3ZSBkbyBleHBlY3QgaW5zdGFuY2VzIHRvIGJlIGNvbnNpc3RlbnQgYWNyb3Nz IGFueSAKPj4gZ2l2ZW4gUm9ja2NoaXAgU29DIChhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3 ZSBwcm9iYWJseSBzaG91bGQpLgo+IAo+IEkgaGF2ZSB0cmllZCB0aGF0IHNvbHV0aW9uIGZpcnN0 IGJ1dCBkcm0gZGV2aWNlIGFwcGVhciB0byBidXQgc3VjaCAKPiAidmlydHVhbCBkZXZpY2UiIHNv IEkgaGFkIHRvIHVzZSB0aGUgZ2xvYmFsLgoKSG1tLCB0aGUgInJvY2tjaGlwLGRpc3BsYXktc3Vi c3lzdGVtIiBub2RlIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW4gCklPTU1VLCBhbmQgc2hvdWxk bid0IGV2ZW4gYmUgcGFzc2VkIHRvIHRoZSBETUEgQVBJIGVpdGhlciwgYmVjYXVzZSBpdCdzIApu b3QgYSByZWFsIHBpZWNlIG9mIERNQSBjYXBhYmxlIGhhcmR3YXJlLiBXaGF0ZXZlciB0aGUgRFJN IHN0YWNrIGlzIApkb2luZyBhYm92ZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlIGFjdHVhbCBWT1Ag ZGV2aWNlcyB0aGF0IHdlIHNlZSBkb3duIApoZXJlLiBJZiBub3QsIHRoYXQncyBpbmRpY2F0aXZl IG9mIHNvbWV0aGluZyBiZWluZyB3cm9uZyBlbHNld2hlcmUuIExpa2UgCkkgc2F5IHRob3VnaCwg SSB0aGluayBpdCdzIGZpbmUgdG8gdXNlIGdsb2JhbCBvcHMgc2ltcGx5IG9uIHRoZSAKZXhwZWN0 YXRpb24gdGhhdCB0aGF0J3MgaG93IHRoZSBuZXcgU09DcyBhcmUgZ29pbmcgdG8gYmUuCgpJbiBm YWN0IHRoaXMgcmVtaW5kcyBtZSwgSSB0aGluayBJIHN0YXJ0ZWQgd3JpdGluZyBhIHBhdGNoIHNv bWV3aGVyZSB0byAKY2xlYW4gdXAgdGhlIHZpcnR1YWwgZGV2aWNlIG1lc3MgZm9yIHJvY2tjaGlw LWRybSAoSUlSQyBJIGNvdWxkIHNlZSBubyAKcmVhc29uIHdoeSB3ZSBjYW4ndCBqdXN0IGFsbG9j YXRlIHRoZSBEUk0gZGV2aWNlIGZyb20gdGhlIFZPUCBkcml2ZXIsIApzaW1pbGFyIHRvIHdoYXQg ZXh5bm9zLWRybSBkb2VzKS4gTWF5YmUgSSBzaG91bGQgZGlnIHRoYXQgdXAgYWdhaW4uLi4KCj4g SSBzZW5kIGEgdjYgdG8gZml4IHlvdXIgb3RoZXJzIHJlbWFya3MuCgpJIGd1ZXNzIEknbGwgd2Fp dCBmb3Igdjcgbm93IHRoZW4sIHNpbmNlIEkgZ290IHNpZGV0cmFja2VkIGJlZm9yZSAKc2VuZGlu ZyBteSByZXZpZXcgb2YgcGF0Y2ggIzQgKGhlY2ssIEkndmUganVzdCBzcGVudCB0aGUgbGFzdCBo YWxmIGhvdXIgCmRvaW5nIHNvbWV0aGluZyBlbHNlIGluIHRoZSBtaWRkbGUgb2Ygd3JpdGluZyB0 aGlzISkgOykKCkNoZWVycywKUm9iaW4uCgo+IAo+IFRoYW5rcyBmb3IgeW91ciBhZHZpY2UuCj4g Cj4gQmVuamFtaW4KPiAKPj4KPj4+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxi ZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+Pj4gLS0tCj4+PiB2ZXJzaW9uIDU6Cj4+ PiDCoCAtIFVzZSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoKQo+Pj4gwqAgLSBBZGQgaW50ZXJu YWwgb3BzIGluc2lkZSB0aGUgZHJpdmVyCj4+Pgo+Pj4gwqAgZHJpdmVycy9pb21tdS9yb2NrY2hp cC1pb21tdS5jIHwgNjkgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+Pj4gwqAg MSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQo+Pj4KPj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMgCj4+PiBiL2RyaXZl cnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwo+Pj4gaW5kZXggN2EyOTMyNzcyZmRmLi5lN2I5YmNm MTc0YjEgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMKPj4+ ICsrKyBiL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYwo+Pj4gQEAgLTE5LDYgKzE5LDcg QEAKPj4+IMKgICNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPj4+IMKgICNpbmNsdWRlIDxsaW51 eC9saXN0Lmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvbW0uaD4KPj4+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4+Cj4+IFRoaXMgc2VlbXMgdG8gYmUgYW4gdW5yZWxhdGVkIGFuZCB1bm5l Y2Vzc2FyeSBjaGFuZ2UuCj4+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4gwqAg I2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+PiDCoCAjaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUuaD4K Pj4+IEBAIC05Niw2ICs5NywxNCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJrX2lvbW11 X2Nsb2Nrc1tdID0gewo+Pj4gwqDCoMKgwqDCoCAiYWNsayIsICJpZmFjZSIsCj4+PiDCoCB9Owo+ Pj4gwqAgK3N0cnVjdCBya19pb21tdV9vcHMgewo+Pj4gK8KgwqDCoCBwaHlzX2FkZHJfdCAoKnB0 X2FkZHJlc3MpKHUzMiBkdGUpOwo+Pj4gK8KgwqDCoCB1MzIgKCpta19kdGVudHJpZXMpKGRtYV9h ZGRyX3QgcHRfZG1hKTsKPj4+ICvCoMKgwqAgdTMyICgqbWtfcHRlbnRyaWVzKShwaHlzX2FkZHJf dCBwYWdlLCBpbnQgcHJvdCk7Cj4+PiArwqDCoMKgIHBoeXNfYWRkcl90ICgqZHRlX2FkZHJfcGh5 cykocGh5c19hZGRyX3QgYWRkcik7Cj4+PiArwqDCoMKgIHUzMiBwdF9hZGRyZXNzX21hc2s7Cj4+ PiArfTsKPj4+ICsKPj4+IMKgIHN0cnVjdCBya19pb21tdSB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVj dCBkZXZpY2UgKmRldjsKPj4+IMKgwqDCoMKgwqAgdm9pZCBfX2lvbWVtICoqYmFzZXM7Cj4+PiBA QCAtMTE2LDYgKzEyNSw3IEBAIHN0cnVjdCBya19pb21tdWRhdGEgewo+Pj4gwqAgfTsKPj4+IMKg IMKgIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2Owo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcmtfaW9tbXVfb3BzICpya19vcHM7Cj4+PiDCoCDCoCBzdGF0aWMgaW5saW5lIHZvaWQgcmtf dGFibGVfZmx1c2goc3RydWN0IHJrX2lvbW11X2RvbWFpbiAqZG9tLCAKPj4+IGRtYV9hZGRyX3Qg ZG1hLAo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQg aW50IGNvdW50KQo+Pj4gQEAgLTIxNSwxMSArMjI1LDYgQEAgc3RhdGljIGlubGluZSB1MzIgcmtf bWtfZHRlKGRtYV9hZGRyX3QgcHRfZG1hKQo+Pj4gwqAgI2RlZmluZSBSS19QVEVfUEFHRV9SRUFE QUJMRcKgwqDCoMKgwqAgQklUKDEpCj4+PiDCoCAjZGVmaW5lIFJLX1BURV9QQUdFX1ZBTElEwqDC oMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4+IMKgIC1zdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHJr X3B0ZV9wYWdlX2FkZHJlc3ModTMyIHB0ZSkKPj4+IC17Cj4+PiAtwqDCoMKgIHJldHVybiAocGh5 c19hZGRyX3QpcHRlICYgUktfUFRFX1BBR0VfQUREUkVTU19NQVNLOwo+Pj4gLX0KPj4+IC0KPj4+ IMKgIHN0YXRpYyBpbmxpbmUgYm9vbCBya19wdGVfaXNfcGFnZV92YWxpZCh1MzIgcHRlKQo+Pj4g wqAgewo+Pj4gwqDCoMKgwqDCoCByZXR1cm4gcHRlICYgUktfUFRFX1BBR0VfVkFMSUQ7Cj4+PiBA QCAtNDUxLDcgKzQ1Niw3IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfZm9yY2VfcmVzZXQoc3RydWN0 IHJrX2lvbW11IAo+Pj4gKmlvbW11KQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJrX2lvbW11X3dy aXRlKGlvbW11LT5iYXNlc1tpXSwgUktfTU1VX0RURV9BRERSLCAKPj4+IERURV9BRERSX0RVTU1Z KTsKPj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBkdGVfYWRkciA9IHJrX2lvbW11X3JlYWQoaW9t bXUtPmJhc2VzW2ldLCBSS19NTVVfRFRFX0FERFIpOwo+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmIChk dGVfYWRkciAhPSAoRFRFX0FERFJfRFVNTVkgJiBSS19EVEVfUFRfQUREUkVTU19NQVNLKSkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkdGVfYWRkciAhPSAoRFRFX0FERFJfRFVNTVkgJiBya19v cHMtPnB0X2FkZHJlc3NfbWFzaykpIHsKPj4KPj4gTml0OiBtaWdodCBpdCBtYWtlIG1vcmUgc2Vu c2UgdG8gZG8gc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgIGR0ZV9hZGRyID0g cmtfb3BzLT5wdF9hZGRyZXNzKC4uLiBEVEVfQUREUl9EVU1NWSk7Cj4+IMKgwqDCoMKgwqDCoMKg IHJrX2lvbW11X3dyaXRlKC4uLiBkdGVfYWRkcikKPj4gwqDCoMKgwqDCoMKgwqAgaWYgKHJrX2lv bW11X3JlYWQoLi4uKSAhPSBkdGVfYWRkcikKPj4KPj4gc28gdGhhdCB5b3UgZG9uJ3QgbmVlZCB0 byBib3RoZXIgZGVmaW5pbmcgLT5wdF9hZGRyZXNzX21hc2sgZm9yIGp1c3QgCj4+IHRoaXMgb25l IHNhbml0eS1jaGVjaz8KPj4KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIo aW9tbXUtPmRldiwgIkVycm9yIGR1cmluZyByYXcgcmVzZXQuIAo+Pj4gTU1VX0RURV9BRERSIGlz IG5vdCBmdW5jdGlvbmluZ1xuIik7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gLUVGQVVMVDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiBAQCAtNDcwLDYgKzQ3NSwx MSBAQCBzdGF0aWMgaW50IHJrX2lvbW11X2ZvcmNlX3Jlc2V0KHN0cnVjdCBya19pb21tdSAKPj4+ ICppb21tdSkKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiDCoCB9Cj4+PiDCoCArc3RhdGlj IGlubGluZSBwaHlzX2FkZHJfdCBya19kdGVfYWRkcl9waHlzKHBoeXNfYWRkcl90IGFkZHIpCj4+ Cj4+IFRoZSBhcmd1bWVudCB0eXBlIGhlcmUgc2hvdWxkIGJlIHUzMiwgc2luY2UgaXQncyBhIERU RSwgbm90IGEgcGh5c2ljYWwgCj4+IGFkZHJlc3MuLi4KPj4KPj4+ICt7Cj4+PiArwqDCoMKgIHJl dHVybiBhZGRyOwo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lkIGxvZ19pb3ZhKHN0cnVj dCBya19pb21tdSAqaW9tbXUsIGludCBpbmRleCwgZG1hX2FkZHJfdCAKPj4+IGlvdmEpCj4+PiDC oCB7Cj4+PiDCoMKgwqDCoMKgIHZvaWQgX19pb21lbSAqYmFzZSA9IGlvbW11LT5iYXNlc1tpbmRl eF07Cj4+PiBAQCAtNDg5LDcgKzQ5OSw3IEBAIHN0YXRpYyB2b2lkIGxvZ19pb3ZhKHN0cnVjdCBy a19pb21tdSAqaW9tbXUsIGludCAKPj4+IGluZGV4LCBkbWFfYWRkcl90IGlvdmEpCj4+PiDCoMKg wqDCoMKgIHBhZ2Vfb2Zmc2V0ID0gcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+IMKgIMKg wqDCoMKgwqAgbW11X2R0ZV9hZGRyID0gcmtfaW9tbXVfcmVhZChiYXNlLCBSS19NTVVfRFRFX0FE RFIpOwo+Pj4gLcKgwqDCoCBtbXVfZHRlX2FkZHJfcGh5cyA9IChwaHlzX2FkZHJfdCltbXVfZHRl X2FkZHI7Cj4+PiArwqDCoMKgIG1tdV9kdGVfYWRkcl9waHlzID0gCj4+PiBya19vcHMtPmR0ZV9h ZGRyX3BoeXMoKHBoeXNfYWRkcl90KW1tdV9kdGVfYWRkcik7Cj4+Cj4+IC4uLmFuZCB0aGUgY2Fz dCBoZXJlIHNob3VsZCBub3QgYmUgaGVyZSwgc2luY2UgaXQgKmlzKiB0aGUgY29udmVyc2lvbiAK Pj4gdGhhdCB0aGUgY2FsbGVkIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHBlcmZvcm1pbmcu Cj4+Cj4+PiDCoMKgwqDCoMKgIGR0ZV9hZGRyX3BoeXMgPSBtbXVfZHRlX2FkZHJfcGh5cyArICg0 ICogZHRlX2luZGV4KTsKPj4+IMKgwqDCoMKgwqAgZHRlX2FkZHIgPSBwaHlzX3RvX3ZpcnQoZHRl X2FkZHJfcGh5cyk7Cj4+PiBAQCAtNDk4LDE0ICs1MDgsMTQgQEAgc3RhdGljIHZvaWQgbG9nX2lv dmEoc3RydWN0IHJrX2lvbW11ICppb21tdSwgCj4+PiBpbnQgaW5kZXgsIGRtYV9hZGRyX3QgaW92 YSkKPj4+IMKgwqDCoMKgwqAgaWYgKCFya19kdGVfaXNfcHRfdmFsaWQoZHRlKSkKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIHByaW50X2l0Owo+Pj4gwqAgLcKgwqDCoCBwdGVfYWRkcl9waHlz ID0gcmtfZHRlX3B0X2FkZHJlc3MoZHRlKSArIChwdGVfaW5kZXggKiA0KTsKPj4+ICvCoMKgwqAg cHRlX2FkZHJfcGh5cyA9IHJrX29wcy0+cHRfYWRkcmVzcyhkdGUpICsgKHB0ZV9pbmRleCAqIDQp Owo+Pj4gwqDCoMKgwqDCoCBwdGVfYWRkciA9IHBoeXNfdG9fdmlydChwdGVfYWRkcl9waHlzKTsK Pj4+IMKgwqDCoMKgwqAgcHRlID0gKnB0ZV9hZGRyOwo+Pj4gwqAgwqDCoMKgwqDCoCBpZiAoIXJr X3B0ZV9pc19wYWdlX3ZhbGlkKHB0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBwcmlu dF9pdDsKPj4+IMKgIC3CoMKgwqAgcGFnZV9hZGRyX3BoeXMgPSBya19wdGVfcGFnZV9hZGRyZXNz KHB0ZSkgKyBwYWdlX29mZnNldDsKPj4+ICvCoMKgwqAgcGFnZV9hZGRyX3BoeXMgPSBya19vcHMt PnB0X2FkZHJlc3MocHRlKSArIHBhZ2Vfb2Zmc2V0Owo+Pj4gwqDCoMKgwqDCoCBwYWdlX2ZsYWdz ID0gcHRlICYgUktfUFRFX1BBR0VfRkxBR1NfTUFTSzsKPj4+IMKgIMKgIHByaW50X2l0Ogo+Pj4g QEAgLTYwMSwxMyArNjExLDEzIEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBya19pb21tdV9pb3ZhX3Rv X3BoeXMoc3RydWN0IAo+Pj4gaW9tbXVfZG9tYWluICpkb21haW4sCj4+PiDCoMKgwqDCoMKgIGlm ICghcmtfZHRlX2lzX3B0X3ZhbGlkKGR0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBv dXQ7Cj4+PiDCoCAtwqDCoMKgIHB0X3BoeXMgPSBya19kdGVfcHRfYWRkcmVzcyhkdGUpOwo+Pj4g K8KgwqDCoCBwdF9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKGR0ZSk7Cj4+PiDCoMKgwqDCoMKg IHBhZ2VfdGFibGUgPSAodTMyICopcGh5c190b192aXJ0KHB0X3BoeXMpOwo+Pj4gwqDCoMKgwqDC oCBwdGUgPSBwYWdlX3RhYmxlW3JrX2lvdmFfcHRlX2luZGV4KGlvdmEpXTsKPj4+IMKgwqDCoMKg wqAgaWYgKCFya19wdGVfaXNfcGFnZV92YWxpZChwdGUpKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGdvdG8gb3V0Owo+Pj4gwqAgLcKgwqDCoCBwaHlzID0gcmtfcHRlX3BhZ2VfYWRkcmVzcyhwdGUp ICsgcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+ICvCoMKgwqAgcGh5cyA9IHJrX29wcy0+ cHRfYWRkcmVzcyhwdGUpICsgcmtfaW92YV9wYWdlX29mZnNldChpb3ZhKTsKPj4+IMKgIG91dDoK Pj4+IMKgwqDCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmtfZG9tYWluLT5kdF9sb2Nr LCBmbGFncyk7Cj4+PiDCoCBAQCAtNjc5LDE0ICs2ODksMTQgQEAgc3RhdGljIHUzMiAqcmtfZHRl X2dldF9wYWdlX3RhYmxlKHN0cnVjdCAKPj4+IHJrX2lvbW11X2RvbWFpbiAqcmtfZG9tYWluLAo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+Pj4gwqDCoMKg wqDCoCB9Cj4+PiDCoCAtwqDCoMKgIGR0ZSA9IHJrX21rX2R0ZShwdF9kbWEpOwo+Pj4gK8KgwqDC oCBkdGUgPSBya19vcHMtPm1rX2R0ZW50cmllcyhwdF9kbWEpOwo+Pj4gwqDCoMKgwqDCoCAqZHRl X2FkZHIgPSBkdGU7Cj4+PiDCoCDCoMKgwqDCoMKgIHJrX3RhYmxlX2ZsdXNoKHJrX2RvbWFpbiwg cHRfZG1hLCBOVU1fUFRfRU5UUklFUyk7Cj4+PiDCoMKgwqDCoMKgIHJrX3RhYmxlX2ZsdXNoKHJr X2RvbWFpbiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJrX2RvbWFpbi0+ ZHRfZG1hICsgZHRlX2luZGV4ICogc2l6ZW9mKHUzMiksIDEpOwo+Pj4gwqAgZG9uZToKPj4+IC3C oMKgwqAgcHRfcGh5cyA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZSk7Cj4+PiArwqDCoMKgIHB0X3Bo eXMgPSBya19vcHMtPnB0X2FkZHJlc3MoZHRlKTsKPj4+IMKgwqDCoMKgwqAgcmV0dXJuICh1MzIg KilwaHlzX3RvX3ZpcnQocHRfcGh5cyk7Cj4+PiDCoCB9Cj4+PiDCoCBAQCAtNzI4LDcgKzczOCw3 IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfbWFwX2lvdmEoc3RydWN0IAo+Pj4gcmtfaW9tbXVfZG9t YWluICpya19kb21haW4sIHUzMiAqcHRlX2FkZHIsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHJrX3B0ZV9pc19wYWdlX3ZhbGlkKHB0ZSkpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBnb3RvIHVud2luZDsKPj4+IMKgIC3CoMKgwqDCoMKgwqDCoCBwdGVfYWRkcltwdGVfY291bnRd ID0gcmtfbWtfcHRlKHBhZGRyLCBwcm90KTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBwdGVfYWRkcltw dGVfY291bnRdID0gcmtfb3BzLT5ta19wdGVudHJpZXMocGFkZHIsIHByb3QpOwo+Pj4gwqAgwqDC oMKgwqDCoMKgwqDCoMKgIHBhZGRyICs9IFNQQUdFX1NJWkU7Cj4+PiDCoMKgwqDCoMKgIH0KPj4+ IEBAIC03NTAsNyArNzYwLDcgQEAgc3RhdGljIGludCBya19pb21tdV9tYXBfaW92YShzdHJ1Y3Qg Cj4+PiBya19pb21tdV9kb21haW4gKnJrX2RvbWFpbiwgdTMyICpwdGVfYWRkciwKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHRlX2NvdW50ICogU1BBR0VfU0laRSk7Cj4+ PiDCoCDCoMKgwqDCoMKgIGlvdmEgKz0gcHRlX2NvdW50ICogU1BBR0VfU0laRTsKPj4+IC3CoMKg wqAgcGFnZV9waHlzID0gcmtfcHRlX3BhZ2VfYWRkcmVzcyhwdGVfYWRkcltwdGVfY291bnRdKTsK Pj4+ICvCoMKgwqAgcGFnZV9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKHB0ZV9hZGRyW3B0ZV9j b3VudF0pOwo+Pj4gwqDCoMKgwqDCoCBwcl9lcnIoImlvdmE6ICVwYWQgYWxyZWFkeSBtYXBwZWQg dG8gJXBhIGNhbm5vdCByZW1hcCB0byBwaHlzOiAKPj4+ICVwYSBwcm90OiAlI3hcbiIsCj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmlvdmEsICZwYWdlX3BoeXMsICZwYWRkciwgcHJvdCk7 Cj4+PiDCoCBAQCAtNzg1LDcgKzc5NSw4IEBAIHN0YXRpYyBpbnQgcmtfaW9tbXVfbWFwKHN0cnVj dCBpb21tdV9kb21haW4gCj4+PiAqZG9tYWluLCB1bnNpZ25lZCBsb25nIF9pb3ZhLAo+Pj4gwqDC oMKgwqDCoCBkdGVfaW5kZXggPSBya19kb21haW4tPmR0W3JrX2lvdmFfZHRlX2luZGV4KGlvdmEp XTsKPj4+IMKgwqDCoMKgwqAgcHRlX2luZGV4ID0gcmtfaW92YV9wdGVfaW5kZXgoaW92YSk7Cj4+ PiDCoMKgwqDCoMKgIHB0ZV9hZGRyID0gJnBhZ2VfdGFibGVbcHRlX2luZGV4XTsKPj4+IC3CoMKg wqAgcHRlX2RtYSA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZV9pbmRleCkgKyBwdGVfaW5kZXggKiBz aXplb2YodTMyKTsKPj4+ICsKPj4+ICvCoMKgwqAgcHRlX2RtYSA9IHJrX29wcy0+cHRfYWRkcmVz cyhkdGVfaW5kZXgpICsgcHRlX2luZGV4ICogc2l6ZW9mKHUzMik7Cj4+PiDCoMKgwqDCoMKgIHJl dCA9IHJrX2lvbW11X21hcF9pb3ZhKHJrX2RvbWFpbiwgcHRlX2FkZHIsIHB0ZV9kbWEsIGlvdmEs Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZGRyLCBzaXplLCBwcm90 KTsKPj4+IMKgIEBAIC04MjEsNyArODMyLDcgQEAgc3RhdGljIHNpemVfdCBya19pb21tdV91bm1h cChzdHJ1Y3QgCj4+PiBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBfaW92YSwK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gwqAg LcKgwqDCoCBwdF9waHlzID0gcmtfZHRlX3B0X2FkZHJlc3MoZHRlKTsKPj4+ICvCoMKgwqAgcHRf cGh5cyA9IHJrX29wcy0+cHRfYWRkcmVzcyhkdGUpOwo+Pj4gwqDCoMKgwqDCoCBwdGVfYWRkciA9 ICh1MzIgKilwaHlzX3RvX3ZpcnQocHRfcGh5cykgKyBya19pb3ZhX3B0ZV9pbmRleChpb3ZhKTsK Pj4+IMKgwqDCoMKgwqAgcHRlX2RtYSA9IHB0X3BoeXMgKyBya19pb3ZhX3B0ZV9pbmRleChpb3Zh KSAqIHNpemVvZih1MzIpOwo+Pj4gwqDCoMKgwqDCoCB1bm1hcF9zaXplID0gcmtfaW9tbXVfdW5t YXBfaW92YShya19kb21haW4sIHB0ZV9hZGRyLCBwdGVfZG1hLCAKPj4+IHNpemUpOwo+Pj4gQEAg LTEwMzcsNyArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIHJrX2lvbW11X2RvbWFpbl9mcmVlKHN0cnVj dCAKPj4+IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+Pj4gwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgTlVNX0RUX0VOVFJJRVM7IGkrKykgewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBkdGUg PSBya19kb21haW4tPmR0W2ldOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChya19kdGVfaXNf cHRfdmFsaWQoZHRlKSkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5c19hZGRyX3Qg cHRfcGh5cyA9IHJrX2R0ZV9wdF9hZGRyZXNzKGR0ZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaHlzX2FkZHJfdCBwdF9waHlzID0gcmtfb3BzLT5wdF9hZGRyZXNzKGR0ZSk7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKnBhZ2VfdGFibGUgPSBwaHlzX3RvX3ZpcnQo cHRfcGh5cyk7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfdW5tYXBfc2luZ2xl KGRtYV9kZXYsIHB0X3BoeXMsCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBTUEFHRV9TSVpFLCBETUFfVE9fREVWSUNFKTsKPj4+IEBAIC0xMTM4LDYgKzEx NDksMTUgQEAgc3RhdGljIGludCBya19pb21tdV9wcm9iZShzdHJ1Y3QgCj4+PiBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4+PiDCoMKgwqDCoMKgIGlvbW11LT5kZXYgPSBkZXY7Cj4+PiDCoMKgwqDC oMKgIGlvbW11LT5udW1fbW11ID0gMDsKPj4+IMKgICvCoMKgwqAgaWYgKCFya19vcHMpCj4+PiAr wqDCoMKgwqDCoMKgwqAgcmtfb3BzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4+ PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBUaGF0IHNob3VsZCBub3QgaGFwcGVu IHVubGVzcyBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlCj4+PiArwqDCoMKgwqAgKiBoYXJkd2Fy ZSBibG9jayBhcmUgZW1iZWRkZWQgdGhlIHNhbWUgU29DCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvC oMKgwqAgV0FSTl9PTihya19vcHMgIT0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldikpOwo+ Pgo+PiBOaXQ6IGNhbGxpbmcgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCkgdHdpY2Ugc2VlbXMg cmF0aGVyIHVudGlkeSAtIAo+PiBob3cgYWJvdXQgc29tZXRoaW5nIGxpa2U6Cj4+Cj4+IMKgwqDC oMKgb3BzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4+IMKgwqDCoMKgaWYgKCFy a19vcHMpCj4+IMKgwqDCoMKgwqDCoMKgIHJrX29wcyA9IG9wczsKPj4gwqDCoMKgwqBlbHNlIGlm IChXQVJOX09OKHJrX29wcyAhPSBvcHMpKQo+PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4KPj4gRWl0aGVyIHdheSBJIHRoaW5rIGl0IHdvdWxkIGJlIGdvb2QgdG8gdHJlYXQgdW5l eHBlY3RlZCBpbmNvbnNpc3RlbnRjeSAKPj4gYXMgYW4gYWN0dWFsIGVycm9yLCByYXRoZXIgdGhh biBzZWNvbmQtZ3Vlc3NpbmcgdGhlIERUIGFuZCBjYXJyeWluZyBvbiAKPj4gdW5kZXIgdGhlIGFz c3VtcHRpb24gdGhlIGRldmljZSBpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBpdCBjbGFpbWVkIHRv IGJlLgo+Pgo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBpb21tdS0+YmFzZXMgPSBkZXZtX2tjYWxsb2Mo ZGV2LCBudW1fcmVzLCBzaXplb2YoKmlvbW11LT5iYXNlcyksCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCk7Cj4+PiDCoMKgwqDCoMKgIGlm ICghaW9tbXUtPmJhc2VzKQo+Pj4gQEAgLTEyNzcsMTAgKzEyOTcsMjEgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIAo+Pj4gcmtfaW9tbXVfcG1fb3BzID0gewo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkKPj4+IMKg IH07Cj4+PiDCoCArc3RhdGljIHN0cnVjdCBya19pb21tdV9vcHMgaW9tbXVfZGF0YV9vcHNfdjEg PSB7Cj4+PiArwqDCoMKgIC5wdF9hZGRyZXNzID0gJnJrX2R0ZV9wdF9hZGRyZXNzLAo+Pj4gK8Kg wqDCoCAubWtfZHRlbnRyaWVzID0gJnJrX21rX2R0ZSwKPj4+ICvCoMKgwqAgLm1rX3B0ZW50cmll cyA9ICZya19ta19wdGUsCj4+PiArwqDCoMKgIC5kdGVfYWRkcl9waHlzID0gJnJrX2R0ZV9hZGRy X3BoeXMsCj4+PiArwqDCoMKgIC5wdF9hZGRyZXNzX21hc2sgPSBSS19EVEVfUFRfQUREUkVTU19N QVNLLAo+Pj4gK307Cj4+PiArCj4+PiDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBya19pb21tdV9kdF9pZHNbXSA9IHsKPj4+IC3CoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJyb2Nr Y2hpcCxpb21tdSIgfSwKPj4+ICvCoMKgwqAge8KgwqDCoCAuY29tcGF0aWJsZSA9ICJyb2NrY2hp cCxpb21tdSIsCj4+PiArwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAmaW9tbXVfZGF0YV9vcHNfdjEs Cj4+PiArwqDCoMKgIH0sCj4+PiDCoMKgwqDCoMKgIHsgLyogc2VudGluZWwgKi8gfQo+Pj4gwqAg fTsKPj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBya19pb21tdV9kdF9pZHMpOwo+Pgo+PiBB cyBiZWZvcmUsIHVucmVsYXRlZCBhbmQgdW5uZWNlc3Nhcnkgc2luY2UgdGhpcyBkcml2ZXIgaXMg c3RpbGwgYm9vbCAKPj4gaW4gdGhlIEtjb25maWcuIElmIHlvdSBkbyB3YW50IHRvIHN1cHBvcnQg bW9kdWxhciBidWlsZHMgeW91J2xsIGFsc28gCj4+IG5lZWQgdG8gZW5zdXJlIHJrX2lvbW11X29w cy5vd25lciBpcyBzZXQsIGJ1dCBkbyBpdCBhbGwgYXMgYSBzZXBhcmF0ZSAKPj4gcGF0Y2ggcGxl YXNlLgo+Pgo+PiBUaGFua3MsCj4+IFJvYmluLgo+Pgo+Pj4gwqAgwqAgc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgcmtfaW9tbXVfZHJpdmVyID0gewo+Pj4gwqDCoMKgwqDCoCAucHJvYmUg PSBya19pb21tdV9wcm9iZSwKPj4+Cj4+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2No aXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg==