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=-2.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 451B9C3A5AB for ; Wed, 4 Sep 2019 20:01:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0D7F022CF7 for ; Wed, 4 Sep 2019 20:01:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="y7zjrTqY" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728238AbfIDUBi (ORCPT ); Wed, 4 Sep 2019 16:01:38 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:41808 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729503AbfIDUBf (ORCPT ); Wed, 4 Sep 2019 16:01:35 -0400 Received: by mail-wr1-f66.google.com with SMTP id j16so99593wrr.8 for ; Wed, 04 Sep 2019 13:01:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=JCNSU8zuFffQH3IN2sAAGv7QBbOUi5d4/dyTjM3iQBA=; b=y7zjrTqYbdm4vAstK7azobzgWjVzIZ5ldkjh4BmXeP0B1mWYubxD1LnX4QmG2eQcJj pB6MjLlbYhk27CRdHfU453vbsVLi6ZpusmXG7SgfxVyZTow36qm6V032keVH3Bx+qQqx BbWWBkiipVzl1S8DKRU7Akt92DtSbFcTElgSTg1Kps6+9nlFxY4W0/CDyPOtVEKs3utO zSft3HDnM1YVJX17Kjl/ONhABuVOLF28eKpu7TvShjaAPbDYNWSSVnnk2iTZq9IZgZUy NeJdx+y932RsNDO9EqlwICezMVuVguJUDD8NM4GIMDY6pPoIP9w37ibntJY+bnR5ah3d /nXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=JCNSU8zuFffQH3IN2sAAGv7QBbOUi5d4/dyTjM3iQBA=; b=aw0TTfZjty/3/v3dzLDxWUANxP12skHzaw+SP86NK7MltP7cgBynpAoB8dFwsDbfT/ Qku2Ad4POEl0khD/eCIUAIqnyEoJ6POHjyCUfJtPPaTgJVXKYuJbOAYZ/7c2IdX7UmZk u31e/gwFgWhx5MQB9KVJXhyoP7ekUwvbV7PC8iHDBlq2D1LmC5G2Sq6H6hpEQozcFHeG MWJUKyZ7CLtut+Z3Ozw05jtleBrk2LwIG/al+1G/A1Lx9j/g87wliUNRV9VJy1S2iwNq 6CVTTl/psbcFRooHPkC1LHVqOP8S5qSZeBtblSQrlDCFfIUr3g0dP9Q6BdTb2c0l5aYH eUAQ== X-Gm-Message-State: APjAAAX7X8V8RvFX3rohmVDka88Z8bEPXEaM5Dm3pO17UcvbXVc78MGE 18fdKKVvS5IwlD9JaLHHddeDhA== X-Google-Smtp-Source: APXvYqyN0dIJyvcBXKxN2V3Fdd9bsbiNhCY2jKRDrvFe/zrl6Y4+0fkbjyiKaEh1bx5ZqmtSI5VP+w== X-Received: by 2002:adf:e947:: with SMTP id m7mr36164812wrn.178.1567627292475; Wed, 04 Sep 2019 13:01:32 -0700 (PDT) Received: from dell ([95.147.198.36]) by smtp.gmail.com with ESMTPSA id b184sm50211wmg.47.2019.09.04.13.01.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 04 Sep 2019 13:01:31 -0700 (PDT) Date: Wed, 4 Sep 2019 21:01:30 +0100 From: Lee Jones To: Bjorn Andersson Cc: agross@kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Subject: Re: [PATCH 1/1] soc: qcom: geni: Provide parameter error checking Message-ID: <20190904200130.GT26880@dell> References: <20190903135052.13827-1-lee.jones@linaro.org> <20190904031922.GC574@tuxbook-pro> <20190904084554.GF26880@dell> <20190904182732.GE574@tuxbook-pro> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190904182732.GE574@tuxbook-pro> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On Wed, 04 Sep 2019, Bjorn Andersson wrote: > On Wed 04 Sep 01:45 PDT 2019, Lee Jones wrote: > > > On Tue, 03 Sep 2019, Bjorn Andersson wrote: > > > > > On Tue 03 Sep 06:50 PDT 2019, Lee Jones wrote: > > > > > > > When booting with ACPI, the Geni Serial Engine is not set as the I2C/SPI > > > > parent and thus, the wrapper (parent device) is unassigned. This causes > > > > the kernel to crash with a null dereference error. > > > > > > > > > > Now I see what you did in 8bc529b25354; i.e. stubbed all the other calls > > > between the SE and wrapper. > > > > > > Do you think it would be possible to resolve the _DEP link to QGP[01] > > > somehow? > > > > I looked at QGP{0,1}, but did not see it represented in the current > > Device Tree implementation and thus failed to identify it. Do you > > know what it is? Does it have a driver in Linux already? > > QGP0 is the same hardware block as &qupv3_id_0, but apparently both are > only representing a smaller part - and different ones. > > But conceptually both represents the wrapper... ... which doesn't actually do anything in the Linux implementation. It only has one register. :) > > > For the clocks workarounds this could be resolved by us > > > representing that relationship using device_link and just rely on > > > pm_runtime to propagate the clock state. > > > > That is not allowed when booting ACPI. The Clock/Regulator frameworks > > are not to be used in this use-case, hence why all of the calls to > > these frameworks are "stubbed out". If we wanted to properly > > implement power management, we would have to create a driver/subsystem > > similar to the "Windows-compatible System Power Management Controller" > > (PEP). Without documentation for the PEP, this would be an impossible > > task. A request for the aforementioned documentation has been put in > > to Lenovo/Qualcomm. Hopefully something appears soon. > > > > I see, so the PEP states needs to be parsed and associated with each > device and we would use pm_runtime to toggle between the states and > device_links to ensure that _DEP nodes are powered in appropriate order. > > That seems reasonable and straight forward and the reliance on > pm_runtime will make the DT case cleaner as well. Essentially yes. The issue is translating the ACPI tables into actions to be taken by the Linux Power Management APIs. Again, we've requested documentation. Now, we wait ... > > > For the DMA operation, iiuc it's the wrapper that implements the DMA > > > engine involved, but I'm guessing the main reason for mapping buffers on > > > the wrapper is so that it ends up being associated with the iommu > > > context of the wrapper. > > > > Judging by the code alone, the wrapper doesn't sound like it does much > > at all. It seems to only have a single (version) register (at least > > that is the only register that's used). The only registers it > > reads/writes are those of the calling device, whether that be I2C, SPI > > or UART. > > > > Device Tree represents the wrapper's relationship with the I2C (and > > SPI/UART) Serial Engine (SE) devices as parent-child ones, with the > > wrapper being the parent and SE the child. Whether this is a true > > representation of the hardware or just a tactic used for convenience > > is not clear, but the same representation does not exist in ACPI. > > > > In the current Linux implementation, the buffer belongs to the SE > > (obtained by the child (e.g. I2C) SE by fetching the parent's > > (wrapper's) device data using the standard platform helpers) but the > > register-set used to control the DMA transactions belong to the SE > > devices. > > > > Yeah, I saw this as well. If all the SEs where the wrappers iommu domain > things should work fine by mapping it on the se->dev, regardless of the > device's being linked together. This is my assumption too. > The remaining relationship to the wrapper would then be reduced to the > read of the version to check for 1.0 or 1.1 hardware in the SPI driver, > which can be replaced by the assumption that we're on 1.1. Also correct. You would be left with a huge duplication of code across each of the SEs however. > > > Are the SMMU contexts at all represented in the ACPI world and if so do > > > you know how the wrapper vs SEs are bound to contexts? Can we map on > > > se->dev when wrapper is NULL (or perhaps always?)? > > > > Yes, the SMMU devices are represented in ACPI (MMU0) and (MMU1). They > > share the same register addresses as the SMMU devices located in > > arch/arm64/boot/dts/qcom/sdm845.dtsi. > > Right but this only describes the IOMMU devices, I don't see any > information about how individual client devices relates to the various > IOMMU contexts. I see some _DEPs which detail the MMU{0,1}, but that's about it. > > With this simple parameter checking patch, the SE falls back to using > > FIFO mode to transmit data and continues to work flawlessly. IMHO > > this should be applied in the first instance, as it fixes a real (null > > dereference) bug which currently resides in the Mainline kernel. > > > > Per the current driver design the wrapper device is the parent of the > SE, I should have seen that 8bc529b25354 was the beginning of a game of > whac-a-mole circumventing this design. Sorry for not spotting this > earlier. Right, but that doesn't mean that the current driver design is correct. ACPI, which is in theory a description of the hardware doesn't seem to think so. It looks more like we do this in Linux as a convenience function to link the devices. Instead this 'parent' seems to be represented as a very small register space at the end of the SE banks. > But if this is the one whack left to get the thing to boot then I think > we should merge it. Amazing, thank you! Do you know how we go about getting this merged? We only potentially have 0.5 weeks (1.5 weeks if there is an -rc8 [doubtful]), so we need to move fast. Would you be prepared to send it to Linus for -fixes? I'd do it myself, but this is a little out of my remit. Nothing heard from Andy for a very long time. > > Moving forward we can try to come up with a suitable plan to implement > > DMA in the ACPI use-case - but again, this is feature adding work > > which should be carried out against -next, where as this patch needs > > to go in via the current -rcs ASAP. > > Sounds good. Great. -- Lee Jones [李琼斯] Linaro Services Technical Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog 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=-2.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6157C3A5A9 for ; Wed, 4 Sep 2019 20:01:46 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7580922CED for ; Wed, 4 Sep 2019 20:01:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="A3c8aTfn"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="y7zjrTqY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7580922CED Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MVMMb3hVb80WH7ev2kUjuiQnT68ugxaDbTOTSLipXiU=; b=A3c8aTfnwGsGWl A3uDO2qU7WJLZwooYiE0eP9lzlbpw7Jgye8mapj+8ajHVwA5XVR60jwxPW1RWc4aDIuM6q1Lg96TS gYaRL8vmd5lEARGNtMjoAXAa5v/asR9kRrfJ17RGfSfx9oSwcP/7pjqbXceB/6hMBUWZJfcajsO4n ORaRWuE3MIfxdgFI0qcuclCfg3ax7eruYUiFZxcWQzG5wMDkvEXwYHHB6+lFw7lkDpnOjBfr33oNH Y3U9Ylk2zIza7pu9VnCdBm2V3P5al5HEOEABGDer08gmRKL8Zk38jCuYe7s/JC9EwzvQZikUprAwI RDb+Yjc1esfhEPPhERXQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i5bTH-0002tm-R7; Wed, 04 Sep 2019 20:01:39 +0000 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i5bTE-0002tF-CQ for linux-arm-kernel@lists.infradead.org; Wed, 04 Sep 2019 20:01:38 +0000 Received: by mail-wr1-x443.google.com with SMTP id y19so127245wrd.3 for ; Wed, 04 Sep 2019 13:01:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=JCNSU8zuFffQH3IN2sAAGv7QBbOUi5d4/dyTjM3iQBA=; b=y7zjrTqYbdm4vAstK7azobzgWjVzIZ5ldkjh4BmXeP0B1mWYubxD1LnX4QmG2eQcJj pB6MjLlbYhk27CRdHfU453vbsVLi6ZpusmXG7SgfxVyZTow36qm6V032keVH3Bx+qQqx BbWWBkiipVzl1S8DKRU7Akt92DtSbFcTElgSTg1Kps6+9nlFxY4W0/CDyPOtVEKs3utO zSft3HDnM1YVJX17Kjl/ONhABuVOLF28eKpu7TvShjaAPbDYNWSSVnnk2iTZq9IZgZUy NeJdx+y932RsNDO9EqlwICezMVuVguJUDD8NM4GIMDY6pPoIP9w37ibntJY+bnR5ah3d /nXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=JCNSU8zuFffQH3IN2sAAGv7QBbOUi5d4/dyTjM3iQBA=; b=ucO5EGONN/FTNrYYTpXHhL0ZaOiRUnyaObM1OcM0SLRTGXsnpnZ6StMDIQE9xvS+6M YBYzTAn4yuni6vHECUR+DAOQtP7Q3amWVBMMD/27HUAf4ZX0KvR0bxTPlv4Ja/ITPzgw UhQc0k3Uy8X02ks7/U2ml7HzyCFJfIsZU4UMA1nqWNMTetMEfgkF628MiEJ6Y3bY41hR DjU6fB8dVLcuKOu0zXShM+4xy55NZ5p498gyIzzB//h2TOz0BxjDJypbuuMjSE//Bs2k r/clkw8p0l72MvLASWh9E3Mu83k6t82k34vXjFAd4cq7OJ3CA0GR2SR2+y14qyFgzgCe CFOw== X-Gm-Message-State: APjAAAX7UxlaTnuqfMTv9A8/doRGyArpzBfpky5lEso+KteU9PO8RI8x YxSdIhyHctsf+N+CRcz+P0lHYpBe3Gg= X-Google-Smtp-Source: APXvYqyN0dIJyvcBXKxN2V3Fdd9bsbiNhCY2jKRDrvFe/zrl6Y4+0fkbjyiKaEh1bx5ZqmtSI5VP+w== X-Received: by 2002:adf:e947:: with SMTP id m7mr36164812wrn.178.1567627292475; Wed, 04 Sep 2019 13:01:32 -0700 (PDT) Received: from dell ([95.147.198.36]) by smtp.gmail.com with ESMTPSA id b184sm50211wmg.47.2019.09.04.13.01.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 04 Sep 2019 13:01:31 -0700 (PDT) Date: Wed, 4 Sep 2019 21:01:30 +0100 From: Lee Jones To: Bjorn Andersson Subject: Re: [PATCH 1/1] soc: qcom: geni: Provide parameter error checking Message-ID: <20190904200130.GT26880@dell> References: <20190903135052.13827-1-lee.jones@linaro.org> <20190904031922.GC574@tuxbook-pro> <20190904084554.GF26880@dell> <20190904182732.GE574@tuxbook-pro> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190904182732.GE574@tuxbook-pro> User-Agent: Mutt/1.9.4 (2018-02-28) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190904_130136_426450_ADE87E89 X-CRM114-Status: GOOD ( 41.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-msm@vger.kernel.org, agross@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCAwNCBTZXAgMjAxOSwgQmpvcm4gQW5kZXJzc29uIHdyb3RlOgoKPiBPbiBXZWQgMDQg U2VwIDAxOjQ1IFBEVCAyMDE5LCBMZWUgSm9uZXMgd3JvdGU6Cj4gCj4gPiBPbiBUdWUsIDAzIFNl cCAyMDE5LCBCam9ybiBBbmRlcnNzb24gd3JvdGU6Cj4gPiAKPiA+ID4gT24gVHVlIDAzIFNlcCAw Njo1MCBQRFQgMjAxOSwgTGVlIEpvbmVzIHdyb3RlOgo+ID4gPiAKPiA+ID4gPiBXaGVuIGJvb3Rp bmcgd2l0aCBBQ1BJLCB0aGUgR2VuaSBTZXJpYWwgRW5naW5lIGlzIG5vdCBzZXQgYXMgdGhlIEky Qy9TUEkKPiA+ID4gPiBwYXJlbnQgYW5kIHRodXMsIHRoZSB3cmFwcGVyIChwYXJlbnQgZGV2aWNl KSBpcyB1bmFzc2lnbmVkLiAgVGhpcyBjYXVzZXMKPiA+ID4gPiB0aGUga2VybmVsIHRvIGNyYXNo IHdpdGggYSBudWxsIGRlcmVmZXJlbmNlIGVycm9yLgo+ID4gPiA+IAo+ID4gPiAKPiA+ID4gTm93 IEkgc2VlIHdoYXQgeW91IGRpZCBpbiA4YmM1MjliMjUzNTQ7IGkuZS4gc3R1YmJlZCBhbGwgdGhl IG90aGVyIGNhbGxzCj4gPiA+IGJldHdlZW4gdGhlIFNFIGFuZCB3cmFwcGVyLgo+ID4gPiAKPiA+ ID4gRG8geW91IHRoaW5rIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIHJlc29sdmUgdGhlIF9ERVAg bGluayB0byBRR1BbMDFdCj4gPiA+IHNvbWVob3c/Cj4gPiAKPiA+IEkgbG9va2VkIGF0IFFHUHsw LDF9LCBidXQgZGlkIG5vdCBzZWUgaXQgcmVwcmVzZW50ZWQgaW4gdGhlIGN1cnJlbnQKPiA+IERl dmljZSBUcmVlIGltcGxlbWVudGF0aW9uIGFuZCB0aHVzIGZhaWxlZCB0byBpZGVudGlmeSBpdC4g IERvIHlvdQo+ID4ga25vdyB3aGF0IGl0IGlzPyAgRG9lcyBpdCBoYXZlIGEgZHJpdmVyIGluIExp bnV4IGFscmVhZHk/Cj4gCj4gUUdQMCBpcyB0aGUgc2FtZSBoYXJkd2FyZSBibG9jayBhcyAmcXVw djNfaWRfMCwgYnV0IGFwcGFyZW50bHkgYm90aCBhcmUKPiBvbmx5IHJlcHJlc2VudGluZyBhIHNt YWxsZXIgcGFydCAtIGFuZCBkaWZmZXJlbnQgb25lcy4KPiAKPiBCdXQgY29uY2VwdHVhbGx5IGJv dGggcmVwcmVzZW50cyB0aGUgd3JhcHBlci4uLgoKLi4uIHdoaWNoIGRvZXNuJ3QgYWN0dWFsbHkg ZG8gYW55dGhpbmcgaW4gdGhlIExpbnV4IGltcGxlbWVudGF0aW9uLgoKSXQgb25seSBoYXMgb25l IHJlZ2lzdGVyLiA6KQoKPiA+ID4gRm9yIHRoZSBjbG9ja3Mgd29ya2Fyb3VuZHMgdGhpcyBjb3Vs ZCBiZSByZXNvbHZlZCBieSB1cwo+ID4gPiByZXByZXNlbnRpbmcgdGhhdCByZWxhdGlvbnNoaXAg dXNpbmcgZGV2aWNlX2xpbmsgYW5kIGp1c3QgcmVseSBvbgo+ID4gPiBwbV9ydW50aW1lIHRvIHBy b3BhZ2F0ZSB0aGUgY2xvY2sgc3RhdGUuCj4gPiAKPiA+IFRoYXQgaXMgbm90IGFsbG93ZWQgd2hl biBib290aW5nIEFDUEkuICBUaGUgQ2xvY2svUmVndWxhdG9yIGZyYW1ld29ya3MKPiA+IGFyZSBu b3QgdG8gYmUgdXNlZCBpbiB0aGlzIHVzZS1jYXNlLCBoZW5jZSB3aHkgYWxsIG9mIHRoZSBjYWxs cyB0bwo+ID4gdGhlc2UgZnJhbWV3b3JrcyBhcmUgInN0dWJiZWQgb3V0Ii4gIElmIHdlIHdhbnRl ZCB0byBwcm9wZXJseQo+ID4gaW1wbGVtZW50IHBvd2VyIG1hbmFnZW1lbnQsIHdlIHdvdWxkIGhh dmUgdG8gY3JlYXRlIGEgZHJpdmVyL3N1YnN5c3RlbQo+ID4gc2ltaWxhciB0byB0aGUgIldpbmRv d3MtY29tcGF0aWJsZSBTeXN0ZW0gUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyIgo+ID4gKFBF UCkuICBXaXRob3V0IGRvY3VtZW50YXRpb24gZm9yIHRoZSBQRVAsIHRoaXMgd291bGQgYmUgYW4g aW1wb3NzaWJsZQo+ID4gdGFzay4gIEEgcmVxdWVzdCBmb3IgdGhlIGFmb3JlbWVudGlvbmVkIGRv Y3VtZW50YXRpb24gaGFzIGJlZW4gcHV0IGluCj4gPiB0byBMZW5vdm8vUXVhbGNvbW0uICBIb3Bl ZnVsbHkgc29tZXRoaW5nIGFwcGVhcnMgc29vbi4KPiA+IAo+IAo+IEkgc2VlLCBzbyB0aGUgUEVQ IHN0YXRlcyBuZWVkcyB0byBiZSBwYXJzZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCBlYWNoCj4gZGV2 aWNlIGFuZCB3ZSB3b3VsZCB1c2UgcG1fcnVudGltZSB0byB0b2dnbGUgYmV0d2VlbiB0aGUgc3Rh dGVzIGFuZAo+IGRldmljZV9saW5rcyB0byBlbnN1cmUgdGhhdCBfREVQIG5vZGVzIGFyZSBwb3dl cmVkIGluIGFwcHJvcHJpYXRlIG9yZGVyLgo+IAo+IFRoYXQgc2VlbXMgcmVhc29uYWJsZSBhbmQg c3RyYWlnaHQgZm9yd2FyZCBhbmQgdGhlIHJlbGlhbmNlIG9uCj4gcG1fcnVudGltZSB3aWxsIG1h a2UgdGhlIERUIGNhc2UgY2xlYW5lciBhcyB3ZWxsLgoKRXNzZW50aWFsbHkgeWVzLiAgVGhlIGlz c3VlIGlzIHRyYW5zbGF0aW5nIHRoZSBBQ1BJIHRhYmxlcyBpbnRvCmFjdGlvbnMgdG8gYmUgdGFr ZW4gYnkgdGhlIExpbnV4IFBvd2VyIE1hbmFnZW1lbnQgQVBJcy4gIEFnYWluLCB3ZSd2ZQpyZXF1 ZXN0ZWQgZG9jdW1lbnRhdGlvbi4gIE5vdywgd2Ugd2FpdCAuLi4KCj4gPiA+IEZvciB0aGUgRE1B IG9wZXJhdGlvbiwgaWl1YyBpdCdzIHRoZSB3cmFwcGVyIHRoYXQgaW1wbGVtZW50cyB0aGUgRE1B Cj4gPiA+IGVuZ2luZSBpbnZvbHZlZCwgYnV0IEknbSBndWVzc2luZyB0aGUgbWFpbiByZWFzb24g Zm9yIG1hcHBpbmcgYnVmZmVycyBvbgo+ID4gPiB0aGUgd3JhcHBlciBpcyBzbyB0aGF0IGl0IGVu ZHMgdXAgYmVpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBpb21tdQo+ID4gPiBjb250ZXh0IG9mIHRo ZSB3cmFwcGVyLgo+ID4gCj4gPiBKdWRnaW5nIGJ5IHRoZSBjb2RlIGFsb25lLCB0aGUgd3JhcHBl ciBkb2Vzbid0IHNvdW5kIGxpa2UgaXQgZG9lcyBtdWNoCj4gPiBhdCBhbGwuICBJdCBzZWVtcyB0 byBvbmx5IGhhdmUgYSBzaW5nbGUgKHZlcnNpb24pIHJlZ2lzdGVyIChhdCBsZWFzdAo+ID4gdGhh dCBpcyB0aGUgb25seSByZWdpc3RlciB0aGF0J3MgdXNlZCkuICBUaGUgb25seSByZWdpc3RlcnMg aXQKPiA+IHJlYWRzL3dyaXRlcyBhcmUgdGhvc2Ugb2YgdGhlIGNhbGxpbmcgZGV2aWNlLCB3aGV0 aGVyIHRoYXQgYmUgSTJDLCBTUEkKPiA+IG9yIFVBUlQuCj4gPiAKPiA+IERldmljZSBUcmVlIHJl cHJlc2VudHMgdGhlIHdyYXBwZXIncyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgSTJDIChhbmQKPiA+ IFNQSS9VQVJUKSBTZXJpYWwgRW5naW5lIChTRSkgZGV2aWNlcyBhcyBwYXJlbnQtY2hpbGQgb25l cywgd2l0aCB0aGUKPiA+IHdyYXBwZXIgYmVpbmcgdGhlIHBhcmVudCBhbmQgU0UgdGhlIGNoaWxk LiAgV2hldGhlciB0aGlzIGlzIGEgdHJ1ZQo+ID4gcmVwcmVzZW50YXRpb24gb2YgdGhlIGhhcmR3 YXJlIG9yIGp1c3QgYSB0YWN0aWMgdXNlZCBmb3IgY29udmVuaWVuY2UKPiA+IGlzIG5vdCBjbGVh ciwgYnV0IHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGV4aXN0IGluIEFDUEkuCj4g PiAKPiA+IEluIHRoZSBjdXJyZW50IExpbnV4IGltcGxlbWVudGF0aW9uLCB0aGUgYnVmZmVyIGJl bG9uZ3MgdG8gdGhlIFNFCj4gPiAob2J0YWluZWQgYnkgdGhlIGNoaWxkIChlLmcuIEkyQykgU0Ug YnkgZmV0Y2hpbmcgdGhlIHBhcmVudCdzCj4gPiAod3JhcHBlcidzKSBkZXZpY2UgZGF0YSB1c2lu ZyB0aGUgc3RhbmRhcmQgcGxhdGZvcm0gaGVscGVycykgYnV0IHRoZQo+ID4gcmVnaXN0ZXItc2V0 IHVzZWQgdG8gY29udHJvbCB0aGUgRE1BIHRyYW5zYWN0aW9ucyBiZWxvbmcgdG8gdGhlIFNFCj4g PiBkZXZpY2VzLgo+ID4gCj4gCj4gWWVhaCwgSSBzYXcgdGhpcyBhcyB3ZWxsLiBJZiBhbGwgdGhl IFNFcyB3aGVyZSB0aGUgd3JhcHBlcnMgaW9tbXUgZG9tYWluCj4gdGhpbmdzIHNob3VsZCB3b3Jr IGZpbmUgYnkgbWFwcGluZyBpdCBvbiB0aGUgc2UtPmRldiwgcmVnYXJkbGVzcyBvZiB0aGUKPiBk ZXZpY2UncyBiZWluZyBsaW5rZWQgdG9nZXRoZXIuCgpUaGlzIGlzIG15IGFzc3VtcHRpb24gdG9v LgoKPiBUaGUgcmVtYWluaW5nIHJlbGF0aW9uc2hpcCB0byB0aGUgd3JhcHBlciB3b3VsZCB0aGVu IGJlIHJlZHVjZWQgdG8gdGhlCj4gcmVhZCBvZiB0aGUgdmVyc2lvbiB0byBjaGVjayBmb3IgMS4w IG9yIDEuMSBoYXJkd2FyZSBpbiB0aGUgU1BJIGRyaXZlciwKPiB3aGljaCBjYW4gYmUgcmVwbGFj ZWQgYnkgdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSdyZSBvbiAxLjEuCgpBbHNvIGNvcnJlY3QuICBZ b3Ugd291bGQgYmUgbGVmdCB3aXRoIGEgaHVnZSBkdXBsaWNhdGlvbiBvZiBjb2RlCmFjcm9zcyBl YWNoIG9mIHRoZSBTRXMgaG93ZXZlci4KCj4gPiA+IEFyZSB0aGUgU01NVSBjb250ZXh0cyBhdCBh bGwgcmVwcmVzZW50ZWQgaW4gdGhlIEFDUEkgd29ybGQgYW5kIGlmIHNvIGRvCj4gPiA+IHlvdSBr bm93IGhvdyB0aGUgd3JhcHBlciB2cyBTRXMgYXJlIGJvdW5kIHRvIGNvbnRleHRzPyBDYW4gd2Ug bWFwIG9uCj4gPiA+IHNlLT5kZXYgd2hlbiB3cmFwcGVyIGlzIE5VTEwgKG9yIHBlcmhhcHMgYWx3 YXlzPyk/Cj4gPiAKPiA+IFllcywgdGhlIFNNTVUgZGV2aWNlcyBhcmUgcmVwcmVzZW50ZWQgaW4g QUNQSSAoTU1VMCkgYW5kIChNTVUxKS4gIFRoZXkKPiA+IHNoYXJlIHRoZSBzYW1lIHJlZ2lzdGVy IGFkZHJlc3NlcyBhcyB0aGUgU01NVSBkZXZpY2VzIGxvY2F0ZWQgaW4KPiA+IGFyY2gvYXJtNjQv Ym9vdC9kdHMvcWNvbS9zZG04NDUuZHRzaS4KPiAKPiBSaWdodCBidXQgdGhpcyBvbmx5IGRlc2Ny aWJlcyB0aGUgSU9NTVUgZGV2aWNlcywgSSBkb24ndCBzZWUgYW55Cj4gaW5mb3JtYXRpb24gYWJv dXQgaG93IGluZGl2aWR1YWwgY2xpZW50IGRldmljZXMgcmVsYXRlcyB0byB0aGUgdmFyaW91cwo+ IElPTU1VIGNvbnRleHRzLgoKSSBzZWUgc29tZSBfREVQcyB3aGljaCBkZXRhaWwgdGhlIE1NVXsw LDF9LCBidXQgdGhhdCdzIGFib3V0IGl0LgoKPiA+IFdpdGggdGhpcyBzaW1wbGUgcGFyYW1ldGVy IGNoZWNraW5nIHBhdGNoLCB0aGUgU0UgZmFsbHMgYmFjayB0byB1c2luZwo+ID4gRklGTyBtb2Rl IHRvIHRyYW5zbWl0IGRhdGEgYW5kIGNvbnRpbnVlcyB0byB3b3JrIGZsYXdsZXNzbHkuICBJTUhP Cj4gPiB0aGlzIHNob3VsZCBiZSBhcHBsaWVkIGluIHRoZSBmaXJzdCBpbnN0YW5jZSwgYXMgaXQg Zml4ZXMgYSByZWFsIChudWxsCj4gPiBkZXJlZmVyZW5jZSkgYnVnIHdoaWNoIGN1cnJlbnRseSBy ZXNpZGVzIGluIHRoZSBNYWlubGluZSBrZXJuZWwuCj4gPiAKPiAKPiBQZXIgdGhlIGN1cnJlbnQg ZHJpdmVyIGRlc2lnbiB0aGUgd3JhcHBlciBkZXZpY2UgaXMgdGhlIHBhcmVudCBvZiB0aGUKPiBT RSwgSSBzaG91bGQgaGF2ZSBzZWVuIHRoYXQgOGJjNTI5YjI1MzU0IHdhcyB0aGUgYmVnaW5uaW5n IG9mIGEgZ2FtZSBvZgo+IHdoYWMtYS1tb2xlIGNpcmN1bXZlbnRpbmcgdGhpcyBkZXNpZ24uIFNv cnJ5IGZvciBub3Qgc3BvdHRpbmcgdGhpcwo+IGVhcmxpZXIuCgpSaWdodCwgYnV0IHRoYXQgZG9l c24ndCBtZWFuIHRoYXQgdGhlIGN1cnJlbnQgZHJpdmVyIGRlc2lnbiBpcwpjb3JyZWN0LiAgQUNQ SSwgd2hpY2ggaXMgaW4gdGhlb3J5IGEgZGVzY3JpcHRpb24gb2YgdGhlIGhhcmR3YXJlCmRvZXNu J3Qgc2VlbSB0byB0aGluayBzby4gIEl0IGxvb2tzIG1vcmUgbGlrZSB3ZSBkbyB0aGlzIGluIExp bnV4IGFzIGEKY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbGluayB0aGUgZGV2aWNlcy4gIEluc3Rl YWQgdGhpcyAncGFyZW50JyBzZWVtcwp0byBiZSByZXByZXNlbnRlZCBhcyBhIHZlcnkgc21hbGwg cmVnaXN0ZXIgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgU0UKYmFua3MuCgo+IEJ1dCBpZiB0aGlz IGlzIHRoZSBvbmUgd2hhY2sgbGVmdCB0byBnZXQgdGhlIHRoaW5nIHRvIGJvb3QgdGhlbiBJIHRo aW5rCj4gd2Ugc2hvdWxkIG1lcmdlIGl0LgoKQW1hemluZywgdGhhbmsgeW91IQoKRG8geW91IGtu b3cgaG93IHdlIGdvIGFib3V0IGdldHRpbmcgdGhpcyBtZXJnZWQ/ICBXZSBvbmx5IHBvdGVudGlh bGx5CmhhdmUgMC41IHdlZWtzICgxLjUgd2Vla3MgaWYgdGhlcmUgaXMgYW4gLXJjOCBbZG91YnRm dWxdKSwgc28gd2UgbmVlZAp0byBtb3ZlIGZhc3QuICBXb3VsZCB5b3UgYmUgcHJlcGFyZWQgdG8g c2VuZCBpdCB0byBMaW51cyBmb3IgLWZpeGVzPwpJJ2QgZG8gaXQgbXlzZWxmLCBidXQgdGhpcyBp cyBhIGxpdHRsZSBvdXQgb2YgbXkgcmVtaXQuCgpOb3RoaW5nIGhlYXJkIGZyb20gQW5keSBmb3Ig YSB2ZXJ5IGxvbmcgdGltZS4KCj4gPiBNb3ZpbmcgZm9yd2FyZCB3ZSBjYW4gdHJ5IHRvIGNvbWUg dXAgd2l0aCBhIHN1aXRhYmxlIHBsYW4gdG8gaW1wbGVtZW50Cj4gPiBETUEgaW4gdGhlIEFDUEkg dXNlLWNhc2UgLSBidXQgYWdhaW4sIHRoaXMgaXMgZmVhdHVyZSBhZGRpbmcgd29yawo+ID4gd2hp Y2ggc2hvdWxkIGJlIGNhcnJpZWQgb3V0IGFnYWluc3QgLW5leHQsIHdoZXJlIGFzIHRoaXMgcGF0 Y2ggbmVlZHMKPiA+IHRvIGdvIGluIHZpYSB0aGUgY3VycmVudCAtcmNzIEFTQVAuCj4gCj4gU291 bmRzIGdvb2QuCgpHcmVhdC4KCi0tIApMZWUgSm9uZXMgW+adjueQvOaWr10KTGluYXJvIFNlcnZp Y2VzIFRlY2huaWNhbCBMZWFkCkxpbmFyby5vcmcg4pSCIE9wZW4gc291cmNlIHNvZnR3YXJlIGZv ciBBUk0gU29DcwpGb2xsb3cgTGluYXJvOiBGYWNlYm9vayB8IFR3aXR0ZXIgfCBCbG9nCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==