From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-vs1-f44.google.com (mail-vs1-f44.google.com [209.85.217.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4028B4BAA6; Mon, 3 Jun 2024 20:29:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.217.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717446588; cv=none; b=YBa3leX5rVfq6oQjWk1FGNcLdvqAN+WhwYuKVAAC9a3xzO7Qg6gQb48UT56mUB353oc3VvnTbmzqIWZZE/uUNMXkv5HjLAGMLUjprGbtK3JvGXmvVKmQ/g29pVJuTLmn/3qfWT9AkYubl89JCufA+TJYny9MP2GW3bcEC6YCPso= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717446588; c=relaxed/simple; bh=j3gfTKddyYWmSxXQuoNeqUkMME14BCZN3zYIx14emZI=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=u3nYVN5UxhzpfabPNsvmAKlW158Qw2NAtrGWrLD1+whytjN3zGzn/QxqwNkfYKDzQpAks0LALcMaQPckVQGTky/B4OWGQ9V3v4ZD/mLeCFr8I43Vxht9Po6wsFPwhrq5VmL5w3ovZN0s2Hy8VRQfjmp6bDHS0tIi6a4c+vWuD7o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CIgKQPSs; arc=none smtp.client-ip=209.85.217.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CIgKQPSs" Received: by mail-vs1-f44.google.com with SMTP id ada2fe7eead31-48bc4350b19so117088137.2; Mon, 03 Jun 2024 13:29:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717446586; x=1718051386; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=5X2AoY/lQVZz1FKCa6KHvqy44zzQ3mhz+ruaolMEMaw=; b=CIgKQPSsPWAcarOJaRigCbKR+zq29KpWz8a+jmm17mqJpFPCt/Mqs9mpufx2Qu6sXC nL1bUPZPlBiKAY22lRqq16AWCEsn4IsvD7uVEWWTNaeJPAabCxYVRw1uv5A5ZH2zPfMF o7fwnM2FPZTYlq9izkvEEOT8byIcWkCbJtoFRUtgOcOFK/JsIDY4OIie/fDJzIkmpJv1 6eyb7YNbo0r/eZn0zzBgymutBz4QWaIO+lxdzowRKJSA0mhaAwLE52BrsURwnOnE8nFz WlwSUbUq17GrUbf13mUiGkCFlN9W6pkXIlJCmsalk7racxvNuTuTdFu6fpcoPlxR/aNe wa5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717446586; x=1718051386; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5X2AoY/lQVZz1FKCa6KHvqy44zzQ3mhz+ruaolMEMaw=; b=lW39H0rDDt1iD27C0ABZImSJZJOasptR5rropCe5Ia8lKPeaKai6fHpLQnsikXXFuS THFY1ptO7Rf5UdKa5kll5mDG0ERnmBPDr+jukm8sewsnl43ju+443gU9uNAjybG7Rrxs ogC9UQwOGl1nDDp5jNuSreH3Gprue51EhsD6aQzmmQtZtly9g/8c/LvRfWr/ElJh7N2w v6Ejo09zlvl6PHb2hIE0x2BknIZKVDyqJE6Dh0Nw0OMxJngIEPWddDczbuMDqa67/o9q Z7vPP+Ioyx+MQfAXPB//7Rpe/1e63BX1PkSEXk2SqXGU11AD6koX/2T6VPmLj1Y2cLeY mT+A== X-Forwarded-Encrypted: i=1; AJvYcCUoMw7bZuaZaa/37v2HyYsn1g3dpSzzG/2v3nI71TD3giDUpqE4Xm2yiNanM95lZuN2LWsSiVRuwpTAkmrnBx98xjCR9wZd8OAu6G907xZF9NKWNWw+jhSxhuxRvEWoB1k+GAarXFx5u/9OSmUKOhNa0URuaqL88HXLfMEJr9GWJQlEO5hm+R8HNFibmzkRgeI+xTqatbX5gQ== X-Gm-Message-State: AOJu0YyPLIvIIrfPzjnl/CI9d1WUnI+GqbQ3Rc7uwOJQ7TCnXT4lwUfJ 78hXc/9IdsIV37JSNs8+MOz9JEnzBVhHB28ymBE8TZFq4QBQlEJk X-Google-Smtp-Source: AGHT+IGWrKHzvzbDJxYZB9izbaKjENhQiSF4aLl0mt855tkbfFf0g9cOXHABW4R9S8b+9ENLJgRQIw== X-Received: by 2002:a05:6122:309e:b0:4eb:152e:cf92 with SMTP id 71dfb90a1353d-4eb152ed501mr5250710e0c.0.1717446586037; Mon, 03 Jun 2024 13:29:46 -0700 (PDT) Received: from ?IPV6:2a02:2f04:920e:e000:3b36:462:775e:2626? ([2a02:2f04:920e:e000:3b36:462:775e:2626]) by smtp.gmail.com with ESMTPSA id af79cd13be357-794f2efc67csm311044785a.20.2024.06.03.13.29.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 03 Jun 2024 13:29:45 -0700 (PDT) Message-ID: <7edbdb11-5135-4f26-be12-c86f4dc4c0ff@gmail.com> Date: Mon, 3 Jun 2024 23:29:38 +0300 Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 08/12] PCI: imx6: Config look up table(LUT) to support MSI ITS and IOMMU for i.MX95 To: Robin Murphy , Bjorn Helgaas , Frank Li Cc: Richard Zhu , Lucas Stach , Lorenzo Pieralisi , =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Philipp Zabel , Liam Girdwood , Mark Brown , Manivannan Sadhasivam , Krzysztof Kozlowski , Conor Dooley , linux-pci@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, devicetree@vger.kernel.org, Will Deacon , Joerg Roedel , Jason Gunthorpe , Alyssa Rosenzweig , Marc Zyngier References: <20240530230832.GA474962@bhelgaas> <974f1d23-aba8-432e-85b5-0e4b1c2005e7@arm.com> Content-Language: en-US From: Laurentiu Tudor In-Reply-To: <974f1d23-aba8-432e-85b5-0e4b1c2005e7@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 5/31/24 17:58, Robin Murphy wrote: > On 2024-05-31 12:08 am, Bjorn Helgaas wrote: >> [+cc IOMMU and pcie-apple.c folks for comment] >> >> On Tue, May 28, 2024 at 03:39:21PM -0400, Frank Li wrote: >>> For the i.MX95, configuration of a LUT is necessary to convert Bus >>> Device >>> Function (BDF) to stream IDs, which are utilized by both IOMMU and ITS. >>> This involves examining the msi-map and smmu-map to ensure consistent >>> mapping of PCI BDF to the same stream IDs. Subsequently, LUT-related >>> registers are configured. In the absence of an msi-map, the built-in MSI >>> controller is utilized as a fallback. >>> >>> Additionally, register a PCI bus notifier to trigger >>> imx_pcie_add_device() >>> upon the appearance of a new PCI device and when the bus is an iMX6 PCI >>> controller. This function configures the correct LUT based on Device >>> Tree >>> Settings (DTS). >> >> This scheme is pretty similar to apple_pcie_bus_notifier().  If we >> have to do this, I wish it were *more* similar, i.e., copy the >> function names, bitmap tracking, code structure, etc. >> >> I don't really know how stream IDs work, but I assume they are used on >> most or all arm64 platforms, so I'm a little surprised that of all the >> PCI host drivers used on arm64, only pcie-apple.c and pci-imx6.c need >> this notifier. > > This is one of those things that's mostly at the mercy of the PCIe root > complex implementation. Typically the SMMU StreamID and/or GIC ITS > DeviceID is derived directly from the PCI RID, sometimes with additional > high-order bits hard-wired to disambiguate PCI segments. I believe this > RID-translation LUT is a particular feature of the the Synopsys IP - I > know there's also one on the NXP Layerscape platforms, but on those it's > programmed by the bootloader, which also generates the appropriate > "msi-map" and "iommu-map" properties to match. Ideally that's what i.MX > should do as well, but hey. That's usually fine, except when SRIOV and/or hotplug devices (that is, not discoverable at bootloader time) come into play. We came up with this "solution" to cover these more dynamic scenarios. https://source.denx.de/u-boot/u-boot/-/commit/2a5bbb13cc39102a68fcc31056925427ab44b591 --- Best Regards, Laurentiu >> There's this path, which is pretty generic and does at least the >> of_map_id() part of what you're doing in imx_pcie_add_device(): >> >>      __driver_probe_device >>        really_probe >>          pci_dma_configure                       # >> pci_bus_type.dma_configure >>            of_dma_configure >>              of_dma_configure_id >>                of_iommu_configure >>                  of_pci_iommu_init >>                    of_iommu_configure_dev_id >>                      of_map_id >>                      of_iommu_xlate >>                        ops = iommu_ops_from_fwnode >>                        iommu_fwspec_init >>                        ops->of_xlate(dev, iommu_spec) >> >> Maybe this needs to be extended somehow with a hook to do the >> device-specific work like updating the LUT?  Just speculating here, >> the IOMMU folks will know how this is expected to work. > > Note that that particular code path has fundamental issues and much of > it needs to go away (I'm working on it, but it's a rich ~8-year-old pile > of technical debt...). IOMMU configuration needs to be happening at > device_add() time via the IOMMU layer's own bus notifier. > > If it's really necessary to do this programming from Linux, then there's > still no point in it being dynamic - the mappings cannot ever change, > since the rest of the kernel believes that what the DT said at boot time > was already a property of the hardware. It would be a lot more logical, > and likely simpler, for the driver to just read the relevant map > property and program the entire LUT to match, all in one go at > controller probe time. Rather like what's already commonly done with the > parsing of "dma-ranges" to program address-translation LUTs for inbound > windows. > > Plus that would also give a chance of safely dealing with bad DTs > specifying invalid ID mappings (by refusing to probe at all). As it is, > returning an error from a child's BUS_NOTIFY_ADD_DEVICE does nothing > except prevent any further notifiers from running at that point - the > device will still be added, allowed to bind a driver, and able to start > sending DMA/MSI traffic without the controller being correctly > programmed, which at best won't work and at worst may break the whole > system. > > Thanks, > Robin. > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C68DEC25B75 for ; Mon, 3 Jun 2024 20:30:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AzIVIAWRouJQf/Fv/4CJuYzq25Hr9f4qkdMYqIZKj4Q=; b=cjHPgjjEFZvcx6 j4NoUZxUQr31XX4AjG0oEiSDGMAhXkIsGOl8kVFM9dtGM8UACw74W+k0/yNFX5/hlxNQvNg3T3693 BO1KNdSU/WjjlhfyeDnelDVWgOJw3+KsDH+OjBf0lnCDuHU4tm9ti+3fI1TWMy0Pxv5lc6/5prQ5J KnxZY3sHds5Pc0F6wHMKa0OGs2v70uGo2KyjI4n3c8bQHE2vodK3PqAvmxs7pR4rms9dYNRHp+ayR JQHJFQ7MGe5Yi4Op1xxZgjTpF6+aIUOp7Gvw9pARZ5fw6Zqm6tAUW0i927zQLO1mhLxHB1ddUBZ5d 7tzHCHP0H4fr+dU1MTFw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sEEJa-00000000IAf-2sOS; Mon, 03 Jun 2024 20:29:58 +0000 Received: from mail-vs1-xe2c.google.com ([2607:f8b0:4864:20::e2c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sEEJW-00000000I8B-3Gl7 for linux-arm-kernel@lists.infradead.org; Mon, 03 Jun 2024 20:29:56 +0000 Received: by mail-vs1-xe2c.google.com with SMTP id ada2fe7eead31-48bd10e526cso109088137.1 for ; Mon, 03 Jun 2024 13:29:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717446586; x=1718051386; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=5X2AoY/lQVZz1FKCa6KHvqy44zzQ3mhz+ruaolMEMaw=; b=SQmnUMOoXvkQHFYohxrgGKD+OqGHTLywoue4GcrDdS05dr/zlDwbsgoIJz5hoKwd3X Y25bcw9RgWcWt4nGccyq32VFRAMgeCQL/PGbsC/sP4cofUiUI9wul2249Fg95C1MBAJZ nOqLM0dEzFhuSAFs5IHUSDIsSYVRZypdq4hjA6dgBrLWZ5W0/lZ7fuX/kzm1wXt2ZSgP A1VDSkka14b4fDBR1DQQC3BTd2oyoptPnWtqAaQEGjdtNbHU+NYzDGhdrtM8+qUGnIdY LY3mQM1+SAmCB1YldlyIVcbqj5/NBJAOw3YrhflC8wLzoR+1z8XHyEymoou2DAv1YiyD dmJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717446586; x=1718051386; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5X2AoY/lQVZz1FKCa6KHvqy44zzQ3mhz+ruaolMEMaw=; b=F7oo2Chjok18NACmsJZs6z4UAdkyuRE4nl22E2YqCgoDWTEUQWezsKnuC06qh+zgdS 3vJr5b1TY73ILDELmRL/mILYgHxa07NAuVvx3zzR2Wy6oVGvuLrdUmDg/H5+pPeiKsu1 B/roY3yelefY1276oOOgwFaXUOWRCLSZZ4iR4By0N5EPAUI2+T5zbWlZYDGzCqRpe+tA 0K7T+TmjT8O2WRvTkR6K0qzGo7EjzlGaaJ9AKez9ygy5WwBjbjW4rl+njzGfwJmPR11Z JK3yulxUTVN3V44PMWJOvHIKMoWjnGc9XcSnEZ6uILxiuajeu4yR0Zw7sDRgWcBY87FX SzNg== X-Forwarded-Encrypted: i=1; AJvYcCVJgqwdLEICg6yoFuy2mjNS6bdAJdjpATEOq5qFFaaldIxnbVooczHnxqujhtlXr6ybVD6YSvz4tDNB8UNzK15iojhBqZwm+b0r93gC25NgOG3e7HM= X-Gm-Message-State: AOJu0YyFaHfzmMZaIoZhHHvxtKWx4bn1LNMG9ZAmNeisCjN0+lOfNvkP 9UoTH+NX7i4AclYXok+4v3INhOArPSAeG0Hax6u7dlpnRZ3WCGax X-Google-Smtp-Source: AGHT+IGWrKHzvzbDJxYZB9izbaKjENhQiSF4aLl0mt855tkbfFf0g9cOXHABW4R9S8b+9ENLJgRQIw== X-Received: by 2002:a05:6122:309e:b0:4eb:152e:cf92 with SMTP id 71dfb90a1353d-4eb152ed501mr5250710e0c.0.1717446586037; Mon, 03 Jun 2024 13:29:46 -0700 (PDT) Received: from ?IPV6:2a02:2f04:920e:e000:3b36:462:775e:2626? ([2a02:2f04:920e:e000:3b36:462:775e:2626]) by smtp.gmail.com with ESMTPSA id af79cd13be357-794f2efc67csm311044785a.20.2024.06.03.13.29.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 03 Jun 2024 13:29:45 -0700 (PDT) Message-ID: <7edbdb11-5135-4f26-be12-c86f4dc4c0ff@gmail.com> Date: Mon, 3 Jun 2024 23:29:38 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 08/12] PCI: imx6: Config look up table(LUT) to support MSI ITS and IOMMU for i.MX95 To: Robin Murphy , Bjorn Helgaas , Frank Li Cc: Richard Zhu , Lucas Stach , Lorenzo Pieralisi , =?UTF-8?Q?Krzysztof_Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Philipp Zabel , Liam Girdwood , Mark Brown , Manivannan Sadhasivam , Krzysztof Kozlowski , Conor Dooley , linux-pci@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, devicetree@vger.kernel.org, Will Deacon , Joerg Roedel , Jason Gunthorpe , Alyssa Rosenzweig , Marc Zyngier References: <20240530230832.GA474962@bhelgaas> <974f1d23-aba8-432e-85b5-0e4b1c2005e7@arm.com> Content-Language: en-US From: Laurentiu Tudor In-Reply-To: <974f1d23-aba8-432e-85b5-0e4b1c2005e7@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240603_132955_317722_854BD35F X-CRM114-Status: GOOD ( 36.32 ) 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 CgpPbiA1LzMxLzI0IDE3OjU4LCBSb2JpbiBNdXJwaHkgd3JvdGU6Cj4gT24gMjAyNC0wNS0zMSAx MjowOCBhbSwgQmpvcm4gSGVsZ2FhcyB3cm90ZToKPj4gWytjYyBJT01NVSBhbmQgcGNpZS1hcHBs ZS5jIGZvbGtzIGZvciBjb21tZW50XQo+Pgo+PiBPbiBUdWUsIE1heSAyOCwgMjAyNCBhdCAwMzoz OToyMVBNIC0wNDAwLCBGcmFuayBMaSB3cm90ZToKPj4+IEZvciB0aGUgaS5NWDk1LCBjb25maWd1 cmF0aW9uIG9mIGEgTFVUIGlzIG5lY2Vzc2FyeSB0byBjb252ZXJ0IEJ1cyAKPj4+IERldmljZQo+ Pj4gRnVuY3Rpb24gKEJERikgdG8gc3RyZWFtIElEcywgd2hpY2ggYXJlIHV0aWxpemVkIGJ5IGJv dGggSU9NTVUgYW5kIElUUy4KPj4+IFRoaXMgaW52b2x2ZXMgZXhhbWluaW5nIHRoZSBtc2ktbWFw IGFuZCBzbW11LW1hcCB0byBlbnN1cmUgY29uc2lzdGVudAo+Pj4gbWFwcGluZyBvZiBQQ0kgQkRG IHRvIHRoZSBzYW1lIHN0cmVhbSBJRHMuIFN1YnNlcXVlbnRseSwgTFVULXJlbGF0ZWQKPj4+IHJl Z2lzdGVycyBhcmUgY29uZmlndXJlZC4gSW4gdGhlIGFic2VuY2Ugb2YgYW4gbXNpLW1hcCwgdGhl IGJ1aWx0LWluIE1TSQo+Pj4gY29udHJvbGxlciBpcyB1dGlsaXplZCBhcyBhIGZhbGxiYWNrLgo+ Pj4KPj4+IEFkZGl0aW9uYWxseSwgcmVnaXN0ZXIgYSBQQ0kgYnVzIG5vdGlmaWVyIHRvIHRyaWdn ZXIgCj4+PiBpbXhfcGNpZV9hZGRfZGV2aWNlKCkKPj4+IHVwb24gdGhlIGFwcGVhcmFuY2Ugb2Yg YSBuZXcgUENJIGRldmljZSBhbmQgd2hlbiB0aGUgYnVzIGlzIGFuIGlNWDYgUENJCj4+PiBjb250 cm9sbGVyLiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIGNvcnJlY3QgTFVUIGJhc2VkIG9u IERldmljZSAKPj4+IFRyZWUKPj4+IFNldHRpbmdzIChEVFMpLgo+Pgo+PiBUaGlzIHNjaGVtZSBp cyBwcmV0dHkgc2ltaWxhciB0byBhcHBsZV9wY2llX2J1c19ub3RpZmllcigpLsKgIElmIHdlCj4+ IGhhdmUgdG8gZG8gdGhpcywgSSB3aXNoIGl0IHdlcmUgKm1vcmUqIHNpbWlsYXIsIGkuZS4sIGNv cHkgdGhlCj4+IGZ1bmN0aW9uIG5hbWVzLCBiaXRtYXAgdHJhY2tpbmcsIGNvZGUgc3RydWN0dXJl LCBldGMuCj4+Cj4+IEkgZG9uJ3QgcmVhbGx5IGtub3cgaG93IHN0cmVhbSBJRHMgd29yaywgYnV0 IEkgYXNzdW1lIHRoZXkgYXJlIHVzZWQgb24KPj4gbW9zdCBvciBhbGwgYXJtNjQgcGxhdGZvcm1z LCBzbyBJJ20gYSBsaXR0bGUgc3VycHJpc2VkIHRoYXQgb2YgYWxsIHRoZQo+PiBQQ0kgaG9zdCBk cml2ZXJzIHVzZWQgb24gYXJtNjQsIG9ubHkgcGNpZS1hcHBsZS5jIGFuZCBwY2ktaW14Ni5jIG5l ZWQKPj4gdGhpcyBub3RpZmllci4KPiAKPiBUaGlzIGlzIG9uZSBvZiB0aG9zZSB0aGluZ3MgdGhh dCdzIG1vc3RseSBhdCB0aGUgbWVyY3kgb2YgdGhlIFBDSWUgcm9vdCAKPiBjb21wbGV4IGltcGxl bWVudGF0aW9uLiBUeXBpY2FsbHkgdGhlIFNNTVUgU3RyZWFtSUQgYW5kL29yIEdJQyBJVFMgCj4g RGV2aWNlSUQgaXMgZGVyaXZlZCBkaXJlY3RseSBmcm9tIHRoZSBQQ0kgUklELCBzb21ldGltZXMg d2l0aCBhZGRpdGlvbmFsIAo+IGhpZ2gtb3JkZXIgYml0cyBoYXJkLXdpcmVkIHRvIGRpc2FtYmln dWF0ZSBQQ0kgc2VnbWVudHMuIEkgYmVsaWV2ZSB0aGlzIAo+IFJJRC10cmFuc2xhdGlvbiBMVVQg aXMgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb2YgdGhlIHRoZSBTeW5vcHN5cyBJUCAtIEkgCj4ga25v dyB0aGVyZSdzIGFsc28gb25lIG9uIHRoZSBOWFAgTGF5ZXJzY2FwZSBwbGF0Zm9ybXMsIGJ1dCBv biB0aG9zZSBpdCdzIAo+IHByb2dyYW1tZWQgYnkgdGhlIGJvb3Rsb2FkZXIsIHdoaWNoIGFsc28g Z2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSAKPiAibXNpLW1hcCIgYW5kICJpb21tdS1tYXAiIHBy b3BlcnRpZXMgdG8gbWF0Y2guIElkZWFsbHkgdGhhdCdzIHdoYXQgaS5NWCAKPiBzaG91bGQgZG8g YXMgd2VsbCwgYnV0IGhleS4KClRoYXQncyB1c3VhbGx5IGZpbmUsIGV4Y2VwdCB3aGVuIFNSSU9W IGFuZC9vciBob3RwbHVnIGRldmljZXMgKHRoYXQgaXMsIApub3QgZGlzY292ZXJhYmxlIGF0IGJv b3Rsb2FkZXIgdGltZSkgY29tZSBpbnRvIHBsYXkuIFdlIGNhbWUgdXAgd2l0aCAKdGhpcyAic29s dXRpb24iIHRvIGNvdmVyIHRoZXNlIG1vcmUgZHluYW1pYyBzY2VuYXJpb3MuCgpodHRwczovL3Nv dXJjZS5kZW54LmRlL3UtYm9vdC91LWJvb3QvLS9jb21taXQvMmE1YmJiMTNjYzM5MTAyYTY4ZmNj MzEwNTY5MjU0MjdhYjQ0YjU5MQoKLS0tCkJlc3QgUmVnYXJkcywgTGF1cmVudGl1Cgo+PiBUaGVy ZSdzIHRoaXMgcGF0aCwgd2hpY2ggaXMgcHJldHR5IGdlbmVyaWMgYW5kIGRvZXMgYXQgbGVhc3Qg dGhlCj4+IG9mX21hcF9pZCgpIHBhcnQgb2Ygd2hhdCB5b3UncmUgZG9pbmcgaW4gaW14X3BjaWVf YWRkX2RldmljZSgpOgo+Pgo+PiDCoMKgwqDCoCBfX2RyaXZlcl9wcm9iZV9kZXZpY2UKPj4gwqDC oMKgwqDCoMKgIHJlYWxseV9wcm9iZQo+PiDCoMKgwqDCoMKgwqDCoMKgIHBjaV9kbWFfY29uZmln dXJlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIyAKPj4gcGNp X2J1c190eXBlLmRtYV9jb25maWd1cmUKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZfZG1hX2Nv bmZpZ3VyZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZfZG1hX2NvbmZpZ3VyZV9pZAo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mX2lvbW11X2NvbmZpZ3VyZQo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvZl9wY2lfaW9tbXVfaW5pdAo+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZfaW9tbXVfY29uZmlndXJlX2Rldl9pZAo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mX21hcF9pZAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9mX2lvbW11X3hsYXRlCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9wcyA9IGlvbW11 X29wc19mcm9tX2Z3bm9kZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpb21tdV9md3NwZWNfaW5pdAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBvcHMtPm9mX3hsYXRlKGRldiwgaW9tbXVfc3BlYykKPj4KPj4gTWF5 YmUgdGhpcyBuZWVkcyB0byBiZSBleHRlbmRlZCBzb21laG93IHdpdGggYSBob29rIHRvIGRvIHRo ZQo+PiBkZXZpY2Utc3BlY2lmaWMgd29yayBsaWtlIHVwZGF0aW5nIHRoZSBMVVQ/wqAgSnVzdCBz cGVjdWxhdGluZyBoZXJlLAo+PiB0aGUgSU9NTVUgZm9sa3Mgd2lsbCBrbm93IGhvdyB0aGlzIGlz IGV4cGVjdGVkIHRvIHdvcmsuCj4gCj4gTm90ZSB0aGF0IHRoYXQgcGFydGljdWxhciBjb2RlIHBh dGggaGFzIGZ1bmRhbWVudGFsIGlzc3VlcyBhbmQgbXVjaCBvZiAKPiBpdCBuZWVkcyB0byBnbyBh d2F5IChJJ20gd29ya2luZyBvbiBpdCwgYnV0IGl0J3MgYSByaWNoIH44LXllYXItb2xkIHBpbGUg Cj4gb2YgdGVjaG5pY2FsIGRlYnQuLi4pLiBJT01NVSBjb25maWd1cmF0aW9uIG5lZWRzIHRvIGJl IGhhcHBlbmluZyBhdCAKPiBkZXZpY2VfYWRkKCkgdGltZSB2aWEgdGhlIElPTU1VIGxheWVyJ3Mg b3duIGJ1cyBub3RpZmllci4KPiAKPiBJZiBpdCdzIHJlYWxseSBuZWNlc3NhcnkgdG8gZG8gdGhp cyBwcm9ncmFtbWluZyBmcm9tIExpbnV4LCB0aGVuIHRoZXJlJ3MgCj4gc3RpbGwgbm8gcG9pbnQg aW4gaXQgYmVpbmcgZHluYW1pYyAtIHRoZSBtYXBwaW5ncyBjYW5ub3QgZXZlciBjaGFuZ2UsIAo+ IHNpbmNlIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYmVsaWV2ZXMgdGhhdCB3aGF0IHRoZSBEVCBz YWlkIGF0IGJvb3QgdGltZSAKPiB3YXMgYWxyZWFkeSBhIHByb3BlcnR5IG9mIHRoZSBoYXJkd2Fy ZS4gSXQgd291bGQgYmUgYSBsb3QgbW9yZSBsb2dpY2FsLCAKPiBhbmQgbGlrZWx5IHNpbXBsZXIs IGZvciB0aGUgZHJpdmVyIHRvIGp1c3QgcmVhZCB0aGUgcmVsZXZhbnQgbWFwIAo+IHByb3BlcnR5 IGFuZCBwcm9ncmFtIHRoZSBlbnRpcmUgTFVUIHRvIG1hdGNoLCBhbGwgaW4gb25lIGdvIGF0IAo+ IGNvbnRyb2xsZXIgcHJvYmUgdGltZS4gUmF0aGVyIGxpa2Ugd2hhdCdzIGFscmVhZHkgY29tbW9u bHkgZG9uZSB3aXRoIHRoZSAKPiBwYXJzaW5nIG9mICJkbWEtcmFuZ2VzIiB0byBwcm9ncmFtIGFk ZHJlc3MtdHJhbnNsYXRpb24gTFVUcyBmb3IgaW5ib3VuZCAKPiB3aW5kb3dzLgo+IAo+IFBsdXMg dGhhdCB3b3VsZCBhbHNvIGdpdmUgYSBjaGFuY2Ugb2Ygc2FmZWx5IGRlYWxpbmcgd2l0aCBiYWQg RFRzIAo+IHNwZWNpZnlpbmcgaW52YWxpZCBJRCBtYXBwaW5ncyAoYnkgcmVmdXNpbmcgdG8gcHJv YmUgYXQgYWxsKS4gQXMgaXQgaXMsIAo+IHJldHVybmluZyBhbiBlcnJvciBmcm9tIGEgY2hpbGQn cyBCVVNfTk9USUZZX0FERF9ERVZJQ0UgZG9lcyBub3RoaW5nIAo+IGV4Y2VwdCBwcmV2ZW50IGFu eSBmdXJ0aGVyIG5vdGlmaWVycyBmcm9tIHJ1bm5pbmcgYXQgdGhhdCBwb2ludCAtIHRoZSAKPiBk ZXZpY2Ugd2lsbCBzdGlsbCBiZSBhZGRlZCwgYWxsb3dlZCB0byBiaW5kIGEgZHJpdmVyLCBhbmQg YWJsZSB0byBzdGFydCAKPiBzZW5kaW5nIERNQS9NU0kgdHJhZmZpYyB3aXRob3V0IHRoZSBjb250 cm9sbGVyIGJlaW5nIGNvcnJlY3RseSAKPiBwcm9ncmFtbWVkLCB3aGljaCBhdCBiZXN0IHdvbid0 IHdvcmsgYW5kIGF0IHdvcnN0IG1heSBicmVhayB0aGUgd2hvbGUgCj4gc3lzdGVtLgo+IAo+IFRo YW5rcywKPiBSb2Jpbi4KPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IGxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cj4gbGludXgtYXJtLWtl cm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==