From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 4.19 059/167] drm/vblank: Allow dynamic per-crtc max_vblank_count Date: Tue, 3 Sep 2019 12:23:31 -0400 Message-ID: <20190903162519.7136-59-sashal@kernel.org> References: <20190903162519.7136-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by gabe.freedesktop.org (Postfix) with ESMTPS id 911248970E for ; Tue, 3 Sep 2019 16:27:04 +0000 (UTC) In-Reply-To: <20190903162519.7136-1-sashal@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin , Daniel Vetter , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClsg VXBzdHJlYW0gY29tbWl0IGVkMjAxNTFhNzY5OWJiMmM3N2ViYTM2MTAxOTk3ODlhMTI2OTQwYzQg XQoKT24gaTk2NWdtIHdlIG5lZWQgdG8gYWRqdXN0IG1heF92YmxhbmtfY291bnQgZHluYW1pY2Fs bHkKZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIFRWIGVuY29kZXIgaXMgdXNlZCBvciBub3QuIFRv CnRoYXQgZW5kIGFkZCBhIHBlci1jcnRjIG1heF92YmxhbmtfY291bnQgdGhhdCB0YWtlcwpwcmVj ZWRlbmNlIG92ZXIgaXRzIGRldmljZSB3aWRlIGNvdW50ZXJwYXJ0LiBUaGUgZHJpdmVyCmNhbiBu b3cgY2FsbCBkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3VudCgpIHRvIGNvbmZpZ3VyZQp0aGUg cGVyLWNydGMgdmFsdWUgYmVmb3JlIGNhbGxpbmcgZHJtX3ZibGFua19vbigpLgoKQWxzbyBsb29r cyBsaWtlIHRoZXJlIHdhcyBzb21lIGRpc2N1c3Npb24gYWJvdXQgZXh5bm9zIG5lZWRpbmcKc2lt aWxhciB0cmVhdG1lbnQuCgp2MjogRHJvcCB0aGUgZXh0cmEgbWF4X3ZibGFua19jb3VudCE9MCBj aGVjayBmb3IgdGhlCiAgICBXQVJOKGxhc3QhPWN1cnJlbnQpLCB3aWxsIHRha2UgY2FyZSBvZiBp dCBpbiBpOTE1IGNvZGUgKERhbmllbCkKICAgIFdBUk5fT04oIWlubW9kZXNldCkgKERhbmllbCkK ICAgIFdBUk5fT04oZGV2LT5tYXhfdmJsYW5rX2NvdW50KQogICAgUGltcCB1cCB0aGUgZG9jcyAo RGFuaWVsKQoKQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IElua2kgRGFlIDxpbmtpLmRh ZUBzYW1zdW5nLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KU2lnbmVk LW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K TGluazogaHR0cHM6Ly9wYXRjaHdvcmsuZnJlZWRlc2t0b3Aub3JnL3BhdGNoL21zZ2lkLzIwMTgx MTI3MTgyMDA0LjI4ODg1LTEtdmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20KUmV2aWV3ZWQt Ynk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+ClNpZ25lZC1vZmYtYnk6 IFNhc2hhIExldmluIDxzYXNoYWxAa2VybmVsLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJt X3ZibGFuay5jIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBpbmNs dWRlL2RybS9kcm1fZGV2aWNlLmggICAgIHwgIDggKysrKysrLQogaW5jbHVkZS9kcm0vZHJtX3Zi bGFuay5oICAgICB8IDIyICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3MSBp bnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fdmJsYW5rLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZibGFuay5jCmluZGV4IDI4Y2Rj Zjc2YjZmOTkuLmQxODU5YmNjN2NjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f dmJsYW5rLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV92YmxhbmsuYwpAQCAtMTA1LDEzICsx MDUsMjAgQEAgc3RhdGljIHZvaWQgc3RvcmVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHVuc2lnbmVkIGludCBwaXBlLAogCXdyaXRlX3NlcXVubG9jaygmdmJsYW5rLT5zZXFsb2NrKTsK IH0KIAorc3RhdGljIHUzMiBkcm1fbWF4X3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgZHJtX3ZibGFua19jcnRjICp2Ymxh bmsgPSAmZGV2LT52YmxhbmtbcGlwZV07CisKKwlyZXR1cm4gdmJsYW5rLT5tYXhfdmJsYW5rX2Nv dW50ID86IGRldi0+bWF4X3ZibGFua19jb3VudDsKK30KKwogLyoKICAqICJObyBodyBjb3VudGVy IiBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBvZiAuZ2V0X3ZibGFua19jb3VudGVyKCkgaG9vaywK ICAqIGlmIHRoZXJlIGlzIG5vIHVzZWFibGUgaGFyZHdhcmUgZnJhbWUgY291bnRlciBhdmFpbGFi bGUuCiAgKi8KIHN0YXRpYyB1MzIgZHJtX3ZibGFua19ub19od19jb3VudGVyKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwaXBlKQogewotCVdBUk5fT05fT05DRShkZXYtPm1h eF92YmxhbmtfY291bnQgIT0gMCk7CisJV0FSTl9PTl9PTkNFKGRybV9tYXhfdmJsYW5rX2NvdW50 KGRldiwgcGlwZSkgIT0gMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5OCw2ICsyMDUsNyBAQCBz dGF0aWMgdm9pZCBkcm1fdXBkYXRlX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB1bnNpZ25lZCBpbnQgcGlwZSwKIAlrdGltZV90IHRfdmJsYW5rOwogCWludCBjb3VudCA9IERS TV9USU1FU1RBTVBfTUFYUkVUUklFUzsKIAlpbnQgZnJhbWVkdXJfbnMgPSB2YmxhbmstPmZyYW1l ZHVyX25zOworCXUzMiBtYXhfdmJsYW5rX2NvdW50ID0gZHJtX21heF92YmxhbmtfY291bnQoZGV2 LCBwaXBlKTsKIAogCS8qCiAJICogSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIHByaW9yIHRvIHRo aXMgY2FsbCwgc28gZGVhbCB3aXRoIGNvdW50ZXIKQEAgLTIxNiw5ICsyMjQsOSBAQCBzdGF0aWMg dm9pZCBkcm1fdXBkYXRlX3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNp Z25lZCBpbnQgcGlwZSwKIAkJcmMgPSBkcm1fZ2V0X2xhc3RfdmJsdGltZXN0YW1wKGRldiwgcGlw ZSwgJnRfdmJsYW5rLCBpbl92YmxhbmtfaXJxKTsKIAl9IHdoaWxlIChjdXJfdmJsYW5rICE9IF9f Z2V0X3ZibGFua19jb3VudGVyKGRldiwgcGlwZSkgJiYgLS1jb3VudCA+IDApOwogCi0JaWYgKGRl di0+bWF4X3ZibGFua19jb3VudCAhPSAwKSB7CisJaWYgKG1heF92YmxhbmtfY291bnQpIHsKIAkJ LyogdHJ1c3QgdGhlIGh3IGNvdW50ZXIgd2hlbiBpdCdzIGFyb3VuZCAqLwotCQlkaWZmID0gKGN1 cl92YmxhbmsgLSB2YmxhbmstPmxhc3QpICYgZGV2LT5tYXhfdmJsYW5rX2NvdW50OworCQlkaWZm ID0gKGN1cl92YmxhbmsgLSB2YmxhbmstPmxhc3QpICYgbWF4X3ZibGFua19jb3VudDsKIAl9IGVs c2UgaWYgKHJjICYmIGZyYW1lZHVyX25zKSB7CiAJCXU2NCBkaWZmX25zID0ga3RpbWVfdG9fbnMo a3RpbWVfc3ViKHRfdmJsYW5rLCB2YmxhbmstPnRpbWUpKTsKIApAQCAtMTIwNCw2ICsxMjEyLDM3 IEBAIHZvaWQgZHJtX2NydGNfdmJsYW5rX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIH0K IEVYUE9SVF9TWU1CT0woZHJtX2NydGNfdmJsYW5rX3Jlc2V0KTsKIAorLyoqCisgKiBkcm1fY3J0 Y19zZXRfbWF4X3ZibGFua19jb3VudCAtIGNvbmZpZ3VyZSB0aGUgaHcgbWF4IHZibGFuayBjb3Vu dGVyIHZhbHVlCisgKiBAY3J0YzogQ1JUQyBpbiBxdWVzdGlvbgorICogQG1heF92YmxhbmtfY291 bnQ6IG1heCBoYXJkd2FyZSB2YmxhbmsgY291bnRlciB2YWx1ZQorICoKKyAqIFVwZGF0ZSB0aGUg bWF4aW11bSBoYXJkd2FyZSB2YmxhbmsgY291bnRlciB2YWx1ZSBmb3IgQGNydGMKKyAqIGF0IHJ1 bnRpbWUuIFVzZWZ1bCBmb3IgaGFyZHdhcmUgd2hlcmUgdGhlIG9wZXJhdGlvbiBvZiB0aGUKKyAq IGhhcmR3YXJlIHZibGFuayBjb3VudGVyIGRlcGVuZHMgb24gdGhlIGN1cnJlbnRseSBhY3RpdmUK KyAqIGRpc3BsYXkgY29uZmlndXJhdGlvbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGhh cmR3YXJlIHZibGFuayBjb3VudGVyIGRvZXMgbm90IHdvcmsKKyAqIHdoZW4gYSBzcGVjaWZpYyBj b25uZWN0b3IgaXMgYWN0aXZlIHRoZSBtYXhpbXVtIGNhbiBiZSBzZXQKKyAqIHRvIHplcm8uIEFu ZCB3aGVuIHRoYXQgc3BlY2lmaWMgY29ubmVjdG9yIGlzbid0IGFjdGl2ZSB0aGUKKyAqIG1heGlt dW0gY2FuIGFnYWluIGJlIHNldCB0byB0aGUgYXBwcm9wcmlhdGUgbm9uLXplcm8gdmFsdWUuCisg KgorICogSWYgdXNlZCwgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRybV92Ymxhbmtfb24oKS4KKyAq Lwordm9pZCBkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCQkJICAgdTMyIG1heF92YmxhbmtfY291bnQpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmRldjsKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOworCXN0cnVjdCBkcm1fdmJsYW5rX2NydGMgKnZibGFuayA9ICZkZXYtPnZibGFua1twaXBl XTsKKworCVdBUk5fT04oZGV2LT5tYXhfdmJsYW5rX2NvdW50KTsKKwlXQVJOX09OKCFSRUFEX09O Q0UodmJsYW5rLT5pbm1vZGVzZXQpKTsKKworCXZibGFuay0+bWF4X3ZibGFua19jb3VudCA9IG1h eF92YmxhbmtfY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9jcnRjX3NldF9tYXhfdmJsYW5r X2NvdW50KTsKKwogLyoqCiAgKiBkcm1fY3J0Y192Ymxhbmtfb24gLSBlbmFibGUgdmJsYW5rIGV2 ZW50cyBvbiBhIENSVEMKICAqIEBjcnRjOiBDUlRDIGluIHF1ZXN0aW9uCmRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fZGV2aWNlLmggYi9pbmNsdWRlL2RybS9kcm1fZGV2aWNlLmgKaW5kZXgg ZjljNmUwZTNhZWM3ZC4uZmExMTdlMTE0NThhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJt X2RldmljZS5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaApAQCAtMTc0LDcgKzE3NCwx MyBAQCBzdHJ1Y3QgZHJtX2RldmljZSB7CiAJICogcmFjZXMgYW5kIGltcHJlY2lzaW9uIG92ZXIg bG9uZ2VyIHRpbWUgcGVyaW9kcywgaGVuY2UgZXhwb3NpbmcgYQogCSAqIGhhcmR3YXJlIHZibGFu ayBjb3VudGVyIGlzIGFsd2F5cyByZWNvbW1lbmRlZC4KIAkgKgotCSAqIElmIG5vbi16ZW9yLCAm ZHJtX2NydGNfZnVuY3MuZ2V0X3ZibGFua19jb3VudGVyIG11c3QgYmUgc2V0LgorCSAqIFRoaXMg aXMgdGhlIHN0YXRpY2FsbHkgY29uZmlndXJlZCBkZXZpY2Ugd2lkZSBtYXhpbXVtLiBUaGUgZHJp dmVyCisJICogY2FuIGluc3RlYWQgY2hvb3NlIHRvIHVzZSBhIHJ1bnRpbWUgY29uZmlndXJhYmxl IHBlci1jcnRjIHZhbHVlCisJICogJmRybV92YmxhbmtfY3J0Yy5tYXhfdmJsYW5rX2NvdW50LCBp biB3aGljaCBjYXNlIEBtYXhfdmJsYW5rX2NvdW50CisJICogbXVzdCBiZSBsZWZ0IGF0IHplcm8u IFNlZSBkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3VudCgpIG9uIGhvdworCSAqIHRvIHVzZSB0 aGUgcGVyLWNydGMgdmFsdWUuCisJICoKKwkgKiBJZiBub24temVybywgJmRybV9jcnRjX2Z1bmNz LmdldF92YmxhbmtfY291bnRlciBtdXN0IGJlIHNldC4KIAkgKi8KIAl1MzIgbWF4X3ZibGFua19j b3VudDsgICAgICAgICAgIC8qKjwgc2l6ZSBvZiB2YmxhbmsgY291bnRlciByZWdpc3RlciAqLwog CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fdmJsYW5rLmggYi9pbmNsdWRlL2RybS9kcm1f dmJsYW5rLmgKaW5kZXggZDI1YTk2MDNhYjU3MC4uZTljNjc2MzgxZmQ0ZiAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0vZHJtX3ZibGFuay5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV92YmxhbmsuaApA QCAtMTI4LDYgKzEyOCwyNiBAQCBzdHJ1Y3QgZHJtX3ZibGFua19jcnRjIHsKIAkgKiBAbGFzdDog UHJvdGVjdGVkIGJ5ICZkcm1fZGV2aWNlLnZibF9sb2NrLCB1c2VkIGZvciB3cmFwYXJvdW5kIGhh bmRsaW5nLgogCSAqLwogCXUzMiBsYXN0OworCS8qKgorCSAqIEBtYXhfdmJsYW5rX2NvdW50Ogor CSAqCisJICogTWF4aW11bSB2YWx1ZSBvZiB0aGUgdmJsYW5rIHJlZ2lzdGVycyBmb3IgdGhpcyBj cnRjLiBUaGlzIHZhbHVlICsxCisJICogd2lsbCByZXN1bHQgaW4gYSB3cmFwLWFyb3VuZCBvZiB0 aGUgdmJsYW5rIHJlZ2lzdGVyLiBJdCBpcyB1c2VkCisJICogYnkgdGhlIHZibGFuayBjb3JlIHRv IGhhbmRsZSB3cmFwLWFyb3VuZHMuCisJICoKKwkgKiBJZiBzZXQgdG8gemVybyB0aGUgdmJsYW5r IGNvcmUgd2lsbCB0cnkgdG8gZ3Vlc3MgdGhlIGVsYXBzZWQgdmJsYW5rcworCSAqIGJldHdlZW4g dGltZXMgd2hlbiB0aGUgdmJsYW5rIGludGVycnVwdCBpcyBkaXNhYmxlZCB0aHJvdWdoCisJICog aGlnaC1wcmVjaXNpb24gdGltZXN0YW1wcy4gVGhhdCBhcHByb2FjaCBpcyBzdWZmZXJpbmcgZnJv bSBzbWFsbAorCSAqIHJhY2VzIGFuZCBpbXByZWNpc2lvbiBvdmVyIGxvbmdlciB0aW1lIHBlcmlv ZHMsIGhlbmNlIGV4cG9zaW5nIGEKKwkgKiBoYXJkd2FyZSB2YmxhbmsgY291bnRlciBpcyBhbHdh eXMgcmVjb21tZW5kZWQuCisJICoKKwkgKiBUaGlzIGlzIHRoZSBydW50aW1lIGNvbmZpZ3VyYWJs ZSBwZXItY3J0YyBtYXhpbXVtIHNldCB0aHJvdWdoCisJICogZHJtX2NydGNfc2V0X21heF92Ymxh bmtfY291bnQoKS4gSWYgdGhpcyBpcyB1c2VkIHRoZSBkcml2ZXIKKwkgKiBtdXN0IGxlYXZlIHRo ZSBkZXZpY2Ugd2lkZSAmZHJtX2RldmljZS5tYXhfdmJsYW5rX2NvdW50IGF0IHplcm8uCisJICoK KwkgKiBJZiBub24temVybywgJmRybV9jcnRjX2Z1bmNzLmdldF92YmxhbmtfY291bnRlciBtdXN0 IGJlIHNldC4KKwkgKi8KKwl1MzIgbWF4X3ZibGFua19jb3VudDsKIAkvKioKIAkgKiBAaW5tb2Rl c2V0OiBUcmFja3Mgd2hldGhlciB0aGUgdmJsYW5rIGlzIGRpc2FibGVkIGR1ZSB0byBhIG1vZGVz ZXQuCiAJICogRm9yIGxlZ2FjeSBkcml2ZXIgYml0IDIgYWRkaXRpb25hbGx5IHRyYWNrcyB3aGV0 aGVyIGFuIGFkZGl0aW9uYWwKQEAgLTIwNiw0ICsyMjYsNiBAQCBib29sIGRybV9jYWxjX3ZibHRp bWVzdGFtcF9mcm9tX3NjYW5vdXRwb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIHZvaWQgZHJt X2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJ ICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiB3YWl0X3F1ZXVlX2hl YWRfdCAqZHJtX2NydGNfdmJsYW5rX3dhaXRxdWV1ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwor dm9pZCBkcm1fY3J0Y19zZXRfbWF4X3ZibGFua19jb3VudChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CisJCQkJICAgdTMyIG1heF92YmxhbmtfY291bnQpOwogI2VuZGlmCi0tIAoyLjIwLjEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA== 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.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 955E4C3A5A2 for ; Tue, 3 Sep 2019 16:27:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 625002343A for ; Tue, 3 Sep 2019 16:27:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1567528033; bh=GVW1cx5U0QqEYVtChwRvCbbxVm8+JxfEkJ1U4OKYKYw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=P4JekMwnZ/AQg0u8h9DADcHcMHnOmM+lNzokT+gEZSXc7CYMZIyJr6jITO1ipvbc2 WNmysOtnA9h4DmNy8mpoD3garIWSr+71dQowSS3YiFTnJ/wS7XUxBNTllfQ8PuH0uj 4npMQcKNzBuZzKAwCmCYIGDzCUW8BzeAhaFRSHz8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730804AbfICQ1L (ORCPT ); Tue, 3 Sep 2019 12:27:11 -0400 Received: from mail.kernel.org ([198.145.29.99]:48236 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730771AbfICQ1F (ORCPT ); Tue, 3 Sep 2019 12:27:05 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9A4B223878; Tue, 3 Sep 2019 16:27:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1567528024; bh=GVW1cx5U0QqEYVtChwRvCbbxVm8+JxfEkJ1U4OKYKYw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Aj80FSOz0J4LFcF3ti0FpWwev251x8+0bVSfuDI5g9CfiP6vj44JmaFByGvRSCAWa f1sVuvziL/7m5INALStVtCevoOqK/k3aU8xhEEnXdmT1h7FQZCh7aS89WaYs0Egry7 8lAHmapVQd5dDMD7BdRmTGeqQcT2TjijFDfiRTZs= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Inki Dae , Daniel Vetter , Daniel Vetter , Sasha Levin , dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 4.19 059/167] drm/vblank: Allow dynamic per-crtc max_vblank_count Date: Tue, 3 Sep 2019 12:23:31 -0400 Message-Id: <20190903162519.7136-59-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190903162519.7136-1-sashal@kernel.org> References: <20190903162519.7136-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ville Syrjälä [ Upstream commit ed20151a7699bb2c77eba3610199789a126940c4 ] 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. v2: Drop the extra max_vblank_count!=0 check for the WARN(last!=current), will take care of it in i915 code (Daniel) WARN_ON(!inmodeset) (Daniel) WARN_ON(dev->max_vblank_count) Pimp up the docs (Daniel) Cc: stable@vger.kernel.org Cc: Inki Dae Cc: Daniel Vetter Signed-off-by: Ville Syrjälä Link: https://patchwork.freedesktop.org/patch/msgid/20181127182004.28885-1-ville.syrjala@linux.intel.com Reviewed-by: Daniel Vetter Signed-off-by: Sasha Levin --- drivers/gpu/drm/drm_vblank.c | 45 +++++++++++++++++++++++++++++++++--- include/drm/drm_device.h | 8 ++++++- include/drm/drm_vblank.h | 22 ++++++++++++++++++ 3 files changed, 71 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c index 28cdcf76b6f99..d1859bcc7ccbc 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)); @@ -1204,6 +1212,37 @@ 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 + * at runtime. Useful for hardware where the operation of the + * hardware vblank counter depends on the currently active + * display configuration. + * + * For example, if the hardware vblank counter does not work + * when a specific connector is active the maximum can be set + * to zero. And when that specific connector isn't active the + * maximum can again be set to the appropriate non-zero value. + * + * If used, must be called before drm_vblank_on(). + */ +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]; + + WARN_ON(dev->max_vblank_count); + WARN_ON(!READ_ONCE(vblank->inmodeset)); + + 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_device.h b/include/drm/drm_device.h index f9c6e0e3aec7d..fa117e11458ae 100644 --- a/include/drm/drm_device.h +++ b/include/drm/drm_device.h @@ -174,7 +174,13 @@ struct drm_device { * races and imprecision over longer time periods, hence exposing a * hardware vblank counter is always recommended. * - * If non-zeor, &drm_crtc_funcs.get_vblank_counter must be set. + * This is the statically configured device wide maximum. The driver + * can instead choose to use a runtime configurable per-crtc value + * &drm_vblank_crtc.max_vblank_count, in which case @max_vblank_count + * must be left at zero. See drm_crtc_set_max_vblank_count() on how + * to use the per-crtc value. + * + * If non-zero, &drm_crtc_funcs.get_vblank_counter must be set. */ u32 max_vblank_count; /**< size of vblank counter register */ diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h index d25a9603ab570..e9c676381fd4f 100644 --- a/include/drm/drm_vblank.h +++ b/include/drm/drm_vblank.h @@ -128,6 +128,26 @@ struct drm_vblank_crtc { * @last: Protected by &drm_device.vbl_lock, used for wraparound handling. */ u32 last; + /** + * @max_vblank_count: + * + * Maximum value of the vblank registers for this crtc. This value +1 + * will result in a wrap-around of the vblank register. It is used + * by the vblank core to handle wrap-arounds. + * + * If set to zero the vblank core will try to guess the elapsed vblanks + * between times when the vblank interrupt is disabled through + * high-precision timestamps. That approach is suffering from small + * races and imprecision over longer time periods, hence exposing a + * hardware vblank counter is always recommended. + * + * This is the runtime configurable per-crtc maximum set through + * drm_crtc_set_max_vblank_count(). If this is used the driver + * must leave the device wide &drm_device.max_vblank_count at zero. + * + * If non-zero, &drm_crtc_funcs.get_vblank_counter must be set. + */ + u32 max_vblank_count; /** * @inmodeset: Tracks whether the vblank is disabled due to a modeset. * For legacy driver bit 2 additionally tracks whether an additional @@ -206,4 +226,6 @@ bool drm_calc_vbltimestamp_from_scanoutpos(struct drm_device *dev, void drm_calc_timestamping_constants(struct drm_crtc *crtc, const struct drm_display_mode *mode); wait_queue_head_t *drm_crtc_vblank_waitqueue(struct drm_crtc *crtc); +void drm_crtc_set_max_vblank_count(struct drm_crtc *crtc, + u32 max_vblank_count); #endif -- 2.20.1