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 4B71FC43458 for ; Wed, 1 Jul 2026 07:21:53 +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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: References:In-Reply-To:Cc:To:Subject:From:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=M84dMeDjmHV+1rPGeOOM2e/GyKooAsE9sPNXSoAW4lc=; b=akkmPevxkk5HLr X3OttJ1z+7w0AKrFSEf+xsktiu602+grWepqiFVQV6fpeRXh+UrAEyJPWuXKtA5OfEAPSmDfolg1A 7WiHDEsKC9ivYIxQqgzXk9Z8jJC70XirkDf1cXlpHsrsH4QXGLwGQEsMjxvmJCoHnhBD3YGmGtmFO zG475ZEIvV56PLivsznmRvIrlcXw+iNgoT7OUi6JzXGLFXsBv/UN8wBq9LJwaQ6HQv0OhJ6y6zKmX 5gFz39APnY1nIK/Pu2zTBsWwLQeQIAsIF6PBCqSSx2oUgt3B4tAl0ltxm37mHUXfB7Fl3COEzvPTF ihP8CLFvhjiyfHBJKxqA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wepGa-00000000t8R-42h1; Wed, 01 Jul 2026 07:21:52 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wepGa-00000000t7v-0UPV for linux-i3c@lists.infradead.org; Wed, 01 Jul 2026 07:21:52 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id EB3A46001D; Wed, 1 Jul 2026 07:21:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 644591F000E9; Wed, 1 Jul 2026 07:21:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782890509; bh=PaZGdD9q9xZamgNJ0r23YnjXVsMdBr4p5FcYZVh9iaE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=WzqriLQvnzAWSuGlyePLAM3sPOeBfQld96spd1/SWdNFbrbOoIwPc2TtCcaCYKFPe 6bmKMdWMZJGpjnR7OkoIfoONqhDMyM6XrUt4cxUqZ5bxijS1WJJXKjij5vnIrdCZOR 9xdUYDMwgi7lqpZ4XEmxaRKgtVEtrv/GXp62P/nghsT31lNYzH418LbIpVOBomgytB KjrGVGrWDoOeEV6JlZXS762oYbyZ2mzu7GU+03iw08BvZ4cW+anE7xzGWYwCcV5Naj 2u9DaAaJVAs5qp8RYgQwpmZAkuSeFqwuiMYPDbsmUGCXYOOfbt1be0GQgNphaEjSyd Il3Fr/YxjU9Ig== From: sashiko-bot@kernel.org Subject: Re: [PATCH v13 6/7] i3c: hub: p3h2x4x: Add support for NXP P3H2x4x I3C hub functionality To: "Lakshay Piplani" Cc: devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, linux-i3c@lists.infradead.org, Frank.Li@kernel.org, "Alexandre Belloni" In-Reply-To: <20260701065755.2067793-7-lakshay.piplani@nxp.com> References: <20260701065755.2067793-1-lakshay.piplani@nxp.com> <20260701065755.2067793-7-lakshay.piplani@nxp.com> Date: Wed, 01 Jul 2026 07:21:48 +0000 Message-Id: <20260701072149.644591F000E9@smtp.kernel.org> X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg NSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIFVucHJvdGVjdGVkIGFu ZCB0ZW1wb3JhcnkgcmVhc3NpZ25tZW50IG9mIGEgbGl2ZSBkZXZpY2UncyBgb2Zfbm9kZWAgY3Jl YXRlcyBhIGRhdGEgcmFjZSwgYW5kIG1pc3NpbmcgcmVzdG9yYXRpb24gb24gdGhlIGVycm9yIHBh dGggY2F1c2VzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBhbmQgYSBkb3VibGUtZnJlZS4KLSBbSGln aF0gYHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dGAgaXMgY29uZmlndXJlZCB3aXRoIGEgMTBtcyBz bGVlcCBpbnRlcnZhbCB0aGF0IHZhc3RseSBleGNlZWRzIHRoZSBhY3R1YWwgdG90YWwgdGltZW91 dCwgYXJ0aWZpY2lhbGx5IGRlbGF5aW5nIGV2ZXJ5IHRyYW5zYWN0aW9uIGFuZCBjYXVzaW5nIHNw dXJpb3VzIHRpbWVvdXRzLgotIFtIaWdoXSBGYWlsdXJlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig YW4gSTJDIGFkYXB0ZXIgbGVhdmVzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBhZGFwdGVycyBhY3Rp dmUgYnV0IHdpdGggZnJlZWQgYmFja2luZyBtZW1vcnksIGxlYWRpbmcgdG8gYSBVc2UtQWZ0ZXIt RnJlZS4KLSBbTWVkaXVtXSBMb29wIGNvdW50ZXJzIGBtc2dfY291bnRgIGFuZCBgbnhmZXJzX2lg IGFyZSBgdThgLCBjYXVzaW5nIGluZmluaXRlIGxvb3BzIGlmIHRoZSB0cmFuc2ZlciBjb3VudCBg bnVtYCBpcyA+PSAyNTYuCi0gW01lZGl1bV0gUmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgSTND IGh1YiBkcml2ZXIgYW5kIG90aGVyIE1GRCBjaGlsZCBkcml2ZXJzIG92ZXIgdGhlIHNoYXJlZCBg UDNIMlg0WF9ERVZfUkVHX1BST1RFQ1RJT05fQ09ERWAgcmVnaXN0ZXIuCi0tCgpjb21taXQgMzcx OThkMTlmNjEzNzM2ODcyYjZmMWZkNGY5YTc1NTk3YjFmMGFiMQpBdXRob3I6IEFtYW4gS3VtYXIg UGFuZGV5IDxhbWFuLmt1bWFycGFuZGV5QG54cC5jb20+CgppM2M6IGh1YjogcDNoMng0eDogQWRk IHN1cHBvcnQgZm9yIE5YUCBQM0gyeDR4IEkzQyBodWIgZnVuY3Rpb25hbGl0eQoKVGhpcyBwYXRj aCBhZGRzIEkzQyBodWIgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIE5YUCBQM0gyeDR4IGZhbWlseSBv ZiBtdWx0aXBvcnQKaHVicy4gSXQgZW5hYmxlcyBJM0MvSTJDIGNvbW11bmljYXRpb24gYmV0d2Vl biBob3N0IGFuZCBodWIsIGRvd25zdHJlYW0gZGV2aWNlCnN1cHBvcnQsIGFuZCB0YXJnZXQgcG9y dCBjb25maWd1cmF0aW9uLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pM2MvaHViL3AzaDI4NDBf aTNjX2h1Yl9jb21tb24uYyBiL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19odWJfY29tbW9u LmMKPiAtLS0gYS9kcml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX2NvbW1vbi5jCj4gKysr IGIvZHJpdmVycy9pM2MvaHViL3AzaDI4NDBfaTNjX2h1Yl9jb21tb24uYwpbIC4uLiBdCj4gK3N0 YXRpYyBpbnQgcDNoMng0eF9pM2NfaHViX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCXN0cnVjdCBwM2gyeDR4X2RldiAqcDNoMng0eCA9IGRldl9nZXRfZHJ2ZGF0 YShwZGV2LT5kZXYucGFyZW50KTsKPiArCXN0cnVjdCBwM2gyeDR4X2kzY19odWJfZGV2ICpwM2gy eDR4X2kzY19odWI7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3Ry dWN0IGRldmljZV9ub2RlICpub2RlOwo+ICsJaW50IHJldCwgaTsKWyAuLi4gXQo+ICsJLyogVW5s b2NrIGFjY2VzcyB0byBwcm90ZWN0ZWQgcmVnaXN0ZXJzICovCj4gKwlyZXQgPSByZWdtYXBfd3Jp dGUocDNoMng0eF9pM2NfaHViLT5yZWdtYXAsIFAzSDJYNFhfREVWX1JFR19QUk9URUNUSU9OX0NP REUsCj4gKwkJCSAgIFAzSDJYNFhfUkVHSVNURVJTX1VOTE9DS19DT0RFKTsKCltTZXZlcml0eTog TWVkaXVtXQpDb3VsZCB0aGlzIGdsb2JhbCB1bmxvY2sgcmFjZSB3aXRoIG90aGVyIE1GRCBjaGls ZCBkcml2ZXJzIChzdWNoIGFzIHRoZQpvbi1kaWUgcmVndWxhdG9yKT8gCgpCZWNhdXNlIHRoZSBw cm90ZWN0ZWQgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYXJlIHVubG9ja2VkIGF0IHRoZSBzdGFy dCBvZgpwM2gyeDR4X2kzY19odWJfcHJvYmUoKSBhbmQgbGVmdCB1bmxvY2tlZCBkdXJpbmcgdGhl IGVudGlyZSBoYXJkd2FyZQpjb25maWd1cmF0aW9uIGFuZCBkZXZpY2UgZGlzY292ZXJ5IHdpbmRv dyAod2hpY2ggaW5jbHVkZXMgc2xlZXBpbmcgaW4KaTNjX21hc3Rlcl9kb19kYWEoKSksIGEgY29u Y3VycmVudCBNRkQgY2hpbGQgZHJpdmVyIGNvdWxkIGFjY2VzcyBpdHMgb3duCnJlZ2lzdGVycyBh bmQgcmUtbG9jayB0aGUgcHJvdGVjdGlvbiBjb2RlLiBJZiB0aGF0IGhhcHBlbnMsIHN1YnNlcXVl bnQKaGFyZHdhcmUgY29uZmlndXJhdGlvbiB3cml0ZXMgaW4gdGhpcyBmdW5jdGlvbiBtaWdodCBm YWlsIHNpbGVudGx5LgoKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2 LCByZXQsICJGYWlsZWQgdG8gdW5sb2NrIEhVQidzIHByb3RlY3RlZCByZWdpc3RlcnNcbiIpOwo+ ICsKPiArCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHAzaDJ4NHhfbG9ja19y ZWdpc3RlcnNfYWN0aW9uLAo+ICsJCQkJICAgICAgIHAzaDJ4NHhfaTNjX2h1Yik7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gcDNoMng0eF9jb25maWd1cmVfaHco ZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJG YWlsZWQgdG8gY29uZmlndXJlIHRoZSBIVUJcbiIpOwpbIC4uLiBdCgo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX2kzYy5jIGIvZHJpdmVycy9pM2MvaHViL3Az aDI4NDBfaTNjX2h1Yl9pM2MuYwo+IC0tLSBhL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19o dWJfaTNjLmMKPiArKysgYi9kcml2ZXJzL2kzYy9odWIvcDNoMjg0MF9pM2NfaHViX2kzYy5jClsg Li4uIF0KPiAraW50IHAzaDJ4NHhfdHBfaTNjX2FsZ28oc3RydWN0IHAzaDJ4NHhfaTNjX2h1Yl9k ZXYgKnAzaDJ4NHhfaHViKQo+ICt7Cj4gKwlzdHJ1Y3QgaTNjX21hc3Rlcl9jb250cm9sbGVyICpw YXJlbnQgPSBpM2NfZGV2X2dldF9tYXN0ZXIocDNoMng0eF9odWItPmkzY2Rldi0+ZGVzYyk7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9yaWdfb2Zfbm9kZTsKPiArCXU4IHRwLCBudHdrX21hc2sg PSAwOwo+ICsJaW50IHJldDsKWyAuLi4gXQo+ICsJZm9yICh0cCA9IDA7IHRwIDwgUDNIMlg0WF9U UF9NQVhfQ09VTlQ7IHRwKyspIHsKPiArCQlpZiAoIXAzaDJ4NHhfaHViLT50cF9idXNbdHBdLm9m X25vZGUgfHwKPiArCQkgICAgcDNoMng0eF9odWItPmh1Yl9jb25maWcudHBfY29uZmlnW3RwXS5t b2RlICE9IFAzSDJYNFhfVFBfTU9ERV9JM0MpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKgo+ ICsJCSAqIGkzY19tYXN0ZXJfcmVnaXN0ZXIoKSBkZXJpdmVzIGJ1cyBwb3B1bGF0aW9uIGZyb20g dGhlIHBhcmVudCBkZXZpY2Uncwo+ICsJCSAqIE9GIG5vZGUuIFRlbXBvcmFyaWx5IHN3aXRjaCB0 aGUgaHViIGRldmljZSB0byB0aGUgdGFyZ2V0LXBvcnQgbm9kZSBmb3IKPiArCQkgKiByZWdpc3Ry YXRpb24sIHRoZW4gcmVzdG9yZSB0aGUgb3JpZ2luYWwgbm9kZSBpbW1lZGlhdGVseS4KPiArCQkg Ki8KPiArCQlvcmlnX29mX25vZGUgPSBwM2gyeDR4X2h1Yi0+ZGV2LT5vZl9ub2RlOwo+ICsJCXAz aDJ4NHhfaHViLT5kZXYtPm9mX25vZGUgPSBwM2gyeDR4X2h1Yi0+dHBfYnVzW3RwXS5vZl9ub2Rl Owo+ICsKPiArCQlzdHJ1Y3QgaTNjX2h1Yl9jb250cm9sbGVyICpodWJfY29udHJvbGxlciA9Cj4g KwkJCQkmcDNoMng0eF9odWItPnRwX2J1c1t0cF0uaHViX2NvbnRyb2xsZXI7Cj4gKwkJc3RydWN0 IGkzY19tYXN0ZXJfY29udHJvbGxlciAqY29udHJvbGxlciA9ICZodWJfY29udHJvbGxlci0+Y29u dHJvbGxlcjsKPiArCj4gKwkJaHViX2NvbnRyb2xsZXItPnBhcmVudCA9IHBhcmVudDsKPiArCQlo dWJfY29udHJvbGxlci0+aHViID0gcDNoMng0eF9odWItPmh1YjsKPiArCj4gKwkJZGV2X3NldF9k cnZkYXRhKCZjb250cm9sbGVyLT5kZXYsIGh1Yl9jb250cm9sbGVyKTsKPiArCj4gKwkJcmV0ID0g aTNjX2h1Yl9yZXNlcnZlX3BhcmVudF9hZGRyc2xvdHNfZnJvbV9kdChodWJfY29udHJvbGxlciwK PiArCQkJCQkJCSAgICAgICBwM2gyeDR4X2h1Yi0+dHBfYnVzW3RwXS5vZl9ub2RlKTsKPiArCQlp ZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0OwoKW1NldmVyaXR5OiBIaWdoXQpXaWxsIHRoaXMgbGVh ayB0aGUgb3JpZ2luYWwgcGFyZW50IG5vZGUgcmVmZXJlbmNlIGFuZCBjYXVzZSBhIGRvdWJsZS1m cmVlIG9uCnRoZSB0YXJnZXQgbm9kZSBpZiBpM2NfaHViX3Jlc2VydmVfcGFyZW50X2FkZHJzbG90 c19mcm9tX2R0KCkgcmV0dXJucyBhbgplcnJvcj8KCklmIHRoZSBlYXJseSByZXR1cm4gaXMgdGFr ZW4sIGRldi0+b2Zfbm9kZSBpcyBuZXZlciByZXN0b3JlZCB0bwpvcmlnX29mX25vZGUuIFdoZW4g dGhlIHByb2JlIHVud2luZHMsIHRoZSBkZXZyZXMgY2xlYW51cCBmdW5jdGlvbgpwM2gyeDR4X3B1 dF90YXJnZXRfcG9ydF9vZl9ub2RlcygpIGRyb3BzIHRoZSB0YXJnZXQgbm9kZSdzIHJlZmVyZW5j ZS4KTGF0ZXIsIHdoZW4gdGhlIGRldmljZSBjb3JlIGRlc3Ryb3lzIHRoZSBkZXZpY2UsIGl0IHdp bGwgY2FsbApvZl9ub2RlX3B1dChkZXYtPm9mX25vZGUpIHdoaWNoIG5vdyBpbmNvcnJlY3RseSBw b2ludHMgdG8gdGhlIHRhcmdldCBub2RlCmFnYWluLCBjYXVzaW5nIGEgZG91YmxlLWZyZWUuCgpD b25jdXJyZW50bHksIG1vZGlmeWluZyBkZXYtPm9mX25vZGUgd2l0aG91dCBzeW5jaHJvbml6YXRp b24gY3JlYXRlcyBhIGRhdGEKcmFjZSBmb3IgY29uY3VycmVudCBzeXNmcyBvciB1ZXZlbnQgcmVh ZHMuCgo+ICsKPiArCQlyZXQgPSBpM2NfbWFzdGVyX3JlZ2lzdGVyKGNvbnRyb2xsZXIsCj4gKwkJ CQkJICBwM2gyeDR4X2h1Yi0+ZGV2LAo+ICsJCQkJCSAgaTNjX2h1Yl9tYXN0ZXJfb3BzKCksCj4g KwkJCQkJICBmYWxzZSk7Cj4gKwo+ICsJCXAzaDJ4NHhfaHViLT5kZXYtPm9mX25vZGUgPSBvcmln X29mX25vZGU7ClsgLi4uIF0KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQw X2kzY19odWJfc21idXMuYyBiL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19odWJfc21idXMu Ywo+IC0tLSBhL2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19odWJfc21idXMuYwo+ICsrKyBi L2RyaXZlcnMvaTNjL2h1Yi9wM2gyODQwX2kzY19odWJfc21idXMuYwpbIC4uLiBdCj4gK3N0YXRp YyBpbnQgcDNoMng0eF9yZWFkX3NtYnVzX3RyYW5zYWN0aW9uX3N0YXR1cyhzdHJ1Y3QgcDNoMng0 eF9pM2NfaHViX2RldiAqaHViLAo+ICsJCQkJCQkgdTggdGFyZ2V0X3BvcnRfc3RhdHVzLAo+ICsJ CQkJCQkgdTggZGF0YV9sZW5ndGgpCj4gK3sKPiArCXUzMiBzdGF0dXNfcmVhZDsKPiArCXU4IHN0 YXR1czsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0 KGh1Yi0+cmVnbWFwLCB0YXJnZXRfcG9ydF9zdGF0dXMsCj4gKwkJCQkgICAgICAgc3RhdHVzX3Jl YWQsCj4gKwkJCQkgICAgICAgc3RhdHVzX3JlYWQgJiBQM0gyWDRYX1NNQlVTX1RSQU5TQUNUSU9O X0ZJTklTSF9GTEFHLAo+ICsJCQkJICAgICAgIFAzSDJYNFhfUE9MTElOR19ST0xMX1BFUklPRF9N UyAqIDEwMDAsCj4gKwkJCQkgICAgICAgUDNIMlg0WF9TTUJVU180MDBrSHpfVFJBTlNGRVJfVElN RU9VVChkYXRhX2xlbmd0aCkpOwoKW1NldmVyaXR5OiBIaWdoXQpEb2VzIHRoaXMgcG9sbGluZyBj b25maWd1cmF0aW9uIGNhdXNlIHNwdXJpb3VzIHRpbWVvdXRzIG9yIHNldmVyZSBwZXJmb3JtYW5j ZQpwZW5hbHRpZXM/CgpUaGUgc2xlZXBfdXMgcGFyYW1ldGVyIGlzIHNldCB0byBQM0gyWDRYX1BP TExJTkdfUk9MTF9QRVJJT0RfTVMgKiAxMDAwLAp3aGljaCBpcyAxMCwwMDB1cyAoMTBtcykuIEhv d2V2ZXIsIHRoZSB0b3RhbCB0aW1lb3V0X3VzIHBhcmFtZXRlciBwcm92aWRlZApieSBQM0gyWDRY X1NNQlVTXzQwMGtIel9UUkFOU0ZFUl9USU1FT1VUKGRhdGFfbGVuZ3RoKSBpcyBzaWduaWZpY2Fu dGx5IHNtYWxsZXIKKGUuZy4sIGJldHdlZW4gMTAwdXMgYW5kIDIsMDAwdXMgZGVwZW5kaW5nIG9u IGRhdGEgbGVuZ3RoKS4KCklmIHRoZSB0cmFuc2FjdGlvbiBpcyBub3QgY29tcGxldGUgb24gdGhl IHZlcnkgZmlyc3QgcmVhZCwgdGhlIHRocmVhZCB3aWxsCnNsZWVwIGZvciBhIGZ1bGwgMTBtcywg ZHJhc3RpY2FsbHkgb3ZlcnNob290aW5nIHRoZSBpbnRlbmRlZCB0aW1lb3V0IGFuZApwb3RlbnRp YWxseSByZXR1cm5pbmcgYSBzcHVyaW91cyAtRVRJTUVET1VUIGRlcGVuZGluZyBvbiB0aGUgc3Rh dGUgd2hlbiBpdAp3YWtlcyB1cC4KCj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7ClsgLi4u IF0KPiArc3RhdGljIHMzMiBwM2gyeDR4X3RwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAq YWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCj4gK3sKPiArCWludCByZXRfc3Vt ID0gMCwgcmV0Owo+ICsJdTggbXNnX2NvdW50LCBydzsKPiArCj4gKwlzdHJ1Y3QgdHBfYnVzICpi dXMgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwo+ICsJc3RydWN0IHAzaDJ4NHhfaTNjX2h1Yl9k ZXYgKnAzaDJ4NHhfaTNjX2h1YiA9IGJ1cy0+cDNoMng0eF9pM2NfaHViOwo+ICsKPiArCWd1YXJk KG11dGV4KSgmcDNoMng0eF9pM2NfaHViLT5ldHhfbXV0ZXgpOwo+ICsJZ3VhcmQobXV0ZXgpKCZi dXMtPnBvcnRfbXV0ZXgpOwo+ICsKPiArCWZvciAobXNnX2NvdW50ID0gMDsgbXNnX2NvdW50IDwg bnVtOyBtc2dfY291bnQrKykgewoKW1NldmVyaXR5OiBNZWRpdW1dCkNhbiB0aGlzIGxvb3AgcnVu IGluZmluaXRlbHkgaWYgdGhlIHRyYW5zZmVyIGNvdW50IChudW0pIGlzIGdyZWF0ZXIgdGhhbgpv ciBlcXVhbCB0byAyNTY/CgpUaGUgcGFyYW1ldGVyIG51bSBpcyBhIHNpZ25lZCAzMi1iaXQgaW50 ZWdlciwgYnV0IG1zZ19jb3VudCBpcyBkZWNsYXJlZCBhcwp1OC4gSWYgYW4gaW4ta2VybmVsIGRy aXZlciBzdWJtaXRzIGFuIEkyQyB0cmFuc2ZlciB3aXRoIDI1NiBvciBtb3JlCm1lc3NhZ2VzLCBt c2dfY291bnQgd2lsbCB3cmFwIGFyb3VuZCB0byAwIGJlZm9yZSBldmVyIHJlYWNoaW5nIG51bSwg bWFraW5nCnRoZSBsb29wIGNvbmRpdGlvbiBwZXJwZXR1YWxseSB0cnVlIGFuZCBjYXVzaW5nIGEg Q1BVIGxvY2t1cC4KCj4gKwkJaWYgKG1zZ3NbbXNnX2NvdW50XS5sZW4gPiBQM0gyWDRYX1NNQlVT X1BBWUxPQURfU0laRSkgewo+ICsJCQlkZXZfZXJyKHAzaDJ4NHhfaTNjX2h1Yi0+ZGV2LAo+ICsJ CQkJIk1lc3NhZ2UgbnIuICVkIG5vdCBzZW50IC0gbGVuZ3RoIG92ZXIgJWQgYnl0ZXMuXG4iLAo+ ICsJCQkJbXNnX2NvdW50LCBQM0gyWDRYX1NNQlVTX1BBWUxPQURfU0laRSk7Cj4gKwkJCXJldHVy biAtRUlOVkFMOwo+ICsJCX0KWyAuLi4gXQo+ICtpbnQgcDNoMng0eF90cF9zbWJ1c19hbGdvKHN0 cnVjdCBwM2gyeDR4X2kzY19odWJfZGV2ICpodWIpCj4gK3sKPiArCWludCByZXQ7Cj4gKwl1OCB0 cDsKPiArCj4gKwlmb3IgKHRwID0gMDsgdHAgPCBQM0gyWDRYX1RQX01BWF9DT1VOVDsgdHArKykg ewo+ICsJCWlmICghaHViLT50cF9idXNbdHBdLm9mX25vZGUgfHwKPiArCQkgICAgaHViLT5odWJf Y29uZmlnLnRwX2NvbmZpZ1t0cF0ubW9kZSAhPSBQM0gyWDRYX1RQX01PREVfU01CVVMpCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCQkvKiBBbGxvY2F0ZSBhZGFwdGVyICovCj4gKwkJc3RydWN0IGky Y19hZGFwdGVyICpzbWJ1c19hZGFwdGVyID0KPiArCQkJZGV2bV9remFsbG9jKGh1Yi0+ZGV2LCBz aXplb2YoKnNtYnVzX2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXNtYnVzX2FkYXB0 ZXIpCj4gKwkJCXJldHVybiAtRU5PTUVNOwoKW1NldmVyaXR5OiBIaWdoXQpXaWxsIHRoaXMgZWFy bHkgcmV0dXJuIG9uIGFsbG9jYXRpb24gZmFpbHVyZSBjYXVzZSBhIHVzZS1hZnRlci1mcmVlIGZv cgpwcmV2aW91c2x5IHJlZ2lzdGVyZWQgSTJDIGFkYXB0ZXJzPwoKSW4gdGhpcyBsb29wLCBpZiBk ZXZtX2t6YWxsb2MoKSBmYWlscyBmb3IgYSBnaXZlbiBwb3J0LCB0aGUgZnVuY3Rpb24gcmV0dXJu cwotRU5PTUVNIGltbWVkaWF0ZWx5IHdpdGhvdXQgY2FsbGluZyBwM2gyeDR4X3VucmVnaXN0ZXJf c21idXNfYWRhcHRlcnMoKS4KCkFueSBhZGFwdGVycyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBp biBlYXJsaWVyIGxvb3AgaXRlcmF0aW9ucyB3aWxsIHJlbWFpbgphY3RpdmUgaW4gdGhlIEkyQyBz dWJzeXN0ZW0uIEJlY2F1c2UgdGhlIGRldnJlcyB1bnJlZ2lzdGVyIGFjdGlvbgoocDNoMng0eF91 bnJlZ2lzdGVyX3NtYnVzX2FkYXB0ZXJzX2FjdGlvbikgaXMgb25seSBhZGRlZCBhdCB0aGUgZW5k IG9mIHRoZQpwcm9iZSgpIGZ1bmN0aW9uLCBpdCB3aWxsIG5vdCBleGVjdXRlLiBIb3dldmVyLCBk ZXZyZXMgd2lsbCBhdXRvbWF0aWNhbGx5CmZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZGV2 bV9remFsbG9jKCksIGxlYXZpbmcgdGhlIEkyQyBzdWJzeXN0ZW0gdG8KZGVyZWZlcmVuY2UgZnJl ZWQgbWVtb3J5IHdoZW4gaXQgaW50ZXJhY3RzIHdpdGggdGhvc2UgcmVtYWluaW5nIGRhbmdsaW5n CmFkYXB0ZXJzLgoKPiArCj4gKwkJLyogSW5pdGlhbGl6ZSBhZGFwdGVyICovCj4gKwkJc21idXNf YWRhcHRlci0+b3duZXIgPSBUSElTX01PRFVMRTsKPiArCQlzbWJ1c19hZGFwdGVyLT5jbGFzcyA9 IEkyQ19DTEFTU19IV01PTjsKCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hp a28uZGV2LyMvcGF0Y2hzZXQvMjAyNjA3MDEwNjU3NTUuMjA2Nzc5My0xLWxha3NoYXkucGlwbGFu aUBueHAuY29tP3BhcnQ9NgoKLS0gCmxpbnV4LWkzYyBtYWlsaW5nIGxpc3QKbGludXgtaTNjQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1pM2MK 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 C54BB3B14C0 for ; Wed, 1 Jul 2026 07:21:49 +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=1782890511; cv=none; b=tQkCQ0gfUoNNh43ObhhtLOFE40ovJ79kgaLzvXQADuya3QxnEZ3wk8mkaPmgRd8tYINzcO13OXG+OgQdrZ5pw+XWlfubxJeze2eatKvtXw2XhSeUwZmKDHFx2MPga1M7T8jIMRPUnlu7Z2xEkUt+6OmLNDmyXO3jW2LJOcDn5QM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782890511; c=relaxed/simple; bh=0gN9Eot4EkRuZbbZq2foEZFW0sDNpB3jWIizI4TK4fs=; h=From:Subject:To:Cc:In-Reply-To:References:Content-Type:Date: Message-Id; b=Ihl9l1R3eB1CSyVGReK6FZC053GQXI3AHxdlMSUX/ZM8SlNSPJHJCyZQCnEP8vxbXB/lOqJRit72IkLWsF0Twx6VR1HnHKh635ZVu1kIFUrGw5BawIQFRBMZrNxC48Xc+fKN0spKqcnGZzJGLXZFmGqNgh5ZUuGJQ0i1H64N1Uw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WzqriLQv; 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="WzqriLQv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 644591F000E9; Wed, 1 Jul 2026 07:21:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782890509; bh=PaZGdD9q9xZamgNJ0r23YnjXVsMdBr4p5FcYZVh9iaE=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=WzqriLQvnzAWSuGlyePLAM3sPOeBfQld96spd1/SWdNFbrbOoIwPc2TtCcaCYKFPe 6bmKMdWMZJGpjnR7OkoIfoONqhDMyM6XrUt4cxUqZ5bxijS1WJJXKjij5vnIrdCZOR 9xdUYDMwgi7lqpZ4XEmxaRKgtVEtrv/GXp62P/nghsT31lNYzH418LbIpVOBomgytB KjrGVGrWDoOeEV6JlZXS762oYbyZ2mzu7GU+03iw08BvZ4cW+anE7xzGWYwCcV5Naj 2u9DaAaJVAs5qp8RYgQwpmZAkuSeFqwuiMYPDbsmUGCXYOOfbt1be0GQgNphaEjSyd Il3Fr/YxjU9Ig== From: sashiko-bot@kernel.org Subject: Re: [PATCH v13 6/7] i3c: hub: p3h2x4x: Add support for NXP P3H2x4x I3C hub functionality Reply-To: sashiko-reviews@lists.linux.dev To: "Lakshay Piplani" Cc: devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, linux-i3c@lists.infradead.org, Frank.Li@kernel.org, "Alexandre Belloni" In-Reply-To: <20260701065755.2067793-7-lakshay.piplani@nxp.com> References: <20260701065755.2067793-1-lakshay.piplani@nxp.com> <20260701065755.2067793-7-lakshay.piplani@nxp.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Wed, 01 Jul 2026 07:21:48 +0000 Message-Id: <20260701072149.644591F000E9@smtp.kernel.org> Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Thank you for your contribution! Sashiko AI review found 5 potential issue(= s) to consider: - [High] Unprotected and temporary reassignment of a live device's `of_node= ` creates a data race, and missing restoration on the error path causes ref= erence count leaks and a double-free. - [High] `regmap_read_poll_timeout` is configured with a 10ms sleep interva= l that vastly exceeds the actual total timeout, artificially delaying every= transaction and causing spurious timeouts. - [High] Failure to allocate memory for an I2C adapter leaves previously re= gistered adapters active but with freed backing memory, leading to a Use-Af= ter-Free. - [Medium] Loop counters `msg_count` and `nxfers_i` are `u8`, causing infin= ite loops if the transfer count `num` is >=3D 256. - [Medium] Race condition between the I3C hub driver and other MFD child dr= ivers over the shared `P3H2X4X_DEV_REG_PROTECTION_CODE` register. -- commit 37198d19f613736872b6f1fd4f9a75597b1f0ab1 Author: Aman Kumar Pandey i3c: hub: p3h2x4x: Add support for NXP P3H2x4x I3C hub functionality This patch adds I3C hub functionality for the NXP P3H2x4x family of multipo= rt hubs. It enables I3C/I2C communication between host and hub, downstream dev= ice support, and target port configuration. > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_common.c b/drivers/i3c/hub/p= 3h2840_i3c_hub_common.c > --- a/drivers/i3c/hub/p3h2840_i3c_hub_common.c > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_common.c [ ... ] > +static int p3h2x4x_i3c_hub_probe(struct platform_device *pdev) > +{ > + struct p3h2x4x_dev *p3h2x4x =3D dev_get_drvdata(pdev->dev.parent); > + struct p3h2x4x_i3c_hub_dev *p3h2x4x_i3c_hub; > + struct device *dev =3D &pdev->dev; > + struct device_node *node; > + int ret, i; [ ... ] > + /* Unlock access to protected registers */ > + ret =3D regmap_write(p3h2x4x_i3c_hub->regmap, P3H2X4X_DEV_REG_PROTECTIO= N_CODE, > + P3H2X4X_REGISTERS_UNLOCK_CODE); [Severity: Medium] Could this global unlock race with other MFD child drivers (such as the on-die regulator)?=20 Because the protected configuration registers are unlocked at the start of p3h2x4x_i3c_hub_probe() and left unlocked during the entire hardware configuration and device discovery window (which includes sleeping in i3c_master_do_daa()), a concurrent MFD child driver could access its own registers and re-lock the protection code. If that happens, subsequent hardware configuration writes in this function might fail silently. > + if (ret) > + return dev_err_probe(dev, ret, "Failed to unlock HUB's protected regis= ters\n"); > + > + ret =3D devm_add_action_or_reset(dev, p3h2x4x_lock_registers_action, > + p3h2x4x_i3c_hub); > + if (ret) > + return ret; > + > + ret =3D p3h2x4x_configure_hw(dev); > + if (ret) > + return dev_err_probe(dev, ret, "Failed to configure the HUB\n"); [ ... ] > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_i3c.c b/drivers/i3c/hub/p3h2= 840_i3c_hub_i3c.c > --- a/drivers/i3c/hub/p3h2840_i3c_hub_i3c.c > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_i3c.c [ ... ] > +int p3h2x4x_tp_i3c_algo(struct p3h2x4x_i3c_hub_dev *p3h2x4x_hub) > +{ > + struct i3c_master_controller *parent =3D i3c_dev_get_master(p3h2x4x_hub= ->i3cdev->desc); > + struct device_node *orig_of_node; > + u8 tp, ntwk_mask =3D 0; > + int ret; [ ... ] > + for (tp =3D 0; tp < P3H2X4X_TP_MAX_COUNT; tp++) { > + if (!p3h2x4x_hub->tp_bus[tp].of_node || > + p3h2x4x_hub->hub_config.tp_config[tp].mode !=3D P3H2X4X_TP_MODE_I3= C) > + continue; > + > + /* > + * i3c_master_register() derives bus population from the parent device= 's > + * OF node. Temporarily switch the hub device to the target-port node = for > + * registration, then restore the original node immediately. > + */ > + orig_of_node =3D p3h2x4x_hub->dev->of_node; > + p3h2x4x_hub->dev->of_node =3D p3h2x4x_hub->tp_bus[tp].of_node; > + > + struct i3c_hub_controller *hub_controller =3D > + &p3h2x4x_hub->tp_bus[tp].hub_controller; > + struct i3c_master_controller *controller =3D &hub_controller->controll= er; > + > + hub_controller->parent =3D parent; > + hub_controller->hub =3D p3h2x4x_hub->hub; > + > + dev_set_drvdata(&controller->dev, hub_controller); > + > + ret =3D i3c_hub_reserve_parent_addrslots_from_dt(hub_controller, > + p3h2x4x_hub->tp_bus[tp].of_node); > + if (ret) > + return ret; [Severity: High] Will this leak the original parent node reference and cause a double-free on the target node if i3c_hub_reserve_parent_addrslots_from_dt() returns an error? If the early return is taken, dev->of_node is never restored to orig_of_node. When the probe unwinds, the devres cleanup function p3h2x4x_put_target_port_of_nodes() drops the target node's reference. Later, when the device core destroys the device, it will call of_node_put(dev->of_node) which now incorrectly points to the target node again, causing a double-free. Concurrently, modifying dev->of_node without synchronization creates a data race for concurrent sysfs or uevent reads. > + > + ret =3D i3c_master_register(controller, > + p3h2x4x_hub->dev, > + i3c_hub_master_ops(), > + false); > + > + p3h2x4x_hub->dev->of_node =3D orig_of_node; [ ... ] > diff --git a/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c b/drivers/i3c/hub/p3= h2840_i3c_hub_smbus.c > --- a/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c > +++ b/drivers/i3c/hub/p3h2840_i3c_hub_smbus.c [ ... ] > +static int p3h2x4x_read_smbus_transaction_status(struct p3h2x4x_i3c_hub_= dev *hub, > + u8 target_port_status, > + u8 data_length) > +{ > + u32 status_read; > + u8 status; > + int ret; > + > + ret =3D regmap_read_poll_timeout(hub->regmap, target_port_status, > + status_read, > + status_read & P3H2X4X_SMBUS_TRANSACTION_FINISH_FLAG, > + P3H2X4X_POLLING_ROLL_PERIOD_MS * 1000, > + P3H2X4X_SMBUS_400kHz_TRANSFER_TIMEOUT(data_length)); [Severity: High] Does this polling configuration cause spurious timeouts or severe performan= ce penalties? The sleep_us parameter is set to P3H2X4X_POLLING_ROLL_PERIOD_MS * 1000, which is 10,000us (10ms). However, the total timeout_us parameter provided by P3H2X4X_SMBUS_400kHz_TRANSFER_TIMEOUT(data_length) is significantly smal= ler (e.g., between 100us and 2,000us depending on data length). If the transaction is not complete on the very first read, the thread will sleep for a full 10ms, drastically overshooting the intended timeout and potentially returning a spurious -ETIMEDOUT depending on the state when it wakes up. > + if (ret) > + return ret; [ ... ] > +static s32 p3h2x4x_tp_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg = *msgs, int num) > +{ > + int ret_sum =3D 0, ret; > + u8 msg_count, rw; > + > + struct tp_bus *bus =3D i2c_get_adapdata(adap); > + struct p3h2x4x_i3c_hub_dev *p3h2x4x_i3c_hub =3D bus->p3h2x4x_i3c_hub; > + > + guard(mutex)(&p3h2x4x_i3c_hub->etx_mutex); > + guard(mutex)(&bus->port_mutex); > + > + for (msg_count =3D 0; msg_count < num; msg_count++) { [Severity: Medium] Can this loop run infinitely if the transfer count (num) is greater than or equal to 256? The parameter num is a signed 32-bit integer, but msg_count is declared as u8. If an in-kernel driver submits an I2C transfer with 256 or more messages, msg_count will wrap around to 0 before ever reaching num, making the loop condition perpetually true and causing a CPU lockup. > + if (msgs[msg_count].len > P3H2X4X_SMBUS_PAYLOAD_SIZE) { > + dev_err(p3h2x4x_i3c_hub->dev, > + "Message nr. %d not sent - length over %d bytes.\n", > + msg_count, P3H2X4X_SMBUS_PAYLOAD_SIZE); > + return -EINVAL; > + } [ ... ] > +int p3h2x4x_tp_smbus_algo(struct p3h2x4x_i3c_hub_dev *hub) > +{ > + int ret; > + u8 tp; > + > + for (tp =3D 0; tp < P3H2X4X_TP_MAX_COUNT; tp++) { > + if (!hub->tp_bus[tp].of_node || > + hub->hub_config.tp_config[tp].mode !=3D P3H2X4X_TP_MODE_SMBUS) > + continue; > + > + /* Allocate adapter */ > + struct i2c_adapter *smbus_adapter =3D > + devm_kzalloc(hub->dev, sizeof(*smbus_adapter), GFP_KERNEL); > + if (!smbus_adapter) > + return -ENOMEM; [Severity: High] Will this early return on allocation failure cause a use-after-free for previously registered I2C adapters? In this loop, if devm_kzalloc() fails for a given port, the function returns -ENOMEM immediately without calling p3h2x4x_unregister_smbus_adapters(). Any adapters successfully registered in earlier loop iterations will remain active in the I2C subsystem. Because the devres unregister action (p3h2x4x_unregister_smbus_adapters_action) is only added at the end of the probe() function, it will not execute. However, devres will automatically free the memory allocated by devm_kzalloc(), leaving the I2C subsystem to dereference freed memory when it interacts with those remaining dangling adapters. > + > + /* Initialize adapter */ > + smbus_adapter->owner =3D THIS_MODULE; > + smbus_adapter->class =3D I2C_CLASS_HWMON; --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260701065755.2067= 793-1-lakshay.piplani@nxp.com?part=3D6