From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH RESEND 5/7] drm/sun4i: Rely on dma-parent for our RAM offset Date: Fri, 20 Jul 2018 16:56:08 +0200 Message-ID: <4e8314d579b8e78b8d40f03ff99cdfa22c43d462.1532098561.git-series.maxime.ripard@bootlin.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Mark Rutland , Rob Herring , Frank Rowand , Chen-Yu Tsai , Maxime Ripard Cc: devicetree@vger.kernel.org, Thomas Petazzoni , Arnd Bergmann , dri-devel@lists.freedesktop.org, Paul Kocialkowski , Yong Deng , Robin Murphy , Dave Martin , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org Tm93IHRoYXQgd2UgY2FuIGV4cHJlc3Mgb3VyIERNQSB0b3BvbG9neSwgcmVseSBvbiB0aG9zZSBw cm9wZXJ0eSBpbnN0ZWFkIG9mCmhhcmRjb2RpbmcgYW4gb2Zmc2V0IGZyb20gdGhlIGRtYV9hZGRy X3Qgd2hpY2ggd2Fzbid0IHJlYWxseSBncmVhdC4KCldlIHN0aWxsIG5lZWQgdG8gYWRkIHNvbWUg Y29kZSB0byBkZWFsIHdpdGggdGhlIG9sZCBEVCB0aGF0IHdvdWxkIGxhY2sgdGhhdApwcm9wZXJ0 eSwgYnV0IHdlIG1vdmUgdGhlIG9mZnNldCB0byB0aGUgRFJNIGRldmljZSBkbWFfcGZuX29mZnNl dCB0byBiZQphYmxlIHRvIHJlbHkgb24ganVzdCB0aGUgZG1hX2FkZHJfdCBhc3NvY2lhdGVkIHRv IHRoZSBHRU0gb2JqZWN0LgoKQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJA ZmZ3bGwuY2g+ClNpZ25lZC1vZmYtYnk6IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAYm9v dGxpbi5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2JhY2tlbmQuYyB8IDI4 ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRp b25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40 aS9zdW40aV9iYWNrZW5kLmMgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfYmFja2VuZC5j CmluZGV4IGRlMGE3NmRmYTFhMi4uMjc3ZjIzYTMxMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vc3VuNGkvc3VuNGlfYmFja2VuZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9z dW40aV9iYWNrZW5kLmMKQEAgLTM3NywxMyArMzc3LDYgQEAgaW50IHN1bjRpX2JhY2tlbmRfdXBk YXRlX2xheWVyX2J1ZmZlcihzdHJ1Y3Qgc3VuNGlfYmFja2VuZCAqYmFja2VuZCwKIAlwYWRkciA9 IGRybV9mYl9jbWFfZ2V0X2dlbV9hZGRyKGZiLCBzdGF0ZSwgMCk7CiAJRFJNX0RFQlVHX0RSSVZF UigiU2V0dGluZyBidWZmZXIgYWRkcmVzcyB0byAlcGFkXG4iLCAmcGFkZHIpOwogCi0JLyoKLQkg KiBiYWNrZW5kIERNQSBhY2Nlc3NlcyBEUkFNIGRpcmVjdGx5LCBieXBhc3NpbmcgdGhlIHN5c3Rl bQotCSAqIGJ1cy4gQXMgc3VjaCwgdGhlIGFkZHJlc3MgcmFuZ2UgaXMgZGlmZmVyZW50IGFuZCB0 aGUgYnVmZmVyCi0JICogYWRkcmVzcyBuZWVkcyB0byBiZSBjb3JyZWN0ZWQuCi0JICovCi0JcGFk ZHIgLT0gUEhZU19PRkZTRVQ7Ci0KIAlpZiAoc3VuNGlfYmFja2VuZF9mb3JtYXRfaXNfeXV2KGZi LT5mb3JtYXQtPmZvcm1hdCkpCiAJCXJldHVybiBzdW40aV9iYWNrZW5kX3VwZGF0ZV95dXZfYnVm ZmVyKGJhY2tlbmQsIGZiLCBwYWRkcik7CiAKQEAgLTc3Miw2ICs3NjUsMjcgQEAgc3RhdGljIGlu dCBzdW40aV9iYWNrZW5kX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpt YXN0ZXIsCiAJZGV2X3NldF9kcnZkYXRhKGRldiwgYmFja2VuZCk7CiAJc3Bpbl9sb2NrX2luaXQo JmJhY2tlbmQtPmZyb250ZW5kX2xvY2spOwogCisJaWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5v Zl9ub2RlLCAiZG1hLXBhcmVudCIsIE5VTEwpKSB7CisJCS8qCisJCSAqIFRoaXMgYXNzdW1lIHdl IGhhdmUgdGhlIHNhbWUgRE1BIGNvbnN0cmFpbnRzIGZvciBhbGwgb3VyIHRoZQorCQkgKiBkZXZp Y2VzIGluIG91ciBwaXBlbGluZSAoYWxsIHRoZSBiYWNrZW5kcywgYnV0IGFsc28gdGhlCisJCSAq IGZyb250ZW5kcykuIFRoaXMgc291bmRzIGJhZCwgYnV0IGl0IGhhcyBhbHdheXMgYmVlbiB0aGUg Y2FzZQorCQkgKiBmb3IgdXMsIGFuZCBEUk0gZG9lc24ndCBkbyBwZXItZGV2aWNlIGFsbG9jYXRp b24gZWl0aGVyLCBzbworCQkgKiB3ZSB3b3VsZCBuZWVkIHRvIGZpeCBEUk0gZmlyc3QuLi4KKwkJ ICovCisJCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZHJtLT5kZXYsIGRldi0+b2Zfbm9kZSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCS8qCisJCSAqIElmIHdlIGRv bid0IGhhdmUgdGhlIGRtYS1wYXJlbnQgcHJvcGVydHksIG1vc3QgbGlrZWx5CisJCSAqIGJlY2F1 c2Ugb2YgYW4gb2xkIERULCB3ZSBuZWVkIHRvIHNldCB0aGUgRE1BIG9mZnNldCBieSBoYW5kCisJ CSAqIG9uIG91ciBkZXZpY2Ugc2luY2UgdGhlIFJBTSBtYXBwaW5nIGlzIGF0IDAgZm9yIHRoZSBE TUEgYnVzLAorCQkgKiB1bmxpa2UgdGhlIENQVS4KKwkJICovCisJCWRybS0+ZGV2LT5kbWFfcGZu X29mZnNldCA9IFBIWVNfUEZOX09GRlNFVDsKKwl9CisKIAliYWNrZW5kLT5lbmdpbmUubm9kZSA9 IGRldi0+b2Zfbm9kZTsKIAliYWNrZW5kLT5lbmdpbmUub3BzID0gJnN1bjRpX2JhY2tlbmRfZW5n aW5lX29wczsKIAliYWNrZW5kLT5lbmdpbmUuaWQgPSBzdW40aV9iYWNrZW5kX29mX2dldF9pZChk ZXYtPm9mX25vZGUpOwotLSAKZ2l0LXNlcmllcyAwLjkuMQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: maxime.ripard@bootlin.com (Maxime Ripard) Date: Fri, 20 Jul 2018 16:56:08 +0200 Subject: [PATCH RESEND 5/7] drm/sun4i: Rely on dma-parent for our RAM offset In-Reply-To: References: Message-ID: <4e8314d579b8e78b8d40f03ff99cdfa22c43d462.1532098561.git-series.maxime.ripard@bootlin.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Now that we can express our DMA topology, rely on those property instead of hardcoding an offset from the dma_addr_t which wasn't really great. We still need to add some code to deal with the old DT that would lack that property, but we move the offset to the DRM device dma_pfn_offset to be able to rely on just the dma_addr_t associated to the GEM object. Acked-by: Daniel Vetter Signed-off-by: Maxime Ripard --- drivers/gpu/drm/sun4i/sun4i_backend.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c index de0a76dfa1a2..277f23a3115f 100644 --- a/drivers/gpu/drm/sun4i/sun4i_backend.c +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c @@ -377,13 +377,6 @@ int sun4i_backend_update_layer_buffer(struct sun4i_backend *backend, paddr = drm_fb_cma_get_gem_addr(fb, state, 0); DRM_DEBUG_DRIVER("Setting buffer address to %pad\n", &paddr); - /* - * backend DMA accesses DRAM directly, bypassing the system - * bus. As such, the address range is different and the buffer - * address needs to be corrected. - */ - paddr -= PHYS_OFFSET; - if (sun4i_backend_format_is_yuv(fb->format->format)) return sun4i_backend_update_yuv_buffer(backend, fb, paddr); @@ -772,6 +765,27 @@ static int sun4i_backend_bind(struct device *dev, struct device *master, dev_set_drvdata(dev, backend); spin_lock_init(&backend->frontend_lock); + if (of_find_property(dev->of_node, "dma-parent", NULL)) { + /* + * This assume we have the same DMA constraints for all our the + * devices in our pipeline (all the backends, but also the + * frontends). This sounds bad, but it has always been the case + * for us, and DRM doesn't do per-device allocation either, so + * we would need to fix DRM first... + */ + ret = of_dma_configure(drm->dev, dev->of_node); + if (ret) + return ret; + } else { + /* + * If we don't have the dma-parent property, most likely + * because of an old DT, we need to set the DMA offset by hand + * on our device since the RAM mapping is at 0 for the DMA bus, + * unlike the CPU. + */ + drm->dev->dma_pfn_offset = PHYS_PFN_OFFSET; + } + backend->engine.node = dev->of_node; backend->engine.ops = &sun4i_backend_engine_ops; backend->engine.id = sun4i_backend_of_get_id(dev->of_node); -- git-series 0.9.1