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 41AE5CCF2E9 for ; Mon, 19 Oct 2026 14:03:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 844D010EDFC; Mon, 19 Oct 2026 14:03:07 +0000 (UTC) Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 424CF10EE03 for ; Mon, 19 Oct 2026 14:03:01 +0000 (UTC) Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 274F24096F; Mon, 19 Oct 2026 14:03:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 574001F000C4; Mon, 19 Oct 2026 14:02:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418581; bh=6cgidK+zeGuACZ/n/MWCuGvUglgmjVNS9L7Qx+HPLZE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=MIFVaIj3glebXWQ4T5nUShQiZcEkLUA9LwB/KsPHIEICRTfmbk2xo4h3h5Yv9ruCx 1+b3jhrx9KdA6M9v8idMarMj9hnFS6daJ2oSUFINa+a5RWy5EMSDja5s/CGoRI9GS+ SZGN2FGvqsZCIoDuI3glMdNs86bXngIr7w3fmVfSZO4ftiVojrM8TTYhJ8avgZ+0GU XFw5n23qUC/GlqiKBQemD3ze4/rTTjFOip5W9YWge2mvA3xGy+dhUTVO/+ji8VMYlk Z4dhRosRf1DSn5MiTA17LKPzTe2ZCNyx0noNFR9XcyoZzTSv4PpLgqoFrXFYwQchYd +m7FDHWKHAeHA== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Jonas Karlman , Heiko Stuebner , Sasha Levin , hjc@rock-chips.com, andyshrk@163.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-5.10] drm/rockchip: dw_hdmi: Use resume_early pm ops for system suspend Date: Mon, 19 Oct 2026 09:50:40 -0400 Message-ID: <20261019135441.1420968-349-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" From: Jonas Karlman [ Upstream commit af3a9eadc11896f6677bcb7102bfb7c84be48d2d ] rockchip_drm_sys_resume()/drm_mode_config_helper_resume() is called before the resume pm ops of dw-hdmi. This result in an atomic_enable() before dw_hdmi_rockchip_resume()/dw_hdmi_resume() is called. Resume (without changes): - rockchip_drm_sys_resume() - drm_mode_config_helper_resume() - atomic_enable() - dw_hdmi_rockchip_resume() - dw_hdmi_resume() - dw_hdmi_init_hw() Change to use resume_early pm ops for system suspend to ensure pm ops for dw-hdmi is run before rockchip-drm pm ops. Also fix a possible NULL pointer dereference timing issue while at it. Resume (with changes): - dw_hdmi_rockchip_resume_early() - dw_hdmi_resume() - dw_hdmi_init_hw() - rockchip_drm_sys_resume() - drm_mode_config_helper_resume() - atomic_enable() Signed-off-by: Jonas Karlman Tested-by: Heiko Stuebner #rk3328 Signed-off-by: Heiko Stuebner Link: https://patch.msgid.link/20260518193748.2482823-12-jonas@kwiboo.se Signed-off-by: Sasha Levin --- LLM Generated explanations, may be completely bogus: I have the 6.18.y picture: the buggy resume path is in v6.18.53, the patch is self-contained, and the DSI sibling already uses the same late/early PM ordering. Compiling the full nine-phase verdict next. =============================================================== PHASE 1: COMMIT MESSAGE FORENSICS =============================================================== Step 1.1: PARSE THE SUBJECT LINE Record: [drm/rockchip: dw_hdmi] [Use] [switch HDMI system-resume callback to resume_early so dw-hdmi re-inits before rockchip-drm atomic_enable] Step 1.2: PARSE ALL COMMIT MESSAGE TAGS Record: - Tested-by: Heiko Stuebner #rk3328 (Rockchip DRM maintainer; hardware-tested) - Signed-off-by: Jonas Karlman (author) - Signed-off-by: Heiko Stuebner (subsystem maintainer applied it) - Link: https://patch.msgid.link/20260518193748.2482823-12-jonas@kwiboo.se - No Fixes:, Reported-by, Reviewed-by, Acked-by, or Cc: stable (absence expected) - Ignore pipeline tags: [Upstream commit af3a9eadc11896f6677bcb7102bfb7c84be48d2d], Signed-off-by: Sasha Levin Notable: maintainer Tested-by on real RK3328 hardware. Step 1.3: ANALYZE THE COMMIT BODY TEXT Record: - Bug: on system resume, `rockchip_drm_sys_resume()` → `drm_mode_config_helper_resume()` → atomic enable runs before `dw_hdmi_resume()` → `dw_hdmi_init_hw()`. - Symptom: HDMI hardware (DDC I2C, HPD, interrupt mutes) is restored after DRM has already tried to re-enable the display pipeline. - Secondary: “possible NULL pointer dereference timing issue” — resume can run with NULL drvdata. - No stack trace, syzbot report, or CVE. Author gave simulated-suspend (`pm_test`) and `rtcwake` test steps in the mailing-list version. Step 1.4: DETECT HIDDEN BUG FIXES Record: Not disguised. It is an explicit PM-ordering fix plus a NULL check. It was patch 11/11 of a series titled “Misc cleanup and propagate bus format”, and was added in v2; the other patches are unrelated cleanups/prep. This hunk is a standalone bug fix. =============================================================== PHASE 2: DIFF ANALYSIS - LINE BY LINE =============================================================== Step 2.1: INVENTORY THE CHANGES Record: - File: `drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c` (+4/-3, 7 lines) - Functions: `dw_hdmi_rockchip_resume` renamed to `dw_hdmi_rockchip_resume_early`; `dw_hdmi_rockchip_pm` table - Scope: single-file surgical PM-ops change Step 2.2: UNDERSTAND THE CODE FLOW CHANGE Record: - Before: `.resume` (normal phase) unconditionally calls `dw_hdmi_resume(hdmi->hdmi)`. - After: `.resume_early` (early phase) calls it only if `dev_get_drvdata()` is non-NULL. - `SET_SYSTEM_SLEEP_PM_OPS(NULL, resume)` → `SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, resume_early)`. - Suspend remains NULL. Hibernation thaw/restore move from thaw/restore to thaw_early/restore_early, matching the same ordering intent. Resume phase order is resume_noirq → resume_early → resume. HDMI therefore always re-inits before rockchip-drm’s `.resume`. Step 2.3: IDENTIFY THE BUG MECHANISM Record: - Primary: logic/correctness + hardware resume ordering. Sibling `dw- mipi-dsi-rockchip.c` already uses `SET_LATE_SYSTEM_SLEEP_PM_OPS` with the comment that it must run before `rockchip_drm_drv` re-enables panels. - Secondary: memory safety — NULL check before `hdmi->hdmi` dereference when the platform device has probed (`component_add`) but not bound (`platform_set_drvdata` is in bind, not probe). Step 2.4: ASSESS THE FIX QUALITY Record: - Obviously correct: Linux PM runs all `resume_early` callbacks before any `.resume`. That is the standard way to order a component ahead of the DRM master. - Minimal; no API or data-structure change. - Regression risk low: same pattern as the in-tree DSI sibling; only resume is registered; `dw_hdmi_init_hw()` only re-inits mutes, DDC I2C, and HPD. - NULL check does not cover `hdmi->hdmi` being `ERR_PTR` after a failed bind; that is a leftover hole, not a regression from this patch. =============================================================== PHASE 3: GIT HISTORY INVESTIGATION =============================================================== Step 3.1: BLAME THE CHANGED LINES Record: - Buggy resume path introduced by `27c9130baef543` (“drm/rockchip: dw_hdmi: Handle suspend/resume”, Douglas Anderson, 2019-06-04), first in v5.3-rc1. - That commit is an ancestor of this tree. - That commit already documented the failure on rk3288 Chromebooks (HDMI HPD and DDC I2C stop working after suspend) and that Chrome OS 3.14 used late/early PM ops because VOP sometimes resumed before dw-hdmi. Mainline used normal `.resume` because the author could not reproduce it then. This patch is the proper late/early fix for that known issue. Step 3.2: FOLLOW THE FIXES: TAG Record: No Fixes: tag. The introducing commit is `27c9130baef543`, present here. Step 3.3: CHECK FILE HISTORY FOR RELATED CHANGES Record: - Only two resume-related commits on this file: 27c9130baef543 (add resume) and this one. - Recent 6.18.y file history is unrelated (SCLIN mask, FIELD_PREP, whitespace). - Series-local neighbors (output_port, whitespace, empty helpers) are not functional prerequisites of this hunk. Step 3.4: CHECK THE AUTHOR'S OTHER COMMITS Record: Jonas Karlman is a regular Rockchip HDMI/dw-hdmi contributor. Heiko Stuebner (maintainer) applied the series and tested it on rk3328. Step 3.5: CHECK FOR DEPENDENT/PREREQUISITE COMMITS Record: - Series v2 11/11; cover letter says patches 1–10 are cleanup / YCbCr- Deep Color prep. Patch 11 only changes PM ops. - `SET_LATE_SYSTEM_SLEEP_PM_OPS` exists in this tree’s `include/linux/pm.h`. - `dw_hdmi_resume()` exists in `drivers/gpu/drm/bridge/synopsys/dw- hdmi.c`. - Applies standalone. No missing helpers. =============================================================== PHASE 4: MAILING LIST AND EXTERNAL RESEARCH =============================================================== Step 4.1: FIND THE ORIGINAL PATCH DISCUSSION Record: - b4 dig: https://patch.msgid.link/20260518193748.2482823-12-jonas@kwiboo.se - v1 (2026-05-10): 10 patches, no resume_early change - v2 (2026-05-18): this patch added (“v2: New patch”) - Applied by Heiko 2026-06-02 as `af3a9eadc11896f6677bcb7102bfb7c84be48d2d` - No NAK. No reviewer asked for further revisions of this hunk. - Author included CONFIG_PM_DEBUG / rtcwake test instructions and noted a separate RK356x EHCI/OHCI clock issue, not this bug. Step 4.2: CHECK WHO REVIEWED THE PATCH Record: Recipients included Heiko Stuebner, Sandy Huang, Andy Yan, DRM maintainers, dri-devel, linux-rockchip. Heiko tested and applied. No other Acked-by/Reviewed-by on this patch. Step 4.3: SEARCH FOR THE BUG REPORT Record: No syzbot/bugzilla link. Real-world grounding is the 2019 Chromebook report in 27c9130baef543 plus Heiko’s rk3328 Tested-by. Step 4.4: CHECK FOR RELATED PATCHES AND SERIES Record: Standalone vs the rest of the v2 series. DSI sibling `e584cdc154993` (“drm/rockchip: dsi: Reconfigure hardware on resume()”) used the same late PM ops and had Cc: stable. Step 4.5: CHECK STABLE MAILING LIST HISTORY Record: UNVERIFIED. lore.kernel.org/stable returned an Anubis bot-check page; WebFetch to lore returned 403. =============================================================== PHASE 5: CODE SEMANTIC ANALYSIS =============================================================== Step 5.1: IDENTIFY KEY FUNCTIONS IN THE DIFF Record: `dw_hdmi_rockchip_resume_early` (was `dw_hdmi_rockchip_resume`); `dw_hdmi_rockchip_pm`. Step 5.2: TRACE CALLERS Record: Invoked by the PM core as `dev_pm_ops.resume_early` on the `dwhdmi-rockchip` platform driver. Triggered by system suspend/resume (and freeze/thaw/restore via LATE_SYSTEM_SLEEP_PM_OPS). Not a syscall hot path; it is the Chromebook/SBC sleep path. Step 5.3: TRACE CALLEES Record: `dev_get_drvdata` → `dw_hdmi_resume` → `dw_hdmi_init_hw` → `initialize_hdmi_ih_mutes`, `dw_hdmi_i2c_init`, optional `phy.ops->setup_hpd`. Step 5.4: FOLLOW THE CALL CHAIN Record: - Userspace: `echo mem > /sys/power/state` / rtcwake / systemd suspend. - DRM side: `rockchip_drm_sys_resume` → `drm_mode_config_helper_resume` → `drm_atomic_helper_resume` (atomic commit / enable). - HDMI platform device is a component, not a child of the DRM device; sibling `.resume` order is not guaranteed. `platform_set_drvdata` is in `dw_hdmi_rockchip_bind`, while probe only does `component_add`, so resume-before-bind can see NULL drvdata. - Reachable on any Rockchip board with this HDMI IP and CONFIG_PM_SLEEP (RK3288/RK3328/RK3399/RK3568, including Chromebooks). Step 5.5: SEARCH FOR SIMILAR PATTERNS Record: - `dw-mipi-dsi-rockchip.c` already uses `SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, dw_mipi_dsi_rockchip_resume)` in this tree for the same reason. - `dw_hdmi_qp-rockchip.c` still uses `SET_SYSTEM_SLEEP_PM_OPS` (different HDMI QP IP, not this patch). - imx8mp and meson dw-hdmi glue still use normal SYSTEM_SLEEP PM ops. =============================================================== PHASE 6: CROSS-REFERENCING AGAINST THE LOCAL TREE =============================================================== Step 6.1: DOES THE BUGGY CODE EXIST IN THIS TREE? Record: - Local tree: `git describe HEAD` = v6.18.53-5049-g0f0bdc2b0dffb; `make kernelversion` = 6.18.53 (6.18.y). - v6.18.53 still has: `SET_SYSTEM_SLEEP_PM_OPS(NULL, dw_hdmi_rockchip_resume)` and `dw_hdmi_resume(hdmi->hdmi)` with no NULL check at `drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c`. - Bug present since v5.3 (2019), long before 6.18 branched. - Upstream commit `af3a9eadc11896` is not an ancestor of HEAD (`git merge-base --is-ancestor` failed); this is a backport candidate, not already in 6.18.y proper. Step 6.2: CHECK FOR BACKPORT COMPLICATIONS Record: Clean apply. The resume function in v6.18.53 is identical to the parent of this change. `SET_LATE_SYSTEM_SLEEP_PM_OPS` and `dw_hdmi_resume()` already exist here. Surrounding unbind/bridge-ref changes from later series patches are not required. Step 6.3: CHECK IF RELATED FIXES ARE ALREADY HERE Record: No other resume-ordering fix on this file. DSI already has the analogous LATE PM ops. No earlier version of this HDMI fix in 6.18.53. =============================================================== PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT =============================================================== Step 7.1: IDENTIFY THE SUBSYSTEM AND ITS CRITICALITY Record: DRM Rockchip HDMI glue (`drivers/gpu/drm/rockchip/`). IMPORTANT (common SoC display, not core mm/fs). Affects RK3288/RK3328/RK3399/RK356x HDMI (Chromebooks, SBCs, TV boxes). Step 7.2: ASSESS SUBSYSTEM ACTIVITY Record: Mature driver (HDMI glue since ~2015). Resume path untouched from 2019 until this patch. Low churn on the PM ops themselves. =============================================================== PHASE 8: IMPACT AND RISK ASSESSMENT =============================================================== Step 8.1: DETERMINE WHO IS AFFECTED Record: Driver-specific / platform-specific. Users of Rockchip dw-hdmi who suspend the system. CONFIG_PM_SLEEP. Not universal, but a well-used platform class in Android, Chromebook, and ARM SBCs. Step 8.2: DETERMINE THE TRIGGER CONDITIONS Record: - Trigger: system suspend/resume with this HDMI driver bound (and the NULL path if probed but unbound). - Common on laptops/Chromebooks; less so on always-on appliances. - Unprivileged users typically cannot suspend; the HPD/I2C break is still a real admin/user-visible failure after lid-close/sleep. Step 8.3: DETERMINE THE FAILURE MODE SEVERITY Record: - Primary: HDMI HPD and DDC I2C not restored before DRM atomic enable → hotplug/EDID/output broken after resume. HIGH for affected hardware (display not coming back is a serious functional bug), not a kernel panic. - Secondary: NULL deref if resume runs before bind → oops. Less common. HIGH if hit, MEDIUM likelihood. - Overall: HIGH (suspend/resume display breakage on real hardware). Step 8.4: CALCULATE RISK-BENEFIT RATIO Record: - Benefit: high for Rockchip HDMI suspend users; restores the ordering Chrome OS already needed. - Risk: very low (7 lines, established LATE PM pattern already in the same DRM driver). - Ratio: favor backport. =============================================================== PHASE 9: FINAL SYNTHESIS =============================================================== Step 9.1: COMPILE THE EVIDENCE FOR: - Real resume-ordering bug: DRM atomic enable before `dw_hdmi_init_hw()`. - User-visible: HDMI HPD/DDC broken after sleep (documented on rk3288 Chromebooks in 2019; re-tested on rk3328 in 2026). - Same fix already used by dw-mipi-dsi-rockchip in this tree, and that DSI change went to stable with Cc: stable. - Possible NULL deref on resume before bind. - 7-line surgical change; applies cleanly to v6.18.53. - Maintainer Tested-by and Signed-off-by. - Buggy code has been in this tree since v5.3; no missing prerequisites. AGAINST: - No Fixes:/Cc: stable (expected for this pipeline; not a negative). - Buried as 11/11 in a cleanup series (but the hunk is independent and was added specifically in v2). - Not a panic/corruption/CVE; display-after-suspend rather than a crash. - No extra Reviewed-by besides maintainer apply/test. - UNVERIFIED whether stable@ already discussed rejecting it. UNRESOLVED: - lore.kernel.org/stable search blocked (Anubis/403). - Incomplete NULL check if bind failed and left `hdmi->hdmi` as ERR_PTR (pre-existing). Step 9.2: APPLY THE STABLE RULES CHECKLIST 1. Obviously correct and tested? PASS — PM phase ordering is well- defined; Heiko tested on rk3328. 2. Fixes a real bug that affects users? PASS — HDMI not correctly re- inited before DRM resume; Chromebook-class hardware. 3. Important issue (crash, security, corruption, deadlock)? PASS — suspend/resume display breakage plus a possible oops; hardware resume workaround, same class as the DSI stable fix. 4. Small and contained? PASS — 7 lines, one file. 5. No new features or APIs? PASS. 6. Can apply to the local tree? PASS — v6.18.53 has the old resume function and the LATE PM macro. Step 9.3: CHECK FOR EXCEPTION CATEGORIES Record: Hardware suspend/resume workaround on an existing driver (quirk- class). Not a new driver, ID, or API. Step 9.4: MAKE YOUR DECISION This belongs on 6.18.y. The buggy `.resume` path is in this checkout, the switch to `resume_early` is the same proven pattern as the in-tree DSI sibling, and the patch is tiny with maintainer hardware testing. What it solves for stable users: after system sleep on Rockchip dw-hdmi boards, DRM can re-enable the pipeline before HDMI DDC/HPD/init, so hotplug and HDMI output fail. Moving the callback to `resume_early` forces `dw_hdmi_init_hw()` first, and skips a NULL drvdata deref if the component never bound. Risk is low; benefit is a real resume fix on shipping SoCs. No series dependencies are required for this hunk. Verification: - [Phase 1] Parsed tags: Tested-by Heiko (rk3328), SOB Jonas + Heiko, Link msgid ...-12; no Fixes/Reported-by/Cc:stable - [Phase 1] Cover letter via b4 mbox: patch 11/11 of v2 “Misc cleanup”; “v2: New patch”; Heiko “Series: Tested-by” and Applied - [Phase 2] Diff: rename resume→resume_early, add `if (hdmi)`, SET_SYSTEM_SLEEP→SET_LATE_SYSTEM_SLEEP; +4/-3 - [Phase 2] Confirmed LATE_SYSTEM_SLEEP_PM_OPS maps resume_fn to `.resume_early` in include/linux/pm.h:321-327,350-351 - [Phase 2] Confirmed rockchip_drm_drv.c:260-262 still uses SET_SYSTEM_SLEEP_PM_OPS for sys_resume - [Phase 2] drm_mode_config_helper_resume() calls drm_atomic_helper_resume() (drm_modeset_helper.c:250) - [Phase 3] git blame parent: resume added in 27c9130baef543 (Douglas Anderson, 2019) - [Phase 3] git show 27c9130baef543: documented Chromebook HPD/I2C break and Chrome OS late/early PM ops - [Phase 3] git describe --contains 27c9130baef543 → v5.3-rc1; git merge-base --is-ancestor 27c9130baef543 HEAD → yes - [Phase 3] git log --oneline --grep resume_early -- drivers/gpu/drm/rockchip/ → only this commit - [Phase 4] b4 dig -c af3a9eadc11896: lore thread found; v1 had no this patch; v2 added it; applied as af3a9eadc11896 - [Phase 4] b4 dig -a: v1 2026-05-10, v2 2026-05-18 - [Phase 4] b4 dig -w: Heiko, dri-devel, linux-rockchip CC’d - [Phase 4] b4 dig -m /tmp/thread.mbox: no NAKs; Heiko tested+applied - [Phase 4] lore.kernel.org WebFetch 403; stable search Anubis-blocked → UNVERIFIED stable@ discussion - [Phase 5] Callers: PM core resume_early on dwhdmi-rockchip; callees dw_hdmi_resume→dw_hdmi_init_hw - [Phase 5] platform_set_drvdata in bind (line 580), probe only component_add — NULL drvdata on unbound resume is real - [Phase 5] Sibling dw-mipi-dsi-rockchip.c:1346 already SET_LATE_SYSTEM_SLEEP_PM_OPS in this tree; introduced by e584cdc154993 with Cc: stable - [Phase 6] git describe HEAD: v6.18.53-5049-g0f0bdc2b0dffb; make kernelversion 6.18.53 - [Phase 6] git show v6.18.53:dw_hdmi-rockchip.c has SET_SYSTEM_SLEEP_PM_OPS + unchecked dw_hdmi_resume - [Phase 6] git merge-base --is-ancestor af3a9eadc11896 HEAD → no (not in 6.18.y proper) - [Phase 6] Resume hunk in v6.18.53 identical to parent of this change; SET_LATE and dw_hdmi_resume exist in v6.18.53 - [Phase 8] Failure mode: HDMI broken after suspend (HIGH); possible NULL oops (HIGH if hit) - UNVERIFIED: whether stable@ previously rejected this patch (lore blocked) **YES** drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index 727cdf768161a..ff34aeef3a6ff 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -635,17 +635,18 @@ static void dw_hdmi_rockchip_remove(struct platform_device *pdev) component_del(&pdev->dev, &dw_hdmi_rockchip_ops); } -static int __maybe_unused dw_hdmi_rockchip_resume(struct device *dev) +static int __maybe_unused dw_hdmi_rockchip_resume_early(struct device *dev) { struct rockchip_hdmi *hdmi = dev_get_drvdata(dev); - dw_hdmi_resume(hdmi->hdmi); + if (hdmi) + dw_hdmi_resume(hdmi->hdmi); return 0; } static const struct dev_pm_ops dw_hdmi_rockchip_pm = { - SET_SYSTEM_SLEEP_PM_OPS(NULL, dw_hdmi_rockchip_resume) + SET_LATE_SYSTEM_SLEEP_PM_OPS(NULL, dw_hdmi_rockchip_resume_early) }; struct platform_driver dw_hdmi_rockchip_pltfm_driver = { -- 2.53.0 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 9B2C7CCF2E8 for ; Mon, 19 Oct 2026 14:03:09 +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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WH9xvVj6O/TJN+EzLxR2tqq+xz4GsjRDguN9odOYJmg=; b=fk9E84KGw5TWIN e0AhTPnBffFQ3cxsZYjv5MptKJiyuwpJFLAQ3QWAymfC68+fNqHjp4D5IxdzSE9XHKLGajHopbna+ O3e0msBSKgOFLWqjdTAejlGFnd6zAK73qplKhDFu3GQOrqeFDKjSeb7L41QXHc9C4wZ7X1Bj1Ki+x gwGBkqwoOB+d3FFyl836bCghB7wIt6Vq2A+LQKjflUyArdrs5dE6gYoFU5vEfq4fJx2RJXNjRMvsB nc53t1JGEevfwzg0bjfShEboUUKhB7+8kQtLiGhO+uawhS3cHjDlt+sgKHFoHht4MAAyMuYN+Yivv B2HftrjLf+E5wdZOUQag==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xInx8-00000007eW9-0l8b; Mon, 19 Oct 2026 14:03:02 +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 1xInx7-00000007eVT-1dm2; Mon, 19 Oct 2026 14:03:01 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 274F24096F; Mon, 19 Oct 2026 14:03:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 574001F000C4; Mon, 19 Oct 2026 14:02:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792418581; bh=6cgidK+zeGuACZ/n/MWCuGvUglgmjVNS9L7Qx+HPLZE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=MIFVaIj3glebXWQ4T5nUShQiZcEkLUA9LwB/KsPHIEICRTfmbk2xo4h3h5Yv9ruCx 1+b3jhrx9KdA6M9v8idMarMj9hnFS6daJ2oSUFINa+a5RWy5EMSDja5s/CGoRI9GS+ SZGN2FGvqsZCIoDuI3glMdNs86bXngIr7w3fmVfSZO4ftiVojrM8TTYhJ8avgZ+0GU XFw5n23qUC/GlqiKBQemD3ze4/rTTjFOip5W9YWge2mvA3xGy+dhUTVO/+ji8VMYlk Z4dhRosRf1DSn5MiTA17LKPzTe2ZCNyx0noNFR9XcyoZzTSv4PpLgqoFrXFYwQchYd +m7FDHWKHAeHA== From: Sasha Levin To: patches@lists.linux.dev, stable@vger.kernel.org Cc: Jonas Karlman , Heiko Stuebner , Sasha Levin , hjc@rock-chips.com, andyshrk@163.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH AUTOSEL 6.18-5.10] drm/rockchip: dw_hdmi: Use resume_early pm ops for system suspend Date: Mon, 19 Oct 2026 09:50:40 -0400 Message-ID: <20261019135441.1420968-349-sashal@kernel.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261019135441.1420968-1-sashal@kernel.org> References: <20261019135441.1420968-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.18.57 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org RnJvbTogSm9uYXMgS2FybG1hbiA8am9uYXNAa3dpYm9vLnNlPgoKWyBVcHN0cmVhbSBjb21taXQg YWYzYTllYWRjMTE4OTZmNjY3N2JjYjcxMDJiZmI3Yzg0YmU0OGQyZCBdCgpyb2NrY2hpcF9kcm1f c3lzX3Jlc3VtZSgpL2RybV9tb2RlX2NvbmZpZ19oZWxwZXJfcmVzdW1lKCkgaXMgY2FsbGVkCmJl Zm9yZSB0aGUgcmVzdW1lIHBtIG9wcyBvZiBkdy1oZG1pLiBUaGlzIHJlc3VsdCBpbiBhbiBhdG9t aWNfZW5hYmxlKCkKYmVmb3JlIGR3X2hkbWlfcm9ja2NoaXBfcmVzdW1lKCkvZHdfaGRtaV9yZXN1 bWUoKSBpcyBjYWxsZWQuCgpSZXN1bWUgKHdpdGhvdXQgY2hhbmdlcyk6Ci0gcm9ja2NoaXBfZHJt X3N5c19yZXN1bWUoKQogIC0gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9yZXN1bWUoKQogICAgLSBh dG9taWNfZW5hYmxlKCkKLSBkd19oZG1pX3JvY2tjaGlwX3Jlc3VtZSgpCiAgLSBkd19oZG1pX3Jl c3VtZSgpCiAgICAtIGR3X2hkbWlfaW5pdF9odygpCgpDaGFuZ2UgdG8gdXNlIHJlc3VtZV9lYXJs eSBwbSBvcHMgZm9yIHN5c3RlbSBzdXNwZW5kIHRvIGVuc3VyZSBwbSBvcHMKZm9yIGR3LWhkbWkg aXMgcnVuIGJlZm9yZSByb2NrY2hpcC1kcm0gcG0gb3BzLiBBbHNvIGZpeCBhIHBvc3NpYmxlIE5V TEwKcG9pbnRlciBkZXJlZmVyZW5jZSB0aW1pbmcgaXNzdWUgd2hpbGUgYXQgaXQuCgpSZXN1bWUg KHdpdGggY2hhbmdlcyk6Ci0gZHdfaGRtaV9yb2NrY2hpcF9yZXN1bWVfZWFybHkoKQogIC0gZHdf aGRtaV9yZXN1bWUoKQogICAgLSBkd19oZG1pX2luaXRfaHcoKQotIHJvY2tjaGlwX2RybV9zeXNf cmVzdW1lKCkKICAtIGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfcmVzdW1lKCkKICAgIC0gYXRvbWlj X2VuYWJsZSgpCgpTaWduZWQtb2ZmLWJ5OiBKb25hcyBLYXJsbWFuIDxqb25hc0Brd2lib28uc2U+ ClRlc3RlZC1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4gI3JrMzMyOApTaWdu ZWQtb2ZmLWJ5OiBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPgpMaW5rOiBodHRwczov L3BhdGNoLm1zZ2lkLmxpbmsvMjAyNjA1MTgxOTM3NDguMjQ4MjgyMy0xMi1qb25hc0Brd2lib28u c2UKU2lnbmVkLW9mZi1ieTogU2FzaGEgTGV2aW4gPHNhc2hhbEBrZXJuZWwub3JnPgotLS0KCkxM TSBHZW5lcmF0ZWQgZXhwbGFuYXRpb25zLCBtYXkgYmUgY29tcGxldGVseSBib2d1czoKCkkgaGF2 ZSB0aGUgNi4xOC55IHBpY3R1cmU6IHRoZSBidWdneSByZXN1bWUgcGF0aCBpcyBpbiB2Ni4xOC41 MywgdGhlCnBhdGNoIGlzIHNlbGYtY29udGFpbmVkLCBhbmQgdGhlIERTSSBzaWJsaW5nIGFscmVh ZHkgdXNlcyB0aGUgc2FtZQpsYXRlL2Vhcmx5IFBNIG9yZGVyaW5nLiBDb21waWxpbmcgdGhlIGZ1 bGwgbmluZS1waGFzZSB2ZXJkaWN0IG5leHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhBU0UgMTogQ09NTUlUIE1FU1NB R0UgRk9SRU5TSUNTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoKU3RlcCAxLjE6IFBBUlNFIFRIRSBTVUJKRUNUIExJTkUKUmVj b3JkOiBbZHJtL3JvY2tjaGlwOiBkd19oZG1pXSBbVXNlXSBbc3dpdGNoIEhETUkgc3lzdGVtLXJl c3VtZQpjYWxsYmFjayB0byByZXN1bWVfZWFybHkgc28gZHctaGRtaSByZS1pbml0cyBiZWZvcmUg cm9ja2NoaXAtZHJtCmF0b21pY19lbmFibGVdCgpTdGVwIDEuMjogUEFSU0UgQUxMIENPTU1JVCBN RVNTQUdFIFRBR1MKUmVjb3JkOgotIFRlc3RlZC1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNu dGVjaC5kZT4gI3JrMzMyOCAoUm9ja2NoaXAgRFJNCiAgbWFpbnRhaW5lcjsgaGFyZHdhcmUtdGVz dGVkKQotIFNpZ25lZC1vZmYtYnk6IEpvbmFzIEthcmxtYW4gPGpvbmFzQGt3aWJvby5zZT4gKGF1 dGhvcikKLSBTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPiAo c3Vic3lzdGVtIG1haW50YWluZXIKICBhcHBsaWVkIGl0KQotIExpbms6CiAgaHR0cHM6Ly9wYXRj aC5tc2dpZC5saW5rLzIwMjYwNTE4MTkzNzQ4LjI0ODI4MjMtMTItam9uYXNAa3dpYm9vLnNlCi0g Tm8gRml4ZXM6LCBSZXBvcnRlZC1ieSwgUmV2aWV3ZWQtYnksIEFja2VkLWJ5LCBvciBDYzogc3Rh YmxlIChhYnNlbmNlCiAgZXhwZWN0ZWQpCi0gSWdub3JlIHBpcGVsaW5lIHRhZ3M6IFtVcHN0cmVh bSBjb21taXQKICBhZjNhOWVhZGMxMTg5NmY2Njc3YmNiNzEwMmJmYjdjODRiZTQ4ZDJkXSwgU2ln bmVkLW9mZi1ieTogU2FzaGEgTGV2aW4KCk5vdGFibGU6IG1haW50YWluZXIgVGVzdGVkLWJ5IG9u IHJlYWwgUkszMzI4IGhhcmR3YXJlLgoKU3RlcCAxLjM6IEFOQUxZWkUgVEhFIENPTU1JVCBCT0RZ IFRFWFQKUmVjb3JkOgotIEJ1Zzogb24gc3lzdGVtIHJlc3VtZSwgYHJvY2tjaGlwX2RybV9zeXNf cmVzdW1lKClgIOKGkgogIGBkcm1fbW9kZV9jb25maWdfaGVscGVyX3Jlc3VtZSgpYCDihpIgYXRv bWljIGVuYWJsZSBydW5zIGJlZm9yZQogIGBkd19oZG1pX3Jlc3VtZSgpYCDihpIgYGR3X2hkbWlf aW5pdF9odygpYC4KLSBTeW1wdG9tOiBIRE1JIGhhcmR3YXJlIChEREMgSTJDLCBIUEQsIGludGVy cnVwdCBtdXRlcykgaXMgcmVzdG9yZWQKICBhZnRlciBEUk0gaGFzIGFscmVhZHkgdHJpZWQgdG8g cmUtZW5hYmxlIHRoZSBkaXNwbGF5IHBpcGVsaW5lLgotIFNlY29uZGFyeTog4oCccG9zc2libGUg TlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHRpbWluZyBpc3N1ZeKAnSDigJQgcmVzdW1lCiAgY2Fu IHJ1biB3aXRoIE5VTEwgZHJ2ZGF0YS4KLSBObyBzdGFjayB0cmFjZSwgc3l6Ym90IHJlcG9ydCwg b3IgQ1ZFLiBBdXRob3IgZ2F2ZSBzaW11bGF0ZWQtc3VzcGVuZAogIChgcG1fdGVzdGApIGFuZCBg cnRjd2FrZWAgdGVzdCBzdGVwcyBpbiB0aGUgbWFpbGluZy1saXN0IHZlcnNpb24uCgpTdGVwIDEu NDogREVURUNUIEhJRERFTiBCVUcgRklYRVMKUmVjb3JkOiBOb3QgZGlzZ3Vpc2VkLiBJdCBpcyBh biBleHBsaWNpdCBQTS1vcmRlcmluZyBmaXggcGx1cyBhIE5VTEwKY2hlY2suIEl0IHdhcyBwYXRj aCAxMS8xMSBvZiBhIHNlcmllcyB0aXRsZWQg4oCcTWlzYyBjbGVhbnVwIGFuZCBwcm9wYWdhdGUK YnVzIGZvcm1hdOKAnSwgYW5kIHdhcyBhZGRlZCBpbiB2MjsgdGhlIG90aGVyIHBhdGNoZXMgYXJl IHVucmVsYXRlZApjbGVhbnVwcy9wcmVwLiBUaGlzIGh1bmsgaXMgYSBzdGFuZGFsb25lIGJ1ZyBm aXguCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUEhBU0UgMjogRElGRiBBTkFMWVNJUyAtIExJTkUgQlkgTElORQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K ClN0ZXAgMi4xOiBJTlZFTlRPUlkgVEhFIENIQU5HRVMKUmVjb3JkOgotIEZpbGU6IGBkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jYCAoKzQvLTMsIDcgbGluZXMpCi0g RnVuY3Rpb25zOiBgZHdfaGRtaV9yb2NrY2hpcF9yZXN1bWVgIHJlbmFtZWQgdG8KICBgZHdfaGRt aV9yb2NrY2hpcF9yZXN1bWVfZWFybHlgOyBgZHdfaGRtaV9yb2NrY2hpcF9wbWAgdGFibGUKLSBT Y29wZTogc2luZ2xlLWZpbGUgc3VyZ2ljYWwgUE0tb3BzIGNoYW5nZQoKU3RlcCAyLjI6IFVOREVS U1RBTkQgVEhFIENPREUgRkxPVyBDSEFOR0UKUmVjb3JkOgotIEJlZm9yZTogYC5yZXN1bWVgIChu b3JtYWwgcGhhc2UpIHVuY29uZGl0aW9uYWxseSBjYWxscwogIGBkd19oZG1pX3Jlc3VtZShoZG1p LT5oZG1pKWAuCi0gQWZ0ZXI6IGAucmVzdW1lX2Vhcmx5YCAoZWFybHkgcGhhc2UpIGNhbGxzIGl0 IG9ubHkgaWYKICBgZGV2X2dldF9kcnZkYXRhKClgIGlzIG5vbi1OVUxMLgotIGBTRVRfU1lTVEVN X1NMRUVQX1BNX09QUyhOVUxMLCByZXN1bWUpYCDihpIKICBgU0VUX0xBVEVfU1lTVEVNX1NMRUVQ X1BNX09QUyhOVUxMLCByZXN1bWVfZWFybHkpYC4KLSBTdXNwZW5kIHJlbWFpbnMgTlVMTC4gSGli ZXJuYXRpb24gdGhhdy9yZXN0b3JlIG1vdmUgZnJvbSB0aGF3L3Jlc3RvcmUKICB0byB0aGF3X2Vh cmx5L3Jlc3RvcmVfZWFybHksIG1hdGNoaW5nIHRoZSBzYW1lIG9yZGVyaW5nIGludGVudC4KClJl c3VtZSBwaGFzZSBvcmRlciBpcyByZXN1bWVfbm9pcnEg4oaSIHJlc3VtZV9lYXJseSDihpIgcmVz dW1lLiBIRE1JCnRoZXJlZm9yZSBhbHdheXMgcmUtaW5pdHMgYmVmb3JlIHJvY2tjaGlwLWRybeKA mXMgYC5yZXN1bWVgLgoKU3RlcCAyLjM6IElERU5USUZZIFRIRSBCVUcgTUVDSEFOSVNNClJlY29y ZDoKLSBQcmltYXJ5OiBsb2dpYy9jb3JyZWN0bmVzcyArIGhhcmR3YXJlIHJlc3VtZSBvcmRlcmlu Zy4gU2libGluZyBgZHctCiAgbWlwaS1kc2ktcm9ja2NoaXAuY2AgYWxyZWFkeSB1c2VzIGBTRVRf TEFURV9TWVNURU1fU0xFRVBfUE1fT1BTYCB3aXRoCiAgdGhlIGNvbW1lbnQgdGhhdCBpdCBtdXN0 IHJ1biBiZWZvcmUgYHJvY2tjaGlwX2RybV9kcnZgIHJlLWVuYWJsZXMKICBwYW5lbHMuCi0gU2Vj b25kYXJ5OiBtZW1vcnkgc2FmZXR5IOKAlCBOVUxMIGNoZWNrIGJlZm9yZSBgaGRtaS0+aGRtaWAg ZGVyZWZlcmVuY2UKICB3aGVuIHRoZSBwbGF0Zm9ybSBkZXZpY2UgaGFzIHByb2JlZCAoYGNvbXBv bmVudF9hZGRgKSBidXQgbm90IGJvdW5kCiAgKGBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YWAgaXMgaW4g YmluZCwgbm90IHByb2JlKS4KClN0ZXAgMi40OiBBU1NFU1MgVEhFIEZJWCBRVUFMSVRZClJlY29y ZDoKLSBPYnZpb3VzbHkgY29ycmVjdDogTGludXggUE0gcnVucyBhbGwgYHJlc3VtZV9lYXJseWAg Y2FsbGJhY2tzIGJlZm9yZQogIGFueSBgLnJlc3VtZWAuIFRoYXQgaXMgdGhlIHN0YW5kYXJkIHdh eSB0byBvcmRlciBhIGNvbXBvbmVudCBhaGVhZCBvZgogIHRoZSBEUk0gbWFzdGVyLgotIE1pbmlt YWw7IG5vIEFQSSBvciBkYXRhLXN0cnVjdHVyZSBjaGFuZ2UuCi0gUmVncmVzc2lvbiByaXNrIGxv dzogc2FtZSBwYXR0ZXJuIGFzIHRoZSBpbi10cmVlIERTSSBzaWJsaW5nOyBvbmx5CiAgcmVzdW1l IGlzIHJlZ2lzdGVyZWQ7IGBkd19oZG1pX2luaXRfaHcoKWAgb25seSByZS1pbml0cyBtdXRlcywg RERDCiAgSTJDLCBhbmQgSFBELgotIE5VTEwgY2hlY2sgZG9lcyBub3QgY292ZXIgYGhkbWktPmhk bWlgIGJlaW5nIGBFUlJfUFRSYCBhZnRlciBhIGZhaWxlZAogIGJpbmQ7IHRoYXQgaXMgYSBsZWZ0 b3ZlciBob2xlLCBub3QgYSByZWdyZXNzaW9uIGZyb20gdGhpcyBwYXRjaC4KCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQSEFT RSAzOiBHSVQgSElTVE9SWSBJTlZFU1RJR0FUSU9OCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKU3RlcCAzLjE6IEJMQU1FIFRI RSBDSEFOR0VEIExJTkVTClJlY29yZDoKLSBCdWdneSByZXN1bWUgcGF0aCBpbnRyb2R1Y2VkIGJ5 IGAyN2M5MTMwYmFlZjU0M2AgKOKAnGRybS9yb2NrY2hpcDoKICBkd19oZG1pOiBIYW5kbGUgc3Vz cGVuZC9yZXN1bWXigJ0sIERvdWdsYXMgQW5kZXJzb24sIDIwMTktMDYtMDQpLCBmaXJzdAogIGlu IHY1LjMtcmMxLgotIFRoYXQgY29tbWl0IGlzIGFuIGFuY2VzdG9yIG9mIHRoaXMgdHJlZS4KLSBU aGF0IGNvbW1pdCBhbHJlYWR5IGRvY3VtZW50ZWQgdGhlIGZhaWx1cmUgb24gcmszMjg4IENocm9t ZWJvb2tzIChIRE1JCiAgSFBEIGFuZCBEREMgSTJDIHN0b3Agd29ya2luZyBhZnRlciBzdXNwZW5k KSBhbmQgdGhhdCBDaHJvbWUgT1MgMy4xNAogIHVzZWQgbGF0ZS9lYXJseSBQTSBvcHMgYmVjYXVz ZSBWT1Agc29tZXRpbWVzIHJlc3VtZWQgYmVmb3JlIGR3LWhkbWkuCiAgTWFpbmxpbmUgdXNlZCBu b3JtYWwgYC5yZXN1bWVgIGJlY2F1c2UgdGhlIGF1dGhvciBjb3VsZCBub3QgcmVwcm9kdWNlCiAg aXQgdGhlbi4gVGhpcyBwYXRjaCBpcyB0aGUgcHJvcGVyIGxhdGUvZWFybHkgZml4IGZvciB0aGF0 IGtub3duIGlzc3VlLgoKU3RlcCAzLjI6IEZPTExPVyBUSEUgRklYRVM6IFRBRwpSZWNvcmQ6IE5v IEZpeGVzOiB0YWcuIFRoZSBpbnRyb2R1Y2luZyBjb21taXQgaXMgYDI3YzkxMzBiYWVmNTQzYCwK cHJlc2VudCBoZXJlLgoKU3RlcCAzLjM6IENIRUNLIEZJTEUgSElTVE9SWSBGT1IgUkVMQVRFRCBD SEFOR0VTClJlY29yZDoKLSBPbmx5IHR3byByZXN1bWUtcmVsYXRlZCBjb21taXRzIG9uIHRoaXMg ZmlsZTogMjdjOTEzMGJhZWY1NDMgKGFkZAogIHJlc3VtZSkgYW5kIHRoaXMgb25lLgotIFJlY2Vu dCA2LjE4LnkgZmlsZSBoaXN0b3J5IGlzIHVucmVsYXRlZCAoU0NMSU4gbWFzaywgRklFTERfUFJF UCwKICB3aGl0ZXNwYWNlKS4KLSBTZXJpZXMtbG9jYWwgbmVpZ2hib3JzIChvdXRwdXRfcG9ydCwg d2hpdGVzcGFjZSwgZW1wdHkgaGVscGVycykgYXJlCiAgbm90IGZ1bmN0aW9uYWwgcHJlcmVxdWlz aXRlcyBvZiB0aGlzIGh1bmsuCgpTdGVwIDMuNDogQ0hFQ0sgVEhFIEFVVEhPUidTIE9USEVSIENP TU1JVFMKUmVjb3JkOiBKb25hcyBLYXJsbWFuIGlzIGEgcmVndWxhciBSb2NrY2hpcCBIRE1JL2R3 LWhkbWkgY29udHJpYnV0b3IuCkhlaWtvIFN0dWVibmVyIChtYWludGFpbmVyKSBhcHBsaWVkIHRo ZSBzZXJpZXMgYW5kIHRlc3RlZCBpdCBvbiByazMzMjguCgpTdGVwIDMuNTogQ0hFQ0sgRk9SIERF UEVOREVOVC9QUkVSRVFVSVNJVEUgQ09NTUlUUwpSZWNvcmQ6Ci0gU2VyaWVzIHYyIDExLzExOyBj b3ZlciBsZXR0ZXIgc2F5cyBwYXRjaGVzIDHigJMxMCBhcmUgY2xlYW51cCAvIFlDYkNyLQogIERl ZXAgQ29sb3IgcHJlcC4gUGF0Y2ggMTEgb25seSBjaGFuZ2VzIFBNIG9wcy4KLSBgU0VUX0xBVEVf U1lTVEVNX1NMRUVQX1BNX09QU2AgZXhpc3RzIGluIHRoaXMgdHJlZeKAmXMKICBgaW5jbHVkZS9s aW51eC9wbS5oYC4KLSBgZHdfaGRtaV9yZXN1bWUoKWAgZXhpc3RzIGluIGBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3N5bm9wc3lzL2R3LQogIGhkbWkuY2AuCi0gQXBwbGllcyBzdGFuZGFsb25lLiBO byBtaXNzaW5nIGhlbHBlcnMuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhBU0UgNDogTUFJTElORyBMSVNUIEFORCBFWFRF Uk5BTCBSRVNFQVJDSAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KClN0ZXAgNC4xOiBGSU5EIFRIRSBPUklHSU5BTCBQQVRDSCBE SVNDVVNTSU9OClJlY29yZDoKLSBiNCBkaWc6CiAgaHR0cHM6Ly9wYXRjaC5tc2dpZC5saW5rLzIw MjYwNTE4MTkzNzQ4LjI0ODI4MjMtMTItam9uYXNAa3dpYm9vLnNlCi0gdjEgKDIwMjYtMDUtMTAp OiAxMCBwYXRjaGVzLCBubyByZXN1bWVfZWFybHkgY2hhbmdlCi0gdjIgKDIwMjYtMDUtMTgpOiB0 aGlzIHBhdGNoIGFkZGVkICjigJx2MjogTmV3IHBhdGNo4oCdKQotIEFwcGxpZWQgYnkgSGVpa28g MjAyNi0wNi0wMiBhcwogIGBhZjNhOWVhZGMxMTg5NmY2Njc3YmNiNzEwMmJmYjdjODRiZTQ4ZDJk YAotIE5vIE5BSy4gTm8gcmV2aWV3ZXIgYXNrZWQgZm9yIGZ1cnRoZXIgcmV2aXNpb25zIG9mIHRo aXMgaHVuay4KLSBBdXRob3IgaW5jbHVkZWQgQ09ORklHX1BNX0RFQlVHIC8gcnRjd2FrZSB0ZXN0 IGluc3RydWN0aW9ucyBhbmQgbm90ZWQKICBhIHNlcGFyYXRlIFJLMzU2eCBFSENJL09IQ0kgY2xv Y2sgaXNzdWUsIG5vdCB0aGlzIGJ1Zy4KClN0ZXAgNC4yOiBDSEVDSyBXSE8gUkVWSUVXRUQgVEhF IFBBVENIClJlY29yZDogUmVjaXBpZW50cyBpbmNsdWRlZCBIZWlrbyBTdHVlYm5lciwgU2FuZHkg SHVhbmcsIEFuZHkgWWFuLCBEUk0KbWFpbnRhaW5lcnMsIGRyaS1kZXZlbCwgbGludXgtcm9ja2No aXAuIEhlaWtvIHRlc3RlZCBhbmQgYXBwbGllZC4gTm8Kb3RoZXIgQWNrZWQtYnkvUmV2aWV3ZWQt Ynkgb24gdGhpcyBwYXRjaC4KClN0ZXAgNC4zOiBTRUFSQ0ggRk9SIFRIRSBCVUcgUkVQT1JUClJl Y29yZDogTm8gc3l6Ym90L2J1Z3ppbGxhIGxpbmsuIFJlYWwtd29ybGQgZ3JvdW5kaW5nIGlzIHRo ZSAyMDE5CkNocm9tZWJvb2sgcmVwb3J0IGluIDI3YzkxMzBiYWVmNTQzIHBsdXMgSGVpa2/igJlz IHJrMzMyOCBUZXN0ZWQtYnkuCgpTdGVwIDQuNDogQ0hFQ0sgRk9SIFJFTEFURUQgUEFUQ0hFUyBB TkQgU0VSSUVTClJlY29yZDogU3RhbmRhbG9uZSB2cyB0aGUgcmVzdCBvZiB0aGUgdjIgc2VyaWVz LiBEU0kgc2libGluZwpgZTU4NGNkYzE1NDk5M2AgKOKAnGRybS9yb2NrY2hpcDogZHNpOiBSZWNv bmZpZ3VyZSBoYXJkd2FyZSBvbiByZXN1bWUoKeKAnSkKdXNlZCB0aGUgc2FtZSBsYXRlIFBNIG9w cyBhbmQgaGFkIENjOiBzdGFibGUuCgpTdGVwIDQuNTogQ0hFQ0sgU1RBQkxFIE1BSUxJTkcgTElT VCBISVNUT1JZClJlY29yZDogVU5WRVJJRklFRC4gbG9yZS5rZXJuZWwub3JnL3N0YWJsZSByZXR1 cm5lZCBhbiBBbnViaXMgYm90LWNoZWNrCnBhZ2U7IFdlYkZldGNoIHRvIGxvcmUgcmV0dXJuZWQg NDAzLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClBIQVNFIDU6IENPREUgU0VNQU5USUMgQU5BTFlTSVMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpTdGVw IDUuMTogSURFTlRJRlkgS0VZIEZVTkNUSU9OUyBJTiBUSEUgRElGRgpSZWNvcmQ6IGBkd19oZG1p X3JvY2tjaGlwX3Jlc3VtZV9lYXJseWAgKHdhcyBgZHdfaGRtaV9yb2NrY2hpcF9yZXN1bWVgKTsK YGR3X2hkbWlfcm9ja2NoaXBfcG1gLgoKU3RlcCA1LjI6IFRSQUNFIENBTExFUlMKUmVjb3JkOiBJ bnZva2VkIGJ5IHRoZSBQTSBjb3JlIGFzIGBkZXZfcG1fb3BzLnJlc3VtZV9lYXJseWAgb24gdGhl CmBkd2hkbWktcm9ja2NoaXBgIHBsYXRmb3JtIGRyaXZlci4gVHJpZ2dlcmVkIGJ5IHN5c3RlbSBz dXNwZW5kL3Jlc3VtZQooYW5kIGZyZWV6ZS90aGF3L3Jlc3RvcmUgdmlhIExBVEVfU1lTVEVNX1NM RUVQX1BNX09QUykuIE5vdCBhIHN5c2NhbGwKaG90IHBhdGg7IGl0IGlzIHRoZSBDaHJvbWVib29r L1NCQyBzbGVlcCBwYXRoLgoKU3RlcCA1LjM6IFRSQUNFIENBTExFRVMKUmVjb3JkOiBgZGV2X2dl dF9kcnZkYXRhYCDihpIgYGR3X2hkbWlfcmVzdW1lYCDihpIgYGR3X2hkbWlfaW5pdF9od2Ag4oaS CmBpbml0aWFsaXplX2hkbWlfaWhfbXV0ZXNgLCBgZHdfaGRtaV9pMmNfaW5pdGAsIG9wdGlvbmFs CmBwaHkub3BzLT5zZXR1cF9ocGRgLgoKU3RlcCA1LjQ6IEZPTExPVyBUSEUgQ0FMTCBDSEFJTgpS ZWNvcmQ6Ci0gVXNlcnNwYWNlOiBgZWNobyBtZW0gPiAvc3lzL3Bvd2VyL3N0YXRlYCAvIHJ0Y3dh a2UgLyBzeXN0ZW1kIHN1c3BlbmQuCi0gRFJNIHNpZGU6IGByb2NrY2hpcF9kcm1fc3lzX3Jlc3Vt ZWAg4oaSIGBkcm1fbW9kZV9jb25maWdfaGVscGVyX3Jlc3VtZWAKICDihpIgYGRybV9hdG9taWNf aGVscGVyX3Jlc3VtZWAgKGF0b21pYyBjb21taXQgLyBlbmFibGUpLgotIEhETUkgcGxhdGZvcm0g ZGV2aWNlIGlzIGEgY29tcG9uZW50LCBub3QgYSBjaGlsZCBvZiB0aGUgRFJNIGRldmljZTsKICBz aWJsaW5nIGAucmVzdW1lYCBvcmRlciBpcyBub3QgZ3VhcmFudGVlZC4gYHBsYXRmb3JtX3NldF9k cnZkYXRhYCBpcwogIGluIGBkd19oZG1pX3JvY2tjaGlwX2JpbmRgLCB3aGlsZSBwcm9iZSBvbmx5 IGRvZXMgYGNvbXBvbmVudF9hZGRgLCBzbwogIHJlc3VtZS1iZWZvcmUtYmluZCBjYW4gc2VlIE5V TEwgZHJ2ZGF0YS4KLSBSZWFjaGFibGUgb24gYW55IFJvY2tjaGlwIGJvYXJkIHdpdGggdGhpcyBI RE1JIElQIGFuZCBDT05GSUdfUE1fU0xFRVAKICAoUkszMjg4L1JLMzMyOC9SSzMzOTkvUkszNTY4 LCBpbmNsdWRpbmcgQ2hyb21lYm9va3MpLgoKU3RlcCA1LjU6IFNFQVJDSCBGT1IgU0lNSUxBUiBQ QVRURVJOUwpSZWNvcmQ6Ci0gYGR3LW1pcGktZHNpLXJvY2tjaGlwLmNgIGFscmVhZHkgdXNlcwog IGBTRVRfTEFURV9TWVNURU1fU0xFRVBfUE1fT1BTKE5VTEwsIGR3X21pcGlfZHNpX3JvY2tjaGlw X3Jlc3VtZSlgIGluCiAgdGhpcyB0cmVlIGZvciB0aGUgc2FtZSByZWFzb24uCi0gYGR3X2hkbWlf cXAtcm9ja2NoaXAuY2Agc3RpbGwgdXNlcyBgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFNgCiAgKGRp ZmZlcmVudCBIRE1JIFFQIElQLCBub3QgdGhpcyBwYXRjaCkuCi0gaW14OG1wIGFuZCBtZXNvbiBk dy1oZG1pIGdsdWUgc3RpbGwgdXNlIG5vcm1hbCBTWVNURU1fU0xFRVAgUE0gb3BzLgoKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClBIQVNFIDY6IENST1NTLVJFRkVSRU5DSU5HIEFHQUlOU1QgVEhFIExPQ0FMIFRSRUUKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CgpTdGVwIDYuMTogRE9FUyBUSEUgQlVHR1kgQ09ERSBFWElTVCBJTiBUSElTIFRSRUU/ClJlY29y ZDoKLSBMb2NhbCB0cmVlOiBgZ2l0IGRlc2NyaWJlIEhFQURgID0gdjYuMTguNTMtNTA0OS1nMGYw YmRjMmIwZGZmYjsgYG1ha2UKICBrZXJuZWx2ZXJzaW9uYCA9IDYuMTguNTMgKDYuMTgueSkuCi0g djYuMTguNTMgc3RpbGwgaGFzOgogIGBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhOVUxMLCBkd19o ZG1pX3JvY2tjaGlwX3Jlc3VtZSlgCiAgYW5kIGBkd19oZG1pX3Jlc3VtZShoZG1pLT5oZG1pKWAg d2l0aCBubyBOVUxMIGNoZWNrCiAgYXQgYGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kd19oZG1p LXJvY2tjaGlwLmNgLgotIEJ1ZyBwcmVzZW50IHNpbmNlIHY1LjMgKDIwMTkpLCBsb25nIGJlZm9y ZSA2LjE4IGJyYW5jaGVkLgotIFVwc3RyZWFtIGNvbW1pdCBgYWYzYTllYWRjMTE4OTZgIGlzIG5v dCBhbiBhbmNlc3RvciBvZiBIRUFEIChgZ2l0CiAgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yYCBm YWlsZWQpOyB0aGlzIGlzIGEgYmFja3BvcnQgY2FuZGlkYXRlLCBub3QKICBhbHJlYWR5IGluIDYu MTgueSBwcm9wZXIuCgpTdGVwIDYuMjogQ0hFQ0sgRk9SIEJBQ0tQT1JUIENPTVBMSUNBVElPTlMK UmVjb3JkOiBDbGVhbiBhcHBseS4gVGhlIHJlc3VtZSBmdW5jdGlvbiBpbiB2Ni4xOC41MyBpcyBp ZGVudGljYWwgdG8gdGhlCnBhcmVudCBvZiB0aGlzIGNoYW5nZS4gYFNFVF9MQVRFX1NZU1RFTV9T TEVFUF9QTV9PUFNgIGFuZApgZHdfaGRtaV9yZXN1bWUoKWAgYWxyZWFkeSBleGlzdCBoZXJlLiBT dXJyb3VuZGluZyB1bmJpbmQvYnJpZGdlLXJlZgpjaGFuZ2VzIGZyb20gbGF0ZXIgc2VyaWVzIHBh dGNoZXMgYXJlIG5vdCByZXF1aXJlZC4KClN0ZXAgNi4zOiBDSEVDSyBJRiBSRUxBVEVEIEZJWEVT IEFSRSBBTFJFQURZIEhFUkUKUmVjb3JkOiBObyBvdGhlciByZXN1bWUtb3JkZXJpbmcgZml4IG9u IHRoaXMgZmlsZS4gRFNJIGFscmVhZHkgaGFzIHRoZQphbmFsb2dvdXMgTEFURSBQTSBvcHMuIE5v IGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIEhETUkgZml4IGluIDYuMTguNTMuCgo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUEhB U0UgNzogU1VCU1lTVEVNIEFORCBNQUlOVEFJTkVSIENPTlRFWFQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpTdGVwIDcuMTog SURFTlRJRlkgVEhFIFNVQlNZU1RFTSBBTkQgSVRTIENSSVRJQ0FMSVRZClJlY29yZDogRFJNIFJv Y2tjaGlwIEhETUkgZ2x1ZSAoYGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9gKS4gSU1QT1JUQU5U Cihjb21tb24gU29DIGRpc3BsYXksIG5vdCBjb3JlIG1tL2ZzKS4gQWZmZWN0cwpSSzMyODgvUksz MzI4L1JLMzM5OS9SSzM1NnggSERNSSAoQ2hyb21lYm9va3MsIFNCQ3MsIFRWIGJveGVzKS4KClN0 ZXAgNy4yOiBBU1NFU1MgU1VCU1lTVEVNIEFDVElWSVRZClJlY29yZDogTWF0dXJlIGRyaXZlciAo SERNSSBnbHVlIHNpbmNlIH4yMDE1KS4gUmVzdW1lIHBhdGggdW50b3VjaGVkCmZyb20gMjAxOSB1 bnRpbCB0aGlzIHBhdGNoLiBMb3cgY2h1cm4gb24gdGhlIFBNIG9wcyB0aGVtc2VsdmVzLgoKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClBIQVNFIDg6IElNUEFDVCBBTkQgUklTSyBBU1NFU1NNRU5UCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKU3RlcCA4LjE6 IERFVEVSTUlORSBXSE8gSVMgQUZGRUNURUQKUmVjb3JkOiBEcml2ZXItc3BlY2lmaWMgLyBwbGF0 Zm9ybS1zcGVjaWZpYy4gVXNlcnMgb2YgUm9ja2NoaXAgZHctaGRtaQp3aG8gc3VzcGVuZCB0aGUg c3lzdGVtLiBDT05GSUdfUE1fU0xFRVAuIE5vdCB1bml2ZXJzYWwsIGJ1dCBhIHdlbGwtdXNlZApw bGF0Zm9ybSBjbGFzcyBpbiBBbmRyb2lkLCBDaHJvbWVib29rLCBhbmQgQVJNIFNCQ3MuCgpTdGVw IDguMjogREVURVJNSU5FIFRIRSBUUklHR0VSIENPTkRJVElPTlMKUmVjb3JkOgotIFRyaWdnZXI6 IHN5c3RlbSBzdXNwZW5kL3Jlc3VtZSB3aXRoIHRoaXMgSERNSSBkcml2ZXIgYm91bmQgKGFuZCB0 aGUKICBOVUxMIHBhdGggaWYgcHJvYmVkIGJ1dCB1bmJvdW5kKS4KLSBDb21tb24gb24gbGFwdG9w cy9DaHJvbWVib29rczsgbGVzcyBzbyBvbiBhbHdheXMtb24gYXBwbGlhbmNlcy4KLSBVbnByaXZp bGVnZWQgdXNlcnMgdHlwaWNhbGx5IGNhbm5vdCBzdXNwZW5kOyB0aGUgSFBEL0kyQyBicmVhayBp cwogIHN0aWxsIGEgcmVhbCBhZG1pbi91c2VyLXZpc2libGUgZmFpbHVyZSBhZnRlciBsaWQtY2xv c2Uvc2xlZXAuCgpTdGVwIDguMzogREVURVJNSU5FIFRIRSBGQUlMVVJFIE1PREUgU0VWRVJJVFkK UmVjb3JkOgotIFByaW1hcnk6IEhETUkgSFBEIGFuZCBEREMgSTJDIG5vdCByZXN0b3JlZCBiZWZv cmUgRFJNIGF0b21pYyBlbmFibGUg4oaSCiAgaG90cGx1Zy9FRElEL291dHB1dCBicm9rZW4gYWZ0 ZXIgcmVzdW1lLiBISUdIIGZvciBhZmZlY3RlZCBoYXJkd2FyZQogIChkaXNwbGF5IG5vdCBjb21p bmcgYmFjayBpcyBhIHNlcmlvdXMgZnVuY3Rpb25hbCBidWcpLCBub3QgYSBrZXJuZWwKICBwYW5p Yy4KLSBTZWNvbmRhcnk6IE5VTEwgZGVyZWYgaWYgcmVzdW1lIHJ1bnMgYmVmb3JlIGJpbmQg4oaS IG9vcHMuIExlc3MgY29tbW9uLgogIEhJR0ggaWYgaGl0LCBNRURJVU0gbGlrZWxpaG9vZC4KLSBP dmVyYWxsOiBISUdIIChzdXNwZW5kL3Jlc3VtZSBkaXNwbGF5IGJyZWFrYWdlIG9uIHJlYWwgaGFy ZHdhcmUpLgoKU3RlcCA4LjQ6IENBTENVTEFURSBSSVNLLUJFTkVGSVQgUkFUSU8KUmVjb3JkOgot IEJlbmVmaXQ6IGhpZ2ggZm9yIFJvY2tjaGlwIEhETUkgc3VzcGVuZCB1c2VyczsgcmVzdG9yZXMg dGhlIG9yZGVyaW5nCiAgQ2hyb21lIE9TIGFscmVhZHkgbmVlZGVkLgotIFJpc2s6IHZlcnkgbG93 ICg3IGxpbmVzLCBlc3RhYmxpc2hlZCBMQVRFIFBNIHBhdHRlcm4gYWxyZWFkeSBpbiB0aGUKICBz YW1lIERSTSBkcml2ZXIpLgotIFJhdGlvOiBmYXZvciBiYWNrcG9ydC4KCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpQSEFTRSA5 OiBGSU5BTCBTWU5USEVTSVMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CgpTdGVwIDkuMTogQ09NUElMRSBUSEUgRVZJREVOQ0UK Rk9SOgotIFJlYWwgcmVzdW1lLW9yZGVyaW5nIGJ1ZzogRFJNIGF0b21pYyBlbmFibGUgYmVmb3Jl CiAgYGR3X2hkbWlfaW5pdF9odygpYC4KLSBVc2VyLXZpc2libGU6IEhETUkgSFBEL0REQyBicm9r ZW4gYWZ0ZXIgc2xlZXAgKGRvY3VtZW50ZWQgb24gcmszMjg4CiAgQ2hyb21lYm9va3MgaW4gMjAx OTsgcmUtdGVzdGVkIG9uIHJrMzMyOCBpbiAyMDI2KS4KLSBTYW1lIGZpeCBhbHJlYWR5IHVzZWQg YnkgZHctbWlwaS1kc2ktcm9ja2NoaXAgaW4gdGhpcyB0cmVlLCBhbmQgdGhhdAogIERTSSBjaGFu Z2Ugd2VudCB0byBzdGFibGUgd2l0aCBDYzogc3RhYmxlLgotIFBvc3NpYmxlIE5VTEwgZGVyZWYg b24gcmVzdW1lIGJlZm9yZSBiaW5kLgotIDctbGluZSBzdXJnaWNhbCBjaGFuZ2U7IGFwcGxpZXMg Y2xlYW5seSB0byB2Ni4xOC41My4KLSBNYWludGFpbmVyIFRlc3RlZC1ieSBhbmQgU2lnbmVkLW9m Zi1ieS4KLSBCdWdneSBjb2RlIGhhcyBiZWVuIGluIHRoaXMgdHJlZSBzaW5jZSB2NS4zOyBubyBt aXNzaW5nIHByZXJlcXVpc2l0ZXMuCgpBR0FJTlNUOgotIE5vIEZpeGVzOi9DYzogc3RhYmxlIChl eHBlY3RlZCBmb3IgdGhpcyBwaXBlbGluZTsgbm90IGEgbmVnYXRpdmUpLgotIEJ1cmllZCBhcyAx MS8xMSBpbiBhIGNsZWFudXAgc2VyaWVzIChidXQgdGhlIGh1bmsgaXMgaW5kZXBlbmRlbnQgYW5k CiAgd2FzIGFkZGVkIHNwZWNpZmljYWxseSBpbiB2MikuCi0gTm90IGEgcGFuaWMvY29ycnVwdGlv bi9DVkU7IGRpc3BsYXktYWZ0ZXItc3VzcGVuZCByYXRoZXIgdGhhbiBhIGNyYXNoLgotIE5vIGV4 dHJhIFJldmlld2VkLWJ5IGJlc2lkZXMgbWFpbnRhaW5lciBhcHBseS90ZXN0LgotIFVOVkVSSUZJ RUQgd2hldGhlciBzdGFibGVAIGFscmVhZHkgZGlzY3Vzc2VkIHJlamVjdGluZyBpdC4KClVOUkVT T0xWRUQ6Ci0gbG9yZS5rZXJuZWwub3JnL3N0YWJsZSBzZWFyY2ggYmxvY2tlZCAoQW51YmlzLzQw MykuCi0gSW5jb21wbGV0ZSBOVUxMIGNoZWNrIGlmIGJpbmQgZmFpbGVkIGFuZCBsZWZ0IGBoZG1p LT5oZG1pYCBhcyBFUlJfUFRSCiAgKHByZS1leGlzdGluZykuCgpTdGVwIDkuMjogQVBQTFkgVEhF IFNUQUJMRSBSVUxFUyBDSEVDS0xJU1QKMS4gT2J2aW91c2x5IGNvcnJlY3QgYW5kIHRlc3RlZD8g UEFTUyDigJQgUE0gcGhhc2Ugb3JkZXJpbmcgaXMgd2VsbC0KICAgZGVmaW5lZDsgSGVpa28gdGVz dGVkIG9uIHJrMzMyOC4KMi4gRml4ZXMgYSByZWFsIGJ1ZyB0aGF0IGFmZmVjdHMgdXNlcnM/IFBB U1Mg4oCUIEhETUkgbm90IGNvcnJlY3RseSByZS0KICAgaW5pdGVkIGJlZm9yZSBEUk0gcmVzdW1l OyBDaHJvbWVib29rLWNsYXNzIGhhcmR3YXJlLgozLiBJbXBvcnRhbnQgaXNzdWUgKGNyYXNoLCBz ZWN1cml0eSwgY29ycnVwdGlvbiwgZGVhZGxvY2spPyBQQVNTIOKAlAogICBzdXNwZW5kL3Jlc3Vt ZSBkaXNwbGF5IGJyZWFrYWdlIHBsdXMgYSBwb3NzaWJsZSBvb3BzOyBoYXJkd2FyZSByZXN1bWUK ICAgd29ya2Fyb3VuZCwgc2FtZSBjbGFzcyBhcyB0aGUgRFNJIHN0YWJsZSBmaXguCjQuIFNtYWxs IGFuZCBjb250YWluZWQ/IFBBU1Mg4oCUIDcgbGluZXMsIG9uZSBmaWxlLgo1LiBObyBuZXcgZmVh dHVyZXMgb3IgQVBJcz8gUEFTUy4KNi4gQ2FuIGFwcGx5IHRvIHRoZSBsb2NhbCB0cmVlPyBQQVNT IOKAlCB2Ni4xOC41MyBoYXMgdGhlIG9sZCByZXN1bWUKICAgZnVuY3Rpb24gYW5kIHRoZSBMQVRF IFBNIG1hY3JvLgoKU3RlcCA5LjM6IENIRUNLIEZPUiBFWENFUFRJT04gQ0FURUdPUklFUwpSZWNv cmQ6IEhhcmR3YXJlIHN1c3BlbmQvcmVzdW1lIHdvcmthcm91bmQgb24gYW4gZXhpc3RpbmcgZHJp dmVyIChxdWlyay0KY2xhc3MpLiBOb3QgYSBuZXcgZHJpdmVyLCBJRCwgb3IgQVBJLgoKU3RlcCA5 LjQ6IE1BS0UgWU9VUiBERUNJU0lPTgpUaGlzIGJlbG9uZ3Mgb24gNi4xOC55LiBUaGUgYnVnZ3kg YC5yZXN1bWVgIHBhdGggaXMgaW4gdGhpcyBjaGVja291dCwKdGhlIHN3aXRjaCB0byBgcmVzdW1l X2Vhcmx5YCBpcyB0aGUgc2FtZSBwcm92ZW4gcGF0dGVybiBhcyB0aGUgaW4tdHJlZQpEU0kgc2li bGluZywgYW5kIHRoZSBwYXRjaCBpcyB0aW55IHdpdGggbWFpbnRhaW5lciBoYXJkd2FyZSB0ZXN0 aW5nLgoKV2hhdCBpdCBzb2x2ZXMgZm9yIHN0YWJsZSB1c2VyczogYWZ0ZXIgc3lzdGVtIHNsZWVw IG9uIFJvY2tjaGlwIGR3LWhkbWkKYm9hcmRzLCBEUk0gY2FuIHJlLWVuYWJsZSB0aGUgcGlwZWxp bmUgYmVmb3JlIEhETUkgRERDL0hQRC9pbml0LCBzbwpob3RwbHVnIGFuZCBIRE1JIG91dHB1dCBm YWlsLiBNb3ZpbmcgdGhlIGNhbGxiYWNrIHRvIGByZXN1bWVfZWFybHlgCmZvcmNlcyBgZHdfaGRt aV9pbml0X2h3KClgIGZpcnN0LCBhbmQgc2tpcHMgYSBOVUxMIGRydmRhdGEgZGVyZWYgaWYgdGhl CmNvbXBvbmVudCBuZXZlciBib3VuZC4KClJpc2sgaXMgbG93OyBiZW5lZml0IGlzIGEgcmVhbCBy ZXN1bWUgZml4IG9uIHNoaXBwaW5nIFNvQ3MuIE5vIHNlcmllcwpkZXBlbmRlbmNpZXMgYXJlIHJl cXVpcmVkIGZvciB0aGlzIGh1bmsuCgpWZXJpZmljYXRpb246Ci0gW1BoYXNlIDFdIFBhcnNlZCB0 YWdzOiBUZXN0ZWQtYnkgSGVpa28gKHJrMzMyOCksIFNPQiBKb25hcyArIEhlaWtvLAogIExpbmsg bXNnaWQgLi4uLTEyOyBubyBGaXhlcy9SZXBvcnRlZC1ieS9DYzpzdGFibGUKLSBbUGhhc2UgMV0g Q292ZXIgbGV0dGVyIHZpYSBiNCBtYm94OiBwYXRjaCAxMS8xMSBvZiB2MiDigJxNaXNjIGNsZWFu dXDigJ07CiAg4oCcdjI6IE5ldyBwYXRjaOKAnTsgSGVpa28g4oCcU2VyaWVzOiBUZXN0ZWQtYnni gJ0gYW5kIEFwcGxpZWQKLSBbUGhhc2UgMl0gRGlmZjogcmVuYW1lIHJlc3VtZeKGknJlc3VtZV9l YXJseSwgYWRkIGBpZiAoaGRtaSlgLAogIFNFVF9TWVNURU1fU0xFRVDihpJTRVRfTEFURV9TWVNU RU1fU0xFRVA7ICs0Ly0zCi0gW1BoYXNlIDJdIENvbmZpcm1lZCBMQVRFX1NZU1RFTV9TTEVFUF9Q TV9PUFMgbWFwcyByZXN1bWVfZm4gdG8KICBgLnJlc3VtZV9lYXJseWAgaW4gaW5jbHVkZS9saW51 eC9wbS5oOjMyMS0zMjcsMzUwLTM1MQotIFtQaGFzZSAyXSBDb25maXJtZWQgcm9ja2NoaXBfZHJt X2Rydi5jOjI2MC0yNjIgc3RpbGwgdXNlcwogIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BTIGZvciBz eXNfcmVzdW1lCi0gW1BoYXNlIDJdIGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfcmVzdW1lKCkgY2Fs bHMKICBkcm1fYXRvbWljX2hlbHBlcl9yZXN1bWUoKSAoZHJtX21vZGVzZXRfaGVscGVyLmM6MjUw KQotIFtQaGFzZSAzXSBnaXQgYmxhbWUgcGFyZW50OiByZXN1bWUgYWRkZWQgaW4gMjdjOTEzMGJh ZWY1NDMgKERvdWdsYXMKICBBbmRlcnNvbiwgMjAxOSkKLSBbUGhhc2UgM10gZ2l0IHNob3cgMjdj OTEzMGJhZWY1NDM6IGRvY3VtZW50ZWQgQ2hyb21lYm9vayBIUEQvSTJDIGJyZWFrCiAgYW5kIENo cm9tZSBPUyBsYXRlL2Vhcmx5IFBNIG9wcwotIFtQaGFzZSAzXSBnaXQgZGVzY3JpYmUgLS1jb250 YWlucyAyN2M5MTMwYmFlZjU0MyDihpIgdjUuMy1yYzE7IGdpdAogIG1lcmdlLWJhc2UgLS1pcy1h bmNlc3RvciAyN2M5MTMwYmFlZjU0MyBIRUFEIOKGkiB5ZXMKLSBbUGhhc2UgM10gZ2l0IGxvZyAt LW9uZWxpbmUgLS1ncmVwIHJlc3VtZV9lYXJseSAtLQogIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC8g4oaSIG9ubHkgdGhpcyBjb21taXQKLSBbUGhhc2UgNF0gYjQgZGlnIC1jIGFmM2E5ZWFkYzEx ODk2OiBsb3JlIHRocmVhZCBmb3VuZDsgdjEgaGFkIG5vIHRoaXMKICBwYXRjaDsgdjIgYWRkZWQg aXQ7IGFwcGxpZWQgYXMgYWYzYTllYWRjMTE4OTYKLSBbUGhhc2UgNF0gYjQgZGlnIC1hOiB2MSAy MDI2LTA1LTEwLCB2MiAyMDI2LTA1LTE4Ci0gW1BoYXNlIDRdIGI0IGRpZyAtdzogSGVpa28sIGRy aS1kZXZlbCwgbGludXgtcm9ja2NoaXAgQ0PigJlkCi0gW1BoYXNlIDRdIGI0IGRpZyAtbSAvdG1w L3RocmVhZC5tYm94OiBubyBOQUtzOyBIZWlrbyB0ZXN0ZWQrYXBwbGllZAotIFtQaGFzZSA0XSBs b3JlLmtlcm5lbC5vcmcgV2ViRmV0Y2ggNDAzOyBzdGFibGUgc2VhcmNoIEFudWJpcy1ibG9ja2Vk IOKGkgogIFVOVkVSSUZJRUQgc3RhYmxlQCBkaXNjdXNzaW9uCi0gW1BoYXNlIDVdIENhbGxlcnM6 IFBNIGNvcmUgcmVzdW1lX2Vhcmx5IG9uIGR3aGRtaS1yb2NrY2hpcDsgY2FsbGVlcwogIGR3X2hk bWlfcmVzdW1l4oaSZHdfaGRtaV9pbml0X2h3Ci0gW1BoYXNlIDVdIHBsYXRmb3JtX3NldF9kcnZk YXRhIGluIGJpbmQgKGxpbmUgNTgwKSwgcHJvYmUgb25seQogIGNvbXBvbmVudF9hZGQg4oCUIE5V TEwgZHJ2ZGF0YSBvbiB1bmJvdW5kIHJlc3VtZSBpcyByZWFsCi0gW1BoYXNlIDVdIFNpYmxpbmcg ZHctbWlwaS1kc2ktcm9ja2NoaXAuYzoxMzQ2IGFscmVhZHkKICBTRVRfTEFURV9TWVNURU1fU0xF RVBfUE1fT1BTIGluIHRoaXMgdHJlZTsgaW50cm9kdWNlZCBieSBlNTg0Y2RjMTU0OTkzCiAgd2l0 aCBDYzogc3RhYmxlCi0gW1BoYXNlIDZdIGdpdCBkZXNjcmliZSBIRUFEOiB2Ni4xOC41My01MDQ5 LWcwZjBiZGMyYjBkZmZiOyBtYWtlCiAga2VybmVsdmVyc2lvbiA2LjE4LjUzCi0gW1BoYXNlIDZd IGdpdCBzaG93IHY2LjE4LjUzOmR3X2hkbWktcm9ja2NoaXAuYyBoYXMKICBTRVRfU1lTVEVNX1NM RUVQX1BNX09QUyArIHVuY2hlY2tlZCBkd19oZG1pX3Jlc3VtZQotIFtQaGFzZSA2XSBnaXQgbWVy Z2UtYmFzZSAtLWlzLWFuY2VzdG9yIGFmM2E5ZWFkYzExODk2IEhFQUQg4oaSIG5vIChub3QKICBp biA2LjE4LnkgcHJvcGVyKQotIFtQaGFzZSA2XSBSZXN1bWUgaHVuayBpbiB2Ni4xOC41MyBpZGVu dGljYWwgdG8gcGFyZW50IG9mIHRoaXMgY2hhbmdlOwogIFNFVF9MQVRFIGFuZCBkd19oZG1pX3Jl c3VtZSBleGlzdCBpbiB2Ni4xOC41MwotIFtQaGFzZSA4XSBGYWlsdXJlIG1vZGU6IEhETUkgYnJv a2VuIGFmdGVyIHN1c3BlbmQgKEhJR0gpOyBwb3NzaWJsZQogIE5VTEwgb29wcyAoSElHSCBpZiBo aXQpCi0gVU5WRVJJRklFRDogd2hldGhlciBzdGFibGVAIHByZXZpb3VzbHkgcmVqZWN0ZWQgdGhp cyBwYXRjaCAobG9yZQogIGJsb2NrZWQpCgoqKllFUyoqCgogZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2R3X2hkbWktcm9ja2NoaXAuYyB8IDcgKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3 X2hkbWktcm9ja2NoaXAuYwppbmRleCA3MjdjZGY3NjgxNjFhLi5mZjM0YWVlZjNhNmZmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kd19oZG1pLXJvY2tjaGlwLmMKQEAgLTYzNSwxNyAr NjM1LDE4IEBAIHN0YXRpYyB2b2lkIGR3X2hkbWlfcm9ja2NoaXBfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCiAJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZHdfaGRtaV9y b2NrY2hpcF9vcHMpOwogfQogCi1zdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGR3X2hkbWlfcm9j a2NoaXBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19tYXliZV91bnVz ZWQgZHdfaGRtaV9yb2NrY2hpcF9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewog CXN0cnVjdCByb2NrY2hpcF9oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlk d19oZG1pX3Jlc3VtZShoZG1pLT5oZG1pKTsKKwlpZiAoaGRtaSkKKwkJZHdfaGRtaV9yZXN1bWUo aGRtaS0+aGRtaSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZf cG1fb3BzIGR3X2hkbWlfcm9ja2NoaXBfcG0gPSB7Ci0JU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMo TlVMTCwgZHdfaGRtaV9yb2NrY2hpcF9yZXN1bWUpCisJU0VUX0xBVEVfU1lTVEVNX1NMRUVQX1BN X09QUyhOVUxMLCBkd19oZG1pX3JvY2tjaGlwX3Jlc3VtZV9lYXJseSkKIH07CiAKIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgZHdfaGRtaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXIgPSB7Ci0tIAoyLjUz LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51 eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tj aGlwCg==