From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: [PATCH v2 6/6] drm/msm: Switch to atomic_helper_commit() Date: Wed, 28 Mar 2018 15:06:52 -0400 Message-ID: <20180328190657.218661-7-seanpaul@chromium.org> References: <20180328190657.218661-1-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180328190657.218661-1-seanpaul@chromium.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, abhinavk@codeaurora.org, hoegsberg@chromium.org List-Id: linux-arm-msm@vger.kernel.org Tm93IHRoYXQgYWxsIG9mIHRoZSBtc20tc3BlY2lmaWMgZ29vIGlzIHR1Y2tlZCBzYWZlbHkgYXdh eSB3ZSBjYW4gc3dpdGNoCm92ZXIgdG8gdXNpbmcgdGhlIGF0b21pYyBoZWxwZXIgY29tbWl0IGRp cmVjdGx5LiBcby8KCkNoYW5nZXMgaW4gdjI6Ci0gTm9uZQoKQ2M6IEFiaGluYXYgS3VtYXIgPGFi aGluYXZrQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVs QGNocm9taXVtLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYyB8IDEy MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21z bV9kcnYuYyAgICB8ICAgNyArLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgfCAg IDMgKy0KIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxMjIgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwppbmRleCA1MjI0OTU2NWNjMDMuLmQ1OTNhYzNkZTFk ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKQEAgLTE3LDggKzE3LDYgQEAKIAogI2luY2x1 ZGUgIm1zbV9kcnYuaCIKICNpbmNsdWRlICJtc21fa21zLmgiCi0jaW5jbHVkZSAibXNtX2dlbS5o IgotI2luY2x1ZGUgIm1zbV9mZW5jZS5oIgogCiBzdGF0aWMgdm9pZCBtc21fYXRvbWljX3dhaXRf Zm9yX2NvbW1pdF9kb25lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpvbGRfc3RhdGUpCkBAIC0zNyw3ICszNSw3IEBAIHN0YXRpYyB2b2lkIG1zbV9h dG9taWNfd2FpdF9mb3JfY29tbWl0X2RvbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAl9CiB9 CiAKLXN0YXRpYyB2b2lkIG1zbV9hdG9taWNfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKQordm9pZCBtc21fYXRvbWljX2NvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3RhdGUtPmRl djsKIAlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAg LTc0LDExOSArNzIsMyBAQCBzdGF0aWMgdm9pZCBtc21fYXRvbWljX2NvbW1pdF90YWlsKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIAogCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBf cGxhbmVzKGRldiwgc3RhdGUpOwogfQotCi0vKiBUaGUgKHBvdGVudGlhbGx5KSBhc3luY2hyb25v dXMgcGFydCBvZiB0aGUgY29tbWl0LiAgQXQgdGhpcyBwb2ludAotICogbm90aGluZyBjYW4gZmFp bCBzaG9ydCBvZiBhcm1hZ2VkZG9uLgotICovCi1zdGF0aWMgdm9pZCBjb21taXRfdGFpbChzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCi17Ci0JZHJtX2F0b21pY19oZWxwZXJfd2FpdF9m b3JfZmVuY2VzKHN0YXRlLT5kZXYsIHN0YXRlLCBmYWxzZSk7Ci0KLQlkcm1fYXRvbWljX2hlbHBl cl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMoc3RhdGUpOwotCi0JbXNtX2F0b21pY19jb21taXRfdGFp bChzdGF0ZSk7Ci0KLQlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25lKHN0YXRl KTsKLQotCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKLX0KLQotc3RhdGljIHZvaWQgY29t bWl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAotCQkJCQkJICAgICAgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUsCi0JCQkJCQkgICAgICBjb21taXRfd29yayk7Ci0JY29tbWl0X3RhaWwo c3RhdGUpOwotfQotCi0vKioKLSAqIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCAtIGNvbW1pdCB2 YWxpZGF0ZWQgc3RhdGUgb2JqZWN0Ci0gKiBAZGV2OiBEUk0gZGV2aWNlCi0gKiBAc3RhdGU6IHRo ZSBkcml2ZXIgc3RhdGUgb2JqZWN0Ci0gKiBAbm9uYmxvY2s6IG5vbmJsb2NraW5nIGNvbW1pdAot ICoKLSAqIFRoaXMgZnVuY3Rpb24gY29tbWl0cyBhIHdpdGggZHJtX2F0b21pY19oZWxwZXJfY2hl Y2soKSBwcmUtdmFsaWRhdGVkIHN0YXRlCi0gKiBvYmplY3QuIFRoaXMgY2FuIHN0aWxsIGZhaWwg d2hlbiBlLmcuIHRoZSBmcmFtZWJ1ZmZlciByZXNlcnZhdGlvbiBmYWlscy4KLSAqCi0gKiBSRVRV Uk5TCi0gKiBaZXJvIGZvciBzdWNjZXNzIG9yIC1lcnJuby4KLSAqLwotaW50IG1zbV9hdG9taWNf Y29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwgYm9vbCBub25ibG9jaykKLXsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc3RydWN0IGRy bV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwotCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSwgKm5ld19wbGFuZV9zdGF0ZTsK LQlpbnQgaSwgcmV0OwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgcGxhbmUtPmF0b21pY19hc3luY19j aGVjaygpIHNob3VsZCBmYWlsIGlmIHdlIG5lZWQKLQkgKiB0byByZS1hc3NpZ24gaHdwaXBlIG9y IGFueXRoaW5nIHRoYXQgdG91Y2hlcyBnbG9iYWwgYXRvbWljCi0JICogc3RhdGUsIHNvIHdlJ2xs IG5ldmVyIGdvIGRvd24gdGhlIGFzeW5jIHVwZGF0ZSBwYXRoIGluIHRob3NlCi0JICogY2FzZXMu Ci0JICovCi0JaWYgKHN0YXRlLT5hc3luY191cGRhdGUpIHsKLQkJcmV0ID0gZHJtX2F0b21pY19o ZWxwZXJfcHJlcGFyZV9wbGFuZXMoZGV2LCBzdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4g cmV0OwotCi0JCWRybV9hdG9taWNfaGVscGVyX2FzeW5jX2NvbW1pdChkZXYsIHN0YXRlKTsKLQkJ ZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBzdGF0ZSk7Ci0JCXJldHVybiAw OwotCX0KLQotCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdChzdGF0ZSwgbm9u YmxvY2spOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlJTklUX1dPUksoJnN0YXRlLT5j b21taXRfd29yaywgY29tbWl0X3dvcmspOwotCi0JcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfcHJl cGFyZV9wbGFuZXMoZGV2LCBzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWlm ICghbm9uYmxvY2spIHsKLQkJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfZmVuY2Vz KGRldiwgc3RhdGUsIHRydWUpOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJvcjsKLQl9Ci0KLQkv KgotCSAqIFRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybiAtIGV2ZXJ5dGhpbmcgYmVsb3cg bmV2ZXIgZmFpbHMgZXhjZXB0Ci0JICogd2hlbiB0aGUgaHcgZ29lcyBib25naGl0cy4gV2hpY2gg bWVhbnMgd2UgY2FuIGNvbW1pdCB0aGUgbmV3IHN0YXRlIG9uCi0JICogdGhlIHNvZnR3YXJlIHNp ZGUgbm93LgotCSAqCi0JICogc3dhcCBkcml2ZXIgcHJpdmF0ZSBzdGF0ZSB3aGlsZSBzdGlsbCBo b2xkaW5nIHN0YXRlX2xvY2sKLQkgKi8KLQlCVUdfT04oZHJtX2F0b21pY19oZWxwZXJfc3dhcF9z dGF0ZShzdGF0ZSwgdHJ1ZSkgPCAwKTsKLQotCS8qCi0JICogRXZlcnl0aGluZyBiZWxvdyBjYW4g YmUgcnVuIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgdGhlIG5lZWQgdG8gZ3JhYgotCSAqIGFueSBt b2Rlc2V0IGxvY2tzIGF0IGFsbCB1bmRlciBvbmUgY29uZGl0aW9uczogSXQgbXVzdCBiZSBndWFy YW50ZWVkCi0JICogdGhhdCB0aGUgYXN5bmNocm9ub3VzIHdvcmsgaGFzIGVpdGhlciBiZWVuIGNh bmNlbGxlZCAoaWYgdGhlIGRyaXZlcgotCSAqIHN1cHBvcnRzIGl0LCB3aGljaCBhdCBsZWFzdCBy ZXF1aXJlcyB0aGF0IHRoZSBmcmFtZWJ1ZmZlcnMgZ2V0Ci0JICogY2xlYW5lZCB1cCB3aXRoIGRy bV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKCkpIG9yIGNvbXBsZXRlZAotCSAqIGJlZm9y ZSB0aGUgbmV3IHN0YXRlIGdldHMgY29tbWl0dGVkIG9uIHRoZSBzb2Z0d2FyZSBzaWRlIHdpdGgK LQkgKiBkcm1fYXRvbWljX2hlbHBlcl9zd2FwX3N0YXRlKCkuCi0JICoKLQkgKiBUaGlzIHNjaGVt ZSBhbGxvd3MgbmV3IGF0b21pYyBzdGF0ZSB1cGRhdGVzIHRvIGJlIHByZXBhcmVkIGFuZAotCSAq IGNoZWNrZWQgaW4gcGFyYWxsZWwgdG8gdGhlIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIG9mIHRo ZSBwcmV2aW91cwotCSAqIHVwZGF0ZS4gV2hpY2ggaXMgaW1wb3J0YW50IHNpbmNlIGNvbXBvc2l0 b3JzIG5lZWQgdG8gZmlndXJlIG91dCB0aGUKLQkgKiBjb21wb3NpdGlvbiBvZiB0aGUgbmV4dCBm cmFtZSByaWdodCBhZnRlciBoYXZpbmcgc3VibWl0dGVkIHRoZQotCSAqIGN1cnJlbnQgbGF5b3V0 LgotCSAqLwotCi0JZHJtX2F0b21pY19zdGF0ZV9nZXQoc3RhdGUpOwotCWlmIChub25ibG9jaykK LQkJcXVldWVfd29yayhzeXN0ZW1fdW5ib3VuZF93cSwgJnN0YXRlLT5jb21taXRfd29yayk7Ci0J ZWxzZQotCQljb21taXRfdGFpbChzdGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3I6Ci0JZHJt X2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBzdGF0ZSk7Ci0JcmV0dXJuIHJldDsK LX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9tc21fZHJ2LmMKaW5kZXggZDFhNDVhNjhjMjg3Li5lYjU1NjlkNGRkNTcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5jCkBAIC00MSw3ICs0MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtb2RlX2NvbmZpZ19mdW5jcyA9IHsKIAkuZmJfY3JlYXRl ID0gbXNtX2ZyYW1lYnVmZmVyX2NyZWF0ZSwKIAkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IGRybV9m Yl9oZWxwZXJfb3V0cHV0X3BvbGxfY2hhbmdlZCwKIAkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21p Y19oZWxwZXJfY2hlY2ssCi0JLmF0b21pY19jb21taXQgPSBtc21fYXRvbWljX2NvbW1pdCwKKwku YXRvbWljX2NvbW1pdCA9IGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2hlbHBlcl9mdW5jcyBtb2RlX2NvbmZpZ19oZWxw ZXJfZnVuY3MgPSB7CisJLmF0b21pY19jb21taXRfdGFpbCA9IG1zbV9hdG9taWNfY29tbWl0X3Rh aWwsCiB9OwogCiBzdGF0aWMgaW5saW5lCkBAIC01MjAsNiArNTI0LDcgQEAgc3RhdGljIGludCBt c21fZHJtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2RyaXZlciAqZHJ2KQog CX0KIAogCWRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1vZGVfY29uZmlnX2Z1bmNzOworCWRk ZXYtPm1vZGVfY29uZmlnLmhlbHBlcl9wcml2YXRlID0gJm1vZGVfY29uZmlnX2hlbHBlcl9mdW5j czsKIAogCXJldCA9IGRybV92YmxhbmtfaW5pdChkZGV2LCBwcml2LT5udW1fY3J0Y3MpOwogCWlm IChyZXQgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCmluZGV4IGI4OWZhNTE4NmViOC4uM2U4OWQ3 ZWFjMDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaApAQCAtMTU2LDggKzE1Niw3IEBAIHN0cnVjdCBt c21fZm9ybWF0IHsKIAl1aW50MzJfdCBwaXhlbF9mb3JtYXQ7CiB9OwogCi1pbnQgbXNtX2F0b21p Y19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLCBib29sIG5vbmJsb2NrKTsKK3ZvaWQgbXNtX2F0b21pY19jb21taXRfdGFpbChz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwogCiB2b2lkIG1zbV9nZW1fdW5tYXBfdm1h KHN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZSwKIAkJc3RydWN0IG1zbV9nZW1f dm1hICp2bWEsIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUg RW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753927AbeC1TJE (ORCPT ); Wed, 28 Mar 2018 15:09:04 -0400 Received: from mail-yb0-f193.google.com ([209.85.213.193]:43302 "EHLO mail-yb0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753901AbeC1TJA (ORCPT ); Wed, 28 Mar 2018 15:09:00 -0400 X-Google-Smtp-Source: AIpwx4+NmzQ66+XY07/b0tcOeq8HP8vsrUB5hd2phuSAYLVKVQ6W+omvGfbmomOjMqmS8p0wtgx/+w== From: Sean Paul To: freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org Cc: robdclark@gmail.com, hoegsberg@chromium.org, jsanka@codeaurora.org, abhinavk@codeaurora.org, architt@codeaurora.org, Sean Paul , linux-kernel@vger.kernel.org Subject: [PATCH v2 6/6] drm/msm: Switch to atomic_helper_commit() Date: Wed, 28 Mar 2018 15:06:52 -0400 Message-Id: <20180328190657.218661-7-seanpaul@chromium.org> X-Mailer: git-send-email 2.17.0.rc1.321.gba9d0f2565-goog In-Reply-To: <20180328190657.218661-1-seanpaul@chromium.org> References: <20180328190657.218661-1-seanpaul@chromium.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now that all of the msm-specific goo is tucked safely away we can switch over to using the atomic helper commit directly. \o/ Changes in v2: - None Cc: Abhinav Kumar Signed-off-by: Sean Paul --- drivers/gpu/drm/msm/msm_atomic.c | 120 +------------------------------ drivers/gpu/drm/msm/msm_drv.c | 7 +- drivers/gpu/drm/msm/msm_drv.h | 3 +- 3 files changed, 8 insertions(+), 122 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c index 52249565cc03..d593ac3de1df 100644 --- a/drivers/gpu/drm/msm/msm_atomic.c +++ b/drivers/gpu/drm/msm/msm_atomic.c @@ -17,8 +17,6 @@ #include "msm_drv.h" #include "msm_kms.h" -#include "msm_gem.h" -#include "msm_fence.h" static void msm_atomic_wait_for_commit_done(struct drm_device *dev, struct drm_atomic_state *old_state) @@ -37,7 +35,7 @@ static void msm_atomic_wait_for_commit_done(struct drm_device *dev, } } -static void msm_atomic_commit_tail(struct drm_atomic_state *state) +void msm_atomic_commit_tail(struct drm_atomic_state *state) { struct drm_device *dev = state->dev; struct msm_drm_private *priv = dev->dev_private; @@ -74,119 +72,3 @@ static void msm_atomic_commit_tail(struct drm_atomic_state *state) drm_atomic_helper_cleanup_planes(dev, state); } - -/* The (potentially) asynchronous part of the commit. At this point - * nothing can fail short of armageddon. - */ -static void commit_tail(struct drm_atomic_state *state) -{ - drm_atomic_helper_wait_for_fences(state->dev, state, false); - - drm_atomic_helper_wait_for_dependencies(state); - - msm_atomic_commit_tail(state); - - drm_atomic_helper_commit_cleanup_done(state); - - drm_atomic_state_put(state); -} - -static void commit_work(struct work_struct *work) -{ - struct drm_atomic_state *state = container_of(work, - struct drm_atomic_state, - commit_work); - commit_tail(state); -} - -/** - * drm_atomic_helper_commit - commit validated state object - * @dev: DRM device - * @state: the driver state object - * @nonblock: nonblocking commit - * - * This function commits a with drm_atomic_helper_check() pre-validated state - * object. This can still fail when e.g. the framebuffer reservation fails. - * - * RETURNS - * Zero for success or -errno. - */ -int msm_atomic_commit(struct drm_device *dev, - struct drm_atomic_state *state, bool nonblock) -{ - struct msm_drm_private *priv = dev->dev_private; - struct drm_crtc *crtc; - struct drm_crtc_state *crtc_state; - struct drm_plane *plane; - struct drm_plane_state *old_plane_state, *new_plane_state; - int i, ret; - - /* - * Note that plane->atomic_async_check() should fail if we need - * to re-assign hwpipe or anything that touches global atomic - * state, so we'll never go down the async update path in those - * cases. - */ - if (state->async_update) { - ret = drm_atomic_helper_prepare_planes(dev, state); - if (ret) - return ret; - - drm_atomic_helper_async_commit(dev, state); - drm_atomic_helper_cleanup_planes(dev, state); - return 0; - } - - ret = drm_atomic_helper_setup_commit(state, nonblock); - if (ret) - return ret; - - INIT_WORK(&state->commit_work, commit_work); - - ret = drm_atomic_helper_prepare_planes(dev, state); - if (ret) - return ret; - - if (!nonblock) { - ret = drm_atomic_helper_wait_for_fences(dev, state, true); - if (ret) - goto error; - } - - /* - * This is the point of no return - everything below never fails except - * when the hw goes bonghits. Which means we can commit the new state on - * the software side now. - * - * swap driver private state while still holding state_lock - */ - BUG_ON(drm_atomic_helper_swap_state(state, true) < 0); - - /* - * Everything below can be run asynchronously without the need to grab - * any modeset locks at all under one conditions: It must be guaranteed - * that the asynchronous work has either been cancelled (if the driver - * supports it, which at least requires that the framebuffers get - * cleaned up with drm_atomic_helper_cleanup_planes()) or completed - * before the new state gets committed on the software side with - * drm_atomic_helper_swap_state(). - * - * This scheme allows new atomic state updates to be prepared and - * checked in parallel to the asynchronous completion of the previous - * update. Which is important since compositors need to figure out the - * composition of the next frame right after having submitted the - * current layout. - */ - - drm_atomic_state_get(state); - if (nonblock) - queue_work(system_unbound_wq, &state->commit_work); - else - commit_tail(state); - - return 0; - -error: - drm_atomic_helper_cleanup_planes(dev, state); - return ret; -} diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index d1a45a68c287..eb5569d4dd57 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -41,7 +41,11 @@ static const struct drm_mode_config_funcs mode_config_funcs = { .fb_create = msm_framebuffer_create, .output_poll_changed = drm_fb_helper_output_poll_changed, .atomic_check = drm_atomic_helper_check, - .atomic_commit = msm_atomic_commit, + .atomic_commit = drm_atomic_helper_commit, +}; + +static const struct drm_mode_config_helper_funcs mode_config_helper_funcs = { + .atomic_commit_tail = msm_atomic_commit_tail, }; static inline @@ -520,6 +524,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv) } ddev->mode_config.funcs = &mode_config_funcs; + ddev->mode_config.helper_private = &mode_config_helper_funcs; ret = drm_vblank_init(ddev, priv->num_crtcs); if (ret < 0) { diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index b89fa5186eb8..3e89d7eac02f 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h @@ -156,8 +156,7 @@ struct msm_format { uint32_t pixel_format; }; -int msm_atomic_commit(struct drm_device *dev, - struct drm_atomic_state *state, bool nonblock); +void msm_atomic_commit_tail(struct drm_atomic_state *state); void msm_gem_unmap_vma(struct msm_gem_address_space *aspace, struct msm_gem_vma *vma, struct sg_table *sgt); -- Sean Paul, Software Engineer, Google / Chromium OS