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=-11.6 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SIGNED_OFF_BY,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 85FB1C2D0E2 for ; Thu, 24 Sep 2020 16:23:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3410C2388A for ; Thu, 24 Sep 2020 16:23:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rvPYgeoG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728215AbgIXQXj (ORCPT ); Thu, 24 Sep 2020 12:23:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726516AbgIXQXi (ORCPT ); Thu, 24 Sep 2020 12:23:38 -0400 Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 82996C0613CE; Thu, 24 Sep 2020 09:23:38 -0700 (PDT) Received: by mail-lj1-x244.google.com with SMTP id u4so3246805ljd.10; Thu, 24 Sep 2020 09:23:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=rXDOx2mvBDbgFQ4LiwLuFoINfDk5unrylnExfiSRRW8=; b=rvPYgeoGDzXZeRPcZQK62TH3R2MDcuhsWdsTmI23ucqCdQf+wjz4nU/vCCD36bPJpm haagIOVfmfMqROL1Ayrvp67KFx3wSc+4pAJS6rtWd/k8hjf/ZnvGFC05D8g0TwsqcVxK 3JxT6SXZbafxc3CquYd7Z5wU6GoKi7L20VViusORw5f0CJ409K/pIzWa+NSsUAyMHIDl tZwygVFKjsqQpVvGkX6GX45Y42jcTxjSbsg5t/G2CiCkRiUcuxSwfCEscgvhq2sBsNcJ WEAsHRGTE5sHVurMcK4ZJEEv4v6pha+5BQOtL3wNekvCYjZ8N59XIkMLhue/hRaW9suK LudQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=rXDOx2mvBDbgFQ4LiwLuFoINfDk5unrylnExfiSRRW8=; b=mk9qmEXsjHEtKuh419ux/ixfxeUSUezR9iT1v0G16fK7P9bmWBqsU+GiBLwObyIXya F3VaDkj23dBfXcVfmIMydBJAtnmaw97zSB36yWU877+Eoie9zb4ADX9u3NFyoz69AIgq F8d2rOLfd9klXsLamGLz2ziwj+A1Ddaglph4X1ebihBKbHmuF+Es1dt6pRFIFhelMGz2 kpmqDpmchZP+SdMnU82aB8cZJW/bglZvssboxUU22Rqw15vVgE23iHmOLrLyJ5ZA0J+K oNMAWviQsqHG9n7U6mA06rUw2cTS9v3/9giIyyRML/DChEhX/PQuoPO79rAfgGKlbyo3 /wRw== X-Gm-Message-State: AOAM530gzuJcjyMJBWHL58a6rW9HZUATSpiy3Hy43v2fNkN0iu67eLQE Tad49YbYqCPIHBxY+8oF0zsEWseJLRk= X-Google-Smtp-Source: ABdhPJyBm0/ATuaYoFADCmLQvb89iuLnCKAQ6DJdr0lEMsnFCR7F71xsJ3rxyIfDG8u0IUOcevhy0Q== X-Received: by 2002:a2e:8017:: with SMTP id j23mr192462ljg.108.1600964616577; Thu, 24 Sep 2020 09:23:36 -0700 (PDT) Received: from [192.168.2.145] (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.googlemail.com with ESMTPSA id m1sm2441300lfr.32.2020.09.24.09.23.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Sep 2020 09:23:35 -0700 (PDT) Subject: Re: [PATCH v2 1/4] dt-bindings: reserved-memory: Document "active" property To: Thierry Reding Cc: Joerg Roedel , Rob Herring , Frank Rowand , Will Deacon , Robin Murphy , iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, "linux-tegra@vger.kernel.org" References: <20200904130000.691933-1-thierry.reding@gmail.com> <20200924140130.GA2527337@ulmo> From: Dmitry Osipenko Message-ID: Date: Thu, 24 Sep 2020 19:23:34 +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: <20200924140130.GA2527337@ulmo> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org 24.09.2020 17:01, Thierry Reding пишет: > On Thu, Sep 24, 2020 at 04:23:59PM +0300, Dmitry Osipenko wrote: >> 04.09.2020 15:59, Thierry Reding пишет: >>> From: Thierry Reding >>> >>> Reserved memory regions can be marked as "active" if hardware is >>> expected to access the regions during boot and before the operating >>> system can take control. One example where this is useful is for the >>> operating system to infer whether the region needs to be identity- >>> mapped through an IOMMU. >>> >>> Signed-off-by: Thierry Reding >>> --- >>> .../bindings/reserved-memory/reserved-memory.txt | 7 +++++++ >>> 1 file changed, 7 insertions(+) >>> >>> diff --git a/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt b/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt >>> index 4dd20de6977f..163d2927e4fc 100644 >>> --- a/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt >>> +++ b/Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt >>> @@ -63,6 +63,13 @@ reusable (optional) - empty property >>> able to reclaim it back. Typically that means that the operating >>> system can use that region to store volatile or cached data that >>> can be otherwise regenerated or migrated elsewhere. >>> +active (optional) - empty property >>> + - If this property is set for a reserved memory region, it indicates >>> + that some piece of hardware may be actively accessing this region. >>> + Should the operating system want to enable IOMMU protection for a >>> + device, all active memory regions must have been identity-mapped >>> + in order to ensure that non-quiescent hardware during boot can >>> + continue to access the memory. >>> >>> Linux implementation note: >>> - If a "linux,cma-default" property is present, then Linux will use the >>> >> >> Hi, >> >> Could you please explain what devices need this quirk? I see that you're >> targeting Tegra SMMU driver, which means that it should be some pre-T186 >> device. > > Primarily I'm looking at Tegra210 and later, because on earlier devices > the bootloader doesn't consistently initialize display. I know that it > does on some devices, but not all of them. AFAIK, all tablet devices starting with Tegra20 that have display panel are initializing display at a boot time for showing splash screen. This includes all T20/T30/T114 tablets that are already supported by upstream kernel. > This same code should also > work on Tegra186 and later (with an ARM SMMU) although the situation is > slightly more complicated there because IOMMU translations will fault by > default long before these identity mappings can be established. > >> Is this reservation needed for some device that has display >> hardwired to a very specific IOMMU domain at the boot time? > > No, this is only used to convey information about the active framebuffer > to the kernel. In practice the DMA/IOMMU code will use this information > to establish a 1:1 mapping on whatever IOMMU domain that was picked for > display. > >> If you're targeting devices that don't have IOMMU enabled by default at >> the boot time, then this approach won't work for the existing devices >> which won't ever get an updated bootloader. > > If the devices don't use an IOMMU, then there should be no problem. The > extra reserved-memory nodes would still be necessary to ensure that the > kernel doesn't reuse the framebuffer memory for the slab allocator, but > if no IOMMU is used, then the display controller accessing the memory > isn't going to cause problems other than perhaps scanning out data that > is no longer a framebuffer. > > There should also be no problem for devices with an old bootloader > because this code is triggered by the presence of a reserved-memory node > referenced via the memory-region property. Devices with an old > bootloader should continue to work as they did before. Although I > suppose they would start faulting once we enable DMA/IOMMU integration > for Tegra SMMU if they have a bootloader that does initialize display to > actively scan out during boot. > >> I think Robin Murphy already suggested that we should simply create >> a dummy "identity" IOMMU domain by default for the DRM/VDE devices and >> then replace it with an explicitly created domain within the drivers. > > I don't recall reading about that suggestion. So does this mean that for > certain devices we'd want to basically passthrough by default and then > at some point during boot take over with a properly managed IOMMU > domain? Yes, my understanding that this is what Robin suggested here: https://lore.kernel.org/linux-iommu/cb12808b-7316-19db-7413-b7f852a6f8ae@arm.com/ > The primary goal here is to move towards using the DMA API rather than > the IOMMU API directly, so we don't really have the option of replacing > with an explicitly created domain. Unless we have code in the DMA/IOMMU > code that does this somehow. > > But I'm not sure what would be a good way to mark certain devices as > needing an identity domain by default. Do we still use the reserved- > memory node for that? The reserved-memory indeed shouldn't be needed for resolving the implicit IOMMU problem since we could mark certain devices within the kernel IOMMU driver. I haven't got around to trying to implement the implicit IOMMU support yet, but I suppose we could implement the def_domain_type() hook in the SMMU driver and then return IOMMU_DOMAIN_IDENTITY for the Display/VDE devices. Then the Display/VDE drivers will take over the identity domain and replace it with the explicit domain. > That would still require some sort of flag to > specify which reserved-memory regions would need this identity mapping > because, as was pointed out in earlier review, some devices may have > reserved-memory regions that are not meant to be identity mapped. Please note that the reserved-memory approach also creates problem for selection of a large CMA region if FB is located somewhere in a middle of DRAM. I already see that the FB's reserved-memory will break CMA for Nexus 7 and Acer A500 because CMA area overlaps with the bootloader's FB :) Also keep in mind that initrd needs a location too and location usually hardwired in a bootloader. Hence it increases pressure on the CMA selection. >> Secondly, all NVIDIA bootloaders are passing tegra_fbmem=... via >> kernel's cmdline with the physical location of the framebuffer in >> memory. Maybe we could support this option? > > I'm not a big fan of that command-line option, but I also realize that > for older bootloaders that's probably the only option we have. I don't > suppose all of the devices support U-Boot? Majority of devices in a wild don't use u-boot and they have a locked-down bootloader. Still it's possible to chain-load u-boot or bypass the "security" and replace the bootloader, but these approaches aren't widely supported because they take a lot of effort to be implemented and maintained. Even those devices that use proper u-boot usually never updating it and are running some ancient version. You can't ignore all those people :) > Because ideally we'd just > translate from tegra_fbmem=... to reserved-memory region there so that > we don't have to carry backwards-compatibility code for these purely > downstream bootloaders. IIRC, in the past Robin Murphy was suggesting to read out hardware state early during kernel boot in order to find what regions are in use by hardware. I think it should be easy to do for the display controller since we could check clock and PD states in order to decide whether DC's IO could be accessed and then read out the FB pointer and size. I guess it should take about hundred lines of code. But the easiest way should be to ignore this trouble for devices that have IOMMU disabled by default and simply allow display to show garbage. Nobody ever complained about this for the past 7+ years :) Hence implementing the dummy-identity domain support should be enough for solving the problem, at least this should work for pre-T186 devices. 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=-11.3 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, NICE_REPLY_A,SIGNED_OFF_BY,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 9B0A6C4727F for ; Thu, 24 Sep 2020 16:23:43 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 39F5A238E3 for ; Thu, 24 Sep 2020 16:23:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rvPYgeoG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 39F5A238E3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.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 whitealder.osuosl.org (Postfix) with ESMTP id D25078691C; Thu, 24 Sep 2020 16:23:42 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id x6sVXQDp4Ub1; Thu, 24 Sep 2020 16:23:41 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 7802B867F7; Thu, 24 Sep 2020 16:23:41 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4DC6FC0859; Thu, 24 Sep 2020 16:23:41 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 82BCAC0051 for ; Thu, 24 Sep 2020 16:23:40 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 65136204D1 for ; Thu, 24 Sep 2020 16:23:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WFNdLEHub7eE for ; Thu, 24 Sep 2020 16:23:38 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-lj1-f195.google.com (mail-lj1-f195.google.com [209.85.208.195]) by silver.osuosl.org (Postfix) with ESMTPS id 72A9720499 for ; Thu, 24 Sep 2020 16:23:38 +0000 (UTC) Received: by mail-lj1-f195.google.com with SMTP id y4so3258526ljk.8 for ; Thu, 24 Sep 2020 09:23:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=rXDOx2mvBDbgFQ4LiwLuFoINfDk5unrylnExfiSRRW8=; b=rvPYgeoGDzXZeRPcZQK62TH3R2MDcuhsWdsTmI23ucqCdQf+wjz4nU/vCCD36bPJpm haagIOVfmfMqROL1Ayrvp67KFx3wSc+4pAJS6rtWd/k8hjf/ZnvGFC05D8g0TwsqcVxK 3JxT6SXZbafxc3CquYd7Z5wU6GoKi7L20VViusORw5f0CJ409K/pIzWa+NSsUAyMHIDl tZwygVFKjsqQpVvGkX6GX45Y42jcTxjSbsg5t/G2CiCkRiUcuxSwfCEscgvhq2sBsNcJ WEAsHRGTE5sHVurMcK4ZJEEv4v6pha+5BQOtL3wNekvCYjZ8N59XIkMLhue/hRaW9suK LudQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=rXDOx2mvBDbgFQ4LiwLuFoINfDk5unrylnExfiSRRW8=; b=bWOwlQMVBfPqtIlvDivZzn65e6HRKUoIpHhti4j8RNgUcZmOqeFpLhTsyYQD3bXkD4 ZhSsDJPbJGe1l2qaZ50INe/9AGivRntSOI7/TIMXgvWUWE24g+TGRnskfmbrhoVt+HdI X8Y1QIALO4KWckDZ4ITT8jXjXb0C5ImhjIl2D6TTm9BDkCM6oHi9Eb8J0iFsdDOdaOSO HFJzivZXvoFfNNTK2E79r5rGPkICXblY0KFWehsKsf0OgYu5xS9Y/ELLE97QqmExwIx5 d6zGAtHYDOHgS9dXgkqYnmma2K+8K5YmGD3udL9SZC/7QRGSGC+YUE06BL1LC3+DWEe9 iZJg== X-Gm-Message-State: AOAM5320HKhZ6JUjrRrXe+LrH/4YRCA5bsXd94FFhlKqW3KGKTRQUqBq 3UPfOgRk4WPtIQFuPYEyfyc= X-Google-Smtp-Source: ABdhPJyBm0/ATuaYoFADCmLQvb89iuLnCKAQ6DJdr0lEMsnFCR7F71xsJ3rxyIfDG8u0IUOcevhy0Q== X-Received: by 2002:a2e:8017:: with SMTP id j23mr192462ljg.108.1600964616577; Thu, 24 Sep 2020 09:23:36 -0700 (PDT) Received: from [192.168.2.145] (109-252-170-211.dynamic.spd-mgts.ru. [109.252.170.211]) by smtp.googlemail.com with ESMTPSA id m1sm2441300lfr.32.2020.09.24.09.23.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 24 Sep 2020 09:23:35 -0700 (PDT) Subject: Re: [PATCH v2 1/4] dt-bindings: reserved-memory: Document "active" property To: Thierry Reding References: <20200904130000.691933-1-thierry.reding@gmail.com> <20200924140130.GA2527337@ulmo> From: Dmitry Osipenko Message-ID: Date: Thu, 24 Sep 2020 19:23:34 +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: <20200924140130.GA2527337@ulmo> Content-Language: en-US Cc: devicetree@vger.kernel.org, Frank Rowand , Robin Murphy , linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, Rob Herring , "linux-tegra@vger.kernel.org" , Will Deacon 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" MjQuMDkuMjAyMCAxNzowMSwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKPiBPbiBUaHUsIFNl cCAyNCwgMjAyMCBhdCAwNDoyMzo1OVBNICswMzAwLCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+ IDA0LjA5LjIwMjAgMTU6NTksIFRoaWVycnkgUmVkaW5nINC/0LjRiNC10YI6Cj4+PiBGcm9tOiBU aGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgo+Pj4KPj4+IFJlc2VydmVkIG1lbW9y eSByZWdpb25zIGNhbiBiZSBtYXJrZWQgYXMgImFjdGl2ZSIgaWYgaGFyZHdhcmUgaXMKPj4+IGV4 cGVjdGVkIHRvIGFjY2VzcyB0aGUgcmVnaW9ucyBkdXJpbmcgYm9vdCBhbmQgYmVmb3JlIHRoZSBv cGVyYXRpbmcKPj4+IHN5c3RlbSBjYW4gdGFrZSBjb250cm9sLiBPbmUgZXhhbXBsZSB3aGVyZSB0 aGlzIGlzIHVzZWZ1bCBpcyBmb3IgdGhlCj4+PiBvcGVyYXRpbmcgc3lzdGVtIHRvIGluZmVyIHdo ZXRoZXIgdGhlIHJlZ2lvbiBuZWVkcyB0byBiZSBpZGVudGl0eS0KPj4+IG1hcHBlZCB0aHJvdWdo IGFuIElPTU1VLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5n QG52aWRpYS5jb20+Cj4+PiAtLS0KPj4+ICAuLi4vYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L3Jl c2VydmVkLW1lbW9yeS50eHQgICAgICAgICAgIHwgNyArKysrKysrCj4+PiAgMSBmaWxlIGNoYW5n ZWQsIDcgaW5zZXJ0aW9ucygrKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L3Jlc2VydmVkLW1lbW9yeS50eHQgYi9E b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L3Jlc2VydmVk LW1lbW9yeS50eHQKPj4+IGluZGV4IDRkZDIwZGU2OTc3Zi4uMTYzZDI5MjdlNGZjIDEwMDY0NAo+ Pj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Jlc2VydmVkLW1lbW9y eS9yZXNlcnZlZC1tZW1vcnkudHh0Cj4+PiArKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvcmVzZXJ2ZWQtbWVtb3J5L3Jlc2VydmVkLW1lbW9yeS50eHQKPj4+IEBAIC02Myw2 ICs2MywxMyBAQCByZXVzYWJsZSAob3B0aW9uYWwpIC0gZW1wdHkgcHJvcGVydHkKPj4+ICAgICAg ICBhYmxlIHRvIHJlY2xhaW0gaXQgYmFjay4gVHlwaWNhbGx5IHRoYXQgbWVhbnMgdGhhdCB0aGUg b3BlcmF0aW5nCj4+PiAgICAgICAgc3lzdGVtIGNhbiB1c2UgdGhhdCByZWdpb24gdG8gc3RvcmUg dm9sYXRpbGUgb3IgY2FjaGVkIGRhdGEgdGhhdAo+Pj4gICAgICAgIGNhbiBiZSBvdGhlcndpc2Ug cmVnZW5lcmF0ZWQgb3IgbWlncmF0ZWQgZWxzZXdoZXJlLgo+Pj4gK2FjdGl2ZSAob3B0aW9uYWwp IC0gZW1wdHkgcHJvcGVydHkKPj4+ICsgICAgLSBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCBmb3Ig YSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uLCBpdCBpbmRpY2F0ZXMKPj4+ICsgICAgICB0aGF0IHNv bWUgcGllY2Ugb2YgaGFyZHdhcmUgbWF5IGJlIGFjdGl2ZWx5IGFjY2Vzc2luZyB0aGlzIHJlZ2lv bi4KPj4+ICsgICAgICBTaG91bGQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2FudCB0byBlbmFibGUg SU9NTVUgcHJvdGVjdGlvbiBmb3IgYQo+Pj4gKyAgICAgIGRldmljZSwgYWxsIGFjdGl2ZSBtZW1v cnkgcmVnaW9ucyBtdXN0IGhhdmUgYmVlbiBpZGVudGl0eS1tYXBwZWQKPj4+ICsgICAgICBpbiBv cmRlciB0byBlbnN1cmUgdGhhdCBub24tcXVpZXNjZW50IGhhcmR3YXJlIGR1cmluZyBib290IGNh bgo+Pj4gKyAgICAgIGNvbnRpbnVlIHRvIGFjY2VzcyB0aGUgbWVtb3J5Lgo+Pj4gIAo+Pj4gIExp bnV4IGltcGxlbWVudGF0aW9uIG5vdGU6Cj4+PiAgLSBJZiBhICJsaW51eCxjbWEtZGVmYXVsdCIg cHJvcGVydHkgaXMgcHJlc2VudCwgdGhlbiBMaW51eCB3aWxsIHVzZSB0aGUKPj4+Cj4+Cj4+IEhp LAo+Pgo+PiBDb3VsZCB5b3UgcGxlYXNlIGV4cGxhaW4gd2hhdCBkZXZpY2VzIG5lZWQgdGhpcyBx dWlyaz8gSSBzZWUgdGhhdCB5b3UncmUKPj4gdGFyZ2V0aW5nIFRlZ3JhIFNNTVUgZHJpdmVyLCB3 aGljaCBtZWFucyB0aGF0IGl0IHNob3VsZCBiZSBzb21lIHByZS1UMTg2Cj4+IGRldmljZS4KPiAK PiBQcmltYXJpbHkgSSdtIGxvb2tpbmcgYXQgVGVncmEyMTAgYW5kIGxhdGVyLCBiZWNhdXNlIG9u IGVhcmxpZXIgZGV2aWNlcwo+IHRoZSBib290bG9hZGVyIGRvZXNuJ3QgY29uc2lzdGVudGx5IGlu aXRpYWxpemUgZGlzcGxheS4gSSBrbm93IHRoYXQgaXQKPiBkb2VzIG9uIHNvbWUgZGV2aWNlcywg YnV0IG5vdCBhbGwgb2YgdGhlbS4KCkFGQUlLLCBhbGwgdGFibGV0IGRldmljZXMgc3RhcnRpbmcg d2l0aCBUZWdyYTIwIHRoYXQgaGF2ZSBkaXNwbGF5IHBhbmVsCmFyZSBpbml0aWFsaXppbmcgZGlz cGxheSBhdCBhIGJvb3QgdGltZSBmb3Igc2hvd2luZyBzcGxhc2ggc2NyZWVuLiBUaGlzCmluY2x1 ZGVzIGFsbCBUMjAvVDMwL1QxMTQgdGFibGV0cyB0aGF0IGFyZSBhbHJlYWR5IHN1cHBvcnRlZCBi eSB1cHN0cmVhbQprZXJuZWwuCgo+IFRoaXMgc2FtZSBjb2RlIHNob3VsZCBhbHNvCj4gd29yayBv biBUZWdyYTE4NiBhbmQgbGF0ZXIgKHdpdGggYW4gQVJNIFNNTVUpIGFsdGhvdWdoIHRoZSBzaXR1 YXRpb24gaXMKPiBzbGlnaHRseSBtb3JlIGNvbXBsaWNhdGVkIHRoZXJlIGJlY2F1c2UgSU9NTVUg dHJhbnNsYXRpb25zIHdpbGwgZmF1bHQgYnkKPiBkZWZhdWx0IGxvbmcgYmVmb3JlIHRoZXNlIGlk ZW50aXR5IG1hcHBpbmdzIGNhbiBiZSBlc3RhYmxpc2hlZC4KPiAKPj4gSXMgdGhpcyByZXNlcnZh dGlvbiBuZWVkZWQgZm9yIHNvbWUgZGV2aWNlIHRoYXQgaGFzIGRpc3BsYXkKPj4gaGFyZHdpcmVk IHRvIGEgdmVyeSBzcGVjaWZpYyBJT01NVSBkb21haW4gYXQgdGhlIGJvb3QgdGltZT8KPiAKPiBO bywgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY29udmV5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rp dmUgZnJhbWVidWZmZXIKPiB0byB0aGUga2VybmVsLiBJbiBwcmFjdGljZSB0aGUgRE1BL0lPTU1V IGNvZGUgd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbgo+IHRvIGVzdGFibGlzaCBhIDE6MSBtYXBw aW5nIG9uIHdoYXRldmVyIElPTU1VIGRvbWFpbiB0aGF0IHdhcyBwaWNrZWQgZm9yCj4gZGlzcGxh eS4KPiAKPj4gSWYgeW91J3JlIHRhcmdldGluZyBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZSBJT01N VSBlbmFibGVkIGJ5IGRlZmF1bHQgYXQKPj4gdGhlIGJvb3QgdGltZSwgdGhlbiB0aGlzIGFwcHJv YWNoIHdvbid0IHdvcmsgZm9yIHRoZSBleGlzdGluZyBkZXZpY2VzCj4+IHdoaWNoIHdvbid0IGV2 ZXIgZ2V0IGFuIHVwZGF0ZWQgYm9vdGxvYWRlci4KPiAKPiBJZiB0aGUgZGV2aWNlcyBkb24ndCB1 c2UgYW4gSU9NTVUsIHRoZW4gdGhlcmUgc2hvdWxkIGJlIG5vIHByb2JsZW0uIFRoZQo+IGV4dHJh IHJlc2VydmVkLW1lbW9yeSBub2RlcyB3b3VsZCBzdGlsbCBiZSBuZWNlc3NhcnkgdG8gZW5zdXJl IHRoYXQgdGhlCj4ga2VybmVsIGRvZXNuJ3QgcmV1c2UgdGhlIGZyYW1lYnVmZmVyIG1lbW9yeSBm b3IgdGhlIHNsYWIgYWxsb2NhdG9yLCBidXQKPiBpZiBubyBJT01NVSBpcyB1c2VkLCB0aGVuIHRo ZSBkaXNwbGF5IGNvbnRyb2xsZXIgYWNjZXNzaW5nIHRoZSBtZW1vcnkKPiBpc24ndCBnb2luZyB0 byBjYXVzZSBwcm9ibGVtcyBvdGhlciB0aGFuIHBlcmhhcHMgc2Nhbm5pbmcgb3V0IGRhdGEgdGhh dAo+IGlzIG5vIGxvbmdlciBhIGZyYW1lYnVmZmVyLgo+IAo+IFRoZXJlIHNob3VsZCBhbHNvIGJl IG5vIHByb2JsZW0gZm9yIGRldmljZXMgd2l0aCBhbiBvbGQgYm9vdGxvYWRlcgo+IGJlY2F1c2Ug dGhpcyBjb2RlIGlzIHRyaWdnZXJlZCBieSB0aGUgcHJlc2VuY2Ugb2YgYSByZXNlcnZlZC1tZW1v cnkgbm9kZQo+IHJlZmVyZW5jZWQgdmlhIHRoZSBtZW1vcnktcmVnaW9uIHByb3BlcnR5LiBEZXZp Y2VzIHdpdGggYW4gb2xkCj4gYm9vdGxvYWRlciBzaG91bGQgY29udGludWUgdG8gd29yayBhcyB0 aGV5IGRpZCBiZWZvcmUuIEFsdGhvdWdoIEkKPiBzdXBwb3NlIHRoZXkgd291bGQgc3RhcnQgZmF1 bHRpbmcgb25jZSB3ZSBlbmFibGUgRE1BL0lPTU1VIGludGVncmF0aW9uCj4gZm9yIFRlZ3JhIFNN TVUgaWYgdGhleSBoYXZlIGEgYm9vdGxvYWRlciB0aGF0IGRvZXMgaW5pdGlhbGl6ZSBkaXNwbGF5 IHRvCj4gYWN0aXZlbHkgc2NhbiBvdXQgZHVyaW5nIGJvb3QuCj4gCj4+IEkgdGhpbmsgUm9iaW4g TXVycGh5IGFscmVhZHkgc3VnZ2VzdGVkIHRoYXQgd2Ugc2hvdWxkIHNpbXBseSBjcmVhdGUKPj4g YSBkdW1teSAiaWRlbnRpdHkiIElPTU1VIGRvbWFpbiBieSBkZWZhdWx0IGZvciB0aGUgRFJNL1ZE RSBkZXZpY2VzIGFuZAo+PiB0aGVuIHJlcGxhY2UgaXQgd2l0aCBhbiBleHBsaWNpdGx5IGNyZWF0 ZWQgZG9tYWluIHdpdGhpbiB0aGUgZHJpdmVycy4KPiAKPiBJIGRvbid0IHJlY2FsbCByZWFkaW5n IGFib3V0IHRoYXQgc3VnZ2VzdGlvbi4gU28gZG9lcyB0aGlzIG1lYW4gdGhhdCBmb3IKPiBjZXJ0 YWluIGRldmljZXMgd2UnZCB3YW50IHRvIGJhc2ljYWxseSBwYXNzdGhyb3VnaCBieSBkZWZhdWx0 IGFuZCB0aGVuCj4gYXQgc29tZSBwb2ludCBkdXJpbmcgYm9vdCB0YWtlIG92ZXIgd2l0aCBhIHBy b3Blcmx5IG1hbmFnZWQgSU9NTVUKPiBkb21haW4/CgpZZXMsIG15IHVuZGVyc3RhbmRpbmcgdGhh dCB0aGlzIGlzIHdoYXQgUm9iaW4gc3VnZ2VzdGVkIGhlcmU6CgpodHRwczovL2xvcmUua2VybmVs Lm9yZy9saW51eC1pb21tdS9jYjEyODA4Yi03MzE2LTE5ZGItNzQxMy1iN2Y4NTJhNmY4YWVAYXJt LmNvbS8KCj4gVGhlIHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIG1vdmUgdG93YXJkcyB1c2luZyB0 aGUgRE1BIEFQSSByYXRoZXIgdGhhbgo+IHRoZSBJT01NVSBBUEkgZGlyZWN0bHksIHNvIHdlIGRv bid0IHJlYWxseSBoYXZlIHRoZSBvcHRpb24gb2YgcmVwbGFjaW5nCj4gd2l0aCBhbiBleHBsaWNp dGx5IGNyZWF0ZWQgZG9tYWluLiBVbmxlc3Mgd2UgaGF2ZSBjb2RlIGluIHRoZSBETUEvSU9NTVUK PiBjb2RlIHRoYXQgZG9lcyB0aGlzIHNvbWVob3cuCj4gCj4gQnV0IEknbSBub3Qgc3VyZSB3aGF0 IHdvdWxkIGJlIGEgZ29vZCB3YXkgdG8gbWFyayBjZXJ0YWluIGRldmljZXMgYXMKPiBuZWVkaW5n IGFuIGlkZW50aXR5IGRvbWFpbiBieSBkZWZhdWx0LiBEbyB3ZSBzdGlsbCB1c2UgdGhlIHJlc2Vy dmVkLQo+IG1lbW9yeSBub2RlIGZvciB0aGF0PwoKVGhlIHJlc2VydmVkLW1lbW9yeSBpbmRlZWQg c2hvdWxkbid0IGJlIG5lZWRlZCBmb3IgcmVzb2x2aW5nIHRoZQppbXBsaWNpdCBJT01NVSBwcm9i bGVtIHNpbmNlIHdlIGNvdWxkIG1hcmsgY2VydGFpbiBkZXZpY2VzIHdpdGhpbiB0aGUKa2VybmVs IElPTU1VIGRyaXZlci4KCkkgaGF2ZW4ndCBnb3QgYXJvdW5kIHRvIHRyeWluZyB0byBpbXBsZW1l bnQgdGhlIGltcGxpY2l0IElPTU1VIHN1cHBvcnQKeWV0LCBidXQgSSBzdXBwb3NlIHdlIGNvdWxk IGltcGxlbWVudCB0aGUgZGVmX2RvbWFpbl90eXBlKCkgaG9vayBpbiB0aGUKU01NVSBkcml2ZXIg YW5kIHRoZW4gcmV0dXJuIElPTU1VX0RPTUFJTl9JREVOVElUWSBmb3IgdGhlIERpc3BsYXkvVkRF CmRldmljZXMuIFRoZW4gdGhlIERpc3BsYXkvVkRFIGRyaXZlcnMgd2lsbCB0YWtlIG92ZXIgdGhl IGlkZW50aXR5IGRvbWFpbgphbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBleHBsaWNpdCBkb21haW4u Cgo+IFRoYXQgd291bGQgc3RpbGwgcmVxdWlyZSBzb21lIHNvcnQgb2YgZmxhZyB0bwo+IHNwZWNp Znkgd2hpY2ggcmVzZXJ2ZWQtbWVtb3J5IHJlZ2lvbnMgd291bGQgbmVlZCB0aGlzIGlkZW50aXR5 IG1hcHBpbmcKPiBiZWNhdXNlLCBhcyB3YXMgcG9pbnRlZCBvdXQgaW4gZWFybGllciByZXZpZXcs IHNvbWUgZGV2aWNlcyBtYXkgaGF2ZQo+IHJlc2VydmVkLW1lbW9yeSByZWdpb25zIHRoYXQgYXJl IG5vdCBtZWFudCB0byBiZSBpZGVudGl0eSBtYXBwZWQuCgpQbGVhc2Ugbm90ZSB0aGF0IHRoZSBy ZXNlcnZlZC1tZW1vcnkgYXBwcm9hY2ggYWxzbyBjcmVhdGVzIHByb2JsZW0gZm9yCnNlbGVjdGlv biBvZiBhIGxhcmdlIENNQSByZWdpb24gaWYgRkIgaXMgbG9jYXRlZCBzb21ld2hlcmUgaW4gYSBt aWRkbGUKb2YgRFJBTS4KCkkgYWxyZWFkeSBzZWUgdGhhdCB0aGUgRkIncyByZXNlcnZlZC1tZW1v cnkgd2lsbCBicmVhayBDTUEgZm9yIE5leHVzIDcKYW5kIEFjZXIgQTUwMCBiZWNhdXNlIENNQSBh cmVhIG92ZXJsYXBzIHdpdGggdGhlIGJvb3Rsb2FkZXIncyBGQiA6KQoKQWxzbyBrZWVwIGluIG1p bmQgdGhhdCBpbml0cmQgbmVlZHMgYSBsb2NhdGlvbiB0b28gYW5kIGxvY2F0aW9uIHVzdWFsbHkK aGFyZHdpcmVkIGluIGEgYm9vdGxvYWRlci4gSGVuY2UgaXQgaW5jcmVhc2VzIHByZXNzdXJlIG9u IHRoZSBDTUEgc2VsZWN0aW9uLgoKPj4gU2Vjb25kbHksIGFsbCBOVklESUEgYm9vdGxvYWRlcnMg YXJlIHBhc3NpbmcgdGVncmFfZmJtZW09Li4uIHZpYQo+PiBrZXJuZWwncyBjbWRsaW5lIHdpdGgg dGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBmcmFtZWJ1ZmZlciBpbgo+PiBtZW1vcnkuIE1h eWJlIHdlIGNvdWxkIHN1cHBvcnQgdGhpcyBvcHRpb24/Cj4gCj4gSSdtIG5vdCBhIGJpZyBmYW4g b2YgdGhhdCBjb21tYW5kLWxpbmUgb3B0aW9uLCBidXQgSSBhbHNvIHJlYWxpemUgdGhhdAo+IGZv ciBvbGRlciBib290bG9hZGVycyB0aGF0J3MgcHJvYmFibHkgdGhlIG9ubHkgb3B0aW9uIHdlIGhh dmUuIEkgZG9uJ3QKPiBzdXBwb3NlIGFsbCBvZiB0aGUgZGV2aWNlcyBzdXBwb3J0IFUtQm9vdD8K Ck1ham9yaXR5IG9mIGRldmljZXMgaW4gYSB3aWxkIGRvbid0IHVzZSB1LWJvb3QgYW5kIHRoZXkg aGF2ZSBhCmxvY2tlZC1kb3duIGJvb3Rsb2FkZXIuIFN0aWxsIGl0J3MgcG9zc2libGUgdG8gY2hh aW4tbG9hZCB1LWJvb3Qgb3IKYnlwYXNzIHRoZSAic2VjdXJpdHkiIGFuZCByZXBsYWNlIHRoZSBi b290bG9hZGVyLCBidXQgdGhlc2UgYXBwcm9hY2hlcwphcmVuJ3Qgd2lkZWx5IHN1cHBvcnRlZCBi ZWNhdXNlIHRoZXkgdGFrZSBhIGxvdCBvZiBlZmZvcnQgdG8gYmUKaW1wbGVtZW50ZWQgYW5kIG1h aW50YWluZWQuCgpFdmVuIHRob3NlIGRldmljZXMgdGhhdCB1c2UgcHJvcGVyIHUtYm9vdCB1c3Vh bGx5IG5ldmVyIHVwZGF0aW5nIGl0IGFuZAphcmUgcnVubmluZyBzb21lIGFuY2llbnQgdmVyc2lv bi4gWW91IGNhbid0IGlnbm9yZSBhbGwgdGhvc2UgcGVvcGxlIDopCgo+IEJlY2F1c2UgaWRlYWxs eSB3ZSdkIGp1c3QKPiB0cmFuc2xhdGUgZnJvbSB0ZWdyYV9mYm1lbT0uLi4gdG8gcmVzZXJ2ZWQt bWVtb3J5IHJlZ2lvbiB0aGVyZSBzbyB0aGF0Cj4gd2UgZG9uJ3QgaGF2ZSB0byBjYXJyeSBiYWNr d2FyZHMtY29tcGF0aWJpbGl0eSBjb2RlIGZvciB0aGVzZSBwdXJlbHkKPiBkb3duc3RyZWFtIGJv b3Rsb2FkZXJzLgoKSUlSQywgaW4gdGhlIHBhc3QgUm9iaW4gTXVycGh5IHdhcyBzdWdnZXN0aW5n IHRvIHJlYWQgb3V0IGhhcmR3YXJlIHN0YXRlCmVhcmx5IGR1cmluZyBrZXJuZWwgYm9vdCBpbiBv cmRlciB0byBmaW5kIHdoYXQgcmVnaW9ucyBhcmUgaW4gdXNlIGJ5CmhhcmR3YXJlLgoKSSB0aGlu ayBpdCBzaG91bGQgYmUgZWFzeSB0byBkbyBmb3IgdGhlIGRpc3BsYXkgY29udHJvbGxlciBzaW5j ZSB3ZQpjb3VsZCBjaGVjayBjbG9jayBhbmQgUEQgc3RhdGVzIGluIG9yZGVyIHRvIGRlY2lkZSB3 aGV0aGVyIERDJ3MgSU8gY291bGQKYmUgYWNjZXNzZWQgYW5kIHRoZW4gcmVhZCBvdXQgdGhlIEZC IHBvaW50ZXIgYW5kIHNpemUuIEkgZ3Vlc3MgaXQgc2hvdWxkCnRha2UgYWJvdXQgaHVuZHJlZCBs aW5lcyBvZiBjb2RlLgoKQnV0IHRoZSBlYXNpZXN0IHdheSBzaG91bGQgYmUgdG8gaWdub3JlIHRo aXMgdHJvdWJsZSBmb3IgZGV2aWNlcyB0aGF0CmhhdmUgSU9NTVUgZGlzYWJsZWQgYnkgZGVmYXVs dCBhbmQgc2ltcGx5IGFsbG93IGRpc3BsYXkgdG8gc2hvdyBnYXJiYWdlLgpOb2JvZHkgZXZlciBj b21wbGFpbmVkIGFib3V0IHRoaXMgZm9yIHRoZSBwYXN0IDcrIHllYXJzIDopCgpIZW5jZSBpbXBs ZW1lbnRpbmcgdGhlIGR1bW15LWlkZW50aXR5IGRvbWFpbiBzdXBwb3J0IHNob3VsZCBiZSBlbm91 Z2gKZm9yIHNvbHZpbmcgdGhlIHByb2JsZW0sIGF0IGxlYXN0IHRoaXMgc2hvdWxkIHdvcmsgZm9y IHByZS1UMTg2IGRldmljZXMuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9u Lm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9p b21tdQ==