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.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, 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 49060C18E5A for ; Tue, 10 Mar 2020 19:27:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1116321D7E for ; Tue, 10 Mar 2020 19:27:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="gLOKaX4F" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727225AbgCJT06 (ORCPT ); Tue, 10 Mar 2020 15:26:58 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:43905 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726851AbgCJT06 (ORCPT ); Tue, 10 Mar 2020 15:26:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583868417; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vBBQf8YSJ+Mjo+kqeDTD8Z4+zLQIuCyl3eitu/ifyRg=; b=gLOKaX4FUFgxhYjSeRfVd8SGQnJIggupH6sYrpniPJAQcX4Im4tnjUci7+QK/uIG0gc7Yt yQ2QASGsp3VA2PKKaBKdbQxeKnR6bCi24sNMhv3KhGMdR94Ef8Igwtv1vcYRWCxTq5Z+7A I7CC//hj5GnxWAT/Eh0pJ5jo3hlKz4U= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-418-f5NGIyrIP6SlVn9aogqbJg-1; Tue, 10 Mar 2020 15:26:51 -0400 X-MC-Unique: f5NGIyrIP6SlVn9aogqbJg-1 Received: by mail-wr1-f69.google.com with SMTP id c16so6370750wrt.2 for ; Tue, 10 Mar 2020 12:26:50 -0700 (PDT) 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=vBBQf8YSJ+Mjo+kqeDTD8Z4+zLQIuCyl3eitu/ifyRg=; b=swRumnhaH0EUj0UWhdryYKrXcETwUMLXLHFB5id+bVMgolkGWagwChXPBrd7ZH3W+w g6tlUSQyhxkXxT3xOsNE3UTZ6rQ/6PUeQTjISHplgRrx4RJY/yOuiO0eOE6z8166Lg7Z R2fgyD3PJsNeYgMv1lbFoejyDpa248EtQQznIj8J0RTyDu5topjeTLOCPwKNp5DTj70i qAyRcJG4O9AbNKxRx75Yslib6v4+j1oYnuQye9O9GvsC6H7UhQ/5CI11/bu9ZmM70RDh dRabLjNNe7IlRtOl8woR7KmjS9+bHqwUJrZ/WHWuvjOH7/9xw7O7DS4hJ00V8r3nipge W7dg== X-Gm-Message-State: ANhLgQ1CO4ClUHMIY7ieoupz09YcQVci10RajBJ6ARwZdqde90DgmrkK GqOmVhHMZyFZuSlkMzlUK02wuWaVyvf+sa0AnynxlKYApPjiUGuHvINqZNGmYl8qLw/uUCqTPb6 IENS97USdwOnwYelguTTo8TSP X-Received: by 2002:a7b:c153:: with SMTP id z19mr3416624wmi.37.1583868409468; Tue, 10 Mar 2020 12:26:49 -0700 (PDT) X-Google-Smtp-Source: ADFU+vulmI+P5MpROhNKaiKOfzCCxtCMi66TM8UrbbQOxyf42qxjAGtaVwzF6sV60157AZSfFYTJtQ== X-Received: by 2002:a7b:c153:: with SMTP id z19mr3416586wmi.37.1583868409147; Tue, 10 Mar 2020 12:26:49 -0700 (PDT) Received: from kherbst.pingu.com ([2a02:8308:b0be:6900:482c:9537:40:83ba]) by smtp.gmail.com with ESMTPSA id c8sm58633569wru.7.2020.03.10.12.26.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2020 12:26:48 -0700 (PDT) From: Karol Herbst To: linux-kernel@vger.kernel.org Cc: Karol Herbst , Bjorn Helgaas , Lyude Paul , "Rafael J . Wysocki" , Mika Westerberg , linux-pci@vger.kernel.org, linux-pm@vger.kernel.org, dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, Mika Westerberg Subject: [PATCH v7] pci: prevent putting nvidia GPUs into lower device states on certain intel bridges Date: Tue, 10 Mar 2020 20:26:27 +0100 Message-Id: <20200310192627.437947-1-kherbst@redhat.com> X-Mailer: git-send-email 2.24.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Fixes the infamous 'runtime PM' bug many users are facing on Laptops with Nvidia Pascal GPUs by skipping said PCI power state changes on the GPU. Depending on the used kernel there might be messages like those in demsg: "nouveau 0000:01:00.0: Refused to change power state, currently in D3" "nouveau 0000:01:00.0: can't change power state from D3cold to D0 (config space inaccessible)" followed by backtraces of kernel crashes or timeouts within nouveau. It's still unkown why this issue exists, but this is a reliable workaround and solves a very annoying issue for user having to choose between a crashing kernel or higher power consumption of their Laptops. Signed-off-by: Karol Herbst Cc: Bjorn Helgaas Cc: Lyude Paul Cc: Rafael J. Wysocki Cc: Mika Westerberg Cc: linux-pci@vger.kernel.org Cc: linux-pm@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: nouveau@lists.freedesktop.org Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=205623 Reviewed-by: Mika Westerberg --- v2: convert to pci_dev quirk put a proper technical explanation of the issue as a in-code comment v3: disable it only for certain combinations of intel and nvidia hardware v4: simplify quirk by setting flag on the GPU itself v5: restructure quirk to make it easier to add new IDs fix whitespace issues fix potential NULL pointer access update the quirk documentation v6: move quirk into nouveau v7: fix typos and commit message drivers/gpu/drm/nouveau/nouveau_drm.c | 57 +++++++++++++++++++++++++++ drivers/pci/pci.c | 8 ++++ include/linux/pci.h | 1 + 3 files changed, 66 insertions(+) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index b65ae817eabf..2c86f0248305 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -618,6 +618,60 @@ nouveau_drm_device_fini(struct drm_device *dev) kfree(drm); } +/* + * On some Intel PCIe bridge controllers doing a + * D0 -> D3hot -> D3cold -> D0 sequence causes Nvidia GPUs to not reappear. + * Skipping the intermediate D3hot step seems to make it work again. This is + * probably caused by not meeting the expectation the involved AML code has + * when the GPU is put into D3hot state before invoking it. + * + * This leads to various manifestations of this issue: + * - AML code execution to power on the GPU hits an infinite loop (as the + * code waits on device memory to change). + * - kernel crashes, as all PCI reads return -1, which most code isn't able + * to handle well enough. + * + * In all cases dmesg will contain at least one line like this: + * 'nouveau 0000:01:00.0: Refused to change power state, currently in D3' + * followed by a lot of nouveau timeouts. + * + * In the \_SB.PCI0.PEG0.PG00._OFF code deeper down writes bit 0x80 to the not + * documented PCI config space register 0x248 of the Intel PCIe bridge + * controller (0x1901) in order to change the state of the PCIe link between + * the PCIe port and the GPU. There are alternative code paths using other + * registers, which seem to work fine (executed pre Windows 8): + * - 0xbc bit 0x20 (publicly available documentation claims 'reserved') + * - 0xb0 bit 0x10 (link disable) + * Changing the conditions inside the firmware by poking into the relevant + * addresses does resolve the issue, but it seemed to be ACPI private memory + * and not any device accessible memory at all, so there is no portable way of + * changing the conditions. + * On a XPS 9560 that means bits [0,3] on \CPEX need to be cleared. + * + * The only systems where this behavior can be seen are hybrid graphics laptops + * with a secondary Nvidia Maxwell, Pascal or Turing GPU. It's unclear whether + * this issue only occurs in combination with listed Intel PCIe bridge + * controllers and the mentioned GPUs or other devices as well. + * + * documentation on the PCIe bridge controller can be found in the + * "7th Generation IntelĀ® Processor Families for H Platforms Datasheet Volume 2" + * Section "12 PCI Express* Controller (x16) Registers" + */ + +static void quirk_broken_nv_runpm(struct pci_dev *dev) +{ + struct pci_dev *bridge = pci_upstream_bridge(dev); + + if (!bridge || bridge->vendor != PCI_VENDOR_ID_INTEL) + return; + + switch (bridge->device) { + case 0x1901: + dev->parent_d3cold = 1; + break; + } +} + static int nouveau_drm_probe(struct pci_dev *pdev, const struct pci_device_id *pent) { @@ -699,6 +753,7 @@ static int nouveau_drm_probe(struct pci_dev *pdev, if (ret) goto fail_drm_dev_init; + quirk_broken_nv_runpm(pdev); return 0; fail_drm_dev_init: @@ -735,6 +790,8 @@ nouveau_drm_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); + /* revert our workaround */ + pdev->parent_d3cold = false; nouveau_drm_device_remove(dev); pci_disable_device(pdev); } diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index d828ca835a98..9c4044fc2553 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -861,6 +861,14 @@ static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state) || (state == PCI_D2 && !dev->d2_support)) return -EIO; + /* + * Power management can be disabled for certain devices as they don't + * come back up later on runtime_resume. We rely on platform means to + * cut power consumption instead (e.g. ACPI). + */ + if (state != PCI_D0 && dev->parent_d3cold) + return 0; + pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr); if (pmcsr == (u16) ~0) { pci_err(dev, "can't change power state from %s to %s (config space inaccessible)\n", diff --git a/include/linux/pci.h b/include/linux/pci.h index 3840a541a9de..3c01f043519a 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -340,6 +340,7 @@ struct pci_dev { unsigned int no_d3cold:1; /* D3cold is forbidden */ unsigned int bridge_d3:1; /* Allow D3 for bridge */ unsigned int d3cold_allowed:1; /* D3cold is allowed by user */ + unsigned int parent_d3cold:1; /* Power manage the parent instead */ unsigned int mmio_always_on:1; /* Disallow turning off io/mem decoding during BAR sizing */ unsigned int wakeup_prepared:1; -- 2.24.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.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 57A73C10F27 for ; Tue, 10 Mar 2020 19:27:00 +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 1E47D222D9 for ; Tue, 10 Mar 2020 19:27:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="RnwUiv8K" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1E47D222D9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.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 568056E8D1; Tue, 10 Mar 2020 19:26:59 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 922AC6E8D2 for ; Tue, 10 Mar 2020 19:26:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583868417; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Wq5OtijW4qkxUGaUQxhzEeaUg8qC16AJk23Bpi60tww=; b=RnwUiv8Kt1BWrGVaG7T/rXo0RHbzvLndYq/I+gTi7z6ec2O7b/rmJ+AZRiJYo0SJzYiNXa uiXel6roJRa5aFHDAfHN0Es8ldC/h8xQ61A482c/AKRE1bgYBDIbiPz4uoFGXiinsYRorw SHE9XUr6eW6YCTCjfY501vI2qibYJi4= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-156-lZLErUOkNQiuzoSGW6AIvA-1; Tue, 10 Mar 2020 15:26:50 -0400 X-MC-Unique: lZLErUOkNQiuzoSGW6AIvA-1 Received: by mail-wr1-f71.google.com with SMTP id p11so7200844wrn.10 for ; Tue, 10 Mar 2020 12:26:50 -0700 (PDT) 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=vBBQf8YSJ+Mjo+kqeDTD8Z4+zLQIuCyl3eitu/ifyRg=; b=gg9D/NTPJTNtvjB8XMrbq4tQdP6FrSRhjumzsOpehWIqm6bR+ehDRZkHfIZ49dPoTo Wyy75pYPa8DClrAY0VenQfb3cuBgZBUa0Penqs+XW2c6HXEKhQAJRu7i/qOudGvWy0WM BiAoW8JKdMYG/c1g5X1vi/rBDdVC72aROIv6Fm6qTxGrOvUsZgqTifD6io+S1IkudNCg blnJTA0ACQlz/94jJ99WLigYISvSwmyG316pzpUMB8Tu1WHwCH4sYNUtuxY61rciYYF7 6gBnIx4DI5Q78o2VLxSANlQKvVeU0VvnpQRR872NtTFj40YC3wXKiPfamL9Uq89fcp7r HAtA== X-Gm-Message-State: ANhLgQ2dUYfdqSJSCv7A0oHRzi6wX5RXWLJ6uuro3F0qNyPwl3MmRHHV +G+rl6/ayVJ1n5gvNsCmGQlxV9DTUEZ7uMOFLUEoHnu3WvAWVRLAZN+bJ/Sa1O7ZB7A7183dX0N USEoWx4S25C3YIl7kw9XWxEFDg75m X-Received: by 2002:a7b:c153:: with SMTP id z19mr3416626wmi.37.1583868409502; Tue, 10 Mar 2020 12:26:49 -0700 (PDT) X-Google-Smtp-Source: ADFU+vulmI+P5MpROhNKaiKOfzCCxtCMi66TM8UrbbQOxyf42qxjAGtaVwzF6sV60157AZSfFYTJtQ== X-Received: by 2002:a7b:c153:: with SMTP id z19mr3416586wmi.37.1583868409147; Tue, 10 Mar 2020 12:26:49 -0700 (PDT) Received: from kherbst.pingu.com ([2a02:8308:b0be:6900:482c:9537:40:83ba]) by smtp.gmail.com with ESMTPSA id c8sm58633569wru.7.2020.03.10.12.26.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2020 12:26:48 -0700 (PDT) From: Karol Herbst To: linux-kernel@vger.kernel.org Subject: [PATCH v7] pci: prevent putting nvidia GPUs into lower device states on certain intel bridges Date: Tue, 10 Mar 2020 20:26:27 +0100 Message-Id: <20200310192627.437947-1-kherbst@redhat.com> X-Mailer: git-send-email 2.24.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Karol Herbst , linux-pm@vger.kernel.org, linux-pci@vger.kernel.org, Mika Westerberg , "Rafael J . Wysocki" , dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org, Bjorn Helgaas , Mika Westerberg Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Rml4ZXMgdGhlIGluZmFtb3VzICdydW50aW1lIFBNJyBidWcgbWFueSB1c2VycyBhcmUgZmFjaW5n IG9uIExhcHRvcHMgd2l0aApOdmlkaWEgUGFzY2FsIEdQVXMgYnkgc2tpcHBpbmcgc2FpZCBQQ0kg cG93ZXIgc3RhdGUgY2hhbmdlcyBvbiB0aGUgR1BVLgoKRGVwZW5kaW5nIG9uIHRoZSB1c2VkIGtl cm5lbCB0aGVyZSBtaWdodCBiZSBtZXNzYWdlcyBsaWtlIHRob3NlIGluIGRlbXNnOgoKIm5vdXZl YXUgMDAwMDowMTowMC4wOiBSZWZ1c2VkIHRvIGNoYW5nZSBwb3dlciBzdGF0ZSwgY3VycmVudGx5 IGluIEQzIgoibm91dmVhdSAwMDAwOjAxOjAwLjA6IGNhbid0IGNoYW5nZSBwb3dlciBzdGF0ZSBm cm9tIEQzY29sZCB0byBEMCAoY29uZmlnCnNwYWNlIGluYWNjZXNzaWJsZSkiCmZvbGxvd2VkIGJ5 IGJhY2t0cmFjZXMgb2Yga2VybmVsIGNyYXNoZXMgb3IgdGltZW91dHMgd2l0aGluIG5vdXZlYXUu CgpJdCdzIHN0aWxsIHVua293biB3aHkgdGhpcyBpc3N1ZSBleGlzdHMsIGJ1dCB0aGlzIGlzIGEg cmVsaWFibGUgd29ya2Fyb3VuZAphbmQgc29sdmVzIGEgdmVyeSBhbm5veWluZyBpc3N1ZSBmb3Ig dXNlciBoYXZpbmcgdG8gY2hvb3NlIGJldHdlZW4gYQpjcmFzaGluZyBrZXJuZWwgb3IgaGlnaGVy IHBvd2VyIGNvbnN1bXB0aW9uIG9mIHRoZWlyIExhcHRvcHMuCgpTaWduZWQtb2ZmLWJ5OiBLYXJv bCBIZXJic3QgPGtoZXJic3RAcmVkaGF0LmNvbT4KQ2M6IEJqb3JuIEhlbGdhYXMgPGJoZWxnYWFz QGdvb2dsZS5jb20+CkNjOiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgpDYzogUmFmYWVs IEouIFd5c29ja2kgPHJqd0Byand5c29ja2kubmV0PgpDYzogTWlrYSBXZXN0ZXJiZXJnIDxtaWth Lndlc3RlcmJlcmdAaW50ZWwuY29tPgpDYzogbGludXgtcGNpQHZnZXIua2VybmVsLm9yZwpDYzog bGludXgtcG1Admdlci5rZXJuZWwub3JnCkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCkNjOiBub3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpCdWd6aWxsYTogaHR0cHM6Ly9i dWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU2MjMKUmV2aWV3ZWQtYnk6IE1p a2EgV2VzdGVyYmVyZyA8bWlrYS53ZXN0ZXJiZXJnQGxpbnV4LmludGVsLmNvbT4KCi0tLQp2Mjog Y29udmVydCB0byBwY2lfZGV2IHF1aXJrCiAgICBwdXQgYSBwcm9wZXIgdGVjaG5pY2FsIGV4cGxh bmF0aW9uIG9mIHRoZSBpc3N1ZSBhcyBhIGluLWNvZGUgY29tbWVudAp2MzogZGlzYWJsZSBpdCBv bmx5IGZvciBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBpbnRlbCBhbmQgbnZpZGlhIGhhcmR3YXJl CnY0OiBzaW1wbGlmeSBxdWlyayBieSBzZXR0aW5nIGZsYWcgb24gdGhlIEdQVSBpdHNlbGYKdjU6 IHJlc3RydWN0dXJlIHF1aXJrIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcgSURzCiAgICBm aXggd2hpdGVzcGFjZSBpc3N1ZXMKICAgIGZpeCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGFjY2Vz cwogICAgdXBkYXRlIHRoZSBxdWlyayBkb2N1bWVudGF0aW9uCnY2OiBtb3ZlIHF1aXJrIGludG8g bm91dmVhdQp2NzogZml4IHR5cG9zIGFuZCBjb21taXQgbWVzc2FnZQoKIGRyaXZlcnMvZ3B1L2Ry bS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvcGNpL3BjaS5jICAgICAgICAgICAgICAgICAgICAgfCAgOCArKysrCiBpbmNsdWRl L2xpbnV4L3BjaS5oICAgICAgICAgICAgICAgICAgIHwgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA2 NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91 dmVhdV9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMKaW5kZXgg YjY1YWU4MTdlYWJmLi4yYzg2ZjAyNDgzMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9u b3V2ZWF1L25vdXZlYXVfZHJtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVh dV9kcm0uYwpAQCAtNjE4LDYgKzYxOCw2MCBAQCBub3V2ZWF1X2RybV9kZXZpY2VfZmluaShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQogCWtmcmVlKGRybSk7CiB9CiAKKy8qCisgKiBPbiBzb21lIElu dGVsIFBDSWUgYnJpZGdlIGNvbnRyb2xsZXJzIGRvaW5nIGEKKyAqIEQwIC0+IEQzaG90IC0+IEQz Y29sZCAtPiBEMCBzZXF1ZW5jZSBjYXVzZXMgTnZpZGlhIEdQVXMgdG8gbm90IHJlYXBwZWFyLgor ICogU2tpcHBpbmcgdGhlIGludGVybWVkaWF0ZSBEM2hvdCBzdGVwIHNlZW1zIHRvIG1ha2UgaXQg d29yayBhZ2Fpbi4gVGhpcyBpcworICogcHJvYmFibHkgY2F1c2VkIGJ5IG5vdCBtZWV0aW5nIHRo ZSBleHBlY3RhdGlvbiB0aGUgaW52b2x2ZWQgQU1MIGNvZGUgaGFzCisgKiB3aGVuIHRoZSBHUFUg aXMgcHV0IGludG8gRDNob3Qgc3RhdGUgYmVmb3JlIGludm9raW5nIGl0LgorICoKKyAqIFRoaXMg bGVhZHMgdG8gdmFyaW91cyBtYW5pZmVzdGF0aW9ucyBvZiB0aGlzIGlzc3VlOgorICogIC0gQU1M IGNvZGUgZXhlY3V0aW9uIHRvIHBvd2VyIG9uIHRoZSBHUFUgaGl0cyBhbiBpbmZpbml0ZSBsb29w IChhcyB0aGUKKyAqICAgIGNvZGUgd2FpdHMgb24gZGV2aWNlIG1lbW9yeSB0byBjaGFuZ2UpLgor ICogIC0ga2VybmVsIGNyYXNoZXMsIGFzIGFsbCBQQ0kgcmVhZHMgcmV0dXJuIC0xLCB3aGljaCBt b3N0IGNvZGUgaXNuJ3QgYWJsZQorICogICAgdG8gaGFuZGxlIHdlbGwgZW5vdWdoLgorICoKKyAq IEluIGFsbCBjYXNlcyBkbWVzZyB3aWxsIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGxpbmUgbGlrZSB0 aGlzOgorICogJ25vdXZlYXUgMDAwMDowMTowMC4wOiBSZWZ1c2VkIHRvIGNoYW5nZSBwb3dlciBz dGF0ZSwgY3VycmVudGx5IGluIEQzJworICogZm9sbG93ZWQgYnkgYSBsb3Qgb2Ygbm91dmVhdSB0 aW1lb3V0cy4KKyAqCisgKiBJbiB0aGUgXF9TQi5QQ0kwLlBFRzAuUEcwMC5fT0ZGIGNvZGUgZGVl cGVyIGRvd24gd3JpdGVzIGJpdCAweDgwIHRvIHRoZSBub3QKKyAqIGRvY3VtZW50ZWQgUENJIGNv bmZpZyBzcGFjZSByZWdpc3RlciAweDI0OCBvZiB0aGUgSW50ZWwgUENJZSBicmlkZ2UKKyAqIGNv bnRyb2xsZXIgKDB4MTkwMSkgaW4gb3JkZXIgdG8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgUENJ ZSBsaW5rIGJldHdlZW4KKyAqIHRoZSBQQ0llIHBvcnQgYW5kIHRoZSBHUFUuIFRoZXJlIGFyZSBh bHRlcm5hdGl2ZSBjb2RlIHBhdGhzIHVzaW5nIG90aGVyCisgKiByZWdpc3RlcnMsIHdoaWNoIHNl ZW0gdG8gd29yayBmaW5lIChleGVjdXRlZCBwcmUgV2luZG93cyA4KToKKyAqICAtIDB4YmMgYml0 IDB4MjAgKHB1YmxpY2x5IGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGNsYWltcyAncmVzZXJ2ZWQn KQorICogIC0gMHhiMCBiaXQgMHgxMCAobGluayBkaXNhYmxlKQorICogQ2hhbmdpbmcgdGhlIGNv bmRpdGlvbnMgaW5zaWRlIHRoZSBmaXJtd2FyZSBieSBwb2tpbmcgaW50byB0aGUgcmVsZXZhbnQK KyAqIGFkZHJlc3NlcyBkb2VzIHJlc29sdmUgdGhlIGlzc3VlLCBidXQgaXQgc2VlbWVkIHRvIGJl IEFDUEkgcHJpdmF0ZSBtZW1vcnkKKyAqIGFuZCBub3QgYW55IGRldmljZSBhY2Nlc3NpYmxlIG1l bW9yeSBhdCBhbGwsIHNvIHRoZXJlIGlzIG5vIHBvcnRhYmxlIHdheSBvZgorICogY2hhbmdpbmcg dGhlIGNvbmRpdGlvbnMuCisgKiBPbiBhIFhQUyA5NTYwIHRoYXQgbWVhbnMgYml0cyBbMCwzXSBv biBcQ1BFWCBuZWVkIHRvIGJlIGNsZWFyZWQuCisgKgorICogVGhlIG9ubHkgc3lzdGVtcyB3aGVy ZSB0aGlzIGJlaGF2aW9yIGNhbiBiZSBzZWVuIGFyZSBoeWJyaWQgZ3JhcGhpY3MgbGFwdG9wcwor ICogd2l0aCBhIHNlY29uZGFyeSBOdmlkaWEgTWF4d2VsbCwgUGFzY2FsIG9yIFR1cmluZyBHUFUu IEl0J3MgdW5jbGVhciB3aGV0aGVyCisgKiB0aGlzIGlzc3VlIG9ubHkgb2NjdXJzIGluIGNvbWJp bmF0aW9uIHdpdGggbGlzdGVkIEludGVsIFBDSWUgYnJpZGdlCisgKiBjb250cm9sbGVycyBhbmQg dGhlIG1lbnRpb25lZCBHUFVzIG9yIG90aGVyIGRldmljZXMgYXMgd2VsbC4KKyAqCisgKiBkb2N1 bWVudGF0aW9uIG9uIHRoZSBQQ0llIGJyaWRnZSBjb250cm9sbGVyIGNhbiBiZSBmb3VuZCBpbiB0 aGUKKyAqICI3dGggR2VuZXJhdGlvbiBJbnRlbMKuIFByb2Nlc3NvciBGYW1pbGllcyBmb3IgSCBQ bGF0Zm9ybXMgRGF0YXNoZWV0IFZvbHVtZSAyIgorICogU2VjdGlvbiAiMTIgUENJIEV4cHJlc3Mq IENvbnRyb2xsZXIgKHgxNikgUmVnaXN0ZXJzIgorICovCisKK3N0YXRpYyB2b2lkIHF1aXJrX2Jy b2tlbl9udl9ydW5wbShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpi cmlkZ2UgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKGRldik7CisKKwlpZiAoIWJyaWRnZSB8fCBicmlk Z2UtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0lOVEVMKQorCQlyZXR1cm47CisKKwlzd2l0Y2gg KGJyaWRnZS0+ZGV2aWNlKSB7CisJY2FzZSAweDE5MDE6CisJCWRldi0+cGFyZW50X2QzY29sZCA9 IDE7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIGludCBub3V2ZWF1X2RybV9wcm9iZShzdHJ1 Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBl bnQpCiB7CkBAIC02OTksNiArNzUzLDcgQEAgc3RhdGljIGludCBub3V2ZWF1X2RybV9wcm9iZShz dHJ1Y3QgcGNpX2RldiAqcGRldiwKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxfZHJtX2Rldl9pbml0 OwogCisJcXVpcmtfYnJva2VuX252X3J1bnBtKHBkZXYpOwogCXJldHVybiAwOwogCiBmYWlsX2Ry bV9kZXZfaW5pdDoKQEAgLTczNSw2ICs3OTAsOCBAQCBub3V2ZWF1X2RybV9yZW1vdmUoc3RydWN0 IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2 ZGF0YShwZGV2KTsKIAorCS8qIHJldmVydCBvdXIgd29ya2Fyb3VuZCAqLworCXBkZXYtPnBhcmVu dF9kM2NvbGQgPSBmYWxzZTsKIAlub3V2ZWF1X2RybV9kZXZpY2VfcmVtb3ZlKGRldik7CiAJcGNp X2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMg Yi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBkODI4Y2E4MzVhOTguLjljNDA0NGZjMjU1MyAxMDA2 NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTg2 MSw2ICs4NjEsMTQgQEAgc3RhdGljIGludCBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3Qg cGNpX2RldiAqZGV2LCBwY2lfcG93ZXJfdCBzdGF0ZSkKIAkgICB8fCAoc3RhdGUgPT0gUENJX0Qy ICYmICFkZXYtPmQyX3N1cHBvcnQpKQogCQlyZXR1cm4gLUVJTzsKIAorCS8qCisJICogUG93ZXIg bWFuYWdlbWVudCBjYW4gYmUgZGlzYWJsZWQgZm9yIGNlcnRhaW4gZGV2aWNlcyBhcyB0aGV5IGRv bid0CisJICogY29tZSBiYWNrIHVwIGxhdGVyIG9uIHJ1bnRpbWVfcmVzdW1lLiBXZSByZWx5IG9u IHBsYXRmb3JtIG1lYW5zIHRvCisJICogY3V0IHBvd2VyIGNvbnN1bXB0aW9uIGluc3RlYWQgKGUu Zy4gQUNQSSkuCisJICovCisJaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPnBhcmVudF9kM2Nv bGQpCisJCXJldHVybiAwOworCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtPnBtX2Nh cCArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOwogCWlmIChwbWNzciA9PSAodTE2KSB+MCkgewogCQlw Y2lfZXJyKGRldiwgImNhbid0IGNoYW5nZSBwb3dlciBzdGF0ZSBmcm9tICVzIHRvICVzIChjb25m aWcgc3BhY2UgaW5hY2Nlc3NpYmxlKVxuIiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNp LmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDM4NDBhNTQxYTlkZS4uM2MwMWYwNDM1MTlh IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNp LmgKQEAgLTM0MCw2ICszNDAsNyBAQCBzdHJ1Y3QgcGNpX2RldiB7CiAJdW5zaWduZWQgaW50CW5v X2QzY29sZDoxOwkvKiBEM2NvbGQgaXMgZm9yYmlkZGVuICovCiAJdW5zaWduZWQgaW50CWJyaWRn ZV9kMzoxOwkvKiBBbGxvdyBEMyBmb3IgYnJpZGdlICovCiAJdW5zaWduZWQgaW50CWQzY29sZF9h bGxvd2VkOjE7CS8qIEQzY29sZCBpcyBhbGxvd2VkIGJ5IHVzZXIgKi8KKwl1bnNpZ25lZCBpbnQJ cGFyZW50X2QzY29sZDoxOwkvKiBQb3dlciBtYW5hZ2UgdGhlIHBhcmVudCBpbnN0ZWFkICovCiAJ dW5zaWduZWQgaW50CW1taW9fYWx3YXlzX29uOjE7CS8qIERpc2FsbG93IHR1cm5pbmcgb2ZmIGlv L21lbQogCQkJCQkJICAgZGVjb2RpbmcgZHVyaW5nIEJBUiBzaXppbmcgKi8KIAl1bnNpZ25lZCBp bnQJd2FrZXVwX3ByZXBhcmVkOjE7Ci0tIAoyLjI0LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=