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 4BD74606A329 for ; Fri, 6 Nov 2026 14:26:28 +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=n7w9wlXx; 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=H2Uo6dSE 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=S9bjREr3lc3E+Dhq0TcKG4ZDn9ToC7beupneV+ILoNo=; b=n7w9wlXxE+wbh0bH9pg4a7vzMA 5fhCor2p/kS8CjC5O5yoVhFxUB2MnJWBIHzdxDhisAAY/bI9TOi/nWPGVdSdRSuwgsUjIt9ZOtk8I pvwAL+WR+GBox2Fo5tzWZj5eITsBkh8a96NBbHe5ZVWvMMVWvnWj9Lr1fRbw7b1Fg+fzsDFmyusKB U28LSuKyNH2pm5uBJZgimt7oT5voFjmMBnxQbWs7i1fujTcs30zVvcAwyTYiRw70PFpswDpfH4aaU rGR805EqJnjYwvhYr0qwalcl5O7zGc4/l760zc8U7of9KlpBBVbl5x/y4XMz+mlUDAQZhQAtYmpFM h+SdMe7Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPKtf-0000000CefM-3m3D; Fri, 06 Nov 2026 14:26:27 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.100.1 #2 (Red Hat Linux)) id 1xPKtf-0000000CefC-0fu3 for linux-phy@lists.infradead.org; Fri, 06 Nov 2026 14:26:27 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 8CADB60204; Fri, 6 Nov 2026 14:26:26 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E247D1F0089F; Fri, 6 Nov 2026 14:26:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793975186; bh=Ec5T7VXUYsH5PVk/KzDKxhy1sXMynhaZ+V9bOG+hk58=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=H2Uo6dSE8XCf34uhOPBOpvkADepbnTYlRKjqfM/zw1c9mIb3wlSSwhszlvfulDGRJ e5SVGq6oPg4HKwo+hGqN/FkdICR9EwnbSKXhyWpDYI8c2Q46kS8vBjnR43pLrOZFvt tyJyvakWz5xhdxkMMDBK5/p/GKOgvbTQNXbdHCqdAaq2H8+GmzzsFCAm+DXnWYwKu3 WWbNJVvnbFkV9XsH+AFkIDwulM9j4hIAKF1Gr/EkGInUsxPcrtYKGITZWHHTOm07Sb 3im9MuMpmOfUSRWtfemXfdmmwv69IUOfHrd0UO1maSCAD/d81nTju2UvvKSGm3uRKx SqiajBz0ARraQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 4/5] phy: starfive: Add jh7110-inno-hdmi-phy driver To: "Michal Wilczynski" 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: <20261106-jh7110-inno-hdmi-phy-v7-4-d49368303800@samsung.com> References: <20261106-jh7110-inno-hdmi-phy-v7-0-d49368303800@samsung.com> <20261106-jh7110-inno-hdmi-phy-v7-4-d49368303800@samsung.com> Date: Fri, 06 Nov 2026 14:26:25 +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 NiBwb3RlbnRpYWwKaXNzdWVzIHRvIGNvbnNpZGVyOgotIFtIaWdoXSBwaHk6IHN0YXJmaXZlOiBy YXRlIGNhY2hlIGFuZCBCSUFTL1JYIHN0YXRlIGJyb2tlbiBhY3Jvc3MKICBkaXNhYmxlL2VuYWJs ZQotIFtIaWdoXSBwaHk6IHN0YXJmaXZlOiBpbnZhbGlkIHByZV9wbGxfY2ZnX3RhYmxlIGRpdmlk ZXJzIGJyZWFrIDgKICBkaXNwbGF5IG1vZGVzCi0gW01lZGl1bV0gcGh5OiBzdGFyZml2ZTogc3Rh cmZpdmVfaGRtaV9waHlfY2xrX3NldF9yYXRlKCkgc2tpcHMgUHJlLVBMTAogIGxvY2sgd2FpdAot IFtMb3ddIHBoeTogc3RhcmZpdmU6IHN0YXJmaXZlX2hkbWlfcGh5X3JlbW92ZSgpIGRpc2FibGVz IHJlZm9jbGsKICBiZWZvcmUgZGV2cmVzCi0gW0xvd10gcGh5OiBzdGFyZml2ZTogdW51c2VkIGlu bm9fcmVhZCgpIGhlbHBlciBhbmQgcmVnaXN0ZXIgYml0ZmllbGQKICBtYWNyb3MKLSBbTG93XSBw aHk6IHN0YXJmaXZlOiBwb3dlciBkb3duIFBvc3QtUExMIGJlZm9yZSBjb25maWd1cmluZyBkaXZp ZGVycwotLQoKY29tbWl0IDIxNjhjMDg4MzVkOWU0NWM0NDhlYzc1YjQyYzUyZGM2NjUzNzAzMmIK QXV0aG9yOiBNaWNoYWwgV2lsY3p5bnNraSA8bS53aWxjenluc2tpQHNhbXN1bmcuY29tPgoKcGh5 OiBzdGFyZml2ZTogQWRkIGpoNzExMC1pbm5vLWhkbWktcGh5IGRyaXZlcgoKVGhpcyBjb21taXQg YWRkcyB0aGUgU3RhckZpdmUgSkg3MTEwIElubm9zaWxpY29uIEhETUkgUEhZIGRyaXZlciwgd2hp Y2gKYWN0cyBhcyBhIGNsb2NrIHByb3ZpZGVyIGZvciB0aGUgcGl4ZWwgY2xvY2sgdmlhIHRoZSBQ cmUtUExMIGFuZCBhIFBIWQpwcm92aWRlciBmb3IgdGhlIFBvc3QtUExMIGFuZCBhbmFsb2cgYmxv Y2tzLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvc3RhcmZpdmUvcGh5LWpoNzExMC1pbm5v LWhkbWkuYyBiL2RyaXZlcnMvcGh5L3N0YXJmaXZlL3BoeS1qaDcxMTAtaW5uby1oZG1pLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLmViZGEzNjNlNTBhM2UK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9waHkvc3RhcmZpdmUvcGh5LWpoNzExMC1p bm5vLWhkbWkuYwo+IEBAIC0wLDAgKzEsNTg3IEBACgpbIC4uLiBdCgo+ICsvKiBSRUc6IDB4MWFh ICovCj4gKyNkZWZpbmUgU1RGX0lOTk9fUE9TVF9QTExfRElWXzEJCTB4MWFhCj4gKyNkZWZpbmUg U1RGX0lOTk9fUE9TVF9QTExfUE9TVF9ESVZfRU5BQkxFCUdFTk1BU0soMywgMikKPiArI2RlZmlu ZSBTVEZfSU5OT19QT1NUX1BMTF9SRUZDTEtfU0VMX1RNRFMJQklUKDEpCj4gKyNkZWZpbmUgU1RG X0lOTk9fUE9TVF9QTExfUE9XRVJfRE9XTgkJQklUKDApCj4gKwo+ICsvKiBSRUc6IDB4MWFiICov Cj4gKyNkZWZpbmUgU1RGX0lOTk9fUE9TVF9QTExfRElWXzIJCTB4MWFiCj4gKyNkZWZpbmUgU1RG X0lOTk9fUE9TVF9QTExfUFJFX0RJVih4KQkJRklFTERfUFJFUChHRU5NQVNLKDUsIDApLCB4KQo+ ICsjZGVmaW5lIFNURl9JTk5PX1BPU1RfUExMX0ZCX0RJVl84KHgpCQlGSUVMRF9QUkVQKEJJVCg3 KSwgKHgpID4+IDgpCj4gKwo+ICsvKiBSRUc6IDB4MWFjICovCj4gKyNkZWZpbmUgU1RGX0lOTk9f UE9TVF9QTExfRElWXzMJCTB4MWFjCj4gKyNkZWZpbmUgU1RGX0lOTk9fUE9TVF9QTExfRkJfRElW XzdfMCh4KQlGSUVMRF9QUkVQKEdFTk1BU0soNywgMCksIHgpCj4gKwo+ICsvKiBSRUc6IDB4MWFk ICovCj4gKyNkZWZpbmUgU1RGX0lOTk9fUE9TVF9QTExfRElWXzQJCTB4MWFkCj4gKyNkZWZpbmUg U1RGX0lOTk9fUE9TVF9QTExfUE9TVF9ESVZfTUFTSwlHRU5NQVNLKDEsIDApCgpbIC4uLiBdCgo+ ICsvKiBSRUc6IDB4MWIyICovCj4gKyNkZWZpbmUgU1RGX0lOTk9fVE1EU19DT05UUk9MCQkJMHgx YjIKPiArI2RlZmluZSBTVEZfSU5OT19UTURTX0NMS19EUklWRVJfRU4JCUJJVCgzKQo+ICsjZGVm aW5lIFNURl9JTk5PX1RNRFNfRDJfRFJJVkVSX0VOCQlCSVQoMikKPiArI2RlZmluZSBTVEZfSU5O T19UTURTX0QxX0RSSVZFUl9FTgkJQklUKDEpCj4gKyNkZWZpbmUgU1RGX0lOTk9fVE1EU19EMF9E UklWRVJfRU4JCUJJVCgwKQo+ICsjZGVmaW5lIFNURl9JTk5PX1RNRFNfRFJJVkVSX0VOQUJMRQkJ KFNURl9JTk5PX1RNRFNfQ0xLX0RSSVZFUl9FTiB8IFwKPiArCQkJCQkJIFNURl9JTk5PX1RNRFNf RDJfRFJJVkVSX0VOIHwgXAo+ICsJCQkJCQkgU1RGX0lOTk9fVE1EU19EMV9EUklWRVJfRU4gfCBc Cj4gKwkJCQkJCSBTVEZfSU5OT19UTURTX0QwX0RSSVZFUl9FTikKClsgLi4uIF0KCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaW5ub19oZG1pX3BoeV9wcmVfcGxsX2NvbmZpZyBwcmVfcGxsX2NmZ190 YWJsZVtdID0gewo+ICsJeyAyNTE3NTAwMCwgMjUxNzUwMDAsIDEsIDEwMCwgMiwgMywgMywgMTIs IDMsIDMsIDQsIDAsIDB4ZjU1NTU1IH0sCj4gKwl7IDI1MjAwMDAwLCAyNTIwMDAwMCwgMSwgMTAw LCAyLCAzLCAzLCAxMiwgMywgMywgNCwgMCwgMCB9LAo+ICsJeyAyNzAwMDAwMCwgMjcwMDAwMDAs IDEsIDkwLCAzLCAyLCAyLCAxMCwgMywgMywgNCwgMCwgMCB9LAo+ICsJeyAyNzAyNzAwMCwgMjcw MjcwMDAsIDEsIDkwLCAzLCAyLCAyLCAxMCwgMywgMywgNCwgMCwgMHgxNzBhM2QgfSwKPiArCXsg MjgzMjAwMDAsIDI4MzIwMDAwLCAxLCAyOCwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMHg1MWVi ODUgfSwKPiArCXsgMzAyNDAwMDAsIDMwMjQwMDAwLCAxLCAzMCwgMiwgMSwgMSwgMywgMCwgMywg NCwgMCwgMHgzZDcwYTMgfSwKPiArCXsgMzE1MDAwMDAsIDMxNTAwMDAwLCAxLCAzMSwgMiwgMSwg MSwgMywgMCwgMywgNCwgMCwgMHg3ZmZmZmYgfSwKPiArCXsgMzM3NTAwMDAsIDMzNzUwMDAwLCAx LCAzMywgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMHhjZmZmZmYgfSwKPiArCXsgMzYwMDAwMDAs IDM2MDAwMDAwLCAxLCAzNiwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMCB9LAo+ICsJeyA0MDAw MDAwMCwgNDAwMDAwMDAsIDEsIDgwLCAyLCAyLCAyLCAxMiwgMiwgMiwgMiwgMCwgMCB9LAo+ICsJ eyA0Njk3MDAwMCwgNDY5NzAwMDAsIDEsIDQ2LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweGY4 NTFlYiB9LAo+ICsJeyA0OTUwMDAwMCwgNDk1MDAwMDAsIDEsIDQ5LCAyLCAxLCAxLCAzLCAwLCAz LCA0LCAwLCAweDdmZmZmZiB9LAo+ICsJeyA0OTAwMDAwMCwgNDkwMDAwMDAsIDEsIDQ5LCAyLCAx LCAxLCAzLCAwLCAzLCA0LCAwLCAwIH0sCj4gKwl7IDUwMDAwMDAwLCA1MDAwMDAwMCwgMSwgNTAs IDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDAgfSwKPiArCXsgNTQwMDAwMDAsIDU0MDAwMDAwLCAx LCA1NCwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMCB9LAo+ICsJeyA1NDA1NDAwMCwgNTQwNTQw MDAsIDEsIDU0LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweDBkZDJmMSB9LAo+ICsJeyA1NzI4 NDAwMCwgNTcyODQwMDAsIDEsIDU3LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweDQ4YjQzOSB9 LAo+ICsJeyA1ODIzMDAwMCwgNTgyMzAwMDAsIDEsIDU4LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAw LCAweDNhZTE0NyB9LAo+ICsJeyA1OTM0MTAwMCwgNTkzNDEwMDAsIDEsIDU5LCAyLCAxLCAxLCAz LCAwLCAzLCA0LCAwLCAweDU3NGJjNiB9LAo+ICsJeyA1OTQwMDAwMCwgNTk0MDAwMDAsIDEsIDk5 LCAzLCAxLCAxLCAxLCAzLCAzLCA0LCAwLCAwIH0sCj4gKwl7IDY1MDAwMDAwLCA2NTAwMDAwMCwg MSwgMTMwLCAyLCAyLCAyLCAxMiwgMCwgMiwgMiwgMCwgMCB9LAo+ICsJeyA2ODI1MDAwMCwgNjgy NTAwMDAsIDEsIDY4LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweDNmZmZmZiB9LAo+ICsJeyA3 MTAwMDAwMCwgNzEwMDAwMDAsIDEsIDcxLCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAwIH0sCj4g Kwl7IDc0MTc2MDAwLCA3NDE3NjAwMCwgMSwgOTgsIDEsIDIsIDIsIDEsIDIsIDMsIDQsIDAsIDB4 ZTZhZTZiIH0sCj4gKwl7IDc0MjUwMDAwLCA3NDI1MDAwMCwgMSwgOTksIDEsIDIsIDIsIDEsIDIs IDMsIDQsIDAsIDAgfSwKPiArCXsgNzUwMDAwMDAsIDc1MDAwMDAwLCAxLCA3NSwgMiwgMSwgMSwg MywgMCwgMywgNCwgMCwgMCB9LAo+ICsJeyA3ODc1MDAwMCwgNzg3NTAwMDAsIDEsIDc4LCAyLCAx LCAxLCAzLCAwLCAzLCA0LCAwLCAweGNmZmZmZiB9LAo+ICsJeyA3OTUwMDAwMCwgNzk1MDAwMDAs IDEsIDc5LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweDdmZmZmZiB9LAo+ICsJeyA4MzUwMDAw MCwgODM1MDAwMDAsIDIsIDE2NywgMiwgMSwgMSwgMSwgMCwgMCwgNiwgMCwgMCB9LAo+ICsJeyA4 MzUwMDAwMCwgMTA0Mzc1MDAwLCAxLCAxMDQsIDIsIDEsIDEsIDEsIDEsIDAsIDUsIDAsIDB4NjAw MDAwIH0sCj4gKwl7IDg1NTAwMDAwLCA4NTUwMDAwMCwgMSwgODUsIDIsIDEsIDEsIDMsIDAsIDMs IDQsIDAsIDB4N2ZmZmZmIH0sCj4gKwl7IDg1NzUwMDAwLCA4NTc1MDAwMCwgMSwgODUsIDIsIDEs IDEsIDMsIDAsIDMsIDQsIDAsIDB4Y2ZmZmZmIH0sCj4gKwl7IDg1ODAwMDAwLCA4NTgwMDAwMCwg MSwgODUsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDB4Y2NjY2NjIH0sCj4gKwl7IDg4NzUwMDAw LCA4ODc1MDAwMCwgMSwgODgsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDB4Y2ZmZmZmIH0sCj4g Kwl7IDg5OTEwMDAwLCA4OTkxMDAwMCwgMSwgODksIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDB4 ZThmNWMxIH0sCj4gKwl7IDkwMDAwMDAwLCA5MDAwMDAwMCwgMSwgOTAsIDIsIDEsIDEsIDMsIDAs IDMsIDQsIDAsIDAgfSwKPiArCXsgMTAxMDAwMDAwLCAxMDEwMDAwMDAsIDEsIDEwMSwgMiwgMSwg MSwgMywgMCwgMywgNCwgMCwgMCB9LAo+ICsJeyAxMDIyNTAwMDAsIDEwMjI1MDAwMCwgMSwgMTAy LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweDNmZmZmZiB9LAo+ICsJeyAxMDY1MDAwMDAsIDEw NjUwMDAwMCwgMSwgMTA2LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAweDdmZmZmZiB9LAo+ICsJ eyAxMDgwMDAwMDAsIDEwODAwMDAwMCwgMSwgOTAsIDMsIDAsIDAsIDUsIDAsIDIsIDIsIDAsIDAg fSwKPiArCXsgMTE5MDAwMDAwLCAxMTkwMDAwMDAsIDEsIDExOSwgMiwgMSwgMSwgMywgMCwgMywg NCwgMCwgMCB9LAo+ICsJeyAxMzE0ODEwMDAsIDEzMTQ4MTAwMCwgMSwgMTMxLCAyLCAxLCAxLCAz LCAwLCAzLCA0LCAwLCAweDdiMjJkMSB9LAo+ICsJeyAxMzUwMDAwMDAsIDEzNTAwMDAwMCwgMSwg MTM1LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAwIH0sCj4gKwl7IDEzNjc1MDAwMCwgMTM2NzUw MDAwLCAxLCAxMzYsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDB4Y2ZmZmZmIH0sCj4gKwl7IDE0 NzE4MDAwMCwgMTQ3MTgwMDAwLCAxLCAxNDcsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDB4MmUx NDdhIH0sCj4gKwl7IDE0ODM1MjAwMCwgMTQ4MzUyMDAwLCAxLCA5OCwgMSwgMSwgMSwgMSwgMiwg MiwgMiwgMCwgMHhlNmFlNmIgfSwKPiArCXsgMTQ4NTAwMDAwLCAxNDg1MDAwMDAsIDEsIDk5LCAx LCAxLCAxLCAxLCAyLCAyLCAyLCAwLCAwIH0sCj4gKwl7IDE1NDAwMDAwMCwgMTU0MDAwMDAwLCAx LCAxNTQsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDAgfSwKPiArCXsgMTU2MDAwMDAwLCAxNTYw MDAwMDAsIDEsIDE1NiwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMCB9LAo+ICsJeyAxNTcwMDAw MDAsIDE1NzAwMDAwMCwgMSwgMTU3LCAyLCAxLCAxLCAzLCAwLCAzLCA0LCAwLCAwIH0sCj4gKwl7 IDE2MjAwMDAwMCwgMTYyMDAwMDAwLCAxLCAxNjIsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDAg fSwKPiArCXsgMTc0MjUwMDAwLCAxNzQyNTAwMDAsIDEsIDE0NSwgMywgMCwgMCwgNSwgMCwgMiwg MiwgMCwgMHgzNTU1NTUgfSwKPiArCXsgMTc0NTAwMDAwLCAxNzQ1MDAwMDAsIDEsIDE3NCwgMiwg MSwgMSwgMywgMCwgMywgNCwgMCwgMHg3ZmZmZmYgfSwKPiArCXsgMTc0NTcwMDAwLCAxNzQ1NzAw MDAsIDEsIDE3NCwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMHg5MWViODQgfSwKPiArCXsgMTc1 NTAwMDAwLCAxNzU1MDAwMDAsIDEsIDE3NSwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMHg3ZmZm ZmYgfSwKPiArCXsgMTg1NTkwMDAwLCAxODU1OTAwMDAsIDEsIDE4NSwgMiwgMSwgMSwgMywgMCwg MywgNCwgMCwgMHg5NzBhM2MgfSwKPiArCXsgMTg3MDAwMDAwLCAxODcwMDAwMDAsIDEsIDE4Nywg MiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMCB9LAo+ICsJeyAyMDEwMDAwMDAsIDIwMTAwMDAwMCwg MSwgMTM0LCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAwLCAwIH0sCj4gKwl7IDIzNTY5MDAwMCwgMjM1 NjkwMDAwLCAxLCAyMzUsIDIsIDEsIDEsIDMsIDAsIDMsIDQsIDAsIDB4YjBhM2Q2IH0sCj4gKwl7 IDI0MTUwMDAwMCwgMjQxNTAwMDAwLCAxLCAxNjEsIDEsIDEsIDEsIDQsIDAsIDIsIDIsIDAsIDAg fSwKPiArCXsgMjQxNzAwMDAwLCAyNDE3MDAwMDAsIDEsIDI0MSwgMiwgMSwgMSwgMywgMCwgMywg NCwgMCwgMHhiMzMzMzIgfSwKPiArCXsgMjYyNzUwMDAwLCAyNjI3NTAwMDAsIDEsIDI2MiwgMiwg MSwgMSwgMywgMCwgMywgNCwgMCwgMHhjZmZmZmYgfSwKPiArCXsgMjk2NTAwMDAwLCAyOTY1MDAw MDAsIDEsIDI5NiwgMiwgMSwgMSwgMywgMCwgMywgNCwgMCwgMHg3ZmZmZmYgfSwKPiArCXsgMjk2 NzAzMDAwLCAyOTY3MDMwMDAsIDEsIDk4LCAwLCAxLCAxLCAxLCAwLCAyLCAyLCAwLCAweGU2YWU2 YiB9LAo+ICsJeyAyOTcwMDAwMDAsIDI5NzAwMDAwMCwgMSwgOTksIDAsIDEsIDEsIDEsIDAsIDIs IDIsIDAsIDAgfSwKPiArCXsgNTk0MDAwMDAwLCA1OTQwMDAwMDAsIDEsIDk5LCAwLCAyLCAwLCAx LCAwLCAxLCAxLCAwLCAwIH0sCj4gKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAgfSwKPiArfTsKCltTZXZlcml0eTogSGlnaF0KQXJlIHRoZSBmcmFjdGlvbmFsIGRpdmlk ZXJzIGluIHByZV9wbGxfY2ZnX3RhYmxlW10gYWNjdXJhdGUgZm9yIDI1MTc1MDAwLAoyNTIwMDAw MCwgYW5kIHRoZSBzaXggKjc1MDAwMCBIeiBlbnRyaWVzICgzMzc1MDAwMCwgNzg3NTAwMDAsIDg1 NzUwMDAwLAo4ODc1MDAwMCwgMTM2NzUwMDAwLCBhbmQgMjYyNzUwMDAwKT8KCldpdGggYSAyNCBN SHogcmVmZXJlbmNlIG9zY2lsbGF0b3IgYW5kIGRpdiA9IDk2LCAyNTE3NTAwMCBIeiAoZnJhY2Rp dgoweGY1NTU1NSkgYW5kIDI1MjAwMDAwIEh6IChmcmFjZGl2IDApIHJlY2FsY3VsYXRlIHZpYQpp bm5vX2hkbWlfcGh5X3ByZV9wbGxfcmVjYWxjX3JhdGUoKSB0byAyNTI0MDAwMCBIeiBhbmQgMjUw MDAwMDAgSHogaW5zdGVhZApvZiB1c2luZyBmcmFjZGl2IDB4YjMzMzMzICgxMDAuNykgYW5kIDB4 Y2NjY2NjICgxMDAuOCkuICBUaGUgc2l4ICo3NTAwMDAgSHoKZW50cmllcyBoYXZlIGRpdiA9IDI0 IGFuZCB1c2UgZnJhY2RpdiAweGNmZmZmZiAoMC44MTI1KSBpbnN0ZWFkIG9mCjB4YzAwMDAwICgw Ljc1KSwgcmVjYWxjdWxhdGluZyB0byAqODEzMDAwIEh6LgoKV2hlbmV2ZXIgc3RhcmZpdmVfaGRt aV9waHlfY2xrX3JlY2FsY19yYXRlKCkgcnVucyB3aGlsZSB0aGUgY2xvY2sgaXMKcHJlcGFyZWQs IGl0IHVwZGF0ZXMgaW5uby0+cGl4Y2xvY2sgYW5kIHRoZSBjbG9jayBjb3JlJ3MgY2FjaGVkIHJh dGUgdG8KdGhvc2UgcmVjYWxjdWxhdGVkIHZhbHVlcywgd2hpY2ggZG8gbm90IGV4aXN0IGluIHBy ZV9wbGxfY2ZnX3RhYmxlW10uCnN0YXJmaXZlX2hkbWlfcGh5X3Bvd2VyX29uKCkgdGhlbiBwYXNz ZXMgY2xrX2dldF9yYXRlKGlubm8tPnBoeWNsaykgdG8KaW5ub19oZG1pX3BoeV9wcmVfcGxsX2xv b2t1cCgpLCB3aGljaCByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMKd2l0aCAtRUlO VkFMLgoKWyAuLi4gXQoKPiArc3RhdGljIGlubGluZSB2b2lkIGlubm9fd3JpdGUoc3RydWN0IHN0 YXJmaXZlX2hkbWlfcGh5ICppbm5vLCB1MzIgcmVnLCB1OCB2YWwpCj4gK3sKPiArCXJlZ21hcF93 cml0ZShpbm5vLT5yZWdtYXAsIHJlZyAqIDQsIHZhbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxp bmUgdTggaW5ub19yZWFkKHN0cnVjdCBzdGFyZml2ZV9oZG1pX3BoeSAqaW5ubywgdTMyIHJlZykK PiArewo+ICsJdTMyIHZhbDsKPiArCj4gKwlyZWdtYXBfcmVhZChpbm5vLT5yZWdtYXAsIHJlZyAq IDQsICZ2YWwpOwo+ICsJcmV0dXJuIHZhbDsKPiArfQoKW1NldmVyaXR5OiBMb3ddCmlubm9fcmVh ZCgpIGlzIHVudXNlZCAoYW5kIHdvdWxkIHJldHVybiBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZh bHVlIGlmCnJlZ21hcF9yZWFkKCkgZmFpbGVkKS4gIEluIGFkZGl0aW9uLCBTVEZfSU5OT19QT1NU X1BMTF9QT1NUX0RJVl9FTkFCTEUsClNURl9JTk5PX1BPU1RfUExMX1JFRkNMS19TRUxfVE1EUywg U1RGX0lOTk9fUE9TVF9QTExfRkJfRElWXzgsClNURl9JTk5PX1BPU1RfUExMX0ZCX0RJVl83XzAs IFNURl9JTk5PX1BPU1RfUExMX1BPU1RfRElWX01BU0ssIGFuZApTVEZfSU5OT19UTURTX0RSSVZF Ul9FTkFCTEUgYXJlIGRlZmluZWQgYWJvdmUgYnV0IHVudXNlZCB3aGlsZQpzdGFyZml2ZV9oZG1p X3BoeV9wb3dlcl9vbigpIG9wZW4tY29kZXMgcmF3IGhleCBjb25zdGFudHMuCgpbIC4uLiBdCgo+ ICtzdGF0aWMgaW50IHN0YXJmaXZlX2hkbWlfcGh5X2Nsa19wcmVwYXJlKHN0cnVjdCBjbGtfaHcg Kmh3KQo+ICt7Cj4gKwlzdHJ1Y3Qgc3RhcmZpdmVfaGRtaV9waHkgKmlubm8gPSB0b19zdGFyZml2 ZV9oZG1pX3BoeShodyk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlubm9faGRtaV9waHlfcHJlX3Bs bF9wb3dlcl9kb3duKCZpbm5vLT5wcmVfcGxsLCBmYWxzZSk7Cj4gKwo+ICsJaWYgKGlubm9faGRt aV9waHlfcHJlX3BsbF9pc19sb2NrZWQoJmlubm8tPnByZV9wbGwpKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXJldCA9IGlubm9faGRtaV9waHlfcHJlX3BsbF93YWl0X2xvY2tlZCgmaW5uby0+cHJl X3BsbCwgMTAwMDAwKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGlubm8tPmRldiwgIlRp bWVvdXQgd2FpdGluZyBmb3IgcHJlLVBMTCBsb2NrXG4iKTsKPiArCQlpbm5vX2hkbWlfcGh5X3By ZV9wbGxfcG93ZXJfZG93bigmaW5uby0+cHJlX3BsbCwgdHJ1ZSk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc3RhcmZpdmVf aGRtaV9waHlfY2xrX3VucHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKPiArewo+ICsJc3RydWN0 IHN0YXJmaXZlX2hkbWlfcGh5ICppbm5vID0gdG9fc3RhcmZpdmVfaGRtaV9waHkoaHcpOwo+ICsK PiArCWlubm9faGRtaV9waHlfcHJlX3BsbF9wb3dlcl9kb3duKCZpbm5vLT5wcmVfcGxsLCB0cnVl KTsKPiArCWlubm8tPnBpeGNsb2NrID0gMDsgLyogSW52YWxpZGF0ZSBjYWNoZWQgcmF0ZSAqLwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBzdGFyZml2ZV9oZG1pX3BoeV9jbGtfcmVj YWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCj4gKwkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3RhcmZpdmVfaGRtaV9waHkgKmlubm8gPSB0 b19zdGFyZml2ZV9oZG1pX3BoeShodyk7Cj4gKwo+ICsJLyoKPiArCSAqIFJlYWRpbmcgdGhlIFBM TCBiYWNrIHJlcXVpcmVzIHRoZSBIRE1JIGNvbnRyb2xsZXIncyBzeXN0ZW0gY2xvY2ssCj4gKwkg KiB3aGljaCB0aGUgc2libGluZyBjb250cm9sbGVyIGRyaXZlciBob2xkcyBhbmQgdGhpcyBkcml2 ZXIgY2Fubm90Cj4gKwkgKiByZXF1ZXN0IHdpdGhvdXQgY3JlYXRpbmcgYSBwcm9iZSBjeWNsZSB3 aXRoIHZvdXRjcmcuIFRoZSBjbG9jawo+ICsJICogZnJhbWV3b3JrIHdhbGtzIGV2ZXJ5IHJlZ2lz dGVyZWQgY2xvY2sgcmVnYXJkbGVzcyBvZiB3aGljaCBkcml2ZXJzCj4gKwkgKiBoYXZlIGJvdW5k LCBzbyBmYWxsIGJhY2sgdG8gdGhlIGNhY2hlZCByYXRlIHdoZW5ldmVyIHRoaXMgY2xvY2sgaXMK PiArCSAqIG5vdCBwcmVwYXJlZDsgYW4gdW5jbG9ja2VkIGFjY2VzcyB0byB0aGUgc2hhcmVkIHJl Z2lzdGVyIHdpbmRvdwo+ICsJICogd2VkZ2VzIHRoZSBidXMgaGFyZCBlbm91Z2ggdGhhdCB0aGUg Q1BVIHN0b3BzIHRha2luZyBOTUlzLgo+ICsJICovCj4gKwlpZiAoIWNsa19od19pc19wcmVwYXJl ZChodykpCj4gKwkJcmV0dXJuIGlubm8tPnBpeGNsb2NrOwo+ICsKPiArCWlubm8tPnBpeGNsb2Nr ID0gaW5ub19oZG1pX3BoeV9wcmVfcGxsX3JlY2FsY19yYXRlKCZpbm5vLT5wcmVfcGxsLAo+ICsJ CQkJCQkJICAgcGFyZW50X3JhdGUpOwo+ICsKPiArCXJldHVybiBpbm5vLT5waXhjbG9jazsKPiAr fQo+ICsKPiArc3RhdGljIGludCBzdGFyZml2ZV9oZG1pX3BoeV9jbGtfZGV0ZXJtaW5lX3JhdGUo c3RydWN0IGNsa19odyAqaHcsCj4gKwkJCQkJCXN0cnVjdCBjbGtfcmF0ZV9yZXF1ZXN0ICpyZXEp Cj4gK3sKPiArCXN0cnVjdCBzdGFyZml2ZV9oZG1pX3BoeSAqaW5ubyA9IHRvX3N0YXJmaXZlX2hk bWlfcGh5KGh3KTsKPiArCj4gKwlyZXR1cm4gaW5ub19oZG1pX3BoeV9wcmVfcGxsX2RldGVybWlu ZV9yYXRlKCZpbm5vLT5wcmVfcGxsLCByZXEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHN0YXJm aXZlX2hkbWlfcGh5X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9u ZyByYXRlLAo+ICsJCQkJCSAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKPiArewo+ICsJc3Ry dWN0IHN0YXJmaXZlX2hkbWlfcGh5ICppbm5vID0gdG9fc3RhcmZpdmVfaGRtaV9waHkoaHcpOwo+ ICsJY29uc3Qgc3RydWN0IGlubm9faGRtaV9waHlfcHJlX3BsbF9jb25maWcgKmNmZzsKPiArCj4g KwkvKgo+ICsJICogVGhlIEpINzExMCBvbmx5IGRyaXZlcyA4YnBjLCBzbyB0aGUgVE1EUyBjbG9j ayBhbHdheXMgbWF0Y2hlcyB0aGUKPiArCSAqIHBpeGVsIGNsb2NrLgo+ICsJICovCj4gKwljZmcg PSBpbm5vX2hkbWlfcGh5X3ByZV9wbGxfbG9va3VwKCZpbm5vLT5wcmVfcGxsLCByYXRlLCByYXRl KTsKPiArCWlmIChJU19FUlIoY2ZnKSkKPiArCQlyZXR1cm4gUFRSX0VSUihjZmcpOwo+ICsKPiAr CWRldl9kYmcoaW5uby0+ZGV2LCAiJXMgcmF0ZSAlbHUgdG1kc2NsayAlbHVcbiIsCj4gKwkJX19m dW5jX18sIHJhdGUsIGNmZy0+dG1kc2Nsb2NrKTsKPiArCj4gKwlpZiAoaW5uby0+cGl4Y2xvY2sg PT0gcmF0ZSAmJiBpbm5vLT50bWRzY2xvY2sgPT0gY2ZnLT50bWRzY2xvY2spCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJaW5ub191cGRhdGVfYml0cyhpbm5vLCBTVEZfSU5OT19CSUFTX0NPTlRST0ws Cj4gKwkJCSBTVEZfSU5OT19CSUFTX0VOQUJMRSwgU1RGX0lOTk9fQklBU19FTkFCTEUpOwo+ICsJ aW5ub193cml0ZShpbm5vLCBTVEZfSU5OT19SWF9DT05UUk9MLCBTVEZfSU5OT19SWF9FTkFCTEUp Owo+ICsKPiArCWlubm9faGRtaV9waHlfcHJlX3BsbF9wb3dlcl9kb3duKCZpbm5vLT5wcmVfcGxs LCB0cnVlKTsKPiArCWlubm9faGRtaV9waHlfcHJlX3BsbF9jb25maWd1cmUoJmlubm8tPnByZV9w bGwsIGNmZyk7Cj4gKwlpbm5vX2hkbWlfcGh5X3ByZV9wbGxfcG93ZXJfZG93bigmaW5uby0+cHJl X3BsbCwgZmFsc2UpOwo+ICsKPiArCWlubm8tPnBpeGNsb2NrID0gcmF0ZTsKPiArCWlubm8tPnRt ZHNjbG9jayA9IGNmZy0+dG1kc2Nsb2NrOwo+ICsKPiArCXJldHVybiAwOwo+ICt9CgpbU2V2ZXJp dHk6IE1lZGl1bV0KU2hvdWxkIHN0YXJmaXZlX2hkbWlfcGh5X2Nsa19zZXRfcmF0ZSgpIHdhaXQg Zm9yIHRoZSBQcmUtUExMIHRvIGxvY2sgd2hlbgp0aGUgY2xvY2sgaXMgcHJlcGFyZWQsIGFuZCBh dm9pZCBwb3dlcmluZyBpdCB1cCB3aGVuIHRoZSBjbG9jayBpcwp1bnByZXBhcmVkPwoKV2hlbiBj bGtfc2V0X3JhdGUoKSBpcyBjYWxsZWQgd2hpbGUgaGRtaV9wY2xrIGlzIGFscmVhZHkgcHJlcGFy ZWQsCnN0YXJmaXZlX2hkbWlfcGh5X2Nsa19zZXRfcmF0ZSgpIHBvd2VycyB0aGUgUHJlLVBMTCBk b3duIGFuZCBiYWNrIHVwCndpdGhvdXQgY2FsbGluZyBpbm5vX2hkbWlfcGh5X3ByZV9wbGxfd2Fp dF9sb2NrZWQoKSwgc28Kc3RhcmZpdmVfaGRtaV9waHlfcG93ZXJfb24oKSBjYW4gZW5hYmxlIHRo ZSBQb3N0LVBMTCBhZ2FpbnN0IGFuIHVubG9ja2VkClByZS1QTEwgcmVmZXJlbmNlIGNsb2NrLiAg Q29udmVyc2VseSwgd2hlbiBjbGtfc2V0X3JhdGUoKSBpcyBjYWxsZWQgd2hpbGUKaGRtaV9wY2xr IGlzIHVucHJlcGFyZWQsIHRoaXMgcG93ZXJzIG9uIFNURl9JTk5PX0JJQVNfRU5BQkxFLApTVEZf SU5OT19SWF9FTkFCTEUsIGFuZCB0aGUgUHJlLVBMTCBiZWZvcmUgY2xrX3ByZXBhcmUoKSBpcyBj YWxsZWQuCgo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIHN0YXJmaXZlX2hkbWlf cGh5X2Nsa19vcHMgPSB7Cj4gKwkucHJlcGFyZSA9IHN0YXJmaXZlX2hkbWlfcGh5X2Nsa19wcmVw YXJlLAo+ICsJLnVucHJlcGFyZSA9IHN0YXJmaXZlX2hkbWlfcGh5X2Nsa191bnByZXBhcmUsCj4g KwkucmVjYWxjX3JhdGUgPSBzdGFyZml2ZV9oZG1pX3BoeV9jbGtfcmVjYWxjX3JhdGUsCj4gKwku ZGV0ZXJtaW5lX3JhdGUgPSBzdGFyZml2ZV9oZG1pX3BoeV9jbGtfZGV0ZXJtaW5lX3JhdGUsCj4g Kwkuc2V0X3JhdGUgPSBzdGFyZml2ZV9oZG1pX3BoeV9jbGtfc2V0X3JhdGUsCj4gK307Cj4gKwo+ ICtzdGF0aWMgdm9pZCBzdGFyZml2ZV9oZG1pX3BoeV9wb3dlcl9kb3duKHN0cnVjdCBzdGFyZml2 ZV9oZG1pX3BoeSAqaW5ubykKPiArewo+ICsJaW5ub193cml0ZShpbm5vLCBTVEZfSU5OT19UTURT X0NPTlRST0wsIDB4MDApOwo+ICsJaW5ub193cml0ZShpbm5vLCBTVEZfSU5OT19TRVJJQUxJRVJf Q09OVFJPTCwgMHgwMCk7Cj4gKwlpbm5vX3dyaXRlKGlubm8sIFNURl9JTk5PX0xET19DT05UUk9M LCAweDAwKTsKPiArCWlubm9fdXBkYXRlX2JpdHMoaW5ubywgU1RGX0lOTk9fQklBU19DT05UUk9M LAo+ICsJCQkgU1RGX0lOTk9fQklBU19FTkFCTEUsIDB4MDApOwo+ICsJaW5ub193cml0ZShpbm5v LCBTVEZfSU5OT19SWF9DT05UUk9MLCAweDAwKTsKPiArCj4gKwkvKiBQb3dlciBkb3duIFBvc3Qt UExMICovCj4gKwlpbm5vX3VwZGF0ZV9iaXRzKGlubm8sIFNURl9JTk5PX1BPU1RfUExMX0RJVl8x LAo+ICsJCQkgU1RGX0lOTk9fUE9TVF9QTExfUE9XRVJfRE9XTiwKPiArCQkJIFNURl9JTk5PX1BP U1RfUExMX1BPV0VSX0RPV04pOwo+ICsKPiArCWlubm8tPnRtZHNjbG9jayA9IDA7Cj4gKwlpbm5v LT5waXhjbG9jayA9IDA7Cj4gK30KCltTZXZlcml0eTogSGlnaF0KRG9lcyBjbGVhcmluZyBpbm5v LT5waXhjbG9jaywgU1RGX0lOTk9fQklBU19FTkFCTEUsIGFuZCBTVEZfSU5OT19SWF9DT05UUk9M CmFjcm9zcyBkaXNhYmxlL3VucHJlcGFyZSBicmVhayByZS1lbmFibGluZyB0aGUgZGlzcGxheSBh dCB0aGUgc2FtZSBwaXhlbApjbG9jayByYXRlPwoKV2hlbiB0aGUgZGlzcGxheSBpcyBkaXNhYmxl ZCwgc3RhcmZpdmVfaGRtaV9waHlfcG93ZXJfZG93bigpIGNsZWFycwpTVEZfSU5OT19CSUFTX0VO QUJMRSBhbmQgU1RGX0lOTk9fUlhfQ09OVFJPTCBhbmQgemVyb2VzIGlubm8tPnBpeGNsb2NrIGFu ZAppbm5vLT50bWRzY2xvY2sgKHVuZGVyIHBoeS0+bXV0ZXggcmF0aGVyIHRoYW4gdGhlIGNsb2Nr IGNvcmUncwpwcmVwYXJlX2xvY2spLCBhbmQgc3RhcmZpdmVfaGRtaV9waHlfY2xrX3VucHJlcGFy ZSgpIGFsc28gemVyb2VzCmlubm8tPnBpeGNsb2NrLiAgSG93ZXZlciwgY2xrX2NvcmVfdW5wcmVw YXJlKCkgZG9lcyBub3QgY2xlYXIgdGhlIGNsb2NrCmNvcmUncyBjYWNoZWQgY29yZS0+cmF0ZS4K Ck9uIGEgc3Vic2VxdWVudCByZS1lbmFibGUgYXQgdGhlIHNhbWUgcmF0ZSwgY2xrX2NvcmVfc2V0 X3JhdGVfbm9sb2NrKCkgc2VlcwpyYXRlID09IGNvcmUtPnJhdGUgYW5kIHJldHVybnMgZWFybHkg d2l0aG91dCBjYWxsaW5nCnN0YXJmaXZlX2hkbWlfcGh5X2Nsa19zZXRfcmF0ZSgpLCBzbyBzdGFy Zml2ZV9oZG1pX3BoeV9jbGtfcHJlcGFyZSgpIHRyaWVzCnRvIHBvd2VyIHVwIGFuZCBsb2NrIHRo ZSBQcmUtUExMIHdoaWxlIFNURl9JTk5PX0JJQVNfRU5BQkxFIGFuZApTVEZfSU5OT19SWF9FTkFC TEUgYXJlIHN0aWxsIGRpc2FibGVkLiAgQ29udmVyc2VseSwgaWYKc3RhcmZpdmVfaGRtaV9waHlf Y2xrX3JlY2FsY19yYXRlKCkgaXMgY2FsbGVkIHdoaWxlIGhkbWlfcGNsayBpcyB1bnByZXBhcmVk Cihmb3IgZXhhbXBsZSB2aWEgY2xrX3N1bW1hcnkpLCBpdCByZXR1cm5zIGlubm8tPnBpeGNsb2Nr ICgwKSBhbmQgb3ZlcndyaXRlcwpjb3JlLT5yYXRlIHdpdGggMCwgY2F1c2luZyBjbGtfZ2V0X3Jh dGUoaW5uby0+cGh5Y2xrKSBpbgpzdGFyZml2ZV9oZG1pX3BoeV9wb3dlcl9vbigpIHRvIHJldHVy biAwIGFuZCBmYWlsIHdpdGggLUVJTlZBTCB3aGVuCnJlLWVuYWJsaW5nIHdpdGhvdXQgYSBtb2Rl IGNoYW5nZS4KClsgLi4uIF0KCj4gKwlpbm5vX3dyaXRlKGlubm8sIFNURl9JTk5PX1BPU1RfUExM X0RJVl8yLAo+ICsJCSAgIFNURl9JTk5PX1BPU1RfUExMX1BSRV9ESVYoY2ZnLT5wcmVkaXYpKTsK PiArCWlubm9fd3JpdGUoaW5ubywgU1RGX0lOTk9fUE9TVF9QTExfRElWXzMsIGNmZy0+ZmJkaXYg JiAweGZmKTsKPiArCWlubm9fd3JpdGUoaW5ubywgU1RGX0lOTk9fUE9TVF9QTExfRElWXzQsIHJl Z18xYWRfdmFsdWUpOwo+ICsKPiArCS8qIFBvd2VyIHVwIFBvc3QtUExMICovCj4gKwlpbm5vX3dy aXRlKGlubm8sIFNURl9JTk5PX1BPU1RfUExMX0RJVl8xLCByZWdfMWFhX3ZhbHVlKTsKCltTZXZl cml0eTogTG93XQpTaG91bGQgc3RhcmZpdmVfaGRtaV9waHlfcG93ZXJfb24oKSBhc3NlcnQgU1RG X0lOTk9fUE9TVF9QTExfUE9XRVJfRE9XTiBpbgpTVEZfSU5OT19QT1NUX1BMTF9ESVZfMSBiZWZv cmUgd3JpdGluZyB0aGUgUG9zdC1QTEwgZGl2aWRlciByZWdpc3RlcnM/ICBJZgp0aGUgYm9vdGxv YWRlciBsZWZ0IHRoZSBQSFkgcG93ZXJlZCBvbiBhdCBib290LCB0aGlzIHVwZGF0ZXMgdGhlIGRp dmlkZXJzCndoaWxlIHRoZSBQb3N0LVBMTCBpcyBydW5uaW5nLCB1bmxpa2Ugc3RhcmZpdmVfaGRt aV9waHlfY2xrX3NldF9yYXRlKCkgYW5kCmlubm9faGRtaV9waHlfcmszMzI4X3Bvd2VyX29uKCku CgpbIC4uLiBdCgo+ICsJLyogV2UgbXVzdCBwcmVwYXJlL2VuYWJsZSByZWZvY2xrIGhlcmUgc28g LnNldF9yYXRlLy5yZWNhbGNfcmF0ZSB3b3JrICovCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFi bGUoaW5uby0+cmVmb2Nsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZW5hYmxlIHJlZm9jbGs6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 CgpbIC4uLiBdCgo+ICtzdGF0aWMgdm9pZCBzdGFyZml2ZV9oZG1pX3BoeV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IHN0YXJmaXZlX2hkbWlfcGh5 ICppbm5vID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwo+ICsJb2ZfY2xrX2RlbF9w cm92aWRlcihwZGV2LT5kZXYub2Zfbm9kZSk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW5u by0+cmVmb2Nsayk7Cj4gK30KCltTZXZlcml0eTogTG93XQpEb2VzIHN0YXJmaXZlX2hkbWlfcGh5 X3JlbW92ZSgpIGRpc2FibGUgaW5uby0+cmVmb2NsayBiZWZvcmUgZGV2cmVzCnVucmVnaXN0ZXJz IHRoZSBQSFkgcHJvdmlkZXIsIFBIWSwgYW5kIGNsb2NrIHJlZ2lzdGVyZWQgd2l0aApkZXZtX29m X3BoeV9wcm92aWRlcl9yZWdpc3RlcigpLCBkZXZtX3BoeV9jcmVhdGUoKSwgYW5kCmRldm1fY2xr X3JlZ2lzdGVyKCk/ICBVc2luZyBkZXZtX2Nsa19nZXRfZW5hYmxlZCgpIChvcgpkZXZtX2FkZF9h Y3Rpb25fb3JfcmVzZXQoKSkgZm9yIHJlZm9jbGsgd291bGQga2VlcCB0ZWFyZG93biBpbiByZXZl cnNlCnByb2JlIG9yZGVyLgoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vc2FzaGlr by5kZXYvIy9wYXRjaHNldC8yMDI2MTEwNi1qaDcxMTAtaW5uby1oZG1pLXBoeS12Ny0wLWQ0OTM2 ODMwMzgwMEBzYW1zdW5nLmNvbT9wYXJ0PTQKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0Cmxp bnV4LXBoeUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LXBoeQo= 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=1793975187; b=DPtfFeZIjGvgUFJFH6uWq+oXbX1wlQid9N/0Au1mR8++v0FiGNcxJUar0vPoKKMjJ86K rJTyPvNbOu+jztci2TQJLqwOrHGNiP8/PcJLcGRCLCZNzqeVv22UUu23P6A39/g9PykIR 7V3aDmPpq1cxEtocKahJZMJ7j5vQz+ARXAHWnrFJnH24PGSKYzBQJvSH0Sv7iqyQk37Fa CWIbt1KZ+Z8e++0RloxS895VC6lNuLZWQECcDhbBHguPaNYZwJzLC35BpakuI5xZYoswW NEs6bg3IZEeRPanEqEhKPbi/n94fTCX4s48kPPXIP5FfnOzRrZ6T7FHijFz6ZgOvxtg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793975187; h=Received:DKIM-Signature:Message-ID:From:Subject:Reply-To:To:Cc: In-Reply-To:References:Content-Type:Content-Transfer-Encoding:Date; bh=Ec5T7VXUYsH5PVk/KzDKxhy1sXMynhaZ+V9bOG+hk58=; b=ayRxp68tBdRcBl/RPFgB87Q4j86FwmDn0XzGxaFzbtrOUzbCtuikXMyWX7tKaFEnVddw bZ45YqaLSH0dkadLu3hFMs7GiGc8EDV92LoDnzQDmuYynQbZcgOyBCDP69IjzyFE2ary0 0G4XGdxhYUSZ3yygLFK6VE8btjPXFpAAzsKJzUTqliHOiMDKtTioUKxOLMF/thmryxHZy VWMwBJJB78FNLAGPrWtgytlFnZFtc7r6xl4In3vw2fCZgWr5LYL6pSV+R5rzGm3oVmZ+e btJR8r4+qmwJeTDhRNhW3q12iwMzZm7XFkR6emLwYYdDbpO4BPe/XSAlSwi1d2OrIPA== 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=H2Uo6dSE; 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)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B6589606A32F for ; Fri, 6 Nov 2026 14:26:26 +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=H2Uo6dSE Received: by smtp.kernel.org (Postfix) with ESMTPSA id E247D1F0089F; Fri, 6 Nov 2026 14:26:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1793975186; bh=Ec5T7VXUYsH5PVk/KzDKxhy1sXMynhaZ+V9bOG+hk58=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=H2Uo6dSE8XCf34uhOPBOpvkADepbnTYlRKjqfM/zw1c9mIb3wlSSwhszlvfulDGRJ e5SVGq6oPg4HKwo+hGqN/FkdICR9EwnbSKXhyWpDYI8c2Q46kS8vBjnR43pLrOZFvt tyJyvakWz5xhdxkMMDBK5/p/GKOgvbTQNXbdHCqdAaq2H8+GmzzsFCAm+DXnWYwKu3 WWbNJVvnbFkV9XsH+AFkIDwulM9j4hIAKF1Gr/EkGInUsxPcrtYKGITZWHHTOm07Sb 3im9MuMpmOfUSRWtfemXfdmmwv69IUOfHrd0UO1maSCAD/d81nTju2UvvKSGm3uRKx SqiajBz0ARraQ== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v7 4/5] phy: starfive: Add jh7110-inno-hdmi-phy driver Reply-To: sashiko-reviews@lists.linux.dev To: "Michal Wilczynski" 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: <20261106-jh7110-inno-hdmi-phy-v7-4-d49368303800@samsung.com> References: <20261106-jh7110-inno-hdmi-phy-v7-0-d49368303800@samsung.com> <20261106-jh7110-inno-hdmi-phy-v7-4-d49368303800@samsung.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Fri, 06 Nov 2026 14:26:25 +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 6 potential issues to consider: - [High] phy: starfive: rate cache and BIAS/RX state broken across disable/enable - [High] phy: starfive: invalid pre_pll_cfg_table dividers break 8 display modes - [Medium] phy: starfive: starfive_hdmi_phy_clk_set_rate() skips Pre-PLL lock wait - [Low] phy: starfive: starfive_hdmi_phy_remove() disables refoclk before devres - [Low] phy: starfive: unused inno_read() helper and register bitfield macros - [Low] phy: starfive: power down Post-PLL before configuring dividers -- commit 2168c08835d9e45c448ec75b42c52dc66537032b Author: Michal Wilczynski phy: starfive: Add jh7110-inno-hdmi-phy driver This commit adds the StarFive JH7110 Innosilicon HDMI PHY driver, which acts as a clock provider for the pixel clock via the Pre-PLL and a PHY provider for the Post-PLL and analog blocks. > diff --git a/drivers/phy/starfive/phy-jh7110-inno-hdmi.c b/drivers/phy/st= arfive/phy-jh7110-inno-hdmi.c > new file mode 100644 > index 0000000000000..ebda363e50a3e > --- /dev/null > +++ b/drivers/phy/starfive/phy-jh7110-inno-hdmi.c > @@ -0,0 +1,587 @@ [ ... ] > +/* REG: 0x1aa */ > +#define STF_INNO_POST_PLL_DIV_1 0x1aa > +#define STF_INNO_POST_PLL_POST_DIV_ENABLE GENMASK(3, 2) > +#define STF_INNO_POST_PLL_REFCLK_SEL_TMDS BIT(1) > +#define STF_INNO_POST_PLL_POWER_DOWN BIT(0) > + > +/* REG: 0x1ab */ > +#define STF_INNO_POST_PLL_DIV_2 0x1ab > +#define STF_INNO_POST_PLL_PRE_DIV(x) FIELD_PREP(GENMASK(5, 0), x) > +#define STF_INNO_POST_PLL_FB_DIV_8(x) FIELD_PREP(BIT(7), (x) >> 8) > + > +/* REG: 0x1ac */ > +#define STF_INNO_POST_PLL_DIV_3 0x1ac > +#define STF_INNO_POST_PLL_FB_DIV_7_0(x) FIELD_PREP(GENMASK(7, 0), x) > + > +/* REG: 0x1ad */ > +#define STF_INNO_POST_PLL_DIV_4 0x1ad > +#define STF_INNO_POST_PLL_POST_DIV_MASK GENMASK(1, 0) [ ... ] > +/* REG: 0x1b2 */ > +#define STF_INNO_TMDS_CONTROL 0x1b2 > +#define STF_INNO_TMDS_CLK_DRIVER_EN BIT(3) > +#define STF_INNO_TMDS_D2_DRIVER_EN BIT(2) > +#define STF_INNO_TMDS_D1_DRIVER_EN BIT(1) > +#define STF_INNO_TMDS_D0_DRIVER_EN BIT(0) > +#define STF_INNO_TMDS_DRIVER_ENABLE (STF_INNO_TMDS_CLK_DRIVER_EN | \ > + STF_INNO_TMDS_D2_DRIVER_EN | \ > + STF_INNO_TMDS_D1_DRIVER_EN | \ > + STF_INNO_TMDS_D0_DRIVER_EN) [ ... ] > +static const struct inno_hdmi_phy_pre_pll_config pre_pll_cfg_table[] =3D= { > + { 25175000, 25175000, 1, 100, 2, 3, 3, 12, 3, 3, 4, 0, 0xf55555 }, > + { 25200000, 25200000, 1, 100, 2, 3, 3, 12, 3, 3, 4, 0, 0 }, > + { 27000000, 27000000, 1, 90, 3, 2, 2, 10, 3, 3, 4, 0, 0 }, > + { 27027000, 27027000, 1, 90, 3, 2, 2, 10, 3, 3, 4, 0, 0x170a3d }, > + { 28320000, 28320000, 1, 28, 2, 1, 1, 3, 0, 3, 4, 0, 0x51eb85 }, > + { 30240000, 30240000, 1, 30, 2, 1, 1, 3, 0, 3, 4, 0, 0x3d70a3 }, > + { 31500000, 31500000, 1, 31, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 33750000, 33750000, 1, 33, 2, 1, 1, 3, 0, 3, 4, 0, 0xcfffff }, > + { 36000000, 36000000, 1, 36, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 40000000, 40000000, 1, 80, 2, 2, 2, 12, 2, 2, 2, 0, 0 }, > + { 46970000, 46970000, 1, 46, 2, 1, 1, 3, 0, 3, 4, 0, 0xf851eb }, > + { 49500000, 49500000, 1, 49, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 49000000, 49000000, 1, 49, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 50000000, 50000000, 1, 50, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 54000000, 54000000, 1, 54, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 54054000, 54054000, 1, 54, 2, 1, 1, 3, 0, 3, 4, 0, 0x0dd2f1 }, > + { 57284000, 57284000, 1, 57, 2, 1, 1, 3, 0, 3, 4, 0, 0x48b439 }, > + { 58230000, 58230000, 1, 58, 2, 1, 1, 3, 0, 3, 4, 0, 0x3ae147 }, > + { 59341000, 59341000, 1, 59, 2, 1, 1, 3, 0, 3, 4, 0, 0x574bc6 }, > + { 59400000, 59400000, 1, 99, 3, 1, 1, 1, 3, 3, 4, 0, 0 }, > + { 65000000, 65000000, 1, 130, 2, 2, 2, 12, 0, 2, 2, 0, 0 }, > + { 68250000, 68250000, 1, 68, 2, 1, 1, 3, 0, 3, 4, 0, 0x3fffff }, > + { 71000000, 71000000, 1, 71, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 74176000, 74176000, 1, 98, 1, 2, 2, 1, 2, 3, 4, 0, 0xe6ae6b }, > + { 74250000, 74250000, 1, 99, 1, 2, 2, 1, 2, 3, 4, 0, 0 }, > + { 75000000, 75000000, 1, 75, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 78750000, 78750000, 1, 78, 2, 1, 1, 3, 0, 3, 4, 0, 0xcfffff }, > + { 79500000, 79500000, 1, 79, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 83500000, 83500000, 2, 167, 2, 1, 1, 1, 0, 0, 6, 0, 0 }, > + { 83500000, 104375000, 1, 104, 2, 1, 1, 1, 1, 0, 5, 0, 0x600000 }, > + { 85500000, 85500000, 1, 85, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 85750000, 85750000, 1, 85, 2, 1, 1, 3, 0, 3, 4, 0, 0xcfffff }, > + { 85800000, 85800000, 1, 85, 2, 1, 1, 3, 0, 3, 4, 0, 0xcccccc }, > + { 88750000, 88750000, 1, 88, 2, 1, 1, 3, 0, 3, 4, 0, 0xcfffff }, > + { 89910000, 89910000, 1, 89, 2, 1, 1, 3, 0, 3, 4, 0, 0xe8f5c1 }, > + { 90000000, 90000000, 1, 90, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 101000000, 101000000, 1, 101, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 102250000, 102250000, 1, 102, 2, 1, 1, 3, 0, 3, 4, 0, 0x3fffff }, > + { 106500000, 106500000, 1, 106, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 108000000, 108000000, 1, 90, 3, 0, 0, 5, 0, 2, 2, 0, 0 }, > + { 119000000, 119000000, 1, 119, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 131481000, 131481000, 1, 131, 2, 1, 1, 3, 0, 3, 4, 0, 0x7b22d1 }, > + { 135000000, 135000000, 1, 135, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 136750000, 136750000, 1, 136, 2, 1, 1, 3, 0, 3, 4, 0, 0xcfffff }, > + { 147180000, 147180000, 1, 147, 2, 1, 1, 3, 0, 3, 4, 0, 0x2e147a }, > + { 148352000, 148352000, 1, 98, 1, 1, 1, 1, 2, 2, 2, 0, 0xe6ae6b }, > + { 148500000, 148500000, 1, 99, 1, 1, 1, 1, 2, 2, 2, 0, 0 }, > + { 154000000, 154000000, 1, 154, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 156000000, 156000000, 1, 156, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 157000000, 157000000, 1, 157, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 162000000, 162000000, 1, 162, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 174250000, 174250000, 1, 145, 3, 0, 0, 5, 0, 2, 2, 0, 0x355555 }, > + { 174500000, 174500000, 1, 174, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 174570000, 174570000, 1, 174, 2, 1, 1, 3, 0, 3, 4, 0, 0x91eb84 }, > + { 175500000, 175500000, 1, 175, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 185590000, 185590000, 1, 185, 2, 1, 1, 3, 0, 3, 4, 0, 0x970a3c }, > + { 187000000, 187000000, 1, 187, 2, 1, 1, 3, 0, 3, 4, 0, 0 }, > + { 201000000, 201000000, 1, 134, 1, 1, 1, 1, 2, 2, 2, 0, 0 }, > + { 235690000, 235690000, 1, 235, 2, 1, 1, 3, 0, 3, 4, 0, 0xb0a3d6 }, > + { 241500000, 241500000, 1, 161, 1, 1, 1, 4, 0, 2, 2, 0, 0 }, > + { 241700000, 241700000, 1, 241, 2, 1, 1, 3, 0, 3, 4, 0, 0xb33332 }, > + { 262750000, 262750000, 1, 262, 2, 1, 1, 3, 0, 3, 4, 0, 0xcfffff }, > + { 296500000, 296500000, 1, 296, 2, 1, 1, 3, 0, 3, 4, 0, 0x7fffff }, > + { 296703000, 296703000, 1, 98, 0, 1, 1, 1, 0, 2, 2, 0, 0xe6ae6b }, > + { 297000000, 297000000, 1, 99, 0, 1, 1, 1, 0, 2, 2, 0, 0 }, > + { 594000000, 594000000, 1, 99, 0, 2, 0, 1, 0, 1, 1, 0, 0 }, > + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, > +}; [Severity: High] Are the fractional dividers in pre_pll_cfg_table[] accurate for 25175000, 25200000, and the six *750000 Hz entries (33750000, 78750000, 85750000, 88750000, 136750000, and 262750000)? With a 24 MHz reference oscillator and div =3D 96, 25175000 Hz (fracdiv 0xf55555) and 25200000 Hz (fracdiv 0) recalculate via inno_hdmi_phy_pre_pll_recalc_rate() to 25240000 Hz and 25000000 Hz instead of using fracdiv 0xb33333 (100.7) and 0xcccccc (100.8). The six *750000 Hz entries have div =3D 24 and use fracdiv 0xcfffff (0.8125) instead of 0xc00000 (0.75), recalculating to *813000 Hz. Whenever starfive_hdmi_phy_clk_recalc_rate() runs while the clock is prepared, it updates inno->pixclock and the clock core's cached rate to those recalculated values, which do not exist in pre_pll_cfg_table[]. starfive_hdmi_phy_power_on() then passes clk_get_rate(inno->phyclk) to inno_hdmi_phy_pre_pll_lookup(), which requires an exact match and fails with -EINVAL. [ ... ] > +static inline void inno_write(struct starfive_hdmi_phy *inno, u32 reg, u= 8 val) > +{ > + regmap_write(inno->regmap, reg * 4, val); > +} > + > +static inline u8 inno_read(struct starfive_hdmi_phy *inno, u32 reg) > +{ > + u32 val; > + > + regmap_read(inno->regmap, reg * 4, &val); > + return val; > +} [Severity: Low] inno_read() is unused (and would return an uninitialized stack value if regmap_read() failed). In addition, STF_INNO_POST_PLL_POST_DIV_ENABLE, STF_INNO_POST_PLL_REFCLK_SEL_TMDS, STF_INNO_POST_PLL_FB_DIV_8, STF_INNO_POST_PLL_FB_DIV_7_0, STF_INNO_POST_PLL_POST_DIV_MASK, and STF_INNO_TMDS_DRIVER_ENABLE are defined above but unused while starfive_hdmi_phy_power_on() open-codes raw hex constants. [ ... ] > +static int starfive_hdmi_phy_clk_prepare(struct clk_hw *hw) > +{ > + struct starfive_hdmi_phy *inno =3D to_starfive_hdmi_phy(hw); > + int ret; > + > + inno_hdmi_phy_pre_pll_power_down(&inno->pre_pll, false); > + > + if (inno_hdmi_phy_pre_pll_is_locked(&inno->pre_pll)) > + return 0; > + > + ret =3D inno_hdmi_phy_pre_pll_wait_locked(&inno->pre_pll, 100000); > + if (ret) { > + dev_err(inno->dev, "Timeout waiting for pre-PLL lock\n"); > + inno_hdmi_phy_pre_pll_power_down(&inno->pre_pll, true); > + return ret; > + } > + > + return 0; > +} > + > +static void starfive_hdmi_phy_clk_unprepare(struct clk_hw *hw) > +{ > + struct starfive_hdmi_phy *inno =3D to_starfive_hdmi_phy(hw); > + > + inno_hdmi_phy_pre_pll_power_down(&inno->pre_pll, true); > + inno->pixclock =3D 0; /* Invalidate cached rate */ > +} > + > +static unsigned long starfive_hdmi_phy_clk_recalc_rate(struct clk_hw *hw, > + unsigned long parent_rate) > +{ > + struct starfive_hdmi_phy *inno =3D to_starfive_hdmi_phy(hw); > + > + /* > + * Reading the PLL back requires the HDMI controller's system clock, > + * which the sibling controller driver holds and this driver cannot > + * request without creating a probe cycle with voutcrg. The clock > + * framework walks every registered clock regardless of which drivers > + * have bound, so fall back to the cached rate whenever this clock is > + * not prepared; an unclocked access to the shared register window > + * wedges the bus hard enough that the CPU stops taking NMIs. > + */ > + if (!clk_hw_is_prepared(hw)) > + return inno->pixclock; > + > + inno->pixclock =3D inno_hdmi_phy_pre_pll_recalc_rate(&inno->pre_pll, > + parent_rate); > + > + return inno->pixclock; > +} > + > +static int starfive_hdmi_phy_clk_determine_rate(struct clk_hw *hw, > + struct clk_rate_request *req) > +{ > + struct starfive_hdmi_phy *inno =3D to_starfive_hdmi_phy(hw); > + > + return inno_hdmi_phy_pre_pll_determine_rate(&inno->pre_pll, req); > +} > + > +static int starfive_hdmi_phy_clk_set_rate(struct clk_hw *hw, unsigned lo= ng rate, > + unsigned long parent_rate) > +{ > + struct starfive_hdmi_phy *inno =3D to_starfive_hdmi_phy(hw); > + const struct inno_hdmi_phy_pre_pll_config *cfg; > + > + /* > + * The JH7110 only drives 8bpc, so the TMDS clock always matches the > + * pixel clock. > + */ > + cfg =3D inno_hdmi_phy_pre_pll_lookup(&inno->pre_pll, rate, rate); > + if (IS_ERR(cfg)) > + return PTR_ERR(cfg); > + > + dev_dbg(inno->dev, "%s rate %lu tmdsclk %lu\n", > + __func__, rate, cfg->tmdsclock); > + > + if (inno->pixclock =3D=3D rate && inno->tmdsclock =3D=3D cfg->tmdsclock) > + return 0; > + > + inno_update_bits(inno, STF_INNO_BIAS_CONTROL, > + STF_INNO_BIAS_ENABLE, STF_INNO_BIAS_ENABLE); > + inno_write(inno, STF_INNO_RX_CONTROL, STF_INNO_RX_ENABLE); > + > + inno_hdmi_phy_pre_pll_power_down(&inno->pre_pll, true); > + inno_hdmi_phy_pre_pll_configure(&inno->pre_pll, cfg); > + inno_hdmi_phy_pre_pll_power_down(&inno->pre_pll, false); > + > + inno->pixclock =3D rate; > + inno->tmdsclock =3D cfg->tmdsclock; > + > + return 0; > +} [Severity: Medium] Should starfive_hdmi_phy_clk_set_rate() wait for the Pre-PLL to lock when the clock is prepared, and avoid powering it up when the clock is unprepared? When clk_set_rate() is called while hdmi_pclk is already prepared, starfive_hdmi_phy_clk_set_rate() powers the Pre-PLL down and back up without calling inno_hdmi_phy_pre_pll_wait_locked(), so starfive_hdmi_phy_power_on() can enable the Post-PLL against an unlocked Pre-PLL reference clock. Conversely, when clk_set_rate() is called while hdmi_pclk is unprepared, this powers on STF_INNO_BIAS_ENABLE, STF_INNO_RX_ENABLE, and the Pre-PLL before clk_prepare() is called. > + > +static const struct clk_ops starfive_hdmi_phy_clk_ops =3D { > + .prepare =3D starfive_hdmi_phy_clk_prepare, > + .unprepare =3D starfive_hdmi_phy_clk_unprepare, > + .recalc_rate =3D starfive_hdmi_phy_clk_recalc_rate, > + .determine_rate =3D starfive_hdmi_phy_clk_determine_rate, > + .set_rate =3D starfive_hdmi_phy_clk_set_rate, > +}; > + > +static void starfive_hdmi_phy_power_down(struct starfive_hdmi_phy *inno) > +{ > + inno_write(inno, STF_INNO_TMDS_CONTROL, 0x00); > + inno_write(inno, STF_INNO_SERIALIER_CONTROL, 0x00); > + inno_write(inno, STF_INNO_LDO_CONTROL, 0x00); > + inno_update_bits(inno, STF_INNO_BIAS_CONTROL, > + STF_INNO_BIAS_ENABLE, 0x00); > + inno_write(inno, STF_INNO_RX_CONTROL, 0x00); > + > + /* Power down Post-PLL */ > + inno_update_bits(inno, STF_INNO_POST_PLL_DIV_1, > + STF_INNO_POST_PLL_POWER_DOWN, > + STF_INNO_POST_PLL_POWER_DOWN); > + > + inno->tmdsclock =3D 0; > + inno->pixclock =3D 0; > +} [Severity: High] Does clearing inno->pixclock, STF_INNO_BIAS_ENABLE, and STF_INNO_RX_CONTROL across disable/unprepare break re-enabling the display at the same pixel clock rate? When the display is disabled, starfive_hdmi_phy_power_down() clears STF_INNO_BIAS_ENABLE and STF_INNO_RX_CONTROL and zeroes inno->pixclock and inno->tmdsclock (under phy->mutex rather than the clock core's prepare_lock), and starfive_hdmi_phy_clk_unprepare() also zeroes inno->pixclock. However, clk_core_unprepare() does not clear the clock core's cached core->rate. On a subsequent re-enable at the same rate, clk_core_set_rate_nolock() sees rate =3D=3D core->rate and returns early without calling starfive_hdmi_phy_clk_set_rate(), so starfive_hdmi_phy_clk_prepare() tries to power up and lock the Pre-PLL while STF_INNO_BIAS_ENABLE and STF_INNO_RX_ENABLE are still disabled. Conversely, if starfive_hdmi_phy_clk_recalc_rate() is called while hdmi_pclk is unprepared (for example via clk_summary), it returns inno->pixclock (0) and overwrites core->rate with 0, causing clk_get_rate(inno->phyclk) in starfive_hdmi_phy_power_on() to return 0 and fail with -EINVAL when re-enabling without a mode change. [ ... ] > + inno_write(inno, STF_INNO_POST_PLL_DIV_2, > + STF_INNO_POST_PLL_PRE_DIV(cfg->prediv)); > + inno_write(inno, STF_INNO_POST_PLL_DIV_3, cfg->fbdiv & 0xff); > + inno_write(inno, STF_INNO_POST_PLL_DIV_4, reg_1ad_value); > + > + /* Power up Post-PLL */ > + inno_write(inno, STF_INNO_POST_PLL_DIV_1, reg_1aa_value); [Severity: Low] Should starfive_hdmi_phy_power_on() assert STF_INNO_POST_PLL_POWER_DOWN in STF_INNO_POST_PLL_DIV_1 before writing the Post-PLL divider registers? If the bootloader left the PHY powered on at boot, this updates the dividers while the Post-PLL is running, unlike starfive_hdmi_phy_clk_set_rate() and inno_hdmi_phy_rk3328_power_on(). [ ... ] > + /* We must prepare/enable refoclk here so .set_rate/.recalc_rate work */ > + ret =3D clk_prepare_enable(inno->refoclk); > + if (ret) { > + dev_err(dev, "Failed to enable refoclk: %d\n", ret); > + return ret; > + } [ ... ] > +static void starfive_hdmi_phy_remove(struct platform_device *pdev) > +{ > + struct starfive_hdmi_phy *inno =3D platform_get_drvdata(pdev); > + > + of_clk_del_provider(pdev->dev.of_node); > + clk_disable_unprepare(inno->refoclk); > +} [Severity: Low] Does starfive_hdmi_phy_remove() disable inno->refoclk before devres unregisters the PHY provider, PHY, and clock registered with devm_of_phy_provider_register(), devm_phy_create(), and devm_clk_register()? Using devm_clk_get_enabled() (or devm_add_action_or_reset()) for refoclk would keep teardown in reverse probe order. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20261106-jh7110-inn= o-hdmi-phy-v7-0-d49368303800@samsung.com?part=3D4