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 039E8C531C9 for ; Sat, 25 Jul 2026 05:20:54 +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=2MsSyWj6SDWbTTzRXljzx2MlsHF7u765uBH07eFPa50=; b=UL0PBbQxVafuEg 2hxwcPhH1obPRH5HbgSGivwSsu+gOyR72TrnWfhT7xh53lcq1HMxT9hoobU1ZZjhmv1GQSpiZUezj fp8joGUMPV1vYabzGxyt7ZfVNlBnGnmgTrDgb8QQgHrzz0p9mejVAXUv99yPpNtfjKxPAGHvQWuIS WilxggCSOAt29j7/dfmrgX53vwpSFJRjl+rX/yPjMq678iCJuwe33AYsp9ii+RCnyZgbrpWba++aG CHLecJnpsNH2fS1H3eVnlaiBewA9eNTiLOCmFY7BCuWoBT6LfmvP2MdnPGSICh49smvMrhx+yiLP7 zbYtquVCzaEMiM2d7P7Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wnUof-000000004MN-30nB; Sat, 25 Jul 2026 05:20:53 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wnUoe-000000004Lc-2jcB for linux-phy@lists.infradead.org; Sat, 25 Jul 2026 05:20:52 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 52E7341870; Sat, 25 Jul 2026 05:20:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BB3DA1F00A3A; Sat, 25 Jul 2026 05:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784956852; bh=PXUXK/fDokeeNcb06VtOfelMGDGmgtUKXn+Cnmz51+U=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=UXRhN/e1ecuJZulJ9M4I2U+jsXkKyiG7vcUWffXmuTunvHa1RO8b4yVDJ0iGAdd9L FQ6j3aKjX3OL3sb/N9EFWXVHdp7ukX44+9Gz+x55CON7fx5Qz4LT/bIfxeKGN6iyTf Ocay9SV0yJYB2W4MmgNNHz1EsFmXDzthTzKQuCBrf6qlD1z83jtYN1sZu6N00CN57a UkNxtQXtGA/wq0RIXblN2RUne9bIlk0yJHJT8Ohz9ClNTuWAqzmjl+RxrGI3awF+2n 04D7rLiezJXRj2mtwEzG7jvXbcWBwsq4X17dt2JEPfFqFOBek4qGWTKedNMQHD2F+H gcuo50V1PsmMQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH 12/17] drm/spacemit: add Innosilicon DP/eDP controller bridge driver To: "Cody Kang" Cc: vkoul@kernel.org, devicetree@vger.kernel.org, linux-phy@lists.infradead.org, olteanv@gmail.com, conor+dt@kernel.org, robh@kernel.org, dri-devel@lists.freedesktop.org, neil.armstrong@linaro.org In-Reply-To: <20260724-k3-display-v1-12-f22a10a52867@gmail.com> References: <20260724-k3-display-v1-0-f22a10a52867@gmail.com> <20260724-k3-display-v1-12-f22a10a52867@gmail.com> Date: Sat, 25 Jul 2026 05:20:51 +0000 Message-Id: <20260725052051.BB3DA1F00A3A@smtp.kernel.org> X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg OSBwb3RlbnRpYWwgaXNzdWUocykgdG8gY29uc2lkZXI6Ci0gW0hpZ2hdIE1pc3NpbmcgVzFDIGhh bmRsaW5nIG9uIERQX0dFTkVSQUxfSU5URVJSVVBUIGNhdXNlcyB1bmludGVudGlvbmFsbHkgY2xl YXJlZCBpbnRlcnJ1cHRzLgotIFtIaWdoXSBMYXRlIGR5bmFtaWMgYnJpZGdlIGF0dGFjaG1lbnQg YnJlYWtzIGBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9pbml0YCBmb3IgZURQIHBhbmVscywgcmVzdWx0 aW5nIGluIDAgbW9kZXMuCi0gW0hpZ2hdIEN1c3RvbSBFRElEIHJlYWRpbmcgYnlwYXNzZXMgc3Rh bmRhcmQgRFJNIGNvcmUgaGVscGVycyBhbmQgYnJlYWtzIEkyQyBNT1Qgc2VtYW50aWNzLgotIFtI aWdoXSBJbnRlZ2VyIHRydW5jYXRpb24gb2YgdGhlIHBpeGVsIGNsb2NrIGNhdXNlcyBpbmFjY3Vy YXRlIERpc3BsYXlQb3J0IFRyYW5zZmVyIFVuaXQgKFRVKSBhbmQgSEJMQU5LIGNhbGN1bGF0aW9u cy4KLSBbSGlnaF0gTGluayB0cmFpbmluZyBhYm9ydHMgcHJlbWF0dXJlbHkgYmVjYXVzZSBzdWNj ZXNzZnVsIERQQ0Qgd3JpdGVzIGFyZSBldmFsdWF0ZWQgYXMgZXJyb3JzLgotIFtIaWdoXSBBc3lu Y2hyb25vdXMgcGFuZWwgcHJvYmUgY2F1c2VzIFVzZS1BZnRlci1GcmVlIGR1ZSB0byBpbXByb3Bl ciB1bmJpbmQvZXJyb3IgY2xlYW51cCBvcmRlci4KLSBbTWVkaXVtXSBSZXR1cm5pbmcgSVJRX05P TkUgYWZ0ZXIgYWN0aXZlbHkgY2xlYXJpbmcgcGVuZGluZyBoYXJkd2FyZSBpbnRlcnJ1cHRzIHZp b2xhdGVzIHRoZSBJUlEgQVBJLgotIFtNZWRpdW1dIFNpbmsgY2FwYWJpbGl0aWVzIGFyZSByZWFk IGNvbmN1cnJlbnRseSB3aXRob3V0IHN5bmNocm9uaXphdGlvbi4KLSBbTWVkaXVtXSBIYXJkd2Fy ZSBzaHV0ZG93biBzZXF1ZW5jZSBtb2RpZmllcyByZWdpc3RlcnMgd2l0aG91dCBhY3F1aXJpbmcg YGRwLT5tb2RlX2xvY2tgLgotLQoKLS0tIFBhdGNoIFsxMl06IFtQQVRDSCAxMi8xN10gZHJtL3Nw YWNlbWl0OiBhZGQgSW5ub3NpbGljb24gRFAvZURQIGNvbnRyb2xsZXIgYnJpZGdlIGRyaXZlciAt LS0KY29tbWl0IDdhMjk3NmQ1ZDZmNTBhYWVkZTBiMThhM2Y1ZTk5YzNjYjY3YmQ1YzEKQXV0aG9y OiBDb2R5IEthbmcgPGNvZHlrYW5nLmhrQGdtYWlsLmNvbT4KCiAgICBkcm0vc3BhY2VtaXQ6IGFk ZCBJbm5vc2lsaWNvbiBEUC9lRFAgY29udHJvbGxlciBicmlkZ2UgZHJpdmVyCiAgICAKICAgIEFk ZCB0aGUgRFAvZURQIGNvbnRyb2xsZXIgdGhhdCBzaXRzIGRvd25zdHJlYW0gb2YgdGhlIFNhdHVy biBEUFUuIFR3bwogICAgaWRlbnRpY2FsIGluc3RhbmNlcyBzaGFyZSBvbmUgY29tcGF0aWJsZTsg dGhlIGVEUC12cy1EUCByb2xlIGlzIGJvYXJkCiAgICB3aXJpbmcsIHNvIGl0IGlzIHRha2VuIGZy b20gdGhlIGRldmljZXRyZWU6IGFuIGVEUCBwYW5lbCBhbHdheXMgc2l0cwogICAgdW5kZXIgYW4g YXV4LWJ1cyBjaGlsZCBub2RlLCBhbiBleHRlcm5hbCBEUCBjb25uZWN0b3IgbmV2ZXIgZG9lcy4K ICAgIAogICAgVGhlIGxpbmsgaXMgZHJpdmVuIHRocm91Z2ggdGhlIGdlbmVyaWMgUEhZIGZyYW1l d29yaywgc28gdGhlIGNvbnRyb2xsZXIKICAgIG5ldmVyIHRvdWNoZXMgYSBQTEwgcmVnaXN0ZXIu IFRoZSBjb250cm9sbGVyJ3MgSFBEIGludGVycnVwdCBpcyBnYXRlZCBieQogICAgdGhlIERQIHBp eGVsIGNsb2NrLCB3aGljaCBjYW4gYmUgb2ZmIGV4YWN0bHkgd2hlbiBhIHBsdWcgaGFzIHRvIGJl CiAgICBjYXVnaHQsIHNvIHRoZSBjb25uZWN0b3IgaXMgYWxzbyBwb2xsZWQgYW5kIHRoZSBpbnRl cnJ1cHQgcGF0aCByZS1yZWFkcwogICAgdGhlIGxpdmUgbGV2ZWwgd2hlbiBpdCBkb2VzIGZpcmUu Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3BhY2VtaXQvc3BhY2VtaXRfaW5ub19k cC5jIGIvZHJpdmVycy9ncHUvZHJtL3NwYWNlbWl0L3NwYWNlbWl0X2lubm9fZHAuYwo+IGluZGV4 IDAwMDAwMDAwMDAwMDAuLmU4ODczMWQ5YjE4YmYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3NwYWNlbWl0L3NwYWNlbWl0X2lubm9fZHAuYwoKWyAuLi4gXQoKPiBAQCAt MjkwLDYgKzI5MCw5IEBAIHN0YXRpYyB2b2lkIHNwYWNlbWl0X2RwX2F1eF9od19yZXNldChzdHJ1 Y3Qgc3BhY2VtaXRfZHBfZGV2ICpkcCkKPiAgCXVzbGVlcF9yYW5nZSgyMDAwLCAyNTAwKTsKPiAg CXJlZ21hcF93cml0ZV9iaXRzKGRwLT5yZWdzLCBEUF9TT0ZUX1JFU0VULCBEUF9BVVhfUkVTRVQs Cj4gIAkJCSAgRklFTERfUFJFUChEUF9BVVhfUkVTRVQsIDB4MCkpOwo+ICAJdXNsZWVwX3Jhbmdl KDIwMDAsIDI1MDApOwo+ICAJcmVnbWFwX3dyaXRlX2JpdHMoZHAtPnJlZ3MsIERQX0dFTkVSQUxf SU5URVJSVVBULAo+ICAJCQkgIERQX0FVWF9SRVBMWV9FVkVOVF9JTlRfU1RBLAo+ICAJCQkgIEZJ RUxEX1BSRVAoRFBfQVVYX1JFUExZX0VWRU5UX0lOVF9TVEEsIDEpKTsKPiAgfQoKW1NldmVyaXR5 OiBIaWdoXQpEb2VzIHRoaXMgdW5pbnRlbnRpb25hbGx5IGNsZWFyIG90aGVyIHBlbmRpbmcgaW50 ZXJydXB0cz8KCkRQX0dFTkVSQUxfSU5URVJSVVBUIGFwcGVhcnMgdG8gYmUgYSB3cml0ZS0xLXRv LWNsZWFyIHJlZ2lzdGVyLiBDYWxsaW5nCnJlZ21hcF93cml0ZV9iaXRzKCkgcGVyZm9ybXMgYSBy ZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24sIHdoaWNoIHJlYWRzIGFsbApjdXJyZW50bHkgYXNz ZXJ0ZWQgaW50ZXJydXB0IGJpdHMgYW5kIHdyaXRlcyB0aGVtIGJhY2sgYXMgMXMuCgpUaGlzIGRy b3BzIGFueSB1bnJlbGF0ZWQgcGVuZGluZyBpbnRlcnJ1cHRzIChzdWNoIGFzIEhEQ1AsIG92ZXJm bG93IGV2ZW50cywKYW5kIGhvdHBsdWdzKSB0aGF0IGFycml2ZWQgY29uY3VycmVudGx5LgoKWyAu Li4gXQoKPiBAQCAtNDAxLDkgKzQwMSwxMiBAQCBzdGF0aWMgc3NpemVfdCBzcGFjZW1pdF9kcF9h dXhfdHJhbnNmZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCwKPiAgCXJlZ21hcF9yZWFkKGRwLT5y ZWdzLCBEUF9BVVhfU1RTX1JFRywKPiAgCQkgICAgJnN0YXR1cyk7IHN0YXR1cyA9IEZJRUxEX0dF VChEUF9BVVhfU1RBVFVTLCBzdGF0dXMpOwo+ICAKPiAgCS8qIFdyaXRlIDEgdG8gY2xlYXIuICov Cj4gIAlyZWdtYXBfd3JpdGVfYml0cyhkcC0+cmVncywgRFBfR0VORVJBTF9JTlRFUlJVUFQsCj4g IAkJCSAgRFBfQVVYX1JFUExZX0VWRU5UX0lOVF9TVEEsCj4gIAkJCSAgRklFTERfUFJFUChEUF9B VVhfUkVQTFlfRVZFTlRfSU5UX1NUQSwgMSkpOwoKW1NldmVyaXR5OiBIaWdoXQpDYW4gdGhpcyBy ZWFkLW1vZGlmeS13cml0ZSBvbiBhIHdyaXRlLTEtdG8tY2xlYXIgcmVnaXN0ZXIgc2lsZW50bHkg ZHJvcApvdGhlciBwZW5kaW5nIGhhcmR3YXJlIGludGVycnVwdHMgdGhhdCBhcnJpdmUgZHVyaW5n IHRoZSBBVVggdHJhbnNmZXI/CgpbIC4uLiBdCgo+IEBAIC04MDYsNiArODA2LDggQEAgc3RhdGlj IGludCBzcGFjZW1pdF9kcF9hdXhfaTJjX3dyaXRlKHN0cnVjdCBzcGFjZW1pdF9kcF9kZXYgKmRw LCB1MzIgYWRkcmVzcywKPiAgCQkuYnVmZmVyID0gKHU4ICopYnVmLAo+ICAJCS5zaXplID0gbGVu LAo+ICAJfTsKPiAgCWludCByZXQ7Cj4gIAo+ICAJcmV0ID0gc3BhY2VtaXRfZHBfYXV4X3RyYW5z ZmVyKCZkcC0+YXV4LCAmbXNnKTsKPiAgCWlmIChyZXQgPCAwKQo+ICAJCXJldHVybiByZXQ7Cgpb U2V2ZXJpdHk6IEhpZ2hdCkRvZXMgdGhpcyBjdXN0b20gSTJDIG92ZXIgQVVYIGltcGxlbWVudGF0 aW9uIGJ5cGFzcyBzeW5jaHJvbml6YXRpb24/CgpCeSBkaXJlY3RseSBpbnZva2luZyBzcGFjZW1p dF9kcF9hdXhfdHJhbnNmZXIoKSBoZXJlIHJhdGhlciB0aGFuIHVzaW5nIHN0YW5kYXJkCkRSTSBj b3JlIGhlbHBlcnMsIHRoZSBjb2RlIGJ5cGFzc2VzIGF1eC0+aHdfbXV0ZXgsIGFsbG93aW5nIGNv bmN1cnJlbnQgQVVYCnRyYW5zYWN0aW9ucyBvbiB0aGUgYnVzLgoKWyAuLi4gXQoKPiBAQCAtODMx LDYgKzgzMSwxMCBAQCBzdGF0aWMgaW50IHNwYWNlbWl0X2RwX2xpbmtfdHJhaW5fY2xvY2tfcmVj b3Zlcnkoc3RydWN0IHNwYWNlbWl0X2RwX2RldiAqZHAsCj4gIAo+ICAJCWlmIChkcm1fZHBfY2xv Y2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGxhbmVzKSkKPiAgCQkJcmV0dXJuIDA7Cj4gIAo+ ICAJCXJldCA9IHNwYWNlbWl0X2RwX2xpbmtfYXBwbHlfYWRqdXN0KGRwLCBsaW5rX3N0YXR1cywg bGFuZXMsCj4gIAkJCQkJCSAgICB0cmFpbmluZ19zZXQpOwo+ICAJCWlmIChyZXQpIHsKPiAgCQkJ c3BhY2VtaXRfZHBfc2V0X3RyYWluaW5nX3BhdHRlcm4oZHAsCj4gIAkJCQlEUF9UUkFJTklOR19Q QVRURVJOX0RJU0FCTEUpOwo+ICAJCQlyZXR1cm4gcmV0Owo+ICAJCX0KCltTZXZlcml0eTogSGln aF0KQ291bGQgdGhpcyByZXR1cm4gdmFsdWUgY2hlY2sgY2F1c2UgbGluayB0cmFpbmluZyB0byBm YWlsPwoKZHJtX2RwX2RwY2Rfd3JpdGVfZGF0YSgpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRl cyB3cml0dGVuIG9uIHN1Y2Nlc3MKKGEgcG9zaXRpdmUgdmFsdWUpLiBTaW5jZSBzcGFjZW1pdF9k cF9saW5rX2FwcGx5X2FkanVzdCgpIHJldHVybnMgdGhhdCB2YWx1ZQpkaXJlY3RseSwgdGhpcyAi aWYgKHJldCkiIGNoZWNrIHdpbGwgZXZhbHVhdGUgdG8gdHJ1ZSBmb3Igc3VjY2Vzc2Z1bCB3cml0 ZXMuCgpUaGlzIGNhdXNlcyB0aGUgZHJpdmVyIHRvIGludGVycHJldCBzdWNjZXNzZnVsIERQQ0Qg d3JpdGVzIGFzIGZhaWx1cmVzIGFuZAppbW1lZGlhdGVseSBhYm9ydCB0aGUgdHJhaW5pbmcgc2Vx dWVuY2UuCgpbIC4uLiBdCgo+IEBAIC04NTQsNiArODU0LDEwIEBAIHN0YXRpYyBpbnQgc3BhY2Vt aXRfZHBfY29ubl9nZXRfZWRpZF9ibG9jayh2b2lkICpkYXRhLCB1OCAqYnVmLAo+ICAJCWZvciAo cmV0cnkgPSAwOyByZXRyeSA8IDM7IHJldHJ5KyspIHsKPiAgCQkJcmV0ID0gc3BhY2VtaXRfZHBf YXV4X2kyY193cml0ZShkcCwgRERDX0FERFIsCj4gIAkJCQkJCQkmZWRpZF9vZmZzZXQsIDEpOwo+ ICAJCQlpZiAocmV0KQo+ICAJCQkJY29udGludWU7Cj4gIAo+ICAJCQlyZXQgPSBzcGFjZW1pdF9k cF9hdXhfaTJjX3JlYWQoZHAsIEREQ19BRERSLAo+ICAJCQkJCQkgICAgICAgYnVmICsgb2Zmc2V0 LCBjaHVuayk7Cj4gIAkJCWlmICghcmV0KQo+ICAJCQkJYnJlYWs7CgpbU2V2ZXJpdHk6IEhpZ2hd CkNhbiBzcGxpdHRpbmcgdGhlIEVESUQgd3JpdGUgYW5kIHJlYWQgY2F1c2UgY29ycnVwdGVkIEVE SUQgcmVhZHM/CgpUaGUgSTJDIG9mZnNldCB3cml0ZSBhbmQgZGF0YSByZWFkIGFyZSBzcGxpdCBp bnRvIHR3byBzZXBhcmF0ZSB0cmFuc2FjdGlvbnMKd2l0aG91dCB0aGUgRFBfQVVYX0kyQ19NT1Qg KE1pZGRsZS1PZi1UcmFuc2FjdGlvbikgZmxhZy4KClRoaXMgZ2VuZXJhdGVzIGFuIEkyQyBTVE9Q IGNvbmRpdGlvbiBiZXR3ZWVuIHRoZW0sIHdoaWNoIGNhdXNlcyBtYW55IERQIHNpbmtzCnRvIHJl c2V0IHRoZWlyIGludGVybmFsIEVESUQgb2Zmc2V0IHRvIDAuCgpbIC4uLiBdCgo+IEBAIC05NTQs NiArOTU0LDkgQEAgc3RhdGljIHZvaWQgc3BhY2VtaXRfZHBfaHdfc2V0X21zYV9hbmRfZW5hYmxl X3ZpZGVvKHN0cnVjdCBzcGFjZW1pdF9kcF9kZXYgKmRwLAo+ICAKPiAgCS8qIG1vZGUtPmNsb2Nr IHVuaXQgaXMga0h6LCBmcCB1bml0IGlzIE1IeiAqLwo+ICAJaWYgKGRwLT51c2VfZXh0X3BpeGVs X2Nsb2NrKQo+ICAJCWZwID0gZHAtPnBpeGVsX2Nsb2NrIC8gMTAwMDsKPiAgCWVsc2UKPiAgCQlm cCA9IG1vZGUtPmNsb2NrIC8gMTAwMDsKPiAgCj4gIAlpZiAoZnAgPT0gMCkKCltTZXZlcml0eTog SGlnaF0KQ2FuIHRoaXMgaW50ZWdlciBkaXZpc2lvbiB0cnVuY2F0ZSBmcmFjdGlvbmFsIHBpeGVs IGNsb2Nrcz8KCklmIG1vZGUtPmNsb2NrIGlzIGEgZnJhY3Rpb25hbCB2YWx1ZSBsaWtlIDE0ODUw MCAoMTQ4LjUgTUh6KSwgZGl2aWRpbmcgYnkgMTAwMAp0cnVuY2F0ZXMgaXQgdG8gMTQ4LgoKVGhp cyBsb3NzIG9mIHByZWNpc2lvbiBza2V3cyB0aGUgc3Vic2VxdWVudCBEaXNwbGF5UG9ydCBUcmFu c2ZlciBVbml0ICh0dSkgYW5kCmhvcml6b250YWwgYmxhbmtpbmcgaW50ZXJ2YWwgKGhiX251bSkg Y2FsY3VsYXRpb25zLCB3aGljaCBjb3VsZCBjYXVzZSBkaXNwbGF5Cm91dHB1dCBjb3JydXB0aW9u IG9yIHZpZGVvIEZJRk8gdW5kZXJmbG93cy4KClsgLi4uIF0KCj4gQEAgLTE2NTAsNiArMTY1MCw5 IEBAIHN0YXRpYyBpbnQgc3BhY2VtaXRfZHBfYnJpZGdlX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlLAo+ICAKPiAgCS8qIE5vIGNhcHMgeWV0OiBsZWF2ZSBpZHggdW5zZXQg YW5kIGxldCAtPmF0b21pY19lbmFibGUoKSByZXRyeS4gKi8KPiAgCWlmICghZHAtPmxpbmsubWF4 X3JhdGUgfHwgIWRwLT5saW5rLm1heF9udW1fbGFuZXMpIHsKPiAgCQlzdC0+bGlua19jZmdfaWR4 ID0gLTE7Cj4gIAkJcmV0dXJuIDA7Cj4gIAl9Cj4gIAo+ICAJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoc3BhY2VtaXRfZHBfbGlua19wcmlvcml0eV90YWJsZSk7IGkrKykgewoKW1NldmVyaXR5 OiBNZWRpdW1dCklzIGl0IHNhZmUgdG8gcmVhZCBkcC0+bGluayBjYXBhYmlsaXRpZXMgaGVyZSB3 aXRob3V0IGhvbGRpbmcgZHAtPm1vZGVfbG9jaz8KClRoaXMgcmVhZCByYWNlcyB3aXRoIHNwYWNl bWl0X2RwX2JyaWRnZV9kZXRlY3QoKSwgd2hpY2ggdXBkYXRlcyB0aGVzZSBmaWVsZHMKZHVyaW5n IGEgaG90cGx1ZyBldmVudC4gQSBjb25jdXJyZW50IGhvdHBsdWcgY291bGQgY2F1c2UgdGhlIHZh bGlkYXRpb24gcGF0aAp0byBzZWUgdG9ybiBvciBpbmNvbnNpc3RlbnQgc2luayBjYXBhYmlsaXRp ZXMuCgpbIC4uLiBdCgo+IEBAIC0xNzc3LDYgKzE3NzcsMTAgQEAgc3RhdGljIGlycXJldHVybl90 IHNwYWNlbWl0X2RwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gIAo+ICAJLyoK PiAgCSAqIE9ubHkgY29tcGFyZSBoZXJlOiB0aGUgYXV0aG9yaXRhdGl2ZSBjb25uZWN0b3Jfc3Rh dHVzIHVwZGF0ZQo+ICAJICogaGFwcGVucyBpbiB0aGUgdGhyZWFkIHVuZGVyIG1vZGVfbG9jaywg dmlhIC5kZXRlY3QoKS4KPiAgCSAqLwo+ICAJaWYgKHNwYWNlbWl0X2RwX2h3X2RldGVjdF9ocGQo ZHApICE9IFJFQURfT05DRShkcC0+Y29ubmVjdG9yX3N0YXR1cykpCj4gIAkJcmV0ID0gSVJRX1dB S0VfVEhSRUFEOyAvKiBDYWxsIGhvdHBsdWdfZXZlbnQgKi8KPiAgCXNwYWNlbWl0X2RwX2h3X2Ns ZWFuX2hwZChkcCk7Cj4gIAo+ICAJZHJtX2Rldl9leGl0KGlkeCk7Cj4gIAlyZXR1cm4gcmV0Owo+ ICB9CgpbU2V2ZXJpdHk6IE1lZGl1bV0KU2hvdWxkIHRoaXMgcmV0dXJuIElSUV9IQU5ETEVEIHdo ZW4gaW50ZXJydXB0cyBhcmUgZXhwbGljaXRseSBjbGVhcmVkPwoKVGhlIGhhbmRsZXIgY2FsbHMg c3BhY2VtaXRfZHBfaHdfY2xlYW5faHBkKCksIHdoaWNoIHJlYWRzIGFuZCBjbGVhcnMgcGVuZGlu ZwpoYXJkd2FyZSBpbnRlcnJ1cHQgYml0cy4gSWYgdGhlIGN1cnJlbnQgSFBEIGxldmVsIG1hdGNo ZXMgdGhlIGNhY2hlZCBzdGF0ZQood2hpY2ggY2FuIGhhcHBlbiBkdXJpbmcgcGh5c2ljYWwgY29u dGFjdCBib3VuY2UpLCB0aGUgaGFuZGxlciByZXR1cm5zIElSUV9OT05FLgoKUmV0dXJuaW5nIElS UV9OT05FIGFmdGVyIHNlcnZpY2luZyBhbmQgY2xlYXJpbmcgYSBoYXJkd2FyZSBpbnRlcnJ1cHQg dmlvbGF0ZXMKdGhlIElSUSBBUEkgYW5kIGNhbiBjYXVzZSB0aGUga2VybmVsJ3Mgc3B1cmlvdXMg aW50ZXJydXB0IGRldGVjdG9yIHRvIHBlcm1hbmVudGx5CmRpc2FibGUgdGhlIERQIGludGVycnVw dCBsaW5lLgoKWyAuLi4gXQoKPiBAQCAtMjEyOSw2ICsyMTI5LDkgQEAgc3RhdGljIGludCBzcGFj ZW1pdF9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ ICAKPiAgCWRwLT5jb25uZWN0b3IgPSBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9pbml0KGRybSwgJmRw LT5lbmNvZGVyKTsKPiAgCWlmIChJU19FUlIoZHAtPmNvbm5lY3RvcikpIHsKPiAgCQlyZXQgPSBQ VFJfRVJSKGRwLT5jb25uZWN0b3IpOwo+ICAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQg YnJpZGdlIGNvbm5lY3RvcjogJWRcbiIsIHJldCk7Cj4gIAkJZ290byBlcnJfZW5jb2RlcjsKPiAg CX0KCltTZXZlcml0eTogSGlnaF0KRG9lcyB0aGlzIGluaXRpYWxpemUgdGhlIGNvbm5lY3RvciBi ZWZvcmUgdGhlIHBhbmVsIGJyaWRnZSBpcyBhdHRhY2hlZD8KCkZvciBlRFAsIHRoZSBkb3duc3Ry ZWFtIHBhbmVsIGJyaWRnZSBpcyBhdHRhY2hlZCBkeW5hbWljYWxseSBsYXRlciB2aWEgdGhlCmFz eW5jIHByb2JlIGNhbGxiYWNrIHNwYWNlbWl0X2RwX2VkcF9saW5rX3BhbmVsKCkuCgpDYWxsaW5n IGRybV9icmlkZ2VfY29ubmVjdG9yX2luaXQoKSBoZXJlIGJlZm9yZSB0aGUgcGFuZWwgaXMgYXR0 YWNoZWQgbWVhbnMKdGhlIGNvbm5lY3RvciBpcyBidWlsdCB3aXRob3V0IHRoZSBwYW5lbCdzIG1v ZGUtZ2V0dGluZyBmdW5jdGlvbiwgcmVzdWx0aW5nCmluIGl0IHJlcG9ydGluZyAwIG1vZGVzIHRv IHVzZXJzcGFjZS4KClsgLi4uIF0KCj4gQEAgLTIxNjAsNiArMjE2MCw5IEBAIHN0YXRpYyBpbnQg c3BhY2VtaXRfZHBfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKPiAgCXJldHVybiAwOwo+ICAKPiAgZXJyX2VuY29kZXI6Cj4gIAlkcm1fZW5jb2Rlcl9jbGVh bnVwKCZkcC0+ZW5jb2Rlcik7Cj4gIGVycl9hdXg6Cj4gIAlkcm1fZHBfYXV4X3VucmVnaXN0ZXIo JmRwLT5hdXgpOwo+ICAJcmV0dXJuIHJldDsKPiAgfQoKW1NldmVyaXR5OiBIaWdoXQpDYW4gdGhp cyBjbGVhbnVwIG9yZGVyIGNhdXNlIGEgdXNlLWFmdGVyLWZyZWU/Cgpkcm1fZW5jb2Rlcl9jbGVh bnVwKCkgaXMgY2FsbGVkIGJlZm9yZSBkcm1fZHBfYXV4X3VucmVnaXN0ZXIoKS4KClRoaXMgbGVh dmVzIGEgd2luZG93IHdoZXJlIHRoZSBlRFAgcGFuZWwncyBhc3luY2hyb25vdXMgZG9uZV9wcm9i aW5nIGNhbGxiYWNrCihzcGFjZW1pdF9kcF9lZHBfbGlua19wYW5lbCkgY2FuIHN0aWxsIGV4ZWN1 dGUuIEl0IHdpbGwgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZQpkcC0+YnJpZGdlLmVuY29kZXIgKHdo aWNoIGhhcyBiZWVuIHplcm9lZCBoZXJlKSBhbmQgdGhlIHBhcmVudCBEUk0gZGV2aWNlLApsZWFk aW5nIHRvIG1lbW9yeSBjb3JydXB0aW9uLgoKWyAuLi4gXQoKPiBAQCAtMjMyNyw2ICsyMzI3LDgg QEAgc3RhdGljIHZvaWQgaW5ub19kcF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+ICAJLyogQSBkZWZlcnJlZCBvciBmYWlsZWQgYmluZCBsZWF2ZXMgZHJ2ZGF0YSBOVUxM LiAqLwo+ICAJaWYgKCFkcCkKPiAgCQlyZXR1cm47Cj4gIAo+ICAJc3BhY2VtaXRfZHBfaHdfZGlz YWJsZShkcCk7Cj4gIH0KCltTZXZlcml0eTogTWVkaXVtXQpJcyBpdCBzYWZlIHRvIG1vZGlmeSBo YXJkd2FyZSByZWdpc3RlcnMgaGVyZSB3aXRob3V0IGFjcXVpcmluZyBkcC0+bW9kZV9sb2NrPwoK c3BhY2VtaXRfZHBfaHdfZGlzYWJsZSgpIG1vZGlmaWVzIG51bWVyb3VzIERQIGNvbmZpZ3VyYXRp b24gcmVnaXN0ZXJzLiBSdW5uaW5nCnRoaXMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93biB3aXRob3V0 IGhvbGRpbmcgdGhlIGxvY2sgYWxsb3dzIGl0IHRvIHJhY2Ugd2l0aApjb25jdXJyZW50IGF0b21p YyBtb2Rlc2V0cyBleGVjdXRlZCBieSB0aGUgRFJNIGNvcmUsIHBvdGVudGlhbGx5IGNhdXNpbmcK aGFyZHdhcmUgbG9ja3Vwcy4KCi0tIApTYXNoaWtvIEFJIHJldmlldyDCtyBodHRwczovL3Nhc2hp a28uZGV2LyMvcGF0Y2hzZXQvMjAyNjA3MjQtazMtZGlzcGxheS12MS0wLWYyMmExMGE1Mjg2N0Bn bWFpbC5jb20/cGFydD0xMgoKLS0gCmxpbnV4LXBoeSBtYWlsaW5nIGxpc3QKbGludXgtcGh5QGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cHM6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtcGh5Cg== 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 E4B02C531D0 for ; Sat, 25 Jul 2026 05:20:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 49A2D10F50F; Sat, 25 Jul 2026 05:20:54 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="UXRhN/e1"; dkim-atps=neutral Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6B1B310F513 for ; Sat, 25 Jul 2026 05:20:52 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 52E7341870; Sat, 25 Jul 2026 05:20:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BB3DA1F00A3A; Sat, 25 Jul 2026 05:20:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1784956852; bh=PXUXK/fDokeeNcb06VtOfelMGDGmgtUKXn+Cnmz51+U=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=UXRhN/e1ecuJZulJ9M4I2U+jsXkKyiG7vcUWffXmuTunvHa1RO8b4yVDJ0iGAdd9L FQ6j3aKjX3OL3sb/N9EFWXVHdp7ukX44+9Gz+x55CON7fx5Qz4LT/bIfxeKGN6iyTf Ocay9SV0yJYB2W4MmgNNHz1EsFmXDzthTzKQuCBrf6qlD1z83jtYN1sZu6N00CN57a UkNxtQXtGA/wq0RIXblN2RUne9bIlk0yJHJT8Ohz9ClNTuWAqzmjl+RxrGI3awF+2n 04D7rLiezJXRj2mtwEzG7jvXbcWBwsq4X17dt2JEPfFqFOBek4qGWTKedNMQHD2F+H gcuo50V1PsmMQ== From: sashiko-bot@kernel.org Subject: Re: [PATCH 12/17] drm/spacemit: add Innosilicon DP/eDP controller bridge driver To: "Cody Kang" Cc: vkoul@kernel.org, devicetree@vger.kernel.org, linux-phy@lists.infradead.org, olteanv@gmail.com, conor+dt@kernel.org, robh@kernel.org, dri-devel@lists.freedesktop.org, neil.armstrong@linaro.org In-Reply-To: <20260724-k3-display-v1-12-f22a10a52867@gmail.com> References: <20260724-k3-display-v1-0-f22a10a52867@gmail.com> <20260724-k3-display-v1-12-f22a10a52867@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Date: Sat, 25 Jul 2026 05:20:51 +0000 Message-Id: <20260725052051.BB3DA1F00A3A@smtp.kernel.org> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Thank you for your contribution! Sashiko AI review found 9 potential issue(= s) to consider: - [High] Missing W1C handling on DP_GENERAL_INTERRUPT causes unintentionall= y cleared interrupts. - [High] Late dynamic bridge attachment breaks `drm_bridge_connector_init` = for eDP panels, resulting in 0 modes. - [High] Custom EDID reading bypasses standard DRM core helpers and breaks = I2C MOT semantics. - [High] Integer truncation of the pixel clock causes inaccurate DisplayPor= t Transfer Unit (TU) and HBLANK calculations. - [High] Link training aborts prematurely because successful DPCD writes ar= e evaluated as errors. - [High] Asynchronous panel probe causes Use-After-Free due to improper unb= ind/error cleanup order. - [Medium] Returning IRQ_NONE after actively clearing pending hardware inte= rrupts violates the IRQ API. - [Medium] Sink capabilities are read concurrently without synchronization. - [Medium] Hardware shutdown sequence modifies registers without acquiring = `dp->mode_lock`. -- --- Patch [12]: [PATCH 12/17] drm/spacemit: add Innosilicon DP/eDP controll= er bridge driver --- commit 7a2976d5d6f50aaede0b18a3f5e99c3cb67bd5c1 Author: Cody Kang drm/spacemit: add Innosilicon DP/eDP controller bridge driver =20 Add the DP/eDP controller that sits downstream of the Saturn DPU. Two identical instances share one compatible; the eDP-vs-DP role is board wiring, so it is taken from the devicetree: an eDP panel always sits under an aux-bus child node, an external DP connector never does. =20 The link is driven through the generic PHY framework, so the controller never touches a PLL register. The controller's HPD interrupt is gated by the DP pixel clock, which can be off exactly when a plug has to be caught, so the connector is also polled and the interrupt path re-reads the live level when it does fire. > diff --git a/drivers/gpu/drm/spacemit/spacemit_inno_dp.c b/drivers/gpu/dr= m/spacemit/spacemit_inno_dp.c > index 0000000000000..e88731d9b18bf > --- /dev/null > +++ b/drivers/gpu/drm/spacemit/spacemit_inno_dp.c [ ... ] > @@ -290,6 +290,9 @@ static void spacemit_dp_aux_hw_reset(struct spacemit_= dp_dev *dp) > usleep_range(2000, 2500); > regmap_write_bits(dp->regs, DP_SOFT_RESET, DP_AUX_RESET, > FIELD_PREP(DP_AUX_RESET, 0x0)); > usleep_range(2000, 2500); > regmap_write_bits(dp->regs, DP_GENERAL_INTERRUPT, > DP_AUX_REPLY_EVENT_INT_STA, > FIELD_PREP(DP_AUX_REPLY_EVENT_INT_STA, 1)); > } [Severity: High] Does this unintentionally clear other pending interrupts? DP_GENERAL_INTERRUPT appears to be a write-1-to-clear register. Calling regmap_write_bits() performs a read-modify-write operation, which reads all currently asserted interrupt bits and writes them back as 1s. This drops any unrelated pending interrupts (such as HDCP, overflow events, and hotplugs) that arrived concurrently. [ ... ] > @@ -401,9 +401,12 @@ static ssize_t spacemit_dp_aux_transfer(struct drm_d= p_aux *aux, > regmap_read(dp->regs, DP_AUX_STS_REG, > &status); status =3D FIELD_GET(DP_AUX_STATUS, status); > =20 > /* Write 1 to clear. */ > regmap_write_bits(dp->regs, DP_GENERAL_INTERRUPT, > DP_AUX_REPLY_EVENT_INT_STA, > FIELD_PREP(DP_AUX_REPLY_EVENT_INT_STA, 1)); [Severity: High] Can this read-modify-write on a write-1-to-clear register silently drop other pending hardware interrupts that arrive during the AUX transfer? [ ... ] > @@ -806,6 +806,8 @@ static int spacemit_dp_aux_i2c_write(struct spacemit_= dp_dev *dp, u32 address, > .buffer =3D (u8 *)buf, > .size =3D len, > }; > int ret; > =20 > ret =3D spacemit_dp_aux_transfer(&dp->aux, &msg); > if (ret < 0) > return ret; [Severity: High] Does this custom I2C over AUX implementation bypass synchronization? By directly invoking spacemit_dp_aux_transfer() here rather than using stan= dard DRM core helpers, the code bypasses aux->hw_mutex, allowing concurrent AUX transactions on the bus. [ ... ] > @@ -831,6 +831,10 @@ static int spacemit_dp_link_train_clock_recovery(str= uct spacemit_dp_dev *dp, > =20 > if (drm_dp_clock_recovery_ok(link_status, lanes)) > return 0; > =20 > ret =3D spacemit_dp_link_apply_adjust(dp, link_status, lanes, > training_set); > if (ret) { > spacemit_dp_set_training_pattern(dp, > DP_TRAINING_PATTERN_DISABLE); > return ret; > } [Severity: High] Could this return value check cause link training to fail? drm_dp_dpcd_write_data() returns the number of bytes written on success (a positive value). Since spacemit_dp_link_apply_adjust() returns that value directly, this "if (ret)" check will evaluate to true for successful writes. This causes the driver to interpret successful DPCD writes as failures and immediately abort the training sequence. [ ... ] > @@ -854,6 +854,10 @@ static int spacemit_dp_conn_get_edid_block(void *dat= a, u8 *buf, > for (retry =3D 0; retry < 3; retry++) { > ret =3D spacemit_dp_aux_i2c_write(dp, DDC_ADDR, > &edid_offset, 1); > if (ret) > continue; > =20 > ret =3D spacemit_dp_aux_i2c_read(dp, DDC_ADDR, > buf + offset, chunk); > if (!ret) > break; [Severity: High] Can splitting the EDID write and read cause corrupted EDID reads? The I2C offset write and data read are split into two separate transactions without the DP_AUX_I2C_MOT (Middle-Of-Transaction) flag. This generates an I2C STOP condition between them, which causes many DP sin= ks to reset their internal EDID offset to 0. [ ... ] > @@ -954,6 +954,9 @@ static void spacemit_dp_hw_set_msa_and_enable_video(s= truct spacemit_dp_dev *dp, > =20 > /* mode->clock unit is kHz, fp unit is MHz */ > if (dp->use_ext_pixel_clock) > fp =3D dp->pixel_clock / 1000; > else > fp =3D mode->clock / 1000; > =20 > if (fp =3D=3D 0) [Severity: High] Can this integer division truncate fractional pixel clocks? If mode->clock is a fractional value like 148500 (148.5 MHz), dividing by 1= 000 truncates it to 148. This loss of precision skews the subsequent DisplayPort Transfer Unit (tu) = and horizontal blanking interval (hb_num) calculations, which could cause displ= ay output corruption or video FIFO underflows. [ ... ] > @@ -1650,6 +1650,9 @@ static int spacemit_dp_bridge_atomic_check(struct d= rm_bridge *bridge, > =20 > /* No caps yet: leave idx unset and let ->atomic_enable() retry. */ > if (!dp->link.max_rate || !dp->link.max_num_lanes) { > st->link_cfg_idx =3D -1; > return 0; > } > =20 > for (i =3D 0; i < ARRAY_SIZE(spacemit_dp_link_priority_table); i++) { [Severity: Medium] Is it safe to read dp->link capabilities here without holding dp->mode_lock? This read races with spacemit_dp_bridge_detect(), which updates these fields during a hotplug event. A concurrent hotplug could cause the validation path to see torn or inconsistent sink capabilities. [ ... ] > @@ -1777,6 +1777,10 @@ static irqreturn_t spacemit_dp_irq_handler(int irq= , void *data) > =20 > /* > * Only compare here: the authoritative connector_status update > * happens in the thread under mode_lock, via .detect(). > */ > if (spacemit_dp_hw_detect_hpd(dp) !=3D READ_ONCE(dp->connector_status)) > ret =3D IRQ_WAKE_THREAD; /* Call hotplug_event */ > spacemit_dp_hw_clean_hpd(dp); > =20 > drm_dev_exit(idx); > return ret; > } [Severity: Medium] Should this return IRQ_HANDLED when interrupts are explicitly cleared? The handler calls spacemit_dp_hw_clean_hpd(), which reads and clears pending hardware interrupt bits. If the current HPD level matches the cached state (which can happen during physical contact bounce), the handler returns IRQ_= NONE. Returning IRQ_NONE after servicing and clearing a hardware interrupt violat= es the IRQ API and can cause the kernel's spurious interrupt detector to perma= nently disable the DP interrupt line. [ ... ] > @@ -2129,6 +2129,9 @@ static int spacemit_dp_bind(struct device *dev, str= uct device *master, > =20 > dp->connector =3D drm_bridge_connector_init(drm, &dp->encoder); > if (IS_ERR(dp->connector)) { > ret =3D PTR_ERR(dp->connector); > dev_err(dev, "failed to init bridge connector: %d\n", ret); > goto err_encoder; > } [Severity: High] Does this initialize the connector before the panel bridge is attached? For eDP, the downstream panel bridge is attached dynamically later via the async probe callback spacemit_dp_edp_link_panel(). Calling drm_bridge_connector_init() here before the panel is attached means the connector is built without the panel's mode-getting function, resulting in it reporting 0 modes to userspace. [ ... ] > @@ -2160,6 +2160,9 @@ static int spacemit_dp_bind(struct device *dev, str= uct device *master, > return 0; > =20 > err_encoder: > drm_encoder_cleanup(&dp->encoder); > err_aux: > drm_dp_aux_unregister(&dp->aux); > return ret; > } [Severity: High] Can this cleanup order cause a use-after-free? drm_encoder_cleanup() is called before drm_dp_aux_unregister(). This leaves a window where the eDP panel's asynchronous done_probing callba= ck (spacemit_dp_edp_link_panel) can still execute. It will attempt to derefere= nce dp->bridge.encoder (which has been zeroed here) and the parent DRM device, leading to memory corruption. [ ... ] > @@ -2327,6 +2327,8 @@ static void inno_dp_shutdown(struct platform_device= *pdev) > /* A deferred or failed bind leaves drvdata NULL. */ > if (!dp) > return; > =20 > spacemit_dp_hw_disable(dp); > } [Severity: Medium] Is it safe to modify hardware registers here without acquiring dp->mode_loc= k? spacemit_dp_hw_disable() modifies numerous DP configuration registers. Runn= ing this during system shutdown without holding the lock allows it to race with concurrent atomic modesets executed by the DRM core, potentially causing hardware lockups. --=20 Sashiko AI review =C2=B7 https://sashiko.dev/#/patchset/20260724-k3-display= -v1-0-f22a10a52867@gmail.com?part=3D12