From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Drake Subject: [PATCH] PCI: Reprogram bridge prefetch registers on resume Date: Fri, 7 Sep 2018 13:36:14 +0800 Message-ID: <20180907053614.6540-1-drake@endlessm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, nic_swsd-Rasf1IRRPZFBDgjK7y7TUQ@public.gmane.org, keith.busch-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org, linux-6IF/jdPJHihWk0Htik3J/w@public.gmane.org, davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org, jonathan.derrick-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, hkallweit1-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org To: bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" List-Id: netdev.vger.kernel.org T24gMzgrIEludGVsLWJhc2VkIEFzdXMgcHJvZHVjdHMsIHRoZSBudmlkaWEgR1BVIGJlY29tZXMg dW51c2FibGUKYWZ0ZXIgUzMgc3VzcGVuZC9yZXN1bWUuIFRoZSBhZmZlY3RlZCBwcm9kdWN0cyBp bmNsdWRlIG11bHRpcGxlCmdlbmVyYXRpb25zIG9mIG52aWRpYSBHUFVzIGFuZCBJbnRlbCBTb0Nz LiBBZnRlciByZXN1bWUsIG5vdXZlYXUgbG9ncwptYW55IGVycm9ycyBzdWNoIGFzOgoKICAgIGZp Zm86IGZhdWx0IDAwIFtSRUFEXSBhdCAwMDAwMDA1NTU1NTU1MDAwIGVuZ2luZSAwMCBbR1JdIGNs aWVudCAwNCBbSFVCL0ZFXSByZWFzb24gNGEgW10gb24gY2hhbm5lbCAtMSBbMDA3ZmE5MTAwMCB1 bmtub3duXQogICAgRFJNOiBmYWlsZWQgdG8gaWRsZSBjaGFubmVsIDAgW0RSTV0KClNpbWlsYXJs eSwgdGhlIG52aWRpYSBwcm9wcmlldGFyeSBkcml2ZXIgYWxzbyBmYWlscyBhZnRlciByZXN1bWUK KGJsYWNrIHNjcmVlbiwgMTAwJSBDUFUgdXNhZ2UgaW4gWG9yZyBwcm9jZXNzKS4gV2Ugc2hpcHBl ZCBhIHNhbXBsZQp0byBOdmlkaWEgZm9yIGRpYWdub3NpcywgYW5kIHRoZWlyIHJlc3BvbnNlIGlu ZGljYXRlZCB0aGF0IGl0J3MgYQpwcm9ibGVtIHdpdGggdGhlIHBhcmVudCBQQ0kgYnJpZGdlIChv biB0aGUgSW50ZWwgU29DKSwgbm90IHRoZSBHUFUuCgpSdW50aW1lIHN1c3BlbmQvcmVzdW1lIHdv cmtzIGZpbmUsIG9ubHkgUzMgc3VzcGVuZCBpcyBhZmZlY3RlZC4KCldlIGZvdW5kIGEgd29ya2Fy b3VuZDogb24gcmVzdW1lLCByZXdyaXRlIHRoZSBJbnRlbCBQQ0kgYnJpZGdlCidQcmVmZXRjaGFi bGUgQmFzZSBVcHBlciAzMiBCaXRzJyByZWdpc3RlciAoUENJX1BSRUZfQkFTRV9VUFBFUjMyKS4g SW4KdGhlIGNhc2VzIHRoYXQgSSBjaGVja2VkLCB0aGlzIHJlZ2lzdGVyIGhhcyB2YWx1ZSAwIGFu ZCB3ZSBqdXN0IGhhdmUgdG8KcmV3cml0ZSB0aGF0IHZhbHVlLgoKSXQncyB2ZXJ5IHN0cmFuZ2Ug dGhhdCByZXdyaXRpbmcgdGhlIGV4YWN0IHNhbWUgcmVnaXN0ZXIgdmFsdWUKbWFrZXMgYSBkaWZm ZXJlbmNlLCBidXQgaXQgZGVmaW5pdGVseSBtYWtlcyB0aGUgaXNzdWUgZ28gYXdheS4KSXQncyBu b3QganVzdCBhY3RpbmcgYXMgc29tZSBraW5kIG9mIG1lbW9yeSBiYXJyaWVyLCBiZWNhdXNlIHJl d3JpdGluZwpvdGhlciBicmlkZ2UgcmVnaXN0ZXJzIGRvZXMgbm90IHdvcmsgYXJvdW5kIHRoZSBp c3N1ZS4gVGhlcmUncyBzb21ldGhpbmcKbWFnaWMgaW4gdGhpcyBwYXJ0aWN1bGFyIHJlZ2lzdGVy LiBXZSBoYXZlIGNvbmZpcm1lZCB0aGlzIG9uIGFsbAp0aGUgYWZmZWN0ZWQgbW9kZWxzIHdlIGhh dmUgaW4taGFuZHMgKFg1NDJVUSwgVVg1MzNGRCwgWDUzMFVOLCBWMjcyVU4pLgoKQWRkaXRpb25h bGx5LCB0aGlzIHdvcmthcm91bmQgc29sdmVzIGFuIGlzc3VlIHdoZXJlIHI4MTY5IE1TSS1YCmlu dGVycnVwdHMgd2VyZSBicm9rZW4gYWZ0ZXIgUzMgc3VzcGVuZC9yZXN1bWUgb24gQXN1cyBYNDQx VUFSLiBUaGlzCmlzc3VlIHdhcyByZWNlbnRseSB3b3JrZWQgYXJvdW5kIGluIGNvbW1pdCA3YmIw NWI4NWJjMmQgKCJyODE2OToKZG9uJ3QgdXNlIE1TSS1YIG9uIFJUTDgxMDZlIikuIEl0IGFsc28g Zml4ZXMgdGhlIHNhbWUgaXNzdWUgb24KUlRMNjE4NmV2bC84MTExZXZsIG9uIGFuIEFpbWZvci10 ZWNoIGxhcHRvcCB0aGF0IHdlIGhhZCBub3QgeWV0CnBhdGNoZWQuIEkgc3VzcGVjdCBpdCB3aWxs IGFsc28gZml4IHRoZSBpc3N1ZSB0aGF0IHdhcyB3b3JrZWQgYXJvdW5kIGluCmNvbW1pdCA3YzUz YTcyMjQ1OWMgKCJyODE2OTogZG9uJ3QgdXNlIE1TSS1YIG9uIFJUTDgxNjhnIikuCgpUaG9tYXMg TWFydGl0eiByZXBvcnRzIHRoYXQgdGhpcyB3b3JrYXJvdW5kIGFsc28gc29sdmVzIGFuIGlzc3Vl IHdoZXJlCnRoZSBBTUQgUmFkZW9uIFBvbGFyaXMgMTAgR1BVIG9uIHRoZSBIUCBaYm9vayAxNHUg RzUgaXMgdW5yZXNwb25zaXZlCmFmdGVyIFMzIHN1c3BlbmQvcmVzdW1lLgoKRnJvbSBvdXIgdGVz dGluZywgdGhlIGFmZmVjdGVkIEludGVsIFBDSSBicmlkZ2VzIGFyZToKSW50ZWwgU2t5bGFrZSBQ Q0llIENvbnRyb2xsZXIgKHgxNikgWzgwODY6MTkwMV0gKHJldiAwNSkKSW50ZWwgU2t5bGFrZSBQ Q0llIENvbnRyb2xsZXIgKHgxNikgWzgwODY6MTkwMV0gKHJldiAwNykKSW50ZWwgRGV2aWNlIFs4 MDg2OjMxZDhdIChyZXYgZjMpCkludGVsIENlbGVyb24gTjMzNTAvUGVudGl1bSBONDIwMC9BdG9t IEUzOTAwIFNlcmllcyBQQ0kgRXhwcmVzcyBQb3J0IEIgIzEgWzgwODY6NWFkNl0gKHJldiBmYikK SW50ZWwgQ2VsZXJvbiBOMzM1MC9QZW50aXVtIE40MjAwL0F0b20gRTM5MDAgU2VyaWVzIFBDSSBF eHByZXNzIFBvcnQgQSAjMSBbODA4Njo1YWQ4XSAocmV2IGZiKQpJbnRlbCBTdW5yaXNlIFBvaW50 LUxQIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBbODA4Njo5ZDEwXSAocmV2IGYxKQpJbnRlbCBTdW5y aXNlIFBvaW50LUxQIFBDSSBFeHByZXNzIFJvb3QgUG9ydCAjNSBbODA4Njo5ZDE0XSAocmV2IGYx KQpJbnRlbCBEZXZpY2UgWzgwODY6OWRiY10gKHJldiBmMCkKCk9uIHJlc3VtZSwgcmVwcm9ncmFt IHRoZSBQQ0kgYnJpZGdlIHByZWZldGNoIHJlZ2lzdGVycywgaW5jbHVkaW5nIHRoZQptYWdpYyBy ZWdpc3RlciBtZW50aW9uZWQgYWJvdmUuCgpUaGlzIG1hdGNoZXMgV2luMTAgYmVoYXZpb3VyLCB3 aGljaCBhbHNvIHJld3JpdGVzIHRoZXNlIHJlZ2lzdGVycwpkdXJpbmcgUzMgcmVzdW1lIChjaGVj a2VkIHdpdGggcWVtdSB0cmFjaW5nKS4KCkxpbms6IGh0dHBzOi8vbWFyYy5pbmZvLz9pPUNBRDhM cDQ2WTJlT1I3V0UyOHhUb1VMOHMtYVlpcVBhMG5TPTFHU0QwQXhrZGRYcTYrQUBtYWlsLmdtYWls LmNvbQpMaW5rOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0x MDU3NjAKU2lnbmVkLW9mZi1ieTogRGFuaWVsIERyYWtlIDxkcmFrZUBlbmRsZXNzbS5jb20+Ci0t LQoKTm90ZXM6CiAgICBSZXBsYWNlcyBwYXRjaDoKICAgICAgIFBDSTogYWRkIHByZWZldGNoIHF1 aXJrIHRvIHdvcmsgYXJvdW5kIEFzdXMvTnZpZGlhIHN1c3BlbmQgaXNzdWVzCiAgICAKICAgIEJl bG93IGlzIHRoZSBsaXN0IG9mIEFzdXMgcHJvZHVjdHMgd2l0aCBJbnRlbC9OdmlkaWEgdGhhdCB3 ZQogICAgYmVsaWV2ZSBhcmUgYWZmZWN0ZWQgYnkgdGhlIEdQVSByZXN1bWUgaXNzdWUuCiAgICAK ICAgIEkgcmV2aXNlZCBteSBjb3VudGluZyBtZXRob2QgZnJvbSBteSBsYXN0IHBhdGNoIHRvIGVs aW1pbmF0ZSBkdXBsaWNhdGUKICAgIHBsYXRmb3JtcyB0aGF0IGhhZCBtdWx0aXBsZSBTS1VzIHdp dGggdGhlIHNhbWUgRE1JL0dQVS9icmlkZ2UsIHRoYXQncyB3aHkKICAgIHRoZSBwcm9kdWN0IGNv dW50IHJlZHVjZWQgZnJvbSA0MyB0byAzOC4KICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBD T01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1lOiBGWDUwMlZECiAgICBwcm9kdWN0X25hbWU6IEZY NTAyVkQKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBDb3Jwb3JhdGlv biBEZXZpY2UgWzEwZGU6MWM4ZF0gKHJldiBmZikgKHByb2ctaWYgZmYpCiAgICAJISEhIFVua25v d24gaGVhZGVyIHR5cGUgN2YKICAgIDAwOjAxLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENv cnBvcmF0aW9uIERldmljZSBbODA4NjoxOTAxXSAocmV2IDA1KSAocHJvZy1pZiAwMCBbTm9ybWFs IGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAg Ym9hcmRfbmFtZTogRlg1NzBVRAogICAgcHJvZHVjdF9uYW1lOiBBU1VTIEdhbWluZyBGWDU3MFVE CiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2 aWNlIFsxMGRlOjFjOGRdIChyZXYgYTEpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVy IEluYy4gRGV2aWNlIFsxMDQzOjFmNDBdCiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJ bnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYgMDAg W05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElO Qy4KICAgIGJvYXJkX25hbWU6IEdMNTUzVkQKICAgIHByb2R1Y3RfbmFtZTogR0w1NTNWRAogICAg MDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSBb MTBkZToxYzhkXSAocmV2IGExKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMu IERldmljZSBbMTA0MzoxNWUwXQogICAgMDA6MDEuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwg Q29ycG9yYXRpb24gRGV2aWNlIFs4MDg2OjE5MDFdIChyZXYgMDUpIChwcm9nLWlmIDAwIFtOb3Jt YWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAg ICBib2FyZF9uYW1lOiBHTDc1M1ZECiAgICBwcm9kdWN0X25hbWU6IEdMNzUzVkQKICAgIDAxOjAw LjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBDb3Jwb3JhdGlvbiBEZXZpY2UgWzEwZGU6 MWM4ZF0gKHJldiBhMSkKICAgIAlTdWJzeXN0ZW06IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBEZXZp Y2UgWzEwNDM6MTU5MF0KICAgIDAwOjAxLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBv cmF0aW9uIERldmljZSBbODA4NjoxOTAxXSAocmV2IDA1KSAocHJvZy1pZiAwMCBbTm9ybWFsIGRl Y29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9h cmRfbmFtZTogSzQwMVVRSwogICAgcHJvZHVjdF9uYW1lOiBLNDAxVVFLCiAgICAwMTowMC4wIDNE IGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjEzNGRd IChyZXYgYTIpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNlIFsx MDQzOjE0YjBdCiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlv biBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVd KQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25h bWU6IFAxNDQwVUYKICAgIHByb2R1Y3RfbmFtZTogQVNVU1BSTyBQMTQ0MFVGCiAgICAwMTowMC4w IDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjE3 NGRdIChyZXYgYTIpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNl IFsxMDQzOjFmMTBdCiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3Jh dGlvbiBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNv ZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJk X25hbWU6IFAyNDQwVVEKICAgIHByb2R1Y3RfbmFtZTogUDI0NDBVUQogICAgMDE6MDAuMCAzRCBj b250cm9sbGVyIFswMzAyXTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxMzRkXSAo cmV2IGEyKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIERldmljZSBbMTA0 MzoxM2NlXQogICAgMDA6MWMuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9yYXRpb24g RGV2aWNlIFs4MDg2OjlkMTBdIChyZXYgZjEpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkK ICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1l OiBQMjU0ME5WCiAgICBwcm9kdWN0X25hbWU6IFAyNTQwTlYKICAgIDAxOjAwLjAgM0QgY29udHJv bGxlciBbMDMwMl06IE5WSURJQSBDb3Jwb3JhdGlvbiBEZXZpY2UgWzEwZGU6MTM0Zl0gKHJldiBh MikKICAgIAlTdWJzeXN0ZW06IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTdm MF0KICAgIDAwOjEzLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmlj ZSBbODA4Njo1YWQ4XSAocmV2IGZiKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAK ICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogUDI1 NDBVVgogICAgcHJvZHVjdF9uYW1lOiBQMjU0MFVWCiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIg WzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjEzNGZdIChyZXYgYTIpCiAg ICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNlIFsxMDQzOjEzMmVdCiAg ICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2UgWzgw ODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBz eXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFA0NTQwVVEK ICAgIHByb2R1Y3RfbmFtZTogUDQ1NDBVUQogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAy XTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxMzRkXSAocmV2IGEyKQogICAgCVN1 YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIERldmljZSBbMTA0MzoxNjUwXQogICAgMDA6 MWMuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2Ojlk MTBdIChyZXYgZjEpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3Zl bmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1lOiBVWDMzMVVOCiAgICBw cm9kdWN0X25hbWU6IFVYMzMxVU4KICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5W SURJQSBDb3Jwb3JhdGlvbiBEZXZpY2UgWzEwZGU6MWQxMl0gKHJldiBhMSkKICAgIAlTdWJzeXN0 ZW06IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTVkZV0KICAgIDAwOjFjLjAg UENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBbODA4Njo5ZDEwXSAo cmV2IGYxKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6 IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogVVg0MTBVUUsKICAgIHByb2R1 Y3RfbmFtZTogVVg0MTBVUUsKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJ QSBDb3Jwb3JhdGlvbiBEZXZpY2UgWzEwZGU6MTM0ZF0gKHJldiBhMikKICAgIAlTdWJzeXN0ZW06 IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTM4ZV0KICAgIDAwOjFjLjAgUENJ IGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBbODA4Njo5ZDEwXSAocmV2 IGYxKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFT VVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogVVg0MzBVUQogICAgcHJvZHVjdF9u YW1lOiBVWDQzMFVRCiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29y cG9yYXRpb24gRGV2aWNlIFsxMGRlOjEzNGRdIChyZXYgYTIpCiAgICAJU3Vic3lzdGVtOiBBU1VT VGVLIENvbXB1dGVyIEluYy4gRGV2aWNlIFsxMDQzOjEzOWVdCiAgICAwMDoxYy4wIFBDSSBicmlk Z2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBmMSkg KHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VTVGVL IENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFVYNTMzRkQKICAgIHByb2R1Y3RfbmFtZTog WmVuQm9vayBVWDUzM0ZEX1VYNTMzRkQKICAgIDAyOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06 IE5WSURJQSBDb3Jwb3JhdGlvbiBHUDEwN00gW0dlRm9yY2UgR1RYIDEwNTAgTW9iaWxlXSBbMTBk ZToxYzhkXSAocmV2IGExKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIEdQ MTA3TSBbR2VGb3JjZSBHVFggMTA1MCBNb2JpbGVdIFsxMDQzOjE0YTFdCiAgICAwMDoxYy40IFBD SSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2UgWzgwODY6OWRiY10gKHJl diBmMCkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBB U1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFYyMjFJRAogICAgcHJvZHVjdF9u YW1lOiBWMjIxSUQKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBDb3Jw b3JhdGlvbiBEZXZpY2UgWzEwZGU6MTM0Zl0gKHJldiBhMikKICAgIAlTdWJzeXN0ZW06IEFTVVNU ZUsgQ29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTVmMF0KICAgIDAwOjEzLjAgUENJIGJyaWRn ZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBbODA4Njo1YWQ4XSAocmV2IGZiKSAo cHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsg Q09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogVjI3MlVOCiAgICBwcm9kdWN0X25hbWU6IFZp dm8gQUlPIDI3IFYyNzJVTgogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTogTlZJRElB IENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxZDEwXSAocmV2IGExKQogICAgCVN1YnN5c3RlbTog QVNVU1RlSyBDb21wdXRlciBJbmMuIERldmljZSBbMTA0MzoxN2JlXQogICAgMDA6MWMuMCBQQ0kg YnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2OjlkMTBdIChyZXYg ZjEpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3ZlbmRvcjogQVNV U1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1lOiBYNDMwVU4KICAgIHByb2R1Y3RfbmFt ZTogVml2b0Jvb2sgUzE0IFg0MzBVTgogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTog TlZJRElBIENvcnBvcmF0aW9uIEdQMTA4TSBbR2VGb3JjZSBNWDE1MF0gWzEwZGU6MWQxMF0gKHJl diBhMSkKICAgIAlTdWJzeXN0ZW06IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBHUDEwOE0gW0dlRm9y Y2UgTVgxNTBdIFsxMDQzOjE5OWVdCiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRl bCBDb3Jwb3JhdGlvbiBTdW5yaXNlIFBvaW50LUxQIFBDSSBFeHByZXNzIFJvb3QgUG9ydCBbODA4 Njo5ZDEwXSAocmV2IGYxKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5 c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogWDQ0MU1CCiAg ICBwcm9kdWN0X25hbWU6IFg0NDFNQgogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTog TlZJRElBIENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxNzRlXSAocmV2IGEyKQogICAgCVN1YnN5 c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIERldmljZSBbMTA0MzoxNzFlXQogICAgMDA6MTMu MCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2OjMxZDhd IChyZXYgZjMpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3ZlbmRv cjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1lOiBYNDU2VUYKICAgIHByb2R1 Y3RfbmFtZTogWDQ1NlVGCiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEg Q29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjEzNDZdIChyZXYgYTIpCiAgICAJU3Vic3lzdGVtOiBB U1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNlIFsxMDQzOjI0NWFdCiAgICAwMDoxYy4wIFBDSSBi cmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBm MSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VT VGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFg1MTBVUQogICAgcHJvZHVjdF9uYW1l OiBYNTEwVVEKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBDb3Jwb3Jh dGlvbiBEZXZpY2UgWzEwZGU6MTM0ZF0gKHJldiBhMikKICAgIAlTdWJzeXN0ZW06IEFTVVNUZUsg Q29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTQ1ZV0KICAgIDAwOjFjLjAgUENJIGJyaWRnZSBb MDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBbODA4Njo5ZDEwXSAocmV2IGYxKSAocHJv Zy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09N UFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogWDUzMFVOCiAgICBwcm9kdWN0X25hbWU6IFZpdm9C b29rIFMxNSBYNTMwVU4KICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBD b3Jwb3JhdGlvbiBHUDEwOE0gW0dlRm9yY2UgTVgxNTBdIFsxMGRlOjFkMTBdIChyZXYgYTEpCiAg ICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gR1AxMDhNIFtHZUZvcmNlIE1YMTUw XSBbMTA0MzoxOGNlXQogICAgMDA6MWMuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9y YXRpb24gU3VucmlzZSBQb2ludC1MUCBQQ0kgRXhwcmVzcyBSb290IFBvcnQgWzgwODY6OWQxMF0g KHJldiBmMSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBzeXNfdmVuZG9y OiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFg1NDFVVgogICAgcHJvZHVj dF9uYW1lOiBYNTQxVVYKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBD b3Jwb3JhdGlvbiBEZXZpY2UgWzEwZGU6MTM0Zl0gKHJldiBhMikKICAgIAlTdWJzeXN0ZW06IEFT VVNUZUsgQ29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTFlZV0KICAgIDAwOjFjLjAgUENJIGJy aWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBbODA4Njo5ZDEwXSAocmV2IGYx KSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNU ZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogWDU0MlVOCiAgICBwcm9kdWN0X25hbWU6 IFg1NDJVTgogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTogTlZJRElBIENvcnBvcmF0 aW9uIERldmljZSBbMTBkZToxZDEwXSAocmV2IGExKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBD b21wdXRlciBJbmMuIERldmljZSBbMTA0MzoxYjEwXQogICAgMDA6MWMuMCBQQ0kgYnJpZGdlIFsw NjA0XTogSW50ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2OjlkMTBdIChyZXYgZjEpIChwcm9n LWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01Q VVRFUiBJTkMuCiAgICBib2FyZF9uYW1lOiBYNTQyVVEKICAgIHByb2R1Y3RfbmFtZTogWDU0MlVR CiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gR00x MDhNIFtHZUZvcmNlIDk0ME1YXSBbMTBkZToxMzRkXSAocmV2IGEyKQogICAgCVN1YnN5c3RlbTog QVNVU1RlSyBDb21wdXRlciBJbmMuIEdNMTA4TSBbR2VGb3JjZSA5NDBNWF0gWzEwNDM6MTQyZV0K ICAgIDAwOjFjLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBb ODA4Njo5ZDEwXSAocmV2IGYxKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAg IHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogWDU1NVVC CiAgICBwcm9kdWN0X25hbWU6IFg1NTVVQgogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAy XTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxMzQ3XSAocmV2IGEyKQogICAgCVN1 YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIERldmljZSBbMTA0MzoyNDZhXQogICAgMDA6 MWMuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2Ojlk MTBdIChyZXYgZjEpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3Zl bmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1lOiBYNTU1VVEKICAgIHBy b2R1Y3RfbmFtZTogWDU1NVVRCiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklE SUEgQ29ycG9yYXRpb24gR00xMDhNIFtHZUZvcmNlIDk0ME1YXSBbMTBkZToxMzRkXSAocmV2IGEy KQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIEdNMTA4TSBbR2VGb3JjZSA5 NDBNWF0gWzEwNDM6MjQ2YV0KICAgIDAwOjFjLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENv cnBvcmF0aW9uIERldmljZSBbODA4Njo5ZDEwXSAocmV2IGYxKSAocHJvZy1pZiAwMCBbTm9ybWFs IGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAg Ym9hcmRfbmFtZTogWDU1NlVSSwogICAgcHJvZHVjdF9uYW1lOiBYNTU2VVJLCiAgICAwMTowMC4w IDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjEz NGVdIChyZXYgYTIpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNl IFsxMDQzOjE0OTBdCiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3Jh dGlvbiBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNv ZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJk X25hbWU6IFg1NzBaRAogICAgcHJvZHVjdF9uYW1lOiBWaXZvQm9va19BU1VTIExhcHRvcCBYNTcw WkQKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBDb3Jwb3JhdGlvbiBH UDEwN00gW0dlRm9yY2UgR1RYIDEwNTAgTW9iaWxlXSBbMTBkZToxYzhkXSAocmV2IGExKQogICAg CVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIEdQMTA3TSBbR2VGb3JjZSBHVFggMTA1 MCBNb2JpbGVdIFsxMDQzOjExZDFdCiAgICAwMDowMS4xIFBDSSBicmlkZ2UgWzA2MDRdOiBBZHZh bmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuIFtBTURdIERldmljZSBbMTAyMjoxNWQzXSAocHJvZy1p ZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVU RVIgSU5DLgogICAgYm9hcmRfbmFtZTogWDU4MEdECiAgICBwcm9kdWN0X25hbWU6IFZpdm9Cb29r X0FTVVNMYXB0b3AgWDU4MEdEX1g1ODBHRAogICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAy XTogTlZJRElBIENvcnBvcmF0aW9uIEdQMTA3TSBbR2VGb3JjZSBHVFggMTA1MCBNb2JpbGVdIFsx MGRlOjFjOGRdIChyZXYgYTEpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4g R1AxMDdNIFtHZUZvcmNlIEdUWCAxMDUwIE1vYmlsZV0gWzEwNDM6MWZjMF0KICAgIDAwOjAxLjAg UENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIFNreWxha2UgUENJZSBDb250cm9s bGVyICh4MTYpIFs4MDg2OjE5MDFdIChyZXYgMDcpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2Rl XSkKICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9u YW1lOiBYNTgwVkQKICAgIHByb2R1Y3RfbmFtZTogWDU4MFZECiAgICAwMTowMC4wIDNEIGNvbnRy b2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjFjOGRdIChyZXYg YTEpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNlIFsxMDQzOjFh MTBdCiAgICAwMDowMS4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZp Y2UgWzgwODY6MTkwMV0gKHJldiAwNSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAg CiAgICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFg3 MDVGRAogICAgcHJvZHVjdF9uYW1lOiBWaXZvQm9vayBQcm8gMTcgWDcwNUZEX1g3MDVGRAogICAg MDI6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTogTlZJRElBIENvcnBvcmF0aW9uIEdQMTA3TSBb R2VGb3JjZSBHVFggMTA1MCBNb2JpbGVdIFsxMGRlOjFjOGRdIChyZXYgYTEpCiAgICAJU3Vic3lz dGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gR1AxMDdNIFtHZUZvcmNlIEdUWCAxMDUwIE1vYmls ZV0gWzEwNDM6MTQzMV0KICAgIDAwOjFjLjQgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBv cmF0aW9uIERldmljZSBbODA4Njo5ZGJjXSAocmV2IGYwKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRl Y29kZV0pCiAgICAKICAgIHN5c192ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9h cmRfbmFtZTogWDcwNVVECiAgICBwcm9kdWN0X25hbWU6IFg3MDVVRAogICAgMDE6MDAuMCAzRCBj b250cm9sbGVyIFswMzAyXTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxYzhkXSAo cmV2IGExKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJbmMuIERldmljZSBbMTA0 MzoxYjMwXQogICAgMDA6MWMuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50ZWwgQ29ycG9yYXRpb24g RGV2aWNlIFs4MDg2OjlkMTBdIChyZXYgZjEpIChwcm9nLWlmIDAwIFtOb3JtYWwgZGVjb2RlXSkK ICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMuCiAgICBib2FyZF9uYW1l OiBYNzA1VVEKICAgIHByb2R1Y3RfbmFtZTogWDcwNVVRCiAgICAwMTowMC4wIDNEIGNvbnRyb2xs ZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIFsxMGRlOjEzNGRdIChyZXYgYTIp CiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1dGVyIEluYy4gRGV2aWNlIFsxMDQzOjE0OGVd CiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRdOiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2Ug WzgwODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYgMDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAg ICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVSIElOQy4KICAgIGJvYXJkX25hbWU6IFg3NTFO VgogICAgcHJvZHVjdF9uYW1lOiBYNzUxTlYKICAgIDAxOjAwLjAgM0QgY29udHJvbGxlciBbMDMw Ml06IE5WSURJQSBDb3Jwb3JhdGlvbiBEZXZpY2UgWzEwZGU6MTM0Zl0gKHJldiBhMikKICAgIAlT dWJzeXN0ZW06IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBEZXZpY2UgWzEwNDM6MTNiZV0KICAgIDAw OjEzLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENvcnBvcmF0aW9uIERldmljZSBbODA4Njo1 YWQ4XSAocmV2IGZiKSAocHJvZy1pZiAwMCBbTm9ybWFsIGRlY29kZV0pCiAgICAKICAgIHN5c192 ZW5kb3I6IEFTVVNUZUsgQ09NUFVURVIgSU5DLgogICAgYm9hcmRfbmFtZTogWjI0MElFCiAgICBw cm9kdWN0X25hbWU6IFoyNDBJRQogICAgMDE6MDAuMCBWR0EgY29tcGF0aWJsZSBjb250cm9sbGVy IFswMzAwXTogTlZJRElBIENvcnBvcmF0aW9uIERldmljZSBbMTBkZToxYzhkXSAocmV2IGExKSAo cHJvZy1pZiAwMCBbVkdBIGNvbnRyb2xsZXJdKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21w dXRlciBJbmMuIERldmljZSBbMTA0MzoxNzUwXQogICAgMDA6MDEuMCBQQ0kgYnJpZGdlIFswNjA0 XTogSW50ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2OjE5MDFdIChyZXYgMDUpIChwcm9nLWlm IDAwIFtOb3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01QVVRF UiBJTkMuCiAgICBib2FyZF9uYW1lOiBaTjIyMElDLUsKICAgIHByb2R1Y3RfbmFtZTogWk4yMjBJ Qy1LCiAgICAwMTowMC4wIDNEIGNvbnRyb2xsZXIgWzAzMDJdOiBOVklESUEgQ29ycG9yYXRpb24g RGV2aWNlIFsxMGRlOjEzNGVdIChyZXYgYTIpCiAgICAJU3Vic3lzdGVtOiBBU1VTVGVLIENvbXB1 dGVyIEluYy4gRGV2aWNlIFsxMDQzOjExN2VdCiAgICAwMDoxYy4wIFBDSSBicmlkZ2UgWzA2MDRd OiBJbnRlbCBDb3Jwb3JhdGlvbiBEZXZpY2UgWzgwODY6OWQxMF0gKHJldiBmMSkgKHByb2ctaWYg MDAgW05vcm1hbCBkZWNvZGVdKQogICAgCiAgICBzeXNfdmVuZG9yOiBBU1VTVGVLIENPTVBVVEVS IElOQy4KICAgIGJvYXJkX25hbWU6IFpOMjQxSUMKICAgIHByb2R1Y3RfbmFtZTogWk4yNDFJQwog ICAgMDE6MDAuMCAzRCBjb250cm9sbGVyIFswMzAyXTogTlZJRElBIENvcnBvcmF0aW9uIERldmlj ZSBbMTBkZToxMzRkXSAocmV2IGEyKQogICAgCVN1YnN5c3RlbTogQVNVU1RlSyBDb21wdXRlciBJ bmMuIERldmljZSBbMTA0MzoxOTAwXQogICAgMDA6MWMuMCBQQ0kgYnJpZGdlIFswNjA0XTogSW50 ZWwgQ29ycG9yYXRpb24gRGV2aWNlIFs4MDg2OjlkMTBdIChyZXYgZjEpIChwcm9nLWlmIDAwIFtO b3JtYWwgZGVjb2RlXSkKICAgIAogICAgc3lzX3ZlbmRvcjogQVNVU1RlSyBDT01QVVRFUiBJTkMu CiAgICBib2FyZF9uYW1lOiBaTjI3MElFCiAgICBwcm9kdWN0X25hbWU6IFpOMjcwSUUKICAgIDAx OjAwLjAgM0QgY29udHJvbGxlciBbMDMwMl06IE5WSURJQSBDb3Jwb3JhdGlvbiBEZXZpY2UgWzEw ZGU6MTM0ZF0gKHJldiBhMikKICAgIAlTdWJzeXN0ZW06IEFTVVNUZUsgQ29tcHV0ZXIgSW5jLiBE ZXZpY2UgWzEwNDM6MTcyMF0KICAgIDAwOjAxLjAgUENJIGJyaWRnZSBbMDYwNF06IEludGVsIENv cnBvcmF0aW9uIERldmljZSBbODA4NjoxOTAxXSAocmV2IDA1KSAocHJvZy1pZiAwMCBbTm9ybWFs IGRlY29kZV0pCgogZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIHwgMTQgKysrKysrKysrKysrKysK IGRyaXZlcnMvcGNpL3NldHVwLWJ1cy5jICB8ICAyICstCiBpbmNsdWRlL2xpbnV4L3BjaS5oICAg ICAgfCAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24o LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9w Y2ktZHJpdmVyLmMKaW5kZXggYmVmMTdjM2ZjYTY3Li4wMzRmODE2NTcwYWQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMK QEAgLTUyNCw2ICs1MjQsMjAgQEAgc3RhdGljIHZvaWQgcGNpX3BtX2RlZmF1bHRfcmVzdW1lX2Vh cmx5KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogCXBjaV9wb3dlcl91cChwY2lfZGV2KTsKIAlw Y2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKIAlwY2lfcG1lX3Jlc3RvcmUocGNpX2Rldik7CisK KwkvKgorCSAqIFJlZG8gdGhlIFBDSSBicmlkZ2UgcHJlZmV0Y2ggcmVnaXN0ZXIgc2V0dXAuCisJ ICoKKwkgKiBUaGlzIHdvcmtzIGFyb3VuZCBhbiBJbnRlbCBQQ0kgYnJpZGdlIGlzc3VlIHNlZW4g b24gQXN1cyBhbmQgSFAKKwkgKiBsYXB0b3BzLCB3aGVyZSB0aGUgR1BVIGlzIG5vdCB1c2FibGUg YWZ0ZXIgUzMgcmVzdW1lLgorCSAqIEV2ZW4gdGhvdWdoIFBDSSBicmlkZ2UgcmVnaXN0ZXIgY29u dGVudHMgYXBwZWFyIHRvIGJlIGludGFjdAorCSAqIGF0IHJlc3VtZSB0aW1lLCByZXdyaXRpbmcg dGhlIHZhbHVlIG9mIFBSRUZfQkFTRV9VUFBFUjMyIGlzCisJICogcmVxdWlyZWQgdG8gbWFrZSB0 aGUgR1BVIHdvcmsuCisJICogV2luZG93cyAxMCBhbHNvIHJlcHJvZ3JhbXMgdGhlc2UgcmVnaXN0 ZXJzIGR1cmluZyBTMyByZXN1bWUuCisJICovCisJaWYgKHBjaV9kZXYtPmNsYXNzID09IFBDSV9D TEFTU19CUklER0VfUENJIDw8IDgpCisJCXBjaV9zZXR1cF9icmlkZ2VfbW1pb19wcmVmKHBjaV9k ZXYpOworCiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfcmVzdW1lX2Vhcmx5LCBwY2lfZGV2 KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3Bj aS9zZXR1cC1idXMuYwppbmRleCA3OWIxODI0ZTgzYjQuLmNiODgyODhkMmE2OSAxMDA2NDQKLS0t IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMK QEAgLTYzMCw3ICs2MzAsNyBAQCBzdGF0aWMgdm9pZCBwY2lfc2V0dXBfYnJpZGdlX21taW8oc3Ry dWN0IHBjaV9kZXYgKmJyaWRnZSkKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGJyaWRnZSwgUENJ X01FTU9SWV9CQVNFLCBsKTsKIH0KIAotc3RhdGljIHZvaWQgcGNpX3NldHVwX2JyaWRnZV9tbWlv X3ByZWYoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKK3ZvaWQgcGNpX3NldHVwX2JyaWRnZV9tbWlv X3ByZWYoc3RydWN0IHBjaV9kZXYgKmJyaWRnZSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK IAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggZTcyY2E4ZGQ2MjQxLi5iMTU4Mjhm YzI2YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51 eC9wY2kuaApAQCAtOTM0LDYgKzkzNCw3IEBAIHN0cnVjdCBwY2lfZGV2ICpwY2lfc2Nhbl9zaW5n bGVfZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbik7CiB2b2lkIHBjaV9kZXZp Y2VfYWRkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzICpidXMpOwogdW5zaWdu ZWQgaW50IHBjaV9zY2FuX2NoaWxkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIHZvaWQgcGNp X2J1c19hZGRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwordm9pZCBwY2lfc2V0dXBfYnJp ZGdlX21taW9fcHJlZihzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlKTsKIHZvaWQgcGNpX3JlYWRfYnJp ZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCk7CiBzdHJ1Y3QgcmVzb3VyY2UgKnBjaV9m aW5kX3BhcmVudF9yZXNvdXJjZShjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCQkgIHN0 cnVjdCByZXNvdXJjZSAqcmVzKTsKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9ub3V2ZWF1Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-f193.google.com ([209.85.215.193]:36565 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726534AbeIGKPj (ORCPT ); Fri, 7 Sep 2018 06:15:39 -0400 Received: by mail-pg1-f193.google.com with SMTP id d1-v6so6414813pgo.3 for ; Thu, 06 Sep 2018 22:36:24 -0700 (PDT) From: Daniel Drake To: bhelgaas@google.com Cc: linux-pci@vger.kernel.org, linux@endlessm.com, nouveau@lists.freedesktop.org, linux-pm@vger.kernel.org, peter@lekensteyn.nl, kherbst@redhat.com, andriy.shevchenko@linux.intel.com, rafael.j.wysocki@intel.com, keith.busch@intel.com, mika.westerberg@linux.intel.com, jonathan.derrick@intel.com, kugel@rockbox.org, davem@davemloft.net, hkallweit1@gmail.com, netdev@vger.kernel.org, nic_swsd@realtek.com Subject: [PATCH] PCI: Reprogram bridge prefetch registers on resume Date: Fri, 7 Sep 2018 13:36:14 +0800 Message-Id: <20180907053614.6540-1-drake@endlessm.com> Sender: linux-pci-owner@vger.kernel.org List-ID: On 38+ Intel-based Asus products, the nvidia GPU becomes unusable after S3 suspend/resume. The affected products include multiple generations of nvidia GPUs and Intel SoCs. After resume, nouveau logs many errors such as: fifo: fault 00 [READ] at 0000005555555000 engine 00 [GR] client 04 [HUB/FE] reason 4a [] on channel -1 [007fa91000 unknown] DRM: failed to idle channel 0 [DRM] Similarly, the nvidia proprietary driver also fails after resume (black screen, 100% CPU usage in Xorg process). We shipped a sample to Nvidia for diagnosis, and their response indicated that it's a problem with the parent PCI bridge (on the Intel SoC), not the GPU. Runtime suspend/resume works fine, only S3 suspend is affected. We found a workaround: on resume, rewrite the Intel PCI bridge 'Prefetchable Base Upper 32 Bits' register (PCI_PREF_BASE_UPPER32). In the cases that I checked, this register has value 0 and we just have to rewrite that value. It's very strange that rewriting the exact same register value makes a difference, but it definitely makes the issue go away. It's not just acting as some kind of memory barrier, because rewriting other bridge registers does not work around the issue. There's something magic in this particular register. We have confirmed this on all the affected models we have in-hands (X542UQ, UX533FD, X530UN, V272UN). Additionally, this workaround solves an issue where r8169 MSI-X interrupts were broken after S3 suspend/resume on Asus X441UAR. This issue was recently worked around in commit 7bb05b85bc2d ("r8169: don't use MSI-X on RTL8106e"). It also fixes the same issue on RTL6186evl/8111evl on an Aimfor-tech laptop that we had not yet patched. I suspect it will also fix the issue that was worked around in commit 7c53a722459c ("r8169: don't use MSI-X on RTL8168g"). Thomas Martitz reports that this workaround also solves an issue where the AMD Radeon Polaris 10 GPU on the HP Zbook 14u G5 is unresponsive after S3 suspend/resume. >>From our testing, the affected Intel PCI bridges are: Intel Skylake PCIe Controller (x16) [8086:1901] (rev 05) Intel Skylake PCIe Controller (x16) [8086:1901] (rev 07) Intel Device [8086:31d8] (rev f3) Intel Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port B #1 [8086:5ad6] (rev fb) Intel Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 [8086:5ad8] (rev fb) Intel Sunrise Point-LP PCI Express Root Port [8086:9d10] (rev f1) Intel Sunrise Point-LP PCI Express Root Port #5 [8086:9d14] (rev f1) Intel Device [8086:9dbc] (rev f0) On resume, reprogram the PCI bridge prefetch registers, including the magic register mentioned above. This matches Win10 behaviour, which also rewrites these registers during S3 resume (checked with qemu tracing). Link: https://marc.info/?i=CAD8Lp46Y2eOR7WE28xToUL8s-aYiqPa0nS=1GSD0AxkddXq6+A@mail.gmail.com Link: https://bugs.freedesktop.org/show_bug.cgi?id=105760 Signed-off-by: Daniel Drake --- Notes: Replaces patch: PCI: add prefetch quirk to work around Asus/Nvidia suspend issues Below is the list of Asus products with Intel/Nvidia that we believe are affected by the GPU resume issue. I revised my counting method from my last patch to eliminate duplicate platforms that had multiple SKUs with the same DMI/GPU/bridge, that's why the product count reduced from 43 to 38. sys_vendor: ASUSTeK COMPUTER INC. board_name: FX502VD product_name: FX502VD 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1c8d] (rev ff) (prog-if ff) !!! Unknown header type 7f 00:01.0 PCI bridge [0604]: Intel Corporation Device [8086:1901] (rev 05) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: FX570UD product_name: ASUS Gaming FX570UD 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:1f40] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: GL553VD product_name: GL553VD 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:15e0] 00:01.0 PCI bridge [0604]: Intel Corporation Device [8086:1901] (rev 05) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: GL753VD product_name: GL753VD 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:1590] 00:01.0 PCI bridge [0604]: Intel Corporation Device [8086:1901] (rev 05) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: K401UQK product_name: K401UQK 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:14b0] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: P1440UF product_name: ASUSPRO P1440UF 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:174d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:1f10] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: P2440UQ product_name: P2440UQ 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:13ce] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: P2540NV product_name: P2540NV 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134f] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:17f0] 00:13.0 PCI bridge [0604]: Intel Corporation Device [8086:5ad8] (rev fb) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: P2540UV product_name: P2540UV 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134f] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:132e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: P4540UQ product_name: P4540UQ 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:1650] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: UX331UN product_name: UX331UN 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1d12] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:15de] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: UX410UQK product_name: UX410UQK 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:138e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: UX430UQ product_name: UX430UQ 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:139e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: UX533FD product_name: ZenBook UX533FD_UX533FD 02:00.0 3D controller [0302]: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. GP107M [GeForce GTX 1050 Mobile] [1043:14a1] 00:1c.4 PCI bridge [0604]: Intel Corporation Device [8086:9dbc] (rev f0) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: V221ID product_name: V221ID 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134f] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:15f0] 00:13.0 PCI bridge [0604]: Intel Corporation Device [8086:5ad8] (rev fb) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: V272UN product_name: Vivo AIO 27 V272UN 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1d10] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:17be] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X430UN product_name: VivoBook S14 X430UN 01:00.0 3D controller [0302]: NVIDIA Corporation GP108M [GeForce MX150] [10de:1d10] (rev a1) Subsystem: ASUSTeK Computer Inc. GP108M [GeForce MX150] [1043:199e] 00:1c.0 PCI bridge [0604]: Intel Corporation Sunrise Point-LP PCI Express Root Port [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X441MB product_name: X441MB 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:174e] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:171e] 00:13.0 PCI bridge [0604]: Intel Corporation Device [8086:31d8] (rev f3) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X456UF product_name: X456UF 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1346] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:245a] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X510UQ product_name: X510UQ 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:145e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X530UN product_name: VivoBook S15 X530UN 01:00.0 3D controller [0302]: NVIDIA Corporation GP108M [GeForce MX150] [10de:1d10] (rev a1) Subsystem: ASUSTeK Computer Inc. GP108M [GeForce MX150] [1043:18ce] 00:1c.0 PCI bridge [0604]: Intel Corporation Sunrise Point-LP PCI Express Root Port [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X541UV product_name: X541UV 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134f] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:11ee] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X542UN product_name: X542UN 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1d10] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:1b10] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X542UQ product_name: X542UQ 01:00.0 3D controller [0302]: NVIDIA Corporation GM108M [GeForce 940MX] [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. GM108M [GeForce 940MX] [1043:142e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X555UB product_name: X555UB 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1347] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:246a] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X555UQ product_name: X555UQ 01:00.0 3D controller [0302]: NVIDIA Corporation GM108M [GeForce 940MX] [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. GM108M [GeForce 940MX] [1043:246a] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X556URK product_name: X556URK 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134e] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:1490] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X570ZD product_name: VivoBook_ASUS Laptop X570ZD 01:00.0 3D controller [0302]: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. GP107M [GeForce GTX 1050 Mobile] [1043:11d1] 00:01.1 PCI bridge [0604]: Advanced Micro Devices, Inc. [AMD] Device [1022:15d3] (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X580GD product_name: VivoBook_ASUSLaptop X580GD_X580GD 01:00.0 3D controller [0302]: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. GP107M [GeForce GTX 1050 Mobile] [1043:1fc0] 00:01.0 PCI bridge [0604]: Intel Corporation Skylake PCIe Controller (x16) [8086:1901] (rev 07) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X580VD product_name: X580VD 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:1a10] 00:01.0 PCI bridge [0604]: Intel Corporation Device [8086:1901] (rev 05) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X705FD product_name: VivoBook Pro 17 X705FD_X705FD 02:00.0 3D controller [0302]: NVIDIA Corporation GP107M [GeForce GTX 1050 Mobile] [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. GP107M [GeForce GTX 1050 Mobile] [1043:1431] 00:1c.4 PCI bridge [0604]: Intel Corporation Device [8086:9dbc] (rev f0) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X705UD product_name: X705UD 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:1c8d] (rev a1) Subsystem: ASUSTeK Computer Inc. Device [1043:1b30] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X705UQ product_name: X705UQ 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:148e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: X751NV product_name: X751NV 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134f] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:13be] 00:13.0 PCI bridge [0604]: Intel Corporation Device [8086:5ad8] (rev fb) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: Z240IE product_name: Z240IE 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1c8d] (rev a1) (prog-if 00 [VGA controller]) Subsystem: ASUSTeK Computer Inc. Device [1043:1750] 00:01.0 PCI bridge [0604]: Intel Corporation Device [8086:1901] (rev 05) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: ZN220IC-K product_name: ZN220IC-K 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134e] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:117e] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: ZN241IC product_name: ZN241IC 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:1900] 00:1c.0 PCI bridge [0604]: Intel Corporation Device [8086:9d10] (rev f1) (prog-if 00 [Normal decode]) sys_vendor: ASUSTeK COMPUTER INC. board_name: ZN270IE product_name: ZN270IE 01:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:134d] (rev a2) Subsystem: ASUSTeK Computer Inc. Device [1043:1720] 00:01.0 PCI bridge [0604]: Intel Corporation Device [8086:1901] (rev 05) (prog-if 00 [Normal decode]) drivers/pci/pci-driver.c | 14 ++++++++++++++ drivers/pci/setup-bus.c | 2 +- include/linux/pci.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index bef17c3fca67..034f816570ad 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -524,6 +524,20 @@ static void pci_pm_default_resume_early(struct pci_dev *pci_dev) pci_power_up(pci_dev); pci_restore_state(pci_dev); pci_pme_restore(pci_dev); + + /* + * Redo the PCI bridge prefetch register setup. + * + * This works around an Intel PCI bridge issue seen on Asus and HP + * laptops, where the GPU is not usable after S3 resume. + * Even though PCI bridge register contents appear to be intact + * at resume time, rewriting the value of PREF_BASE_UPPER32 is + * required to make the GPU work. + * Windows 10 also reprograms these registers during S3 resume. + */ + if (pci_dev->class == PCI_CLASS_BRIDGE_PCI << 8) + pci_setup_bridge_mmio_pref(pci_dev); + pci_fixup_device(pci_fixup_resume_early, pci_dev); } diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 79b1824e83b4..cb88288d2a69 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -630,7 +630,7 @@ static void pci_setup_bridge_mmio(struct pci_dev *bridge) pci_write_config_dword(bridge, PCI_MEMORY_BASE, l); } -static void pci_setup_bridge_mmio_pref(struct pci_dev *bridge) +void pci_setup_bridge_mmio_pref(struct pci_dev *bridge) { struct resource *res; struct pci_bus_region region; diff --git a/include/linux/pci.h b/include/linux/pci.h index e72ca8dd6241..b15828fc26a4 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -934,6 +934,7 @@ struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); unsigned int pci_scan_child_bus(struct pci_bus *bus); void pci_bus_add_device(struct pci_dev *dev); +void pci_setup_bridge_mmio_pref(struct pci_dev *bridge); void pci_read_bridge_bases(struct pci_bus *child); struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); -- 2.17.1