From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from galahad.ideasonboard.com ([185.26.127.97]:54331 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751414AbeDEJSl (ORCPT ); Thu, 5 Apr 2018 05:18:41 -0400 From: Laurent Pinchart To: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Kieran Bingham Subject: [PATCH v2 07/15] v4l: vsp1: Setup BRU at atomic commit time Date: Thu, 5 Apr 2018 12:18:32 +0300 Message-Id: <20180405091840.30728-8-laurent.pinchart+renesas@ideasonboard.com> In-Reply-To: <20180405091840.30728-1-laurent.pinchart+renesas@ideasonboard.com> References: <20180405091840.30728-1-laurent.pinchart+renesas@ideasonboard.com> Sender: linux-media-owner@vger.kernel.org List-ID: To implement fully dynamic plane assignment to pipelines, we need to reassign the BRU and BRS to the DRM pipelines in the atomic commit handler. In preparation for this setup factor out the BRU source pad code and call it both at LIF setup and atomic commit time. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- drivers/media/platform/vsp1/vsp1_drm.c | 56 +++++++++++++++++++++++++++++++++- drivers/media/platform/vsp1/vsp1_drm.h | 5 +++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/vsp1/vsp1_drm.c b/drivers/media/platform/vsp1/vsp1_drm.c index 7bf697ba7969..6ad8aa6c8138 100644 --- a/drivers/media/platform/vsp1/vsp1_drm.c +++ b/drivers/media/platform/vsp1/vsp1_drm.c @@ -148,12 +148,51 @@ static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1, return 0; } +/* Setup the BRU source pad. */ +static int vsp1_du_pipeline_setup_bru(struct vsp1_device *vsp1, + struct vsp1_pipeline *pipe) +{ + struct vsp1_drm_pipeline *drm_pipe = to_vsp1_drm_pipeline(pipe); + struct v4l2_subdev_format format = { + .which = V4L2_SUBDEV_FORMAT_ACTIVE, + }; + int ret; + + /* + * Configure the format on the BRU source and verify that it matches the + * requested format. We don't set the media bus code as it is configured + * on the BRU sink pad 0 and propagated inside the entity, not on the + * source pad. + */ + format.pad = pipe->bru->source_pad; + format.format.width = drm_pipe->width; + format.format.height = drm_pipe->height; + format.format.field = V4L2_FIELD_NONE; + + ret = v4l2_subdev_call(&pipe->bru->subdev, pad, set_fmt, NULL, + &format); + if (ret < 0) + return ret; + + dev_dbg(vsp1->dev, "%s: set format %ux%u (%x) on %s pad %u\n", + __func__, format.format.width, format.format.height, + format.format.code, BRU_NAME(pipe->bru), pipe->bru->source_pad); + + if (format.format.width != drm_pipe->width || + format.format.height != drm_pipe->height) { + dev_dbg(vsp1->dev, "%s: format mismatch\n", __func__); + return -EPIPE; + } + + return 0; +} + static unsigned int rpf_zpos(struct vsp1_device *vsp1, struct vsp1_rwpf *rpf) { return vsp1->drm->inputs[rpf->entity.index].zpos; } -/* Setup the input side of the pipeline (RPFs and BRU sink pads). */ +/* Setup the input side of the pipeline (RPFs and BRU). */ static int vsp1_du_pipeline_setup_input(struct vsp1_device *vsp1, struct vsp1_pipeline *pipe) { @@ -191,6 +230,18 @@ static int vsp1_du_pipeline_setup_input(struct vsp1_device *vsp1, inputs[j] = rpf; } + /* + * Setup the BRU. This must be done before setting up the RPF input + * pipelines as the BRU sink compose rectangles depend on the BRU source + * format. + */ + ret = vsp1_du_pipeline_setup_bru(vsp1, pipe); + if (ret < 0) { + dev_err(vsp1->dev, "%s: failed to setup %s source\n", __func__, + BRU_NAME(pipe->bru)); + return ret; + } + /* Setup the RPF input pipeline for every enabled input. */ for (i = 0; i < pipe->bru->source_pad; ++i) { struct vsp1_rwpf *rpf = inputs[i]; @@ -355,6 +406,9 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index, return 0; } + drm_pipe->width = cfg->width; + drm_pipe->height = cfg->height; + dev_dbg(vsp1->dev, "%s: configuring LIF%u with format %ux%u\n", __func__, pipe_index, cfg->width, cfg->height); diff --git a/drivers/media/platform/vsp1/vsp1_drm.h b/drivers/media/platform/vsp1/vsp1_drm.h index 9aa19325cbe9..c8dd75ba01f6 100644 --- a/drivers/media/platform/vsp1/vsp1_drm.h +++ b/drivers/media/platform/vsp1/vsp1_drm.h @@ -20,12 +20,17 @@ /** * vsp1_drm_pipeline - State for the API exposed to the DRM driver * @pipe: the VSP1 pipeline used for display + * @width: output display width + * @height: output display height * @du_complete: frame completion callback for the DU driver (optional) * @du_private: data to be passed to the du_complete callback */ struct vsp1_drm_pipeline { struct vsp1_pipeline pipe; + unsigned int width; + unsigned int height; + /* Frame synchronisation */ void (*du_complete)(void *, bool); void *du_private; -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH v2 07/15] v4l: vsp1: Setup BRU at atomic commit time Date: Thu, 5 Apr 2018 12:18:32 +0300 Message-ID: <20180405091840.30728-8-laurent.pinchart+renesas@ideasonboard.com> References: <20180405091840.30728-1-laurent.pinchart+renesas@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [185.26.127.97]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6ADB76E6F5 for ; Thu, 5 Apr 2018 09:18:40 +0000 (UTC) In-Reply-To: <20180405091840.30728-1-laurent.pinchart+renesas@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-media@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, Kieran Bingham , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VG8gaW1wbGVtZW50IGZ1bGx5IGR5bmFtaWMgcGxhbmUgYXNzaWdubWVudCB0byBwaXBlbGluZXMs IHdlIG5lZWQgdG8KcmVhc3NpZ24gdGhlIEJSVSBhbmQgQlJTIHRvIHRoZSBEUk0gcGlwZWxpbmVz IGluIHRoZSBhdG9taWMgY29tbWl0CmhhbmRsZXIuIEluIHByZXBhcmF0aW9uIGZvciB0aGlzIHNl dHVwIGZhY3RvciBvdXQgdGhlIEJSVSBzb3VyY2UgcGFkCmNvZGUgYW5kIGNhbGwgaXQgYm90aCBh dCBMSUYgc2V0dXAgYW5kIGF0b21pYyBjb21taXQgdGltZS4KClNpZ25lZC1vZmYtYnk6IExhdXJl bnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnQrcmVuZXNhc0BpZGVhc29uYm9hcmQuY29tPgpS ZXZpZXdlZC1ieTogS2llcmFuIEJpbmdoYW0gPGtpZXJhbi5iaW5naGFtK3JlbmVzYXNAaWRlYXNv bmJvYXJkLmNvbT4KLS0tCiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kcm0uYyB8 IDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vdnNwMS92c3AxX2RybS5oIHwgIDUgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDYwIGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZzcDEvdnNwMV9kcm0uYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2Ry bS5jCmluZGV4IDdiZjY5N2JhNzk2OS4uNmFkOGFhNmM4MTM4IDEwMDY0NAotLS0gYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kcm0uYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZzcDEvdnNwMV9kcm0uYwpAQCAtMTQ4LDEyICsxNDgsNTEgQEAgc3RhdGljIGludCB2c3Ax X2R1X3BpcGVsaW5lX3NldHVwX3JwZihzdHJ1Y3QgdnNwMV9kZXZpY2UgKnZzcDEsCiAJcmV0dXJu IDA7CiB9CiAKKy8qIFNldHVwIHRoZSBCUlUgc291cmNlIHBhZC4gKi8KK3N0YXRpYyBpbnQgdnNw MV9kdV9waXBlbGluZV9zZXR1cF9icnUoc3RydWN0IHZzcDFfZGV2aWNlICp2c3AxLAorCQkJCSAg ICAgIHN0cnVjdCB2c3AxX3BpcGVsaW5lICpwaXBlKQoreworCXN0cnVjdCB2c3AxX2RybV9waXBl bGluZSAqZHJtX3BpcGUgPSB0b192c3AxX2RybV9waXBlbGluZShwaXBlKTsKKwlzdHJ1Y3QgdjRs Ml9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9IHsKKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFU X0FDVElWRSwKKwl9OworCWludCByZXQ7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgZm9ybWF0 IG9uIHRoZSBCUlUgc291cmNlIGFuZCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZQorCSAqIHJl cXVlc3RlZCBmb3JtYXQuIFdlIGRvbid0IHNldCB0aGUgbWVkaWEgYnVzIGNvZGUgYXMgaXQgaXMg Y29uZmlndXJlZAorCSAqIG9uIHRoZSBCUlUgc2luayBwYWQgMCBhbmQgcHJvcGFnYXRlZCBpbnNp ZGUgdGhlIGVudGl0eSwgbm90IG9uIHRoZQorCSAqIHNvdXJjZSBwYWQuCisJICovCisJZm9ybWF0 LnBhZCA9IHBpcGUtPmJydS0+c291cmNlX3BhZDsKKwlmb3JtYXQuZm9ybWF0LndpZHRoID0gZHJt X3BpcGUtPndpZHRoOworCWZvcm1hdC5mb3JtYXQuaGVpZ2h0ID0gZHJtX3BpcGUtPmhlaWdodDsK Kwlmb3JtYXQuZm9ybWF0LmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCisJcmV0ID0gdjRsMl9z dWJkZXZfY2FsbCgmcGlwZS0+YnJ1LT5zdWJkZXYsIHBhZCwgc2V0X2ZtdCwgTlVMTCwKKwkJCSAg ICAgICAmZm9ybWF0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldl9kYmco dnNwMS0+ZGV2LCAiJXM6IHNldCBmb3JtYXQgJXV4JXUgKCV4KSBvbiAlcyBwYWQgJXVcbiIsCisJ CV9fZnVuY19fLCBmb3JtYXQuZm9ybWF0LndpZHRoLCBmb3JtYXQuZm9ybWF0LmhlaWdodCwKKwkJ Zm9ybWF0LmZvcm1hdC5jb2RlLCBCUlVfTkFNRShwaXBlLT5icnUpLCBwaXBlLT5icnUtPnNvdXJj ZV9wYWQpOworCisJaWYgKGZvcm1hdC5mb3JtYXQud2lkdGggIT0gZHJtX3BpcGUtPndpZHRoIHx8 CisJICAgIGZvcm1hdC5mb3JtYXQuaGVpZ2h0ICE9IGRybV9waXBlLT5oZWlnaHQpIHsKKwkJZGV2 X2RiZyh2c3AxLT5kZXYsICIlczogZm9ybWF0IG1pc21hdGNoXG4iLCBfX2Z1bmNfXyk7CisJCXJl dHVybiAtRVBJUEU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQg cnBmX3pwb3Moc3RydWN0IHZzcDFfZGV2aWNlICp2c3AxLCBzdHJ1Y3QgdnNwMV9yd3BmICpycGYp CiB7CiAJcmV0dXJuIHZzcDEtPmRybS0+aW5wdXRzW3JwZi0+ZW50aXR5LmluZGV4XS56cG9zOwog fQogCi0vKiBTZXR1cCB0aGUgaW5wdXQgc2lkZSBvZiB0aGUgcGlwZWxpbmUgKFJQRnMgYW5kIEJS VSBzaW5rIHBhZHMpLiAqLworLyogU2V0dXAgdGhlIGlucHV0IHNpZGUgb2YgdGhlIHBpcGVsaW5l IChSUEZzIGFuZCBCUlUpLiAqLwogc3RhdGljIGludCB2c3AxX2R1X3BpcGVsaW5lX3NldHVwX2lu cHV0KHN0cnVjdCB2c3AxX2RldmljZSAqdnNwMSwKIAkJCQkJc3RydWN0IHZzcDFfcGlwZWxpbmUg KnBpcGUpCiB7CkBAIC0xOTEsNiArMjMwLDE4IEBAIHN0YXRpYyBpbnQgdnNwMV9kdV9waXBlbGlu ZV9zZXR1cF9pbnB1dChzdHJ1Y3QgdnNwMV9kZXZpY2UgKnZzcDEsCiAJCWlucHV0c1tqXSA9IHJw ZjsKIAl9CiAKKwkvKgorCSAqIFNldHVwIHRoZSBCUlUuIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9y ZSBzZXR0aW5nIHVwIHRoZSBSUEYgaW5wdXQKKwkgKiBwaXBlbGluZXMgYXMgdGhlIEJSVSBzaW5r IGNvbXBvc2UgcmVjdGFuZ2xlcyBkZXBlbmQgb24gdGhlIEJSVSBzb3VyY2UKKwkgKiBmb3JtYXQu CisJICovCisJcmV0ID0gdnNwMV9kdV9waXBlbGluZV9zZXR1cF9icnUodnNwMSwgcGlwZSk7CisJ aWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycih2c3AxLT5kZXYsICIlczogZmFpbGVkIHRvIHNldHVw ICVzIHNvdXJjZVxuIiwgX19mdW5jX18sCisJCQlCUlVfTkFNRShwaXBlLT5icnUpKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKIAkvKiBTZXR1cCB0aGUgUlBGIGlucHV0IHBpcGVsaW5lIGZvciBldmVy eSBlbmFibGVkIGlucHV0LiAqLwogCWZvciAoaSA9IDA7IGkgPCBwaXBlLT5icnUtPnNvdXJjZV9w YWQ7ICsraSkgewogCQlzdHJ1Y3QgdnNwMV9yd3BmICpycGYgPSBpbnB1dHNbaV07CkBAIC0zNTUs NiArNDA2LDkgQEAgaW50IHZzcDFfZHVfc2V0dXBfbGlmKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5z aWduZWQgaW50IHBpcGVfaW5kZXgsCiAJCXJldHVybiAwOwogCX0KIAorCWRybV9waXBlLT53aWR0 aCA9IGNmZy0+d2lkdGg7CisJZHJtX3BpcGUtPmhlaWdodCA9IGNmZy0+aGVpZ2h0OworCiAJZGV2 X2RiZyh2c3AxLT5kZXYsICIlczogY29uZmlndXJpbmcgTElGJXUgd2l0aCBmb3JtYXQgJXV4JXVc biIsCiAJCV9fZnVuY19fLCBwaXBlX2luZGV4LCBjZmctPndpZHRoLCBjZmctPmhlaWdodCk7CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2RybS5oIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZHJtLmgKaW5kZXggOWFhMTkzMjVjYmU5Li5j OGRkNzViYTAxZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X2RybS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2RybS5oCkBAIC0y MCwxMiArMjAsMTcgQEAKIC8qKgogICogdnNwMV9kcm1fcGlwZWxpbmUgLSBTdGF0ZSBmb3IgdGhl IEFQSSBleHBvc2VkIHRvIHRoZSBEUk0gZHJpdmVyCiAgKiBAcGlwZTogdGhlIFZTUDEgcGlwZWxp bmUgdXNlZCBmb3IgZGlzcGxheQorICogQHdpZHRoOiBvdXRwdXQgZGlzcGxheSB3aWR0aAorICog QGhlaWdodDogb3V0cHV0IGRpc3BsYXkgaGVpZ2h0CiAgKiBAZHVfY29tcGxldGU6IGZyYW1lIGNv bXBsZXRpb24gY2FsbGJhY2sgZm9yIHRoZSBEVSBkcml2ZXIgKG9wdGlvbmFsKQogICogQGR1X3By aXZhdGU6IGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBkdV9jb21wbGV0ZSBjYWxsYmFjawogICov CiBzdHJ1Y3QgdnNwMV9kcm1fcGlwZWxpbmUgewogCXN0cnVjdCB2c3AxX3BpcGVsaW5lIHBpcGU7 CiAKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKKwogCS8qIEZy YW1lIHN5bmNocm9uaXNhdGlvbiAqLwogCXZvaWQgKCpkdV9jb21wbGV0ZSkodm9pZCAqLCBib29s KTsKIAl2b2lkICpkdV9wcml2YXRlOwotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=