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 EBD51CCF2E3 for ; Mon, 19 Oct 2026 13:54:57 +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=+oZ2GNG3wDdNEVMgJfBmVlw5U1nsanQh1xp9GbOzT6w=; b=B1BayiAEqrvGgj iA7ZBh2mmQD2eU9nf2SXfl2S27MXxgUN2VCc3z5iyWRDICLMp0H6JVLqC65BIx2/nCObsuezkPXVx v15ikaOvn0HmkKD9RpxiDhAHu09xGzmiogolfDFl1OeZEjvyuags6unGyp9tJKqlip6eVLfiamOhD u1/JZ6XL3b76Iyx+wh9wNsU+YPfpxgiRHNCZ6vlGQ5Fz2hYbhAsroSjv4L/VAU7x7QZIogJZaVO2z T5IjJr3uSxQsPKb07x6wzx+ZkIDFFZ3CZrXkEVuaeHw3Yn1JEldUmCaEVnbBISLaz2UN+pfoiNqPK rcTeUggTpI0vyRYlKPNQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInpD-00000007ZdK-216q; Mon, 19 Oct 2026 13:54:51 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInp8-00000007Zab-1Kzm; Mon, 19 Oct 2026 13:54:46 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 04A4543E45; Mon, 19 Oct 2026 13:54:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CC7211F000C6; Mon, 19 Oct 2026 13:54:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418085; bh=8MyCnyVjuDkCWTOXbthwEjWPs5nnvJurQGBkZhq41Es=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JtNuvU1NhYBWSPhnBiEPSYR0S8U8E8YBpUwWS0ruyLRDrfkAWp4b53mGXDpaP6xxZ /l2ZvVrnwFUcdCKu3LfYzORQ717YdHXz8TuNvnBW3ewcX7RcoJoC9WPiOu5FZWrfqk UVoLq1hE4wNYTA5PUmMt4o9ENnnbna7kjIcV2E1jtjGpUgRM6ESQM/vrPK72wHfdlF ZBKJZZ5MNaqalmmeiVJKVbW3t7DdDmLJ+sDaPWyHXLmJGbFDlzgZdjQzsrbdxWylmP A72WaoXaLY5XmdqRNGx+4bBY/0TQb3fLLlIJMaQbhyWgLJx01gdl9OjJtP/ymfYo3i +o1j/VncrdXRg== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Jiaxing Hu , Will Deacon , Sasha Levin , joro@8bytes.org, heiko@sntech.de, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-5.10] iommu/rockchip: Clear stale page faults before enabling stall Date: Mon, 19 Oct 2026 09:44:53 -0400 Message-ID: <20261019135441.1420968-2-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 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 RnJvbTogSmlheGluZyBIdSA8Z2FoaW5nQGdhaGluZ3dvby5jb20+CgpbIFVwc3RyZWFtIGNvbW1p dCBiMTBkNTkyMGNhZmEyOTJlZTNjYWI5YzIwZjgxM2RhNGZlNGYwMGI4IF0KCkJvb3QgZmlybXdh cmUgY2FuIGxlYXZlIGFuIElPTU1VIGJhbmsgaW4gUEFHRV9GQVVMVF9BQ1RJVkUgYmVmb3JlIHRo ZQpkcml2ZXIgaGFzIGNvbmZpZ3VyZWQgcGFnaW5nOgoKICBQQUdFX0ZBVUxUX0FDVElWRT0xICBT VEFMTF9BQ1RJVkU9MCAgSURMRT0xCgpTdWNoIGEgYmFuayBpZ25vcmVzIENNRF9FTkFCTEVfU1RB TEwgYW5kIG5ldmVyIHJlYWNoZXMgU1RBTExfQUNUSVZFLCBzbwpya19pb21tdV9lbmFibGVfc3Rh bGwoKSdzIHJlYWR4X3BvbGxfdGltZW91dCgpIHNwaW5zIHVudGlsIGl0IHRpbWVzIG91dAooc2Vl biBvbiB0aGUgUkszNTc2IE5QVSwgd2hvc2UgTU1VcyBzaGFyZSB0aGlzIHBvbGwgYWNyb3NzIGJh bmtzKS4KClJhdGhlciB0aGFuIHNwZWNpYWwtY2FzaW5nIHRoZXNlIGJhbmtzIGluIHRoZSBzdGFs bCBwYXRoLCBhY2tub3dsZWRnZSB0aGUKc3RhbGUgZmF1bHQgd2l0aCBDTURfUEFHRV9GQVVMVF9E T05FIGJlZm9yZSBlbmFibGluZyBzdGFsbCwgc28gZXZlcnkgYmFuawpzdGFydHMgZnJvbSBhIGNs ZWFuIHN0YXRlIGFuZCB0aGUgbm9ybWFsIHN0YWxsIHNlcXVlbmNlIGFwcGxpZXMgdG8gYWxsIG9m CnRoZW0uICBCYW5rcyB3aXRob3V0IGEgcGVuZGluZyBmYXVsdCBhcmUgdW50b3VjaGVkLgoKU2ln bmVkLW9mZi1ieTogSmlheGluZyBIdSA8Z2FoaW5nQGdhaGluZ3dvby5jb20+ClNpZ25lZC1vZmYt Ynk6IFdpbGwgRGVhY29uIDx3aWxsQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IFNhc2hhIExl dmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0tCgpMTE0gR2VuZXJhdGVkIGV4cGxhbmF0aW9ucywg bWF5IGJlIGNvbXBsZXRlbHkgYm9ndXM6CgpUaGUgbG9jYWwgY2hlY2tvdXQgaXMgbWFpbmxpbmUg Kio3LjMtcmM0KiouIFRoZSBzdGFsbC10aW1lb3V0IHBhdGggaXMgaW4KdGhpcyB0cmVlLCBhbmQg dGhlIDEzLWxpbmUgZmlybXdhcmUgbGVmdG92ZXIgd29ya2Fyb3VuZCBpcyBhIHJlYWwgSU9NTVUK ZW5hYmxlIGZhaWx1cmUsIG5vdCBhIG5ldyBBUEkuCgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhBU0UgMTogQ09NTUlUIE1F U1NBR0UgRk9SRU5TSUNTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoKKipTdGVwIDEuMTogUEFSU0UgVEhFIFNVQkpFQ1QgTElO RSoqClJlY29yZDogKipbaW9tbXUvcm9ja2NoaXBdIFtDbGVhcl0gW2Fja25vd2xlZGdlIGxlZnRv dmVyClBBR0VfRkFVTFRfQUNUSVZFIHNvIHN0YWxsIGVuYWJsZSBkb2VzIG5vdCBwb2xsLXRpbWVv dXRdKioKCioqU3RlcCAxLjI6IFBBUlNFIEFMTCBDT01NSVQgTUVTU0FHRSBUQUdTKioKUmVjb3Jk OgotIFNpZ25lZC1vZmYtYnk6IEppYXhpbmcgSHUgXDxnYWhpbmdAZ2FoaW5nd29vLmNvbVw+IChh dXRob3IpCi0gU2lnbmVkLW9mZi1ieTogV2lsbCBEZWFjb24gXDx3aWxsQGtlcm5lbC5vcmdcPiAo SU9NTVUgbWFpbnRhaW5lcjsKICBhcHBsaWVkIHRoZSBwYXRjaCkKLSBObyBGaXhlczosIFJlcG9y dGVkLWJ5OiwgVGVzdGVkLWJ5OiwgUmV2aWV3ZWQtYnk6LCBBY2tlZC1ieTosIExpbms6LAogIG9y IENjOiBzdGFibGUgKGFic2VuY2Ugb2YgRml4ZXMvQ2M6c3RhYmxlIGlzIGV4cGVjdGVkIGZvciB0 aGlzIHJldmlldykKCioqU3RlcCAxLjM6IEFOQUxZWkUgVEhFIENPTU1JVCBCT0RZIFRFWFQqKgpS ZWNvcmQ6Ci0gKipCdWc6KiogQm9vdCBmaXJtd2FyZSBjYW4gbGVhdmUgYW4gSU9NTVUgYmFuayBp bgogIGBQQUdFX0ZBVUxUX0FDVElWRT0xYCwgYFNUQUxMX0FDVElWRT0wYCwgYElETEU9MWAgYmVm b3JlIHRoZSBkcml2ZXIKICBjb25maWd1cmVzIHBhZ2luZy4KLSAqKlN5bXB0b206KiogVGhhdCBi YW5rIGlnbm9yZXMgYENNRF9FTkFCTEVfU1RBTExgIGFuZCBuZXZlciByZWFjaGVzCiAgYFNUQUxM X0FDVElWRWAuIGBya19pb21tdV9lbmFibGVfc3RhbGwoKWDigJlzIGByZWFkeF9wb2xsX3RpbWVv dXQoKWAKICBmYWlscy4gT2JzZXJ2ZWQgb24gdGhlIFJLMzU3NiBOUFUsIHdob3NlIE1NVXMgc2hh cmUgdGhlIHN0YWxsIHBvbGwKICBhY3Jvc3MgYmFua3MgKGBya19pb21tdV9pc19zdGFsbF9hY3Rp dmUoKWAgQU5EcyBldmVyeSBiYW5rKS4KLSAqKlJvb3QgY2F1c2U6KiogU3RhbGUgZmlybXdhcmUg cGFnZS1mYXVsdCBzdGF0ZSBibG9ja3MgdGhlIHN0YWxsCiAgY29tbWFuZC4KLSAqKkZpeDoqKiBJ c3N1ZSBgQ01EX1BBR0VfRkFVTFRfRE9ORWAgb24gYW55IGJhbmsgdGhhdCBzdGlsbCBoYXMKICBg UEFHRV9GQVVMVF9BQ1RJVkVgLCB0aGVuIHVzZSB0aGUgbm9ybWFsIHN0YWxsIHNlcXVlbmNlLiBC YW5rcyB3aXRob3V0CiAgYSBwZW5kaW5nIGZhdWx0IGFyZSB1bnRvdWNoZWQuCi0gKipWZXJzaW9u IGluZm8gaW4gbWVzc2FnZToqKiBub25lIGJleW9uZCBSSzM1NzYgTlBVLgoKKipTdGVwIDEuNDog REVURUNUIEhJRERFTiBCVUcgRklYRVMqKgpSZWNvcmQ6IE5vdCBkaXNndWlzZWQuIFRoaXMgaXMg YW4gZXhwbGljaXQgaGFyZHdhcmUvZmlybXdhcmUgbGVmdG92ZXIKd29ya2Fyb3VuZCB0aGF0IHBy ZXZlbnRzIGEgc3RhbGwtZW5hYmxlIHRpbWVvdXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhBU0UgMjogRElGRiBBTkFM WVNJUyAtIExJTkUgQlkgTElORQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCAyLjE6IElOVkVOVE9SWSBUSEUgQ0hB TkdFUyoqClJlY29yZDoKLSBGaWxlOiBgZHJpdmVycy9pb21tdS9yb2NrY2hpcC1pb21tdS5jYCDi gJQgKiorMTMgLyAtMCoqCi0gRnVuY3Rpb246IGBya19pb21tdV9lbmFibGVfc3RhbGwoKWAKLSBT Y29wZTogc2luZ2xlLWZpbGUgc3VyZ2ljYWwgZml4CgoqKlN0ZXAgMi4yOiBVTkRFUlNUQU5EIFRI RSBDT0RFIEZMT1cgQ0hBTkdFKioKUmVjb3JkOgotICoqQmVmb3JlOioqIElmIHN0YWxsIGlzIG5v dCBhbHJlYWR5IGFjdGl2ZSBhbmQgcGFnaW5nIGlzIGVuYWJsZWQsCiAgYnJvYWRjYXN0IGBDTURf RU5BQkxFX1NUQUxMYCBhbmQgcG9sbCB1bnRpbCBldmVyeSBiYW5rIHJlcG9ydHMKICBgU1RBTExf QUNUSVZFYCAoMSBtcyB0aW1lb3V0LCBgUktfTU1VX1BPTExfVElNRU9VVF9VUz0xMDAwYCkuIE9u ZQogIHN0dWNrIGJhbmsgZmFpbHMgdGhlIHdob2xlIHBvbGwuCi0gKipBZnRlcjoqKiBTYW1lIHBh dGgsIGJ1dCBmaXJzdCB3YWxrIGVhY2ggYmFuazsgaWYKICBgUktfTU1VX1NUQVRVU19QQUdFX0ZB VUxUX0FDVElWRWAgaXMgc2V0LCB3cml0ZQogIGBSS19NTVVfQ01EX1BBR0VfRkFVTFRfRE9ORWAg dG8gdGhhdCBiYW5r4oCZcyBjb21tYW5kIHJlZ2lzdGVyLCB0aGVuCiAgZW5hYmxlIHN0YWxsIGFz IGJlZm9yZS4KLSBQYXRoOiBpbml0aWFsaXphdGlvbiAvIGF0dGFjaCAvIHJlc3VtZSAoYHJrX2lv bW11X2VuYWJsZWAg4oaSCiAgYHJrX2lvbW11X2VuYWJsZV9zdGFsbGApLCBhbmQgYWxzbyBkaXNh YmxlL3N1c3BlbmQgKHJldHVybiB2YWx1ZQogIGlnbm9yZWQgdGhlcmUpLgoKKipTdGVwIDIuMzog SURFTlRJRlkgVEhFIEJVRyBNRUNIQU5JU00qKgpSZWNvcmQ6ICoqW0hhcmR3YXJlIHdvcmthcm91 bmQgLyBsb2dpYyBjb3JyZWN0bmVzc10qKiBGaXJtd2FyZSBsZWF2ZXMKYFBBR0VfRkFVTFRfQUNU SVZFYC4gSGFyZHdhcmUgaWdub3JlcyBgQ01EX0VOQUJMRV9TVEFMTGAgaW4gdGhhdCBzdGF0ZS4K YHJrX2lvbW11X2VuYWJsZSgpYCB0cmVhdHMgc3RhbGwgdGltZW91dCBhcyBmYXRhbCAoYGlmIChy ZXQpIGdvdG8Kb3V0X2Rpc2FibGVfY2xvY2tzYCksIHNvIHRoZSBJT01NVSBuZXZlciByZWFjaGVz CmBya19pb21tdV9mb3JjZV9yZXNldCgpYCAvIHBhZ2luZyBzZXR1cCBhbmQgKipkZXZpY2UgYXR0 YWNoIGZhaWxzKiouIFRoZQpmaXggYWNrcyB0aGUgbGVmdG92ZXIgZmF1bHQgd2l0aCB0aGUgc2Ft ZSBjb21tYW5kIHRoZSBJUlEgaGFuZGxlcgphbHJlYWR5IHVzZXMgKGBSS19NTVVfQ01EX1BBR0Vf RkFVTFRfRE9ORWApLgoKKipTdGVwIDIuNDogQVNTRVNTIFRIRSBGSVggUVVBTElUWSoqClJlY29y ZDogTWluaW1hbCBhbmQgcmVhZGFibGUuIEdhdGVkIG9uIGBQQUdFX0ZBVUxUX0FDVElWRWAsIHNv IGlkbGUKYmFua3MgYXJlIHVuY2hhbmdlZC4gVXNlcyB0aGUgZXhpc3RpbmcgY29tbWFuZCBlbmNv ZGluZy4gUmVncmVzc2lvbiByaXNrCmlzIGxvdzsgdGhlIG9ubHkgZmxhZ2dlZCBjb25jZXJuIGlz IG5vdCBhbHNvIHdyaXRpbmcgYFJLX01NVV9JTlRfQ0xFQVJgCihzZWUgUGhhc2UgNCksIHdoaWNo IGlzIGluY29tcGxldGUtYWNrLCBub3QgYSBuZXcgZGVhZGxvY2sgb3IgQVBJCmNoYW5nZS4KCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpQSEFTRSAzOiBHSVQgSElTVE9SWSBJTlZFU1RJR0FUSU9OCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKipTdGVwIDMu MTogQkxBTUUgVEhFIENIQU5HRUQgTElORVMqKgpSZWNvcmQ6Ci0gYHJrX2lvbW11X2VuYWJsZV9z dGFsbCgpYCBpbnRyb2R1Y2VkIGluICoqYzY4YTI5MjE1MmQzMioqCiAgKGBpb21tdS9yb2NrY2hp cDogcmszMjg4IGlvbW11IGRyaXZlcmAsIDIwMTQpIOKAlCBjb250YWluZWQgaW4KICAqKnYzLjE5 LXJjMSoqLgotIE11bHRpLWJhbmsgYG51bV9tbXVgIGxvb3A6ICoqY2Q2NDM4YzVmODQ0NioqLCBj b250YWluZWQgaW4KICAqKnY0LjYtcmMxKiouCi0gYHJlYWR4X3BvbGxfdGltZW91dGA6ICoqMDQx NmJmNjQ3OWFjZWYqKiwgY29udGFpbmVkIGluICoqdjQuMTctcmMxKiouCi0gVGhlIDEzLWxpbmUg YWNrIGxvb3AgaXMgdGhpcyBjb21taXQgKCoqYjEwZDU5MjBjYWZhMioqKS4KCioqU3RlcCAzLjI6 IEZPTExPVyBUSEUgRklYRVM6IFRBRyoqClJlY29yZDogTm8gRml4ZXM6IHRhZy4gTm90IGFwcGxp Y2FibGUuIEJ1Z2d5IGludGVyYWN0aW9uIGlzIGZpcm13YXJlCmxlZnRvdmVyIHZzIHN0YWxsIHBh dGggdGhhdCBoYXMgZXhpc3RlZCBmb3IgeWVhcnMuCgoqKlN0ZXAgMy4zOiBDSEVDSyBGSUxFIEhJ U1RPUlkgRk9SIFJFTEFURUQgQ0hBTkdFUyoqClJlY29yZDoKLSBJbW1lZGlhdGUgcGFyZW50IG9u IHRoZSBmaWxlOiAqKjg0MTM2M2ViYjUwODIqKiBgaW9tbXUvcm9ja2NoaXA6IFRha2UKICBhbGwg RFQgY2xvY2tzYCDigJQgc2FtZSBhdXRob3IsIHNhbWUgUkZDIHNlcmllcyAocGF0Y2ggNC84KS4g RGlmZmVyZW50CiAgcHJvYmxlbSAoZXh0cmEgY2xvY2tzIHNvIERURV9BRERSIHdyaXRlcyBsYW5k KS4gKipOb3QgYSBjb2RlCiAgZGVwZW5kZW5jeSoqIG9mIHRoZSBzdGFsbCBhY2suCi0gTm8gbGF0 ZXIgY29tbWl0cyBvbiB0aGlzIGZpbGUgYWZ0ZXIgYjEwZDU5MjBjYWZhMiBpbiB0aGlzIHRyZWUu Ci0gU3RhbmRhbG9uZSBJT01NVSBjaGFuZ2U7IFdpbGwgYXBwbGllZCA0LzggYW5kIDUvOCB3aXRo b3V0IHRoZSByZXN0IG9mCiAgdGhlIE5QVSBzZXJpZXMuCgoqKlN0ZXAgMy40OiBDSEVDSyBUSEUg QVVUSE9SJ1MgT1RIRVIgQ09NTUlUUyoqClJlY29yZDogSmlheGluZyBIdSBpcyBub3QgdGhlIElP TU1VIG1haW50YWluZXIuIEluIHRoaXMgdHJlZSwgdHdvCnJvY2tjaGlwLWlvbW11IGNvbW1pdHMg KGNsb2NrcyArIHRoaXMpLiBXaWxsIERlYWNvbiBhcHBsaWVkIGJvdGguCgoqKlN0ZXAgMy41OiBD SEVDSyBGT1IgREVQRU5ERU5UL1BSRVJFUVVJU0lURSBDT01NSVRTKioKUmVjb3JkOiBEaWZmIG9u bHkgbmVlZHMgYHJrX2lvbW11X2VuYWJsZV9zdGFsbGAsIGBudW1fbW11YCwKYFJLX01NVV9TVEFU VVNfUEFHRV9GQVVMVF9BQ1RJVkVgLCBgUktfTU1VX0NNRF9QQUdFX0ZBVUxUX0RPTkVgIOKAlCBh bGwKcHJlc2VudCBsb25nIGJlZm9yZSA3LjMuICoqQ2FuIGFwcGx5IHN0YW5kYWxvbmUuKioKCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpQSEFTRSA0OiBNQUlMSU5HIExJU1QgQU5EIEVYVEVSTkFMIFJFU0VBUkNICj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoK KipTdGVwIDQuMTogRklORCBUSEUgT1JJR0lOQUwgUEFUQ0ggRElTQ1VTU0lPTioqClJlY29yZDoK LSBMb3JlICh2aWEgYjQpOgogIGh0dHBzOi8vcGF0Y2gubXNnaWQubGluay8yMDI2MDcxODAzMTE0 Ni4zMzY4ODExLTYtZ2FoaW5nQGdhaGluZ3dvby5jb20KLSBTZXJpZXM6ICoqW1JGQyBQQVRDSCB2 MiAwLzhdIGFjY2VsL3JvY2tldDogUkszNTc2IE5QVSAoUktOTikKICBlbmFibGVtZW50KioKLSBU aGlzIHBhdGNoIGlzICoqdjIgNS84KiouIHYxIGhhZCB0d28g4oCcc2tpcCBvcnBoYW5lZC1mYXVs dCBiYW5rc+KAnQogIHBhdGNoZXM7IHYyIHJlcGxhY2VkIHRoZW0gd2l0aCB0aGlzIGZhdWx0LWFj ayBhZnRlciBDaGFveWkgQ2hlbiBhc2tlZAogIHdoZXRoZXIgY2xlYXJpbmcgdGhlIGZhdWx0IGF2 b2lkcyBza2lwcGluZyBiYW5rcy4KLSBXaWxsIERlYWNvbiAoMjAyNi0wNy0yNik6IOKAnEFwcGxp ZWQgZHJpdmVyIGNoYW5nZXMgdG8gaW9tbXUgKHJvY2tjaGlwKeKAnQogIGZvciA0LzggYW5kIDUv OC4gTm8gTkFLIG9uIHRoaXMgcGF0Y2guCi0gQ292ZXIgbGV0dGVyOiBOUFUgYnJpbmctdXAgaXMg c3RpbGwgaW5jb21wbGV0ZSAo4oCcZnVsbCBpbmZlcmVuY2UgaXMgbm90CiAgY29ycmVjdCB5ZXTi gJ0pLiBUaGlzIElPTU1VIGZpeCB3YXMgc3RpbGwgdGFrZW4gb24gaXRzIG93bi4KLSB2MyBvZiB0 aGUgd2lkZXIgc2VyaWVzIHdhcyBub3Qgb3V0IHdoZW4gV2lsbCBhcHBsaWVkIHRoaXM7IGFwcGxp ZWQKICB2ZXJzaW9uIGlzIHRoZSBsYXRlc3QgZm9yIHRoaXMgaHVuay4KCioqU3RlcCA0LjI6IENI RUNLIFdITyBSRVZJRVdFRCBUSEUgUEFUQ0gqKgpSZWNvcmQ6IFJlY2lwaWVudHMgaW5jbHVkZWQg V2lsbCBEZWFjb24sIEpvZXJnIFJvZWRlbCwgUm9iaW4gTXVycGh5LApIZWlrbyBTdHVlYm5lciwg aW9tbXVAbGlzdHMubGludXguZGV2LCBsaW51eC1yb2NrY2hpcC4gTm8gaHVtYW4KUmV2aWV3ZWQt Ynkgb24gNS84IGluIHRoZSB0aHJlYWQuIFdpbGwgYXBwbGllZCBpdC4gU2FzaGlrbyBib3QKKGF1 dG9tYXRlZCkgY29tbWVudGVkLgoKKipTdGVwIDQuMzogU0VBUkNIIEZPUiBUSEUgQlVHIFJFUE9S VCoqClJlY29yZDogTm8gc3l6Ym90L2J1Z3ppbGxhLiBBdXRob3IgaGl0IGl0IG9uIGEgUmFkeGEg Uk9DSyA0RCB3aGlsZQpicmluZ2luZyB1cCB0aGUgUkszNTc2IE5QVSBJT01NVXMuIENvdmVyIGxl dHRlciBsaXN0cyDigJxjbGVhcmluZyBhIHN0YWxlCmZpcm13YXJlIHBhZ2UgZmF1bHTigJ0gYXMg cmVxdWlyZWQgZm9yIHRob3NlIElPTU1VcyB0byBjb21lIHVwLgoKKipTdGVwIDQuNDogQ0hFQ0sg Rk9SIFJFTEFURUQgUEFUQ0hFUyBBTkQgU0VSSUVTKioKUmVjb3JkOiBSRkMgOC1wYXRjaCBOUFUg ZW5hYmxlbWVudC4gT25seSB0aGUgdHdvIElPTU1VIGRyaXZlciBwYXRjaGVzCndlcmUgbWVyZ2Vk LiBOUFUgRFQvZHJpdmVyIHBhdGNoZXMgYXJlICoqbm90KiogaW4gdGhpcyB0cmVlIChubyBOUFUK SU9NTVUgbm9kZXMgaW4gYHJrMzU3Ni5kdHNpYCkuIFRoaXMgc3RhbGwgcGF0Y2ggZG9lcyBub3Qg ZGVwZW5kIG9uIHRoZW0uCgoqKlN0ZXAgNC41OiBDSEVDSyBTVEFCTEUgTUFJTElORyBMSVNUIEhJ U1RPUlkqKgpSZWNvcmQ6IGxvcmUua2VybmVsLm9yZy9zdGFibGUgc2VhcmNoIHJldHVybmVkIEhU VFAgNDAzLiAqKlVOVkVSSUZJRUQqKgp3aGV0aGVyIHN0YWJsZUAgZGlzY3Vzc2VkIHRoaXMuIE5v IGluLXRyZWUgZ3JlcCBoaXQgZXhjZXB0IHRoaXMgY29tbWl0LgoKU2FzaGlrbyBib3QgY29uY2Vy biAodmVyaWZpZWQgZnJvbSBtYm94KTogYENNRF9QQUdFX0ZBVUxUX0RPTkVgIHdpdGhvdXQKYFJL X01NVV9JTlRfQ0xFQVJgIG1pZ2h0IGxlYXZlIGEgcmF3IElSUSBwZW5kaW5nLiBPbiBgcm9ja2No aXAsZGlzYWJsZS0KbW11LXJlc2V0YCBpbnN0YW5jZXMgKGluLXRyZWU6IHB4MzAsIHJrMzI4OCwg cmszMzY4LCByazMzOTksIHJrMzU2eCwKcmszNTc2IHZkZWMpLCBgcmtfaW9tbXVfZm9yY2VfcmVz ZXQoKWAgaXMgc2tpcHBlZCwgdGhlbgpgUktfTU1VX0lOVF9NQVNLYCBpcyBwcm9ncmFtbWVkIGlu IGBya19pb21tdV9lbmFibGUoKWAuIEEgbGVmdG92ZXIgcmF3CmJpdCBjb3VsZCBmaXJlIGEgcGFn ZS1mYXVsdCBJUlEuIFRoZSBleGlzdGluZyBJUlEgaGFuZGxlciBhbHJlYWR5IGxvZ3MsCm9wdGlv bmFsbHkgYHJlcG9ydF9pb21tdV9mYXVsdCgpYCwgemFwcyBjYWNoZSwgaXNzdWVzIGBQQUdFX0ZB VUxUX0RPTkVgLAphbmQgY2xlYXJzIElOVF9TVEFUVVMuIFRoYXQgaXMgYSBwb3NzaWJsZSBzcHVy aW91cyBJUlEvbG9nLCBub3QgYQp2ZXJpZmllZCBwYW5pYy4gTm8gZm9sbG93LXVwIGNvbW1pdCBh ZGRyZXNzZWQgaXQ7IFdpbGwgc3RpbGwgYXBwbGllZCB0aGUKcGF0Y2guCgo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhBU0Ug NTogQ09ERSBTRU1BTlRJQyBBTkFMWVNJUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCA1LjE6IElERU5USUZZIEtF WSBGVU5DVElPTlMqKgpSZWNvcmQ6IGBya19pb21tdV9lbmFibGVfc3RhbGwoKWAgKG1vZGlmaWVk KS4gSGVscGVycyB1c2VkOgpgcmtfaW9tbXVfcmVhZGAsIGBya19pb21tdV9pc19zdGFsbF9hY3Rp dmVgLApgcmtfaW9tbXVfaXNfcGFnaW5nX2VuYWJsZWRgLCBgcmtfaW9tbXVfY29tbWFuZGAuCgoq KlN0ZXAgNS4yOiBUUkFDRSBDQUxMRVJTKioKUmVjb3JkOgotIGBya19pb21tdV9kaXNhYmxlKClg IGxpbmUgOTI4IOKAlCBkZXRhY2ggLyBydW50aW1lIHN1c3BlbmQuIFJldHVybgogIGlnbm9yZWQu Ci0gYHJrX2lvbW11X2VuYWJsZSgpYCBsaW5lIDk1MCDigJQgYXR0YWNoIC8gcnVudGltZSByZXN1 bWUuICoqRmFpbHVyZQogIGFib3J0cyBlbmFibGUuKioKLSBgcmtfaW9tbXVfZW5hYmxlKClgIGNh bGxlZCBmcm9tIGBya19pb21tdV9hdHRhY2hfZGV2aWNlKClgIChsaW5lIDEwNjQpCiAgYW5kIGBy a19pb21tdV9yZXN1bWUoKWAgKGxpbmUgMTM0OSkuCgoqKlN0ZXAgNS4zOiBUUkFDRSBDQUxMRUVT KioKUmVjb3JkOiBNTUlPIHN0YXR1cy9jb21tYW5kLiBObyBhbGxvY2F0aW9uLCBubyBuZXcgbG9j a3MuCmB3cml0ZWwoUktfTU1VX0NNRF9QQUdFX0ZBVUxUX0RPTkUsIGJhc2UgKyBSS19NTVVfQ09N TUFORClgIG1hdGNoZXMKYHJrX2lvbW11X2Jhc2VfY29tbWFuZCgpYC4KCioqU3RlcCA1LjQ6IEZP TExPVyBUSEUgQ0FMTCBDSEFJTioqClJlY29yZDogVXNlcnNwYWNlL0RNQSBhdHRhY2ggb3IgcnVu dGltZSBQTSByZXN1bWUg4oaSCmBya19pb21tdV9hdHRhY2hfZGV2aWNlYCAvIGBya19pb21tdV9y ZXN1bWVgIOKGkiBgcmtfaW9tbXVfZW5hYmxlYCDihpIKYHJrX2lvbW11X2VuYWJsZV9zdGFsbGAu IFJlYWNoYWJsZSBvbiBSb2NrY2hpcCBTb0NzIHdpdGgKYENPTkZJR19ST0NLQ0hJUF9JT01NVWAu IFRyaWdnZXIgaXMgZmlybXdhcmUgbGVmdG92ZXIgKyBwYWdpbmcgYWxyZWFkeQplbmFibGVkLiBO b3QgYSBzeXNjYWxsIGZ1enogcGF0aDsgaXQgaXMgZGV2aWNlIGJyaW5nLXVwLgoKKipTdGVwIDUu NTogU0VBUkNIIEZPUiBTSU1JTEFSIFBBVFRFUk5TKioKUmVjb3JkOiBJUlEgcGF0aCBhbHJlYWR5 IGRvZXMgYFJLX01NVV9DTURfUEFHRV9GQVVMVF9ET05FYCAobGluZSA2NDIpCnBsdXMgYFJLX01N VV9JTlRfQ0xFQVJgLiBObyBvdGhlciBzdGFsbC1wYXRoIGZhdWx0IGFjay4gSW4tdHJlZSBSSzM1 NzYKYHZkZWNfbW11YCBpcyB0d28tYmFuayAoYHJlZ2AgdHdvIHJlZ2lvbnMpLCBzbyB0aGUgQU5E LXBvbGwgaXNzdWUgaXMgbm90Ck5QVS1vbmx5IGluIHByaW5jaXBsZS4KCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQSEFTRSA2 OiBDUk9TUy1SRUZFUkVOQ0lORyBBR0FJTlNUIFRIRSBMT0NBTCBUUkVFCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKipTdGVw IDYuMTogRE9FUyBUSEUgQlVHR1kgQ09ERSBFWElTVCBJTiBUSElTIFRSRUU/KioKUmVjb3JkOiAq Klllcy4qKiBMb2NhbCB0cmVlOiBgZ2l0IGRlc2NyaWJlIEhFQURgID0KKip2Ny4zLXJjNC0yNy1n ZjAxMDAzNjNkOGMzNyoqLCBgbWFrZSBrZXJuZWx2ZXJzaW9uYCA9ICoqNy4zLjAtcmM0KiouCmBy a19pb21tdV9lbmFibGVfc3RhbGwoKWAgaXMgcHJlc2VudDsgdGhpcyBjb21taXQgaXMgYWxyZWFk eSBhbiBhbmNlc3RvcgpvZiBIRUFEIChgZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciBiMTBk NTkyMGNhZmEyIEhFQURgIHN1Y2NlZWRlZCkuCkxhbmRlZCB2aWEgYGlvbW11LXVwZGF0ZXMtdjcu M2AgKG5vdCBpbiB2Ny4yKS4gU3RhbGwgcGF0aCBpdHNlbGYgZGF0ZXMKdG8gdjMuMTkuCgoqKlN0 ZXAgNi4yOiBDSEVDSyBGT1IgQkFDS1BPUlQgQ09NUExJQ0FUSU9OUyoqClJlY29yZDogSHVuayBp cyBhIGNvbnRpZ3VvdXMgaW5zZXJ0IGFmdGVyIHRoZSBwYWdpbmctZW5hYmxlZCBjaGVjay4KRXhw ZWN0ZWQgYXBwbHk6ICoqY2xlYW4qKiBvbiB0cmVlcyB0aGF0IGhhdmUgdGhlIDIwMTYgbXVsdGkt YmFuawpgbnVtX21tdWAgbG9vcCAodjQuNispLiBObyBjb25mbGljdGluZyBsYXRlciBlZGl0cyBv biB0aGlzIGZ1bmN0aW9uIGluCnRoaXMgY2hlY2tvdXQuCgoqKlN0ZXAgNi4zOiBDSEVDSyBJRiBS RUxBVEVEIEZJWEVTIEFSRSBBTFJFQURZIEhFUkUqKgpSZWNvcmQ6IFRoaXMgaXMgdGhlIG9ubHkg 4oCcc3RhbGUgcGFnZSBmYXVsdOKAnSBjb21taXQuIE5vIGFsdGVybmF0ZSBmaXguClNpYmxpbmcg Y2xvY2tzIGNoYW5nZSBpcyBpbmRlcGVuZGVudC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQSEFTRSA3OiBTVUJTWVNURU0g QU5EIE1BSU5UQUlORVIgQ09OVEVYVAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCA3LjE6IElERU5USUZZIFRIRSBT VUJTWVNURU0gQU5EIElUUyBDUklUSUNBTElUWSoqClJlY29yZDogKipkcml2ZXJzL2lvbW11L3Jv Y2tjaGlwLWlvbW11LmMqKiDigJQgUm9ja2NoaXAgSU9NTVUuCkNyaXRpY2FsaXR5OiAqKklNUE9S VEFOVCoqIChwbGF0Zm9ybSBJT01NVSBmb3IgbXVsdGltZWRpYS9OUFUgRE1BOyBub3QKY29yZSBt bS9WRlMsIGJ1dCBhdHRhY2ggZmFpbHVyZSB0YWtlcyBkb3duIHRoZSBjb25zdW1lciBkZXZpY2Up LgoKKipTdGVwIDcuMjogQVNTRVNTIFNVQlNZU1RFTSBBQ1RJVklUWSoqClJlY29yZDogTWF0dXJl IGRyaXZlciAoMjAxNCksIHN0aWxsIHJlY2VpdmluZyBSb2NrY2hpcCBicmluZy11cCBmaXhlcy4K Sm9lcmfigJlzIHY3LjMgcHVsbDog4oCcUmV3b3JrIFJvY2tjaGlwIHN0YXRlIGhhbmRsaW5nIGFu ZCBmaXggY2xvY2ssIHByb2JlCmFuZCBzdGFsZS1mYXVsdCBoYW5kbGluZy7igJ0KCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQ SEFTRSA4OiBJTVBBQ1QgQU5EIFJJU0sgQVNTRVNTTUVOVAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCA4LjE6IERF VEVSTUlORSBXSE8gSVMgQUZGRUNURUQqKgpSZWNvcmQ6ICoqZHJpdmVyLXNwZWNpZmljIC8gcGxh dGZvcm0tc3BlY2lmaWMqKiDigJQKYENPTkZJR19ST0NLQ0hJUF9JT01NVWAgb24gUm9ja2NoaXAu IFByYWN0aWNhbCB0cmlnZ2VyIHJlcG9ydGVkIG9uClJLMzU3NiBOUFUgTU1VcyAodGhvc2UgRFQg bm9kZXMgYXJlICoqbm90KiogaW4gdGhpcyB0cmVlKS4gQW55IG11bHRpLQpiYW5rIGluc3RhbmNl IHdob3NlIGZpcm13YXJlIGxlYXZlcyBgUEFHRV9GQVVMVF9BQ1RJVkVgIGNhbiBoaXQgdGhlIHNh bWUKcG9sbCAoZS5nLiBpbi10cmVlIFJLMzU3NiBgdmRlY19tbXVgIGhhcyB0d28gYmFua3MpLgoK KipTdGVwIDguMjogREVURVJNSU5FIFRIRSBUUklHR0VSIENPTkRJVElPTlMqKgpSZWNvcmQ6IEJv b3QgZmlybXdhcmUgbGVmdG92ZXIgZmF1bHQsIHRoZW4gZmlyc3Qgc3RhbGwgZW5hYmxlIHdoaWxl CnBhZ2luZyBpcyBzdGlsbCBlbmFibGVkLiBUaW1pbmc6IHByb2JlL2F0dGFjaCBvciByZXN1bWUs IG5vdCBhIGhvdCBwYXRoLgpVbnByaXZpbGVnZWQgdXNlcnMgZG8gbm90IHRyaWdnZXIgaXQgZGly ZWN0bHk7IGl0IGlzIGZpcm13YXJlIMOXIGRyaXZlcgppbml0LiBObyBwdWJsaWMgcmVwcm9kdWNl ciBiZXlvbmQgdGhlIGF1dGhvcuKAmXMgUk9DSyA0RCBicmluZy11cC4KCioqU3RlcCA4LjM6IERF VEVSTUlORSBUSEUgRkFJTFVSRSBNT0RFIFNFVkVSSVRZKioKUmVjb3JkOiAqKklPTU1VIGVuYWJs ZSBmYWlscyBhZnRlciBhIDEgbXMgcG9sbCoqCihgUktfTU1VX1BPTExfVElNRU9VVF9VUz0xMDAw YCkuIEF0dGFjaCByZXR1cm5zIGVycm9yOyB0aGUgRE1BIGRldmljZQpkb2VzIG5vdCBnZXQgYSB3 b3JraW5nIElPTU1VLiAqKk5vdCoqIGEgcGFuaWMsIGhhbmcsIFVBRiwgb3IgY29ycnVwdGlvbi4K U2V2ZXJpdHk6ICoqSElHSCoqIGZvciB0aGUgYWZmZWN0ZWQgZGV2aWNlIChub24tZnVuY3Rpb25h bCksICoqTUVESVVNKioKc3lzdGVtLXdpZGUgKDEgbXMgdGltZW91dCArIGVycm9yLCByZXN0IG9m IHRoZSBtYWNoaW5lIGNvbnRpbnVlcykuCgoqKlN0ZXAgOC40OiBDQUxDVUxBVEUgUklTSy1CRU5F RklUIFJBVElPKioKUmVjb3JkOgotICoqQmVuZWZpdDoqKiBIYXJkd2FyZS9maXJtd2FyZSB3b3Jr YXJvdW5kIHNvIHN0YWxsIGVuYWJsZSBzdWNjZWVkczsKICBJT01NVSBhdHRhY2ggY2FuIHByb2Nl ZWQuIEhpZ2ggZm9yIFJLMzU3NiBOUFUgdXNlcnM7IG1vZGVzdCBmb3Igb3RoZXIKICBSb2NrY2hp cCBib2FyZHMgdW5sZXNzIGZpcm13YXJlIGxlYXZlcyB0aGUgc2FtZSBiaXQuCi0gKipSaXNrOioq IDEzIGxpbmVzLCBzdGF0dXMtZ2F0ZWQuIFRoZW9yZXRpY2FsIHNwdXJpb3VzIElSUSBpZgogIElO VF9TVEFUVVMgaXMgbm90IGNsZWFyZWQgb24gYGRpc2FibGUtbW11LXJlc2V0YCBkZXZpY2VzLiBO byBuZXcKICBsb2Nrcy9BUElzLgotICoqUmF0aW86KiogQmVuZWZpdCBvdXR3ZWlnaHMgcmlzay4g U2FtZSBjbGFzcyBhcyBvdGhlciBoYXJkd2FyZQogIGxlZnRvdmVyL3F1aXJrIGZpeGVzLgoKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClBIQVNFIDk6IEZJTkFMIFNZTlRIRVNJUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCioqU3RlcCA5LjE6IENPTVBJTEUg VEhFIEVWSURFTkNFKioKCkZPUjoKLSBSZWFsLCBleHBsYWluZWQgZmFpbHVyZTogc3RhbGwgcG9s bCB0aW1lcyBvdXQsIGBya19pb21tdV9lbmFibGUoKWAKICBhYm9ydHMsIGRldmljZSBhdHRhY2gg ZmFpbHMuCi0gU21hbGwgKCsxMyksIGNvbnRhaW5lZCwgc3RhdHVzLWdhdGVkLgotIFNhbWUgY29t bWFuZCB0aGUgSVJRIGhhbmRsZXIgYWxyZWFkeSB1c2VzLgotIFdpbGwgRGVhY29uIGFwcGxpZWQg aXQgaW5kZXBlbmRlbnRseSBvZiB0aGUgdW5maW5pc2hlZCBOUFUgUkZDLgotIHY3LjMgSU9NTVUg cHVsbCBsaXN0ZWQgc3RhbGUtZmF1bHQgaGFuZGxpbmcgYXMgYSBmaXguCi0gRHJpdmVyIGFuZCBz dGFsbCBwYXRoIGV4aXN0IGluIHRoaXMgdHJlZSBzaW5jZSB2My4xOSAvIHY0LjYuCi0gSGFyZHdh cmUvZmlybXdhcmUgd29ya2Fyb3VuZCAoc3RhYmxlIGV4Y2VwdGlvbiBjYXRlZ29yeSkuCi0gTm8g bmV3IEFQSXMgb3IgZmVhdHVyZXMuCgpBR0FJTlNUOgotIE9yaWdpbmF0ZWQgaW4gYW4gUkZDIHNl cmllcyB0byBlbmFibGUgUkszNTc2IE5QVTsgTlBVIElPTU1VIERUIGlzCiAgc3RpbGwgbm90IGlu IHRoaXMgdHJlZS4KLSBPYnNlcnZlZCBvbiB0aGF0IE5QVSwgbm90IHJlcG9ydGVkIG9uIGxvbmct c2hpcHBlZCBWT1AvVkRFQy4KLSBOb3QgY3Jhc2gvc2VjdXJpdHkvY29ycnVwdGlvbjsgMSBtcyB0 aW1lb3V0IHRoZW4gZW5hYmxlIGZhaWx1cmUuCi0gU2FzaGlrbyBub3RlZCBtaXNzaW5nIGBJTlRf Q0xFQVJgOyB1bmFkZHJlc3NlZC4KLSBObyBGaXhlczovQ2M6c3RhYmxlIChub3QgYSBuZWdhdGl2 ZSBieSBpdHNlbGYpLgoKVU5SRVNPTFZFRDoKLSBsb3JlLmtlcm5lbC5vcmcvc3RhYmxlIHNlYXJj aCBIVFRQIDQwMy4KLSBXaGV0aGVyIGluLXRyZWUgdmRlYy92b3AgZmlybXdhcmUgYWxzbyBsZWF2 ZXMgYFBBR0VfRkFVTFRfQUNUSVZFYAogIChhdXRob3Igb25seSBjaXRlZCBOUFUpLgotIFdoZXRo ZXIgYSBsZWZ0b3ZlciBJTlRfU1RBVFVTIGFmdGVyIGBQQUdFX0ZBVUxUX0RPTkVgIGFjdHVhbGx5 IGZpcmVzCiAgb24gYGRpc2FibGUtbW11LXJlc2V0YCBoYXJkd2FyZS4KCioqU3RlcCA5LjI6IEFQ UExZIFRIRSBTVEFCTEUgUlVMRVMgQ0hFQ0tMSVNUKioKMS4gT2J2aW91c2x5IGNvcnJlY3QgYW5k IHRlc3RlZD8gKipQQVNTKiog4oCUIGxvZ2ljIG1hdGNoZXMgdGhlIGRlc2NyaWJlZAogICBoYXJk d2FyZSBzdGF0ZTsgYXV0aG9yIHRlc3RlZCBvbiBST0NLIDREOyBJT01NVSBtYWludGFpbmVyIGFw cGxpZWQKICAgaXQuCjIuIEZpeGVzIGEgcmVhbCBidWcgdGhhdCBhZmZlY3RzIHVzZXJzPyAqKlBB U1MqKiDigJQgc3RhbGwgdGltZW91dAogICBwcmV2ZW50cyBJT01NVSBlbmFibGUvYXR0YWNoLgoz LiBJbXBvcnRhbnQgaXNzdWU/ICoqUEFTUyoqIOKAlCBkZXZpY2UgSU9NTVUgbmV2ZXIgY29tZXMg dXAgKG5vdCBhIHBhbmljLAogICBidXQgaGFyZHdhcmUgbm9uLWZ1bmN0aW9uYWwpLiBTZXZlcml0 eSBISUdIIGZvciB0aGF0IGRldmljZS4KNC4gU21hbGwgYW5kIGNvbnRhaW5lZD8gKipQQVNTKiog 4oCUIDEzIGxpbmVzLCBvbmUgZnVuY3Rpb24uCjUuIE5vIG5ldyBmZWF0dXJlcyBvciBBUElzPyAq KlBBU1MqKgo2LiBDYW4gYXBwbHkgdG8gdGhlIGxvY2FsIHRyZWU/ICoqUEFTUyoqIOKAlCBzdGFs bCBwYXRoIGFuZCBzeW1ib2xzIGFyZQogICBoZXJlOyBodW5rIGlzIGEgY2xlYW4gaW5zZXJ0LgoK KipTdGVwIDkuMzogQ0hFQ0sgRk9SIEVYQ0VQVElPTiBDQVRFR09SSUVTKioKUmVjb3JkOiAqKkhh cmR3YXJlIHF1aXJrL3dvcmthcm91bmQqKiDigJQgZmlybXdhcmUgbGVmdG92ZXIKYFBBR0VfRkFV TFRfQUNUSVZFYCBzbyBzdGFsbCBjb21tYW5kcyB3b3JrLiBOb3QgYSBuZXcgZHJpdmVyLCBub3Qg YSBuZXcKdXNlcnNwYWNlIEFQSS4KCioqU3RlcCA5LjQ6IE1BS0UgWU9VUiBERUNJU0lPTioqCgpU aGlzIHRyZWUgaXMgNy4zLXJjNDsgdGhlIHN0YWxsIHBhdGggaXMgb2xkIGFuZCB0aGUgYnVnIGlz IGEgZmlybXdhcmUKbGVmdG92ZXIgdnMgdGhhdCBwYXRoLCBub3QgYSA3LjMtb25seSBmZWF0dXJl LiBUaGUgcGF0Y2ggaXMgYSBzbWFsbCwKbWFpbnRhaW5lci1hY2tlZCB3b3JrYXJvdW5kIHRoYXQg c3RvcHMgSU9NTVUgYXR0YWNoIGZyb20gZmFpbGluZy4gT3JpZ2luCmluIGFuIHVuZmluaXNoZWQg TlBVIFJGQyBkb2VzIG5vdCBtYWtlIGl0IGEgbmV3IEFQSTsgV2lsbCBtZXJnZWQgaXQgYXMgYQpz dGFuZGFsb25lIElPTU1VIGZpeC4gTWlzc2luZyBgSU5UX0NMRUFSYCBpcyBhIHJlc2lkdWFsIElS US1hY2sgY29uY2VybiwKbm90IGEgcmVhc29uIHRvIGRyb3AgYSBzdGFsbC10aW1lb3V0IGZpeCB0 aGF0IGFscmVhZHkgdXNlcyB0aGUKZG9jdW1lbnRlZCBmYXVsdC1kb25lIGNvbW1hbmQuCgpWZXJp ZmljYXRpb246Ci0gW1BoYXNlIDFdIFBhcnNlZCB0YWdzOiBvbmx5IGF1dGhvciBTT0IgKyBXaWxs IERlYWNvbiBTT0I7IG5vCiAgRml4ZXMvUmVwb3J0ZWQtYnkvQ2M6c3RhYmxlCi0gW1BoYXNlIDFd IEJvZHk6IFBBR0VfRkFVTFRfQUNUSVZFIGxlZnRvdmVyIOKGkiBFTkFCTEVfU1RBTEwgaWdub3Jl ZCDihpIKICBwb2xsIHRpbWVvdXQgb24gUkszNTc2IE5QVSBtdWx0aS1iYW5rIHBvbGwKLSBbUGhh c2UgMl0gRGlmZjogKzEzIGluIGBya19pb21tdV9lbmFibGVfc3RhbGwoKWA7IGxvb3AgYWNrcwog IGBQQUdFX0ZBVUxUX0FDVElWRWAgd2l0aCBgQ01EX1BBR0VfRkFVTFRfRE9ORWAKLSBbUGhhc2Ug Ml0gYHJrX2lvbW11X2VuYWJsZSgpYCByZXR1cm5zIG9uIHN0YWxsIHRpbWVvdXQgYmVmb3JlCiAg YGZvcmNlX3Jlc2V0YCAobGluZSA5NTAtOTUyKSDigJQgYXR0YWNoIGZhaWxzCi0gW1BoYXNlIDNd IGdpdCBibGFtZTogZnVuY3Rpb24gZnJvbSBjNjhhMjkyMTUyZDMyICh2My4xOSk7IHBvbGwgZnJv bQogIDA0MTZiZjY0NzlhY2VmICh2NC4xNyk7IG11bHRpLW1tdSBjZDY0MzhjNWY4NDQ2ICh2NC42 KQotIFtQaGFzZSAzXSBnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIGIxMGQ1OTIwY2FmYTIg SEVBRDogeWVzOyBub3QgaW4KICB2Ny4yOyBpbiB2Ny4zLXJjMQotIFtQaGFzZSAzXSBTaWJsaW5n IDg0MTM2M2ViYjUwODIgaXMgY2xvY2tzLW9ubHk7IG5vdCByZXF1aXJlZCBmb3IgdGhpcwogIGh1 bmsKLSBbUGhhc2UgNF0gYjQgZGlnIC1jIGIxMGQ1OTIwY2FmYTI6CiAgaHR0cHM6Ly9wYXRjaC5t c2dpZC5saW5rLzIwMjYwNzE4MDMxMTQ2LjMzNjg4MTEtNi1nYWhpbmdAZ2FoaW5nd29vLmNvbQot IFtQaGFzZSA0XSBiNCBkaWcgLWE6IFJGQyB2MSAoc2tpcCBiYW5rcykg4oaSIHYyICh0aGlzIGFj ayk7IFdpbGwgYXBwbGllZAogIHYyIDQvOCBhbmQgNS84Ci0gW1BoYXNlIDRdIGI0IGRpZyAtdzog aW9tbXUgbWFpbnRhaW5lcnMgKyByb2NrY2hpcCBsaXN0IG9uIENDCi0gW1BoYXNlIDRdIG1ib3g6 IFdpbGwg4oCcQXBwbGllZCBkcml2ZXIgY2hhbmdlcyB0byBpb21tdSAocm9ja2NoaXAp4oCdOwog IFNhc2hpa28gSU5UX0NMRUFSIHdhcm5pbmc7IG5vIGh1bWFuIE5BSwotIFtQaGFzZSA0XSBsb3Jl Lmtlcm5lbC5vcmcgV2ViRmV0Y2gvY3VybDogSFRUUCA0MDMg4oCUIHN0YWJsZS1saXN0CiAgZGlz Y3Vzc2lvbiBVTlZFUklGSUVECi0gW1BoYXNlIDVdIENhbGxlcnM6IGRpc2FibGUgKHVuY2hlY2tl ZCkgYW5kIGVuYWJsZSAoZmF0YWwpOyBlbmFibGUgZnJvbQogIGF0dGFjaF9kZXZpY2UgYW5kIHJl c3VtZQotIFtQaGFzZSA1XSBJUlEgaGFuZGxlciBhbHJlYWR5IGlzc3VlcyBQQUdFX0ZBVUxUX0RP TkUgYXQgbGluZSA2NDIKLSBbUGhhc2UgNl0gZ2l0IGRlc2NyaWJlIEhFQUQ6IHY3LjMtcmM0LTI3 LWdmMDEwMDM2M2Q4YzM3OyBNYWtlZmlsZQogIDcuMy4wLXJjNDsgZmlsZSBwcmVzZW50Ci0gW1Bo YXNlIDZdIE5vIE5QVSBJT01NVSBub2RlcyBpbgogIGFyY2gvYXJtNjQvYm9vdC9kdHMvcm9ja2No aXAvcmszNTc2LmR0c2k7IHZkZWNfbW11IGlzIHR3by1iYW5rICsKICBkaXNhYmxlLW1tdS1yZXNl dAotIFtQaGFzZSA3XSBpb21tdS11cGRhdGVzLXY3LjMgbWVyZ2UgdGV4dDog4oCcZml4IGNsb2Nr LCBwcm9iZSBhbmQgc3RhbGUtCiAgZmF1bHQgaGFuZGxpbmfigJ0KLSBbUGhhc2UgOF0gRmFpbHVy ZTogMSBtcyBwb2xsIHRoZW4gSU9NTVUgZW5hYmxlL2F0dGFjaCBmYWlsdXJlOyBub3QKICBvb3Bz L1VBRgotIFVOVkVSSUZJRUQ6IHdoZXRoZXIgZmlybXdhcmUgbGVhdmVzIHRoaXMgYml0IG9uIGlu LXRyZWUgdmRlYy92b3A7CiAgd2hldGhlciBJTlRfU1RBVFVTIHNwdXJpb3VzIElSUSByZXByb2R1 Y2VzOyBzdGFibGVAIHRocmVhZAoKVGhlIGZpeCBpcyBzbWFsbCwgc3VyZ2ljYWwsIGFuZCBtZWV0 cyB0aGUgc3RhYmxlIGNyaXRlcmlhIGFzIGEgaGFyZHdhcmUKbGVmdG92ZXIgd29ya2Fyb3VuZCBp biBhIGxvbmctbGl2ZWQgZHJpdmVyLgoKKipZRVMqKgoKIGRyaXZlcnMvaW9tbXUvcm9ja2NoaXAt aW9tbXUuYyB8IDEzICsrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9yb2NrY2hpcC1pb21tdS5jIGIvZHJpdmVy cy9pb21tdS9yb2NrY2hpcC1pb21tdS5jCmluZGV4IDMwOWJhNzhlMjdkNGYuLjk4MmVhOWNhZmVl MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvcm9ja2NoaXAtaW9tbXUuYworKysgYi9kcml2 ZXJzL2lvbW11L3JvY2tjaGlwLWlvbW11LmMKQEAgLTQyMiw2ICs0MjIsMTkgQEAgc3RhdGljIGlu dCBya19pb21tdV9lbmFibGVfc3RhbGwoc3RydWN0IHJrX2lvbW11ICppb21tdSkKIAlpZiAoIXJr X2lvbW11X2lzX3BhZ2luZ19lbmFibGVkKGlvbW11KSkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAq IEJvb3QgZmlybXdhcmUgY2FuIGxlYXZlIGEgYmFuayBpbiBQQUdFX0ZBVUxUX0FDVElWRSB3aXRo IG5vIGhhbmRsZXIKKwkgKiAoUEFHRV9GQVVMVF9BQ1RJVkUgJiAhU1RBTExfQUNUSVZFICYgSURM RSkuICBTdWNoIGEgYmFuayBpZ25vcmVzCisJICogQ01EX0VOQUJMRV9TVEFMTCBhbmQgbmV2ZXIg cmVhY2hlcyBTVEFMTF9BQ1RJVkUsIHRpbWluZyBvdXQgdGhlIHBvbGwKKwkgKiBiZWxvdy4gIEFj a25vd2xlZGdlIGFueSBzdGFsZSBmYXVsdCBmaXJzdCBzbyBldmVyeSBiYW5rIHN0YXJ0cyBjbGVh bi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW9tbXUtPm51bV9tbXU7IGkrKykgeworCQlpZiAo cmtfaW9tbXVfcmVhZChpb21tdS0+YmFzZXNbaV0sIFJLX01NVV9TVEFUVVMpICYKKwkJICAgIFJL X01NVV9TVEFUVVNfUEFHRV9GQVVMVF9BQ1RJVkUpCisJCQl3cml0ZWwoUktfTU1VX0NNRF9QQUdF X0ZBVUxUX0RPTkUsCisJCQkgICAgICAgaW9tbXUtPmJhc2VzW2ldICsgUktfTU1VX0NPTU1BTkQp OworCX0KKwogCXJrX2lvbW11X2NvbW1hbmQoaW9tbXUsIFJLX01NVV9DTURfRU5BQkxFX1NUQUxM KTsKIAogCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChya19pb21tdV9pc19zdGFsbF9hY3RpdmUs IGlvbW11LCB2YWwsCi0tIAoyLjUzLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2No aXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3FC524E0B6A; Mon, 19 Oct 2026 13:54:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792418088; cv=none; b=LSWmpTUpqN97UkMKOKvw/ayvJ9xzJz3y9yQ6yq5nUKWsHpNIjztKOBQIPMF0LVB08z0t8/xqfwL58qnAW0hY/t8CMG8eknGROheorIOhBKZvreJa5sLxrGxEtJlpeSq7gs1n+IpXmkd/AgLh3kc1FyBMid/VE28e7uMVuyeajhI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792418088; c=relaxed/simple; bh=CCCkZGrH5vk3HVHXeEajIAsjdCp6kQyrwsDC0sjXb20=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=SxC7K8q15wub/Ry53NIyZEnmOBzdBk5GRJR86z6V4RpDNBvbzywLKgM1CTxn+AmXctS8l1G408dPiFDSYZ9jlgyA1vwBkrvfOjfx3nhMD8fGYoSoWVxYK/8mgoZZ6kYPfoFGPNC7XMJuxMRQhCPH+fUTGF4ya1KLqz5uCqx2UFI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JtNuvU1N; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JtNuvU1N" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CC7211F000C6; Mon, 19 Oct 2026 13:54:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418085; bh=8MyCnyVjuDkCWTOXbthwEjWPs5nnvJurQGBkZhq41Es=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JtNuvU1NhYBWSPhnBiEPSYR0S8U8E8YBpUwWS0ruyLRDrfkAWp4b53mGXDpaP6xxZ /l2ZvVrnwFUcdCKu3LfYzORQ717YdHXz8TuNvnBW3ewcX7RcoJoC9WPiOu5FZWrfqk UVoLq1hE4wNYTA5PUmMt4o9ENnnbna7kjIcV2E1jtjGpUgRM6ESQM/vrPK72wHfdlF ZBKJZZ5MNaqalmmeiVJKVbW3t7DdDmLJ+sDaPWyHXLmJGbFDlzgZdjQzsrbdxWylmP A72WaoXaLY5XmdqRNGx+4bBY/0TQb3fLLlIJMaQbhyWgLJx01gdl9OjJtP/ymfYo3i +o1j/VncrdXRg== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Jiaxing Hu , Will Deacon , Sasha Levin , joro@8bytes.org, heiko@sntech.de, iommu@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-5.10] iommu/rockchip: Clear stale page faults before enabling stall Date: Mon, 19 Oct 2026 09:44:53 -0400 Message-ID: <20261019135441.1420968-2-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Jiaxing Hu [ Upstream commit b10d5920cafa292ee3cab9c20f813da4fe4f00b8 ] Boot firmware can leave an IOMMU bank in PAGE_FAULT_ACTIVE before the driver has configured paging: PAGE_FAULT_ACTIVE=1 STALL_ACTIVE=0 IDLE=1 Such a bank ignores CMD_ENABLE_STALL and never reaches STALL_ACTIVE, so rk_iommu_enable_stall()'s readx_poll_timeout() spins until it times out (seen on the RK3576 NPU, whose MMUs share this poll across banks). Rather than special-casing these banks in the stall path, acknowledge the stale fault with CMD_PAGE_FAULT_DONE before enabling stall, so every bank starts from a clean state and the normal stall sequence applies to all of them. Banks without a pending fault are untouched. Signed-off-by: Jiaxing Hu Signed-off-by: Will Deacon Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: The local checkout is mainline **7.3-rc4**. The stall-timeout path is in this tree, and the 13-line firmware leftover workaround is a real IOMMU enable failure, not a new API. =============================================================== PHASE 1: COMMIT MESSAGE FORENSICS =============================================================== **Step 1.1: PARSE THE SUBJECT LINE** Record: **[iommu/rockchip] [Clear] [acknowledge leftover PAGE_FAULT_ACTIVE so stall enable does not poll-timeout]** **Step 1.2: PARSE ALL COMMIT MESSAGE TAGS** Record: - Signed-off-by: Jiaxing Hu \ (author) - Signed-off-by: Will Deacon \ (IOMMU maintainer; applied the patch) - No Fixes:, Reported-by:, Tested-by:, Reviewed-by:, Acked-by:, Link:, or Cc: stable (absence of Fixes/Cc:stable is expected for this review) **Step 1.3: ANALYZE THE COMMIT BODY TEXT** Record: - **Bug:** Boot firmware can leave an IOMMU bank in `PAGE_FAULT_ACTIVE=1`, `STALL_ACTIVE=0`, `IDLE=1` before the driver configures paging. - **Symptom:** That bank ignores `CMD_ENABLE_STALL` and never reaches `STALL_ACTIVE`. `rk_iommu_enable_stall()`’s `readx_poll_timeout()` fails. Observed on the RK3576 NPU, whose MMUs share the stall poll across banks (`rk_iommu_is_stall_active()` ANDs every bank). - **Root cause:** Stale firmware page-fault state blocks the stall command. - **Fix:** Issue `CMD_PAGE_FAULT_DONE` on any bank that still has `PAGE_FAULT_ACTIVE`, then use the normal stall sequence. Banks without a pending fault are untouched. - **Version info in message:** none beyond RK3576 NPU. **Step 1.4: DETECT HIDDEN BUG FIXES** Record: Not disguised. This is an explicit hardware/firmware leftover workaround that prevents a stall-enable timeout. =============================================================== PHASE 2: DIFF ANALYSIS - LINE BY LINE =============================================================== **Step 2.1: INVENTORY THE CHANGES** Record: - File: `drivers/iommu/rockchip-iommu.c` — **+13 / -0** - Function: `rk_iommu_enable_stall()` - Scope: single-file surgical fix **Step 2.2: UNDERSTAND THE CODE FLOW CHANGE** Record: - **Before:** If stall is not already active and paging is enabled, broadcast `CMD_ENABLE_STALL` and poll until every bank reports `STALL_ACTIVE` (1 ms timeout, `RK_MMU_POLL_TIMEOUT_US=1000`). One stuck bank fails the whole poll. - **After:** Same path, but first walk each bank; if `RK_MMU_STATUS_PAGE_FAULT_ACTIVE` is set, write `RK_MMU_CMD_PAGE_FAULT_DONE` to that bank’s command register, then enable stall as before. - Path: initialization / attach / resume (`rk_iommu_enable` → `rk_iommu_enable_stall`), and also disable/suspend (return value ignored there). **Step 2.3: IDENTIFY THE BUG MECHANISM** Record: **[Hardware workaround / logic correctness]** Firmware leaves `PAGE_FAULT_ACTIVE`. Hardware ignores `CMD_ENABLE_STALL` in that state. `rk_iommu_enable()` treats stall timeout as fatal (`if (ret) goto out_disable_clocks`), so the IOMMU never reaches `rk_iommu_force_reset()` / paging setup and **device attach fails**. The fix acks the leftover fault with the same command the IRQ handler already uses (`RK_MMU_CMD_PAGE_FAULT_DONE`). **Step 2.4: ASSESS THE FIX QUALITY** Record: Minimal and readable. Gated on `PAGE_FAULT_ACTIVE`, so idle banks are unchanged. Uses the existing command encoding. Regression risk is low; the only flagged concern is not also writing `RK_MMU_INT_CLEAR` (see Phase 4), which is incomplete-ack, not a new deadlock or API change. =============================================================== PHASE 3: GIT HISTORY INVESTIGATION =============================================================== **Step 3.1: BLAME THE CHANGED LINES** Record: - `rk_iommu_enable_stall()` introduced in **c68a292152d32** (`iommu/rockchip: rk3288 iommu driver`, 2014) — contained in **v3.19-rc1**. - Multi-bank `num_mmu` loop: **cd6438c5f8446**, contained in **v4.6-rc1**. - `readx_poll_timeout`: **0416bf6479acef**, contained in **v4.17-rc1**. - The 13-line ack loop is this commit (**b10d5920cafa2**). **Step 3.2: FOLLOW THE FIXES: TAG** Record: No Fixes: tag. Not applicable. Buggy interaction is firmware leftover vs stall path that has existed for years. **Step 3.3: CHECK FILE HISTORY FOR RELATED CHANGES** Record: - Immediate parent on the file: **841363ebb5082** `iommu/rockchip: Take all DT clocks` — same author, same RFC series (patch 4/8). Different problem (extra clocks so DTE_ADDR writes land). **Not a code dependency** of the stall ack. - No later commits on this file after b10d5920cafa2 in this tree. - Standalone IOMMU change; Will applied 4/8 and 5/8 without the rest of the NPU series. **Step 3.4: CHECK THE AUTHOR'S OTHER COMMITS** Record: Jiaxing Hu is not the IOMMU maintainer. In this tree, two rockchip-iommu commits (clocks + this). Will Deacon applied both. **Step 3.5: CHECK FOR DEPENDENT/PREREQUISITE COMMITS** Record: Diff only needs `rk_iommu_enable_stall`, `num_mmu`, `RK_MMU_STATUS_PAGE_FAULT_ACTIVE`, `RK_MMU_CMD_PAGE_FAULT_DONE` — all present long before 7.3. **Can apply standalone.** =============================================================== PHASE 4: MAILING LIST AND EXTERNAL RESEARCH =============================================================== **Step 4.1: FIND THE ORIGINAL PATCH DISCUSSION** Record: - Lore (via b4): https://patch.msgid.link/20260718031146.3368811-6-gahing@gahingwoo.com - Series: **[RFC PATCH v2 0/8] accel/rocket: RK3576 NPU (RKNN) enablement** - This patch is **v2 5/8**. v1 had two “skip orphaned-fault banks” patches; v2 replaced them with this fault-ack after Chaoyi Chen asked whether clearing the fault avoids skipping banks. - Will Deacon (2026-07-26): “Applied driver changes to iommu (rockchip)” for 4/8 and 5/8. No NAK on this patch. - Cover letter: NPU bring-up is still incomplete (“full inference is not correct yet”). This IOMMU fix was still taken on its own. - v3 of the wider series was not out when Will applied this; applied version is the latest for this hunk. **Step 4.2: CHECK WHO REVIEWED THE PATCH** Record: Recipients included Will Deacon, Joerg Roedel, Robin Murphy, Heiko Stuebner, iommu@lists.linux.dev, linux-rockchip. No human Reviewed-by on 5/8 in the thread. Will applied it. Sashiko bot (automated) commented. **Step 4.3: SEARCH FOR THE BUG REPORT** Record: No syzbot/bugzilla. Author hit it on a Radxa ROCK 4D while bringing up the RK3576 NPU IOMMUs. Cover letter lists “clearing a stale firmware page fault” as required for those IOMMUs to come up. **Step 4.4: CHECK FOR RELATED PATCHES AND SERIES** Record: RFC 8-patch NPU enablement. Only the two IOMMU driver patches were merged. NPU DT/driver patches are **not** in this tree (no NPU IOMMU nodes in `rk3576.dtsi`). This stall patch does not depend on them. **Step 4.5: CHECK STABLE MAILING LIST HISTORY** Record: lore.kernel.org/stable search returned HTTP 403. **UNVERIFIED** whether stable@ discussed this. No in-tree grep hit except this commit. Sashiko bot concern (verified from mbox): `CMD_PAGE_FAULT_DONE` without `RK_MMU_INT_CLEAR` might leave a raw IRQ pending. On `rockchip,disable- mmu-reset` instances (in-tree: px30, rk3288, rk3368, rk3399, rk356x, rk3576 vdec), `rk_iommu_force_reset()` is skipped, then `RK_MMU_INT_MASK` is programmed in `rk_iommu_enable()`. A leftover raw bit could fire a page-fault IRQ. The existing IRQ handler already logs, optionally `report_iommu_fault()`, zaps cache, issues `PAGE_FAULT_DONE`, and clears INT_STATUS. That is a possible spurious IRQ/log, not a verified panic. No follow-up commit addressed it; Will still applied the patch. =============================================================== PHASE 5: CODE SEMANTIC ANALYSIS =============================================================== **Step 5.1: IDENTIFY KEY FUNCTIONS** Record: `rk_iommu_enable_stall()` (modified). Helpers used: `rk_iommu_read`, `rk_iommu_is_stall_active`, `rk_iommu_is_paging_enabled`, `rk_iommu_command`. **Step 5.2: TRACE CALLERS** Record: - `rk_iommu_disable()` line 928 — detach / runtime suspend. Return ignored. - `rk_iommu_enable()` line 950 — attach / runtime resume. **Failure aborts enable.** - `rk_iommu_enable()` called from `rk_iommu_attach_device()` (line 1064) and `rk_iommu_resume()` (line 1349). **Step 5.3: TRACE CALLEES** Record: MMIO status/command. No allocation, no new locks. `writel(RK_MMU_CMD_PAGE_FAULT_DONE, base + RK_MMU_COMMAND)` matches `rk_iommu_base_command()`. **Step 5.4: FOLLOW THE CALL CHAIN** Record: Userspace/DMA attach or runtime PM resume → `rk_iommu_attach_device` / `rk_iommu_resume` → `rk_iommu_enable` → `rk_iommu_enable_stall`. Reachable on Rockchip SoCs with `CONFIG_ROCKCHIP_IOMMU`. Trigger is firmware leftover + paging already enabled. Not a syscall fuzz path; it is device bring-up. **Step 5.5: SEARCH FOR SIMILAR PATTERNS** Record: IRQ path already does `RK_MMU_CMD_PAGE_FAULT_DONE` (line 642) plus `RK_MMU_INT_CLEAR`. No other stall-path fault ack. In-tree RK3576 `vdec_mmu` is two-bank (`reg` two regions), so the AND-poll issue is not NPU-only in principle. =============================================================== PHASE 6: CROSS-REFERENCING AGAINST THE LOCAL TREE =============================================================== **Step 6.1: DOES THE BUGGY CODE EXIST IN THIS TREE?** Record: **Yes.** Local tree: `git describe HEAD` = **v7.3-rc4-27-gf0100363d8c37**, `make kernelversion` = **7.3.0-rc4**. `rk_iommu_enable_stall()` is present; this commit is already an ancestor of HEAD (`git merge-base --is-ancestor b10d5920cafa2 HEAD` succeeded). Landed via `iommu-updates-v7.3` (not in v7.2). Stall path itself dates to v3.19. **Step 6.2: CHECK FOR BACKPORT COMPLICATIONS** Record: Hunk is a contiguous insert after the paging-enabled check. Expected apply: **clean** on trees that have the 2016 multi-bank `num_mmu` loop (v4.6+). No conflicting later edits on this function in this checkout. **Step 6.3: CHECK IF RELATED FIXES ARE ALREADY HERE** Record: This is the only “stale page fault” commit. No alternate fix. Sibling clocks change is independent. =============================================================== PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT =============================================================== **Step 7.1: IDENTIFY THE SUBSYSTEM AND ITS CRITICALITY** Record: **drivers/iommu/rockchip-iommu.c** — Rockchip IOMMU. Criticality: **IMPORTANT** (platform IOMMU for multimedia/NPU DMA; not core mm/VFS, but attach failure takes down the consumer device). **Step 7.2: ASSESS SUBSYSTEM ACTIVITY** Record: Mature driver (2014), still receiving Rockchip bring-up fixes. Joerg’s v7.3 pull: “Rework Rockchip state handling and fix clock, probe and stale-fault handling.” =============================================================== PHASE 8: IMPACT AND RISK ASSESSMENT =============================================================== **Step 8.1: DETERMINE WHO IS AFFECTED** Record: **driver-specific / platform-specific** — `CONFIG_ROCKCHIP_IOMMU` on Rockchip. Practical trigger reported on RK3576 NPU MMUs (those DT nodes are **not** in this tree). Any multi- bank instance whose firmware leaves `PAGE_FAULT_ACTIVE` can hit the same poll (e.g. in-tree RK3576 `vdec_mmu` has two banks). **Step 8.2: DETERMINE THE TRIGGER CONDITIONS** Record: Boot firmware leftover fault, then first stall enable while paging is still enabled. Timing: probe/attach or resume, not a hot path. Unprivileged users do not trigger it directly; it is firmware × driver init. No public reproducer beyond the author’s ROCK 4D bring-up. **Step 8.3: DETERMINE THE FAILURE MODE SEVERITY** Record: **IOMMU enable fails after a 1 ms poll** (`RK_MMU_POLL_TIMEOUT_US=1000`). Attach returns error; the DMA device does not get a working IOMMU. **Not** a panic, hang, UAF, or corruption. Severity: **HIGH** for the affected device (non-functional), **MEDIUM** system-wide (1 ms timeout + error, rest of the machine continues). **Step 8.4: CALCULATE RISK-BENEFIT RATIO** Record: - **Benefit:** Hardware/firmware workaround so stall enable succeeds; IOMMU attach can proceed. High for RK3576 NPU users; modest for other Rockchip boards unless firmware leaves the same bit. - **Risk:** 13 lines, status-gated. Theoretical spurious IRQ if INT_STATUS is not cleared on `disable-mmu-reset` devices. No new locks/APIs. - **Ratio:** Benefit outweighs risk. Same class as other hardware leftover/quirk fixes. =============================================================== PHASE 9: FINAL SYNTHESIS =============================================================== **Step 9.1: COMPILE THE EVIDENCE** FOR: - Real, explained failure: stall poll times out, `rk_iommu_enable()` aborts, device attach fails. - Small (+13), contained, status-gated. - Same command the IRQ handler already uses. - Will Deacon applied it independently of the unfinished NPU RFC. - v7.3 IOMMU pull listed stale-fault handling as a fix. - Driver and stall path exist in this tree since v3.19 / v4.6. - Hardware/firmware workaround (stable exception category). - No new APIs or features. AGAINST: - Originated in an RFC series to enable RK3576 NPU; NPU IOMMU DT is still not in this tree. - Observed on that NPU, not reported on long-shipped VOP/VDEC. - Not crash/security/corruption; 1 ms timeout then enable failure. - Sashiko noted missing `INT_CLEAR`; unaddressed. - No Fixes:/Cc:stable (not a negative by itself). UNRESOLVED: - lore.kernel.org/stable search HTTP 403. - Whether in-tree vdec/vop firmware also leaves `PAGE_FAULT_ACTIVE` (author only cited NPU). - Whether a leftover INT_STATUS after `PAGE_FAULT_DONE` actually fires on `disable-mmu-reset` hardware. **Step 9.2: APPLY THE STABLE RULES CHECKLIST** 1. Obviously correct and tested? **PASS** — logic matches the described hardware state; author tested on ROCK 4D; IOMMU maintainer applied it. 2. Fixes a real bug that affects users? **PASS** — stall timeout prevents IOMMU enable/attach. 3. Important issue? **PASS** — device IOMMU never comes up (not a panic, but hardware non-functional). Severity HIGH for that device. 4. Small and contained? **PASS** — 13 lines, one function. 5. No new features or APIs? **PASS** 6. Can apply to the local tree? **PASS** — stall path and symbols are here; hunk is a clean insert. **Step 9.3: CHECK FOR EXCEPTION CATEGORIES** Record: **Hardware quirk/workaround** — firmware leftover `PAGE_FAULT_ACTIVE` so stall commands work. Not a new driver, not a new userspace API. **Step 9.4: MAKE YOUR DECISION** This tree is 7.3-rc4; the stall path is old and the bug is a firmware leftover vs that path, not a 7.3-only feature. The patch is a small, maintainer-acked workaround that stops IOMMU attach from failing. Origin in an unfinished NPU RFC does not make it a new API; Will merged it as a standalone IOMMU fix. Missing `INT_CLEAR` is a residual IRQ-ack concern, not a reason to drop a stall-timeout fix that already uses the documented fault-done command. Verification: - [Phase 1] Parsed tags: only author SOB + Will Deacon SOB; no Fixes/Reported-by/Cc:stable - [Phase 1] Body: PAGE_FAULT_ACTIVE leftover → ENABLE_STALL ignored → poll timeout on RK3576 NPU multi-bank poll - [Phase 2] Diff: +13 in `rk_iommu_enable_stall()`; loop acks `PAGE_FAULT_ACTIVE` with `CMD_PAGE_FAULT_DONE` - [Phase 2] `rk_iommu_enable()` returns on stall timeout before `force_reset` (line 950-952) — attach fails - [Phase 3] git blame: function from c68a292152d32 (v3.19); poll from 0416bf6479acef (v4.17); multi-mmu cd6438c5f8446 (v4.6) - [Phase 3] git merge-base --is-ancestor b10d5920cafa2 HEAD: yes; not in v7.2; in v7.3-rc1 - [Phase 3] Sibling 841363ebb5082 is clocks-only; not required for this hunk - [Phase 4] b4 dig -c b10d5920cafa2: https://patch.msgid.link/20260718031146.3368811-6-gahing@gahingwoo.com - [Phase 4] b4 dig -a: RFC v1 (skip banks) → v2 (this ack); Will applied v2 4/8 and 5/8 - [Phase 4] b4 dig -w: iommu maintainers + rockchip list on CC - [Phase 4] mbox: Will “Applied driver changes to iommu (rockchip)”; Sashiko INT_CLEAR warning; no human NAK - [Phase 4] lore.kernel.org WebFetch/curl: HTTP 403 — stable-list discussion UNVERIFIED - [Phase 5] Callers: disable (unchecked) and enable (fatal); enable from attach_device and resume - [Phase 5] IRQ handler already issues PAGE_FAULT_DONE at line 642 - [Phase 6] git describe HEAD: v7.3-rc4-27-gf0100363d8c37; Makefile 7.3.0-rc4; file present - [Phase 6] No NPU IOMMU nodes in arch/arm64/boot/dts/rockchip/rk3576.dtsi; vdec_mmu is two-bank + disable-mmu-reset - [Phase 7] iommu-updates-v7.3 merge text: “fix clock, probe and stale- fault handling” - [Phase 8] Failure: 1 ms poll then IOMMU enable/attach failure; not oops/UAF - UNVERIFIED: whether firmware leaves this bit on in-tree vdec/vop; whether INT_STATUS spurious IRQ reproduces; stable@ thread The fix is small, surgical, and meets the stable criteria as a hardware leftover workaround in a long-lived driver. **YES** drivers/iommu/rockchip-iommu.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index 309ba78e27d4f..982ea9cafee1b 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -422,6 +422,19 @@ static int rk_iommu_enable_stall(struct rk_iommu *iommu) if (!rk_iommu_is_paging_enabled(iommu)) return 0; + /* + * Boot firmware can leave a bank in PAGE_FAULT_ACTIVE with no handler + * (PAGE_FAULT_ACTIVE & !STALL_ACTIVE & IDLE). Such a bank ignores + * CMD_ENABLE_STALL and never reaches STALL_ACTIVE, timing out the poll + * below. Acknowledge any stale fault first so every bank starts clean. + */ + for (i = 0; i < iommu->num_mmu; i++) { + if (rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) & + RK_MMU_STATUS_PAGE_FAULT_ACTIVE) + writel(RK_MMU_CMD_PAGE_FAULT_DONE, + iommu->bases[i] + RK_MMU_COMMAND); + } + rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_STALL); ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val, -- 2.53.0