From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 01/15] drm/vblank: Allow dynamic per-crtc max_vblank_count Date: Wed, 21 Nov 2018 13:37:51 +0200 Message-ID: <20181121113751.GA9144@intel.com> References: <20181112170000.27531-1-ville.syrjala@linux.intel.com> <20181112170000.27531-2-ville.syrjala@linux.intel.com> <20181121092727.GH4266@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181121092727.GH4266@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org, stable@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBOb3YgMjEsIDIwMTggYXQgMTA6Mjc6MjdBTSArMDEwMCwgRGFuaWVsIFZldHRlciB3 cm90ZToKPiBPbiBNb24sIE5vdiAxMiwgMjAxOCBhdCAwNjo1OTo0NVBNICswMjAwLCBWaWxsZSBT eXJqYWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IAo+ID4gT24gaTk2NWdtIHdlIG5lZWQgdG8gYWRqdXN0IG1heF92 YmxhbmtfY291bnQgZHluYW1pY2FsbHkKPiA+IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBUViBl bmNvZGVyIGlzIHVzZWQgb3Igbm90LiBUbwo+ID4gdGhhdCBlbmQgYWRkIGEgcGVyLWNydGMgbWF4 X3ZibGFua19jb3VudCB0aGF0IHRha2VzCj4gPiBwcmVjZWRlbmNlIG92ZXIgaXRzIGRldmljZSB3 aWRlIGNvdW50ZXJwYXJ0LiBUaGUgZHJpdmVyCj4gPiBjYW4gbm93IGNhbGwgZHJtX2NydGNfc2V0 X21heF92YmxhbmtfY291bnQoKSB0byBjb25maWd1cmUKPiA+IHRoZSBwZXItY3J0YyB2YWx1ZSBi ZWZvcmUgY2FsbGluZyBkcm1fdmJsYW5rX29uKCkuCj4gPiAKPiA+IEFsc28gbG9va3MgbGlrZSB0 aGVyZSB3YXMgc29tZSBkaXNjdXNzaW9uIGFib3V0IGV4eW5vcyBuZWVkaW5nCj4gPiBzaW1pbGFy IHRyZWF0bWVudC4KPiA+IAo+ID4gQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKPiA+IENjOiBJ bmtpIERhZSA8aW5raS5kYWVAc2Ftc3VuZy5jb20+Cj4gPiBDYzogRGFuaWVsIFZldHRlciA8ZGFu aWVsQGZmd2xsLmNoPgo+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9kcm1f dmJsYW5rLmMgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiA+ICBp bmNsdWRlL2RybS9kcm1fdmJsYW5rLmggICAgIHwgIDggKysrKysrKysKPiA+ICAyIGZpbGVzIGNo YW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92 YmxhbmsuYwo+ID4gaW5kZXggOThlMDkxMTc1OTIxLi5jM2FiYmRjYThhYmEgMTAwNjQ0Cj4gPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX3ZibGFuay5jCj4gPiBAQCAtMTA1LDEzICsxMDUsMjAgQEAgc3RhdGljIHZvaWQgc3Rv cmVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLAo+ID4g IAl3cml0ZV9zZXF1bmxvY2soJnZibGFuay0+c2VxbG9jayk7Cj4gPiAgfQo+ID4gIAo+ID4gK3N0 YXRpYyB1MzIgZHJtX21heF92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHBpcGUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2Ymxh bmsgPSAmZGV2LT52YmxhbmtbcGlwZV07Cj4gPiArCj4gPiArCXJldHVybiB2YmxhbmstPm1heF92 YmxhbmtfY291bnQgPzogZGV2LT5tYXhfdmJsYW5rX2NvdW50Owo+ID4gK30KPiA+ICsKPiA+ICAv Kgo+ID4gICAqICJObyBodyBjb3VudGVyIiBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiAuZ2V0 X3ZibGFua19jb3VudGVyKCkgaG9vaywKPiA+ICAgKiBpZiB0aGVyZSBpcyBubyB1c2VhYmxlIGhh cmR3YXJlIGZyYW1lIGNvdW50ZXIgYXZhaWxhYmxlLgo+ID4gICAqLwo+ID4gIHN0YXRpYyB1MzIg ZHJtX3ZibGFua19ub19od19jb3VudGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVk IGludCBwaXBlKQo+ID4gIHsKPiA+IC0JV0FSTl9PTl9PTkNFKGRldi0+bWF4X3ZibGFua19jb3Vu dCAhPSAwKTsKPiA+ICsJV0FSTl9PTl9PTkNFKGRybV9tYXhfdmJsYW5rX2NvdW50KGRldiwgcGlw ZSkgIT0gMCk7Cj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+IEBAIC0xOTgsNiArMjA1 LDcgQEAgc3RhdGljIHZvaWQgZHJtX3VwZGF0ZV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCj4gPiAgCWt0aW1lX3QgdF92Ymxhbms7Cj4gPiAg CWludCBjb3VudCA9IERSTV9USU1FU1RBTVBfTUFYUkVUUklFUzsKPiA+ICAJaW50IGZyYW1lZHVy X25zID0gdmJsYW5rLT5mcmFtZWR1cl9uczsKPiA+ICsJdTMyIG1heF92YmxhbmtfY291bnQgPSBk cm1fbWF4X3ZibGFua19jb3VudChkZXYsIHBpcGUpOwo+ID4gIAo+ID4gIAkvKgo+ID4gIAkgKiBJ bnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgcHJpb3IgdG8gdGhpcyBjYWxsLCBzbyBkZWFsIHdpdGgg Y291bnRlcgo+ID4gQEAgLTIxNiw5ICsyMjQsOSBAQCBzdGF0aWMgdm9pZCBkcm1fdXBkYXRlX3Zi bGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSwKPiA+ ICAJCXJjID0gZHJtX2dldF9sYXN0X3ZibHRpbWVzdGFtcChkZXYsIHBpcGUsICZ0X3ZibGFuaywg aW5fdmJsYW5rX2lycSk7Cj4gPiAgCX0gd2hpbGUgKGN1cl92YmxhbmsgIT0gX19nZXRfdmJsYW5r X2NvdW50ZXIoZGV2LCBwaXBlKSAmJiAtLWNvdW50ID4gMCk7Cj4gPiAgCj4gPiAtCWlmIChkZXYt Pm1heF92YmxhbmtfY291bnQgIT0gMCkgewo+ID4gKwlpZiAobWF4X3ZibGFua19jb3VudCkgewo+ ID4gIAkJLyogdHJ1c3QgdGhlIGh3IGNvdW50ZXIgd2hlbiBpdCdzIGFyb3VuZCAqLwo+ID4gLQkJ ZGlmZiA9IChjdXJfdmJsYW5rIC0gdmJsYW5rLT5sYXN0KSAmIGRldi0+bWF4X3ZibGFua19jb3Vu dDsKPiA+ICsJCWRpZmYgPSAoY3VyX3ZibGFuayAtIHZibGFuay0+bGFzdCkgJiBtYXhfdmJsYW5r X2NvdW50Owo+ID4gIAl9IGVsc2UgaWYgKHJjICYmIGZyYW1lZHVyX25zKSB7Cj4gPiAgCQl1NjQg ZGlmZl9ucyA9IGt0aW1lX3RvX25zKGt0aW1lX3N1Yih0X3ZibGFuaywgdmJsYW5rLT50aW1lKSk7 Cj4gPiAgCj4gPiBAQCAtMjU4LDcgKzI2Niw4IEBAIHN0YXRpYyB2b2lkIGRybV91cGRhdGVfdmJs YW5rX2NvdW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlLAo+ID4g IAkJICAgICAgcGlwZSwgdmJsYW5rLT5jb3VudCwgZGlmZiwgY3VyX3ZibGFuaywgdmJsYW5rLT5s YXN0KTsKPiA+ICAKPiA+ICAJaWYgKGRpZmYgPT0gMCkgewo+ID4gLQkJV0FSTl9PTl9PTkNFKGN1 cl92YmxhbmsgIT0gdmJsYW5rLT5sYXN0KTsKPiA+ICsJCVdBUk5fT05fT05DRShtYXhfdmJsYW5r X2NvdW50ICYmCj4gPiArCQkJICAgICBjdXJfdmJsYW5rICE9IHZibGFuay0+bGFzdCk7Cj4gCj4g VW5yZWxhdGVkIGJ1Z2ZpeCBmb3IgdGhpcyB3YXJuaW5nPyBTaG91bGQgYmUgYSBzZXBhcmF0ZSBw YXRjaCBJIHRoaW5rLCBvcgo+IEknbSBtaXNzaW5nIHNvbWV0aGluZy4KCkFoLCB5ZWFoIHRoaXMg d2FzIGR1ZSB0byBhIHF1aXJrIG9mIGk5NjVnbSBoYXJkd2FyZS4gVGhlIGh3IGNvdW50ZXIKZG9l cyB3b3JrIHVudGlsIHRoZSBleGFjdCBwb2ludCB3aGVuIHdlIGVuYWJsZSBUViBlbmNvZGVyLiBU aHVzIHdlCndpbGwgZ2V0IG5vbi16ZXJvIHZhbHVlcyB1cCB0byB0aGF0IHBvaW50LCBhbmQgc2lu Y2UgdGhlIFRWIGVuY29kZXIKaXNuJ3QgeWV0IHRocm90dGxpbmcgdGhlIHBpcGUgaXQgcHJlc3Vt YWJseSBydW5zIGF0IHRoZSBvdmVyc2FtcGxlCmNsb2NrIHNvIG91ciB0aW1lc3RhbXAgYmFzZWQg ZXN0aW1hdGVzIGNhbiBnaXZlIHVzIGEgZGlmZj09MCBldmVuCnRob3VnaCB0aGUgcGlwZSBkaWQg aW5kZWVkIHBhc3MgYSB2YmxhbmsgYWxyZWFkeS4gSSBmb3Jnb3QgdG8Kbm90ZSB0aGlzIGluIHRo ZSBjb21taXQgbWVzc2FnZS4KCkkgdGhpbmsgd2UgY2FuIGhhbmRsZSB0aGlzIHRocmVlIHdheXM6 CjEuIGRvIHdoYXQgSSBkbyBoZXJlIGFuZCBqdXN0IGxldCB0aGUgbWlzbWF0Y2ggc2xpcCB0aHJv dWdoCjIuIGZvcmNlIGk5MTVfZ2V0X3ZibGFua19jb3VudGVyKCkgdG8gcmV0dXJuIDAgYWx3YXlz IHdoZW4gdGhlCiAgIFRWIGVuY29kZXIgaXMgZ29pbmcgdG8gYmUgdXNlZAozLiBkb24ndCBjYWxs IGRybV9jcnRjX3NldF9tYXhfdmJsYW5rX2NvdW50KCkgYmVmb3JlIGRybV92Ymxhbmtfb24oKQog ICBhbmQgaW5zdGVhZCBkZWxheSBpdCB1bnRpbCBqdXN0IGJlZm9yZSB3ZSBlbmFibGUgdGhlIFRW IGVuY29kZXIKCkkgdGhpbmsgb3B0aW9uIDMgaXMgb3Zlcmx5IGNvbXBsaWNhdGVkIHRvIGNvbnNp ZGVyIHNlcmlvdXNseS4gU28Kb3B0aW9uIDEgb3Igb3B0aW9uIDIgaXMgd2hhdCBJIHRoaW5rIHdl IHNob3VsZCBkby4gRm9yIHdoYXRldmVyCnJlYXNvbiBJIHdlbnQgd2l0aCBvcHRpb24gMSBoZXJl LCBidXQgbWF5YmUgb3B0aW9uIDIgaXMgYmV0dGVyCnNpbmNlIGl0IHdvdWxkIGJlIGFsbCBjb250 YWluZWQgd2l0aGluIGk5MTUuLi4KCj4gCj4gPiAgCQlyZXR1cm47Cj4gPiAgCX0KPiA+ICAKPiA+ IEBAIC0xMjA0LDYgKzEyMTMsMjggQEAgdm9pZCBkcm1fY3J0Y192YmxhbmtfcmVzZXQoc3RydWN0 IGRybV9jcnRjICpjcnRjKQo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9jcnRjX3ZibGFu a19yZXNldCk7Cj4gPiAgCj4gPiArLyoqCj4gPiArICogZHJtX2NydGNfc2V0X21heF92Ymxhbmtf Y291bnQgLSBjb25maWd1cmUgdGhlIGh3IG1heCB2YmxhbmsgY291bnRlciB2YWx1ZQo+ID4gKyAq IEBjcnRjOiBDUlRDIGluIHF1ZXN0aW9uCj4gPiArICogQG1heF92YmxhbmtfY291bnQ6IG1heCBo YXJkd2FyZSB2YmxhbmsgY291bnRlciB2YWx1ZQo+ID4gKyAqCj4gPiArICogVXBkYXRlIHRoZSBt YXhpbXVtIGhhcmR3YXJlIHZibGFuayBjb3VudGVyIHZhbHVlIGZvciBAY3J0Yy4gVXNlZnVsCj4g PiArICogZm9yIGhhcmR3YXJlIHdoZXJlIHRoZSBvcGVyYXRpb24gb2YgdGhlIGhhcmR3YXJlIHZi bGFuayBjb3VudGVyCj4gPiArICogZGVwZW5kcyBvbiB0aGUgYWN0aXZlIGRpc3BsYXkgY29uZmln dXJhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIElmIHVzZWQsIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBk cm1fdmJsYW5rX29uKCkuCj4gCj4gSSB0aGluayB3ZSBzaG91bGQgY2hlY2sgdGhpcyBhdCBydW50 aW1lIHdpdGggYSBXQVJOX09OLiBQbHVzIG1ha2UgdGhlCj4gY29tbWVudCBoZXJlIGEgYml0IGNs ZWFyZXIgdGhhdCB0aGlzIGlzIGluZGVlZCBmb3IgcnVudGltZSBhZGp1c3Rpbmcgb2YKPiB0aGUg bWF4X3ZibGFua19jb3VudCwgaW4gY2FzZXMgd2hlcmUgdGhhdCBkZXBlbmRzIHVwb24gdGhlIGNv bm5lY3RlZAo+IG91dHB1dHMuCgpTdXJlLiBJJ2xsIHRyeSB0byBwaW1wIHVwIHRoZSBkb2NzIGEg Yml0LgoKPiAKPiA+ICsgKi8KPiA+ICt2b2lkIGRybV9jcnRjX3NldF9tYXhfdmJsYW5rX2NvdW50 KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKPiA+ICsJCQkJICAgdTMyIG1heF92YmxhbmtfY291bnQp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ID4gKwl1 bnNpZ25lZCBpbnQgcGlwZSA9IGRybV9jcnRjX2luZGV4KGNydGMpOwo+ID4gKwlzdHJ1Y3QgZHJt X3ZibGFua19jcnRjICp2YmxhbmsgPSAmZGV2LT52YmxhbmtbcGlwZV07Cj4gPiArCj4gPiArCXZi bGFuay0+bWF4X3ZibGFua19jb3VudCA9IG1heF92YmxhbmtfY291bnQ7Cj4gPiArfQo+ID4gK0VY UE9SVF9TWU1CT0woZHJtX2NydGNfc2V0X21heF92YmxhbmtfY291bnQpOwo+ID4gKwo+ID4gIC8q Kgo+ID4gICAqIGRybV9jcnRjX3ZibGFua19vbiAtIGVuYWJsZSB2YmxhbmsgZXZlbnRzIG9uIGEg Q1JUQwo+ID4gICAqIEBjcnRjOiBDUlRDIGluIHF1ZXN0aW9uCj4gPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9kcm0vZHJtX3ZibGFuay5oIGIvaW5jbHVkZS9kcm0vZHJtX3ZibGFuay5oCj4gPiBpbmRl eCA2YWQ5NjMwZDRmNDguLmVjYjJjZjk5MTNlMiAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJt L2RybV92YmxhbmsuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3ZibGFuay5oCj4gPiBAQCAt MTI4LDYgKzEyOCwxMiBAQCBzdHJ1Y3QgZHJtX3ZibGFua19jcnRjIHsKPiA+ICAJICogQGxhc3Q6 IFByb3RlY3RlZCBieSAmZHJtX2RldmljZS52YmxfbG9jaywgdXNlZCBmb3Igd3JhcGFyb3VuZCBo YW5kbGluZy4KPiA+ICAJICovCj4gPiAgCXUzMiBsYXN0Owo+ID4gKwkvKioKPiA+ICsJICogQG1h eF92YmxhbmtfY291bnQ6IE1heGltdW0gdmFsdWUgb2YgdGhlIGhhcmR3YXJlIHZibGFuayBjb3Vu dGVyLgo+ID4gKwkgKiBJZiBub24temVybyB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciAmZHJt X2RldmljZS5tYXhfdmJsYW5rX2NvdW50Cj4gPiArCSAqIGZvciB0aGlzIGNydGMuIE90aGVyd2lz ZSAmZHJtX2RldmljZS5tYXhfdmJsYW5rX2NvdW50IGlzIHVzZWQuCj4gPiArCSAqLwo+IAo+IEkn ZCBhZGQgIlRoaXMgc2hvdWxkIGJlIHNldCBieSBjYWxsaW5nIGRybV9jcnRjX3NldF9tYXhfdmJs YW5rX2NvdW50KCkuIgo+IAo+IEFuZCBwbGVhc2UgYWxzbyBhZGQgYSBub3RlIHRvIHRoZSBrZXJu ZWxkb2Mgb2YgZHJtX2RyaXZlci5tYXhfdmJsYW5rX2NvdW50Cj4gcG9pbnRpbmcgYXQgJmRybV92 YmxhbmtfY3J0Yy5tYXhfdmJsYW5rX2NvdW50IGZvciBwZXItY3J0YyBsaW1pdHMuCgpBY2suCgo+ IAo+IEFzaWRlIGZyb20gdGhlIG5pdHMgbGd0bS4gSSB0aGluayBJJ2xsIHNraXAgbG9va2luZyBh dCB0aGUgVFYgb3V0IHN0dWZmCj4gdGhvdWdoIC4uLgoKOikKCi0tIApWaWxsZSBTeXJqw6Rsw6QK SW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com ([134.134.136.100]:50492 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727628AbeKUWNA (ORCPT ); Wed, 21 Nov 2018 17:13:00 -0500 Date: Wed, 21 Nov 2018 13:37:51 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, stable@vger.kernel.org, Inki Dae Subject: Re: [PATCH 01/15] drm/vblank: Allow dynamic per-crtc max_vblank_count Message-ID: <20181121113751.GA9144@intel.com> References: <20181112170000.27531-1-ville.syrjala@linux.intel.com> <20181112170000.27531-2-ville.syrjala@linux.intel.com> <20181121092727.GH4266@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20181121092727.GH4266@phenom.ffwll.local> Sender: stable-owner@vger.kernel.org List-ID: On Wed, Nov 21, 2018 at 10:27:27AM +0100, Daniel Vetter wrote: > On Mon, Nov 12, 2018 at 06:59:45PM +0200, Ville Syrjala wrote: > > From: Ville Syrj�l� > > > > On i965gm we need to adjust max_vblank_count dynamically > > depending on whether the TV encoder is used or not. To > > that end add a per-crtc max_vblank_count that takes > > precedence over its device wide counterpart. The driver > > can now call drm_crtc_set_max_vblank_count() to configure > > the per-crtc value before calling drm_vblank_on(). > > > > Also looks like there was some discussion about exynos needing > > similar treatment. > > > > Cc: stable@vger.kernel.org > > Cc: Inki Dae > > Cc: Daniel Vetter > > Signed-off-by: Ville Syrj�l� > > --- > > drivers/gpu/drm/drm_vblank.c | 39 ++++++++++++++++++++++++++++++++---- > > include/drm/drm_vblank.h | 8 ++++++++ > > 2 files changed, 43 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c > > index 98e091175921..c3abbdca8aba 100644 > > --- a/drivers/gpu/drm/drm_vblank.c > > +++ b/drivers/gpu/drm/drm_vblank.c > > @@ -105,13 +105,20 @@ static void store_vblank(struct drm_device *dev, unsigned int pipe, > > write_sequnlock(&vblank->seqlock); > > } > > > > +static u32 drm_max_vblank_count(struct drm_device *dev, unsigned int pipe) > > +{ > > + struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; > > + > > + return vblank->max_vblank_count ?: dev->max_vblank_count; > > +} > > + > > /* > > * "No hw counter" fallback implementation of .get_vblank_counter() hook, > > * if there is no useable hardware frame counter available. > > */ > > static u32 drm_vblank_no_hw_counter(struct drm_device *dev, unsigned int pipe) > > { > > - WARN_ON_ONCE(dev->max_vblank_count != 0); > > + WARN_ON_ONCE(drm_max_vblank_count(dev, pipe) != 0); > > return 0; > > } > > > > @@ -198,6 +205,7 @@ static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, > > ktime_t t_vblank; > > int count = DRM_TIMESTAMP_MAXRETRIES; > > int framedur_ns = vblank->framedur_ns; > > + u32 max_vblank_count = drm_max_vblank_count(dev, pipe); > > > > /* > > * Interrupts were disabled prior to this call, so deal with counter > > @@ -216,9 +224,9 @@ static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, > > rc = drm_get_last_vbltimestamp(dev, pipe, &t_vblank, in_vblank_irq); > > } while (cur_vblank != __get_vblank_counter(dev, pipe) && --count > 0); > > > > - if (dev->max_vblank_count != 0) { > > + if (max_vblank_count) { > > /* trust the hw counter when it's around */ > > - diff = (cur_vblank - vblank->last) & dev->max_vblank_count; > > + diff = (cur_vblank - vblank->last) & max_vblank_count; > > } else if (rc && framedur_ns) { > > u64 diff_ns = ktime_to_ns(ktime_sub(t_vblank, vblank->time)); > > > > @@ -258,7 +266,8 @@ static void drm_update_vblank_count(struct drm_device *dev, unsigned int pipe, > > pipe, vblank->count, diff, cur_vblank, vblank->last); > > > > if (diff == 0) { > > - WARN_ON_ONCE(cur_vblank != vblank->last); > > + WARN_ON_ONCE(max_vblank_count && > > + cur_vblank != vblank->last); > > Unrelated bugfix for this warning? Should be a separate patch I think, or > I'm missing something. Ah, yeah this was due to a quirk of i965gm hardware. The hw counter does work until the exact point when we enable TV encoder. Thus we will get non-zero values up to that point, and since the TV encoder isn't yet throttling the pipe it presumably runs at the oversample clock so our timestamp based estimates can give us a diff==0 even though the pipe did indeed pass a vblank already. I forgot to note this in the commit message. I think we can handle this three ways: 1. do what I do here and just let the mismatch slip through 2. force i915_get_vblank_counter() to return 0 always when the TV encoder is going to be used 3. don't call drm_crtc_set_max_vblank_count() before drm_vblank_on() and instead delay it until just before we enable the TV encoder I think option 3 is overly complicated to consider seriously. So option 1 or option 2 is what I think we should do. For whatever reason I went with option 1 here, but maybe option 2 is better since it would be all contained within i915... > > > return; > > } > > > > @@ -1204,6 +1213,28 @@ void drm_crtc_vblank_reset(struct drm_crtc *crtc) > > } > > EXPORT_SYMBOL(drm_crtc_vblank_reset); > > > > +/** > > + * drm_crtc_set_max_vblank_count - configure the hw max vblank counter value > > + * @crtc: CRTC in question > > + * @max_vblank_count: max hardware vblank counter value > > + * > > + * Update the maximum hardware vblank counter value for @crtc. Useful > > + * for hardware where the operation of the hardware vblank counter > > + * depends on the active display configuration. > > + * > > + * If used, must be called before drm_vblank_on(). > > I think we should check this at runtime with a WARN_ON. Plus make the > comment here a bit clearer that this is indeed for runtime adjusting of > the max_vblank_count, in cases where that depends upon the connected > outputs. Sure. I'll try to pimp up the docs a bit. > > > + */ > > +void drm_crtc_set_max_vblank_count(struct drm_crtc *crtc, > > + u32 max_vblank_count) > > +{ > > + struct drm_device *dev = crtc->dev; > > + unsigned int pipe = drm_crtc_index(crtc); > > + struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; > > + > > + vblank->max_vblank_count = max_vblank_count; > > +} > > +EXPORT_SYMBOL(drm_crtc_set_max_vblank_count); > > + > > /** > > * drm_crtc_vblank_on - enable vblank events on a CRTC > > * @crtc: CRTC in question > > diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h > > index 6ad9630d4f48..ecb2cf9913e2 100644 > > --- a/include/drm/drm_vblank.h > > +++ b/include/drm/drm_vblank.h > > @@ -128,6 +128,12 @@ struct drm_vblank_crtc { > > * @last: Protected by &drm_device.vbl_lock, used for wraparound handling. > > */ > > u32 last; > > + /** > > + * @max_vblank_count: Maximum value of the hardware vblank counter. > > + * If non-zero this takes precedence over &drm_device.max_vblank_count > > + * for this crtc. Otherwise &drm_device.max_vblank_count is used. > > + */ > > I'd add "This should be set by calling drm_crtc_set_max_vblank_count()." > > And please also add a note to the kerneldoc of drm_driver.max_vblank_count > pointing at &drm_vblank_crtc.max_vblank_count for per-crtc limits. Ack. > > Aside from the nits lgtm. I think I'll skip looking at the TV out stuff > though ... :) -- Ville Syrj�l� Intel