From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v2 3/8] drm/xen-front: Read driver configuration from Xen store Date: Tue, 13 Mar 2018 15:31:02 +0200 Message-ID: <1520947867-32514-4-git-send-email-andr2000@gmail.com> References: <1520947867-32514-1-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x243.google.com (mail-lf0-x243.google.com [IPv6:2a00:1450:4010:c07::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7C2EB6E4E9 for ; Tue, 13 Mar 2018 13:31:22 +0000 (UTC) Received: by mail-lf0-x243.google.com with SMTP id h127-v6so28771983lfg.12 for ; Tue, 13 Mar 2018 06:31:22 -0700 (PDT) In-Reply-To: <1520947867-32514-1-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko List-Id: dri-devel@lists.freedesktop.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKUmVhZCBjb25maWd1cmF0aW9uIHZhbHVlcyBmcm9tIFhlbiBzdG9yZSBhY2NvcmRp bmcKdG8geGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmggcHJvdG9jb2w6CiAgLSByZWFkIGNvbm5l Y3RvcihzKSBjb25maWd1cmF0aW9uCiAgLSByZWFkIGJ1ZmZlciBhbGxvY2F0aW9uIG1vZGUgKGJh Y2tlbmQvZnJvbnRlbmQpCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8 b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3hl bi9NYWtlZmlsZSAgICAgICAgICAgIHwgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udC5jICAgICB8ICA5ICsrKysKIGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dC5oICAgICB8ICAzICsrCiBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmMg fCA3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jZmcuaCB8IDM3ICsrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hh bmdlZCwgMTI4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtl ZmlsZQppbmRleCAzMjgzZTEwNGM3YmIuLmQzZWM4Yzg1ODllMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3hlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxl CkBAIC0xLDUgKzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBN SVQKIAotZHJtX3hlbl9mcm9udC1vYmpzIDo9IHhlbl9kcm1fZnJvbnQubworZHJtX3hlbl9mcm9u dC1vYmpzIDo9IHhlbl9kcm1fZnJvbnQubyBcCisJCSAgICAgIHhlbl9kcm1fZnJvbnRfY2ZnLm8K IAogb2JqLSQoQ09ORklHX0RSTV9YRU5fRlJPTlRFTkQpICs9IGRybV94ZW5fZnJvbnQubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMgYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYwppbmRleCA1MjBiNWIzNDUyMGIuLmNhNDJjZWIyNGE0 MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMKQEAgLTI0LDYgKzI0LDE1IEBAIHN0 YXRpYyB2b2lkIHhlbl9kcnZfcmVtb3ZlX2ludGVybmFsKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2lu Zm8gKmZyb250X2luZm8pCiAKIHN0YXRpYyBpbnQgZGlzcGxiYWNrX2luaXR3YWl0KHN0cnVjdCB4 ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCiB7CisJc3RydWN0IHhlbl9kcm1fZnJvbnRf Y2ZnICpjZmcgPSAmZnJvbnRfaW5mby0+Y2ZnOworCWludCByZXQ7CisKKwljZmctPmZyb250X2lu Zm8gPSBmcm9udF9pbmZvOworCXJldCA9IHhlbl9kcm1fZnJvbnRfY2ZnX2NhcmQoZnJvbnRfaW5m bywgY2ZnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCURSTV9JTkZPKCJIYXZl ICVkIGNvbmVjdG9yKHMpXG4iLCBjZmctPm51bV9jb25uZWN0b3JzKTsKIAlyZXR1cm4gMDsKIH0K IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmggYi9kcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuaAppbmRleCA4YjhkNGQxZTA4MTYuLjAzNGEz OTg3NjU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmgKQEAgLTExLDggKzExLDEx IEBACiAjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9IXwogI2RlZmluZSBfX1hFTl9EUk1fRlJPTlRf SF8KIAorI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfY2ZnLmgiCisKIHN0cnVjdCB4ZW5fZHJtX2Zy b250X2luZm8gewogCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXY7CisJc3RydWN0IHhlbl9k cm1fZnJvbnRfY2ZnIGNmZzsKIH07CiAKICNlbmRpZiAvKiBfX1hFTl9EUk1fRlJPTlRfSF8gKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuYyBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjlhMGIyYjhlNjE2OQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuYwpAQCAtMCwwICsxLDc3IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKworLyoKKyAqICBYZW4g cGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBF UEFNIFN5c3RlbXMgSW5jLgorICoKKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28g PG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgorICovCisKKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDx4ZW4vaW50 ZXJmYWNlL2lvL2Rpc3BsaWYuaD4KKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CisKKyNpbmNsdWRl ICJ4ZW5fZHJtX2Zyb250LmgiCisjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jZmcuaCIKKworc3Rh dGljIGludCBjZmdfY29ubmVjdG9yKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2lu Zm8sCisJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZ19jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJ Y29uc3QgY2hhciAqcGF0aCwgaW50IGluZGV4KQoreworCWNoYXIgKmNvbm5lY3Rvcl9wYXRoOwor CisJY29ubmVjdG9yX3BhdGggPSBkZXZtX2thc3ByaW50ZigmZnJvbnRfaW5mby0+eGJfZGV2LT5k ZXYsCisJCQlHRlBfS0VSTkVMLCAiJXMvJWQiLCBwYXRoLCBpbmRleCk7CisJaWYgKCFjb25uZWN0 b3JfcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoeGVuYnVzX3NjYW5mKFhCVF9OSUws IGNvbm5lY3Rvcl9wYXRoLCBYRU5ESVNQTF9GSUVMRF9SRVNPTFVUSU9OLAorCQkJIiVkIiBYRU5E SVNQTF9SRVNPTFVUSU9OX1NFUEFSQVRPUiAiJWQiLAorCQkJJmNvbm5lY3Rvci0+d2lkdGgsICZj b25uZWN0b3ItPmhlaWdodCkgPCAwKSB7CisJCS8qIGVpdGhlciBubyBlbnRyeSBjb25maWd1cmVk IG9yIHdyb25nIHJlc29sdXRpb24gc2V0ICovCisJCWNvbm5lY3Rvci0+d2lkdGggPSAwOworCQlj b25uZWN0b3ItPmhlaWdodCA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbm5lY3Rv ci0+eGVuc3RvcmVfcGF0aCA9IGNvbm5lY3Rvcl9wYXRoOworCisJRFJNX0lORk8oIkNvbm5lY3Rv ciAlczogcmVzb2x1dGlvbiAlZHglZFxuIiwKKwkJCWNvbm5lY3Rvcl9wYXRoLCBjb25uZWN0b3It PndpZHRoLCBjb25uZWN0b3ItPmhlaWdodCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB4ZW5fZHJt X2Zyb250X2NmZ19jYXJkKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCisJ CXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZyAqY2ZnKQoreworCXN0cnVjdCB4ZW5idXNfZGV2aWNl ICp4Yl9kZXYgPSBmcm9udF9pbmZvLT54Yl9kZXY7CisJaW50IHJldCwgaTsKKworCWlmICh4ZW5i dXNfcmVhZF91bnNpZ25lZChmcm9udF9pbmZvLT54Yl9kZXYtPm5vZGVuYW1lLAorCQkJWEVORElT UExfRklFTERfQkVfQUxMT0MsIDApKSB7CisJCURSTV9JTkZPKCJCYWNrZW5kIGNhbiBwcm92aWRl IGRpc3BsYXkgYnVmZmVyc1xuIik7CisJCWNmZy0+YmVfYWxsb2MgPSB0cnVlOworCX0KKworCWNm Zy0+bnVtX2Nvbm5lY3RvcnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+ Y29ubmVjdG9ycyk7IGkrKykgeworCQlyZXQgPSBjZmdfY29ubmVjdG9yKGZyb250X2luZm8sCisJ CQkJJmNmZy0+Y29ubmVjdG9yc1tpXSwgeGJfZGV2LT5ub2RlbmFtZSwgaSk7CisJCWlmIChyZXQg PCAwKQorCQkJYnJlYWs7CisJCWNmZy0+bnVtX2Nvbm5lY3RvcnMrKzsKKwl9CisKKwlpZiAoIWNm Zy0+bnVtX2Nvbm5lY3RvcnMpIHsKKwkJRFJNX0VSUk9SKCJObyBjb25uZWN0b3IocykgY29uZmln dXJlZCBhdCAlc1xuIiwKKwkJCQl4Yl9kZXYtPm5vZGVuYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9jZmcuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9j ZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjZlN2FmNjcwZjhj ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9j ZmcuaApAQCAtMCwwICsxLDM3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBPUiBNSVQgKi8KKworLyoKKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKKyAqCisg KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgorICoKKyAqIEF1dGhv cjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0u Y29tPgorICovCisKKyNpZm5kZWYgX19YRU5fRFJNX0ZST05UX0NGR19IXworI2RlZmluZSBfX1hF Tl9EUk1fRlJPTlRfQ0ZHX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5l IFhFTl9EUk1fRlJPTlRfTUFYX0NSVENTCTQKKworc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnX2Nv bm5lY3RvciB7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7CisJY2hhciAqeGVuc3RvcmVfcGF0 aDsKK307CisKK3N0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZyB7CisJc3RydWN0IHhlbl9kcm1fZnJv bnRfaW5mbyAqZnJvbnRfaW5mbzsKKwkvKiBudW1iZXIgb2YgY29ubmVjdG9ycyBpbiB0aGlzIGNv bmZpZ3VyYXRpb24gKi8KKwlpbnQgbnVtX2Nvbm5lY3RvcnM7CisJLyogY29ubmVjdG9yIGNvbmZp Z3VyYXRpb25zICovCisJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnX2Nvbm5lY3RvciBjb25uZWN0 b3JzW1hFTl9EUk1fRlJPTlRfTUFYX0NSVENTXTsKKwkvKiBzZXQgaWYgZHVtYiBidWZmZXJzIGFy ZSBhbGxvY2F0ZWQgZXh0ZXJuYWxseSBvbiBiYWNrZW5kIHNpZGUgKi8KKwlib29sIGJlX2FsbG9j OworfTsKKworaW50IHhlbl9kcm1fZnJvbnRfY2ZnX2NhcmQoc3RydWN0IHhlbl9kcm1fZnJvbnRf aW5mbyAqZnJvbnRfaW5mbywKKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpjZmcpOworCisj ZW5kaWYgLyogX19YRU5fRFJNX0ZST05UX0NGR19IXyAqLwotLSAKMi43LjQKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752858AbeCMNcR (ORCPT ); Tue, 13 Mar 2018 09:32:17 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:39698 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932895AbeCMNbW (ORCPT ); Tue, 13 Mar 2018 09:31:22 -0400 X-Google-Smtp-Source: AG47ELu1ZgSuUbovkUPm9zUSP9QmGHTcmqtV6fnJHt1qfq3mbhywsY1YCKUFEOS1uYRTjEcmCCCW2w== From: Oleksandr Andrushchenko To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, airlied@linux.ie, daniel.vetter@intel.com, seanpaul@chromium.org, gustavo@padovan.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko Subject: [PATCH v2 3/8] drm/xen-front: Read driver configuration from Xen store Date: Tue, 13 Mar 2018 15:31:02 +0200 Message-Id: <1520947867-32514-4-git-send-email-andr2000@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520947867-32514-1-git-send-email-andr2000@gmail.com> References: <1520947867-32514-1-git-send-email-andr2000@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Oleksandr Andrushchenko Read configuration values from Xen store according to xen/interface/io/displif.h protocol: - read connector(s) configuration - read buffer allocation mode (backend/frontend) Signed-off-by: Oleksandr Andrushchenko --- drivers/gpu/drm/xen/Makefile | 3 +- drivers/gpu/drm/xen/xen_drm_front.c | 9 ++++ drivers/gpu/drm/xen/xen_drm_front.h | 3 ++ drivers/gpu/drm/xen/xen_drm_front_cfg.c | 77 +++++++++++++++++++++++++++++++++ drivers/gpu/drm/xen/xen_drm_front_cfg.h | 37 ++++++++++++++++ 5 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/xen/xen_drm_front_cfg.c create mode 100644 drivers/gpu/drm/xen/xen_drm_front_cfg.h diff --git a/drivers/gpu/drm/xen/Makefile b/drivers/gpu/drm/xen/Makefile index 3283e104c7bb..d3ec8c8589e0 100644 --- a/drivers/gpu/drm/xen/Makefile +++ b/drivers/gpu/drm/xen/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 OR MIT -drm_xen_front-objs := xen_drm_front.o +drm_xen_front-objs := xen_drm_front.o \ + xen_drm_front_cfg.o obj-$(CONFIG_DRM_XEN_FRONTEND) += drm_xen_front.o diff --git a/drivers/gpu/drm/xen/xen_drm_front.c b/drivers/gpu/drm/xen/xen_drm_front.c index 520b5b34520b..ca42ceb24a40 100644 --- a/drivers/gpu/drm/xen/xen_drm_front.c +++ b/drivers/gpu/drm/xen/xen_drm_front.c @@ -24,6 +24,15 @@ static void xen_drv_remove_internal(struct xen_drm_front_info *front_info) static int displback_initwait(struct xen_drm_front_info *front_info) { + struct xen_drm_front_cfg *cfg = &front_info->cfg; + int ret; + + cfg->front_info = front_info; + ret = xen_drm_front_cfg_card(front_info, cfg); + if (ret < 0) + return ret; + + DRM_INFO("Have %d conector(s)\n", cfg->num_connectors); return 0; } diff --git a/drivers/gpu/drm/xen/xen_drm_front.h b/drivers/gpu/drm/xen/xen_drm_front.h index 8b8d4d1e0816..034a3987657e 100644 --- a/drivers/gpu/drm/xen/xen_drm_front.h +++ b/drivers/gpu/drm/xen/xen_drm_front.h @@ -11,8 +11,11 @@ #ifndef __XEN_DRM_FRONT_H_ #define __XEN_DRM_FRONT_H_ +#include "xen_drm_front_cfg.h" + struct xen_drm_front_info { struct xenbus_device *xb_dev; + struct xen_drm_front_cfg cfg; }; #endif /* __XEN_DRM_FRONT_H_ */ diff --git a/drivers/gpu/drm/xen/xen_drm_front_cfg.c b/drivers/gpu/drm/xen/xen_drm_front_cfg.c new file mode 100644 index 000000000000..9a0b2b8e6169 --- /dev/null +++ b/drivers/gpu/drm/xen/xen_drm_front_cfg.c @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT + +/* + * Xen para-virtual DRM device + * + * Copyright (C) 2016-2018 EPAM Systems Inc. + * + * Author: Oleksandr Andrushchenko + */ + +#include + +#include + +#include +#include + +#include "xen_drm_front.h" +#include "xen_drm_front_cfg.h" + +static int cfg_connector(struct xen_drm_front_info *front_info, + struct xen_drm_front_cfg_connector *connector, + const char *path, int index) +{ + char *connector_path; + + connector_path = devm_kasprintf(&front_info->xb_dev->dev, + GFP_KERNEL, "%s/%d", path, index); + if (!connector_path) + return -ENOMEM; + + if (xenbus_scanf(XBT_NIL, connector_path, XENDISPL_FIELD_RESOLUTION, + "%d" XENDISPL_RESOLUTION_SEPARATOR "%d", + &connector->width, &connector->height) < 0) { + /* either no entry configured or wrong resolution set */ + connector->width = 0; + connector->height = 0; + return -EINVAL; + } + + connector->xenstore_path = connector_path; + + DRM_INFO("Connector %s: resolution %dx%d\n", + connector_path, connector->width, connector->height); + return 0; +} + +int xen_drm_front_cfg_card(struct xen_drm_front_info *front_info, + struct xen_drm_front_cfg *cfg) +{ + struct xenbus_device *xb_dev = front_info->xb_dev; + int ret, i; + + if (xenbus_read_unsigned(front_info->xb_dev->nodename, + XENDISPL_FIELD_BE_ALLOC, 0)) { + DRM_INFO("Backend can provide display buffers\n"); + cfg->be_alloc = true; + } + + cfg->num_connectors = 0; + for (i = 0; i < ARRAY_SIZE(cfg->connectors); i++) { + ret = cfg_connector(front_info, + &cfg->connectors[i], xb_dev->nodename, i); + if (ret < 0) + break; + cfg->num_connectors++; + } + + if (!cfg->num_connectors) { + DRM_ERROR("No connector(s) configured at %s\n", + xb_dev->nodename); + return -ENODEV; + } + + return 0; +} + diff --git a/drivers/gpu/drm/xen/xen_drm_front_cfg.h b/drivers/gpu/drm/xen/xen_drm_front_cfg.h new file mode 100644 index 000000000000..6e7af670f8cd --- /dev/null +++ b/drivers/gpu/drm/xen/xen_drm_front_cfg.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 OR MIT */ + +/* + * Xen para-virtual DRM device + * + * Copyright (C) 2016-2018 EPAM Systems Inc. + * + * Author: Oleksandr Andrushchenko + */ + +#ifndef __XEN_DRM_FRONT_CFG_H_ +#define __XEN_DRM_FRONT_CFG_H_ + +#include + +#define XEN_DRM_FRONT_MAX_CRTCS 4 + +struct xen_drm_front_cfg_connector { + int width; + int height; + char *xenstore_path; +}; + +struct xen_drm_front_cfg { + struct xen_drm_front_info *front_info; + /* number of connectors in this configuration */ + int num_connectors; + /* connector configurations */ + struct xen_drm_front_cfg_connector connectors[XEN_DRM_FRONT_MAX_CRTCS]; + /* set if dumb buffers are allocated externally on backend side */ + bool be_alloc; +}; + +int xen_drm_front_cfg_card(struct xen_drm_front_info *front_info, + struct xen_drm_front_cfg *cfg); + +#endif /* __XEN_DRM_FRONT_CFG_H_ */ -- 2.7.4