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 B63F8C624CE for ; Mon, 31 Aug 2026 13:48:39 +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=6AIdJ6l5OPILyRtuHBNG1XmEkwbR2dxLv6cvtKd8XgY=; b=k/S9CtIlXEdHnJ u1jpelFdkPqAOGTbEPmWAdfnBbucdYUKy9mCeJ0W+uf6dZqq5jp/vhmFWPDxJpYIyej2sY9IwfMcZ 1S8AWH1RM2G0jzlMvvqlOo5tqkkxd6+PmPHMMXicafagBmOA7Jq8uD10yPPT9GOf9UsNF9MZDPK8+ fAmmPk0z6Ea6k8sxJ9XuPLrIf352GB/oFgUTqmE5cHajrhEZKbutlcg0XdGzgAlgqkOEvSAPXW8JR 3/RemMHjQkUc4yMdccTrLK++1OIjsD/+fDtWIAefREalXLj+rLQSn6eaN2Fxjqrm/L6VifIIcklSN XPAFKyUEa55OS07bF/kA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x12NL-00000009X0x-1kHf; Mon, 31 Aug 2026 13:48:39 +0000 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x12NJ-00000009X0R-1BLW for linux-phy@lists.infradead.org; Mon, 31 Aug 2026 13:48:37 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 937B16013A; Mon, 31 Aug 2026 13:48:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E79061F00ACA; Mon, 31 Aug 2026 13:48:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788184116; bh=sRR5RzAfZF2ygozG/qavqvPeChy7+XYeXV4CDkN88MM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=NipMI7oOpWJpEntVg0UXpciHQWk1UP2b8FmPcMFTjVVrCLQR+u1a+ylYhmqi7tBhb AKWlQzqNUuVd+40RZ0B7OHrwZD9nZB3UUrZJL+qsFMOU40KR1+Y/0JaatwTvWQ/QdZ HR5HGZEh48SeSifIPKxDA8kihDyJpMcuTUgyFij8XZwf9b4Y+oWmk5nr98aTlfaNwL UEJmY654ud2HkVlU4J2AEYyagDvUFkRmUR5BSDe5lbrFL/KVrnztChBcSQW5F+Tzr8 0136PGo49b8UirOLIn5Qit/Izia1QtgrR8xCRRHOsTCZANjtQjxtQWMYV5g6XvMLod 616c3Bb0WWOdQ== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Wesley Cheng , Dmitry Baryshkov , Bjorn Andersson , Abel Vesa , Neil Armstrong , Konrad Dybcio , Vinod Koul , Sasha Levin , linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18] phy: qcom: m31-eusb2: Make USB repeater optional Date: Mon, 31 Aug 2026 09:28:49 -0400 Message-ID: <20260831133314.4125787-501-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831133314.4125787-1-sashal@kernel.org> References: <20260831133314.4125787-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.48 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org RnJvbTogV2VzbGV5IENoZW5nIDx3ZXNsZXkuY2hlbmdAb3NzLnF1YWxjb21tLmNvbT4KClsgVXBz dHJlYW0gY29tbWl0IGE2MmJmYmNmMmRiNGFlNmViN2E1NDRhNDBiMTA3NWE4MTc4NGVhNDEgXQoK QSByZXBlYXRlciBpcyBub3QgcmVxdWlyZWQgZm9yIHRoZSBQSFkgdG8gZnVuY3Rpb24uIE9uIHN5 c3RlbXMgd2l0aAptdWx0aXBsZSBQSFkgaW5zdGFuY2VzIGNvbm5lY3RlZCB0byBhIG11bHRpLXBv cnQgY29udHJvbGxlciwgc29tZSBQSFlzCm1heSBiZSB1bmNvbm5lY3RlZC4gQWxsIFBIWXMgbXVz dCBzdGlsbCBwcm9iZSBzdWNjZXNzZnVsbHkgZXZlbiB3aXRob3V0CmF0dGFjaGVkIHJlcGVhdGVy cywgb3RoZXJ3aXNlIHRoZSBjb250cm9sbGVyIHByb2JlIGZhaWxzLgoKU28gbWFrZSBpdCBvcHRp b25hbC4KClNpZ25lZC1vZmYtYnk6IFdlc2xleSBDaGVuZyA8d2VzbGV5LmNoZW5nQG9zcy5xdWFs Y29tbS5jb20+ClthYmVsLnZlc2FAb3NzLnF1YWxjb21tLmNvbTogY29tbWl0IHJlLXdvcmRlZCB0 byByZWZsZWN0IGFjdHVhbCByZWFzb25dClJldmlld2VkLWJ5OiBEbWl0cnkgQmFyeXNoa292IDxk bWl0cnkuYmFyeXNoa292QG9zcy5xdWFsY29tbS5jb20+ClJldmlld2VkLWJ5OiBCam9ybiBBbmRl cnNzb24gPGFuZGVyc3NvbkBrZXJuZWwub3JnPgpTaWduZWQtb2ZmLWJ5OiBBYmVsIFZlc2EgPGFi ZWwudmVzYUBvc3MucXVhbGNvbW0uY29tPgpSZXZpZXdlZC1ieTogTmVpbCBBcm1zdHJvbmcgPG5l aWwuYXJtc3Ryb25nQGxpbmFyby5vcmc+ClJldmlld2VkLWJ5OiBLb25yYWQgRHliY2lvIDxrb25y YWQuZHliY2lvQG9zcy5xdWFsY29tbS5jb20+Ckxpbms6IGh0dHBzOi8vcGF0Y2gubXNnaWQubGlu ay8yMDI2MDMwMi1waHktcWNvbS1tMzEtZXVzYjItbWFrZS1yZXBlYXRlci1vcHRpb25hbC12Mi0x LWRiZjcxNGM3MjA1NkBvc3MucXVhbGNvbW0uY29tClNpZ25lZC1vZmYtYnk6IFZpbm9kIEtvdWwg PHZrb3VsQGtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2Vy bmVsLm9yZz4KLS0tCgpMTE0gR2VuZXJhdGVkIGV4cGxhbmF0aW9ucywgbWF5IGJlIGNvbXBsZXRl bHkgYm9ndXM6CgojIFN0YWJsZSBCYWNrcG9ydCBBbmFseXNpczogYHBoeTogcWNvbTogbTMxLWV1 c2IyOiBNYWtlIFVTQiByZXBlYXRlcgpvcHRpb25hbGAKCioqTG9jYWwgdHJlZToqKiBMaW51eCAq KjYuMTguNDMqKiAoYHY2LjE4LjQzLTEtZ2M3ZjBkYWMwMmQyMzJgKQoqKkNvbW1pdCB1bmRlciBy ZXZpZXc6KiogYGRkMDg1YmYyNzg0MjFgICh1cHN0cmVhbSBgYTYyYmZiY2YyZGI0YCkg4oCUCioq bm90IHlldCBpbiB0aGlzIHRyZWUqKgoKLS0tCgojIyBQSEFTRSAxOiBDT01NSVQgTUVTU0FHRSBG T1JFTlNJQ1MKCiMjIyBTdGVwIDEuMTogU3ViamVjdCBsaW5lCioqUmVjb3JkOioqIGBbcGh5OiBx Y29tOiBtMzEtZXVzYjJdYCBgW21ha2VdYCDigJQgTWFrZSB0aGUgVVNCIHJlcGVhdGVyCm9wdGlv bmFsIGluIHRoZSBRdWFsY29tbSBNMzEgZVVTQjIgUEhZIGRyaXZlciBwcm9iZSBwYXRoLgoKIyMj IFN0ZXAgMS4yOiBUYWdzCioqUmVjb3JkOioqCi0gKipGaXhlczoqKiDigJQgYWJzZW50Ci0gKipS ZXBvcnRlZC1ieToqKiDigJQgYWJzZW50Ci0gKipUZXN0ZWQtYnk6Kiog4oCUIGFic2VudAotICoq UmV2aWV3ZWQtYnk6KiogRG1pdHJ5IEJhcnlzaGtvdiwgQmpvcm4gQW5kZXJzc29uLCBOZWlsIEFy bXN0cm9uZywKICBLb25yYWQgRHliY2lvCi0gKipBY2tlZC1ieToqKiDigJQgYWJzZW50Ci0gKipM aW5rOioqIGh0dHBzOi8vcGF0Y2gubXNnaWQubGluay8yMDI2MDMwMi1waHktcWNvbS1tMzEtZXVz YjItbWFrZS0KICByZXBlYXRlci1vcHRpb25hbC12Mi0xLWRiZjcxNGM3MjA1NkBvc3MucXVhbGNv bW0uY29tCi0gKipDYzogc3RhYmxlOioqIOKAlCBhYnNlbnQgKGV4cGVjdGVkIGZvciBtYW51YWwg cmV2aWV3KQotICoqU2lnbmVkLW9mZi1ieToqKiBXZXNsZXkgQ2hlbmcsIEFiZWwgVmVzYSwgVmlu b2QgS291bCAoaWdub3JlCiAgcGlwZWxpbmUgU09CcykKCk5vdGFibGU6IG11bHRpcGxlIHN1YnN5 c3RlbSBtYWludGFpbmVycyByZXZpZXdlZDsgbm8gc3l6Ym90L2Z1enplcgpyZXBvcnQuCgojIyMg U3RlcCAxLjM6IEJvZHkgYW5hbHlzaXMKKipSZWNvcmQ6KioKLSAqKkJ1ZzoqKiBEcml2ZXIgcmVx dWlyZXMgYW4gZVVTQjIgcmVwZWF0ZXIgYXQgcHJvYmUgdGltZSB2aWEKICBgZGV2bV9vZl9waHlf Z2V0X2J5X2luZGV4KClgLCBidXQgcmVwZWF0ZXJzIGFyZSBub3QgYWx3YXlzIHByZXNlbnQuCi0g KipTeW1wdG9tOioqIE9uIG11bHRpLXBvcnQgY29udHJvbGxlcnMgd2l0aCBtdWx0aXBsZSBQSFkg aW5zdGFuY2VzLAogIFBIWXMgd2l0aG91dCBhdHRhY2hlZCByZXBlYXRlcnMgZmFpbCBwcm9iZTsg dGhhdCBjYW4gZmFpbCB0aGUgd2hvbGUKICBVU0IgY29udHJvbGxlciBwcm9iZS4KLSAqKlJvb3Qg Y2F1c2U6KiogUmVwZWF0ZXIgdHJlYXRlZCBhcyBtYW5kYXRvcnkgd2hlbiBoYXJkd2FyZS9EVCBh bGxvd3MKICBpdCB0byBiZSBhYnNlbnQuCi0gKipWZXJzaW9uIGluZm86KiogTm9uZSBpbiBtZXNz YWdlOyBkcml2ZXIgdGFyZ2V0cwogIGBxY29tLHNtODc1MC1tMzEtZXVzYjItcGh5YC4KCiMjIyBT dGVwIDEuNDogSGlkZGVuIGJ1ZyBmaXg/CioqUmVjb3JkOioqIFllcy4gRGVzcGl0ZSDigJxtYWtl IG9wdGlvbmFs4oCdIHdvcmRpbmcsIHRoaXMgaXMgYSByZWFsIHByb2JlLQpmYWlsdXJlIGJ1ZyBm aXgsIG5vdCBhIGZlYXR1cmUuIFRoZSBEVCBiaW5kaW5nIGFscmVhZHkgbGlzdHMgYHBoeXNgIGFz Cm9wdGlvbmFsIChub3QgaW4gYHJlcXVpcmVkOmApLCBidXQgdGhlIGRyaXZlciBlbmZvcmNlZCBp dCBhcyBtYW5kYXRvcnkuCgotLS0KCiMjIFBIQVNFIDI6IERJRkYgQU5BTFlTSVMKCiMjIyBTdGVw IDIuMTogSW52ZW50b3J5CioqUmVjb3JkOioqCi0gKipGaWxlOioqIGBkcml2ZXJzL3BoeS9xdWFs Y29tbS9waHktcWNvbS1tMzEtZXVzYjIuY2AgKCsxIC8gLTEpCi0gKipGdW5jdGlvbjoqKiBgbTMx ZXVzYjJfcGh5X3Byb2JlKClgCi0gKipTY29wZToqKiBTaW5nbGUtZmlsZSwgc2luZ2xlLWxpbmUg c3VyZ2ljYWwgY2hhbmdlCgojIyMgU3RlcCAyLjI6IENvZGUgZmxvdyBjaGFuZ2UKKipSZWNvcmQ6 KioKLSAqKkJlZm9yZToqKiBgZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KGRldiwgZGV2LT5vZl9u b2RlLCAwKWAgcmV0dXJucwogIGAtRU5PREVWYCB3aGVuIG5vIGBwaHlzYCBwcm9wZXJ0eSDihpIg cHJvYmUgZmFpbHMuCi0gKipBZnRlcjoqKiBgZGV2bV9waHlfb3B0aW9uYWxfZ2V0KGRldiwgTlVM TClgIGNvbnZlcnRzIGAtRU5PREVWYCB0bwogIGBOVUxMYCDihpIgcHJvYmUgc3VjY2VlZHMuCi0g KipQYXRoIGFmZmVjdGVkOioqIFBsYXRmb3JtIGRldmljZSBwcm9iZSBkdXJpbmcgYm9vdC9tb2R1 bGUgaW5pdC4KCiMjIyBTdGVwIDIuMzogQnVnIG1lY2hhbmlzbQoqKlJlY29yZDoqKiAqKkxvZ2lj IC8gY29ycmVjdG5lc3MgZml4Kiog4oCUIG1hbmRhdG9yeSByZXNvdXJjZSBsb29rdXAgZm9yCmFu IG9wdGlvbmFsIGNvbXBvbmVudC4gQ2F0ZWdvcnk6IGRyaXZlci9EVCBtaXNtYXRjaCBjYXVzaW5n IGNhc2NhZGluZwpwcm9iZSBmYWlsdXJlLgoKV2l0aCByZXBlYXRlciBwcmVzZW50LCBib3RoIEFQ SXMgcmVzb2x2ZSBpbmRleCAwIHZpYSBgX29mX3BoeV9nZXQoKWAKKHZlcmlmaWVkIGluIGBwaHlf Z2V0KClgIGFuZCBgZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KClgKS4KCiMjIyBTdGVwIDIuNDog Rml4IHF1YWxpdHkKKipSZWNvcmQ6KioKLSBGaXggaXMgbWluaW1hbCBhbmQgbWF0Y2hlcyBlc3Rh Ymxpc2hlZCBwYXR0ZXJuIGluIGBwaHktc25wcy1ldXNiMi5jYAogIChgZGV2bV9vZl9waHlfb3B0 aW9uYWxfZ2V0YCkuCi0gYHBoeV9pbml0KClgLCBgcGh5X2V4aXQoKWAsIGFuZCBgcGh5X3NldF9t b2RlX2V4dCgpYCBhbGwgYWNjZXB0IGBOVUxMYAogIGFuZCByZXR1cm4gMCAodmVyaWZpZWQgaW4g YHBoeS1jb3JlLmNgKS4KLSBObyBuZXcgZGVhZGxvY2svbG9ja2luZyByaXNrLgotIGBJU19FUlIo KWAgY2hlY2sgYWZ0ZXIgb3B0aW9uYWwgZ2V0IHJlbWFpbnMgY29ycmVjdCAob25seSByZWFsIGVy cm9ycwogIHByb3BhZ2F0ZSkuCgotLS0KCiMjIFBIQVNFIDM6IEdJVCBISVNUT1JZIElOVkVTVElH QVRJT04KCiMjIyBTdGVwIDMuMTogQmxhbWUKKipSZWNvcmQ6KiogUmVwZWF0ZXIgbG9va3VwIGlu dHJvZHVjZWQgaW4gYDVkMzI0ZTUxNTlkOWVgICg2LjE4IG1lcmdlLApOb3YgMjAyNSkuIEJ1Z2d5 IGxpbmUgcHJlc2VudCBhdCBgZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LQpxY29tLW0zMS1ldXNi Mi5jOjI4OGAgaW4gdGhpcyB0cmVlLgoKIyMjIFN0ZXAgMy4yOiBGaXhlczogdGFnCioqUmVjb3Jk OioqIE4vQSDigJQgbm8gYEZpeGVzOmAgdGFnLgoKIyMjIFN0ZXAgMy4zOiBSZWxhdGVkIGZpbGUg aGlzdG9yeQoqKlJlY29yZDoqKiBSZWNlbnQgaGlzdG9yeSBpbiB0aGlzIHRyZWU6Ci0gYDA5ZTFj OTY1OTRhZmJgIOKAlCBQTExfRU4gc3VzcGVuZCBwb3dlciBmaXggKGJhY2twb3J0ZWQsIGBDYzog c3RhYmxlYCkKLSBgMzdlZjExYWIyY2YzY2Ag4oCUIGluaXQgc2VxdWVuY2UgdXBkYXRlCi0gRHJp dmVyIGFycml2ZWQgdmlhIGA1ZDMyNGU1MTU5ZDllYCAoNi4xOCkKClN0YW5kYWxvbmUgb25lLXBh dGNoIGZpeDsgbm90IHBhcnQgb2YgYSBtdWx0aS1wYXRjaCBkZXBlbmRlbmN5IHNlcmllcy4KCiMj IyBTdGVwIDMuNDogQXV0aG9yIGNvbnRleHQKKipSZWNvcmQ6KiogV2VzbGV5IENoZW5nIGlzIHRo ZSBkcml2ZXIgYXV0aG9yIGFuZCBEVCBiaW5kaW5nIG1haW50YWluZXIuCkFiZWwgVmVzYSBjb21t aXR0ZWQgdjIuIFZpbm9kIEtvdWwgKFBIWSBtYWludGFpbmVyKSBtZXJnZWQuIE11bHRpcGxlClF1 YWxjb21tL0FSTSBtYWludGFpbmVycyByZXZpZXdlZC4KCiMjIyBTdGVwIDMuNTogRGVwZW5kZW5j aWVzCioqUmVjb3JkOioqIE5vIHByZXJlcXVpc2l0ZXMuIGBkZXZtX3BoeV9vcHRpb25hbF9nZXQo KWAgZXhpc3RzIGluIHRoaXMKdHJlZeKAmXMgYHBoeS1jb3JlLmNgLiBGaXggYXBwbGllcyBjbGVh bmx5IHRvIGN1cnJlbnQgYDY4ZjFiYThmZWM0YWRgCmluZGV4IHN0YXRlLgoKLS0tCgojIyBQSEFT RSA0OiBNQUlMSU5HIExJU1QgQU5EIEVYVEVSTkFMIFJFU0VBUkNICgojIyMgU3RlcCA0LjE6IE9y aWdpbmFsIGRpc2N1c3Npb24KKipSZWNvcmQ6KioKLSAqKmI0IGRpZzoqKiBodHRwczovL3BhdGNo Lm1zZ2lkLmxpbmsvMjAyNjAyMjctcGh5LXFjb20tbTMxLWV1c2IyLW1ha2UtCiAgcmVwZWF0ZXIt b3B0aW9uYWwtdjEtMS0wN2EwODZiYmFiYTRAb3NzLnF1YWxjb21tLmNvbQotICoqUmV2aXNpb25z OioqIHYxICgyMDI2LTAyLTI3KSwgdjIgKDIwMjYtMDMtMDIsIGNvbW1pdHRlZCB2ZXJzaW9uKQot ICoqRmVlZGJhY2s6KiogUmV2aWV3ZWQtYnkgZnJvbSBEbWl0cnkgQmFyeXNoa292IGFuZCBCam9y biBBbmRlcnNzb24gb24KICB2MTsgbm8gTkFLcyBmb3VuZAotICoqU3RhYmxlIG5vbWluYXRpb24g aW4gdGhyZWFkOioqIG5vbmUgZm91bmQKCiMjIyBTdGVwIDQuMjogUmV2aWV3ZXJzCioqUmVjb3Jk OioqIEND4oCZZDogYGxpbnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnYCwgYGxpbnV4LWFybS0K bXNtQHZnZXIua2VybmVsLm9yZ2AsIFZpbm9kIEtvdWwsIEJqb3JuIEFuZGVyc3NvbiwgRG1pdHJ5 IEJhcnlzaGtvdiDigJQKYXBwcm9wcmlhdGUgbWFpbnRhaW5lciBjb3ZlcmFnZS4KCiMjIyBTdGVw IDQuMzogQnVnIHJlcG9ydAoqKlJlY29yZDoqKiBObyBleHRlcm5hbCBidWcgcmVwb3J0IG9yIHN5 emJvdCBsaW5rLiBCdWcgZGVzY3JpYmVkIGZyb20KaGFyZHdhcmUvRFQgZGVzaWduIHJlcXVpcmVt ZW50cy4KCiMjIyBTdGVwIDQuNDogUmVsYXRlZCBwYXRjaGVzCioqUmVjb3JkOioqIFNlcGFyYXRl IGZvbGxvdy11cCBvbiBtYXN0ZXI6IGAzNjFmNTMzYTJkY2UyYCAo4oCcRml4IHJldHVybgp2YWx1 ZSBvZiBpbml0IGNhbGzigJ0pIOKAlCBmaXhlcyB1bnJlbGF0ZWQgZXJyb3ItcGF0aCByZXR1cm4g YnVnOyAqKm5vdCoqIGEKcHJlcmVxdWlzaXRlIGZvciB0aGlzIGNoYW5nZS4KCiMjIyBTdGVwIDQu NTogU3RhYmxlIGxpc3QKKipSZWNvcmQ6KiogTm8gc3RhYmxlLWxpc3QgZGlzY3Vzc2lvbiBmb3Vu ZCBmb3IgdGhpcyBzcGVjaWZpYyBwYXRjaC4KCi0tLQoKIyMgUEhBU0UgNTogQ09ERSBTRU1BTlRJ QyBBTkFMWVNJUwoKIyMjIFN0ZXAgNS4xOiBLZXkgZnVuY3Rpb25zCioqUmVjb3JkOioqIGBtMzFl dXNiMl9waHlfcHJvYmUoKWAgbW9kaWZpZWQ7IGRvd25zdHJlYW0gdXNlcnMgb2YKYHBoeS0+cmVw ZWF0ZXJgOiBgbTMxZXVzYjJfcGh5X2luaXQoKWAsIGBtMzFldXNiMl9waHlfZXhpdCgpYCwKYG0z MWV1c2IyX3BoeV9zZXRfbW9kZSgpYC4KCiMjIyBTdGVwIDUuMjogQ2FsbGVycwoqKlJlY29yZDoq KiBgbTMxZXVzYjJfcGh5X3Byb2JlYCByZWdpc3RlcmVkIGFzIGBwbGF0Zm9ybV9kcml2ZXJgCmAu cHJvYmVgIOKGkiBjYWxsZWQgZHVyaW5nIGRldmljZSBlbnVtZXJhdGlvbiBmb3IKYHFjb20sc204 NzUwLW0zMS1ldXNiMi1waHlgIG5vZGVzLgoKIyMjIFN0ZXAgNS4zOiBDYWxsZWVzCioqUmVjb3Jk OioqIGBkZXZtX3BoeV9vcHRpb25hbF9nZXQoKWAg4oaSIGBkZXZtX3BoeV9nZXQoKWAg4oaSCmBf b2ZfcGh5X2dldChkZXYtPm9mX25vZGUsIDApYCBmb3IgRFQgZGV2aWNlcy4KCiMjIyBTdGVwIDUu NDogUmVhY2hhYmlsaXR5CioqUmVjb3JkOioqIFRyaWdnZXJlZCBhdCBib290IG9uIFF1YWxjb21t IHBsYXRmb3JtcyB3aXRoCmBDT05GSUdfUEhZX1FDT01fTTMxX0VVU0I9eS9tYC4gQWZmZWN0cyBr ZXJuZWwgaW5pdCAvIG1vZHVsZSBwcm9iZSwgbm90CmEgc3lzY2FsbCBwYXRoLgoKIyMjIFN0ZXAg NS41OiBTaW1pbGFyIHBhdHRlcm5zCioqUmVjb3JkOioqIGBkcml2ZXJzL3BoeS9waHktc25wcy1l dXNiMi5jOjU4OWAgdXNlcwpgZGV2bV9vZl9waHlfb3B0aW9uYWxfZ2V0KClgIGZvciB0aGUgc2Ft ZSByZXBlYXRlciBwYXR0ZXJuLgoKLS0tCgojIyBQSEFTRSA2OiBDUk9TUy1SRUZFUkVOQ0UgV0lU SCBMT0NBTCBUUkVFICg2LjE4LjQzKQoKIyMjIFN0ZXAgNi4xOiBCdWdneSBjb2RlIHByZXNlbnQ/ CioqUmVjb3JkOioqICoqWWVzLioqIEN1cnJlbnQgdHJlZSBzdGlsbCBoYXM6CmBgYDI4ODoyOTE6 ZHJpdmVycy9waHkvcXVhbGNvbW0vcGh5LXFjb20tbTMxLWV1c2IyLmMKICAgICAgICBwaHktPnJl cGVhdGVyID0gZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KGRldiwgZGV2LT5vZl9ub2RlLCAwKTsK ICAgICAgICBpZiAoSVNfRVJSKHBoeS0+cmVwZWF0ZXIpKQogICAgICAgICAgICAgICAgcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHBoeS0+cmVwZWF0ZXIpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBnZXQgcmVwZWF0ZXJcbiIpOwpgYGAK RHJpdmVyIGFuZCBLY29uZmlnIChgUEhZX1FDT01fTTMxX0VVU0JgKSBib3RoIGV4aXN0LiBgZ2l0 IG1lcmdlLWJhc2UKLS1pcy1hbmNlc3RvciBkZDA4NWJmMjc4NDIxIEhFQURgIOKGkiAqKk5PVF9J Tl9UUkVFKiouCgojIyMgU3RlcCA2LjI6IEJhY2twb3J0IGNvbXBsaWNhdGlvbnMKKipSZWNvcmQ6 KiogQ2xlYW4gb25lLWxpbmUgYXBwbHkgZXhwZWN0ZWQuIE5vIHJlZmFjdG9yIGNvbmZsaWN0cyBp bgpwcm9iZSBwYXRoLgoKIyMjIFN0ZXAgNi4zOiBSZWxhdGVkIGZpeGVzIGFscmVhZHkgcHJlc2Vu dD8KKipSZWNvcmQ6KiogUExMX0VOIHN1c3BlbmQgZml4IChgMDllMWM5NjU5NGFmYmApIGFscmVh ZHkgYmFja3BvcnRlZCDigJQKc2hvd3MgbWFpbnRhaW5lcnMgYXJlIGFscmVhZHkgY2Fycnlpbmcg bTMxLWV1c2IyIGZpeGVzIGludG8gNi4xOC55LiBJbml0CnJldHVybi12YWx1ZSBmaXggKGAzNjFm NTMzYTJkY2UyYCkgaXMgKipub3QqKiBpbiB0aGlzIHRyZWUgKHNlcGFyYXRlCmlzc3VlKS4KCi0t LQoKIyMgUEhBU0UgNzogU1VCU1lTVEVNIENPTlRFWFQKCiMjIyBTdGVwIDcuMTogU3Vic3lzdGVt IC8gY3JpdGljYWxpdHkKKipSZWNvcmQ6KiogYGRyaXZlcnMvcGh5L3F1YWxjb21tL2Ag4oCUICoq UEVSSVBIRVJBTCoqIChwbGF0Zm9ybS1zcGVjaWZpYwpRdWFsY29tbSBVU0IgUEhZIGRyaXZlciku IEltcGFjdCBpcyBsaW1pdGVkIHRvIGBBUkNIX1FDT01gICsKYENPTkZJR19QSFlfUUNPTV9NMzFf RVVTQmAuCgojIyMgU3RlcCA3LjI6IEFjdGl2aXR5CioqUmVjb3JkOioqIE5ldyBkcml2ZXIgaW4g Ni4xODsgYWN0aXZlbHkgcmVjZWl2aW5nIGZpeGVzIChQTExfRU4sIGluaXQKc2VxdWVuY2UsIHRo aXMgcmVwZWF0ZXIgZml4IG9uIG1haW5saW5lKS4KCi0tLQoKIyMgUEhBU0UgODogSU1QQUNUIEFO RCBSSVNLCgojIyMgU3RlcCA4LjE6IFdobyBpcyBhZmZlY3RlZAoqKlJlY29yZDoqKiBVc2VycyBv ZiBRdWFsY29tbSBTTTg3NTAgKGBxY29tLHNtODc1MC1tMzEtZXVzYjItcGh5YCkgd2l0aAptdWx0 aS1QSFkgVVNCIGNvbnRyb2xsZXJzIHdoZXJlIHNvbWUgUEhZIGluc3RhbmNlcyBsYWNrIHJlcGVh dGVycy4KQ29uZmlnLXNwZWNpZmljLCBwbGF0Zm9ybS1zcGVjaWZpYy4KCiMjIyBTdGVwIDguMjog VHJpZ2dlciBjb25kaXRpb25zCioqUmVjb3JkOioqIERUIG5vZGUgZm9yIE0zMSBlVVNCMiBQSFkg d2l0aG91dCBgcGh5c2AgcHJvcGVydHkgKG9yIG5vCmNvbm5lY3RlZCByZXBlYXRlcikuIENvbW1v biBvbiBtdWx0aS1wb3J0IGRlc2lnbnMgd2l0aCB1bmNvbm5lY3RlZApwb3J0cy4gVHJpZ2dlcmVk IGF0IGV2ZXJ5IGJvb3QgZm9yIGFmZmVjdGVkIGJvYXJkcy4KCiMjIyBTdGVwIDguMzogRmFpbHVy ZSBtb2RlIC8gc2V2ZXJpdHkKKipSZWNvcmQ6KiogUEhZIHByb2JlIHJldHVybnMgYC1FTk9ERVZg IOKGkiBVU0IgY29udHJvbGxlciBwcm9iZSBtYXkgZmFpbArihpIgKipVU0IgY29tcGxldGVseSBu b24tZnVuY3Rpb25hbCoqIG9uIGFmZmVjdGVkIHBvcnRzL2JvYXJkcy4gTm90IGEKY3Jhc2gvVUFG L3NlY3VyaXR5IGlzc3VlLCBidXQgYSAqKkhJR0ggZnVuY3Rpb25hbCBpbXBhY3QqKiBmb3IgYWZm ZWN0ZWQKaGFyZHdhcmUuIFNldmVyaXR5OiAqKkhJR0gqKiAoaGFyZHdhcmUgYnJva2VuKSwgbm90 IENSSVRJQ0FMIChubyBtZW1vcnkKY29ycnVwdGlvbi9wYW5pYykuCgojIyMgU3RlcCA4LjQ6IFJp c2sgdnMgYmVuZWZpdAoqKlJlY29yZDoqKgotICoqQmVuZWZpdDoqKiBFbmFibGVzIFVTQiBvbiB2 YWxpZCBoYXJkd2FyZSBjb25maWdzOyBhbGlnbnMgZHJpdmVyIHdpdGgKICBEVCBiaW5kaW5nOyBw cmV2ZW50cyBjYXNjYWRpbmcgcHJvYmUgZmFpbHVyZS4KLSAqKlJpc2s6KiogVmVyeSBsb3cg4oCU IG9uZSBsaW5lLCByZXZpZXdlZCwgTlVMTC1zYWZlIGRvd25zdHJlYW0gdmlhIHBoeQogIGNvcmUu Ci0gKipSYXRpbzoqKiBIaWdoIGJlbmVmaXQgZm9yIGFmZmVjdGVkIHVzZXJzLCBuZWdsaWdpYmxl IHJpc2suCgotLS0KCiMjIFBIQVNFIDk6IEZJTkFMIFNZTlRIRVNJUwoKIyMjIFN0ZXAgOS4xOiBF dmlkZW5jZSBzdW1tYXJ5CgoqKkZPUiBiYWNrcG9ydDoqKgotIFJlYWwgYnVnOiBtYW5kYXRvcnkg cmVwZWF0ZXIgYnJlYWtzIHByb2JlIHdoZW4gYWJzZW50Ci0gRHJpdmVyIGV4aXN0cyBpbiA2LjE4 LjQzCi0gRFQgYmluZGluZyBhbHJlYWR5IG1hcmtzIGBwaHlzYCBvcHRpb25hbAotIE9uZS1saW5l LCByZXZpZXdlZCBmaXgKLSBQaHkgY29yZSBoYW5kbGVzIE5VTEwgcmVwZWF0ZXIgc2FmZWx5Ci0g UHJpb3IgbTMxLWV1c2IyIGZpeCBhbHJlYWR5IGJhY2twb3J0ZWQgdG8gdGhpcyB0cmVlCi0gTWF0 Y2hlcyBzbnBzLWV1c2IyIGVzdGFibGlzaGVkIHBhdHRlcm4KCioqQUdBSU5TVCBiYWNrcG9ydDoq KgotIFZlcnkgbmV3LCBwbGF0Zm9ybS1zcGVjaWZpYyBkcml2ZXIgKFNNODc1MCBvbmx5KQotIE5v IHN5emJvdC91c2VyIGJ1ZyByZXBvcnQKLSBOb3QgYSBzZWN1cml0eS9jcmFzaC9kYXRhLWNvcnJ1 cHRpb24gaXNzdWUKLSBObyBpbi10cmVlIERUUyBleGFtcGxlcyB5ZXQgZm9yIHRoaXMgUEhZCi0g TGltaXRlZCA2LjE4IHN0YWJsZSB1c2VyIGJhc2UgZm9yIHRoaXMgaGFyZHdhcmUKCioqVW5yZXNv bHZlZDoqKiBObyBwcm9kdWN0aW9uIGRlcGxveW1lbnQgZGF0YSBmb3IgU004NzUwIG9uIDYuMTgu eQoodW52ZXJpZmlhYmxlKS4KCiMjIyBTdGVwIDkuMjogU3RhYmxlIHJ1bGVzIGNoZWNrbGlzdAox LiBPYnZpb3VzbHkgY29ycmVjdCBhbmQgdGVzdGVkPyAqKlBBU1MqKiDigJQgcmV2aWV3ZWQgYnkg UEhZL0FSTQogICBtYWludGFpbmVyczsgc2VtYW50aWNzIHZlcmlmaWVkIGFnYWluc3QgcGh5IGNv cmUuCjIuIEZpeGVzIGEgcmVhbCBidWc/ICoqUEFTUyoqIOKAlCBwcm9iZSBmYWlsdXJlIG9uIHZh bGlkIGhhcmR3YXJlIGNvbmZpZ3MuCjMuIEltcG9ydGFudCBpc3N1ZT8gKipQQVNTKiog4oCUIFVT QiBjb250cm9sbGVyL1BIWSBwcm9iZSBmYWlsdXJlIHJlbmRlcnMKICAgVVNCIG5vbi1mdW5jdGlv bmFsIG9uIGFmZmVjdGVkIGJvYXJkcy4KNC4gU21hbGwgYW5kIGNvbnRhaW5lZD8gKipQQVNTKiog 4oCUIDEgbGluZSwgMSBmaWxlLgo1LiBObyBuZXcgZmVhdHVyZXMvQVBJcz8gKipQQVNTKiog4oCU IGNvcnJlY3RzIGRyaXZlciB0byBtYXRjaCBleGlzdGluZwogICBvcHRpb25hbCBEVCBwcm9wZXJ0 eS4KNi4gQ2FuIGFwcGx5IHRvIGxvY2FsIHRyZWU/ICoqUEFTUyoqIOKAlCBkcml2ZXIgYW5kIEFQ SXMgcHJlc2VudDsgY2xlYW4KICAgYXBwbHkuCgojIyMgU3RlcCA5LjM6IEV4Y2VwdGlvbiBjYXRl Z29yeQoqKlJlY29yZDoqKiBIYXJkd2FyZSB3b3JrYXJvdW5kIC8gZHJpdmVyLURUIG1pc21hdGNo IGZpeCAoc2ltaWxhciB0bwpxdWlyayBjYXRlZ29yeSkuIE5vdCBhIG5ldyBkZXZpY2UgSUQsIGJ1 dCBmaXhlcyBoYXJkd2FyZSBlbmFibGVtZW50IGZvcgpleGlzdGluZyBkcml2ZXIuCgojIyMgU3Rl cCA5LjQ6IERlY2lzaW9uIHJhdGlvbmFsZQoKRm9yICoqdGhpcyA2LjE4LjQzIHRyZWUqKiwgdGhl IGRyaXZlciBpcyBwcmVzZW50IGFuZCB0aGUgYnVnIGlzIHByZXNlbnQuClRoZSBmaXggaXMgdHJp dmlhbCwgY29ycmVjdCwgYW5kIHNhZmUuIFdoaWxlIHRoZSBhdWRpZW5jZSBpcyBuYXJyb3cKKFF1 YWxjb21tIFNNODc1MCksIHRoZSBmYWlsdXJlIG1vZGUgaXMgY29tcGxldGUgVVNCIHByb2JlIGZh aWx1cmUgb24KdmFsaWQgbXVsdGktcG9ydCBkZXNpZ25zIOKAlCBleGFjdGx5IHRoZSBraW5kIG9m IGNvbnRhaW5lZCBoYXJkd2FyZS0KZW5hYmxlbWVudCBmaXggc3RhYmxlIHRyZWVzIGFjY2VwdCB3 aGVuIHRoZSBkcml2ZXIgYWxyZWFkeSBzaGlwcyBpbiB0aGF0CnNlcmllcy4gVGhlIERUIGJpbmRp bmcgbmV2ZXIgcmVxdWlyZWQgYHBoeXNgOyB0aGUgZHJpdmVyIHdhcyB3cm9uZyBmcm9tCmludHJv ZHVjdGlvbi4KCi0tLQoKIyMgVmVyaWZpY2F0aW9uCgotICoqW1BoYXNlIDFdKiogUGFyc2VkIGNv bW1pdCBgZGQwODViZjI3ODQyMWAgbWVzc2FnZSBhbmQgYWxsIHRhZ3MgdmlhCiAgYGdpdCBzaG93 YAotICoqW1BoYXNlIDFdKiogQ29uZmlybWVkIG5vIFJlcG9ydGVkLWJ5L3N5emJvdC9GaXhlczov Q2M6IHN0YWJsZSB0YWdzCi0gKipbUGhhc2UgMl0qKiBWZXJpZmllZCBkaWZmOiAxIGxpbmUgaW4g YG0zMWV1c2IyX3BoeV9wcm9iZSgpYAotICoqW1BoYXNlIDJdKiogVmVyaWZpZWQgYHBoeV9pbml0 KE5VTEwpYCwgYHBoeV9leGl0KE5VTEwpYCwKICBgcGh5X3NldF9tb2RlX2V4dChOVUxMKWAgcmV0 dXJuIDAgaW4gYGRyaXZlcnMvcGh5L3BoeS0KICBjb3JlLmM6MjMyLDI3MiwzODZgCi0gKipbUGhh c2UgMl0qKiBWZXJpZmllZCBgZGV2bV9waHlfb3B0aW9uYWxfZ2V0KClgIGNvbnZlcnRzIGAtRU5P REVWYCB0bwogIE5VTEwgaW4gYHBoeS1jb3JlLmM6ODQxLTg0OGAKLSAqKltQaGFzZSAyXSoqIFZl cmlmaWVkIGBwaHlfZ2V0KGRldiwgTlVMTClgIHVzZXMgaW5kZXggMCB2aWEKICBgX29mX3BoeV9n ZXQoKWAgaW4gYHBoeS1jb3JlLmM6NzY3LTc3M2AKLSAqKltQaGFzZSAzXSoqIGBnaXQgYmxhbWUg LUwgMjg4LDI5MWA6IGJ1Z2d5IGNvZGUgZnJvbSBgNWQzMjRlNTE1OWQ5ZWAKLSAqKltQaGFzZSAz XSoqIGBnaXQgbG9nIC0tb25lbGluZSAtLSBkcml2ZXJzL3BoeS9xdWFsY29tbS9waHktCiAgcWNv bS1tMzEtZXVzYjIuY2A6IGRyaXZlciBoaXN0b3J5IGluIDYuMTgueQotICoqW1BoYXNlIDNdKiog YGdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgZGQwODViZjI3ODQyMSBIRUFEYCDihpIKICBO T1RfSU5fVFJFRQotICoqW1BoYXNlIDRdKiogYGI0IGRpZyAtYyBkZDA4NWJmMjc4NDIxYDogZm91 bmQgdjEvdjIgbG9yZSB0aHJlYWRzCi0gKipbUGhhc2UgNF0qKiBgYjQgZGlnIC13YDogY29uZmly bWVkIG1haW50YWluZXIgQ0MgbGlzdAotICoqW1BoYXNlIDRdKiogYGI0IGRpZyAtbSAvdG1wL20z MS1ldXNiMi1yZXBlYXRlci5tYm94YDogbm8gc3RhYmxlCiAgbm9taW5hdGlvbiwgbm8gTkFLcwot ICoqW1BoYXNlIDVdKiogUmVhZCBgbTMxZXVzYjJfcGh5X2luaXQvZXhpdC9zZXRfbW9kZWAg4oCU IGFsbCBwYXNzCiAgYHBoeS0+cmVwZWF0ZXJgIHRvIE5VTEwtc2FmZSBwaHkgY29yZSBBUElzCi0g KipbUGhhc2UgNV0qKiBDb21wYXJlZCB3aXRoIGBwaHktc25wcy1ldXNiMi5jOjU4OWAgb3B0aW9u YWwgcmVwZWF0ZXIKICBwYXR0ZXJuCi0gKipbUGhhc2UgNl0qKiBgZ2l0IGRlc2NyaWJlIEhFQURg IOKGkiB2Ni4xOC40MzsgYE1ha2VmaWxlYCDihpIgNi4xOC40MwotICoqW1BoYXNlIDZdKiogUmVh ZCBjdXJyZW50IGBwaHktcWNvbS1tMzEtZXVzYjIuY2Ag4oCUIGJ1Z2d5CiAgYGRldm1fb2ZfcGh5 X2dldF9ieV9pbmRleGAgc3RpbGwgcHJlc2VudAotICoqW1BoYXNlIDZdKiogUmVhZAogIGBEb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3Fjb20sbTMxLWV1c2IyLXBoeS55YW1s YCDigJQKICBgcGh5c2Agbm90IGluIGByZXF1aXJlZGAKLSAqKltQaGFzZSA2XSoqIGBncmVwYCBm b3IgYHNtODc1MC1tMzEtZXVzYjJgIGluIGAqLmR0cypgIOKGkiBubyBpbi10cmVlCiAgRFRTIChk cml2ZXIvYmluZGluZ3Mgb25seSkKLSAqKltQaGFzZSA2XSoqIENvbmZpcm1lZCBgQ09ORklHX1BI WV9RQ09NX00zMV9FVVNCYCBleGlzdHMgaW4KICBgZHJpdmVycy9waHkvcXVhbGNvbW0vS2NvbmZp Z2AKLSAqKltQaGFzZSA2XSoqIENvbmZpcm1lZCBwcmlvciBzdGFibGUgYmFja3BvcnQgYDA5ZTFj OTY1OTRhZmJgIChQTExfRU4pCiAgYWxyZWFkeSBpbiB0aGlzIHRyZWUKLSAqKltQaGFzZSA4XSoq IEFzc2Vzc2VkIGZhaWx1cmUgbW9kZSBhcyBwcm9iZSBmYWlsdXJlIOKGkiBVU0Igbm9uLQogIGZ1 bmN0aW9uYWwgKG5vdCBrZXJuZWwgY3Jhc2gpCgoqKllFUyoqCgogZHJpdmVycy9waHkvcXVhbGNv bW0vcGh5LXFjb20tbTMxLWV1c2IyLmMgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRp b24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9xdWFsY29tbS9w aHktcWNvbS1tMzEtZXVzYjIuYyBiL2RyaXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLW0zMS1l dXNiMi5jCmluZGV4IDk0MzRiZDIyZWYzMmQuLjI3NWRmMzgyNTZkZTMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvcGh5L3F1YWxjb21tL3BoeS1xY29tLW0zMS1ldXNiMi5jCisrKyBiL2RyaXZlcnMvcGh5 L3F1YWxjb21tL3BoeS1xY29tLW0zMS1ldXNiMi5jCkBAIC0yODUsNyArMjg1LDcgQEAgc3RhdGlj IGludCBtMzFldXNiMl9waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAog CXBoeV9zZXRfZHJ2ZGF0YShwaHktPnBoeSwgcGh5KTsKIAotCXBoeS0+cmVwZWF0ZXIgPSBkZXZt X29mX3BoeV9nZXRfYnlfaW5kZXgoZGV2LCBkZXYtPm9mX25vZGUsIDApOworCXBoeS0+cmVwZWF0 ZXIgPSBkZXZtX3BoeV9vcHRpb25hbF9nZXQoZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHBoeS0+ cmVwZWF0ZXIpKQogCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocGh5LT5yZXBl YXRlciksCiAJCQkJICAgICAiZmFpbGVkIHRvIGdldCByZXBlYXRlclxuIik7Ci0tIAoyLjUzLjAK CgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK 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 68A2556FA5E; Mon, 31 Aug 2026 13:48:36 +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=1788184119; cv=none; b=CZbDQmZ4uLpaOuF2HuQKTpZYi8JwxDk0Me/e1bwlUh4KcuGxxnP2yCGUacrnSTiO4XjxKb3ZQDMCrVI7UXPDcNR4jEPlBUOrNnBCKh5iXbeZdoVNCP9oPxNNP8OWbaosRW0fJKms6q+mounJ9F8/VuUORVAW3AeWAumH0m2B3EM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788184119; c=relaxed/simple; bh=oDroo2WiPTU90nvz2/0npryiyyfLGXDy2Hy3NzJEsPM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uLGYorS/cqrGUTwbNi4wYCXJGgeYmGEIxa4SZHbqF7IofSAfrroTCkzMJbHijtC4TxDDxWjzP4Ov9+m43PhPVNJXoMmba0ZwNZXRMZ2HxHDalLG2NqSFt1dBiTAGtYt0BIbPTc+rvCKGJGeSgKIf4RJojyLfxruB4QKqiQBEREs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NipMI7oO; 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="NipMI7oO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E79061F00ACA; Mon, 31 Aug 2026 13:48:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1788184116; bh=sRR5RzAfZF2ygozG/qavqvPeChy7+XYeXV4CDkN88MM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=NipMI7oOpWJpEntVg0UXpciHQWk1UP2b8FmPcMFTjVVrCLQR+u1a+ylYhmqi7tBhb AKWlQzqNUuVd+40RZ0B7OHrwZD9nZB3UUrZJL+qsFMOU40KR1+Y/0JaatwTvWQ/QdZ HR5HGZEh48SeSifIPKxDA8kihDyJpMcuTUgyFij8XZwf9b4Y+oWmk5nr98aTlfaNwL UEJmY654ud2HkVlU4J2AEYyagDvUFkRmUR5BSDe5lbrFL/KVrnztChBcSQW5F+Tzr8 0136PGo49b8UirOLIn5Qit/Izia1QtgrR8xCRRHOsTCZANjtQjxtQWMYV5g6XvMLod 616c3Bb0WWOdQ== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Wesley Cheng , Dmitry Baryshkov , Bjorn Andersson , Abel Vesa , Neil Armstrong , Konrad Dybcio , Vinod Koul , Sasha Levin , linux-arm-msm@vger.kernel.org, linux-phy@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18] phy: qcom: m31-eusb2: Make USB repeater optional Date: Mon, 31 Aug 2026 09:28:49 -0400 Message-ID: <20260831133314.4125787-501-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260831133314.4125787-1-sashal@kernel.org> References: <20260831133314.4125787-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: patches@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.48 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Wesley Cheng [ Upstream commit a62bfbcf2db4ae6eb7a544a40b1075a81784ea41 ] A repeater is not required for the PHY to function. On systems with multiple PHY instances connected to a multi-port controller, some PHYs may be unconnected. All PHYs must still probe successfully even without attached repeaters, otherwise the controller probe fails. So make it optional. Signed-off-by: Wesley Cheng [abel.vesa@oss.qualcomm.com: commit re-worded to reflect actual reason] Reviewed-by: Dmitry Baryshkov Reviewed-by: Bjorn Andersson Signed-off-by: Abel Vesa Reviewed-by: Neil Armstrong Reviewed-by: Konrad Dybcio Link: https://patch.msgid.link/20260302-phy-qcom-m31-eusb2-make-repeater-optional-v2-1-dbf714c72056@oss.qualcomm.com Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: # Stable Backport Analysis: `phy: qcom: m31-eusb2: Make USB repeater optional` **Local tree:** Linux **6.18.43** (`v6.18.43-1-gc7f0dac02d232`) **Commit under review:** `dd085bf278421` (upstream `a62bfbcf2db4`) — **not yet in this tree** --- ## PHASE 1: COMMIT MESSAGE FORENSICS ### Step 1.1: Subject line **Record:** `[phy: qcom: m31-eusb2]` `[make]` — Make the USB repeater optional in the Qualcomm M31 eUSB2 PHY driver probe path. ### Step 1.2: Tags **Record:** - **Fixes:** — absent - **Reported-by:** — absent - **Tested-by:** — absent - **Reviewed-by:** Dmitry Baryshkov, Bjorn Andersson, Neil Armstrong, Konrad Dybcio - **Acked-by:** — absent - **Link:** https://patch.msgid.link/20260302-phy-qcom-m31-eusb2-make- repeater-optional-v2-1-dbf714c72056@oss.qualcomm.com - **Cc: stable:** — absent (expected for manual review) - **Signed-off-by:** Wesley Cheng, Abel Vesa, Vinod Koul (ignore pipeline SOBs) Notable: multiple subsystem maintainers reviewed; no syzbot/fuzzer report. ### Step 1.3: Body analysis **Record:** - **Bug:** Driver requires an eUSB2 repeater at probe time via `devm_of_phy_get_by_index()`, but repeaters are not always present. - **Symptom:** On multi-port controllers with multiple PHY instances, PHYs without attached repeaters fail probe; that can fail the whole USB controller probe. - **Root cause:** Repeater treated as mandatory when hardware/DT allows it to be absent. - **Version info:** None in message; driver targets `qcom,sm8750-m31-eusb2-phy`. ### Step 1.4: Hidden bug fix? **Record:** Yes. Despite “make optional” wording, this is a real probe- failure bug fix, not a feature. The DT binding already lists `phys` as optional (not in `required:`), but the driver enforced it as mandatory. --- ## PHASE 2: DIFF ANALYSIS ### Step 2.1: Inventory **Record:** - **File:** `drivers/phy/qualcomm/phy-qcom-m31-eusb2.c` (+1 / -1) - **Function:** `m31eusb2_phy_probe()` - **Scope:** Single-file, single-line surgical change ### Step 2.2: Code flow change **Record:** - **Before:** `devm_of_phy_get_by_index(dev, dev->of_node, 0)` returns `-ENODEV` when no `phys` property → probe fails. - **After:** `devm_phy_optional_get(dev, NULL)` converts `-ENODEV` to `NULL` → probe succeeds. - **Path affected:** Platform device probe during boot/module init. ### Step 2.3: Bug mechanism **Record:** **Logic / correctness fix** — mandatory resource lookup for an optional component. Category: driver/DT mismatch causing cascading probe failure. With repeater present, both APIs resolve index 0 via `_of_phy_get()` (verified in `phy_get()` and `devm_of_phy_get_by_index()`). ### Step 2.4: Fix quality **Record:** - Fix is minimal and matches established pattern in `phy-snps-eusb2.c` (`devm_of_phy_optional_get`). - `phy_init()`, `phy_exit()`, and `phy_set_mode_ext()` all accept `NULL` and return 0 (verified in `phy-core.c`). - No new deadlock/locking risk. - `IS_ERR()` check after optional get remains correct (only real errors propagate). --- ## PHASE 3: GIT HISTORY INVESTIGATION ### Step 3.1: Blame **Record:** Repeater lookup introduced in `5d324e5159d9e` (6.18 merge, Nov 2025). Buggy line present at `drivers/phy/qualcomm/phy- qcom-m31-eusb2.c:288` in this tree. ### Step 3.2: Fixes: tag **Record:** N/A — no `Fixes:` tag. ### Step 3.3: Related file history **Record:** Recent history in this tree: - `09e1c96594afb` — PLL_EN suspend power fix (backported, `Cc: stable`) - `37ef11ab2cf3c` — init sequence update - Driver arrived via `5d324e5159d9e` (6.18) Standalone one-patch fix; not part of a multi-patch dependency series. ### Step 3.4: Author context **Record:** Wesley Cheng is the driver author and DT binding maintainer. Abel Vesa committed v2. Vinod Koul (PHY maintainer) merged. Multiple Qualcomm/ARM maintainers reviewed. ### Step 3.5: Dependencies **Record:** No prerequisites. `devm_phy_optional_get()` exists in this tree’s `phy-core.c`. Fix applies cleanly to current `68f1ba8fec4ad` index state. --- ## PHASE 4: MAILING LIST AND EXTERNAL RESEARCH ### Step 4.1: Original discussion **Record:** - **b4 dig:** https://patch.msgid.link/20260227-phy-qcom-m31-eusb2-make- repeater-optional-v1-1-07a086bbaba4@oss.qualcomm.com - **Revisions:** v1 (2026-02-27), v2 (2026-03-02, committed version) - **Feedback:** Reviewed-by from Dmitry Baryshkov and Bjorn Andersson on v1; no NAKs found - **Stable nomination in thread:** none found ### Step 4.2: Reviewers **Record:** CC’d: `linux-phy@lists.infradead.org`, `linux-arm- msm@vger.kernel.org`, Vinod Koul, Bjorn Andersson, Dmitry Baryshkov — appropriate maintainer coverage. ### Step 4.3: Bug report **Record:** No external bug report or syzbot link. Bug described from hardware/DT design requirements. ### Step 4.4: Related patches **Record:** Separate follow-up on master: `361f533a2dce2` (“Fix return value of init call”) — fixes unrelated error-path return bug; **not** a prerequisite for this change. ### Step 4.5: Stable list **Record:** No stable-list discussion found for this specific patch. --- ## PHASE 5: CODE SEMANTIC ANALYSIS ### Step 5.1: Key functions **Record:** `m31eusb2_phy_probe()` modified; downstream users of `phy->repeater`: `m31eusb2_phy_init()`, `m31eusb2_phy_exit()`, `m31eusb2_phy_set_mode()`. ### Step 5.2: Callers **Record:** `m31eusb2_phy_probe` registered as `platform_driver` `.probe` → called during device enumeration for `qcom,sm8750-m31-eusb2-phy` nodes. ### Step 5.3: Callees **Record:** `devm_phy_optional_get()` → `devm_phy_get()` → `_of_phy_get(dev->of_node, 0)` for DT devices. ### Step 5.4: Reachability **Record:** Triggered at boot on Qualcomm platforms with `CONFIG_PHY_QCOM_M31_EUSB=y/m`. Affects kernel init / module probe, not a syscall path. ### Step 5.5: Similar patterns **Record:** `drivers/phy/phy-snps-eusb2.c:589` uses `devm_of_phy_optional_get()` for the same repeater pattern. --- ## PHASE 6: CROSS-REFERENCE WITH LOCAL TREE (6.18.43) ### Step 6.1: Buggy code present? **Record:** **Yes.** Current tree still has: ```288:291:drivers/phy/qualcomm/phy-qcom-m31-eusb2.c phy->repeater = devm_of_phy_get_by_index(dev, dev->of_node, 0); if (IS_ERR(phy->repeater)) return dev_err_probe(dev, PTR_ERR(phy->repeater), "failed to get repeater\n"); ``` Driver and Kconfig (`PHY_QCOM_M31_EUSB`) both exist. `git merge-base --is-ancestor dd085bf278421 HEAD` → **NOT_IN_TREE**. ### Step 6.2: Backport complications **Record:** Clean one-line apply expected. No refactor conflicts in probe path. ### Step 6.3: Related fixes already present? **Record:** PLL_EN suspend fix (`09e1c96594afb`) already backported — shows maintainers are already carrying m31-eusb2 fixes into 6.18.y. Init return-value fix (`361f533a2dce2`) is **not** in this tree (separate issue). --- ## PHASE 7: SUBSYSTEM CONTEXT ### Step 7.1: Subsystem / criticality **Record:** `drivers/phy/qualcomm/` — **PERIPHERAL** (platform-specific Qualcomm USB PHY driver). Impact is limited to `ARCH_QCOM` + `CONFIG_PHY_QCOM_M31_EUSB`. ### Step 7.2: Activity **Record:** New driver in 6.18; actively receiving fixes (PLL_EN, init sequence, this repeater fix on mainline). --- ## PHASE 8: IMPACT AND RISK ### Step 8.1: Who is affected **Record:** Users of Qualcomm SM8750 (`qcom,sm8750-m31-eusb2-phy`) with multi-PHY USB controllers where some PHY instances lack repeaters. Config-specific, platform-specific. ### Step 8.2: Trigger conditions **Record:** DT node for M31 eUSB2 PHY without `phys` property (or no connected repeater). Common on multi-port designs with unconnected ports. Triggered at every boot for affected boards. ### Step 8.3: Failure mode / severity **Record:** PHY probe returns `-ENODEV` → USB controller probe may fail → **USB completely non-functional** on affected ports/boards. Not a crash/UAF/security issue, but a **HIGH functional impact** for affected hardware. Severity: **HIGH** (hardware broken), not CRITICAL (no memory corruption/panic). ### Step 8.4: Risk vs benefit **Record:** - **Benefit:** Enables USB on valid hardware configs; aligns driver with DT binding; prevents cascading probe failure. - **Risk:** Very low — one line, reviewed, NULL-safe downstream via phy core. - **Ratio:** High benefit for affected users, negligible risk. --- ## PHASE 9: FINAL SYNTHESIS ### Step 9.1: Evidence summary **FOR backport:** - Real bug: mandatory repeater breaks probe when absent - Driver exists in 6.18.43 - DT binding already marks `phys` optional - One-line, reviewed fix - Phy core handles NULL repeater safely - Prior m31-eusb2 fix already backported to this tree - Matches snps-eusb2 established pattern **AGAINST backport:** - Very new, platform-specific driver (SM8750 only) - No syzbot/user bug report - Not a security/crash/data-corruption issue - No in-tree DTS examples yet for this PHY - Limited 6.18 stable user base for this hardware **Unresolved:** No production deployment data for SM8750 on 6.18.y (unverifiable). ### Step 9.2: Stable rules checklist 1. Obviously correct and tested? **PASS** — reviewed by PHY/ARM maintainers; semantics verified against phy core. 2. Fixes a real bug? **PASS** — probe failure on valid hardware configs. 3. Important issue? **PASS** — USB controller/PHY probe failure renders USB non-functional on affected boards. 4. Small and contained? **PASS** — 1 line, 1 file. 5. No new features/APIs? **PASS** — corrects driver to match existing optional DT property. 6. Can apply to local tree? **PASS** — driver and APIs present; clean apply. ### Step 9.3: Exception category **Record:** Hardware workaround / driver-DT mismatch fix (similar to quirk category). Not a new device ID, but fixes hardware enablement for existing driver. ### Step 9.4: Decision rationale For **this 6.18.43 tree**, the driver is present and the bug is present. The fix is trivial, correct, and safe. While the audience is narrow (Qualcomm SM8750), the failure mode is complete USB probe failure on valid multi-port designs — exactly the kind of contained hardware- enablement fix stable trees accept when the driver already ships in that series. The DT binding never required `phys`; the driver was wrong from introduction. --- ## Verification - **[Phase 1]** Parsed commit `dd085bf278421` message and all tags via `git show` - **[Phase 1]** Confirmed no Reported-by/syzbot/Fixes:/Cc: stable tags - **[Phase 2]** Verified diff: 1 line in `m31eusb2_phy_probe()` - **[Phase 2]** Verified `phy_init(NULL)`, `phy_exit(NULL)`, `phy_set_mode_ext(NULL)` return 0 in `drivers/phy/phy- core.c:232,272,386` - **[Phase 2]** Verified `devm_phy_optional_get()` converts `-ENODEV` to NULL in `phy-core.c:841-848` - **[Phase 2]** Verified `phy_get(dev, NULL)` uses index 0 via `_of_phy_get()` in `phy-core.c:767-773` - **[Phase 3]** `git blame -L 288,291`: buggy code from `5d324e5159d9e` - **[Phase 3]** `git log --oneline -- drivers/phy/qualcomm/phy- qcom-m31-eusb2.c`: driver history in 6.18.y - **[Phase 3]** `git merge-base --is-ancestor dd085bf278421 HEAD` → NOT_IN_TREE - **[Phase 4]** `b4 dig -c dd085bf278421`: found v1/v2 lore threads - **[Phase 4]** `b4 dig -w`: confirmed maintainer CC list - **[Phase 4]** `b4 dig -m /tmp/m31-eusb2-repeater.mbox`: no stable nomination, no NAKs - **[Phase 5]** Read `m31eusb2_phy_init/exit/set_mode` — all pass `phy->repeater` to NULL-safe phy core APIs - **[Phase 5]** Compared with `phy-snps-eusb2.c:589` optional repeater pattern - **[Phase 6]** `git describe HEAD` → v6.18.43; `Makefile` → 6.18.43 - **[Phase 6]** Read current `phy-qcom-m31-eusb2.c` — buggy `devm_of_phy_get_by_index` still present - **[Phase 6]** Read `Documentation/devicetree/bindings/phy/qcom,m31-eusb2-phy.yaml` — `phys` not in `required` - **[Phase 6]** `grep` for `sm8750-m31-eusb2` in `*.dts*` → no in-tree DTS (driver/bindings only) - **[Phase 6]** Confirmed `CONFIG_PHY_QCOM_M31_EUSB` exists in `drivers/phy/qualcomm/Kconfig` - **[Phase 6]** Confirmed prior stable backport `09e1c96594afb` (PLL_EN) already in this tree - **[Phase 8]** Assessed failure mode as probe failure → USB non- functional (not kernel crash) **YES** drivers/phy/qualcomm/phy-qcom-m31-eusb2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/phy/qualcomm/phy-qcom-m31-eusb2.c b/drivers/phy/qualcomm/phy-qcom-m31-eusb2.c index 9434bd22ef32d..275df38256de3 100644 --- a/drivers/phy/qualcomm/phy-qcom-m31-eusb2.c +++ b/drivers/phy/qualcomm/phy-qcom-m31-eusb2.c @@ -285,7 +285,7 @@ static int m31eusb2_phy_probe(struct platform_device *pdev) phy_set_drvdata(phy->phy, phy); - phy->repeater = devm_of_phy_get_by_index(dev, dev->of_node, 0); + phy->repeater = devm_phy_optional_get(dev, NULL); if (IS_ERR(phy->repeater)) return dev_err_probe(dev, PTR_ERR(phy->repeater), "failed to get repeater\n"); -- 2.53.0