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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 EB51CCD4F54 for ; Fri, 29 May 2026 18:04:23 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4E4D811237E; Fri, 29 May 2026 18:04:23 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; secure) header.d=sntech.de header.i=@sntech.de header.b="iKvGZWeA"; dkim-atps=neutral Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) by gabe.freedesktop.org (Postfix) with ESMTPS id D4B3D11237E for ; Fri, 29 May 2026 18:04:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=JqoWqM560NgOyBoJArt872roHXO7vVZ5JRvRtTr4UX4=; b=iKvGZWeASddt48GOlMPuIIeRMZ pfRwHJhRCcNkLDl4TjmaSF9g/aqPjeOQfTwHYyBHseFaK0nhg5yZZHqmguq8+MziFtOkOBgEv/ymk ibVly8UMhek/4Sgti3OKZaJeHAD44KEzRA73Rc6qjODs71Vw6VBDj5Rs24WjyJ+zBCzdc7APjRGQf Y6IDAMppRYBry5Ak6UJfvA/CgRJfuy8fuIo3WBM2z5w5hQh0+JPllz99Q37n/6ZFMm0ICd1WSHec7 V6UkD99MOfO3g6Al/p6FSrl9cdWxZWYClOyhnrUDPQBJDD2lxmNsyEkXfp8VRJjD+WizBk8dZFxls VN+eTiaw==; From: Heiko Stuebner To: Tomeu Vizoso , Oded Gabbay , MidG971 Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Midgy BALON Subject: Re: [PATCH v2 0/4] accel: rocket: Add RK3568 NPU support Date: Fri, 29 May 2026 20:04:17 +0200 Message-ID: <9739310.nlapOpYt14@phil> In-Reply-To: <20260529155824.3099831-1-midgy971@gmail.com> References: <20260529155824.3099831-1-midgy971@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi, Am Freitag, 29. Mai 2026, 17:58:20 Mitteleurop=C3=A4ische Sommerzeit schrie= b MidG971: > From: Midgy BALON >=20 > This series adds Rockchip RK3568 support to the upstream Rocket accel > driver (drivers/accel/rocket/), tested on a Radxa ROCK 3B board running > Linux 6.19-rc5. >=20 > The RK3568 carries a single NVDLA-derived NPU core (0.8 TOPS), the same > IP family as the three-core RK3588 NPU already supported by the driver. > The hardware register layout (pc/cna/core regions, interrupt, IOMMU) is > identical; the differences are: >=20 > - 32-bit DMA address limit (NPU AXI bus and IOMMU page walker are 32-bi= t) > - Requires explicit PVTPLL initialisation via two TF-A SCMI calls before > the NPU NOC bus can be de-idled > - Requires explicit PMU writes to power on the NPU domain (because the > RK3568 power domain RK3568_PD_NPU is always_on so the generic > pm-domains callback is a no-op) and de-idle the NPU NOC bus >=20 > Patch 1 introduces a per-SoC rocket_soc_data abstraction (dma_bits and > optional noc_init callback) plumbed via of_device_get_match_data(), and > adds RK3568 SoC support on top of it. The DMA mask for the parent > DRM facade device is chosen based on the narrowest core present > (32-bit if any RK3568 core is in the system). >=20 > Patch 2 documents the new rk3568-rknn-core compatible and the > rockchip,pmu phandle that RK3568 requires; the sram-supply property > becomes conditional (RK3588-only). >=20 > Patches 3-4 add the RK3568 NPU and IOMMU nodes to rk356x-base.dtsi and > enable them on the Radxa ROCK 3B. >=20 > Verified on Radxa ROCK 3B (RK3568, 8 GB RAM): > - /dev/accel/accel0 created at boot > - dmesg: "Rockchip NPU core 0 version: 0" > - IOMMU domain attached per open() > - Job submission path complete: regcmd reaches the NPU's program > controller, PC processes all 135 regcmd entries, broadcasts to > sub-units, and advances to BSP-equivalent completion state > (PC_TASKST=3D0x11000) >=20 > Status of end-to-end inference: NOT YET WORKING. After 12 days of what about the iommu side, aka the parts mentioned in https://lore.kernel.org/linux-rockchip/5663593b-2c53-4632-ad2c-db9efa8e9ab2= @rock-chips.com/ does that is in some way responsible for the not-yet-working state? Also in general, we don't want to merge partially working code. Either things work, or they don't, especially as right now you wouldn't even know if it's your code that is wrong, or some other part that needs changes. Also please reduce those novel-sized (generated) texts. =46or the cover-letter alone I'd need a fireplace, an armchair and a hot cocoa to fully parse it. Heiko > investigation comparing rocket's behaviour against the vendor BSP RKNPU > driver, the NPU's MMIO state at submission time matches BSP byte-for-byte > (CNA configs, sub-unit OP_ENABLE registers, CBUF_CON0, etc.) but no > sub-unit transitions to its EXECUTER state and the completion IRQ never > fires. The kernel driver and DT infrastructure in this series stand on > their own =E2=80=94 the driver loads, IOMMU domain is attached, regcmd re= aches > the NPU, PC state machine matches BSP =E2=80=94 but a mesa-side regcmd is= sue > (or another piece we have not yet found) blocks the final conv firing. >=20 > I am sending this series now because the kernel and DT pieces are > self-contained, verifiable, and ready for review. A separate RFC on > mesa-dev will follow with the userspace findings. Detailed investigation > notes are available on request; relevant highlights for the maintainer: >=20 > 1. Mesa rocket userspace (src/gallium/drivers/rocket/) targets RK3588. > For RK3568, several encoded values need adjustment. Most notably, > sub-unit OP_ENABLE register offset on RK3568 is 0x_00c, not 0x_008. > Mesa emits writes at 0x1008/0x2008/0x3008/0x4008/0x5008 =E2=80=94 BSP = regcmd > captures show no writes at these offsets across two distinct conv > shapes (YOLOv5s 6x6/s2 and MobileNet 3x3/s2). BSP writes OP_ENABLE > at offset 0x_00c with multi-bit values (CMAC=3D0x1, ACCU=3D0x0, DPU=3D= 0x108, > DPU_RDMA=3D0x13f), not bit-0 booleans. This and a handful of other > shape-independent value differences will be filed as a mesa RFC. >=20 > 2. The vendor BSP RKNPU driver writes the userspace task_base_addr to > PC_DMA_BASE_ADDR (PC offset 0x34); the rocket driver did not. PC's > TASK_DMA engine reads struct rknpu_task descriptors from there. With > task_pp_en=3D1 in TASK_CON and a kernel-allocated descriptor BO, > PC's task counter state machine advances from "stuck at 0xf000" to > the BSP completion state. This is the most invasive piece of the > investigation and is held back for a follow-on patch (not in this > series); the current series gets the driver to a working /dev/accel/ > node and an attached IOMMU domain, which is the right shape for v2. >=20 > 3. The NPU's master AXI port is 32-bit, but dma_alloc_coherent() through > the dma-iommu framework silently ignores GFP_DMA32 even with a 32-bit > dma_mask set on the device. When BOs for the NPU are allocated kernel- > side, __get_free_pages(GFP_DMA32 | __GFP_ZERO, order) + dma_map_single= () > is the working pattern. Not in this series, but might be a useful > documentation note for other 32-bit AXI accelerators using dma-iommu. > > This series builds against current v6.19-rc5 with no checkpatch warnings, > the dtb builds, and dtbs_check passes. The April v1 series included a > fifth patch ("Use of_find_matching_node() instead of for_each_of_allnodes= ") > which is no longer required =E2=80=94 upstream rocket already uses > for_each_compatible_node() since v6.19-rc5. >=20 > Changes since v1 (April 2026, never sent on-list): > - Rebased to v6.19-rc5 > - Patch 1 absorbed v1 patch 1 (obsolete) and now includes the > rocket_soc_data abstraction needed to support both RK3568 and > RK3588 cores in the same driver > - Cover letter expanded with current investigation status >=20 > Assisted by Claude Sonnet/Opus 4.x throughout the investigation. All > findings empirically verified via BSP register captures and side-by-side > rocket execution traces on the same board. >=20 > Midgy BALON (4): > accel: rocket: Add support for Rockchip RK3568 > dt-bindings: npu: rockchip,rk3588-rknn-core: Add RK3568 support > arm64: dts: rockchip: rk356x: Add NPU and its IOMMU > arm64: dts: rockchip: rk3568-rock-3b: Enable NPU >=20 > Documentation/devicetree/bindings/npu/rockchip,rk3588-rknn-core.yaml | 1= 8 ++++++++++++++-- > arch/arm64/boot/dts/rockchip/rk356x-base.dtsi | 3= 1 +++++++++++++++++++++++++++ > arch/arm64/boot/dts/rockchip/rk3568-rock-3b.dts | = 9 ++++++++ > drivers/accel/rocket/rocket_core.c | 2= 1 +++++++++++++++++- > drivers/accel/rocket/rocket_core.h | 1= 8 ++++++++++++++-- > drivers/accel/rocket/rocket_device.c | 2= 3 +++++++++++++++++-- > drivers/accel/rocket/rocket_drv.c | 7= 9 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 7 files changed, 192 insertions(+), 7 deletions(-) >=20 >=20 > Midgy BALON (4): > accel: rocket: Add support for Rockchip RK3568 > dt-bindings: npu: rockchip,rk3588-rknn-core: Add RK3568 support > arm64: dts: rockchip: rk356x: Add NPU and its IOMMU > arm64: dts: rockchip: rk3568-rock-3b: Enable NPU >=20 > .../npu/rockchip,rk3588-rknn-core.yaml | 18 ++++- > .../boot/dts/rockchip/rk3568-rock-3b.dts | 9 +++ > arch/arm64/boot/dts/rockchip/rk356x-base.dtsi | 31 ++++++++ > drivers/accel/rocket/rocket_core.c | 18 ++++- > drivers/accel/rocket/rocket_core.h | 16 +++++ > drivers/accel/rocket/rocket_device.c | 25 ++++++- > drivers/accel/rocket/rocket_drv.c | 71 ++++++++++++++++++- > 7 files changed, 182 insertions(+), 6 deletions(-) >=20 >=20 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 95DF4CD4F54 for ; Fri, 29 May 2026 18:04:43 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=J57ptioEdFTLJbpSPm6835nC0C/Xj70+SS3BAoV0nYI=; b=vOy/S42gT9boHz Gw8Y0o+WqQn74vMBjp7WreZYCmCrzuMjBUPrYW697SX5T180gz9Ou/K7M2HTb3ZZ45tiMUxDp95id PUFCbs16MDXYlsrSmQW/PDUFEG8BVVBj87DfxGU35OzNWX+WlEDsOuZKOvBeRePA38Q07J8bH/g8R yQOqMQdVZiDZU8uoPKI/riSz1WG7IANEyDGJKIvA8eqFXA9hMKxGkxrdR19+5WaiNJBpjg5JivRi+ YgIG22W2kpLnjbvp2PTh/Gr/ueq3HT1qY+vX/XO0na9CX2NrJTQV7MsD4eV3rfC53zdeCoe56i4MG yaaVRE0yEAh6WiYYFRQQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wT1ZK-000000084Iu-46xJ; Fri, 29 May 2026 18:04:26 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wT1ZG-000000084Hl-3kvM; Fri, 29 May 2026 18:04:24 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sntech.de; s=gloria202408; h=Content-Type:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Reply-To; bh=JqoWqM560NgOyBoJArt872roHXO7vVZ5JRvRtTr4UX4=; b=iKvGZWeASddt48GOlMPuIIeRMZ pfRwHJhRCcNkLDl4TjmaSF9g/aqPjeOQfTwHYyBHseFaK0nhg5yZZHqmguq8+MziFtOkOBgEv/ymk ibVly8UMhek/4Sgti3OKZaJeHAD44KEzRA73Rc6qjODs71Vw6VBDj5Rs24WjyJ+zBCzdc7APjRGQf Y6IDAMppRYBry5Ak6UJfvA/CgRJfuy8fuIo3WBM2z5w5hQh0+JPllz99Q37n/6ZFMm0ICd1WSHec7 V6UkD99MOfO3g6Al/p6FSrl9cdWxZWYClOyhnrUDPQBJDD2lxmNsyEkXfp8VRJjD+WizBk8dZFxls VN+eTiaw==; From: Heiko Stuebner To: Tomeu Vizoso , Oded Gabbay , MidG971 Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, Midgy BALON Subject: Re: [PATCH v2 0/4] accel: rocket: Add RK3568 NPU support Date: Fri, 29 May 2026 20:04:17 +0200 Message-ID: <9739310.nlapOpYt14@phil> In-Reply-To: <20260529155824.3099831-1-midgy971@gmail.com> References: <20260529155824.3099831-1-midgy971@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260529_110423_093179_44F6D474 X-CRM114-Status: GOOD ( 36.03 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGksCgpBbSBGcmVpdGFnLCAyOS4gTWFpIDIwMjYsIDE3OjU4OjIwIE1pdHRlbGV1cm9ww6Rpc2No ZSBTb21tZXJ6ZWl0IHNjaHJpZWIgTWlkRzk3MToKPiBGcm9tOiBNaWRneSBCQUxPTiA8bWlkZ3k5 NzFAZ21haWwuY29tPgo+IAo+IFRoaXMgc2VyaWVzIGFkZHMgUm9ja2NoaXAgUkszNTY4IHN1cHBv cnQgdG8gdGhlIHVwc3RyZWFtIFJvY2tldCBhY2NlbAo+IGRyaXZlciAoZHJpdmVycy9hY2NlbC9y b2NrZXQvKSwgdGVzdGVkIG9uIGEgUmFkeGEgUk9DSyAzQiBib2FyZCBydW5uaW5nCj4gTGludXgg Ni4xOS1yYzUuCj4gCj4gVGhlIFJLMzU2OCBjYXJyaWVzIGEgc2luZ2xlIE5WRExBLWRlcml2ZWQg TlBVIGNvcmUgKDAuOCBUT1BTKSwgdGhlIHNhbWUKPiBJUCBmYW1pbHkgYXMgdGhlIHRocmVlLWNv cmUgUkszNTg4IE5QVSBhbHJlYWR5IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgo+IFRoZSBoYXJk d2FyZSByZWdpc3RlciBsYXlvdXQgKHBjL2NuYS9jb3JlIHJlZ2lvbnMsIGludGVycnVwdCwgSU9N TVUpIGlzCj4gaWRlbnRpY2FsOyB0aGUgZGlmZmVyZW5jZXMgYXJlOgo+IAo+ICAgLSAzMi1iaXQg RE1BIGFkZHJlc3MgbGltaXQgKE5QVSBBWEkgYnVzIGFuZCBJT01NVSBwYWdlIHdhbGtlciBhcmUg MzItYml0KQo+ICAgLSBSZXF1aXJlcyBleHBsaWNpdCBQVlRQTEwgaW5pdGlhbGlzYXRpb24gdmlh IHR3byBURi1BIFNDTUkgY2FsbHMgYmVmb3JlCj4gICAgIHRoZSBOUFUgTk9DIGJ1cyBjYW4gYmUg ZGUtaWRsZWQKPiAgIC0gUmVxdWlyZXMgZXhwbGljaXQgUE1VIHdyaXRlcyB0byBwb3dlciBvbiB0 aGUgTlBVIGRvbWFpbiAoYmVjYXVzZSB0aGUKPiAgICAgUkszNTY4IHBvd2VyIGRvbWFpbiBSSzM1 NjhfUERfTlBVIGlzIGFsd2F5c19vbiBzbyB0aGUgZ2VuZXJpYwo+ICAgICBwbS1kb21haW5zIGNh bGxiYWNrIGlzIGEgbm8tb3ApIGFuZCBkZS1pZGxlIHRoZSBOUFUgTk9DIGJ1cwo+IAo+IFBhdGNo IDEgaW50cm9kdWNlcyBhIHBlci1Tb0Mgcm9ja2V0X3NvY19kYXRhIGFic3RyYWN0aW9uIChkbWFf Yml0cyBhbmQKPiBvcHRpb25hbCBub2NfaW5pdCBjYWxsYmFjaykgcGx1bWJlZCB2aWEgb2ZfZGV2 aWNlX2dldF9tYXRjaF9kYXRhKCksIGFuZAo+IGFkZHMgUkszNTY4IFNvQyBzdXBwb3J0IG9uIHRv cCBvZiBpdC4gIFRoZSBETUEgbWFzayBmb3IgdGhlIHBhcmVudAo+IERSTSBmYWNhZGUgZGV2aWNl IGlzIGNob3NlbiBiYXNlZCBvbiB0aGUgbmFycm93ZXN0IGNvcmUgcHJlc2VudAo+ICgzMi1iaXQg aWYgYW55IFJLMzU2OCBjb3JlIGlzIGluIHRoZSBzeXN0ZW0pLgo+IAo+IFBhdGNoIDIgZG9jdW1l bnRzIHRoZSBuZXcgcmszNTY4LXJrbm4tY29yZSBjb21wYXRpYmxlIGFuZCB0aGUKPiByb2NrY2hp cCxwbXUgcGhhbmRsZSB0aGF0IFJLMzU2OCByZXF1aXJlczsgdGhlIHNyYW0tc3VwcGx5IHByb3Bl cnR5Cj4gYmVjb21lcyBjb25kaXRpb25hbCAoUkszNTg4LW9ubHkpLgo+IAo+IFBhdGNoZXMgMy00 IGFkZCB0aGUgUkszNTY4IE5QVSBhbmQgSU9NTVUgbm9kZXMgdG8gcmszNTZ4LWJhc2UuZHRzaSBh bmQKPiBlbmFibGUgdGhlbSBvbiB0aGUgUmFkeGEgUk9DSyAzQi4KPiAKPiBWZXJpZmllZCBvbiBS YWR4YSBST0NLIDNCIChSSzM1NjgsIDggR0IgUkFNKToKPiAgIC0gL2Rldi9hY2NlbC9hY2NlbDAg Y3JlYXRlZCBhdCBib290Cj4gICAtIGRtZXNnOiAiUm9ja2NoaXAgTlBVIGNvcmUgMCB2ZXJzaW9u OiAwIgo+ICAgLSBJT01NVSBkb21haW4gYXR0YWNoZWQgcGVyIG9wZW4oKQo+ICAgLSBKb2Igc3Vi bWlzc2lvbiBwYXRoIGNvbXBsZXRlOiByZWdjbWQgcmVhY2hlcyB0aGUgTlBVJ3MgcHJvZ3JhbQo+ ICAgICBjb250cm9sbGVyLCBQQyBwcm9jZXNzZXMgYWxsIDEzNSByZWdjbWQgZW50cmllcywgYnJv YWRjYXN0cyB0bwo+ICAgICBzdWItdW5pdHMsIGFuZCBhZHZhbmNlcyB0byBCU1AtZXF1aXZhbGVu dCBjb21wbGV0aW9uIHN0YXRlCj4gICAgIChQQ19UQVNLU1Q9MHgxMTAwMCkKPiAKPiBTdGF0dXMg b2YgZW5kLXRvLWVuZCBpbmZlcmVuY2U6IE5PVCBZRVQgV09SS0lORy4gIEFmdGVyIDEyIGRheXMg b2YKCndoYXQgYWJvdXQgdGhlIGlvbW11IHNpZGUsIGFrYSB0aGUgcGFydHMgbWVudGlvbmVkIGlu Cmh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LXJvY2tjaGlwLzU2NjM1OTNiLTJjNTMtNDYz Mi1hZDJjLWRiOWVmYThlOWFiMkByb2NrLWNoaXBzLmNvbS8KCmRvZXMgdGhhdCBpcyBpbiBzb21l IHdheSByZXNwb25zaWJsZSBmb3IgdGhlIG5vdC15ZXQtd29ya2luZyBzdGF0ZT8KCgpBbHNvIGlu IGdlbmVyYWwsIHdlIGRvbid0IHdhbnQgdG8gbWVyZ2UgcGFydGlhbGx5IHdvcmtpbmcgY29kZS4K RWl0aGVyIHRoaW5ncyB3b3JrLCBvciB0aGV5IGRvbid0LCBlc3BlY2lhbGx5IGFzIHJpZ2h0IG5v dyB5b3Ugd291bGRuJ3QKZXZlbiBrbm93IGlmIGl0J3MgeW91ciBjb2RlIHRoYXQgaXMgd3Jvbmcs IG9yIHNvbWUgb3RoZXIgcGFydCB0aGF0IG5lZWRzCmNoYW5nZXMuCgpBbHNvIHBsZWFzZSByZWR1 Y2UgdGhvc2Ugbm92ZWwtc2l6ZWQgKGdlbmVyYXRlZCkgdGV4dHMuCkZvciB0aGUgY292ZXItbGV0 dGVyIGFsb25lIEknZCBuZWVkIGEgZmlyZXBsYWNlLCBhbiBhcm1jaGFpciBhbmQgYQpob3QgY29j b2EgdG8gZnVsbHkgcGFyc2UgaXQuCgoKSGVpa28KCj4gaW52ZXN0aWdhdGlvbiBjb21wYXJpbmcg cm9ja2V0J3MgYmVoYXZpb3VyIGFnYWluc3QgdGhlIHZlbmRvciBCU1AgUktOUFUKPiBkcml2ZXIs IHRoZSBOUFUncyBNTUlPIHN0YXRlIGF0IHN1Ym1pc3Npb24gdGltZSBtYXRjaGVzIEJTUCBieXRl LWZvci1ieXRlCj4gKENOQSBjb25maWdzLCBzdWItdW5pdCBPUF9FTkFCTEUgcmVnaXN0ZXJzLCBD QlVGX0NPTjAsIGV0Yy4pIGJ1dCBubwo+IHN1Yi11bml0IHRyYW5zaXRpb25zIHRvIGl0cyBFWEVD VVRFUiBzdGF0ZSBhbmQgdGhlIGNvbXBsZXRpb24gSVJRIG5ldmVyCj4gZmlyZXMuICBUaGUga2Vy bmVsIGRyaXZlciBhbmQgRFQgaW5mcmFzdHJ1Y3R1cmUgaW4gdGhpcyBzZXJpZXMgc3RhbmQgb24K PiB0aGVpciBvd24g4oCUIHRoZSBkcml2ZXIgbG9hZHMsIElPTU1VIGRvbWFpbiBpcyBhdHRhY2hl ZCwgcmVnY21kIHJlYWNoZXMKPiB0aGUgTlBVLCBQQyBzdGF0ZSBtYWNoaW5lIG1hdGNoZXMgQlNQ IOKAlCBidXQgYSBtZXNhLXNpZGUgcmVnY21kIGlzc3VlCj4gKG9yIGFub3RoZXIgcGllY2Ugd2Ug aGF2ZSBub3QgeWV0IGZvdW5kKSBibG9ja3MgdGhlIGZpbmFsIGNvbnYgZmlyaW5nLgo+IAo+IEkg YW0gc2VuZGluZyB0aGlzIHNlcmllcyBub3cgYmVjYXVzZSB0aGUga2VybmVsIGFuZCBEVCBwaWVj ZXMgYXJlCj4gc2VsZi1jb250YWluZWQsIHZlcmlmaWFibGUsIGFuZCByZWFkeSBmb3IgcmV2aWV3 LiAgQSBzZXBhcmF0ZSBSRkMgb24KPiBtZXNhLWRldiB3aWxsIGZvbGxvdyB3aXRoIHRoZSB1c2Vy c3BhY2UgZmluZGluZ3MuICBEZXRhaWxlZCBpbnZlc3RpZ2F0aW9uCj4gbm90ZXMgYXJlIGF2YWls YWJsZSBvbiByZXF1ZXN0OyByZWxldmFudCBoaWdobGlnaHRzIGZvciB0aGUgbWFpbnRhaW5lcjoK PiAKPiAxLiBNZXNhIHJvY2tldCB1c2Vyc3BhY2UgKHNyYy9nYWxsaXVtL2RyaXZlcnMvcm9ja2V0 LykgdGFyZ2V0cyBSSzM1ODguCj4gICAgRm9yIFJLMzU2OCwgc2V2ZXJhbCBlbmNvZGVkIHZhbHVl cyBuZWVkIGFkanVzdG1lbnQuICBNb3N0IG5vdGFibHksCj4gICAgc3ViLXVuaXQgT1BfRU5BQkxF IHJlZ2lzdGVyIG9mZnNldCBvbiBSSzM1NjggaXMgMHhfMDBjLCBub3QgMHhfMDA4Lgo+ICAgIE1l c2EgZW1pdHMgd3JpdGVzIGF0IDB4MTAwOC8weDIwMDgvMHgzMDA4LzB4NDAwOC8weDUwMDgg4oCU IEJTUCByZWdjbWQKPiAgICBjYXB0dXJlcyBzaG93IG5vIHdyaXRlcyBhdCB0aGVzZSBvZmZzZXRz IGFjcm9zcyB0d28gZGlzdGluY3QgY29udgo+ICAgIHNoYXBlcyAoWU9MT3Y1cyA2eDYvczIgYW5k IE1vYmlsZU5ldCAzeDMvczIpLiAgQlNQIHdyaXRlcyBPUF9FTkFCTEUKPiAgICBhdCBvZmZzZXQg MHhfMDBjIHdpdGggbXVsdGktYml0IHZhbHVlcyAoQ01BQz0weDEsIEFDQ1U9MHgwLCBEUFU9MHgx MDgsCj4gICAgRFBVX1JETUE9MHgxM2YpLCBub3QgYml0LTAgYm9vbGVhbnMuICBUaGlzIGFuZCBh IGhhbmRmdWwgb2Ygb3RoZXIKPiAgICBzaGFwZS1pbmRlcGVuZGVudCB2YWx1ZSBkaWZmZXJlbmNl cyB3aWxsIGJlIGZpbGVkIGFzIGEgbWVzYSBSRkMuCj4gCj4gMi4gVGhlIHZlbmRvciBCU1AgUktO UFUgZHJpdmVyIHdyaXRlcyB0aGUgdXNlcnNwYWNlIHRhc2tfYmFzZV9hZGRyIHRvCj4gICAgUENf RE1BX0JBU0VfQUREUiAoUEMgb2Zmc2V0IDB4MzQpOyB0aGUgcm9ja2V0IGRyaXZlciBkaWQgbm90 LiAgUEMncwo+ICAgIFRBU0tfRE1BIGVuZ2luZSByZWFkcyBzdHJ1Y3QgcmtucHVfdGFzayBkZXNj cmlwdG9ycyBmcm9tIHRoZXJlLiAgV2l0aAo+ICAgIHRhc2tfcHBfZW49MSBpbiBUQVNLX0NPTiBh bmQgYSBrZXJuZWwtYWxsb2NhdGVkIGRlc2NyaXB0b3IgQk8sCj4gICAgUEMncyB0YXNrIGNvdW50 ZXIgc3RhdGUgbWFjaGluZSBhZHZhbmNlcyBmcm9tICJzdHVjayBhdCAweGYwMDAiIHRvCj4gICAg dGhlIEJTUCBjb21wbGV0aW9uIHN0YXRlLiAgVGhpcyBpcyB0aGUgbW9zdCBpbnZhc2l2ZSBwaWVj ZSBvZiB0aGUKPiAgICBpbnZlc3RpZ2F0aW9uIGFuZCBpcyBoZWxkIGJhY2sgZm9yIGEgZm9sbG93 LW9uIHBhdGNoIChub3QgaW4gdGhpcwo+ICAgIHNlcmllcyk7IHRoZSBjdXJyZW50IHNlcmllcyBn ZXRzIHRoZSBkcml2ZXIgdG8gYSB3b3JraW5nIC9kZXYvYWNjZWwvCj4gICAgbm9kZSBhbmQgYW4g YXR0YWNoZWQgSU9NTVUgZG9tYWluLCB3aGljaCBpcyB0aGUgcmlnaHQgc2hhcGUgZm9yIHYyLgo+ IAo+IDMuIFRoZSBOUFUncyBtYXN0ZXIgQVhJIHBvcnQgaXMgMzItYml0LCBidXQgZG1hX2FsbG9j X2NvaGVyZW50KCkgdGhyb3VnaAo+ICAgIHRoZSBkbWEtaW9tbXUgZnJhbWV3b3JrIHNpbGVudGx5 IGlnbm9yZXMgR0ZQX0RNQTMyIGV2ZW4gd2l0aCBhIDMyLWJpdAo+ICAgIGRtYV9tYXNrIHNldCBv biB0aGUgZGV2aWNlLiAgV2hlbiBCT3MgZm9yIHRoZSBOUFUgYXJlIGFsbG9jYXRlZCBrZXJuZWwt Cj4gICAgc2lkZSwgX19nZXRfZnJlZV9wYWdlcyhHRlBfRE1BMzIgfCBfX0dGUF9aRVJPLCBvcmRl cikgKyBkbWFfbWFwX3NpbmdsZSgpCj4gICAgaXMgdGhlIHdvcmtpbmcgcGF0dGVybi4gIE5vdCBp biB0aGlzIHNlcmllcywgYnV0IG1pZ2h0IGJlIGEgdXNlZnVsCj4gICAgZG9jdW1lbnRhdGlvbiBu b3RlIGZvciBvdGhlciAzMi1iaXQgQVhJIGFjY2VsZXJhdG9ycyB1c2luZyBkbWEtaW9tbXUuCj4K PiBUaGlzIHNlcmllcyBidWlsZHMgYWdhaW5zdCBjdXJyZW50IHY2LjE5LXJjNSB3aXRoIG5vIGNo ZWNrcGF0Y2ggd2FybmluZ3MsCj4gdGhlIGR0YiBidWlsZHMsIGFuZCBkdGJzX2NoZWNrIHBhc3Nl cy4gIFRoZSBBcHJpbCB2MSBzZXJpZXMgaW5jbHVkZWQgYQo+IGZpZnRoIHBhdGNoICgiVXNlIG9m X2ZpbmRfbWF0Y2hpbmdfbm9kZSgpIGluc3RlYWQgb2YgZm9yX2VhY2hfb2ZfYWxsbm9kZXMiKQo+ IHdoaWNoIGlzIG5vIGxvbmdlciByZXF1aXJlZCDigJQgdXBzdHJlYW0gcm9ja2V0IGFscmVhZHkg dXNlcwo+IGZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZSgpIHNpbmNlIHY2LjE5LXJjNS4KPiAKPiBD aGFuZ2VzIHNpbmNlIHYxIChBcHJpbCAyMDI2LCBuZXZlciBzZW50IG9uLWxpc3QpOgo+ICAgLSBS ZWJhc2VkIHRvIHY2LjE5LXJjNQo+ICAgLSBQYXRjaCAxIGFic29yYmVkIHYxIHBhdGNoIDEgKG9i c29sZXRlKSBhbmQgbm93IGluY2x1ZGVzIHRoZQo+ICAgICByb2NrZXRfc29jX2RhdGEgYWJzdHJh Y3Rpb24gbmVlZGVkIHRvIHN1cHBvcnQgYm90aCBSSzM1NjggYW5kCj4gICAgIFJLMzU4OCBjb3Jl cyBpbiB0aGUgc2FtZSBkcml2ZXIKPiAgIC0gQ292ZXIgbGV0dGVyIGV4cGFuZGVkIHdpdGggY3Vy cmVudCBpbnZlc3RpZ2F0aW9uIHN0YXR1cwo+IAo+IEFzc2lzdGVkIGJ5IENsYXVkZSBTb25uZXQv T3B1cyA0LnggdGhyb3VnaG91dCB0aGUgaW52ZXN0aWdhdGlvbi4gIEFsbAo+IGZpbmRpbmdzIGVt cGlyaWNhbGx5IHZlcmlmaWVkIHZpYSBCU1AgcmVnaXN0ZXIgY2FwdHVyZXMgYW5kIHNpZGUtYnkt c2lkZQo+IHJvY2tldCBleGVjdXRpb24gdHJhY2VzIG9uIHRoZSBzYW1lIGJvYXJkLgo+IAo+IE1p ZGd5IEJBTE9OICg0KToKPiAgIGFjY2VsOiByb2NrZXQ6IEFkZCBzdXBwb3J0IGZvciBSb2NrY2hp cCBSSzM1NjgKPiAgIGR0LWJpbmRpbmdzOiBucHU6IHJvY2tjaGlwLHJrMzU4OC1ya25uLWNvcmU6 IEFkZCBSSzM1Njggc3VwcG9ydAo+ICAgYXJtNjQ6IGR0czogcm9ja2NoaXA6IHJrMzU2eDogQWRk IE5QVSBhbmQgaXRzIElPTU1VCj4gICBhcm02NDogZHRzOiByb2NrY2hpcDogcmszNTY4LXJvY2st M2I6IEVuYWJsZSBOUFUKPiAKPiAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25w dS9yb2NrY2hpcCxyazM1ODgtcmtubi1jb3JlLnlhbWwgfCAxOCArKysrKysrKysrKysrKy0tCj4g IGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTZ4LWJhc2UuZHRzaSAgICAgICAgICAg ICAgICAgICAgICAgIHwgMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGFyY2gvYXJt NjQvYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXJvY2stM2IuZHRzICAgICAgICAgICAgICAgICAg ICAgIHwgIDkgKysrKysrKysKPiAgZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2NvcmUuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMSArKysrKysrKysrKysrKysrKy0K PiAgZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2NvcmUuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAxOCArKysrKysrKysrKysrKy0tCj4gIGRyaXZlcnMvYWNjZWwvcm9j a2V0L3JvY2tldF9kZXZpY2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjMg KysrKysrKysrKysrKysrKystLQo+ICBkcml2ZXJzL2FjY2VsL3JvY2tldC9yb2NrZXRfZHJ2LmMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDc5ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMTkyIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCj4gCj4gCj4gTWlkZ3kg QkFMT04gKDQpOgo+ICAgYWNjZWw6IHJvY2tldDogQWRkIHN1cHBvcnQgZm9yIFJvY2tjaGlwIFJL MzU2OAo+ICAgZHQtYmluZGluZ3M6IG5wdTogcm9ja2NoaXAscmszNTg4LXJrbm4tY29yZTogQWRk IFJLMzU2OCBzdXBwb3J0Cj4gICBhcm02NDogZHRzOiByb2NrY2hpcDogcmszNTZ4OiBBZGQgTlBV IGFuZCBpdHMgSU9NTVUKPiAgIGFybTY0OiBkdHM6IHJvY2tjaGlwOiByazM1Njgtcm9jay0zYjog RW5hYmxlIE5QVQo+IAo+ICAuLi4vbnB1L3JvY2tjaGlwLHJrMzU4OC1ya25uLWNvcmUueWFtbCAg ICAgICAgfCAxOCArKysrLQo+ICAuLi4vYm9vdC9kdHMvcm9ja2NoaXAvcmszNTY4LXJvY2stM2Iu ZHRzICAgICAgfCAgOSArKysKPiAgYXJjaC9hcm02NC9ib290L2R0cy9yb2NrY2hpcC9yazM1Nngt YmFzZS5kdHNpIHwgMzEgKysrKysrKysKPiAgZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0X2Nv cmUuYyAgICAgICAgICAgIHwgMTggKysrKy0KPiAgZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9ja2V0 X2NvcmUuaCAgICAgICAgICAgIHwgMTYgKysrKysKPiAgZHJpdmVycy9hY2NlbC9yb2NrZXQvcm9j a2V0X2RldmljZS5jICAgICAgICAgIHwgMjUgKysrKysrLQo+ICBkcml2ZXJzL2FjY2VsL3JvY2tl dC9yb2NrZXRfZHJ2LmMgICAgICAgICAgICAgfCA3MSArKysrKysrKysrKysrKysrKystCj4gIDcg ZmlsZXMgY2hhbmdlZCwgMTgyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCj4gCj4gCgoK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgt cm9ja2NoaXAgbWFpbGluZyBsaXN0CkxpbnV4LXJvY2tjaGlwQGxpc3RzLmluZnJhZGVhZC5vcmcK aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hp cAo=