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 4493BCEACEF for ; Mon, 17 Nov 2025 01:34:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date: Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=OCoPxWh+b3eSvtYMRsNlQyefUpu6kD2yKDCWJQ7xR74=; b=bzC6Bl3riPMBDlKAvFHLbSzviJ 2nv3lFr9wPtgxDhD/Cy0HruC2IfTdEYUeTi1G/eb2Z9U8Hd7LFdWKdv09FqE/QMYfLD0l+z1Ti4cD j/8vXF8DQ/+JlA921CXnUQlHdRtPoHCP9Lcoy7TxjShbbINlQ7rRkONAUquWg6v9eKYTsaECM8TkW y45jlQlW5Rjnjo19iu9p3vF5/tQlCCRQ7/CmspC6HIMY9OWeMkQdfZkKWnsiPO4CceDmpt2W6VGY/ sbsUrCCeSTJCONOppznHeUabs9dsT490+/Y6huk0R4LfTrFbs6ZjT/lPVgRHNAIwenur0Wg2TFiOl iWat4j/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vKo8F-0000000FGaP-13bO; Mon, 17 Nov 2025 01:34:15 +0000 Received: from mail-m3276.qiye.163.com ([220.197.32.76]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vKo8B-0000000FGZc-2URM; Mon, 17 Nov 2025 01:34:13 +0000 Received: from [172.16.12.51] (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 29c3ce0df; Mon, 17 Nov 2025 09:33:59 +0800 (GMT+08:00) Message-ID: <2ebace6f-d3c4-4516-b6cb-4951de06b6c8@rock-chips.com> Date: Mon, 17 Nov 2025 09:33:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 08/10] drm/rockchip: cdn-dp: Add multiple bridges to support PHY port selection To: Luca Ceresoli , Chaoyi Chen , Heikki Krogerus , Greg Kroah-Hartman , Dmitry Baryshkov , Peter Chen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Dragan Simic , Johan Jonker , Diederik de Haas , Peter Robinson Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org References: <20251111105040.94-1-kernel@airkyi.com> <20251111105040.94-9-kernel@airkyi.com> Content-Language: en-US From: Chaoyi Chen In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-HM-Tid: 0a9a8f728a9203abkunm7f35530083703a X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGktOGlYYQ04fHUlKSkhNGEhWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSEpPSE xVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=M0Whx/IN7vzwWpGNPYw1m+tNCPRjv3SM+gdWc+WtuhKETcY7rThZlrCaxI2fAlhI3391csTS8ehibRh6ex51cQ/r+4YXK3tXX6w3wypz7DSxUZKNiakt6+eBek5O66Hvb28jfRZ1ZP/4biJPialEUbDiHj1QrwZ1mtTGsdG5MX8=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=OCoPxWh+b3eSvtYMRsNlQyefUpu6kD2yKDCWJQ7xR74=; h=date:mime-version:subject:message-id:from; X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251116_173412_182601_E48EE44C X-CRM114-Status: GOOD ( 34.94 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Luca, On 11/12/2025 9:37 AM, Chaoyi Chen wrote: > Hello Luca, > > On 11/11/2025 11:14 PM, Luca Ceresoli wrote: >> Hello Chaoyi, >> >> On Tue Nov 11, 2025 at 11:50 AM CET, Chaoyi Chen wrote: >>> From: Chaoyi Chen >>> >>> The RK3399 has two USB/DP combo PHY and one CDN-DP controller. And >>> the CDN-DP can be switched to output to one of the PHYs. If both ports >>> are plugged into DP, DP will select the first port for output. >>> >>> This patch adds support for multiple bridges, enabling users to flexibly >>> select the output port. For each PHY port, a separate encoder and bridge >>> are registered. >>> >>> The change is based on the DRM AUX HPD bridge, rather than the >>> extcon approach. This requires the DT to correctly describe the >>> connections between the first bridge in bridge chain and DP >>> controller. For example, the bridge chain may be like this: >>> >>> PHY aux birdge -> fsa4480 analog audio switch bridge -> >>> onnn,nb7vpq904m USB reminder bridge -> USB-C controller AUX HPD bridge >>> >>> In this case, the connection relationships among the PHY aux bridge >>> and the DP contorller need to be described in DT. >>> >>> In addition, the cdn_dp_parse_next_bridge_dt() will parses it and >>> determines whether to register one or two bridges. >>> >>> Since there is only one DP controller, only one of the PHY ports can >>> output at a time. The key is how to switch between different PHYs, >>> which is handled by cdn_dp_switch_port() and cdn_dp_enable(). >>> >>> There are two cases: >>> >>> 1. Neither bridge is enabled. In this case, both bridges can >>> independently read the EDID, and the PHY port may switch before >>> reading the EDID. >>> >>> 2. One bridge is already enabled. In this case, other bridges are not >>> allowed to read the EDID. So we will try to return the cached EDID. >>> >>> Since the scenario of two ports plug in at the same time is rare, >>> I don't have a board which support two TypeC connector to test this. >>> Therefore, I tested forced switching on a single PHY port, as well as >>> output using a fake PHY port alongside a real PHY port. >>> >>> Signed-off-by: Chaoyi Chen >> [...] >> >>> @@ -966,28 +1084,16 @@ static int cdn_dp_pd_event(struct notifier_block *nb, >>>       return NOTIFY_DONE; >>>   } >>> >>> -static int cdn_dp_bind(struct device *dev, struct device *master, void *data) >>> +static int cdn_bridge_add(struct device *dev, >>> +              struct drm_bridge *bridge, >>> +              struct drm_bridge *next_bridge, >>> +              struct drm_encoder *encoder) >>>   { >>>       struct cdn_dp_device *dp = dev_get_drvdata(dev); >>> -    struct drm_encoder *encoder; >>> +    struct drm_device *drm_dev = dp->drm_dev; >>> +    struct drm_bridge *last_bridge = NULL; >>>       struct drm_connector *connector; >>> -    struct cdn_dp_port *port; >>> -    struct drm_device *drm_dev = data; >>> -    int ret, i; >> [...] >> >>> +    if (next_bridge) { >>> +        ret = drm_bridge_attach(encoder, next_bridge, bridge, >>> +                    DRM_BRIDGE_ATTACH_NO_CONNECTOR); >>> +        if (ret) >>> +            return ret; >>> + >>> +        last_bridge = next_bridge; >>> +        while (drm_bridge_get_next_bridge(last_bridge)) >>> +            last_bridge = drm_bridge_get_next_bridge(last_bridge); >> DRM bridges are now refcounted, and you are not calling drm_bridge_get() >> and drm_bridge_put() here. But here you can use >> drm_bridge_chain_get_last_bridge() which will simplify your job. >> >> Don't forget to call drm_bridge_put() on the returned bridge when the >> bridge is not referenced anymore. This should be as easy as adding a >> cleanup action on the variable declaration above: >> >> -    struct drm_bridge *last_bridge = NULL; >> +    struct drm_bridge *last_bridge __free(drm_bridge_put) = NULL; > > Ah, I have seen your patch about this. Thank you for the reminder, I will fix this in v10. > >> >>> @@ -1029,8 +1147,102 @@ static int cdn_dp_bind(struct device *dev, struct device *master, void *data) >>>           return ret; >>>       } >>> >>> +    if (last_bridge) >>> +        connector->fwnode = fwnode_handle_get(of_fwnode_handle(last_bridge->of_node)); >>> + >>>       drm_connector_attach_encoder(connector, encoder); >>> >>> +    return 0; >>> +} >>> + >>> +static int cdn_dp_parse_next_bridge_dt(struct cdn_dp_device *dp) >>> +{ >>> +    struct device_node *np = dp->dev->of_node; >>> +    struct device_node *port __free(device_node) = of_graph_get_port_by_id(np, 1); >>> +    struct drm_bridge *bridge; >>> +    int count = 0; >>> +    int ret = 0; >>> +    int i; >>> + >>> +    /* If device use extcon, do not use hpd bridge */ >>> +    for (i = 0; i < dp->ports; i++) { >>> +        if (dp->port[i]->extcon) { >>> +            dp->bridge_count = 1; >>> +            return 0; >>> +        } >>> +    } >>> + >>> + >>> +    /* One endpoint may correspond to one next bridge. */ >>> +    for_each_of_graph_port_endpoint(port, dp_ep) { >>> +        struct device_node *next_bridge_node __free(device_node) = >>> +            of_graph_get_remote_port_parent(dp_ep); >>> + >>> +        bridge = of_drm_find_bridge(next_bridge_node); >>> +        if (!bridge) { >>> +            ret = -EPROBE_DEFER; >>> +            goto out; >>> +        } >>> + >>> +        dp->next_bridge_valid = true; >>> +        dp->next_bridge_list[count].bridge = bridge; >> You are storing a reference to a drm_bridge, so have to increment the >> refcount: >> >>         dp->next_bridge_list[count].bridge = drm_bridge_get(bridge); >>                                              ^^^^^^^^^^^^^^ >> >> FYI there is a plan to replace of_drm_find_bridge() with a function that >> increases the bridge refcount before returning the bridge, but it's not >> there yet. When that will happen, the explicit drm_bridge_get() won't be >> needed anymore and this code can be updated accordingly. Out of curiosity, I checked the callers of of_drm_find_bridge(), and it seems that the vast majority of them do not pay attention to the increase or decrease of reference counts. Does this mean that even if we add reference counting in of_drm_find_bridge(), we still need to modify the corresponding functions of their callers and decrease the reference count at the appropriate time? Thank you. >> >> Also you have to call drm_bridge_put() to release that reference when the >> pointer goes away. I guess that should happen in cdn_dp_unbind(). > > You're right, this is indeed a pitfall. I will fix it in v10. > > -- Best, Chaoyi 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 F161ACCD19A for ; Mon, 17 Nov 2025 01:34:14 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KgdRVg5IOPm5oGefv1lTki/Fd9JWclEB0PyVJx9wD0U=; b=x/3ja8N4Ui9lcZ Fu/NRHYzjlsiojMD6ERQaNWgm1K1jy26Hnt2DMmoISjZ43Wd5kYhGh/ppCe1SYJEc0n7aM9LQzzV9 ow6ZtMtfPCFIWyjzNqrAPHMXScYJVl/grKijqXd8cYN7wHxjz8fR/QpIPj+kxu+Bkd5XQmT0Uwpu3 yR9mjDHsosJav/vji1FXHFAAoCxYVGp+h/mqsVwpLFntB9+6Aj+hl8/vlv5+ATxBEEtBTgHJjfQJf v+1GalQ7VIyvEMbWqO8I/doAaMFUSCwYXsGdIQ5enW0oKeGKl2KpXWo3RzUTnTcUMqUiWNJz6PCib mm744ma8sTEWamD+ZQfg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vKo8E-0000000FGaA-2Cye; Mon, 17 Nov 2025 01:34:14 +0000 Received: from mail-m3276.qiye.163.com ([220.197.32.76]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vKo8B-0000000FGZc-2URM; Mon, 17 Nov 2025 01:34:13 +0000 Received: from [172.16.12.51] (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 29c3ce0df; Mon, 17 Nov 2025 09:33:59 +0800 (GMT+08:00) Message-ID: <2ebace6f-d3c4-4516-b6cb-4951de06b6c8@rock-chips.com> Date: Mon, 17 Nov 2025 09:33:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 08/10] drm/rockchip: cdn-dp: Add multiple bridges to support PHY port selection To: Luca Ceresoli , Chaoyi Chen , Heikki Krogerus , Greg Kroah-Hartman , Dmitry Baryshkov , Peter Chen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Dragan Simic , Johan Jonker , Diederik de Haas , Peter Robinson Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org References: <20251111105040.94-1-kernel@airkyi.com> <20251111105040.94-9-kernel@airkyi.com> Content-Language: en-US From: Chaoyi Chen In-Reply-To: X-HM-Tid: 0a9a8f728a9203abkunm7f35530083703a X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGktOGlYYQ04fHUlKSkhNGEhWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSEpPSE xVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=M0Whx/IN7vzwWpGNPYw1m+tNCPRjv3SM+gdWc+WtuhKETcY7rThZlrCaxI2fAlhI3391csTS8ehibRh6ex51cQ/r+4YXK3tXX6w3wypz7DSxUZKNiakt6+eBek5O66Hvb28jfRZ1ZP/4biJPialEUbDiHj1QrwZ1mtTGsdG5MX8=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=OCoPxWh+b3eSvtYMRsNlQyefUpu6kD2yKDCWJQ7xR74=; h=date:mime-version:subject:message-id:from; X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251116_173412_182601_E48EE44C X-CRM114-Status: GOOD ( 34.94 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org SGkgTHVjYSwKCk9uIDExLzEyLzIwMjUgOTozNyBBTSwgQ2hhb3lpIENoZW4gd3JvdGU6Cj4gSGVs bG8gTHVjYSwKPgo+IE9uIDExLzExLzIwMjUgMTE6MTQgUE0sIEx1Y2EgQ2VyZXNvbGkgd3JvdGU6 Cj4+IEhlbGxvIENoYW95aSwKPj4KPj4gT24gVHVlIE5vdiAxMSwgMjAyNSBhdCAxMTo1MCBBTSBD RVQsIENoYW95aSBDaGVuIHdyb3RlOgo+Pj4gRnJvbTogQ2hhb3lpIENoZW4gPGNoYW95aS5jaGVu QHJvY2stY2hpcHMuY29tPgo+Pj4KPj4+IFRoZSBSSzMzOTkgaGFzIHR3byBVU0IvRFAgY29tYm8g UEhZIGFuZCBvbmUgQ0ROLURQIGNvbnRyb2xsZXIuIEFuZAo+Pj4gdGhlIENETi1EUCBjYW4gYmUg c3dpdGNoZWQgdG8gb3V0cHV0IHRvIG9uZSBvZiB0aGUgUEhZcy4gSWYgYm90aCBwb3J0cwo+Pj4g YXJlIHBsdWdnZWQgaW50byBEUCwgRFAgd2lsbCBzZWxlY3QgdGhlIGZpcnN0IHBvcnQgZm9yIG91 dHB1dC4KPj4+Cj4+PiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgYnJpZGdl cywgZW5hYmxpbmcgdXNlcnMgdG8gZmxleGlibHkKPj4+IHNlbGVjdCB0aGUgb3V0cHV0IHBvcnQu IEZvciBlYWNoIFBIWSBwb3J0LCBhIHNlcGFyYXRlIGVuY29kZXIgYW5kIGJyaWRnZQo+Pj4gYXJl IHJlZ2lzdGVyZWQuCj4+Pgo+Pj4gVGhlIGNoYW5nZSBpcyBiYXNlZCBvbiB0aGUgRFJNIEFVWCBI UEQgYnJpZGdlLCByYXRoZXIgdGhhbiB0aGUKPj4+IGV4dGNvbiBhcHByb2FjaC4gVGhpcyByZXF1 aXJlcyB0aGUgRFQgdG8gY29ycmVjdGx5IGRlc2NyaWJlIHRoZQo+Pj4gY29ubmVjdGlvbnMgYmV0 d2VlbiB0aGUgZmlyc3QgYnJpZGdlIGluIGJyaWRnZSBjaGFpbiBhbmQgRFAKPj4+IGNvbnRyb2xs ZXIuIEZvciBleGFtcGxlLCB0aGUgYnJpZGdlIGNoYWluIG1heSBiZSBsaWtlIHRoaXM6Cj4+Pgo+ Pj4gUEhZIGF1eCBiaXJkZ2UgLT4gZnNhNDQ4MCBhbmFsb2cgYXVkaW8gc3dpdGNoIGJyaWRnZSAt Pgo+Pj4gb25ubixuYjd2cHE5MDRtIFVTQiByZW1pbmRlciBicmlkZ2UgLT4gVVNCLUMgY29udHJv bGxlciBBVVggSFBEIGJyaWRnZQo+Pj4KPj4+IEluIHRoaXMgY2FzZSwgdGhlIGNvbm5lY3Rpb24g cmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgUEhZIGF1eCBicmlkZ2UKPj4+IGFuZCB0aGUgRFAgY29u dG9ybGxlciBuZWVkIHRvIGJlIGRlc2NyaWJlZCBpbiBEVC4KPj4+Cj4+PiBJbiBhZGRpdGlvbiwg dGhlIGNkbl9kcF9wYXJzZV9uZXh0X2JyaWRnZV9kdCgpIHdpbGwgcGFyc2VzIGl0IGFuZAo+Pj4g ZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlZ2lzdGVyIG9uZSBvciB0d28gYnJpZGdlcy4KPj4+Cj4+ PiBTaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBEUCBjb250cm9sbGVyLCBvbmx5IG9uZSBvZiB0aGUg UEhZIHBvcnRzIGNhbgo+Pj4gb3V0cHV0IGF0IGEgdGltZS4gVGhlIGtleSBpcyBob3cgdG8gc3dp dGNoIGJldHdlZW4gZGlmZmVyZW50IFBIWXMsCj4+PiB3aGljaCBpcyBoYW5kbGVkIGJ5IGNkbl9k cF9zd2l0Y2hfcG9ydCgpIGFuZCBjZG5fZHBfZW5hYmxlKCkuCj4+Pgo+Pj4gVGhlcmUgYXJlIHR3 byBjYXNlczoKPj4+Cj4+PiAxLiBOZWl0aGVyIGJyaWRnZSBpcyBlbmFibGVkLiBJbiB0aGlzIGNh c2UsIGJvdGggYnJpZGdlcyBjYW4KPj4+IGluZGVwZW5kZW50bHkgcmVhZCB0aGUgRURJRCwgYW5k IHRoZSBQSFkgcG9ydCBtYXkgc3dpdGNoIGJlZm9yZQo+Pj4gcmVhZGluZyB0aGUgRURJRC4KPj4+ Cj4+PiAyLiBPbmUgYnJpZGdlIGlzIGFscmVhZHkgZW5hYmxlZC4gSW4gdGhpcyBjYXNlLCBvdGhl ciBicmlkZ2VzIGFyZSBub3QKPj4+IGFsbG93ZWQgdG8gcmVhZCB0aGUgRURJRC4gU28gd2Ugd2ls bCB0cnkgdG8gcmV0dXJuIHRoZSBjYWNoZWQgRURJRC4KPj4+Cj4+PiBTaW5jZSB0aGUgc2NlbmFy aW8gb2YgdHdvIHBvcnRzIHBsdWcgaW4gYXQgdGhlIHNhbWUgdGltZSBpcyByYXJlLAo+Pj4gSSBk b24ndCBoYXZlIGEgYm9hcmQgd2hpY2ggc3VwcG9ydCB0d28gVHlwZUMgY29ubmVjdG9yIHRvIHRl c3QgdGhpcy4KPj4+IFRoZXJlZm9yZSwgSSB0ZXN0ZWQgZm9yY2VkIHN3aXRjaGluZyBvbiBhIHNp bmdsZSBQSFkgcG9ydCwgYXMgd2VsbCBhcwo+Pj4gb3V0cHV0IHVzaW5nIGEgZmFrZSBQSFkgcG9y dCBhbG9uZ3NpZGUgYSByZWFsIFBIWSBwb3J0Lgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IENoYW95 aSBDaGVuIDxjaGFveWkuY2hlbkByb2NrLWNoaXBzLmNvbT4KPj4gWy4uLl0KPj4KPj4+IEBAIC05 NjYsMjggKzEwODQsMTYgQEAgc3RhdGljIGludCBjZG5fZHBfcGRfZXZlbnQoc3RydWN0IG5vdGlm aWVyX2Jsb2NrICpuYiwKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIE5PVElGWV9ET05FOwo+Pj4gwqAg fQo+Pj4KPj4+IC1zdGF0aWMgaW50IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQo+Pj4gK3N0YXRpYyBpbnQgY2RuX2JyaWRn ZV9hZGQoc3RydWN0IGRldmljZSAqZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9icmlkZ2UgKm5leHRfYnJpZGdlLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPj4+IMKgIHsKPj4+IMKgwqDC oMKgwqAgc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ PiAtwqDCoMKgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPj4+ICvCoMKgwqAgc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkcC0+ZHJtX2RldjsKPj4+ICvCoMKgwqAgc3RydWN0IGRy bV9icmlkZ2UgKmxhc3RfYnJpZGdlID0gTlVMTDsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKPj4+IC3CoMKgwqAgc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0 Owo+Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7Cj4+PiAtwqDC oMKgIGludCByZXQsIGk7Cj4+IFsuLi5dCj4+Cj4+PiArwqDCoMKgIGlmIChuZXh0X2JyaWRnZSkg ewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsIG5l eHRfYnJpZGdlLCBicmlkZ2UsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRFJNX0JSSURHRV9BVFRBQ0hfTk9fQ09OTkVDVE9SKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocmV0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBsYXN0X2JyaWRnZSA9IG5leHRfYnJpZGdlOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIHdoaWxlIChkcm1fYnJpZGdlX2dldF9uZXh0X2JyaWRnZShsYXN0X2JyaWRnZSkp Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYXN0X2JyaWRnZSA9IGRybV9icmlkZ2VfZ2V0 X25leHRfYnJpZGdlKGxhc3RfYnJpZGdlKTsKPj4gRFJNIGJyaWRnZXMgYXJlIG5vdyByZWZjb3Vu dGVkLCBhbmQgeW91IGFyZSBub3QgY2FsbGluZyBkcm1fYnJpZGdlX2dldCgpCj4+IGFuZCBkcm1f YnJpZGdlX3B1dCgpIGhlcmUuIEJ1dCBoZXJlIHlvdSBjYW4gdXNlCj4+IGRybV9icmlkZ2VfY2hh aW5fZ2V0X2xhc3RfYnJpZGdlKCkgd2hpY2ggd2lsbCBzaW1wbGlmeSB5b3VyIGpvYi4KPj4KPj4g RG9uJ3QgZm9yZ2V0IHRvIGNhbGwgZHJtX2JyaWRnZV9wdXQoKSBvbiB0aGUgcmV0dXJuZWQgYnJp ZGdlIHdoZW4gdGhlCj4+IGJyaWRnZSBpcyBub3QgcmVmZXJlbmNlZCBhbnltb3JlLiBUaGlzIHNo b3VsZCBiZSBhcyBlYXN5IGFzIGFkZGluZyBhCj4+IGNsZWFudXAgYWN0aW9uIG9uIHRoZSB2YXJp YWJsZSBkZWNsYXJhdGlvbiBhYm92ZToKPj4KPj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2JyaWRnZSAq bGFzdF9icmlkZ2UgPSBOVUxMOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1fYnJpZGdlICpsYXN0X2Jy aWRnZSBfX2ZyZWUoZHJtX2JyaWRnZV9wdXQpID0gTlVMTDsKPgo+IEFoLCBJIGhhdmUgc2VlbiB5 b3VyIHBhdGNoIGFib3V0IHRoaXMuIFRoYW5rIHlvdSBmb3IgdGhlIHJlbWluZGVyLCBJIHdpbGwg Zml4IHRoaXMgaW4gdjEwLgo+Cj4+Cj4+PiBAQCAtMTAyOSw4ICsxMTQ3LDEwMiBAQCBzdGF0aWMg aW50IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVy LCB2b2lkICpkYXRhKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiDCoMKg wqDCoMKgIH0KPj4+Cj4+PiArwqDCoMKgIGlmIChsYXN0X2JyaWRnZSkKPj4+ICvCoMKgwqDCoMKg wqDCoCBjb25uZWN0b3ItPmZ3bm9kZSA9IGZ3bm9kZV9oYW5kbGVfZ2V0KG9mX2Z3bm9kZV9oYW5k bGUobGFzdF9icmlkZ2UtPm9mX25vZGUpKTsKPj4+ICsKPj4+IMKgwqDCoMKgwqAgZHJtX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwo+Pj4KPj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgY2RuX2RwX3BhcnNlX25leHRf YnJpZGdlX2R0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkcC0+ZGV2LT5vZl9ub2RlOwo+Pj4gK8KgwqDCoCBzdHJ1 Y3QgZGV2aWNlX25vZGUgKnBvcnQgX19mcmVlKGRldmljZV9ub2RlKSA9IG9mX2dyYXBoX2dldF9w b3J0X2J5X2lkKG5wLCAxKTsKPj4+ICvCoMKgwqAgc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsK Pj4+ICvCoMKgwqAgaW50IGNvdW50ID0gMDsKPj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+PiAr wqDCoMKgIGludCBpOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBJZiBkZXZpY2UgdXNlIGV4dGNvbiwg ZG8gbm90IHVzZSBocGQgYnJpZGdlICovCj4+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBkcC0+ cG9ydHM7IGkrKykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkcC0+cG9ydFtpXS0+ZXh0Y29u KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcC0+YnJpZGdlX2NvdW50ID0gMTsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0K Pj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBPbmUgZW5kcG9pbnQgbWF5 IGNvcnJlc3BvbmQgdG8gb25lIG5leHQgYnJpZGdlLiAqLwo+Pj4gK8KgwqDCoCBmb3JfZWFjaF9v Zl9ncmFwaF9wb3J0X2VuZHBvaW50KHBvcnQsIGRwX2VwKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRldmljZV9ub2RlICpuZXh0X2JyaWRnZV9ub2RlIF9fZnJlZShkZXZpY2Vfbm9kZSkg PQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3Bh cmVudChkcF9lcCk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgYnJpZGdlID0gb2ZfZHJtX2Zp bmRfYnJpZGdlKG5leHRfYnJpZGdlX25vZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghYnJp ZGdlKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRVBST0JFX0RFRkVSOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAg fQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRwLT5uZXh0X2JyaWRnZV92YWxpZCA9IHRydWU7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgZHAtPm5leHRfYnJpZGdlX2xpc3RbY291bnRdLmJyaWRnZSA9 IGJyaWRnZTsKPj4gWW91IGFyZSBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGEgZHJtX2JyaWRnZSwg c28gaGF2ZSB0byBpbmNyZW1lbnQgdGhlCj4+IHJlZmNvdW50Ogo+Pgo+PiDCoMKgwqDCoMKgwqDC oCBkcC0+bmV4dF9icmlkZ2VfbGlzdFtjb3VudF0uYnJpZGdlID0gZHJtX2JyaWRnZV9nZXQoYnJp ZGdlKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBeXl5eXl5eXl5eXl5eXgo+ Pgo+PiBGWUkgdGhlcmUgaXMgYSBwbGFuIHRvIHJlcGxhY2Ugb2ZfZHJtX2ZpbmRfYnJpZGdlKCkg d2l0aCBhIGZ1bmN0aW9uIHRoYXQKPj4gaW5jcmVhc2VzIHRoZSBicmlkZ2UgcmVmY291bnQgYmVm b3JlIHJldHVybmluZyB0aGUgYnJpZGdlLCBidXQgaXQncyBub3QKPj4gdGhlcmUgeWV0LiBXaGVu IHRoYXQgd2lsbCBoYXBwZW4sIHRoZSBleHBsaWNpdCBkcm1fYnJpZGdlX2dldCgpIHdvbid0IGJl Cj4+IG5lZWRlZCBhbnltb3JlIGFuZCB0aGlzIGNvZGUgY2FuIGJlIHVwZGF0ZWQgYWNjb3JkaW5n bHkuCgpPdXQgb2YgY3VyaW9zaXR5LCBJIGNoZWNrZWQgdGhlIGNhbGxlcnMgb2Ygb2ZfZHJtX2Zp bmRfYnJpZGdlKCksIGFuZCBpdCBzZWVtcyB0aGF0IHRoZSB2YXN0IG1ham9yaXR5IG9mIHRoZW0g ZG8gbm90IHBheSBhdHRlbnRpb24gdG8gdGhlIGluY3JlYXNlIG9yIGRlY3JlYXNlIG9mIHJlZmVy ZW5jZSBjb3VudHMuIERvZXMgdGhpcyBtZWFuIHRoYXQgZXZlbiBpZiB3ZSBhZGQgcmVmZXJlbmNl IGNvdW50aW5nIGluIG9mX2RybV9maW5kX2JyaWRnZSgpLCB3ZSBzdGlsbCBuZWVkIHRvIG1vZGlm eSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgb2YgdGhlaXIgY2FsbGVycyBhbmQgZGVjcmVh c2UgdGhlIHJlZmVyZW5jZSBjb3VudCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZT8gVGhhbmsgeW91 LgoKCj4+Cj4+IEFsc28geW91IGhhdmUgdG8gY2FsbCBkcm1fYnJpZGdlX3B1dCgpIHRvIHJlbGVh c2UgdGhhdCByZWZlcmVuY2Ugd2hlbiB0aGUKPj4gcG9pbnRlciBnb2VzIGF3YXkuIEkgZ3Vlc3Mg dGhhdCBzaG91bGQgaGFwcGVuIGluIGNkbl9kcF91bmJpbmQoKS4KPgo+IFlvdSdyZSByaWdodCwg dGhpcyBpcyBpbmRlZWQgYSBwaXRmYWxsLiBJIHdpbGwgZml4IGl0IGluIHYxMC4KPgo+Ci0tIApC ZXN0LApDaGFveWkKCgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1waHkK 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 DA673CCD19A for ; Mon, 17 Nov 2025 01:34:20 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CaaLn9zqmDGZaMrPbDh7SkbylNKpCLIaPav+QPvapPM=; b=KgytP3ndSUVN5B 9IAOqMgsJ2LQawowdfwQpwVRcCkr4HBiYdlhwiOrIzDCPegtsfHKp69aRIAHcanFb9SJjtFDOlCsy KZtkhnKfHEMste4bFYiNUQwMxqFn8Ux+PjF31ZZzkNTTqi7Jjt3XuOj1xJOkLYkE6jEaf4SR29BAD VcV8Wf2h0kpipsmZvp+utX3O78tZNwMNR0w9Qp0oAs8GRPPp18PJw7xzo5Be8S2voZcuOvPaPtRTV E0n2CJ928a0LUFx2j8K2BBzaekCcsOIiVPEih61fvcK/lVkPhD7St+8qu6OW/ceOsoCiow8hcO3Zd KJRmnf2ioB2/+UHG+84w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vKo8E-0000000FGaH-3XAy; Mon, 17 Nov 2025 01:34:14 +0000 Received: from mail-m3276.qiye.163.com ([220.197.32.76]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vKo8B-0000000FGZc-2URM; Mon, 17 Nov 2025 01:34:13 +0000 Received: from [172.16.12.51] (unknown [58.22.7.114]) by smtp.qiye.163.com (Hmail) with ESMTP id 29c3ce0df; Mon, 17 Nov 2025 09:33:59 +0800 (GMT+08:00) Message-ID: <2ebace6f-d3c4-4516-b6cb-4951de06b6c8@rock-chips.com> Date: Mon, 17 Nov 2025 09:33:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 08/10] drm/rockchip: cdn-dp: Add multiple bridges to support PHY port selection To: Luca Ceresoli , Chaoyi Chen , Heikki Krogerus , Greg Kroah-Hartman , Dmitry Baryshkov , Peter Chen , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Vinod Koul , Kishon Vijay Abraham I , Heiko Stuebner , Sandy Huang , Andy Yan , Yubing Zhang , Frank Wang , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Amit Sunil Dhamne , Dragan Simic , Johan Jonker , Diederik de Haas , Peter Robinson Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, dri-devel@lists.freedesktop.org References: <20251111105040.94-1-kernel@airkyi.com> <20251111105040.94-9-kernel@airkyi.com> Content-Language: en-US From: Chaoyi Chen In-Reply-To: X-HM-Tid: 0a9a8f728a9203abkunm7f35530083703a X-HM-MType: 1 X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGktOGlYYQ04fHUlKSkhNGEhWFRQJFh oXVRMBExYaEhckFA4PWVdZGBILWUFZTkNVSUlVTFVKSk9ZV1kWGg8SFR0UWUFZT0tIVUpLSEpPSE xVSktLVUpCS0tZBg++ DKIM-Signature: a=rsa-sha256; b=M0Whx/IN7vzwWpGNPYw1m+tNCPRjv3SM+gdWc+WtuhKETcY7rThZlrCaxI2fAlhI3391csTS8ehibRh6ex51cQ/r+4YXK3tXX6w3wypz7DSxUZKNiakt6+eBek5O66Hvb28jfRZ1ZP/4biJPialEUbDiHj1QrwZ1mtTGsdG5MX8=; c=relaxed/relaxed; s=default; d=rock-chips.com; v=1; bh=OCoPxWh+b3eSvtYMRsNlQyefUpu6kD2yKDCWJQ7xR74=; h=date:mime-version:subject:message-id:from; X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251116_173412_182601_E48EE44C X-CRM114-Status: GOOD ( 34.94 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgTHVjYSwKCk9uIDExLzEyLzIwMjUgOTozNyBBTSwgQ2hhb3lpIENoZW4gd3JvdGU6Cj4gSGVs bG8gTHVjYSwKPgo+IE9uIDExLzExLzIwMjUgMTE6MTQgUE0sIEx1Y2EgQ2VyZXNvbGkgd3JvdGU6 Cj4+IEhlbGxvIENoYW95aSwKPj4KPj4gT24gVHVlIE5vdiAxMSwgMjAyNSBhdCAxMTo1MCBBTSBD RVQsIENoYW95aSBDaGVuIHdyb3RlOgo+Pj4gRnJvbTogQ2hhb3lpIENoZW4gPGNoYW95aS5jaGVu QHJvY2stY2hpcHMuY29tPgo+Pj4KPj4+IFRoZSBSSzMzOTkgaGFzIHR3byBVU0IvRFAgY29tYm8g UEhZIGFuZCBvbmUgQ0ROLURQIGNvbnRyb2xsZXIuIEFuZAo+Pj4gdGhlIENETi1EUCBjYW4gYmUg c3dpdGNoZWQgdG8gb3V0cHV0IHRvIG9uZSBvZiB0aGUgUEhZcy4gSWYgYm90aCBwb3J0cwo+Pj4g YXJlIHBsdWdnZWQgaW50byBEUCwgRFAgd2lsbCBzZWxlY3QgdGhlIGZpcnN0IHBvcnQgZm9yIG91 dHB1dC4KPj4+Cj4+PiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgYnJpZGdl cywgZW5hYmxpbmcgdXNlcnMgdG8gZmxleGlibHkKPj4+IHNlbGVjdCB0aGUgb3V0cHV0IHBvcnQu IEZvciBlYWNoIFBIWSBwb3J0LCBhIHNlcGFyYXRlIGVuY29kZXIgYW5kIGJyaWRnZQo+Pj4gYXJl IHJlZ2lzdGVyZWQuCj4+Pgo+Pj4gVGhlIGNoYW5nZSBpcyBiYXNlZCBvbiB0aGUgRFJNIEFVWCBI UEQgYnJpZGdlLCByYXRoZXIgdGhhbiB0aGUKPj4+IGV4dGNvbiBhcHByb2FjaC4gVGhpcyByZXF1 aXJlcyB0aGUgRFQgdG8gY29ycmVjdGx5IGRlc2NyaWJlIHRoZQo+Pj4gY29ubmVjdGlvbnMgYmV0 d2VlbiB0aGUgZmlyc3QgYnJpZGdlIGluIGJyaWRnZSBjaGFpbiBhbmQgRFAKPj4+IGNvbnRyb2xs ZXIuIEZvciBleGFtcGxlLCB0aGUgYnJpZGdlIGNoYWluIG1heSBiZSBsaWtlIHRoaXM6Cj4+Pgo+ Pj4gUEhZIGF1eCBiaXJkZ2UgLT4gZnNhNDQ4MCBhbmFsb2cgYXVkaW8gc3dpdGNoIGJyaWRnZSAt Pgo+Pj4gb25ubixuYjd2cHE5MDRtIFVTQiByZW1pbmRlciBicmlkZ2UgLT4gVVNCLUMgY29udHJv bGxlciBBVVggSFBEIGJyaWRnZQo+Pj4KPj4+IEluIHRoaXMgY2FzZSwgdGhlIGNvbm5lY3Rpb24g cmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgUEhZIGF1eCBicmlkZ2UKPj4+IGFuZCB0aGUgRFAgY29u dG9ybGxlciBuZWVkIHRvIGJlIGRlc2NyaWJlZCBpbiBEVC4KPj4+Cj4+PiBJbiBhZGRpdGlvbiwg dGhlIGNkbl9kcF9wYXJzZV9uZXh0X2JyaWRnZV9kdCgpIHdpbGwgcGFyc2VzIGl0IGFuZAo+Pj4g ZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlZ2lzdGVyIG9uZSBvciB0d28gYnJpZGdlcy4KPj4+Cj4+ PiBTaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSBEUCBjb250cm9sbGVyLCBvbmx5IG9uZSBvZiB0aGUg UEhZIHBvcnRzIGNhbgo+Pj4gb3V0cHV0IGF0IGEgdGltZS4gVGhlIGtleSBpcyBob3cgdG8gc3dp dGNoIGJldHdlZW4gZGlmZmVyZW50IFBIWXMsCj4+PiB3aGljaCBpcyBoYW5kbGVkIGJ5IGNkbl9k cF9zd2l0Y2hfcG9ydCgpIGFuZCBjZG5fZHBfZW5hYmxlKCkuCj4+Pgo+Pj4gVGhlcmUgYXJlIHR3 byBjYXNlczoKPj4+Cj4+PiAxLiBOZWl0aGVyIGJyaWRnZSBpcyBlbmFibGVkLiBJbiB0aGlzIGNh c2UsIGJvdGggYnJpZGdlcyBjYW4KPj4+IGluZGVwZW5kZW50bHkgcmVhZCB0aGUgRURJRCwgYW5k IHRoZSBQSFkgcG9ydCBtYXkgc3dpdGNoIGJlZm9yZQo+Pj4gcmVhZGluZyB0aGUgRURJRC4KPj4+ Cj4+PiAyLiBPbmUgYnJpZGdlIGlzIGFscmVhZHkgZW5hYmxlZC4gSW4gdGhpcyBjYXNlLCBvdGhl ciBicmlkZ2VzIGFyZSBub3QKPj4+IGFsbG93ZWQgdG8gcmVhZCB0aGUgRURJRC4gU28gd2Ugd2ls bCB0cnkgdG8gcmV0dXJuIHRoZSBjYWNoZWQgRURJRC4KPj4+Cj4+PiBTaW5jZSB0aGUgc2NlbmFy aW8gb2YgdHdvIHBvcnRzIHBsdWcgaW4gYXQgdGhlIHNhbWUgdGltZSBpcyByYXJlLAo+Pj4gSSBk b24ndCBoYXZlIGEgYm9hcmQgd2hpY2ggc3VwcG9ydCB0d28gVHlwZUMgY29ubmVjdG9yIHRvIHRl c3QgdGhpcy4KPj4+IFRoZXJlZm9yZSwgSSB0ZXN0ZWQgZm9yY2VkIHN3aXRjaGluZyBvbiBhIHNp bmdsZSBQSFkgcG9ydCwgYXMgd2VsbCBhcwo+Pj4gb3V0cHV0IHVzaW5nIGEgZmFrZSBQSFkgcG9y dCBhbG9uZ3NpZGUgYSByZWFsIFBIWSBwb3J0Lgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IENoYW95 aSBDaGVuIDxjaGFveWkuY2hlbkByb2NrLWNoaXBzLmNvbT4KPj4gWy4uLl0KPj4KPj4+IEBAIC05 NjYsMjggKzEwODQsMTYgQEAgc3RhdGljIGludCBjZG5fZHBfcGRfZXZlbnQoc3RydWN0IG5vdGlm aWVyX2Jsb2NrICpuYiwKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIE5PVElGWV9ET05FOwo+Pj4gwqAg fQo+Pj4KPj4+IC1zdGF0aWMgaW50IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQo+Pj4gK3N0YXRpYyBpbnQgY2RuX2JyaWRn ZV9hZGQoc3RydWN0IGRldmljZSAqZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGRybV9icmlkZ2UgKm5leHRfYnJpZGdlLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPj4+IMKgIHsKPj4+IMKgwqDC oMKgwqAgc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ PiAtwqDCoMKgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPj4+ICvCoMKgwqAgc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkcC0+ZHJtX2RldjsKPj4+ICvCoMKgwqAgc3RydWN0IGRy bV9icmlkZ2UgKmxhc3RfYnJpZGdlID0gTlVMTDsKPj4+IMKgwqDCoMKgwqAgc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKPj4+IC3CoMKgwqAgc3RydWN0IGNkbl9kcF9wb3J0ICpwb3J0 Owo+Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7Cj4+PiAtwqDC oMKgIGludCByZXQsIGk7Cj4+IFsuLi5dCj4+Cj4+PiArwqDCoMKgIGlmIChuZXh0X2JyaWRnZSkg ewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsIG5l eHRfYnJpZGdlLCBicmlkZ2UsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRFJNX0JSSURHRV9BVFRBQ0hfTk9fQ09OTkVDVE9SKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocmV0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICsK Pj4+ICvCoMKgwqDCoMKgwqDCoCBsYXN0X2JyaWRnZSA9IG5leHRfYnJpZGdlOwo+Pj4gK8KgwqDC oMKgwqDCoMKgIHdoaWxlIChkcm1fYnJpZGdlX2dldF9uZXh0X2JyaWRnZShsYXN0X2JyaWRnZSkp Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsYXN0X2JyaWRnZSA9IGRybV9icmlkZ2VfZ2V0 X25leHRfYnJpZGdlKGxhc3RfYnJpZGdlKTsKPj4gRFJNIGJyaWRnZXMgYXJlIG5vdyByZWZjb3Vu dGVkLCBhbmQgeW91IGFyZSBub3QgY2FsbGluZyBkcm1fYnJpZGdlX2dldCgpCj4+IGFuZCBkcm1f YnJpZGdlX3B1dCgpIGhlcmUuIEJ1dCBoZXJlIHlvdSBjYW4gdXNlCj4+IGRybV9icmlkZ2VfY2hh aW5fZ2V0X2xhc3RfYnJpZGdlKCkgd2hpY2ggd2lsbCBzaW1wbGlmeSB5b3VyIGpvYi4KPj4KPj4g RG9uJ3QgZm9yZ2V0IHRvIGNhbGwgZHJtX2JyaWRnZV9wdXQoKSBvbiB0aGUgcmV0dXJuZWQgYnJp ZGdlIHdoZW4gdGhlCj4+IGJyaWRnZSBpcyBub3QgcmVmZXJlbmNlZCBhbnltb3JlLiBUaGlzIHNo b3VsZCBiZSBhcyBlYXN5IGFzIGFkZGluZyBhCj4+IGNsZWFudXAgYWN0aW9uIG9uIHRoZSB2YXJp YWJsZSBkZWNsYXJhdGlvbiBhYm92ZToKPj4KPj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX2JyaWRnZSAq bGFzdF9icmlkZ2UgPSBOVUxMOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1fYnJpZGdlICpsYXN0X2Jy aWRnZSBfX2ZyZWUoZHJtX2JyaWRnZV9wdXQpID0gTlVMTDsKPgo+IEFoLCBJIGhhdmUgc2VlbiB5 b3VyIHBhdGNoIGFib3V0IHRoaXMuIFRoYW5rIHlvdSBmb3IgdGhlIHJlbWluZGVyLCBJIHdpbGwg Zml4IHRoaXMgaW4gdjEwLgo+Cj4+Cj4+PiBAQCAtMTAyOSw4ICsxMTQ3LDEwMiBAQCBzdGF0aWMg aW50IGNkbl9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVy LCB2b2lkICpkYXRhKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiDCoMKg wqDCoMKgIH0KPj4+Cj4+PiArwqDCoMKgIGlmIChsYXN0X2JyaWRnZSkKPj4+ICvCoMKgwqDCoMKg wqDCoCBjb25uZWN0b3ItPmZ3bm9kZSA9IGZ3bm9kZV9oYW5kbGVfZ2V0KG9mX2Z3bm9kZV9oYW5k bGUobGFzdF9icmlkZ2UtPm9mX25vZGUpKTsKPj4+ICsKPj4+IMKgwqDCoMKgwqAgZHJtX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwo+Pj4KPj4+ICvCoMKgwqAg cmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgY2RuX2RwX3BhcnNlX25leHRf YnJpZGdlX2R0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkcC0+ZGV2LT5vZl9ub2RlOwo+Pj4gK8KgwqDCoCBzdHJ1 Y3QgZGV2aWNlX25vZGUgKnBvcnQgX19mcmVlKGRldmljZV9ub2RlKSA9IG9mX2dyYXBoX2dldF9w b3J0X2J5X2lkKG5wLCAxKTsKPj4+ICvCoMKgwqAgc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsK Pj4+ICvCoMKgwqAgaW50IGNvdW50ID0gMDsKPj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+PiAr wqDCoMKgIGludCBpOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBJZiBkZXZpY2UgdXNlIGV4dGNvbiwg ZG8gbm90IHVzZSBocGQgYnJpZGdlICovCj4+PiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBkcC0+ cG9ydHM7IGkrKykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkcC0+cG9ydFtpXS0+ZXh0Y29u KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcC0+YnJpZGdlX2NvdW50ID0gMTsKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0K Pj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBPbmUgZW5kcG9pbnQgbWF5 IGNvcnJlc3BvbmQgdG8gb25lIG5leHQgYnJpZGdlLiAqLwo+Pj4gK8KgwqDCoCBmb3JfZWFjaF9v Zl9ncmFwaF9wb3J0X2VuZHBvaW50KHBvcnQsIGRwX2VwKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRldmljZV9ub2RlICpuZXh0X2JyaWRnZV9ub2RlIF9fZnJlZShkZXZpY2Vfbm9kZSkg PQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3Bh cmVudChkcF9lcCk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAgYnJpZGdlID0gb2ZfZHJtX2Zp bmRfYnJpZGdlKG5leHRfYnJpZGdlX25vZGUpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghYnJp ZGdlKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRVBST0JFX0RFRkVSOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAg fQo+Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRwLT5uZXh0X2JyaWRnZV92YWxpZCA9IHRydWU7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgZHAtPm5leHRfYnJpZGdlX2xpc3RbY291bnRdLmJyaWRnZSA9 IGJyaWRnZTsKPj4gWW91IGFyZSBzdG9yaW5nIGEgcmVmZXJlbmNlIHRvIGEgZHJtX2JyaWRnZSwg c28gaGF2ZSB0byBpbmNyZW1lbnQgdGhlCj4+IHJlZmNvdW50Ogo+Pgo+PiDCoMKgwqDCoMKgwqDC oCBkcC0+bmV4dF9icmlkZ2VfbGlzdFtjb3VudF0uYnJpZGdlID0gZHJtX2JyaWRnZV9nZXQoYnJp ZGdlKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBeXl5eXl5eXl5eXl5eXgo+ Pgo+PiBGWUkgdGhlcmUgaXMgYSBwbGFuIHRvIHJlcGxhY2Ugb2ZfZHJtX2ZpbmRfYnJpZGdlKCkg d2l0aCBhIGZ1bmN0aW9uIHRoYXQKPj4gaW5jcmVhc2VzIHRoZSBicmlkZ2UgcmVmY291bnQgYmVm b3JlIHJldHVybmluZyB0aGUgYnJpZGdlLCBidXQgaXQncyBub3QKPj4gdGhlcmUgeWV0LiBXaGVu IHRoYXQgd2lsbCBoYXBwZW4sIHRoZSBleHBsaWNpdCBkcm1fYnJpZGdlX2dldCgpIHdvbid0IGJl Cj4+IG5lZWRlZCBhbnltb3JlIGFuZCB0aGlzIGNvZGUgY2FuIGJlIHVwZGF0ZWQgYWNjb3JkaW5n bHkuCgpPdXQgb2YgY3VyaW9zaXR5LCBJIGNoZWNrZWQgdGhlIGNhbGxlcnMgb2Ygb2ZfZHJtX2Zp bmRfYnJpZGdlKCksIGFuZCBpdCBzZWVtcyB0aGF0IHRoZSB2YXN0IG1ham9yaXR5IG9mIHRoZW0g ZG8gbm90IHBheSBhdHRlbnRpb24gdG8gdGhlIGluY3JlYXNlIG9yIGRlY3JlYXNlIG9mIHJlZmVy ZW5jZSBjb3VudHMuIERvZXMgdGhpcyBtZWFuIHRoYXQgZXZlbiBpZiB3ZSBhZGQgcmVmZXJlbmNl IGNvdW50aW5nIGluIG9mX2RybV9maW5kX2JyaWRnZSgpLCB3ZSBzdGlsbCBuZWVkIHRvIG1vZGlm eSB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgb2YgdGhlaXIgY2FsbGVycyBhbmQgZGVjcmVh c2UgdGhlIHJlZmVyZW5jZSBjb3VudCBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZT8gVGhhbmsgeW91 LgoKCj4+Cj4+IEFsc28geW91IGhhdmUgdG8gY2FsbCBkcm1fYnJpZGdlX3B1dCgpIHRvIHJlbGVh c2UgdGhhdCByZWZlcmVuY2Ugd2hlbiB0aGUKPj4gcG9pbnRlciBnb2VzIGF3YXkuIEkgZ3Vlc3Mg dGhhdCBzaG91bGQgaGFwcGVuIGluIGNkbl9kcF91bmJpbmQoKS4KPgo+IFlvdSdyZSByaWdodCwg dGhpcyBpcyBpbmRlZWQgYSBwaXRmYWxsLiBJIHdpbGwgZml4IGl0IGluIHYxMC4KPgo+Ci0tIApC ZXN0LApDaGFveWkKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LXJvY2tjaGlwCg==