From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793608866; b=S6AqKhHWs6xENyqP8dlyYSYYHxvZxZog77qahhpPVJDtKBkMMLqNC+FmK0oS/Gpm8J5f TVr5dahIWn0PksfixqIVqQt/R9T4xIr5vSkmoKcteKTIM/VkknTzxOptHkO/rVX4gJmXh pYpvkfj9u7pQf7ST6GLa+psYl7JLUXLtWIXWZVmow577frLuSXYym3Rsx0GgJLwsjpern fEvx+I33hLPkMjeX8kngZZNIwG+kpuhFvQrhbwrBx7RRsIwhPqL79+HX4jSaUTJjw7SZZ C5jfNBGJhpj0D1QEoqyWC2EYxllA12Rzs/EPM4dwBNoKO92hxfxuZ/xdS8P9YD6Odig== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793608866; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=8xk9NE7yU6h/BG4sLZsv3lVUn6Wzx/1vjie+frptZo4=; b=X+ixO7YeuGjb1FInKPt5fibGB81qw5MMyPYISQemex/1+wT7V22ppIcA2kk04VzPPY47 6Tgu9hUn1wnv+lhcTFO+zhf/nQkF4Hjvo7I5PsbvtlSgv/nOdYxEUtYFOHtUYJB7jt0oz TNRNB6JxX779l2z2dmRZpyqTWB8XX7mK/jPLTUMmhze34W07dlD6H6r40AOZfcQ/SJ+VA 2vh1pBqa2BpS37yayvc4fZ5E9webWj36AqpBtFu9iBiGbLfB0Kmv5oOvqQMeGN4P42/KX fAnCKRUB3bpUhidOetyTFXbzpIaCLhpwr+o5KG+5PFJJ7SzL9Jw1OFxBFJtIpTZPdxQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=EhrOOeK0; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22E3F606A330 for ; Mon, 2 Nov 2026 08:41:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=EhrOOeK0 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6B7B31F000C1; Mon, 2 Nov 2026 08:41:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793608865; bh=8xk9NE7yU6h/BG4sLZsv3lVUn6Wzx/1vjie+frptZo4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=EhrOOeK0W0TMTiG3585u8HuMXygjFqSdzPEqCXRsagC17YlZq9Qf2w0cTM56D8ojh cr/QqTNiCxvbUcXiQyG1Z2U0b+0pxYU/ABNZFSjy1pBXS/NSDpGm1zjahL5UPYCbUn Bo5qZuYiZK0Gywe51OShMkWvwnpJ7z/J4XwnLFM0/Vk3vVU5VQEnTLMMtxr6cGHUpV rQ2ZhNT00R202I3RzloYmIFjDOPDULSuUpGnHgY8fxTvF0JF5dsx86t8OJxV6Tvw0f F8ptpp4lfCDi4t1jhs6tsgGA1qTdIJY0FE1xovqg+XdJXYmrPhDv0yxdjcPLGzydDe XhcRbv6bbkuQw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 3/3] arm64: dts: cix: add Sky1 USB/DP combo PHY Reply-To: sashiko-reviews@lists.linux.dev To: "Gary Yang" Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261102081532.2305142-4-gary.yang@cixtech.com> References: <20261102081532.2305142-1-gary.yang@cixtech.com> <20261102081532.2305142-4-gary.yang@cixtech.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Mon, 02 Nov 2026 08:41:04 +0000 X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list Thank you for your contribution! Sashiko AI review found 3 potential issue(= s) to consider: - [High] arm64: dts: cix: enabling usbc_phy0..3 asserts PHY resets at boot - [High] phy: cix: broken mode transitions, clock leak, and phy_ops in cix_= udphy - [Medium] arm64: dts: cix: missing OF graph ports for usbc_phy Type-C swit= ches -- commit d16228024f6482f816de21fc474d6f5027baff41 Author: Gary Yang arm64: dts: cix: add Sky1 USB/DP combo PHY This commit adds the four USB/DP combo PHY device tree nodes to the CIX Sky1 SoC dtsi and enables them with Type-C orientation-switch and mode-switch properties on the Radxa Orion O6 board. > diff --git a/arch/arm64/boot/dts/cix/sky1-orion-o6.dts b/arch/arm64/boot/= dts/cix/sky1-orion-o6.dts > index e39c87774c128..76f75185b6a8e 100644 > --- a/arch/arm64/boot/dts/cix/sky1-orion-o6.dts > +++ b/arch/arm64/boot/dts/cix/sky1-orion-o6.dts > @@ -117,3 +117,31 @@ &s5_gpio2 { > &uart2 { > status =3D "okay"; > }; > + > +&usbc_phy0 { > + orientation-switch; > + mode-switch; [Severity: Medium] How are Type-C connector nodes expected to link to the orientation-switch and mode-switch registered by usbc_phy0 through usbc_phy3? In drivers/phy/cix/phy-cix-usbdp.c, cix_udphy_probe() checks for these boolean properties and registers a Type-C switch and mux on the PHY device fwnode via udphy_setup_orien_switch() and udphy_setup_typec_mux(): drivers/phy/cix/phy-cix-usbdp.c:cix_udphy_probe() { ... if (device_property_present(dev, "orientation-switch")) { ret =3D udphy_setup_orien_switch(udphy); ... } if (device_property_present(dev, "mode-switch")) { ret =3D udphy_setup_typec_mux(udphy); ... } } When a Type-C connector driver looks up its switch or mux through fwnode_typec_switch_get() or fwnode_typec_mux_get(), fwnode_connection_find_matches() -> fwnode_graph_devcon_matches() resolves boolean orientation-switch and mode-switch providers by walking OF graph endpoints (port or ports with remote-endpoint) from the connector node to the provider node. However, neither sky1.dtsi nor sky1-orion-o6.dts defines any port or ports nodes on usbc_phy0..3, and Documentation/devicetree/bindings/phy/cix,sky1-usbdp-phy.yaml sets additionalProperties: false while only allowing usb-port@[0-9a-f]+ and dp-port@[0-9a-f]+ child nodes: patternProperties: "^usb-port@[0-9a-f]+$": ... "^dp-port@[0-9a-f]+$": ... additionalProperties: false Without OF graph port definitions in the binding and device tree nodes, won't any usb-c-connector node be unable to bind to these switches or fail DT schema validation? > + cix,default-conf =3D /bits/ 8 <0x03>; > + status =3D "okay"; > +}; [Severity: High] Does enabling usbc_phy0 through usbc_phy3 here before any USB or DisplayPort consumer nodes are present in the device tree break bootloader-initialized USB or DisplayPort connections at boot? Neither arch/arm64/boot/dts/cix/sky1.dtsi nor arch/arm64/boot/dts/cix/sky1-orion-o6.dts currently has any consumer nodes referencing usb3_phy0..3 or usbc0..3_dp_phy. When cix_udphy_probe() runs for each enabled PHY node, it unconditionally asserts both the core and APB resets and sets cur_mode to UDPHY_MODE_NONE: drivers/phy/cix/phy-cix-usbdp.c:cix_udphy_probe() { ... reset_control_assert(udphy->reset); reset_control_assert(udphy->preset); ... udphy_set_default_mode(udphy); } drivers/phy/cix/phy-cix-usbdp.c:udphy_set_default_mode() { udphy->cur_mode =3D UDPHY_MODE_NONE; } Although commit ba3650ed160e ("phy: cix: add USB/DP combo PHY driver for Sky1") states that the bootloader may hand over the port already initialize= d, asserting reset and preset in cix_udphy_probe() while no consumers exist to power the PHYs back on leaves all four PHYs permanently held in reset after probe. Wouldn't this tear down any active bootloader-initialized DisplayPort (such as an EFI framebuffer output) or USB link on Radxa Orion O6? [ ... ] > diff --git a/arch/arm64/boot/dts/cix/sky1.dtsi b/arch/arm64/boot/dts/cix/= sky1.dtsi > index 0a820f45feb96..672aade42d6f8 100644 > --- a/arch/arm64/boot/dts/cix/sky1.dtsi > +++ b/arch/arm64/boot/dts/cix/sky1.dtsi > @@ -606,6 +606,102 @@ mbox_ap2sfh: mailbox@80a0000 { > cix,mbox-dir =3D "tx"; > }; > =20 > + usbc_phy0: usb-phy@9030000 { > + compatible =3D "cix,sky1-usbdp-phy"; > + reg =3D <0x00 0x9030000 0x00 0x40000>; > + #address-cells =3D <1>; > + #size-cells =3D <0>; > + clocks =3D <&scmi_clk CLK_TREE_USB3C_DRD_PHY3_GATE>; > + resets =3D <&s5_syscon SKY1_USB_DP_PHY0_RST_N>, > + <&s5_syscon SKY1_USB_DP_PHY0_PRST_N>; > + reset-names =3D "core", "apb"; > + cix,usbphy-syscon =3D <&s5_syscon 0>; > + > + status =3D "disabled"; > + > + usb3_phy0: usb-port@0 { > + reg =3D <0x0>; > + #phy-cells =3D <0>; > + }; > + > + usbc0_dp_phy: dp-port@1 { > + reg =3D <0x1>; > + #phy-cells =3D <0>; > + }; > + }; [Severity: High] When these PHY nodes are enabled on Radxa Orion O6, can the cix,sky1-usbdp-= phy driver handle USB3 PHY initialization and Type-C mode transitions without skipping lane reconfiguration or leaking udphy->apb_clk enable references? First, in drivers/phy/cix/phy-cix-usbdp.c, cix_usbdp_phy_power_on() checks udphy->cur_mode against udphy->next_mode: drivers/phy/cix/phy-cix-usbdp.c:cix_usbdp_phy_power_on() { if (udphy->cur_mode =3D=3D udphy->next_mode) return 0; if ((udphy->cur_mode =3D=3D UDPHY_MODE_USB || udphy->cur_mode =3D=3D UDPHY= _MODE_DP) && udphy->next_mode =3D=3D UDPHY_MODE_DP_USB) return 0; if (phy_cfgs->udphy_init) { ret =3D phy_cfgs->udphy_init(udphy); ... } } If the PHY is brought up in 4-lane DP-only mode (udphy->cur_mode =3D=3D UDPHY_MODE_DP, which programs sky1_udphy_dp_conf in sky1_udphy_init()) and usbdp_typec_mux_set() later switches udphy->next_mode to UDPHY_MODE_DP_USB,= a subsequent call to cix_u3phy_init() -> cix_usbdp_phy_power_on() hits the ea= rly return above and skips sky1_udphy_init(). Doesn't that leave the hardware in 4-lane DP-only configuration with USB3 non-functional? Second, if USB is active (udphy->cur_mode =3D=3D UDPHY_MODE_USB, with udphy->apb_clk already enabled by sky1_udphy_init()) and udphy->next_mode changes to UDPHY_MODE_DP, udphy_dp_phy_power_on() calls cix_usbdp_phy_power_on() -> sky1_udphy_init(), which calls sky1_udphy_clk_enable() -> clk_prepare_enable(udphy->apb_clk) a second time without a preceding disable, and then overwrites udphy->cur_mode: drivers/phy/cix/phy-cix-usbdp.c:udphy_dp_phy_power_on() { ... ret =3D cix_usbdp_phy_power_on(udphy); if (ret) goto unlock; phy_set_bus_width(phy, udphy_dplane_get(udphy)); if (udphy->next_mode =3D=3D UDPHY_MODE_DP) udphy->cur_mode =3D UDPHY_MODE_DP; else udphy->cur_mode |=3D UDPHY_MODE_DP; } Because overwriting udphy->cur_mode clears the UDPHY_MODE_USB bit, cix_u3phy_exit() becomes a no-op and cix_usbdp_phy_power_off() -> sky1_udphy_exit() only calls clk_disable_unprepare(udphy->apb_clk) once. Do= es this leak a prepare/enable reference on udphy->apb_clk? Third, cix_u3phy_ops only wires up .set_mode and .exit, omitting .init and .power_on: drivers/phy/cix/phy-cix-usbdp.c:cix_u3phy_ops { .set_mode =3D cix_u3phy_set_mode, .exit =3D cix_u3phy_exit, .owner =3D THIS_MODULE, }; Won't standard USB controller drivers that call phy_init() and phy_power_on= () before accessing controller registers or before calling phy_set_mode() operate while usb3_phy0..3 are still held in reset? --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261102081532.2305= 142-1-gary.yang@cixtech.com?part=3D3 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C33DA606A33D for ; Mon, 2 Nov 2026 08:41:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=3FdMiG71; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=EhrOOeK0 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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Unsubscribe-Post:List-Owner; bh=gSQgbSe/VHL9EGmFzrMf7IpgtA4PhSw7IoSGZxVUhzo=; b=3FdMiG71IHKupNh1LwaMrxRCrO jmzvMJjXI4VHEEky114ZLJ3ENNi96VX4nRSz6p6J03G8D0dqGsADeU7NFa7zx77WschcK8XtYwvI6 6vdv2ecrQRjnqKv9p7YJHKhsmsw497WO3FOZzEZApN5zj3zIqjBY9T58rxmnTAWgFDJt0AFs/wy4Q Gew/Yt+L21mfTi/NC1qfLA8D+6bB8cinNcOj7fWogjbesSY0lXu1EEdqb/6EtxOKmie7YKW93zj+o n9IxUo7baBeINEzY+rmRzbq1MxHLvB/FCeNaxZny+xnjRfBGAaS5r/6LOCBji5mITtNnoI2fsY8IM 7/s9t9dA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xNnbH-0000000FtOg-23Qw; Mon, 02 Nov 2026 08:41:07 +0000 Received: from sea.source.kernel.org ([172.234.252.31]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xNnbG-0000000FtOS-1iOZ for linux-phy@lists.infradead.org; Mon, 02 Nov 2026 08:41:06 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id E2F6243F1D; Mon, 2 Nov 2026 08:41:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6B7B31F000C1; Mon, 2 Nov 2026 08:41:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793608865; bh=8xk9NE7yU6h/BG4sLZsv3lVUn6Wzx/1vjie+frptZo4=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=EhrOOeK0W0TMTiG3585u8HuMXygjFqSdzPEqCXRsagC17YlZq9Qf2w0cTM56D8ojh cr/QqTNiCxvbUcXiQyG1Z2U0b+0pxYU/ABNZFSjy1pBXS/NSDpGm1zjahL5UPYCbUn Bo5qZuYiZK0Gywe51OShMkWvwnpJ7z/J4XwnLFM0/Vk3vVU5VQEnTLMMtxr6cGHUpV rQ2ZhNT00R202I3RzloYmIFjDOPDULSuUpGnHgY8fxTvF0JF5dsx86t8OJxV6Tvw0f F8ptpp4lfCDi4t1jhs6tsgGA1qTdIJY0FE1xovqg+XdJXYmrPhDv0yxdjcPLGzydDe XhcRbv6bbkuQw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH 3/3] arm64: dts: cix: add Sky1 USB/DP combo PHY To: "Gary Yang" Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, vkoul@kernel.org, neil.armstrong@linaro.org, olteanv@gmail.com In-Reply-To: <20261102081532.2305142-4-gary.yang@cixtech.com> References: <20261102081532.2305142-1-gary.yang@cixtech.com> <20261102081532.2305142-4-gary.yang@cixtech.com> Date: Mon, 02 Nov 2026 08:41:04 +0000 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MyBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIGFybTY0OiBkdHM6IGNp eDogZW5hYmxpbmcgdXNiY19waHkwLi4zIGFzc2VydHMgUEhZIHJlc2V0cyBhdCBib290Ci0gW0hp Z2hdIHBoeTogY2l4OiBicm9rZW4gbW9kZSB0cmFuc2l0aW9ucywgY2xvY2sgbGVhaywgYW5kIHBo eV9vcHMgaW4gY2l4X3VkcGh5Ci0gW01lZGl1bV0gYXJtNjQ6IGR0czogY2l4OiBtaXNzaW5nIE9G IGdyYXBoIHBvcnRzIGZvciB1c2JjX3BoeSBUeXBlLUMgc3dpdGNoZXMKLS0KCmNvbW1pdCBkMTYy MjgwMjRmNjQ4MmY4MTZkZTIxZmM0NzRkNmY1MDI3YmFmZjQxCkF1dGhvcjogR2FyeSBZYW5nIDxn YXJ5LnlhbmdAY2l4dGVjaC5jb20+Cgphcm02NDogZHRzOiBjaXg6IGFkZCBTa3kxIFVTQi9EUCBj b21ibyBQSFkKClRoaXMgY29tbWl0IGFkZHMgdGhlIGZvdXIgVVNCL0RQIGNvbWJvIFBIWSBkZXZp Y2UgdHJlZSBub2RlcyB0byB0aGUgQ0lYIFNreTEKU29DIGR0c2kgYW5kIGVuYWJsZXMgdGhlbSB3 aXRoIFR5cGUtQyBvcmllbnRhdGlvbi1zd2l0Y2ggYW5kIG1vZGUtc3dpdGNoCnByb3BlcnRpZXMg b24gdGhlIFJhZHhhIE9yaW9uIE82IGJvYXJkLgoKPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9i b290L2R0cy9jaXgvc2t5MS1vcmlvbi1vNi5kdHMgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2NpeC9z a3kxLW9yaW9uLW82LmR0cwo+IGluZGV4IGUzOWM4Nzc3NGMxMjguLjc2Zjc1MTg1YjZhOGUgMTAw NjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9jaXgvc2t5MS1vcmlvbi1vNi5kdHMKPiAr KysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL2NpeC9za3kxLW9yaW9uLW82LmR0cwo+IEBAIC0xMTcs MyArMTE3LDMxIEBAICZzNV9ncGlvMiB7Cj4gICZ1YXJ0MiB7Cj4gIAlzdGF0dXMgPSAib2theSI7 Cj4gIH07Cj4gKwo+ICsmdXNiY19waHkwIHsKPiArCW9yaWVudGF0aW9uLXN3aXRjaDsKPiArCW1v ZGUtc3dpdGNoOwoKW1NldmVyaXR5OiBNZWRpdW1dCkhvdyBhcmUgVHlwZS1DIGNvbm5lY3RvciBu b2RlcyBleHBlY3RlZCB0byBsaW5rIHRvIHRoZSBvcmllbnRhdGlvbi1zd2l0Y2gKYW5kIG1vZGUt c3dpdGNoIHJlZ2lzdGVyZWQgYnkgdXNiY19waHkwIHRocm91Z2ggdXNiY19waHkzPwoKSW4gZHJp dmVycy9waHkvY2l4L3BoeS1jaXgtdXNiZHAuYywgY2l4X3VkcGh5X3Byb2JlKCkgY2hlY2tzIGZv ciB0aGVzZQpib29sZWFuIHByb3BlcnRpZXMgYW5kIHJlZ2lzdGVycyBhIFR5cGUtQyBzd2l0Y2gg YW5kIG11eCBvbiB0aGUgUEhZIGRldmljZQpmd25vZGUgdmlhIHVkcGh5X3NldHVwX29yaWVuX3N3 aXRjaCgpIGFuZCB1ZHBoeV9zZXR1cF90eXBlY19tdXgoKToKCmRyaXZlcnMvcGh5L2NpeC9waHkt Y2l4LXVzYmRwLmM6Y2l4X3VkcGh5X3Byb2JlKCkgewoJLi4uCglpZiAoZGV2aWNlX3Byb3BlcnR5 X3ByZXNlbnQoZGV2LCAib3JpZW50YXRpb24tc3dpdGNoIikpIHsKCQlyZXQgPSB1ZHBoeV9zZXR1 cF9vcmllbl9zd2l0Y2godWRwaHkpOwoJCS4uLgoJfQoKCWlmIChkZXZpY2VfcHJvcGVydHlfcHJl c2VudChkZXYsICJtb2RlLXN3aXRjaCIpKSB7CgkJcmV0ID0gdWRwaHlfc2V0dXBfdHlwZWNfbXV4 KHVkcGh5KTsKCQkuLi4KCX0KfQoKV2hlbiBhIFR5cGUtQyBjb25uZWN0b3IgZHJpdmVyIGxvb2tz IHVwIGl0cyBzd2l0Y2ggb3IgbXV4IHRocm91Z2gKZndub2RlX3R5cGVjX3N3aXRjaF9nZXQoKSBv ciBmd25vZGVfdHlwZWNfbXV4X2dldCgpLApmd25vZGVfY29ubmVjdGlvbl9maW5kX21hdGNoZXMo KSAtPiBmd25vZGVfZ3JhcGhfZGV2Y29uX21hdGNoZXMoKSByZXNvbHZlcwpib29sZWFuIG9yaWVu dGF0aW9uLXN3aXRjaCBhbmQgbW9kZS1zd2l0Y2ggcHJvdmlkZXJzIGJ5IHdhbGtpbmcgT0YgZ3Jh cGgKZW5kcG9pbnRzIChwb3J0IG9yIHBvcnRzIHdpdGggcmVtb3RlLWVuZHBvaW50KSBmcm9tIHRo ZSBjb25uZWN0b3Igbm9kZSB0bwp0aGUgcHJvdmlkZXIgbm9kZS4KCkhvd2V2ZXIsIG5laXRoZXIg c2t5MS5kdHNpIG5vciBza3kxLW9yaW9uLW82LmR0cyBkZWZpbmVzIGFueSBwb3J0IG9yIHBvcnRz Cm5vZGVzIG9uIHVzYmNfcGh5MC4uMywgYW5kCkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9waHkvY2l4LHNreTEtdXNiZHAtcGh5LnlhbWwgc2V0cwphZGRpdGlvbmFsUHJvcGVydGll czogZmFsc2Ugd2hpbGUgb25seSBhbGxvd2luZyB1c2ItcG9ydEBbMC05YS1mXSsgYW5kCmRwLXBv cnRAWzAtOWEtZl0rIGNoaWxkIG5vZGVzOgoKICBwYXR0ZXJuUHJvcGVydGllczoKICAgICJedXNi LXBvcnRAWzAtOWEtZl0rJCI6CiAgICAgIC4uLgogICAgIl5kcC1wb3J0QFswLTlhLWZdKyQiOgog ICAgICAuLi4KICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UKCldpdGhvdXQgT0YgZ3JhcGgg cG9ydCBkZWZpbml0aW9ucyBpbiB0aGUgYmluZGluZyBhbmQgZGV2aWNlIHRyZWUgbm9kZXMsCndv bid0IGFueSB1c2ItYy1jb25uZWN0b3Igbm9kZSBiZSB1bmFibGUgdG8gYmluZCB0byB0aGVzZSBz d2l0Y2hlcyBvciBmYWlsCkRUIHNjaGVtYSB2YWxpZGF0aW9uPwoKPiArCWNpeCxkZWZhdWx0LWNv bmYgPSAvYml0cy8gOCA8MHgwMz47Cj4gKwlzdGF0dXMgPSAib2theSI7Cj4gK307CgpbU2V2ZXJp dHk6IEhpZ2hdCkRvZXMgZW5hYmxpbmcgdXNiY19waHkwIHRocm91Z2ggdXNiY19waHkzIGhlcmUg YmVmb3JlIGFueSBVU0Igb3IgRGlzcGxheVBvcnQKY29uc3VtZXIgbm9kZXMgYXJlIHByZXNlbnQg aW4gdGhlIGRldmljZSB0cmVlIGJyZWFrIGJvb3Rsb2FkZXItaW5pdGlhbGl6ZWQKVVNCIG9yIERp c3BsYXlQb3J0IGNvbm5lY3Rpb25zIGF0IGJvb3Q/CgpOZWl0aGVyIGFyY2gvYXJtNjQvYm9vdC9k dHMvY2l4L3NreTEuZHRzaSBub3IKYXJjaC9hcm02NC9ib290L2R0cy9jaXgvc2t5MS1vcmlvbi1v Ni5kdHMgY3VycmVudGx5IGhhcyBhbnkgY29uc3VtZXIgbm9kZXMKcmVmZXJlbmNpbmcgdXNiM19w aHkwLi4zIG9yIHVzYmMwLi4zX2RwX3BoeS4gV2hlbiBjaXhfdWRwaHlfcHJvYmUoKSBydW5zIGZv cgplYWNoIGVuYWJsZWQgUEhZIG5vZGUsIGl0IHVuY29uZGl0aW9uYWxseSBhc3NlcnRzIGJvdGgg dGhlIGNvcmUgYW5kIEFQQgpyZXNldHMgYW5kIHNldHMgY3VyX21vZGUgdG8gVURQSFlfTU9ERV9O T05FOgoKZHJpdmVycy9waHkvY2l4L3BoeS1jaXgtdXNiZHAuYzpjaXhfdWRwaHlfcHJvYmUoKSB7 CgkuLi4KCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHVkcGh5LT5yZXNldCk7CglyZXNldF9jb250cm9s X2Fzc2VydCh1ZHBoeS0+cHJlc2V0KTsKCS4uLgoJdWRwaHlfc2V0X2RlZmF1bHRfbW9kZSh1ZHBo eSk7Cn0KCmRyaXZlcnMvcGh5L2NpeC9waHktY2l4LXVzYmRwLmM6dWRwaHlfc2V0X2RlZmF1bHRf bW9kZSgpIHsKCXVkcGh5LT5jdXJfbW9kZSA9IFVEUEhZX01PREVfTk9ORTsKfQoKQWx0aG91Z2gg Y29tbWl0IGJhMzY1MGVkMTYwZSAoInBoeTogY2l4OiBhZGQgVVNCL0RQIGNvbWJvIFBIWSBkcml2 ZXIgZm9yClNreTEiKSBzdGF0ZXMgdGhhdCB0aGUgYm9vdGxvYWRlciBtYXkgaGFuZCBvdmVyIHRo ZSBwb3J0IGFscmVhZHkgaW5pdGlhbGl6ZWQsCmFzc2VydGluZyByZXNldCBhbmQgcHJlc2V0IGlu IGNpeF91ZHBoeV9wcm9iZSgpIHdoaWxlIG5vIGNvbnN1bWVycyBleGlzdCB0bwpwb3dlciB0aGUg UEhZcyBiYWNrIG9uIGxlYXZlcyBhbGwgZm91ciBQSFlzIHBlcm1hbmVudGx5IGhlbGQgaW4gcmVz ZXQgYWZ0ZXIKcHJvYmUuIFdvdWxkbid0IHRoaXMgdGVhciBkb3duIGFueSBhY3RpdmUgYm9vdGxv YWRlci1pbml0aWFsaXplZCBEaXNwbGF5UG9ydAooc3VjaCBhcyBhbiBFRkkgZnJhbWVidWZmZXIg b3V0cHV0KSBvciBVU0IgbGluayBvbiBSYWR4YSBPcmlvbiBPNj8KClsgLi4uIF0KCj4gZGlmZiAt LWdpdCBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvY2l4L3NreTEuZHRzaSBiL2FyY2gvYXJtNjQvYm9v dC9kdHMvY2l4L3NreTEuZHRzaQo+IGluZGV4IDBhODIwZjQ1ZmViOTYuLjY3MmFhZGU0MmQ2Zjgg MTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9jaXgvc2t5MS5kdHNpCj4gKysrIGIv YXJjaC9hcm02NC9ib290L2R0cy9jaXgvc2t5MS5kdHNpCj4gQEAgLTYwNiw2ICs2MDYsMTAyIEBA IG1ib3hfYXAyc2ZoOiBtYWlsYm94QDgwYTAwMDAgewo+ICAJCQljaXgsbWJveC1kaXIgPSAidHgi Owo+ICAJCX07Cj4gIAo+ICsJCXVzYmNfcGh5MDogdXNiLXBoeUA5MDMwMDAwIHsKPiArCQkJY29t cGF0aWJsZSA9ICJjaXgsc2t5MS11c2JkcC1waHkiOwo+ICsJCQlyZWcgPSA8MHgwMCAweDkwMzAw MDAgMHgwMCAweDQwMDAwPjsKPiArCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Cj4gKwkJCSNzaXpl LWNlbGxzID0gPDA+Owo+ICsJCQljbG9ja3MgPSA8JnNjbWlfY2xrIENMS19UUkVFX1VTQjNDX0RS RF9QSFkzX0dBVEU+Owo+ICsJCQlyZXNldHMgPSA8JnM1X3N5c2NvbiBTS1kxX1VTQl9EUF9QSFkw X1JTVF9OPiwKPiArCQkJCSA8JnM1X3N5c2NvbiBTS1kxX1VTQl9EUF9QSFkwX1BSU1RfTj47Cj4g KwkJCXJlc2V0LW5hbWVzID0gImNvcmUiLCAiYXBiIjsKPiArCQkJY2l4LHVzYnBoeS1zeXNjb24g PSA8JnM1X3N5c2NvbiAwPjsKPiArCj4gKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cj4gKwo+ICsJ CQl1c2IzX3BoeTA6IHVzYi1wb3J0QDAgewo+ICsJCQkJcmVnID0gPDB4MD47Cj4gKwkJCQkjcGh5 LWNlbGxzID0gPDA+Owo+ICsJCQl9Owo+ICsKPiArCQkJdXNiYzBfZHBfcGh5OiBkcC1wb3J0QDEg ewo+ICsJCQkJcmVnID0gPDB4MT47Cj4gKwkJCQkjcGh5LWNlbGxzID0gPDA+Owo+ICsJCQl9Owo+ ICsJCX07CgpbU2V2ZXJpdHk6IEhpZ2hdCldoZW4gdGhlc2UgUEhZIG5vZGVzIGFyZSBlbmFibGVk IG9uIFJhZHhhIE9yaW9uIE82LCBjYW4gdGhlIGNpeCxza3kxLXVzYmRwLXBoeQpkcml2ZXIgaGFu ZGxlIFVTQjMgUEhZIGluaXRpYWxpemF0aW9uIGFuZCBUeXBlLUMgbW9kZSB0cmFuc2l0aW9ucyB3 aXRob3V0CnNraXBwaW5nIGxhbmUgcmVjb25maWd1cmF0aW9uIG9yIGxlYWtpbmcgdWRwaHktPmFw Yl9jbGsgZW5hYmxlIHJlZmVyZW5jZXM/CgpGaXJzdCwgaW4gZHJpdmVycy9waHkvY2l4L3BoeS1j aXgtdXNiZHAuYywgY2l4X3VzYmRwX3BoeV9wb3dlcl9vbigpIGNoZWNrcwp1ZHBoeS0+Y3VyX21v ZGUgYWdhaW5zdCB1ZHBoeS0+bmV4dF9tb2RlOgoKZHJpdmVycy9waHkvY2l4L3BoeS1jaXgtdXNi ZHAuYzpjaXhfdXNiZHBfcGh5X3Bvd2VyX29uKCkgewoJaWYgKHVkcGh5LT5jdXJfbW9kZSA9PSB1 ZHBoeS0+bmV4dF9tb2RlKQoJCXJldHVybiAwOwoKCWlmICgodWRwaHktPmN1cl9tb2RlID09IFVE UEhZX01PREVfVVNCIHx8IHVkcGh5LT5jdXJfbW9kZSA9PSBVRFBIWV9NT0RFX0RQKSAmJgoJICAg IHVkcGh5LT5uZXh0X21vZGUgPT0gVURQSFlfTU9ERV9EUF9VU0IpCgkJcmV0dXJuIDA7CgoJaWYg KHBoeV9jZmdzLT51ZHBoeV9pbml0KSB7CgkJcmV0ID0gcGh5X2NmZ3MtPnVkcGh5X2luaXQodWRw aHkpOwoJCS4uLgoJfQp9CgpJZiB0aGUgUEhZIGlzIGJyb3VnaHQgdXAgaW4gNC1sYW5lIERQLW9u bHkgbW9kZSAodWRwaHktPmN1cl9tb2RlID09ClVEUEhZX01PREVfRFAsIHdoaWNoIHByb2dyYW1z IHNreTFfdWRwaHlfZHBfY29uZiBpbiBza3kxX3VkcGh5X2luaXQoKSkgYW5kCnVzYmRwX3R5cGVj X211eF9zZXQoKSBsYXRlciBzd2l0Y2hlcyB1ZHBoeS0+bmV4dF9tb2RlIHRvIFVEUEhZX01PREVf RFBfVVNCLCBhCnN1YnNlcXVlbnQgY2FsbCB0byBjaXhfdTNwaHlfaW5pdCgpIC0+IGNpeF91c2Jk cF9waHlfcG93ZXJfb24oKSBoaXRzIHRoZSBlYXJseQpyZXR1cm4gYWJvdmUgYW5kIHNraXBzIHNr eTFfdWRwaHlfaW5pdCgpLiBEb2Vzbid0IHRoYXQgbGVhdmUgdGhlIGhhcmR3YXJlIGluCjQtbGFu ZSBEUC1vbmx5IGNvbmZpZ3VyYXRpb24gd2l0aCBVU0IzIG5vbi1mdW5jdGlvbmFsPwoKU2Vjb25k LCBpZiBVU0IgaXMgYWN0aXZlICh1ZHBoeS0+Y3VyX21vZGUgPT0gVURQSFlfTU9ERV9VU0IsIHdp dGgKdWRwaHktPmFwYl9jbGsgYWxyZWFkeSBlbmFibGVkIGJ5IHNreTFfdWRwaHlfaW5pdCgpKSBh bmQgdWRwaHktPm5leHRfbW9kZQpjaGFuZ2VzIHRvIFVEUEhZX01PREVfRFAsIHVkcGh5X2RwX3Bo eV9wb3dlcl9vbigpIGNhbGxzCmNpeF91c2JkcF9waHlfcG93ZXJfb24oKSAtPiBza3kxX3VkcGh5 X2luaXQoKSwgd2hpY2ggY2FsbHMKc2t5MV91ZHBoeV9jbGtfZW5hYmxlKCkgLT4gY2xrX3ByZXBh cmVfZW5hYmxlKHVkcGh5LT5hcGJfY2xrKSBhIHNlY29uZCB0aW1lCndpdGhvdXQgYSBwcmVjZWRp bmcgZGlzYWJsZSwgYW5kIHRoZW4gb3ZlcndyaXRlcyB1ZHBoeS0+Y3VyX21vZGU6Cgpkcml2ZXJz L3BoeS9jaXgvcGh5LWNpeC11c2JkcC5jOnVkcGh5X2RwX3BoeV9wb3dlcl9vbigpIHsKCS4uLgoJ cmV0ID0gY2l4X3VzYmRwX3BoeV9wb3dlcl9vbih1ZHBoeSk7CglpZiAocmV0KQoJCWdvdG8gdW5s b2NrOwoKCXBoeV9zZXRfYnVzX3dpZHRoKHBoeSwgdWRwaHlfZHBsYW5lX2dldCh1ZHBoeSkpOwoJ aWYgKHVkcGh5LT5uZXh0X21vZGUgPT0gVURQSFlfTU9ERV9EUCkKCQl1ZHBoeS0+Y3VyX21vZGUg PSBVRFBIWV9NT0RFX0RQOwoJZWxzZQoJCXVkcGh5LT5jdXJfbW9kZSB8PSBVRFBIWV9NT0RFX0RQ Owp9CgpCZWNhdXNlIG92ZXJ3cml0aW5nIHVkcGh5LT5jdXJfbW9kZSBjbGVhcnMgdGhlIFVEUEhZ X01PREVfVVNCIGJpdCwKY2l4X3UzcGh5X2V4aXQoKSBiZWNvbWVzIGEgbm8tb3AgYW5kIGNpeF91 c2JkcF9waHlfcG93ZXJfb2ZmKCkgLT4Kc2t5MV91ZHBoeV9leGl0KCkgb25seSBjYWxscyBjbGtf ZGlzYWJsZV91bnByZXBhcmUodWRwaHktPmFwYl9jbGspIG9uY2UuIERvZXMKdGhpcyBsZWFrIGEg cHJlcGFyZS9lbmFibGUgcmVmZXJlbmNlIG9uIHVkcGh5LT5hcGJfY2xrPwoKVGhpcmQsIGNpeF91 M3BoeV9vcHMgb25seSB3aXJlcyB1cCAuc2V0X21vZGUgYW5kIC5leGl0LCBvbWl0dGluZyAuaW5p dCBhbmQKLnBvd2VyX29uOgoKZHJpdmVycy9waHkvY2l4L3BoeS1jaXgtdXNiZHAuYzpjaXhfdTNw aHlfb3BzIHsKCS5zZXRfbW9kZSAgICAgICA9IGNpeF91M3BoeV9zZXRfbW9kZSwKCS5leGl0CQk9 IGNpeF91M3BoeV9leGl0LAoJLm93bmVyCQk9IFRISVNfTU9EVUxFLAp9OwoKV29uJ3Qgc3RhbmRh cmQgVVNCIGNvbnRyb2xsZXIgZHJpdmVycyB0aGF0IGNhbGwgcGh5X2luaXQoKSBhbmQgcGh5X3Bv d2VyX29uKCkKYmVmb3JlIGFjY2Vzc2luZyBjb250cm9sbGVyIHJlZ2lzdGVycyBvciBiZWZvcmUg Y2FsbGluZyBwaHlfc2V0X21vZGUoKQpvcGVyYXRlIHdoaWxlIHVzYjNfcGh5MC4uMyBhcmUgc3Rp bGwgaGVsZCBpbiByZXNldD8KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hp a28uZGV2LyMvcGF0Y2hzZXQvMjAyNjExMDIwODE1MzIuMjMwNTE0Mi0xLWdhcnkueWFuZ0BjaXh0 ZWNoLmNvbT9wYXJ0PTMKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0 cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXBoeQo=