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 X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3E3CAC43215 for ; Mon, 18 Nov 2019 00:35:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 05A2520727 for ; Mon, 18 Nov 2019 00:35:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=fredlawl-com.20150623.gappssmtp.com header.i=@fredlawl-com.20150623.gappssmtp.com header.b="m5i1mxZL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726332AbfKRAfW (ORCPT ); Sun, 17 Nov 2019 19:35:22 -0500 Received: from mail-ot1-f67.google.com ([209.85.210.67]:41261 "EHLO mail-ot1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726284AbfKRAfV (ORCPT ); Sun, 17 Nov 2019 19:35:21 -0500 Received: by mail-ot1-f67.google.com with SMTP id 94so12993657oty.8 for ; Sun, 17 Nov 2019 16:35:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fredlawl-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=o9a/ARXqmXC+qrG3kibgjJ6rdbT5QPFVjCrcN6rdzu4=; b=m5i1mxZLFXT5f+wHjLSAe+kiEyMEL6wxggU+FwsleR2Hpu1LO8AzY1Np5NACkqlZW7 4+yssz36f+iD0ptmZ87/oQqBlXyfhtII1f6sDGeLmPx99KealUe9tz/pSI2TuBOUc8z2 8mvgDYG6ar4d5/qnn0lcEeNAMCCYz13LqbJV2TDxsl63FsksY9RrhCASLuoFFsd49V6G kBJzu9SmmwsxY7EMuQty3QS4aZjeynx1UB2hIk09JTb7rmL+u1uR8QgCatr1sIMpU38t Zo/eo1KfszqJet2dVI0DBSWkCitRFe+l+ogivaELsHc7Kl7tLzUQVSX/CuKLhHfUlSor fjNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=o9a/ARXqmXC+qrG3kibgjJ6rdbT5QPFVjCrcN6rdzu4=; b=eVsl/kVUiqm5qnNJH9hZqfOirHbBVvbxwtpU6g7uHdDd174apB5aNcj8ZpjJfuIB/O LF+deyCueNMXSmrMh3Skrhy6jLhPAszr0DoWijv7i8kyQJ316/VT685sDybCt829mi0v 4JXiwgIoRNfSHU4tO+daPc1IcZNybczMCRdatJ4rHDM1Nqc8Hc4ILWynXbSU6j/V77tD el6I/H2TOzNGD0IXVJY9huMoYctGR1+DWW2fJzWja6bMMYFbRDkkD8Izgr+4I+IOXdQ2 44uSDjmzVLQkXaJcfMv99ttN53oPEniM76ncMDwu88Pm++aLP3QIMN0km9KW9+tbz8We n4SA== X-Gm-Message-State: APjAAAWLt/IK0B4Fo6wobemEz2krhiJC6bIPhVJ5PvkSUZdiEe3iqx+W lhtlwBQyBlGF5rPwZ1UasBgEYw== X-Google-Smtp-Source: APXvYqwvAxsPRnehA/6VGJOoX5IPO7afqVx9iGTMeKnmMS7MaDZ1CUsBmvJh8eBcJ3WmaWpYTxF3bw== X-Received: by 2002:a05:6830:1f4d:: with SMTP id u13mr21476002oth.77.1574037317618; Sun, 17 Nov 2019 16:35:17 -0800 (PST) Received: from com.attlocal.net ([2600:1700:4870:71e0::10]) by smtp.gmail.com with ESMTPSA id d132sm5543922oif.2.2019.11.17.16.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Nov 2019 16:35:16 -0800 (PST) From: Frederick Lawler To: alexander.deucher@amd.com, christian.koenig@amd.com, David1.Zhou@amd.com, airlied@linux.ie, daniel@ffwll.ch, bhelgaas@google.com Cc: Frederick Lawler , amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, imirkin@alum.mit.edu Subject: [PATCH v2 1/1] drm: Prefer pcie_capability_read_word() Date: Sun, 17 Nov 2019 18:35:13 -0600 Message-Id: <20191118003513.10852-1-fred@fredlawl.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 8c0d3a02c130 ("PCI: Add accessors for PCI Express Capability") added accessors for the PCI Express Capability so that drivers didn't need to be aware of differences between v1 and v2 of the PCI Express Capability. Replace pci_read_config_word() and pci_write_config_word() calls with pcie_capability_read_word() and pcie_capability_write_word(). Signed-off-by: Frederick Lawler --- V2 - Squash both drm commits into one - Rebase ontop of d46eac1e658b --- drivers/gpu/drm/amd/amdgpu/cik.c | 63 ++++++++++++++++----------- drivers/gpu/drm/amd/amdgpu/si.c | 71 +++++++++++++++++++------------ drivers/gpu/drm/radeon/cik.c | 70 ++++++++++++++++++------------ drivers/gpu/drm/radeon/si.c | 73 ++++++++++++++++++++------------ 4 files changed, 174 insertions(+), 103 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 3067bb874032..f369e3408ed2 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c @@ -1384,7 +1384,6 @@ static int cik_set_vce_clocks(struct amdgpu_device *adev, u32 evclk, u32 ecclk) static void cik_pcie_gen3_enable(struct amdgpu_device *adev) { struct pci_dev *root = adev->pdev->bus->self; - int bridge_pos, gpu_pos; u32 speed_cntl, current_data_rate; int i; u16 tmp16; @@ -1419,12 +1418,7 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n"); } - bridge_pos = pci_pcie_cap(root); - if (!bridge_pos) - return; - - gpu_pos = pci_pcie_cap(adev->pdev); - if (!gpu_pos) + if (!pci_is_pcie(root) || !pci_is_pcie(adev->pdev)) return; if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { @@ -1434,14 +1428,17 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, + &gpu_cfg); tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, + tmp16); tmp = RREG32_PCIE(ixPCIE_LC_STATUS1); max_lw = (tmp & PCIE_LC_STATUS1__LC_DETECTED_LINK_WIDTH_MASK) >> @@ -1465,15 +1462,23 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) for (i = 0; i < 10; i++) { /* check status */ - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); + pcie_capability_read_word(adev->pdev, + PCI_EXP_DEVSTA, + &tmp16); if (tmp16 & PCI_EXP_DEVSTA_TRPND) break; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL, + &gpu_cfg); - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &bridge_cfg2); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL2, + &gpu_cfg2); tmp = RREG32_PCIE(ixPCIE_LC_CNTL4); tmp |= PCIE_LC_CNTL4__LC_SET_QUIESCE_MASK; @@ -1486,18 +1491,25 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) msleep(100); /* linkctl */ - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, + tmp16); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(adev->pdev, + PCI_EXP_LNKCTL, + tmp16); /* linkctl2 */ - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (bridge_cfg2 & @@ -1511,7 +1523,9 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) tmp16 |= (gpu_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(adev->pdev, + PCI_EXP_LNKCTL2, + tmp16); tmp = RREG32_PCIE(ixPCIE_LC_CNTL4); tmp &= ~PCIE_LC_CNTL4__LC_SET_QUIESCE_MASK; @@ -1526,15 +1540,16 @@ static void cik_pcie_gen3_enable(struct amdgpu_device *adev) speed_cntl &= ~PCIE_LC_SPEED_CNTL__LC_FORCE_DIS_SW_SPEED_CHANGE_MASK; WREG32_PCIE(ixPCIE_LC_SPEED_CNTL, speed_cntl); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL2, &tmp16); tmp16 &= ~PCI_EXP_LNKCTL2_TLS; + if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ else tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL2, tmp16); speed_cntl = RREG32_PCIE(ixPCIE_LC_SPEED_CNTL); speed_cntl |= PCIE_LC_SPEED_CNTL__LC_INITIATE_LINK_SPEED_CHANGE_MASK; diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c index a7dcb0d0f039..9f82be879224 100644 --- a/drivers/gpu/drm/amd/amdgpu/si.c +++ b/drivers/gpu/drm/amd/amdgpu/si.c @@ -1633,7 +1633,6 @@ static void si_init_golden_registers(struct amdgpu_device *adev) static void si_pcie_gen3_enable(struct amdgpu_device *adev) { struct pci_dev *root = adev->pdev->bus->self; - int bridge_pos, gpu_pos; u32 speed_cntl, current_data_rate; int i; u16 tmp16; @@ -1668,12 +1667,7 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n"); } - bridge_pos = pci_pcie_cap(root); - if (!bridge_pos) - return; - - gpu_pos = pci_pcie_cap(adev->pdev); - if (!gpu_pos) + if (!pci_is_pcie(root) || !pci_is_pcie(adev->pdev)) return; if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { @@ -1682,14 +1676,17 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, + &gpu_cfg); tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, + tmp16); tmp = RREG32_PCIE(PCIE_LC_STATUS1); max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; @@ -1706,15 +1703,23 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) } for (i = 0; i < 10; i++) { - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); + pcie_capability_read_word(adev->pdev, + PCI_EXP_DEVSTA, + &tmp16); if (tmp16 & PCI_EXP_DEVSTA_TRPND) break; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL, + &gpu_cfg); - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &bridge_cfg2); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL2, + &gpu_cfg2); tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); tmp |= LC_SET_QUIESCE; @@ -1726,31 +1731,44 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) mdelay(100); - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, + tmp16); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(adev->pdev, + PCI_EXP_LNKCTL, + tmp16); - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (bridge_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(root, + PCI_EXP_LNKCTL2, + tmp16); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(adev->pdev, + PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (gpu_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(adev->pdev, + PCI_EXP_LNKCTL2, + tmp16); tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); tmp &= ~LC_SET_QUIESCE; @@ -1763,15 +1781,16 @@ static void si_pcie_gen3_enable(struct amdgpu_device *adev) speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); - pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL2, &tmp16); tmp16 &= ~PCI_EXP_LNKCTL2_TLS; + if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ else tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ - pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL2, tmp16); speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index a280442c81aa..09a4709e67f0 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c @@ -9504,7 +9504,6 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) { struct pci_dev *root = rdev->pdev->bus->self; enum pci_bus_speed speed_cap; - int bridge_pos, gpu_pos; u32 speed_cntl, current_data_rate; int i; u16 tmp16; @@ -9546,12 +9545,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); } - bridge_pos = pci_pcie_cap(root); - if (!bridge_pos) - return; - - gpu_pos = pci_pcie_cap(rdev->pdev); - if (!gpu_pos) + if (!pci_is_pcie(root) || !pci_is_pcie(rdev->pdev)) return; if (speed_cap == PCIE_SPEED_8_0GT) { @@ -9561,14 +9555,17 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, + &gpu_cfg); tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, + tmp16); tmp = RREG32_PCIE_PORT(PCIE_LC_STATUS1); max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; @@ -9586,15 +9583,23 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) for (i = 0; i < 10; i++) { /* check status */ - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_DEVSTA, + &tmp16); if (tmp16 & PCI_EXP_DEVSTA_TRPND) break; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL, + &gpu_cfg); - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &bridge_cfg2); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL2, + &gpu_cfg2); tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); tmp |= LC_SET_QUIESCE; @@ -9607,32 +9612,45 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) msleep(100); /* linkctl */ - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, + tmp16); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(rdev->pdev, + PCI_EXP_LNKCTL, + tmp16); /* linkctl2 */ - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (bridge_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(root, + PCI_EXP_LNKCTL2, + tmp16); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (gpu_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(rdev->pdev, + PCI_EXP_LNKCTL2, + tmp16); tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); tmp &= ~LC_SET_QUIESCE; @@ -9646,7 +9664,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16); tmp16 &= ~PCI_EXP_LNKCTL2_TLS; if (speed_cap == PCIE_SPEED_8_0GT) tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ @@ -9654,7 +9672,7 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ else tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16); speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c index 529e70a42019..67a98b3370d1 100644 --- a/drivers/gpu/drm/radeon/si.c +++ b/drivers/gpu/drm/radeon/si.c @@ -3257,7 +3257,7 @@ static void si_gpu_init(struct radeon_device *rdev) /* XXX what about 12? */ rdev->config.si.tile_config |= (3 << 0); break; - } + } switch ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) { case 0: /* four banks */ rdev->config.si.tile_config |= 0 << 4; @@ -7087,7 +7087,6 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) { struct pci_dev *root = rdev->pdev->bus->self; enum pci_bus_speed speed_cap; - int bridge_pos, gpu_pos; u32 speed_cntl, current_data_rate; int i; u16 tmp16; @@ -7129,12 +7128,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); } - bridge_pos = pci_pcie_cap(root); - if (!bridge_pos) - return; - - gpu_pos = pci_pcie_cap(rdev->pdev); - if (!gpu_pos) + if (!pci_is_pcie(root) || !pci_is_pcie(rdev->pdev)) return; if (speed_cap == PCIE_SPEED_8_0GT) { @@ -7144,14 +7138,17 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) u16 bridge_cfg2, gpu_cfg2; u32 max_lw, current_lw, tmp; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL, + &gpu_cfg); tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL, + tmp16); tmp = RREG32_PCIE(PCIE_LC_STATUS1); max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; @@ -7169,15 +7166,23 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) for (i = 0; i < 10; i++) { /* check status */ - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_DEVSTA, + &tmp16); if (tmp16 & PCI_EXP_DEVSTA_TRPND) break; - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &bridge_cfg); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL, + &gpu_cfg); - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &bridge_cfg2); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL2, + &gpu_cfg2); tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); tmp |= LC_SET_QUIESCE; @@ -7190,32 +7195,46 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) msleep(100); /* linkctl */ - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(root, + PCI_EXP_LNKCTL, + tmp16); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL, + &tmp16); tmp16 &= ~PCI_EXP_LNKCTL_HAWD; tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16); + pcie_capability_write_word(rdev->pdev, + PCI_EXP_LNKCTL, + tmp16); /* linkctl2 */ - pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(root, PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (bridge_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(root, + PCI_EXP_LNKCTL2, + tmp16); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(rdev->pdev, + PCI_EXP_LNKCTL2, + &tmp16); tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN); tmp16 |= (gpu_cfg2 & (PCI_EXP_LNKCTL2_ENTER_COMP | PCI_EXP_LNKCTL2_TX_MARGIN)); - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(rdev->pdev, + PCI_EXP_LNKCTL2, + tmp16); tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); tmp &= ~LC_SET_QUIESCE; @@ -7229,7 +7248,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); - pci_read_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16); + pcie_capability_read_word(rdev->pdev, PCI_EXP_LNKCTL2, &tmp16); tmp16 &= ~PCI_EXP_LNKCTL2_TLS; if (speed_cap == PCIE_SPEED_8_0GT) tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ @@ -7237,7 +7256,7 @@ static void si_pcie_gen3_enable(struct radeon_device *rdev) tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ else tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ - pci_write_config_word(rdev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16); + pcie_capability_write_word(rdev->pdev, PCI_EXP_LNKCTL2, tmp16); speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; -- 2.20.1 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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 012DEC432C0 for ; Mon, 18 Nov 2019 08:37:08 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id D4640206A4 for ; Mon, 18 Nov 2019 08:37:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D4640206A4 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=fredlawl.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B186989FDB; Mon, 18 Nov 2019 08:36:59 +0000 (UTC) Received: from mail-ot1-x344.google.com (mail-ot1-x344.google.com [IPv6:2607:f8b0:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id C4DBB89FA5 for ; Mon, 18 Nov 2019 00:35:18 +0000 (UTC) Received: by mail-ot1-x344.google.com with SMTP id 19so3097807otz.1 for ; Sun, 17 Nov 2019 16:35:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=o9a/ARXqmXC+qrG3kibgjJ6rdbT5QPFVjCrcN6rdzu4=; b=pzPmefXljUJsE+hji67SW3unNviYuGX5aGdCi38K3CEvy/C/J/j9ubyvW/fq2WnxOk zQaKedurUxHmCs9pipugi1bKPsE28Rdw1nEWus2xl6rIDL2cE6g+30sEwIHkPxukjF4V oAe4ovJbjHF4emAeG+vYhIkZCg2phw3lRGuQ8jX13lDtDi5V2gop///q7+mQFl1ouf1A 8T+faPkP9SMGt1o4UOc2p+oTPbloZ+p9yA6q/WgcxiNt7vtz6WhhFhYPsL/qg6cdN6IJ CGNqWvnIipKef3NLaff9wp/0BZPA1KUe9rPysEimnSmkCgkXDcWGmn/W8oVlak8F+/wT /Usg== X-Gm-Message-State: APjAAAVR02yDVeoHZGf+DkZBsttyA2TmZ/freDJyIeUinAiIpQN3lx7c g7ag4pSTUXaoypJMgA1CcYH4sA== X-Google-Smtp-Source: APXvYqwvAxsPRnehA/6VGJOoX5IPO7afqVx9iGTMeKnmMS7MaDZ1CUsBmvJh8eBcJ3WmaWpYTxF3bw== X-Received: by 2002:a05:6830:1f4d:: with SMTP id u13mr21476002oth.77.1574037317618; Sun, 17 Nov 2019 16:35:17 -0800 (PST) Received: from com.attlocal.net ([2600:1700:4870:71e0::10]) by smtp.gmail.com with ESMTPSA id d132sm5543922oif.2.2019.11.17.16.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Nov 2019 16:35:16 -0800 (PST) From: Frederick Lawler To: alexander.deucher@amd.com, christian.koenig@amd.com, David1.Zhou@amd.com, airlied@linux.ie, daniel@ffwll.ch, bhelgaas@google.com Subject: [PATCH v2 1/1] drm: Prefer pcie_capability_read_word() Date: Sun, 17 Nov 2019 18:35:13 -0600 Message-Id: <20191118003513.10852-1-fred@fredlawl.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 18 Nov 2019 08:36:58 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fredlawl-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=o9a/ARXqmXC+qrG3kibgjJ6rdbT5QPFVjCrcN6rdzu4=; b=m5i1mxZLFXT5f+wHjLSAe+kiEyMEL6wxggU+FwsleR2Hpu1LO8AzY1Np5NACkqlZW7 4+yssz36f+iD0ptmZ87/oQqBlXyfhtII1f6sDGeLmPx99KealUe9tz/pSI2TuBOUc8z2 8mvgDYG6ar4d5/qnn0lcEeNAMCCYz13LqbJV2TDxsl63FsksY9RrhCASLuoFFsd49V6G kBJzu9SmmwsxY7EMuQty3QS4aZjeynx1UB2hIk09JTb7rmL+u1uR8QgCatr1sIMpU38t Zo/eo1KfszqJet2dVI0DBSWkCitRFe+l+ogivaELsHc7Kl7tLzUQVSX/CuKLhHfUlSor fjNQ== X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Frederick Lawler , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191118003513.dsed6elxoAXOgZTBkV_TWCQhnYgpOWtA7PQfMubdRqY@z> Q29tbWl0IDhjMGQzYTAyYzEzMCAoIlBDSTogQWRkIGFjY2Vzc29ycyBmb3IgUENJIEV4cHJlc3Mg Q2FwYWJpbGl0eSIpCmFkZGVkIGFjY2Vzc29ycyBmb3IgdGhlIFBDSSBFeHByZXNzIENhcGFiaWxp dHkgc28gdGhhdCBkcml2ZXJzIGRpZG4ndApuZWVkIHRvIGJlIGF3YXJlIG9mIGRpZmZlcmVuY2Vz IGJldHdlZW4gdjEgYW5kIHYyIG9mIHRoZSBQQ0kKRXhwcmVzcyBDYXBhYmlsaXR5LgoKUmVwbGFj ZSBwY2lfcmVhZF9jb25maWdfd29yZCgpIGFuZCBwY2lfd3JpdGVfY29uZmlnX3dvcmQoKSBjYWxs cyB3aXRoCnBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQoKSBhbmQgcGNpZV9jYXBhYmlsaXR5X3dy aXRlX3dvcmQoKS4KClNpZ25lZC1vZmYtYnk6IEZyZWRlcmljayBMYXdsZXIgPGZyZWRAZnJlZGxh d2wuY29tPgoKLS0tClYyCi0gU3F1YXNoIGJvdGggZHJtIGNvbW1pdHMgaW50byBvbmUKLSBSZWJh c2Ugb250b3Agb2YgZDQ2ZWFjMWU2NThiCi0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv Y2lrLmMgfCA2MyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3NpLmMgIHwgNzEgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYyAgICAgfCA3MCArKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYyAgICAgIHwgNzMgKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMTc0IGluc2VydGlvbnMo KyksIDEwMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9jaWsuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Npay5jCmluZGV4IDMwNjdi Yjg3NDAzMi4uZjM2OWUzNDA4ZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9jaWsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwpAQCAtMTM4 NCw3ICsxMzg0LDYgQEAgc3RhdGljIGludCBjaWtfc2V0X3ZjZV9jbG9ja3Moc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIHUzMiBldmNsaywgdTMyIGVjY2xrKQogc3RhdGljIHZvaWQgY2lrX3Bj aWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IHBj aV9kZXYgKnJvb3QgPSBhZGV2LT5wZGV2LT5idXMtPnNlbGY7Ci0JaW50IGJyaWRnZV9wb3MsIGdw dV9wb3M7CiAJdTMyIHNwZWVkX2NudGwsIGN1cnJlbnRfZGF0YV9yYXRlOwogCWludCBpOwogCXUx NiB0bXAxNjsKQEAgLTE0MTksMTIgKzE0MTgsNyBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4z X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAkJRFJNX0lORk8oImVuYWJsaW5n IFBDSUUgZ2VuIDIgbGluayBzcGVlZHMsIGRpc2FibGUgd2l0aCBhbWRncHUucGNpZV9nZW4yPTBc biIpOwogCX0KIAotCWJyaWRnZV9wb3MgPSBwY2lfcGNpZV9jYXAocm9vdCk7Ci0JaWYgKCFicmlk Z2VfcG9zKQotCQlyZXR1cm47Ci0KLQlncHVfcG9zID0gcGNpX3BjaWVfY2FwKGFkZXYtPnBkZXYp OwotCWlmICghZ3B1X3BvcykKKwlpZiAoIXBjaV9pc19wY2llKHJvb3QpIHx8ICFwY2lfaXNfcGNp ZShhZGV2LT5wZGV2KSkKIAkJcmV0dXJuOwogCiAJaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sg JiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpIHsKQEAgLTE0MzQsMTQgKzE0Mjgs MTcgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiAJCQl1MTYgYnJpZGdlX2NmZzIsIGdwdV9jZmcyOwogCQkJdTMyIG1heF9sdywg Y3VycmVudF9sdywgdG1wOwogCi0JCQlwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2Vf cG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ193 b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmdwdV9jZmcpOworCQkJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAg JmJyaWRnZV9jZmcpOworCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LCBQ Q0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAgJmdwdV9jZmcpOwogCiAJCQl0bXAxNiA9IGJyaWRnZV9j ZmcgfCBQQ0lfRVhQX0xOS0NUTF9IQVdEOwotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3Qs IGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJcGNpZV9jYXBhYmlsaXR5 X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKIAogCQkJdG1wMTYgPSBn cHVfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93cml0ZV9jb25maWdfd29yZChh ZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCXBjaWVfY2Fw YWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJICAg dG1wMTYpOwogCiAJCQl0bXAgPSBSUkVHMzJfUENJRShpeFBDSUVfTENfU1RBVFVTMSk7CiAJCQlt YXhfbHcgPSAodG1wICYgUENJRV9MQ19TVEFUVVMxX19MQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX01B U0spID4+CkBAIC0xNDY1LDE1ICsxNDYyLDIzIEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNf ZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCiAJCQlmb3IgKGkgPSAwOyBpIDwg MTA7IGkrKykgewogCQkJCS8qIGNoZWNrIHN0YXR1cyAqLwotCQkJCXBjaV9yZWFkX2NvbmZpZ193 b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnRtcDE2KTsKKwkJCQlw Y2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0RF VlNUQSwKKwkJCQkJCQkgICZ0bXAxNik7CiAJCQkJaWYgKHRtcDE2ICYgUENJX0VYUF9ERVZTVEFf VFJQTkQpCiAJCQkJCWJyZWFrOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJp ZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Ci0JCQkJcGNpX3JlYWRfY29u ZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7 CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKKwkJ CQkJCQkgICZicmlkZ2VfY2ZnKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYt PnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICZncHVfY2ZnKTsKIAot CQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NU TDIsICZicmlkZ2VfY2ZnMik7Ci0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwg Z3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmdwdV9jZmcyKTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCQkgICZicmlkZ2VfY2Zn Mik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAorCQkJCQkJCSAg UENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgJmdwdV9jZmcyKTsKIAogCQkJCXRtcCA9IFJSRUcz Ml9QQ0lFKGl4UENJRV9MQ19DTlRMNCk7CiAJCQkJdG1wIHw9IFBDSUVfTENfQ05UTDRfX0xDX1NF VF9RVUlFU0NFX01BU0s7CkBAIC0xNDg2LDE4ICsxNDkxLDI1IEBAIHN0YXRpYyB2b2lkIGNpa19w Y2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJCW1zbGVlcCgx MDApOwogCiAJCQkJLyogbGlua2N0bCAqLwotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3Qs IGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJ CQl0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKIAkJCQl0bXAxNiB8PSAoYnJpZGdlX2Nm ZyAmIFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290 LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfd3JpdGVfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICB0bXAxNik7CiAK LQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9M TktDVEwsICZ0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2 LAorCQkJCQkJCSAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2 ICY9IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwogCQkJCXRtcDE2IHw9IChncHVfY2ZnICYgUENJX0VY UF9MTktDVExfSEFXRCk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdw dV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0 ZV93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAg dG1wMTYpOwogCiAJCQkJLyogbGlua2N0bDIgKi8KLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOworCQkJCXBjaWVfY2Fw YWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgJnRtcDE2 KTsKIAkJCQl0bXAxNiAmPSB+KFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJCQkJICAg UENJX0VYUF9MTktDVEwyX1RYX01BUkdJTik7CiAJCQkJdG1wMTYgfD0gKGJyaWRnZV9jZmcyICYK QEAgLTE1MTEsNyArMTUyMyw5IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJCXRtcDE2IHw9IChncHVfY2ZnMiAmCiAJCQkJ CSAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJCQkJICAgUENJX0VYUF9MTktDVEwy X1RYX01BUkdJTikpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVf cG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3dyaXRl X3dvcmQoYWRldi0+cGRldiwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAg dG1wMTYpOwogCiAJCQkJdG1wID0gUlJFRzMyX1BDSUUoaXhQQ0lFX0xDX0NOVEw0KTsKIAkJCQl0 bXAgJj0gflBDSUVfTENfQ05UTDRfX0xDX1NFVF9RVUlFU0NFX01BU0s7CkBAIC0xNTI2LDE1ICsx NTQwLDE2IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQogCXNwZWVkX2NudGwgJj0gflBDSUVfTENfU1BFRURfQ05UTF9fTENfRk9S Q0VfRElTX1NXX1NQRUVEX0NIQU5HRV9NQVNLOwogCVdSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVF RF9DTlRMLCBzcGVlZF9jbnRsKTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYs IGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5X3Jl YWRfd29yZChhZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7CiAJdG1wMTYgJj0g flBDSV9FWFBfTE5LQ1RMMl9UTFM7CisKIAlpZiAoYWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENB SUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMykKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktD VEwyX1RMU184XzBHVDsgLyogZ2VuMyAqLwogCWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21h c2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjIpCiAJCXRtcDE2IHw9IFBDSV9F WFBfTE5LQ1RMMl9UTFNfNV8wR1Q7IC8qIGdlbjIgKi8KIAllbHNlCiAJCXRtcDE2IHw9IFBDSV9F WFBfTE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdlbjEgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQo YWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCXBjaWVfY2Fw YWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwog CiAJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVFRF9DTlRMKTsKIAlzcGVl ZF9jbnRsIHw9IFBDSUVfTENfU1BFRURfQ05UTF9fTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFO R0VfTUFTSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaS5jCmluZGV4IGE3ZGNiMGQwZjAzOS4uOWY4MmJl ODc5MjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMKQEAgLTE2MzMsNyArMTYzMyw2IEBAIHN0 YXRpYyB2b2lkIHNpX2luaXRfZ29sZGVuX3JlZ2lzdGVycyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnJvb3QgPSBhZGV2LT5wZGV2LT5idXMtPnNl bGY7Ci0JaW50IGJyaWRnZV9wb3MsIGdwdV9wb3M7CiAJdTMyIHNwZWVkX2NudGwsIGN1cnJlbnRf ZGF0YV9yYXRlOwogCWludCBpOwogCXUxNiB0bXAxNjsKQEAgLTE2NjgsMTIgKzE2NjcsNyBAQCBz dGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQogCQlEUk1fSU5GTygiZW5hYmxpbmcgUENJRSBnZW4gMiBsaW5rIHNwZWVkcywgZGlzYWJsZSB3 aXRoIGFtZGdwdS5wY2llX2dlbjI9MFxuIik7CiAJfQogCi0JYnJpZGdlX3BvcyA9IHBjaV9wY2ll X2NhcChyb290KTsKLQlpZiAoIWJyaWRnZV9wb3MpCi0JCXJldHVybjsKLQotCWdwdV9wb3MgPSBw Y2lfcGNpZV9jYXAoYWRldi0+cGRldik7Ci0JaWYgKCFncHVfcG9zKQorCWlmICghcGNpX2lzX3Bj aWUocm9vdCkgfHwgIXBjaV9pc19wY2llKGFkZXYtPnBkZXYpKQogCQlyZXR1cm47CiAKIAlpZiAo YWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VO MykgewpAQCAtMTY4MiwxNCArMTY3NiwxNyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5h YmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJdTE2IGJyaWRnZV9jZmcyLCBncHVf Y2ZnMjsKIAkJCXUzMiBtYXhfbHcsIGN1cnJlbnRfbHcsIHRtcDsKIAotCQkJcGNpX3JlYWRfY29u ZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7 Ci0JCQlwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9M TktDVEwsICZncHVfY2ZnKTsKKwkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJ X0VYUF9MTktDVEwsCisJCQkJCQkgICZicmlkZ2VfY2ZnKTsKKwkJCXBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQoYWRldi0+cGRldiwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkgICZncHVfY2ZnKTsK IAogCQkJdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93 cml0ZV9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2 KTsKKwkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLCB0 bXAxNik7CiAKIAkJCXRtcDE2ID0gZ3B1X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hBV0Q7Ci0JCQlw Y2lfd3JpdGVfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RM LCB0bXAxNik7CisJCQlwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChhZGV2LT5wZGV2LCBQQ0lf RVhQX0xOS0NUTCwKKwkJCQkJCSAgIHRtcDE2KTsKIAogCQkJdG1wID0gUlJFRzMyX1BDSUUoUENJ RV9MQ19TVEFUVVMxKTsKIAkJCW1heF9sdyA9ICh0bXAgJiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRI X01BU0spID4+IExDX0RFVEVDVEVEX0xJTktfV0lEVEhfU0hJRlQ7CkBAIC0xNzA2LDE1ICsxNzAz LDIzIEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiAJCQl9CiAKIAkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQkJcGNp X3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfREVWU1RBLCAm dG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQoYWRldi0+cGRldiwKKwkJCQkJ CQkgIFBDSV9FWFBfREVWU1RBLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQlpZiAodG1wMTYgJiBQ Q0lfRVhQX0RFVlNUQV9UUlBORCkKIAkJCQkJYnJlYWs7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdf d29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJ CQlwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktD VEwsICZncHVfY2ZnKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9F WFBfTE5LQ1RMLAorCQkJCQkJCSAgJmJyaWRnZV9jZmcpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQoYWRldi0+cGRldiwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAg JmdwdV9jZmcpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyAr IFBDSV9FWFBfTE5LQ1RMMiwgJmJyaWRnZV9jZmcyKTsKLQkJCQlwY2lfcmVhZF9jb25maWdfd29y ZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmZ3B1X2NmZzIpOworCQkJ CXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJ CSAgJmJyaWRnZV9jZmcyKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBk ZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAmZ3B1X2NmZzIpOwogCiAJ CQkJdG1wID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NOVEw0KTsKIAkJCQl0bXAgfD0gTENf U0VUX1FVSUVTQ0U7CkBAIC0xNzI2LDMxICsxNzMxLDQ0IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVf Z2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAKIAkJCQltZGVsYXkoMTAw KTsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQ X0xOS0NUTCwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBD SV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQl0bXAxNiAmPSB+UENJX0VYUF9M TktDVExfSEFXRDsKIAkJCQl0bXAxNiB8PSAoYnJpZGdlX2NmZyAmIFBDSV9FWFBfTE5LQ1RMX0hB V0QpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VY UF9MTktDVEwsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyb290LCBQ Q0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICB0bXAxNik7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdf d29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZ0bXAxNik7CisJCQkJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9M TktDVEwsCisJCQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTF9I QVdEOwogCQkJCXRtcDE2IHw9IChncHVfY2ZnICYgUENJX0VYUF9MTktDVExfSEFXRCk7Ci0JCQkJ cGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NU TCwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCisJ CQkJCQkJICAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAgdG1wMTYpOwogCi0JCQkJcGNpX3Jl YWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2 KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwK KwkJCQkJCQkgICZ0bXAxNik7CiAJCQkJdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJf Q09NUCB8CiAJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwogCQkJCXRtcDE2IHw9 IChicmlkZ2VfY2ZnMiAmCiAJCQkJCSAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJ CQkJICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTikpOwotCQkJCXBjaV93cml0ZV9jb25maWdf d29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJCQkJcGNp ZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDIs CisJCQkJCQkJICAgdG1wMTYpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJ CQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAg fAogCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKIAkJCQl0bXAxNiB8PSAoZ3B1 X2NmZzIgJgogCQkJCQkgIChQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJCSAgIFBD SV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRl di0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCQkJCXBjaWVfY2Fw YWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwy LAorCQkJCQkJCSAgIHRtcDE2KTsKIAogCQkJCXRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9M Q19DTlRMNCk7CiAJCQkJdG1wICY9IH5MQ19TRVRfUVVJRVNDRTsKQEAgLTE3NjMsMTUgKzE3ODEs MTYgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKIAlzcGVlZF9jbnRsICY9IH5MQ19GT1JDRV9ESVNfU1dfU1BFRURfQ0hBTkdFOwog CVdSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKIAotCXBj aV9yZWFkX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIs ICZ0bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LCBQQ0lfRVhQ X0xOS0NUTDIsICZ0bXAxNik7CiAJdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMMl9UTFM7CisKIAlp ZiAoYWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRf R0VOMykKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktDVEwyX1RMU184XzBHVDsgLyogZ2VuMyAqLwog CWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9T VVBQT1JUX0dFTjIpCiAJCXRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfNV8wR1Q7IC8qIGdl bjIgKi8KIAllbHNlCiAJCXRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdl bjEgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9F WFBfTE5LQ1RMMiwgdG1wMTYpOworCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBk ZXYsIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwogCiAJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lF X1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMKTsKIAlzcGVlZF9jbnRsIHw9IExDX0lOSVRJQVRFX0xJ TktfU1BFRURfQ0hBTkdFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsu YyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKaW5kZXggYTI4MDQ0MmM4MWFhLi4wOWE0 NzA5ZTY3ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwpAQCAtOTUwNCw3ICs5NTA0LDYgQEAgc3RhdGlj IHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7 CiAJc3RydWN0IHBjaV9kZXYgKnJvb3QgPSByZGV2LT5wZGV2LT5idXMtPnNlbGY7CiAJZW51bSBw Y2lfYnVzX3NwZWVkIHNwZWVkX2NhcDsKLQlpbnQgYnJpZGdlX3BvcywgZ3B1X3BvczsKIAl1MzIg c3BlZWRfY250bCwgY3VycmVudF9kYXRhX3JhdGU7CiAJaW50IGk7CiAJdTE2IHRtcDE2OwpAQCAt OTU0NiwxMiArOTU0NSw3IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0cnVj dCByYWRlb25fZGV2aWNlICpyZGV2KQogCQlEUk1fSU5GTygiZW5hYmxpbmcgUENJRSBnZW4gMiBs aW5rIHNwZWVkcywgZGlzYWJsZSB3aXRoIHJhZGVvbi5wY2llX2dlbjI9MFxuIik7CiAJfQogCi0J YnJpZGdlX3BvcyA9IHBjaV9wY2llX2NhcChyb290KTsKLQlpZiAoIWJyaWRnZV9wb3MpCi0JCXJl dHVybjsKLQotCWdwdV9wb3MgPSBwY2lfcGNpZV9jYXAocmRldi0+cGRldik7Ci0JaWYgKCFncHVf cG9zKQorCWlmICghcGNpX2lzX3BjaWUocm9vdCkgfHwgIXBjaV9pc19wY2llKHJkZXYtPnBkZXYp KQogCQlyZXR1cm47CiAKIAlpZiAoc3BlZWRfY2FwID09IFBDSUVfU1BFRURfOF8wR1QpIHsKQEAg LTk1NjEsMTQgKzk1NTUsMTcgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3Ry dWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCQl1MTYgYnJpZGdlX2NmZzIsIGdwdV9jZmcyOwog CQkJdTMyIG1heF9sdywgY3VycmVudF9sdywgdG1wOwogCi0JCQlwY2lfcmVhZF9jb25maWdfd29y ZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJCXBj aV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwg JmdwdV9jZmcpOworCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xO S0NUTCwKKwkJCQkJCSAgJmJyaWRnZV9jZmcpOworCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29y ZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAgJmdwdV9jZmcpOwogCiAJCQl0 bXAxNiA9IGJyaWRnZV9jZmcgfCBQQ0lfRVhQX0xOS0NUTF9IQVdEOwotCQkJcGNpX3dyaXRlX2Nv bmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJ cGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsK IAogCQkJdG1wMTYgPSBncHVfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93cml0 ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2 KTsKKwkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYsIFBDSV9FWFBfTE5L Q1RMLAorCQkJCQkJICAgdG1wMTYpOwogCiAJCQl0bXAgPSBSUkVHMzJfUENJRV9QT1JUKFBDSUVf TENfU1RBVFVTMSk7CiAJCQltYXhfbHcgPSAodG1wICYgTENfREVURUNURURfTElOS19XSURUSF9N QVNLKSA+PiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX1NISUZUOwpAQCAtOTU4NiwxNSArOTU4Mywy MyBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2Rldmlj ZSAqcmRldikKIAogCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAkJCQkvKiBjaGVjayBz dGF0dXMgKi8KLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsg UENJX0VYUF9ERVZTVEEsICZ0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChy ZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9ERVZTVEEsCisJCQkJCQkJICAmdG1wMTYpOwog CQkJCWlmICh0bXAxNiAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKQogCQkJCQlicmVhazsKIAotCQkJ CXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwg JmJyaWRnZV9jZmcpOwotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9w b3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmdwdV9jZmcpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFk X3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAmYnJpZGdlX2NmZyk7CisJCQkJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9M TktDVEwsCisJCQkJCQkJICAmZ3B1X2NmZyk7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwotCQkJCXBj aV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIs ICZncHVfY2ZnMik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQ X0xOS0NUTDIsCisJCQkJCQkJICAmYnJpZGdlX2NmZzIpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQocmRldi0+cGRldiwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCQkg ICZncHVfY2ZnMik7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUENJRV9QT1JUKFBDSUVfTENfQ05UTDQp OwogCQkJCXRtcCB8PSBMQ19TRVRfUVVJRVNDRTsKQEAgLTk2MDcsMzIgKzk2MTIsNDUgQEAgc3Rh dGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYp CiAJCQkJbXNsZWVwKDEwMCk7CiAKIAkJCQkvKiBsaW5rY3RsICovCi0JCQkJcGNpX3JlYWRfY29u ZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmdG1wMTYpOworCQkJ CXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJ ICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwogCQkJCXRtcDE2 IHw9IChicmlkZ2VfY2ZnICYgUENJX0VYUF9MTktDVExfSEFXRCk7Ci0JCQkJcGNpX3dyaXRlX2Nv bmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJ CXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJ CSAgIHRtcDE2KTsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9w b3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93 b3JkKHJkZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICZ0bXAx Nik7CiAJCQkJdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMX0hBV0Q7CiAJCQkJdG1wMTYgfD0gKGdw dV9jZmcgJiBQQ0lfRVhQX0xOS0NUTF9IQVdEKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQo cmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7CisJCQkJcGNpZV9j YXBhYmlsaXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NU TCwKKwkJCQkJCQkgICB0bXAxNik7CiAKIAkJCQkvKiBsaW5rY3RsMiAqLwotCQkJCXBjaV9yZWFk X2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7 CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTDIsCisJ CQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NP TVAgfAogCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKIAkJCQl0bXAxNiB8PSAo YnJpZGdlX2NmZzIgJgogCQkJCQkgIChQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJ CSAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dv cmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCQkJCXBjaWVf Y2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3QsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwyLAor CQkJCQkJCSAgIHRtcDE2KTsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYs IGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5 X3JlYWRfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJ CSAgJnRtcDE2KTsKIAkJCQl0bXAxNiAmPSB+KFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwK IAkJCQkJICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTik7CiAJCQkJdG1wMTYgfD0gKGdwdV9j ZmcyICYKIAkJCQkJICAoUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAogCQkJCQkgICBQQ0lf RVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYt PnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFi aWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMMiwK KwkJCQkJCQkgICB0bXAxNik7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUENJRV9QT1JUKFBDSUVfTENf Q05UTDQpOwogCQkJCXRtcCAmPSB+TENfU0VUX1FVSUVTQ0U7CkBAIC05NjQ2LDcgKzk2NjQsNyBA QCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAq cmRldikKIAlzcGVlZF9jbnRsICY9IH5MQ19GT1JDRV9ESVNfU1dfU1BFRURfQ0hBTkdFOwogCVdS RUczMl9QQ0lFX1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKIAotCXBjaV9y ZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0 bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xO S0NUTDIsICZ0bXAxNik7CiAJdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMMl9UTFM7CiAJaWYgKHNw ZWVkX2NhcCA9PSBQQ0lFX1NQRUVEXzhfMEdUKQogCQl0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJf VExTXzhfMEdUOyAvKiBnZW4zICovCkBAIC05NjU0LDcgKzk2NzIsNyBAQCBzdGF0aWMgdm9pZCBj aWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAkJdG1wMTYg fD0gUENJX0VYUF9MTktDVEwyX1RMU181XzBHVDsgLyogZ2VuMiAqLwogCWVsc2UKIAkJdG1wMTYg fD0gUENJX0VYUF9MTktDVEwyX1RMU18yXzVHVDsgLyogZ2VuMSAqLwotCXBjaV93cml0ZV9jb25m aWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJ cGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCB0 bXAxNik7CiAKIAlzcGVlZF9jbnRsID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX1NQRUVEX0NO VEwpOwogCXNwZWVkX2NudGwgfD0gTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFOR0U7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3NpLmMKaW5kZXggNTI5ZTcwYTQyMDE5Li42N2E5OGIzMzcwZDEgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Np LmMKQEAgLTMyNTcsNyArMzI1Nyw3IEBAIHN0YXRpYyB2b2lkIHNpX2dwdV9pbml0KHN0cnVjdCBy YWRlb25fZGV2aWNlICpyZGV2KQogCQkvKiBYWFggd2hhdCBhYm91dCAxMj8gKi8KIAkJcmRldi0+ Y29uZmlnLnNpLnRpbGVfY29uZmlnIHw9ICgzIDw8IDApOwogCQlicmVhazsKLQl9CQorCX0KIAlz d2l0Y2ggKChtY19hcmJfcmFtY2ZnICYgTk9PRkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQp IHsKIAljYXNlIDA6IC8qIGZvdXIgYmFua3MgKi8KIAkJcmRldi0+Y29uZmlnLnNpLnRpbGVfY29u ZmlnIHw9IDAgPDwgNDsKQEAgLTcwODcsNyArNzA4Nyw2IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVf Z2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHBjaV9k ZXYgKnJvb3QgPSByZGV2LT5wZGV2LT5idXMtPnNlbGY7CiAJZW51bSBwY2lfYnVzX3NwZWVkIHNw ZWVkX2NhcDsKLQlpbnQgYnJpZGdlX3BvcywgZ3B1X3BvczsKIAl1MzIgc3BlZWRfY250bCwgY3Vy cmVudF9kYXRhX3JhdGU7CiAJaW50IGk7CiAJdTE2IHRtcDE2OwpAQCAtNzEyOSwxMiArNzEyOCw3 IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2Ug KnJkZXYpCiAJCURSTV9JTkZPKCJlbmFibGluZyBQQ0lFIGdlbiAyIGxpbmsgc3BlZWRzLCBkaXNh YmxlIHdpdGggcmFkZW9uLnBjaWVfZ2VuMj0wXG4iKTsKIAl9CiAKLQlicmlkZ2VfcG9zID0gcGNp X3BjaWVfY2FwKHJvb3QpOwotCWlmICghYnJpZGdlX3BvcykKLQkJcmV0dXJuOwotCi0JZ3B1X3Bv cyA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsKLQlpZiAoIWdwdV9wb3MpCisJaWYgKCFwY2lf aXNfcGNpZShyb290KSB8fCAhcGNpX2lzX3BjaWUocmRldi0+cGRldikpCiAJCXJldHVybjsKIAog CWlmIChzcGVlZF9jYXAgPT0gUENJRV9TUEVFRF84XzBHVCkgewpAQCAtNzE0NCwxNCArNzEzOCwx NyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNl ICpyZGV2KQogCQkJdTE2IGJyaWRnZV9jZmcyLCBncHVfY2ZnMjsKIAkJCXUzMiBtYXhfbHcsIGN1 cnJlbnRfbHcsIHRtcDsKIAotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3Bv cyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Ci0JCQlwY2lfcmVhZF9jb25maWdfd29y ZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZncHVfY2ZnKTsKKwkJCXBj aWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkgICZi cmlkZ2VfY2ZnKTsKKwkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwgUENJ X0VYUF9MTktDVEwsCisJCQkJCQkgICZncHVfY2ZnKTsKIAogCQkJdG1wMTYgPSBicmlkZ2VfY2Zn IHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290LCBi cmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCXBjaWVfY2FwYWJpbGl0eV93 cml0ZV93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7CiAKIAkJCXRtcDE2ID0gZ3B1 X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hBV0Q7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRl di0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7CisJCQlwY2llX2NhcGFi aWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAgIHRt cDE2KTsKIAogCQkJdG1wID0gUlJFRzMyX1BDSUUoUENJRV9MQ19TVEFUVVMxKTsKIAkJCW1heF9s dyA9ICh0bXAgJiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX01BU0spID4+IExDX0RFVEVDVEVEX0xJ TktfV0lEVEhfU0hJRlQ7CkBAIC03MTY5LDE1ICs3MTY2LDIzIEBAIHN0YXRpYyB2b2lkIHNpX3Bj aWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAKIAkJCWZvciAoaSA9 IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQkJLyogY2hlY2sgc3RhdHVzICovCi0JCQkJcGNpX3JlYWRf Y29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfREVWU1RBLCAmdG1wMTYp OworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwKKwkJCQkJCQkgIFBD SV9FWFBfREVWU1RBLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQlpZiAodG1wMTYgJiBQQ0lfRVhQ X0RFVlNUQV9UUlBORCkKIAkJCQkJYnJlYWs7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJCQlwY2lf cmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZn cHVfY2ZnKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5L Q1RMLAorCQkJCQkJCSAgJmJyaWRnZV9jZmcpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dv cmQocmRldi0+cGRldiwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJmdwdV9j ZmcpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9F WFBfTE5LQ1RMMiwgJmJyaWRnZV9jZmcyKTsKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChyZGV2 LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmZ3B1X2NmZzIpOworCQkJCXBjaWVf Y2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgJmJy aWRnZV9jZmcyKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJkZXYtPnBkZXYsCisJ CQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAmZ3B1X2NmZzIpOwogCiAJCQkJdG1w ID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NOVEw0KTsKIAkJCQl0bXAgfD0gTENfU0VUX1FV SUVTQ0U7CkBAIC03MTkwLDMyICs3MTk1LDQ2IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19l bmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCQkJbXNsZWVwKDEwMCk7CiAKIAkJ CQkvKiBsaW5rY3RsICovCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3Bv cyArIFBDSV9FWFBfTE5LQ1RMLCAmdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dv cmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9 IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwogCQkJCXRtcDE2IHw9IChicmlkZ2VfY2ZnICYgUENJX0VY UF9MTktDVExfSEFXRCk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9w b3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93 b3JkKHJvb3QsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAgdG1wMTYpOwog Ci0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBf TE5LQ1RMLCAmdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRl diwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQl0bXAx NiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKIAkJCQl0bXAxNiB8PSAoZ3B1X2NmZyAmIFBDSV9F WFBfTE5LQ1RMX0hBV0QpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBn cHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfd3Jp dGVfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAg IHRtcDE2KTsKIAogCQkJCS8qIGxpbmtjdGwyICovCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQo cm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKKwkJCQlwY2llX2Nh cGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCQkgICZ0bXAx Nik7CiAJCQkJdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJCSAg IFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwogCQkJCXRtcDE2IHw9IChicmlkZ2VfY2ZnMiAm CiAJCQkJCSAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJCQkJICAgUENJX0VYUF9M TktDVEwyX1RYX01BUkdJTikpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290LCBicmlk Z2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3dy aXRlX3dvcmQocm9vdCwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAgdG1w MTYpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBD SV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJk ZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAmdG1wMTYpOwog CQkJCXRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAogCQkJCQkgICBQQ0lf RVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKIAkJCQl0bXAxNiB8PSAoZ3B1X2NmZzIgJgogCQkJCQkg IChQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMMl9U WF9NQVJHSU4pKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3Bv cyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93 b3JkKHJkZXYtPnBkZXYsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgIHRt cDE2KTsKIAogCQkJCXRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19DTlRMNCk7CiAJCQkJ dG1wICY9IH5MQ19TRVRfUVVJRVNDRTsKQEAgLTcyMjksNyArNzI0OCw3IEBAIHN0YXRpYyB2b2lk IHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJc3BlZWRf Y250bCAmPSB+TENfRk9SQ0VfRElTX1NXX1NQRUVEX0NIQU5HRTsKIAlXUkVHMzJfUENJRV9QT1JU KFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7CiAKLQlwY2lfcmVhZF9jb25maWdfd29y ZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOworCXBjaWVf Y2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYp OwogCXRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTDJfVExTOwogCWlmIChzcGVlZF9jYXAgPT0gUENJ RV9TUEVFRF84XzBHVCkKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktDVEwyX1RMU184XzBHVDsgLyog Z2VuMyAqLwpAQCAtNzIzNyw3ICs3MjU2LDcgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2Vu YWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktD VEwyX1RMU181XzBHVDsgLyogZ2VuMiAqLwogCWVsc2UKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktD VEwyX1RMU18yXzVHVDsgLyogZ2VuMSAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5w ZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5 X3dyaXRlX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CiAKIAlzcGVl ZF9jbnRsID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX1NQRUVEX0NOVEwpOwogCXNwZWVkX2Nu dGwgfD0gTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFOR0U7Ci0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== 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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E11EC432C0 for ; Mon, 18 Nov 2019 08:37:20 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id E388C2071C for ; Mon, 18 Nov 2019 08:37:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E388C2071C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=fredlawl.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=amd-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id D921C6E0BE; Mon, 18 Nov 2019 08:37:10 +0000 (UTC) Received: from mail-ot1-x344.google.com (mail-ot1-x344.google.com [IPv6:2607:f8b0:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id C256F89F9F for ; Mon, 18 Nov 2019 00:35:18 +0000 (UTC) Received: by mail-ot1-x344.google.com with SMTP id b16so13001232otk.9 for ; Sun, 17 Nov 2019 16:35:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=o9a/ARXqmXC+qrG3kibgjJ6rdbT5QPFVjCrcN6rdzu4=; b=k6kLJZtG5cQ9am+dmfpTYSf07UBaXWrazt7sB+kdSdzTqLBdvbeN+FozZzzrv863q8 W+hWu+0joyOtr2S9i6/NzH8Cq+6XCvUK0BwY1YZk57wFkl9h6IFhqJO7yn/eSep5qsDM qOpQ+oD1UQyObk5ElNsUKENNlA8brHZ/EA61sUhgxFrAmw+0ZsZDZxIYUq1SDVohEr0d 81SpCvqJFcxZBBqCoucTHew3TS+Qihyi1uPkwi7g8lkYomfBNCI3FH/uql6QglwAvq4D WIf048VIHhQajmWmiZ9cOvv3kWv8T/Hgen5yIyp6uVnuZxmxWg8v/9gGo4sYN56YE9d8 +7tw== X-Gm-Message-State: APjAAAW+ZlnvdiN9lErqU3HBWz8Cv3/gPaI9XRCAcsFQWbZWLWHGccz3 poYkSQKejj+ghyNzsnXhb4wOOw== X-Google-Smtp-Source: APXvYqwvAxsPRnehA/6VGJOoX5IPO7afqVx9iGTMeKnmMS7MaDZ1CUsBmvJh8eBcJ3WmaWpYTxF3bw== X-Received: by 2002:a05:6830:1f4d:: with SMTP id u13mr21476002oth.77.1574037317618; Sun, 17 Nov 2019 16:35:17 -0800 (PST) Received: from com.attlocal.net ([2600:1700:4870:71e0::10]) by smtp.gmail.com with ESMTPSA id d132sm5543922oif.2.2019.11.17.16.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Nov 2019 16:35:16 -0800 (PST) From: Frederick Lawler To: alexander.deucher@amd.com, christian.koenig@amd.com, David1.Zhou@amd.com, airlied@linux.ie, daniel@ffwll.ch, bhelgaas@google.com Subject: [PATCH v2 1/1] drm: Prefer pcie_capability_read_word() Date: Sun, 17 Nov 2019 18:35:13 -0600 Message-Id: <20191118003513.10852-1-fred@fredlawl.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 18 Nov 2019 08:37:06 +0000 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fredlawl-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=o9a/ARXqmXC+qrG3kibgjJ6rdbT5QPFVjCrcN6rdzu4=; b=m5i1mxZLFXT5f+wHjLSAe+kiEyMEL6wxggU+FwsleR2Hpu1LO8AzY1Np5NACkqlZW7 4+yssz36f+iD0ptmZ87/oQqBlXyfhtII1f6sDGeLmPx99KealUe9tz/pSI2TuBOUc8z2 8mvgDYG6ar4d5/qnn0lcEeNAMCCYz13LqbJV2TDxsl63FsksY9RrhCASLuoFFsd49V6G kBJzu9SmmwsxY7EMuQty3QS4aZjeynx1UB2hIk09JTb7rmL+u1uR8QgCatr1sIMpU38t Zo/eo1KfszqJet2dVI0DBSWkCitRFe+l+ogivaELsHc7Kl7tLzUQVSX/CuKLhHfUlSor fjNQ== X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Frederick Lawler , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, imirkin@alum.mit.edu Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Message-ID: <20191118003513.qAUDa4Uk9ZOaZqDztJqhwaNuw-RIGlOyTzFWT493gbI@z> Q29tbWl0IDhjMGQzYTAyYzEzMCAoIlBDSTogQWRkIGFjY2Vzc29ycyBmb3IgUENJIEV4cHJlc3Mg Q2FwYWJpbGl0eSIpCmFkZGVkIGFjY2Vzc29ycyBmb3IgdGhlIFBDSSBFeHByZXNzIENhcGFiaWxp dHkgc28gdGhhdCBkcml2ZXJzIGRpZG4ndApuZWVkIHRvIGJlIGF3YXJlIG9mIGRpZmZlcmVuY2Vz IGJldHdlZW4gdjEgYW5kIHYyIG9mIHRoZSBQQ0kKRXhwcmVzcyBDYXBhYmlsaXR5LgoKUmVwbGFj ZSBwY2lfcmVhZF9jb25maWdfd29yZCgpIGFuZCBwY2lfd3JpdGVfY29uZmlnX3dvcmQoKSBjYWxs cyB3aXRoCnBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQoKSBhbmQgcGNpZV9jYXBhYmlsaXR5X3dy aXRlX3dvcmQoKS4KClNpZ25lZC1vZmYtYnk6IEZyZWRlcmljayBMYXdsZXIgPGZyZWRAZnJlZGxh d2wuY29tPgoKLS0tClYyCi0gU3F1YXNoIGJvdGggZHJtIGNvbW1pdHMgaW50byBvbmUKLSBSZWJh c2Ugb250b3Agb2YgZDQ2ZWFjMWU2NThiCi0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv Y2lrLmMgfCA2MyArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3NpLmMgIHwgNzEgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYyAgICAgfCA3MCArKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYyAgICAgIHwgNzMgKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMTc0IGluc2VydGlvbnMo KyksIDEwMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9jaWsuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Npay5jCmluZGV4IDMwNjdi Yjg3NDAzMi4uZjM2OWUzNDA4ZWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9jaWsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwpAQCAtMTM4 NCw3ICsxMzg0LDYgQEAgc3RhdGljIGludCBjaWtfc2V0X3ZjZV9jbG9ja3Moc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIHUzMiBldmNsaywgdTMyIGVjY2xrKQogc3RhdGljIHZvaWQgY2lrX3Bj aWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IHBj aV9kZXYgKnJvb3QgPSBhZGV2LT5wZGV2LT5idXMtPnNlbGY7Ci0JaW50IGJyaWRnZV9wb3MsIGdw dV9wb3M7CiAJdTMyIHNwZWVkX2NudGwsIGN1cnJlbnRfZGF0YV9yYXRlOwogCWludCBpOwogCXUx NiB0bXAxNjsKQEAgLTE0MTksMTIgKzE0MTgsNyBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4z X2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAkJRFJNX0lORk8oImVuYWJsaW5n IFBDSUUgZ2VuIDIgbGluayBzcGVlZHMsIGRpc2FibGUgd2l0aCBhbWRncHUucGNpZV9nZW4yPTBc biIpOwogCX0KIAotCWJyaWRnZV9wb3MgPSBwY2lfcGNpZV9jYXAocm9vdCk7Ci0JaWYgKCFicmlk Z2VfcG9zKQotCQlyZXR1cm47Ci0KLQlncHVfcG9zID0gcGNpX3BjaWVfY2FwKGFkZXYtPnBkZXYp OwotCWlmICghZ3B1X3BvcykKKwlpZiAoIXBjaV9pc19wY2llKHJvb3QpIHx8ICFwY2lfaXNfcGNp ZShhZGV2LT5wZGV2KSkKIAkJcmV0dXJuOwogCiAJaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sg JiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjMpIHsKQEAgLTE0MzQsMTQgKzE0Mjgs MTcgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiAJCQl1MTYgYnJpZGdlX2NmZzIsIGdwdV9jZmcyOwogCQkJdTMyIG1heF9sdywg Y3VycmVudF9sdywgdG1wOwogCi0JCQlwY2lfcmVhZF9jb25maWdfd29yZChyb290LCBicmlkZ2Vf cG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJCXBjaV9yZWFkX2NvbmZpZ193 b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmdwdV9jZmcpOworCQkJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAg JmJyaWRnZV9jZmcpOworCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LCBQ Q0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAgJmdwdV9jZmcpOwogCiAJCQl0bXAxNiA9IGJyaWRnZV9j ZmcgfCBQQ0lfRVhQX0xOS0NUTF9IQVdEOwotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3Qs IGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJcGNpZV9jYXBhYmlsaXR5 X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKIAogCQkJdG1wMTYgPSBn cHVfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93cml0ZV9jb25maWdfd29yZChh ZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCXBjaWVfY2Fw YWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJICAg dG1wMTYpOwogCiAJCQl0bXAgPSBSUkVHMzJfUENJRShpeFBDSUVfTENfU1RBVFVTMSk7CiAJCQlt YXhfbHcgPSAodG1wICYgUENJRV9MQ19TVEFUVVMxX19MQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX01B U0spID4+CkBAIC0xNDY1LDE1ICsxNDYyLDIzIEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNf ZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCiAJCQlmb3IgKGkgPSAwOyBpIDwg MTA7IGkrKykgewogCQkJCS8qIGNoZWNrIHN0YXR1cyAqLwotCQkJCXBjaV9yZWFkX2NvbmZpZ193 b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnRtcDE2KTsKKwkJCQlw Y2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0RF VlNUQSwKKwkJCQkJCQkgICZ0bXAxNik7CiAJCQkJaWYgKHRtcDE2ICYgUENJX0VYUF9ERVZTVEFf VFJQTkQpCiAJCQkJCWJyZWFrOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJp ZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Ci0JCQkJcGNpX3JlYWRfY29u ZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmZ3B1X2NmZyk7 CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKKwkJ CQkJCQkgICZicmlkZ2VfY2ZnKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYt PnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICZncHVfY2ZnKTsKIAot CQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NU TDIsICZicmlkZ2VfY2ZnMik7Ci0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwg Z3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmdwdV9jZmcyKTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCQkgICZicmlkZ2VfY2Zn Mik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAorCQkJCQkJCSAg UENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgJmdwdV9jZmcyKTsKIAogCQkJCXRtcCA9IFJSRUcz Ml9QQ0lFKGl4UENJRV9MQ19DTlRMNCk7CiAJCQkJdG1wIHw9IFBDSUVfTENfQ05UTDRfX0xDX1NF VF9RVUlFU0NFX01BU0s7CkBAIC0xNDg2LDE4ICsxNDkxLDI1IEBAIHN0YXRpYyB2b2lkIGNpa19w Y2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJCW1zbGVlcCgx MDApOwogCiAJCQkJLyogbGlua2N0bCAqLwotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3Qs IGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJ CQl0bXAxNiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKIAkJCQl0bXAxNiB8PSAoYnJpZGdlX2Nm ZyAmIFBDSV9FWFBfTE5LQ1RMX0hBV0QpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290 LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfd3JpdGVfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICB0bXAxNik7CiAK LQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9M TktDVEwsICZ0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2 LAorCQkJCQkJCSAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2 ICY9IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwogCQkJCXRtcDE2IHw9IChncHVfY2ZnICYgUENJX0VY UF9MTktDVExfSEFXRCk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdw dV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0 ZV93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAg dG1wMTYpOwogCiAJCQkJLyogbGlua2N0bDIgKi8KLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOworCQkJCXBjaWVfY2Fw YWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgJnRtcDE2 KTsKIAkJCQl0bXAxNiAmPSB+KFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJCQkJICAg UENJX0VYUF9MTktDVEwyX1RYX01BUkdJTik7CiAJCQkJdG1wMTYgfD0gKGJyaWRnZV9jZmcyICYK QEAgLTE1MTEsNyArMTUyMyw5IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJCXRtcDE2IHw9IChncHVfY2ZnMiAmCiAJCQkJ CSAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJCQkJICAgUENJX0VYUF9MTktDVEwy X1RYX01BUkdJTikpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVf cG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3dyaXRl X3dvcmQoYWRldi0+cGRldiwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAg dG1wMTYpOwogCiAJCQkJdG1wID0gUlJFRzMyX1BDSUUoaXhQQ0lFX0xDX0NOVEw0KTsKIAkJCQl0 bXAgJj0gflBDSUVfTENfQ05UTDRfX0xDX1NFVF9RVUlFU0NFX01BU0s7CkBAIC0xNTI2LDE1ICsx NTQwLDE2IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQogCXNwZWVkX2NudGwgJj0gflBDSUVfTENfU1BFRURfQ05UTF9fTENfRk9S Q0VfRElTX1NXX1NQRUVEX0NIQU5HRV9NQVNLOwogCVdSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVF RF9DTlRMLCBzcGVlZF9jbnRsKTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYs IGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5X3Jl YWRfd29yZChhZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7CiAJdG1wMTYgJj0g flBDSV9FWFBfTE5LQ1RMMl9UTFM7CisKIAlpZiAoYWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENB SUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VOMykKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktD VEwyX1RMU184XzBHVDsgLyogZ2VuMyAqLwogCWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21h c2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9TVVBQT1JUX0dFTjIpCiAJCXRtcDE2IHw9IFBDSV9F WFBfTE5LQ1RMMl9UTFNfNV8wR1Q7IC8qIGdlbjIgKi8KIAllbHNlCiAJCXRtcDE2IHw9IFBDSV9F WFBfTE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdlbjEgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQo YWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCXBjaWVfY2Fw YWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwog CiAJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lFKGl4UENJRV9MQ19TUEVFRF9DTlRMKTsKIAlzcGVl ZF9jbnRsIHw9IFBDSUVfTENfU1BFRURfQ05UTF9fTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFO R0VfTUFTSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaS5jCmluZGV4IGE3ZGNiMGQwZjAzOS4uOWY4MmJl ODc5MjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zaS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMKQEAgLTE2MzMsNyArMTYzMyw2IEBAIHN0 YXRpYyB2b2lkIHNpX2luaXRfZ29sZGVuX3JlZ2lzdGVycyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnJvb3QgPSBhZGV2LT5wZGV2LT5idXMtPnNl bGY7Ci0JaW50IGJyaWRnZV9wb3MsIGdwdV9wb3M7CiAJdTMyIHNwZWVkX2NudGwsIGN1cnJlbnRf ZGF0YV9yYXRlOwogCWludCBpOwogCXUxNiB0bXAxNjsKQEAgLTE2NjgsMTIgKzE2NjcsNyBAQCBz dGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQogCQlEUk1fSU5GTygiZW5hYmxpbmcgUENJRSBnZW4gMiBsaW5rIHNwZWVkcywgZGlzYWJsZSB3 aXRoIGFtZGdwdS5wY2llX2dlbjI9MFxuIik7CiAJfQogCi0JYnJpZGdlX3BvcyA9IHBjaV9wY2ll X2NhcChyb290KTsKLQlpZiAoIWJyaWRnZV9wb3MpCi0JCXJldHVybjsKLQotCWdwdV9wb3MgPSBw Y2lfcGNpZV9jYXAoYWRldi0+cGRldik7Ci0JaWYgKCFncHVfcG9zKQorCWlmICghcGNpX2lzX3Bj aWUocm9vdCkgfHwgIXBjaV9pc19wY2llKGFkZXYtPnBkZXYpKQogCQlyZXR1cm47CiAKIAlpZiAo YWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRfR0VO MykgewpAQCAtMTY4MiwxNCArMTY3NiwxNyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5h YmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQkJdTE2IGJyaWRnZV9jZmcyLCBncHVf Y2ZnMjsKIAkJCXUzMiBtYXhfbHcsIGN1cnJlbnRfbHcsIHRtcDsKIAotCQkJcGNpX3JlYWRfY29u ZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7 Ci0JCQlwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9M TktDVEwsICZncHVfY2ZnKTsKKwkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJ X0VYUF9MTktDVEwsCisJCQkJCQkgICZicmlkZ2VfY2ZnKTsKKwkJCXBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQoYWRldi0+cGRldiwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkgICZncHVfY2ZnKTsK IAogCQkJdG1wMTYgPSBicmlkZ2VfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93 cml0ZV9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2 KTsKKwkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLCB0 bXAxNik7CiAKIAkJCXRtcDE2ID0gZ3B1X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hBV0Q7Ci0JCQlw Y2lfd3JpdGVfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RM LCB0bXAxNik7CisJCQlwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChhZGV2LT5wZGV2LCBQQ0lf RVhQX0xOS0NUTCwKKwkJCQkJCSAgIHRtcDE2KTsKIAogCQkJdG1wID0gUlJFRzMyX1BDSUUoUENJ RV9MQ19TVEFUVVMxKTsKIAkJCW1heF9sdyA9ICh0bXAgJiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRI X01BU0spID4+IExDX0RFVEVDVEVEX0xJTktfV0lEVEhfU0hJRlQ7CkBAIC0xNzA2LDE1ICsxNzAz LDIzIEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiAJCQl9CiAKIAkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQkJcGNp X3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfREVWU1RBLCAm dG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQoYWRldi0+cGRldiwKKwkJCQkJ CQkgIFBDSV9FWFBfREVWU1RBLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQlpZiAodG1wMTYgJiBQ Q0lfRVhQX0RFVlNUQV9UUlBORCkKIAkJCQkJYnJlYWs7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdf d29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJ CQlwY2lfcmVhZF9jb25maWdfd29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktD VEwsICZncHVfY2ZnKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9F WFBfTE5LQ1RMLAorCQkJCQkJCSAgJmJyaWRnZV9jZmcpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQoYWRldi0+cGRldiwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAg JmdwdV9jZmcpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyAr IFBDSV9FWFBfTE5LQ1RMMiwgJmJyaWRnZV9jZmcyKTsKLQkJCQlwY2lfcmVhZF9jb25maWdfd29y ZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmZ3B1X2NmZzIpOworCQkJ CXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJ CSAgJmJyaWRnZV9jZmcyKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKGFkZXYtPnBk ZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAmZ3B1X2NmZzIpOwogCiAJ CQkJdG1wID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NOVEw0KTsKIAkJCQl0bXAgfD0gTENf U0VUX1FVSUVTQ0U7CkBAIC0xNzI2LDMxICsxNzMxLDQ0IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVf Z2VuM19lbmFibGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAKIAkJCQltZGVsYXkoMTAw KTsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQ X0xOS0NUTCwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBD SV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQl0bXAxNiAmPSB+UENJX0VYUF9M TktDVExfSEFXRDsKIAkJCQl0bXAxNiB8PSAoYnJpZGdlX2NmZyAmIFBDSV9FWFBfTE5LQ1RMX0hB V0QpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VY UF9MTktDVEwsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChyb290LCBQ Q0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICB0bXAxNik7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdf d29yZChhZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZ0bXAxNik7CisJCQkJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9M TktDVEwsCisJCQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTF9I QVdEOwogCQkJCXRtcDE2IHw9IChncHVfY2ZnICYgUENJX0VYUF9MTktDVExfSEFXRCk7Ci0JCQkJ cGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NU TCwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCisJ CQkJCQkJICAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAgdG1wMTYpOwogCi0JCQkJcGNpX3Jl YWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2 KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwK KwkJCQkJCQkgICZ0bXAxNik7CiAJCQkJdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJf Q09NUCB8CiAJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwogCQkJCXRtcDE2IHw9 IChicmlkZ2VfY2ZnMiAmCiAJCQkJCSAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJ CQkJICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTikpOwotCQkJCXBjaV93cml0ZV9jb25maWdf d29yZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJCQkJcGNp ZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDIs CisJCQkJCQkJICAgdG1wMTYpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRldi0+cGRl diwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxp dHlfcmVhZF93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJ CQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAg fAogCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKIAkJCQl0bXAxNiB8PSAoZ3B1 X2NmZzIgJgogCQkJCQkgIChQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJCSAgIFBD SV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRl di0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCQkJCXBjaWVfY2Fw YWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBkZXYsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwy LAorCQkJCQkJCSAgIHRtcDE2KTsKIAogCQkJCXRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9M Q19DTlRMNCk7CiAJCQkJdG1wICY9IH5MQ19TRVRfUVVJRVNDRTsKQEAgLTE3NjMsMTUgKzE3ODEs MTYgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rldmlj ZSAqYWRldikKIAlzcGVlZF9jbnRsICY9IH5MQ19GT1JDRV9ESVNfU1dfU1BFRURfQ0hBTkdFOwog CVdSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKIAotCXBj aV9yZWFkX2NvbmZpZ193b3JkKGFkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIs ICZ0bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChhZGV2LT5wZGV2LCBQQ0lfRVhQ X0xOS0NUTDIsICZ0bXAxNik7CiAJdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMMl9UTFM7CisKIAlp ZiAoYWRldi0+cG0ucGNpZV9nZW5fbWFzayAmIENBSUxfUENJRV9MSU5LX1NQRUVEX1NVUFBPUlRf R0VOMykKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktDVEwyX1RMU184XzBHVDsgLyogZ2VuMyAqLwog CWVsc2UgaWYgKGFkZXYtPnBtLnBjaWVfZ2VuX21hc2sgJiBDQUlMX1BDSUVfTElOS19TUEVFRF9T VVBQT1JUX0dFTjIpCiAJCXRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfNV8wR1Q7IC8qIGdl bjIgKi8KIAllbHNlCiAJCXRtcDE2IHw9IFBDSV9FWFBfTE5LQ1RMMl9UTFNfMl81R1Q7IC8qIGdl bjEgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9F WFBfTE5LQ1RMMiwgdG1wMTYpOworCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGFkZXYtPnBk ZXYsIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOwogCiAJc3BlZWRfY250bCA9IFJSRUczMl9QQ0lF X1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMKTsKIAlzcGVlZF9jbnRsIHw9IExDX0lOSVRJQVRFX0xJ TktfU1BFRURfQ0hBTkdFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsu YyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKaW5kZXggYTI4MDQ0MmM4MWFhLi4wOWE0 NzA5ZTY3ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWsuYwpAQCAtOTUwNCw3ICs5NTA0LDYgQEAgc3RhdGlj IHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7 CiAJc3RydWN0IHBjaV9kZXYgKnJvb3QgPSByZGV2LT5wZGV2LT5idXMtPnNlbGY7CiAJZW51bSBw Y2lfYnVzX3NwZWVkIHNwZWVkX2NhcDsKLQlpbnQgYnJpZGdlX3BvcywgZ3B1X3BvczsKIAl1MzIg c3BlZWRfY250bCwgY3VycmVudF9kYXRhX3JhdGU7CiAJaW50IGk7CiAJdTE2IHRtcDE2OwpAQCAt OTU0NiwxMiArOTU0NSw3IEBAIHN0YXRpYyB2b2lkIGNpa19wY2llX2dlbjNfZW5hYmxlKHN0cnVj dCByYWRlb25fZGV2aWNlICpyZGV2KQogCQlEUk1fSU5GTygiZW5hYmxpbmcgUENJRSBnZW4gMiBs aW5rIHNwZWVkcywgZGlzYWJsZSB3aXRoIHJhZGVvbi5wY2llX2dlbjI9MFxuIik7CiAJfQogCi0J YnJpZGdlX3BvcyA9IHBjaV9wY2llX2NhcChyb290KTsKLQlpZiAoIWJyaWRnZV9wb3MpCi0JCXJl dHVybjsKLQotCWdwdV9wb3MgPSBwY2lfcGNpZV9jYXAocmRldi0+cGRldik7Ci0JaWYgKCFncHVf cG9zKQorCWlmICghcGNpX2lzX3BjaWUocm9vdCkgfHwgIXBjaV9pc19wY2llKHJkZXYtPnBkZXYp KQogCQlyZXR1cm47CiAKIAlpZiAoc3BlZWRfY2FwID09IFBDSUVfU1BFRURfOF8wR1QpIHsKQEAg LTk1NjEsMTQgKzk1NTUsMTcgQEAgc3RhdGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3Ry dWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCQl1MTYgYnJpZGdlX2NmZzIsIGdwdV9jZmcyOwog CQkJdTMyIG1heF9sdywgY3VycmVudF9sdywgdG1wOwogCi0JCQlwY2lfcmVhZF9jb25maWdfd29y ZChyb290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJCXBj aV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwg JmdwdV9jZmcpOworCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xO S0NUTCwKKwkJCQkJCSAgJmJyaWRnZV9jZmcpOworCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29y ZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAgJmdwdV9jZmcpOwogCiAJCQl0 bXAxNiA9IGJyaWRnZV9jZmcgfCBQQ0lfRVhQX0xOS0NUTF9IQVdEOwotCQkJcGNpX3dyaXRlX2Nv bmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJ cGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsK IAogCQkJdG1wMTYgPSBncHVfY2ZnIHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93cml0 ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2 KTsKKwkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJkZXYtPnBkZXYsIFBDSV9FWFBfTE5L Q1RMLAorCQkJCQkJICAgdG1wMTYpOwogCiAJCQl0bXAgPSBSUkVHMzJfUENJRV9QT1JUKFBDSUVf TENfU1RBVFVTMSk7CiAJCQltYXhfbHcgPSAodG1wICYgTENfREVURUNURURfTElOS19XSURUSF9N QVNLKSA+PiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX1NISUZUOwpAQCAtOTU4NiwxNSArOTU4Mywy MyBAQCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2Rldmlj ZSAqcmRldikKIAogCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKIAkJCQkvKiBjaGVjayBz dGF0dXMgKi8KLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsg UENJX0VYUF9ERVZTVEEsICZ0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChy ZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9ERVZTVEEsCisJCQkJCQkJICAmdG1wMTYpOwog CQkJCWlmICh0bXAxNiAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKQogCQkJCQlicmVhazsKIAotCQkJ CXBjaV9yZWFkX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwg JmJyaWRnZV9jZmcpOwotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9w b3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmdwdV9jZmcpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFk X3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAmYnJpZGdlX2NmZyk7CisJCQkJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9M TktDVEwsCisJCQkJCQkJICAmZ3B1X2NmZyk7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmYnJpZGdlX2NmZzIpOwotCQkJCXBj aV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIs ICZncHVfY2ZnMik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQ X0xOS0NUTDIsCisJCQkJCQkJICAmYnJpZGdlX2NmZzIpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9y ZWFkX3dvcmQocmRldi0+cGRldiwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCQkg ICZncHVfY2ZnMik7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUENJRV9QT1JUKFBDSUVfTENfQ05UTDQp OwogCQkJCXRtcCB8PSBMQ19TRVRfUVVJRVNDRTsKQEAgLTk2MDcsMzIgKzk2MTIsNDUgQEAgc3Rh dGljIHZvaWQgY2lrX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYp CiAJCQkJbXNsZWVwKDEwMCk7CiAKIAkJCQkvKiBsaW5rY3RsICovCi0JCQkJcGNpX3JlYWRfY29u ZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMLCAmdG1wMTYpOworCQkJ CXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJ ICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwogCQkJCXRtcDE2 IHw9IChicmlkZ2VfY2ZnICYgUENJX0VYUF9MTktDVExfSEFXRCk7Ci0JCQkJcGNpX3dyaXRlX2Nv bmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJ CXBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJ CSAgIHRtcDE2KTsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9w b3MgKyBQQ0lfRVhQX0xOS0NUTCwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93 b3JkKHJkZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCQkgICZ0bXAx Nik7CiAJCQkJdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMX0hBV0Q7CiAJCQkJdG1wMTYgfD0gKGdw dV9jZmcgJiBQQ0lfRVhQX0xOS0NUTF9IQVdEKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQo cmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7CisJCQkJcGNpZV9j YXBhYmlsaXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NU TCwKKwkJCQkJCQkgICB0bXAxNik7CiAKIAkJCQkvKiBsaW5rY3RsMiAqLwotCQkJCXBjaV9yZWFk X2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7 CisJCQkJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyb290LCBQQ0lfRVhQX0xOS0NUTDIsCisJ CQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NP TVAgfAogCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKIAkJCQl0bXAxNiB8PSAo YnJpZGdlX2NmZzIgJgogCQkJCQkgIChQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJ CSAgIFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dv cmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCQkJCXBjaWVf Y2FwYWJpbGl0eV93cml0ZV93b3JkKHJvb3QsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwyLAor CQkJCQkJCSAgIHRtcDE2KTsKIAotCQkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYs IGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5 X3JlYWRfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJ CSAgJnRtcDE2KTsKIAkJCQl0bXAxNiAmPSB+KFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwK IAkJCQkJICAgUENJX0VYUF9MTktDVEwyX1RYX01BUkdJTik7CiAJCQkJdG1wMTYgfD0gKGdwdV9j ZmcyICYKIAkJCQkJICAoUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAogCQkJCQkgICBQQ0lf RVhQX0xOS0NUTDJfVFhfTUFSR0lOKSk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJkZXYt PnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFi aWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMMiwK KwkJCQkJCQkgICB0bXAxNik7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUENJRV9QT1JUKFBDSUVfTENf Q05UTDQpOwogCQkJCXRtcCAmPSB+TENfU0VUX1FVSUVTQ0U7CkBAIC05NjQ2LDcgKzk2NjQsNyBA QCBzdGF0aWMgdm9pZCBjaWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAq cmRldikKIAlzcGVlZF9jbnRsICY9IH5MQ19GT1JDRV9ESVNfU1dfU1BFRURfQ0hBTkdFOwogCVdS RUczMl9QQ0lFX1BPUlQoUENJRV9MQ19TUEVFRF9DTlRMLCBzcGVlZF9jbnRsKTsKIAotCXBjaV9y ZWFkX2NvbmZpZ193b3JkKHJkZXYtPnBkZXYsIGdwdV9wb3MgKyBQQ0lfRVhQX0xOS0NUTDIsICZ0 bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xO S0NUTDIsICZ0bXAxNik7CiAJdG1wMTYgJj0gflBDSV9FWFBfTE5LQ1RMMl9UTFM7CiAJaWYgKHNw ZWVkX2NhcCA9PSBQQ0lFX1NQRUVEXzhfMEdUKQogCQl0bXAxNiB8PSBQQ0lfRVhQX0xOS0NUTDJf VExTXzhfMEdUOyAvKiBnZW4zICovCkBAIC05NjU0LDcgKzk2NzIsNyBAQCBzdGF0aWMgdm9pZCBj aWtfcGNpZV9nZW4zX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAkJdG1wMTYg fD0gUENJX0VYUF9MTktDVEwyX1RMU181XzBHVDsgLyogZ2VuMiAqLwogCWVsc2UKIAkJdG1wMTYg fD0gUENJX0VYUF9MTktDVEwyX1RMU18yXzVHVDsgLyogZ2VuMSAqLwotCXBjaV93cml0ZV9jb25m aWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJ cGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCB0 bXAxNik7CiAKIAlzcGVlZF9jbnRsID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX1NQRUVEX0NO VEwpOwogCXNwZWVkX2NudGwgfD0gTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFOR0U7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3NpLmMKaW5kZXggNTI5ZTcwYTQyMDE5Li42N2E5OGIzMzcwZDEgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9yYWRlb24vc2kuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Np LmMKQEAgLTMyNTcsNyArMzI1Nyw3IEBAIHN0YXRpYyB2b2lkIHNpX2dwdV9pbml0KHN0cnVjdCBy YWRlb25fZGV2aWNlICpyZGV2KQogCQkvKiBYWFggd2hhdCBhYm91dCAxMj8gKi8KIAkJcmRldi0+ Y29uZmlnLnNpLnRpbGVfY29uZmlnIHw9ICgzIDw8IDApOwogCQlicmVhazsKLQl9CQorCX0KIAlz d2l0Y2ggKChtY19hcmJfcmFtY2ZnICYgTk9PRkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQp IHsKIAljYXNlIDA6IC8qIGZvdXIgYmFua3MgKi8KIAkJcmRldi0+Y29uZmlnLnNpLnRpbGVfY29u ZmlnIHw9IDAgPDwgNDsKQEAgLTcwODcsNyArNzA4Nyw2IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVf Z2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJc3RydWN0IHBjaV9k ZXYgKnJvb3QgPSByZGV2LT5wZGV2LT5idXMtPnNlbGY7CiAJZW51bSBwY2lfYnVzX3NwZWVkIHNw ZWVkX2NhcDsKLQlpbnQgYnJpZGdlX3BvcywgZ3B1X3BvczsKIAl1MzIgc3BlZWRfY250bCwgY3Vy cmVudF9kYXRhX3JhdGU7CiAJaW50IGk7CiAJdTE2IHRtcDE2OwpAQCAtNzEyOSwxMiArNzEyOCw3 IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2Ug KnJkZXYpCiAJCURSTV9JTkZPKCJlbmFibGluZyBQQ0lFIGdlbiAyIGxpbmsgc3BlZWRzLCBkaXNh YmxlIHdpdGggcmFkZW9uLnBjaWVfZ2VuMj0wXG4iKTsKIAl9CiAKLQlicmlkZ2VfcG9zID0gcGNp X3BjaWVfY2FwKHJvb3QpOwotCWlmICghYnJpZGdlX3BvcykKLQkJcmV0dXJuOwotCi0JZ3B1X3Bv cyA9IHBjaV9wY2llX2NhcChyZGV2LT5wZGV2KTsKLQlpZiAoIWdwdV9wb3MpCisJaWYgKCFwY2lf aXNfcGNpZShyb290KSB8fCAhcGNpX2lzX3BjaWUocmRldi0+cGRldikpCiAJCXJldHVybjsKIAog CWlmIChzcGVlZF9jYXAgPT0gUENJRV9TUEVFRF84XzBHVCkgewpAQCAtNzE0NCwxNCArNzEzOCwx NyBAQCBzdGF0aWMgdm9pZCBzaV9wY2llX2dlbjNfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNl ICpyZGV2KQogCQkJdTE2IGJyaWRnZV9jZmcyLCBncHVfY2ZnMjsKIAkJCXUzMiBtYXhfbHcsIGN1 cnJlbnRfbHcsIHRtcDsKIAotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3Bv cyArIFBDSV9FWFBfTE5LQ1RMLCAmYnJpZGdlX2NmZyk7Ci0JCQlwY2lfcmVhZF9jb25maWdfd29y ZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZncHVfY2ZnKTsKKwkJCXBj aWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkgICZi cmlkZ2VfY2ZnKTsKKwkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwgUENJ X0VYUF9MTktDVEwsCisJCQkJCQkgICZncHVfY2ZnKTsKIAogCQkJdG1wMTYgPSBicmlkZ2VfY2Zn IHwgUENJX0VYUF9MTktDVExfSEFXRDsKLQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290LCBi cmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCXBjaWVfY2FwYWJpbGl0eV93 cml0ZV93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7CiAKIAkJCXRtcDE2ID0gZ3B1 X2NmZyB8IFBDSV9FWFBfTE5LQ1RMX0hBV0Q7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRl di0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfTE5LQ1RMLCB0bXAxNik7CisJCQlwY2llX2NhcGFi aWxpdHlfd3JpdGVfd29yZChyZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTCwKKwkJCQkJCSAgIHRt cDE2KTsKIAogCQkJdG1wID0gUlJFRzMyX1BDSUUoUENJRV9MQ19TVEFUVVMxKTsKIAkJCW1heF9s dyA9ICh0bXAgJiBMQ19ERVRFQ1RFRF9MSU5LX1dJRFRIX01BU0spID4+IExDX0RFVEVDVEVEX0xJ TktfV0lEVEhfU0hJRlQ7CkBAIC03MTY5LDE1ICs3MTY2LDIzIEBAIHN0YXRpYyB2b2lkIHNpX3Bj aWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAKIAkJCWZvciAoaSA9 IDA7IGkgPCAxMDsgaSsrKSB7CiAJCQkJLyogY2hlY2sgc3RhdHVzICovCi0JCQkJcGNpX3JlYWRf Y29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBfREVWU1RBLCAmdG1wMTYp OworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwKKwkJCQkJCQkgIFBD SV9FWFBfREVWU1RBLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQlpZiAodG1wMTYgJiBQQ0lfRVhQ X0RFVlNUQV9UUlBORCkKIAkJCQkJYnJlYWs7CiAKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChy b290LCBicmlkZ2VfcG9zICsgUENJX0VYUF9MTktDVEwsICZicmlkZ2VfY2ZnKTsKLQkJCQlwY2lf cmVhZF9jb25maWdfd29yZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwsICZn cHVfY2ZnKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5L Q1RMLAorCQkJCQkJCSAgJmJyaWRnZV9jZmcpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dv cmQocmRldi0+cGRldiwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJmdwdV9j ZmcpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3BvcyArIFBDSV9F WFBfTE5LQ1RMMiwgJmJyaWRnZV9jZmcyKTsKLQkJCQlwY2lfcmVhZF9jb25maWdfd29yZChyZGV2 LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmZ3B1X2NmZzIpOworCQkJCXBjaWVf Y2FwYWJpbGl0eV9yZWFkX3dvcmQocm9vdCwgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgJmJy aWRnZV9jZmcyKTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJkZXYtPnBkZXYsCisJ CQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAmZ3B1X2NmZzIpOwogCiAJCQkJdG1w ID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX0NOVEw0KTsKIAkJCQl0bXAgfD0gTENfU0VUX1FV SUVTQ0U7CkBAIC03MTkwLDMyICs3MTk1LDQ2IEBAIHN0YXRpYyB2b2lkIHNpX3BjaWVfZ2VuM19l bmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCQkJbXNsZWVwKDEwMCk7CiAKIAkJ CQkvKiBsaW5rY3RsICovCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocm9vdCwgYnJpZGdlX3Bv cyArIFBDSV9FWFBfTE5LQ1RMLCAmdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dv cmQocm9vdCwgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAmdG1wMTYpOwogCQkJCXRtcDE2ICY9 IH5QQ0lfRVhQX0xOS0NUTF9IQVdEOwogCQkJCXRtcDE2IHw9IChicmlkZ2VfY2ZnICYgUENJX0VY UF9MTktDVExfSEFXRCk7Ci0JCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHJvb3QsIGJyaWRnZV9w b3MgKyBQQ0lfRVhQX0xOS0NUTCwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93 b3JkKHJvb3QsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwsCisJCQkJCQkJICAgdG1wMTYpOwog Ci0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBDSV9FWFBf TE5LQ1RMLCAmdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRl diwKKwkJCQkJCQkgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAgJnRtcDE2KTsKIAkJCQl0bXAx NiAmPSB+UENJX0VYUF9MTktDVExfSEFXRDsKIAkJCQl0bXAxNiB8PSAoZ3B1X2NmZyAmIFBDSV9F WFBfTE5LQ1RMX0hBV0QpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5wZGV2LCBn cHVfcG9zICsgUENJX0VYUF9MTktDVEwsIHRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfd3Jp dGVfd29yZChyZGV2LT5wZGV2LAorCQkJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMLAorCQkJCQkJCSAg IHRtcDE2KTsKIAogCQkJCS8qIGxpbmtjdGwyICovCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQo cm9vdCwgYnJpZGdlX3BvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKKwkJCQlwY2llX2Nh cGFiaWxpdHlfcmVhZF93b3JkKHJvb3QsIFBDSV9FWFBfTE5LQ1RMMiwKKwkJCQkJCQkgICZ0bXAx Nik7CiAJCQkJdG1wMTYgJj0gfihQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJCSAg IFBDSV9FWFBfTE5LQ1RMMl9UWF9NQVJHSU4pOwogCQkJCXRtcDE2IHw9IChicmlkZ2VfY2ZnMiAm CiAJCQkJCSAgKFBDSV9FWFBfTE5LQ1RMMl9FTlRFUl9DT01QIHwKIAkJCQkJICAgUENJX0VYUF9M TktDVEwyX1RYX01BUkdJTikpOwotCQkJCXBjaV93cml0ZV9jb25maWdfd29yZChyb290LCBicmlk Z2VfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJCQkJcGNpZV9jYXBhYmlsaXR5X3dy aXRlX3dvcmQocm9vdCwKKwkJCQkJCQkgICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAgdG1w MTYpOwogCi0JCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3BvcyArIFBD SV9FWFBfTE5LQ1RMMiwgJnRtcDE2KTsKKwkJCQlwY2llX2NhcGFiaWxpdHlfcmVhZF93b3JkKHJk ZXYtPnBkZXYsCisJCQkJCQkJICBQQ0lfRVhQX0xOS0NUTDIsCisJCQkJCQkJICAmdG1wMTYpOwog CQkJCXRtcDE2ICY9IH4oUENJX0VYUF9MTktDVEwyX0VOVEVSX0NPTVAgfAogCQkJCQkgICBQQ0lf RVhQX0xOS0NUTDJfVFhfTUFSR0lOKTsKIAkJCQl0bXAxNiB8PSAoZ3B1X2NmZzIgJgogCQkJCQkg IChQQ0lfRVhQX0xOS0NUTDJfRU5URVJfQ09NUCB8CiAJCQkJCSAgIFBDSV9FWFBfTE5LQ1RMMl9U WF9NQVJHSU4pKTsKLQkJCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocmRldi0+cGRldiwgZ3B1X3Bv cyArIFBDSV9FWFBfTE5LQ1RMMiwgdG1wMTYpOworCQkJCXBjaWVfY2FwYWJpbGl0eV93cml0ZV93 b3JkKHJkZXYtPnBkZXYsCisJCQkJCQkJICAgUENJX0VYUF9MTktDVEwyLAorCQkJCQkJCSAgIHRt cDE2KTsKIAogCQkJCXRtcCA9IFJSRUczMl9QQ0lFX1BPUlQoUENJRV9MQ19DTlRMNCk7CiAJCQkJ dG1wICY9IH5MQ19TRVRfUVVJRVNDRTsKQEAgLTcyMjksNyArNzI0OCw3IEBAIHN0YXRpYyB2b2lk IHNpX3BjaWVfZ2VuM19lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJc3BlZWRf Y250bCAmPSB+TENfRk9SQ0VfRElTX1NXX1NQRUVEX0NIQU5HRTsKIAlXUkVHMzJfUENJRV9QT1JU KFBDSUVfTENfU1BFRURfQ05UTCwgc3BlZWRfY250bCk7CiAKLQlwY2lfcmVhZF9jb25maWdfd29y ZChyZGV2LT5wZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYpOworCXBjaWVf Y2FwYWJpbGl0eV9yZWFkX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCAmdG1wMTYp OwogCXRtcDE2ICY9IH5QQ0lfRVhQX0xOS0NUTDJfVExTOwogCWlmIChzcGVlZF9jYXAgPT0gUENJ RV9TUEVFRF84XzBHVCkKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktDVEwyX1RMU184XzBHVDsgLyog Z2VuMyAqLwpAQCAtNzIzNyw3ICs3MjU2LDcgQEAgc3RhdGljIHZvaWQgc2lfcGNpZV9nZW4zX2Vu YWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktD VEwyX1RMU181XzBHVDsgLyogZ2VuMiAqLwogCWVsc2UKIAkJdG1wMTYgfD0gUENJX0VYUF9MTktD VEwyX1RMU18yXzVHVDsgLyogZ2VuMSAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZChyZGV2LT5w ZGV2LCBncHVfcG9zICsgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CisJcGNpZV9jYXBhYmlsaXR5 X3dyaXRlX3dvcmQocmRldi0+cGRldiwgUENJX0VYUF9MTktDVEwyLCB0bXAxNik7CiAKIAlzcGVl ZF9jbnRsID0gUlJFRzMyX1BDSUVfUE9SVChQQ0lFX0xDX1NQRUVEX0NOVEwpOwogCXNwZWVkX2Nu dGwgfD0gTENfSU5JVElBVEVfTElOS19TUEVFRF9DSEFOR0U7Ci0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBs aXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA==