From mboxrd@z Thu Jan 1 00:00:00 1970 From: linus.walleij@linaro.org (Linus Walleij) Date: Wed, 18 Apr 2018 10:52:42 +0200 Subject: [PATCH 2/2 v3] drm/pl111: Enable device-specific assigned memory In-Reply-To: <20180418085242.19525-1-linus.walleij@linaro.org> References: <20180418085242.19525-1-linus.walleij@linaro.org> Message-ID: <20180418085242.19525-2-linus.walleij@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org The Versatile Express has 8 MB of dedicated video RAM (VRAM) on the motherboard, which is what we should be using for the PL111 if available. On this platform, the memory backplane is constructed so that only this memory will work properly with the CLCD on the motherboard, using any other memory area just gives random snow on the display. The CA9 Versatile Express also has a PL111 instance on its core tile that can address all memory, and this does not have the restriction. The memory is assigned to the device using the memory-region device tree property and a "shared-dma-pool" reserved memory pool like this: reserved-memory { #address-cells = <1>; #size-cells = <1>; ranges; vram: vram at 48000000 { compatible = "shared-dma-pool"; reg = <0x48000000 0x00800000>; no-map; }; }; clcd at 1f000 { compatible = "arm,pl111", "arm,primecell"; (...) memory-region = <&vram>; }?; Cc: Liviu Dudau Cc: Mali DP Maintainers Signed-off-by: Linus Walleij --- ChangeLog v2->v3: - Fix error path so we uref the memory properly. - Augment the GEM buffer import to return an error pointer if we try to import a buffer when using device-assigned memory: we can only scan out the special memory and the GEM buffers are not copied but referenced by pointer. ChangeLog v1->v2: - Make sure to also call of_reserved_mem_device_release() at remove() and errorpath. --- drivers/gpu/drm/pl111/pl111_drm.h | 1 + drivers/gpu/drm/pl111/pl111_drv.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h index 8639b2d4ddf7..ce4501d0ab48 100644 --- a/drivers/gpu/drm/pl111/pl111_drm.h +++ b/drivers/gpu/drm/pl111/pl111_drm.h @@ -79,6 +79,7 @@ struct pl111_drm_dev_private { const struct pl111_variant_data *variant; void (*variant_display_enable) (struct drm_device *drm, u32 format); void (*variant_display_disable) (struct drm_device *drm); + bool use_device_memory; }; int pl111_display_init(struct drm_device *dev); diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c index 4621259d5387..5fcf21837746 100644 --- a/drivers/gpu/drm/pl111/pl111_drv.c +++ b/drivers/gpu/drm/pl111/pl111_drv.c @@ -60,6 +60,7 @@ #include #include #include +#include #include #include @@ -207,6 +208,23 @@ static int pl111_modeset_init(struct drm_device *dev) return ret; } +struct drm_gem_object *pl111_gem_import_sg_table(struct drm_device *dev, + struct dma_buf_attachment *attach, + struct sg_table *sgt) +{ + struct pl111_drm_dev_private *priv = dev->dev_private; + + /* + * When using device-specific reserved memory we can't import + * DMA buffers: those are passed by reference in any global + * memory and we can only handle a specific range of memory. + */ + if (priv->use_device_memory) + return ERR_PTR(-EINVAL); + + return drm_gem_cma_prime_import_sg_table(dev, attach, sgt); +} + DEFINE_DRM_GEM_CMA_FOPS(drm_fops); static struct drm_driver pl111_drm_driver = { @@ -227,7 +245,7 @@ static struct drm_driver pl111_drm_driver = { .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_import = drm_gem_prime_import, - .gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table, + .gem_prime_import_sg_table = pl111_gem_import_sg_table, .gem_prime_export = drm_gem_prime_export, .gem_prime_get_sg_table = drm_gem_cma_prime_get_sg_table, @@ -257,6 +275,12 @@ static int pl111_amba_probe(struct amba_device *amba_dev, drm->dev_private = priv; priv->variant = variant; + ret = of_reserved_mem_device_init(dev); + if (!ret) { + dev_info(dev, "using device-specific reserved memory\n"); + priv->use_device_memory = true; + } + if (of_property_read_u32(dev->of_node, "max-memory-bandwidth", &priv->memory_bw)) { dev_info(dev, "no max memory bandwidth specified, assume unlimited\n"); @@ -275,7 +299,8 @@ static int pl111_amba_probe(struct amba_device *amba_dev, priv->regs = devm_ioremap_resource(dev, &amba_dev->res); if (IS_ERR(priv->regs)) { dev_err(dev, "%s failed mmio\n", __func__); - return PTR_ERR(priv->regs); + ret = PTR_ERR(priv->regs); + goto dev_unref; } /* This may override some variant settings */ @@ -305,11 +330,14 @@ static int pl111_amba_probe(struct amba_device *amba_dev, dev_unref: drm_dev_unref(drm); + of_reserved_mem_device_release(dev); + return ret; } static int pl111_amba_remove(struct amba_device *amba_dev) { + struct device *dev = &amba_dev->dev; struct drm_device *drm = amba_get_drvdata(amba_dev); struct pl111_drm_dev_private *priv = drm->dev_private; @@ -319,6 +347,7 @@ static int pl111_amba_remove(struct amba_device *amba_dev) drm_panel_bridge_remove(priv->bridge); drm_mode_config_cleanup(drm); drm_dev_unref(drm); + of_reserved_mem_device_release(dev); return 0; } -- 2.14.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Walleij Subject: [PATCH 2/2 v3] drm/pl111: Enable device-specific assigned memory Date: Wed, 18 Apr 2018 10:52:42 +0200 Message-ID: <20180418085242.19525-2-linus.walleij@linaro.org> References: <20180418085242.19525-1-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x244.google.com (mail-lf0-x244.google.com [IPv6:2a00:1450:4010:c07::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id A44186E547 for ; Wed, 18 Apr 2018 08:53:15 +0000 (UTC) Received: by mail-lf0-x244.google.com with SMTP id x130-v6so1455541lff.9 for ; Wed, 18 Apr 2018 01:53:15 -0700 (PDT) In-Reply-To: <20180418085242.19525-1-linus.walleij@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter , Jani Nikula , Sean Paul , Eric Anholt , Liviu Dudau Cc: Mali DP Maintainers , linux-arm-kernel@lists.infradead.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhlIFZlcnNhdGlsZSBFeHByZXNzIGhhcyA4IE1CIG9mIGRlZGljYXRlZCB2aWRlbyBSQU0gKFZS QU0pCm9uIHRoZSBtb3RoZXJib2FyZCwgd2hpY2ggaXMgd2hhdCB3ZSBzaG91bGQgYmUgdXNpbmcg Zm9yIHRoZQpQTDExMSBpZiBhdmFpbGFibGUuIE9uIHRoaXMgcGxhdGZvcm0sIHRoZSBtZW1vcnkg YmFja3BsYW5lCmlzIGNvbnN0cnVjdGVkIHNvIHRoYXQgb25seSB0aGlzIG1lbW9yeSB3aWxsIHdv cmsgcHJvcGVybHkKd2l0aCB0aGUgQ0xDRCBvbiB0aGUgbW90aGVyYm9hcmQsIHVzaW5nIGFueSBv dGhlciBtZW1vcnkKYXJlYSBqdXN0IGdpdmVzIHJhbmRvbSBzbm93IG9uIHRoZSBkaXNwbGF5LgoK VGhlIENBOSBWZXJzYXRpbGUgRXhwcmVzcyBhbHNvIGhhcyBhIFBMMTExIGluc3RhbmNlIG9uIGl0 cwpjb3JlIHRpbGUgdGhhdCBjYW4gYWRkcmVzcyBhbGwgbWVtb3J5LCBhbmQgdGhpcyBkb2VzIG5v dApoYXZlIHRoZSByZXN0cmljdGlvbi4KClRoZSBtZW1vcnkgaXMgYXNzaWduZWQgdG8gdGhlIGRl dmljZSB1c2luZyB0aGUgbWVtb3J5LXJlZ2lvbgpkZXZpY2UgdHJlZSBwcm9wZXJ0eSBhbmQgYSAi c2hhcmVkLWRtYS1wb29sIiByZXNlcnZlZAptZW1vcnkgcG9vbCBsaWtlIHRoaXM6CgpyZXNlcnZl ZC1tZW1vcnkgewogICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OwogICAgICAgICNzaXplLWNl bGxzID0gPDE+OwogICAgICAgIHJhbmdlczsKCiAgICAgICAgdnJhbTogdnJhbUA0ODAwMDAwMCB7 CiAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gInNoYXJlZC1kbWEtcG9vbCI7CiAgICAgICAg ICAgICAgICByZWcgPSA8MHg0ODAwMDAwMCAweDAwODAwMDAwPjsKICAgICAgICAgICAgICAgIG5v LW1hcDsKICAgICAgICB9Owp9OwoKY2xjZEAxZjAwMCB7CiAgICAgICAgY29tcGF0aWJsZSA9ICJh cm0scGwxMTEiLCAiYXJtLHByaW1lY2VsbCI7CgkoLi4uKQogICAgICAgIG1lbW9yeS1yZWdpb24g PSA8JnZyYW0+Owp9wrc7CgpDYzogTGl2aXUgRHVkYXUgPGxpdml1LmR1ZGF1QGFybS5jb20+CkNj OiBNYWxpIERQIE1haW50YWluZXJzIDxtYWxpZHBAZm9zcy5hcm0uY29tPgpTaWduZWQtb2ZmLWJ5 OiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Ci0tLQpDaGFuZ2VMb2cg djItPnYzOgotIEZpeCBlcnJvciBwYXRoIHNvIHdlIHVyZWYgdGhlIG1lbW9yeSBwcm9wZXJseS4K LSBBdWdtZW50IHRoZSBHRU0gYnVmZmVyIGltcG9ydCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRl cgogIGlmIHdlIHRyeSB0byBpbXBvcnQgYSBidWZmZXIgd2hlbiB1c2luZyBkZXZpY2UtYXNzaWdu ZWQKICBtZW1vcnk6IHdlIGNhbiBvbmx5IHNjYW4gb3V0IHRoZSBzcGVjaWFsIG1lbW9yeSBhbmQg dGhlCiAgR0VNIGJ1ZmZlcnMgYXJlIG5vdCBjb3BpZWQgYnV0IHJlZmVyZW5jZWQgYnkgcG9pbnRl ci4KQ2hhbmdlTG9nIHYxLT52MjoKLSBNYWtlIHN1cmUgdG8gYWxzbyBjYWxsIG9mX3Jlc2VydmVk X21lbV9kZXZpY2VfcmVsZWFzZSgpIGF0CiAgcmVtb3ZlKCkgYW5kIGVycm9ycGF0aC4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJtLmggfCAgMSArCiBkcml2ZXJzL2dwdS9kcm0v cGwxMTEvcGwxMTFfZHJ2LmMgfCAzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0K IDIgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJtLmggYi9kcml2ZXJzL2dwdS9k cm0vcGwxMTEvcGwxMTFfZHJtLmgKaW5kZXggODYzOWIyZDRkZGY3Li5jZTQ1MDFkMGFiNDggMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wbDExMS9wbDExMV9kcm0uaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJtLmgKQEAgLTc5LDYgKzc5LDcgQEAgc3RydWN0IHBsMTEx X2RybV9kZXZfcHJpdmF0ZSB7CiAJY29uc3Qgc3RydWN0IHBsMTExX3ZhcmlhbnRfZGF0YSAqdmFy aWFudDsKIAl2b2lkICgqdmFyaWFudF9kaXNwbGF5X2VuYWJsZSkgKHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIHUzMiBmb3JtYXQpOwogCXZvaWQgKCp2YXJpYW50X2Rpc3BsYXlfZGlzYWJsZSkgKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pOworCWJvb2wgdXNlX2RldmljZV9tZW1vcnk7CiB9OwogCiBp bnQgcGwxMTFfZGlzcGxheV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3BsMTExL3BsMTExX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Bs MTExL3BsMTExX2Rydi5jCmluZGV4IDQ2MjEyNTlkNTM4Ny4uNWZjZjIxODM3NzQ2IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3BsMTExL3BsMTExX2Rydi5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgv c2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGgu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9tZW0uaD4KIAogI2luY2x1ZGUgPGRybS9k cm1QLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CkBAIC0yMDcsNiArMjA4 LDIzIEBAIHN0YXRpYyBpbnQgcGwxMTFfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IGRybV9nZW1fb2JqZWN0ICpwbDExMV9nZW1f aW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJCQkJIHN0cnVjdCBzZ190YWJsZSAqc2d0KQor eworCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBkZXYtPmRldl9wcml2YXRl OworCisJLyoKKwkgKiBXaGVuIHVzaW5nIGRldmljZS1zcGVjaWZpYyByZXNlcnZlZCBtZW1vcnkg d2UgY2FuJ3QgaW1wb3J0CisJICogRE1BIGJ1ZmZlcnM6IHRob3NlIGFyZSBwYXNzZWQgYnkgcmVm ZXJlbmNlIGluIGFueSBnbG9iYWwKKwkgKiBtZW1vcnkgYW5kIHdlIGNhbiBvbmx5IGhhbmRsZSBh IHNwZWNpZmljIHJhbmdlIG9mIG1lbW9yeS4KKwkgKi8KKwlpZiAocHJpdi0+dXNlX2RldmljZV9t ZW1vcnkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcmV0dXJuIGRybV9nZW1fY21h X3ByaW1lX2ltcG9ydF9zZ190YWJsZShkZXYsIGF0dGFjaCwgc2d0KTsKK30KKwogREVGSU5FX0RS TV9HRU1fQ01BX0ZPUFMoZHJtX2ZvcHMpOwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgcGwx MTFfZHJtX2RyaXZlciA9IHsKQEAgLTIyNyw3ICsyNDUsNyBAQCBzdGF0aWMgc3RydWN0IGRybV9k cml2ZXIgcGwxMTFfZHJtX2RyaXZlciA9IHsKIAkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dl bV9wcmltZV9oYW5kbGVfdG9fZmQsCiAJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJp bWVfZmRfdG9faGFuZGxlLAogCS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmltZV9pbXBv cnQsCi0JLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBv cnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBwbDExMV9nZW1faW1w b3J0X3NnX3RhYmxlLAogCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQs CiAJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFi bGUsCiAKQEAgLTI1Nyw2ICsyNzUsMTIgQEAgc3RhdGljIGludCBwbDExMV9hbWJhX3Byb2JlKHN0 cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXYsCiAJZHJtLT5kZXZfcHJpdmF0ZSA9IHByaXY7CiAJ cHJpdi0+dmFyaWFudCA9IHZhcmlhbnQ7CiAKKwlyZXQgPSBvZl9yZXNlcnZlZF9tZW1fZGV2aWNl X2luaXQoZGV2KTsKKwlpZiAoIXJldCkgeworCQlkZXZfaW5mbyhkZXYsICJ1c2luZyBkZXZpY2Ut c3BlY2lmaWMgcmVzZXJ2ZWQgbWVtb3J5XG4iKTsKKwkJcHJpdi0+dXNlX2RldmljZV9tZW1vcnkg PSB0cnVlOworCX0KKwogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJt YXgtbWVtb3J5LWJhbmR3aWR0aCIsCiAJCQkJICZwcml2LT5tZW1vcnlfYncpKSB7CiAJCWRldl9p bmZvKGRldiwgIm5vIG1heCBtZW1vcnkgYmFuZHdpZHRoIHNwZWNpZmllZCwgYXNzdW1lIHVubGlt aXRlZFxuIik7CkBAIC0yNzUsNyArMjk5LDggQEAgc3RhdGljIGludCBwbDExMV9hbWJhX3Byb2Jl KHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXYsCiAJcHJpdi0+cmVncyA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShkZXYsICZhbWJhX2Rldi0+cmVzKTsKIAlpZiAoSVNfRVJSKHByaXYtPnJlZ3Mp KSB7CiAJCWRldl9lcnIoZGV2LCAiJXMgZmFpbGVkIG1taW9cbiIsIF9fZnVuY19fKTsKLQkJcmV0 dXJuIFBUUl9FUlIocHJpdi0+cmVncyk7CisJCXJldCA9IFBUUl9FUlIocHJpdi0+cmVncyk7CisJ CWdvdG8gZGV2X3VucmVmOwogCX0KIAogCS8qIFRoaXMgbWF5IG92ZXJyaWRlIHNvbWUgdmFyaWFu dCBzZXR0aW5ncyAqLwpAQCAtMzA1LDExICszMzAsMTQgQEAgc3RhdGljIGludCBwbDExMV9hbWJh X3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXYsCiAKIGRldl91bnJlZjoKIAlkcm1f ZGV2X3VucmVmKGRybSk7CisJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRldik7CisK IAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBsMTExX2FtYmFfcmVtb3ZlKHN0cnVjdCBh bWJhX2RldmljZSAqYW1iYV9kZXYpCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtYmFfZGV2 LT5kZXY7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFtYmFfZ2V0X2RydmRhdGEoYW1iYV9k ZXYpOwogCXN0cnVjdCBwbDExMV9kcm1fZGV2X3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2 YXRlOwogCkBAIC0zMTksNiArMzQ3LDcgQEAgc3RhdGljIGludCBwbDExMV9hbWJhX3JlbW92ZShz dHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2KQogCQlkcm1fcGFuZWxfYnJpZGdlX3JlbW92ZShw cml2LT5icmlkZ2UpOwogCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CiAJZHJtX2Rldl91 bnJlZihkcm0pOworCW9mX3Jlc2VydmVkX21lbV9kZXZpY2VfcmVsZWFzZShkZXYpOwogCiAJcmV0 dXJuIDA7CiB9Ci0tIAoyLjE0LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=