From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg Kroah-Hartman Subject: [PATCH 4.19 125/190] PCI: Reset Lenovo ThinkPad P50 nvgpu at boot if necessary Date: Fri, 13 Sep 2019 14:06:20 +0100 Message-ID: <20190913130609.861471420@linuxfoundation.org> References: <20190913130559.669563815@linuxfoundation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190913130559.669563815-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Sasha Levin , Greg Kroah-Hartman , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Bjorn Helgaas List-Id: nouveau.vger.kernel.org WyBVcHN0cmVhbSBjb21taXQgZTA1NDdjODFiZmNmYWQwMWNiYmZhOTNhNWU2NmJiOThhYjkzMmY4 MCBdCgpPbiBUaGlua1BhZCBQNTAgU0tVcyB3aXRoIGFuIE52aWRpYSBRdWFkcm8gTTEwMDBNIGlu c3RlYWQgb2YgdGhlIE0yMDAwTQp2YXJpYW50LCB0aGUgQklPUyBkb2VzIG5vdCBhbHdheXMgcmVz ZXQgdGhlIHNlY29uZGFyeSBOdmlkaWEgR1BVIGR1cmluZwpyZWJvb3QgaWYgdGhlIGxhcHRvcCBp cyBjb25maWd1cmVkIGluIEh5YnJpZCBHcmFwaGljcyBtb2RlLiAgVGhlIHJlYXNvbiBpcwp1bmtu b3duLCBidXQgdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgcG9zc2libHkgYSBnb29kIGJpdCBvZiBw YXRpZW5jZSB3aWxsCnJlcHJvZHVjZSB0aGUgaXNzdWU6CgogIDEuIEJvb3QgdXAgdGhlIGxhcHRv cCBub3JtYWxseSBpbiBIeWJyaWQgR3JhcGhpY3MgbW9kZQogIDIuIE1ha2Ugc3VyZSBub3V2ZWF1 IGlzIGxvYWRlZCBhbmQgdGhhdCB0aGUgR1BVIGlzIGF3YWtlCiAgMy4gQWxsb3cgdGhlIE52aWRp YSBHUFUgdG8gcnVudGltZSBzdXNwZW5kIGl0c2VsZiBhZnRlciBiZWluZyBpZGxlCiAgNC4gUmVi b290IHRoZSBtYWNoaW5lLCB0aGUgbW9yZSBzdWRkZW4gdGhlIGJldHRlciAoZS5nLiBzeXNycS1i IG1heSBoZWxwKQogIDUuIElmIG5vdXZlYXUgbG9hZHMgdXAgcHJvcGVybHksIHJlYm9vdCB0aGUg bWFjaGluZSBhZ2FpbiBhbmQgZ28gYmFjayB0bwogICAgIHN0ZXAgMiB1bnRpbCB5b3UgcmVwcm9k dWNlIHRoZSBpc3N1ZQoKVGhpcyByZXN1bHRzIGluIHNvbWUgdmVyeSBzdHJhbmdlIGJlaGF2aW9y OiB0aGUgR1BVIHdpbGwgYmUgbGVmdCBpbiBleGFjdGx5CnRoZSBzYW1lIHN0YXRlIGl0IHdhcyBp biB3aGVuIHRoZSBwcmV2aW91c2x5IGJvb3RlZCBrZXJuZWwgc3RhcnRlZCB0aGUKcmVib290LiAg VGhpcyBoYXMgYWxsIHNvcnRzIG9mIGJhZCBzaWRlIGVmZmVjdHM6IGZvciBzdGFydGVycywgdGhp cwpjb21wbGV0ZWx5IGJyZWFrcyBub3V2ZWF1IHN0YXJ0aW5nIHdpdGggYSBteXN0ZXJpb3VzIEVW TyBjaGFubmVsIGZhaWx1cmUKdGhhdCBoYXBwZW5zIHdlbGwgYmVmb3JlIHdlJ3ZlIGFjdHVhbGx5 IHVzZWQgdGhlIEVWTyBjaGFubmVsIGZvciBhbnl0aGluZzoKCiAgbm91dmVhdSAwMDAwOjAxOjAw LjA6IGRpc3A6IGNoaWQgMCBtdGhkIDAwMDAgZGF0YSAwMDAwMDQwMCAwMDAwMTAwMCAwMDAwMDAw MgoKVGhpcyBjYXVzZXMgYSB0aW1lb3V0IHRyeWluZyB0byBicmluZyB1cCB0aGUgR1IgY3R4OgoK ICBub3V2ZWF1IDAwMDA6MDE6MDAuMDogdGltZW91dAogIFdBUk5JTkc6IENQVTogMCBQSUQ6IDEy IGF0IGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252a20vZW5naW5lL2dyL2N0eGdmMTAwLmM6MTU0 NyBnZjEwMF9ncmN0eF9nZW5lcmF0ZSsweDdiMi8weDg1MCBbbm91dmVhdV0KICBIYXJkd2FyZSBu YW1lOiBMRU5PVk8gMjBFUVM2NE4wQi8yMEVRUzY0TjBCLCBCSU9TIE4xRUVUODJXICgxLjU1ICkg MTIvMTgvMjAxOAogIFdvcmtxdWV1ZTogZXZlbnRzX2xvbmcgZHJtX2RwX21zdF9saW5rX3Byb2Jl X3dvcmsgW2RybV9rbXNfaGVscGVyXQogIC4uLgogIG5vdXZlYXUgMDAwMDowMTowMC4wOiBncjog d2FpdCBmb3IgaWRsZSB0aW1lb3V0IChlbjogMSwgY3R4c3c6IDAsIGJ1c3k6IDEpCiAgbm91dmVh dSAwMDAwOjAxOjAwLjA6IGdyOiB3YWl0IGZvciBpZGxlIHRpbWVvdXQgKGVuOiAxLCBjdHhzdzog MCwgYnVzeTogMSkKICBub3V2ZWF1IDAwMDA6MDE6MDAuMDogZmlmbzogZmF1bHQgMDEgW1dSSVRF XSBhdCAwMDAwMDAwMDAwMDA4MDAwIGVuZ2luZSAwMCBbR1JdIGNsaWVudCAxNSBbSFVCL1NDQ19O Ql0gcmVhc29uIGM0IFtdIG9uIGNoYW5uZWwgLTEgWzAwMDAwMDAwMDAgdW5rbm93bl0KClRoZSBH UFUgbmV2ZXIgbWFuYWdlcyB0byByZWNvdmVyLiAgQm9vdGluZyB3aXRob3V0IGxvYWRpbmcgbm91 dmVhdSBjYXVzZXMKaXNzdWVzIGFzIHdlbGwsIHNpbmNlIHRoZSBHUFUgc3RhcnRzIHNlbmRpbmcg c3B1cmlvdXMgaW50ZXJydXB0cyB0aGF0IGNhdXNlCm90aGVyIGRldmljZSdzIElSUXMgdG8gZ2V0 IGRpc2FibGVkIGJ5IHRoZSBrZXJuZWw6CgogIGlycSAxNjogbm9ib2R5IGNhcmVkICh0cnkgYm9v dGluZyB3aXRoIHRoZSAiaXJxcG9sbCIgb3B0aW9uKQogIC4uLgogIGhhbmRsZXJzOgogIFs8MDAw MDAwMDA3ZmFhOWU5OT5dIGk4MDFfaXNyIFtpMmNfaTgwMV0KICBEaXNhYmxpbmcgSVJRICMxNgog IC4uLgogIHNlcmlvOiBSTUk0IFBTLzIgcGFzcy10aHJvdWdoIHBvcnQgYXQgcm1pNC0wMC5mbjAz CiAgaTgwMV9zbWJ1cyAwMDAwOjAwOjFmLjQ6IFRpbWVvdXQgd2FpdGluZyBmb3IgaW50ZXJydXB0 IQogIGk4MDFfc21idXMgMDAwMDowMDoxZi40OiBUcmFuc2FjdGlvbiB0aW1lb3V0CiAgcm1pNF9m MDMgcm1pNC0wMC5mbjAzOiBybWlfZjAzX3B0X3dyaXRlOiBGYWlsZWQgdG8gd3JpdGUgdG8gRjAz IFRYIHJlZ2lzdGVyICgtMTEwKS4KICBpODAxX3NtYnVzIDAwMDA6MDA6MWYuNDogVGltZW91dCB3 YWl0aW5nIGZvciBpbnRlcnJ1cHQhCiAgaTgwMV9zbWJ1cyAwMDAwOjAwOjFmLjQ6IFRyYW5zYWN0 aW9uIHRpbWVvdXQKICBybWk0X3BoeXNpY2FsIHJtaTQtMDA6IHJtaV9kcml2ZXJfc2V0X2lycV9i aXRzOiBGYWlsZWQgdG8gY2hhbmdlIGVuYWJsZWQgaW50ZXJydXB0cyEKClRoaXMgY2F1c2VzIHRo ZSB0b3VjaHBhZCBhbmQgc29tZXRpbWVzIG90aGVyIHRoaW5ncyB0byBnZXQgZGlzYWJsZWQuCgpT aW5jZSB0aGlzIGhhcHBlbnMgd2l0aG91dCBub3V2ZWF1LCB3ZSBjYW4ndCBmaXggdGhpcyBwcm9i bGVtIGZyb20gbm91dmVhdQppdHNlbGYuCgpBZGQgYSBQQ0kgcXVpcmsgZm9yIHRoZSBzcGVjaWZp YyBQNTAgdmFyaWFudCBvZiB0aGlzIEdQVS4gIE1ha2Ugc3VyZSB0aGUKR1BVIGlzIGFkdmVydGlz aW5nIE5vUmVzZXQtIHNvIHdlIGRvbid0IHJlc2V0IHRoZSBHUFUgd2hlbiB0aGUgbWFjaGluZSBp cwppbiBEZWRpY2F0ZWQgZ3JhcGhpY3MgbW9kZSAod2hlcmUgdGhlIEdQVSBiZWluZyBpbml0aWFs aXplZCBieSB0aGUgQklPUyBpcwpub3JtYWwgYW5kIGV4cGVjdGVkKS4gIE1hcCB0aGUgR1BVIE1N SU8gc3BhY2UgYW5kIHJlYWQgdGhlIG1hZ2ljIDB4MjI0MGMKcmVnaXN0ZXIsIHdoaWNoIHdpbGwg aGF2ZSBiaXQgMSBzZXQgaWYgdGhlIGRldmljZSB3YXMgUE9TVGVkIGR1cmluZyBhCnByZXZpb3Vz IGJvb3QuICBPbmNlIHdlJ3ZlIGNvbmZpcm1lZCBhbGwgb2YgdGhpcywgcmVzZXQgdGhlIEdQVSBh bmQKcmUtZGlzYWJsZSBpdCAtIGJyaW5naW5nIGl0IGJhY2sgdG8gYSBoZWFsdGh5IHN0YXRlLgoK TGluazogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwMDMK TGluazogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDE5MDIxMjIyMDIzMC4xNTY4LTEt bHl1ZGVAcmVkaGF0LmNvbQpTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQu Y29tPgpTaWduZWQtb2ZmLWJ5OiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPgpD Yzogbm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5vcmcKQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKQ2M6IEthcm9sIEhlcmJzdCA8a2hlcmJzdEByZWRoYXQuY29tPgpDYzogQmVu IFNrZWdncyA8c2tlZ2dzYkBnbWFpbC5jb20+CkNjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnClNp Z25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJz L3BjaS9xdWlya3MuYyB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggNmNkYThiN2Vj YzgyMS4uMzExZjhhMzNlNjJmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysr IGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTUxMTYsMyArNTExNiw2MSBAQCBTV0lUQ0hURUNf UVVJUksoMHg4NTczKTsgIC8qIFBGWEkgNDhYRzMgKi8KIFNXSVRDSFRFQ19RVUlSSygweDg1NzQp OyAgLyogUEZYSSA2NFhHMyAqLwogU1dJVENIVEVDX1FVSVJLKDB4ODU3NSk7ICAvKiBQRlhJIDgw WEczICovCiBTV0lUQ0hURUNfUVVJUksoMHg4NTc2KTsgIC8qIFBGWEkgOTZYRzMgKi8KKworLyoK KyAqIE9uIExlbm92byBUaGlua3BhZCBQNTAgU0tVcyB3aXRoIGEgTnZpZGlhIFF1YWRybyBNMTAw ME0sIHRoZSBCSU9TIGRvZXMKKyAqIG5vdCBhbHdheXMgcmVzZXQgdGhlIHNlY29uZGFyeSBOdmlk aWEgR1BVIGJldHdlZW4gcmVib290cyBpZiB0aGUgc3lzdGVtCisgKiBpcyBjb25maWd1cmVkIHRv IHVzZSBIeWJyaWQgR3JhcGhpY3MgbW9kZS4gIFRoaXMgcmVzdWx0cyBpbiB0aGUgR1BVCisgKiBi ZWluZyBsZWZ0IGluIHdoYXRldmVyIHN0YXRlIGl0IHdhcyBpbiBkdXJpbmcgdGhlICpwcmV2aW91 cyogYm9vdCwgd2hpY2gKKyAqIGNhdXNlcyBzcHVyaW91cyBpbnRlcnJ1cHRzIGZyb20gdGhlIEdQ VSwgd2hpY2ggaW4gdHVybiBjYXVzZXMgdXMgdG8KKyAqIGRpc2FibGUgdGhlIHdyb25nIElSUSBh bmQgZW5kIHVwIGJyZWFraW5nIHRoZSB0b3VjaHBhZC4gIFVuc3VycHJpc2luZ2x5LAorICogdGhp cyBhbHNvIGNvbXBsZXRlbHkgYnJlYWtzIG5vdXZlYXUuCisgKgorICogTHVja2lseSwgaXQgc2Vl bXMgYSBzaW1wbGUgcmVzZXQgb2YgdGhlIE52aWRpYSBHUFUgYnJpbmdzIGl0IGJhY2sgdG8gYQor ICogY2xlYW4gc3RhdGUgYW5kIGZpeGVzIGFsbCB0aGVzZSBpc3N1ZXMuCisgKgorICogV2hlbiB0 aGUgbWFjaGluZSBpcyBjb25maWd1cmVkIGluIERlZGljYXRlZCBkaXNwbGF5IG1vZGUsIHRoZSBp c3N1ZQorICogZG9lc24ndCBvY2N1ci4gIEZvcnR1bmF0ZWx5IHRoZSBHUFUgYWR2ZXJ0aXNlcyBO b1Jlc2V0KyB3aGVuIGluIHRoaXMKKyAqIG1vZGUsIHNvIHdlIGNhbiBkZXRlY3QgdGhhdCBhbmQg YXZvaWQgcmVzZXR0aW5nIGl0LgorICovCitzdGF0aWMgdm9pZCBxdWlya19yZXNldF9sZW5vdm9f dGhpbmtwYWRfcDUwX252Z3B1KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXZvaWQgX19pb21l bSAqbWFwOworCWludCByZXQ7CisKKwlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciAhPSBQQ0lf VkVORE9SX0lEX0xFTk9WTyB8fAorCSAgICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICE9IDB4MjIy ZSB8fAorCSAgICAhcGRldi0+cmVzZXRfZm4pCisJCXJldHVybjsKKworCWlmIChwY2lfZW5hYmxl X2RldmljZV9tZW0ocGRldikpCisJCXJldHVybjsKKworCS8qCisJICogQmFzZWQgb24gbnZrbV9k ZXZpY2VfY3RvcigpIGluCisJICogZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZrbS9lbmdpbmUv ZGV2aWNlL2Jhc2UuYworCSAqLworCW1hcCA9IHBjaV9pb21hcChwZGV2LCAwLCAweDIzMDAwKTsK KwlpZiAoIW1hcCkgeworCQlwY2lfZXJyKHBkZXYsICJDYW4ndCBtYXAgTU1JTyBzcGFjZVxuIik7 CisJCWdvdG8gb3V0X2Rpc2FibGU7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIEdQVSBs b29rcyBsaWtlIGl0J3MgYmVlbiBQT1NUZWQgYmVmb3JlIHJlc2V0dGluZworCSAqIGl0LgorCSAq LworCWlmIChpb3JlYWQzMihtYXAgKyAweDIyNDBjKSAmIDB4MikgeworCQlwY2lfaW5mbyhwZGV2 LCBGV19CVUcgIkdQVSBsZWZ0IGluaXRpYWxpemVkIGJ5IEVGSSwgcmVzZXR0aW5nXG4iKTsKKwkJ cmV0ID0gcGNpX3Jlc2V0X2Z1bmN0aW9uKHBkZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCXBjaV9l cnIocGRldiwgIkZhaWxlZCB0byByZXNldCBHUFU6ICVkXG4iLCByZXQpOworCX0KKworCWlvdW5t YXAobWFwKTsKK291dF9kaXNhYmxlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KK0RF Q0xBUkVfUENJX0ZJWFVQX0NMQVNTX0ZJTkFMKFBDSV9WRU5ET1JfSURfTlZJRElBLCAweDEzYjEs CisJCQkgICAgICBQQ0lfQ0xBU1NfRElTUExBWV9WR0EsIDgsCisJCQkgICAgICBxdWlya19yZXNl dF9sZW5vdm9fdGhpbmtwYWRfcDUwX252Z3B1KTsKLS0gCjIuMjAuMQoKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOb3V2ZWF1IG1haWxpbmcgbGlzdApO b3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXU= 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=-10.0 required=3.0 tests=DKIMWL_WL_HIGH,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 276CBC4CEC5 for ; Fri, 13 Sep 2019 13:17:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E9423214AE for ; Fri, 13 Sep 2019 13:17:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568380629; bh=GYADCwFchhf1oClUzd1W/W2gOAhVsxCQeWM6Xvwl76A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=rcZC/wxypnPnvYw+QKRLnAI5VvvonZWZZmW5KxgFojA0en3BNd3o2N54x/9caSou8 SJBqIvFJbUMZH/8BxLtow7wmVCfg4w6/fBLf3ybhng8+adeSpqE8DPIUDl9A3/gD3Z Y1JcZVg+D2j030SN69bUnirNJy69oW+2WKFqlLlc= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389998AbfIMNRI (ORCPT ); Fri, 13 Sep 2019 09:17:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:44100 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389080AbfIMNRD (ORCPT ); Fri, 13 Sep 2019 09:17:03 -0400 Received: from localhost (unknown [104.132.45.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9A7A7206A5; Fri, 13 Sep 2019 13:17:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568380623; bh=GYADCwFchhf1oClUzd1W/W2gOAhVsxCQeWM6Xvwl76A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CBOExX+1cY8hIJ7jMPgbEn0OSuWkqsVZQaQfZONool7/ni3/xablL++McxQ99HI/R Un8NhTa654xVc4gYxk/rn0Gu6ppBHPJWGT6edWoBSP0hFeWwpVyf214wp+HLU/j0mK KQFNrh1Fp8NeZg5IF2jNo91017GVww5GguHLuoJU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lyude Paul , Bjorn Helgaas , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Karol Herbst , Ben Skeggs , Sasha Levin Subject: [PATCH 4.19 125/190] PCI: Reset Lenovo ThinkPad P50 nvgpu at boot if necessary Date: Fri, 13 Sep 2019 14:06:20 +0100 Message-Id: <20190913130609.861471420@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190913130559.669563815@linuxfoundation.org> References: <20190913130559.669563815@linuxfoundation.org> User-Agent: quilt/0.66 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 [ Upstream commit e0547c81bfcfad01cbbfa93a5e66bb98ab932f80 ] On ThinkPad P50 SKUs with an Nvidia Quadro M1000M instead of the M2000M variant, the BIOS does not always reset the secondary Nvidia GPU during reboot if the laptop is configured in Hybrid Graphics mode. The reason is unknown, but the following steps and possibly a good bit of patience will reproduce the issue: 1. Boot up the laptop normally in Hybrid Graphics mode 2. Make sure nouveau is loaded and that the GPU is awake 3. Allow the Nvidia GPU to runtime suspend itself after being idle 4. Reboot the machine, the more sudden the better (e.g. sysrq-b may help) 5. If nouveau loads up properly, reboot the machine again and go back to step 2 until you reproduce the issue This results in some very strange behavior: the GPU will be left in exactly the same state it was in when the previously booted kernel started the reboot. This has all sorts of bad side effects: for starters, this completely breaks nouveau starting with a mysterious EVO channel failure that happens well before we've actually used the EVO channel for anything: nouveau 0000:01:00.0: disp: chid 0 mthd 0000 data 00000400 00001000 00000002 This causes a timeout trying to bring up the GR ctx: nouveau 0000:01:00.0: timeout WARNING: CPU: 0 PID: 12 at drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c:1547 gf100_grctx_generate+0x7b2/0x850 [nouveau] Hardware name: LENOVO 20EQS64N0B/20EQS64N0B, BIOS N1EET82W (1.55 ) 12/18/2018 Workqueue: events_long drm_dp_mst_link_probe_work [drm_kms_helper] ... nouveau 0000:01:00.0: gr: wait for idle timeout (en: 1, ctxsw: 0, busy: 1) nouveau 0000:01:00.0: gr: wait for idle timeout (en: 1, ctxsw: 0, busy: 1) nouveau 0000:01:00.0: fifo: fault 01 [WRITE] at 0000000000008000 engine 00 [GR] client 15 [HUB/SCC_NB] reason c4 [] on channel -1 [0000000000 unknown] The GPU never manages to recover. Booting without loading nouveau causes issues as well, since the GPU starts sending spurious interrupts that cause other device's IRQs to get disabled by the kernel: irq 16: nobody cared (try booting with the "irqpoll" option) ... handlers: [<000000007faa9e99>] i801_isr [i2c_i801] Disabling IRQ #16 ... serio: RMI4 PS/2 pass-through port at rmi4-00.fn03 i801_smbus 0000:00:1f.4: Timeout waiting for interrupt! i801_smbus 0000:00:1f.4: Transaction timeout rmi4_f03 rmi4-00.fn03: rmi_f03_pt_write: Failed to write to F03 TX register (-110). i801_smbus 0000:00:1f.4: Timeout waiting for interrupt! i801_smbus 0000:00:1f.4: Transaction timeout rmi4_physical rmi4-00: rmi_driver_set_irq_bits: Failed to change enabled interrupts! This causes the touchpad and sometimes other things to get disabled. Since this happens without nouveau, we can't fix this problem from nouveau itself. Add a PCI quirk for the specific P50 variant of this GPU. Make sure the GPU is advertising NoReset- so we don't reset the GPU when the machine is in Dedicated graphics mode (where the GPU being initialized by the BIOS is normal and expected). Map the GPU MMIO space and read the magic 0x2240c register, which will have bit 1 set if the device was POSTed during a previous boot. Once we've confirmed all of this, reset the GPU and re-disable it - bringing it back to a healthy state. Link: https://bugzilla.kernel.org/show_bug.cgi?id=203003 Link: https://lore.kernel.org/lkml/20190212220230.1568-1-lyude@redhat.com Signed-off-by: Lyude Paul Signed-off-by: Bjorn Helgaas Cc: nouveau@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org Cc: Karol Herbst Cc: Ben Skeggs Cc: stable@vger.kernel.org Signed-off-by: Sasha Levin --- drivers/pci/quirks.c | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 6cda8b7ecc821..311f8a33e62ff 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -5116,3 +5116,61 @@ SWITCHTEC_QUIRK(0x8573); /* PFXI 48XG3 */ SWITCHTEC_QUIRK(0x8574); /* PFXI 64XG3 */ SWITCHTEC_QUIRK(0x8575); /* PFXI 80XG3 */ SWITCHTEC_QUIRK(0x8576); /* PFXI 96XG3 */ + +/* + * On Lenovo Thinkpad P50 SKUs with a Nvidia Quadro M1000M, the BIOS does + * not always reset the secondary Nvidia GPU between reboots if the system + * is configured to use Hybrid Graphics mode. This results in the GPU + * being left in whatever state it was in during the *previous* boot, which + * causes spurious interrupts from the GPU, which in turn causes us to + * disable the wrong IRQ and end up breaking the touchpad. Unsurprisingly, + * this also completely breaks nouveau. + * + * Luckily, it seems a simple reset of the Nvidia GPU brings it back to a + * clean state and fixes all these issues. + * + * When the machine is configured in Dedicated display mode, the issue + * doesn't occur. Fortunately the GPU advertises NoReset+ when in this + * mode, so we can detect that and avoid resetting it. + */ +static void quirk_reset_lenovo_thinkpad_p50_nvgpu(struct pci_dev *pdev) +{ + void __iomem *map; + int ret; + + if (pdev->subsystem_vendor != PCI_VENDOR_ID_LENOVO || + pdev->subsystem_device != 0x222e || + !pdev->reset_fn) + return; + + if (pci_enable_device_mem(pdev)) + return; + + /* + * Based on nvkm_device_ctor() in + * drivers/gpu/drm/nouveau/nvkm/engine/device/base.c + */ + map = pci_iomap(pdev, 0, 0x23000); + if (!map) { + pci_err(pdev, "Can't map MMIO space\n"); + goto out_disable; + } + + /* + * Make sure the GPU looks like it's been POSTed before resetting + * it. + */ + if (ioread32(map + 0x2240c) & 0x2) { + pci_info(pdev, FW_BUG "GPU left initialized by EFI, resetting\n"); + ret = pci_reset_function(pdev); + if (ret < 0) + pci_err(pdev, "Failed to reset GPU: %d\n", ret); + } + + iounmap(map); +out_disable: + pci_disable_device(pdev); +} +DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_NVIDIA, 0x13b1, + PCI_CLASS_DISPLAY_VGA, 8, + quirk_reset_lenovo_thinkpad_p50_nvgpu); -- 2.20.1