From patchwork Mon Aug 13 14:50:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957006 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="mCLvrts5"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDT736Kz9s9l for ; Tue, 14 Aug 2018 00:50:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729479AbeHMRdI (ORCPT ); Mon, 13 Aug 2018 13:33:08 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:40357 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728455AbeHMRdH (ORCPT ); Mon, 13 Aug 2018 13:33:07 -0400 Received: by mail-wm0-f65.google.com with SMTP id y9-v6so9156252wma.5; Mon, 13 Aug 2018 07:50:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KHe8/PwxOQLW9WoOgIew5iCP7cTie3eNqs43MXG4ubE=; b=mCLvrts5AhjIuxD9ZYbSPS0EmcEpPU8yTF7O4IKABP1l4N7KiMevOHqOJv1yNHZdkS FDprOHc3edlSOHixduGhnA8j1ONiI4JvEmZcQa9RMmkSPXXBW3FsvZWTekFJQpnJsi29 5lMKrvec07+G5faPwmSDUVE+PKxu8tcXrYknsGVwQicQvw19Dxeivsv/B93L7OEwq5uq rLkGcrdjqDPq70cxJvjw2RPZYHgYvsID5VZsRsi19dmwifMHHUyzmsee2HI3Y8obE0ZH 8TILguLEdiCuMS0YzTFKgpDE9fMXzprbBfdnliKAy5i8QFFig9412yx28mKd9Zm1SGaI 6o4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KHe8/PwxOQLW9WoOgIew5iCP7cTie3eNqs43MXG4ubE=; b=mYszdtB4DjPToEX0CsPLmQuHNlyYXfmzrUcVzAi+DiZ5ELFnMNIHYHrwu3rvBhl4Yb I7G+J+vT7aVCmTbz1Huh/Mj++NmH3sDQ8rMnuRVAoRJsaVS4WPlMUXnriS4R/rznuL+r EFWXi/h7nmdzihNQn0b7nAPGiTtaeTurq/niSsCCfP10li6S+3F1sN1cWgaZFSs658ox RbMMXBQN8u9FN6iF9i/ljr1Ap9mHCzxW2CRnyVZWX91F8Jj2ela8TeUu6tIMyEK80t3B CnI+E+icEgk2vVlTKXHm+Iy3QSxfvOMxUdImGUZxw1+4JVB+QNjEMz1YXADuH2ZFjvd0 BkJQ== X-Gm-Message-State: AOUpUlFGZH+Qiddrfo4d+Ky2xxsjz8dFSj/msdxL0U/dY6B0PoWoUJ65 Aa1N6xUm6kUnjE3GyT1zrZ0= X-Google-Smtp-Source: AA+uWPysTX+othxSUkaojnmxY5aSm0AdLgum1hL5RwHCJvx23pr0YWs7dM1UOf2i9zm+DEEfhHCa2w== X-Received: by 2002:a1c:a703:: with SMTP id q3-v6mr8512003wme.28.1534171830894; Mon, 13 Aug 2018 07:50:30 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id e133-v6sm24172251wma.33.2018.08.13.07.50.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:29 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 01/14] staging: media: tegra-vde: Support BSEV clock and reset Date: Mon, 13 Aug 2018 16:50:14 +0200 Message-Id: <20180813145027.16346-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding The BSEV clock has a separate gate bit and can not be assumed to be always enabled. Add explicit handling for the BSEV clock and reset. This fixes an issue on Tegra124 where the BSEV clock is not enabled by default and therefore accessing the BSEV registers will hang the CPU if the BSEV clock is not enabled and the reset not deasserted. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 35 +++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 6f06061a40d9..9d8f833744db 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -74,9 +74,11 @@ struct tegra_vde { struct miscdevice miscdev; struct reset_control *rst; struct reset_control *rst_mc; + struct reset_control *rst_bsev; struct gen_pool *iram_pool; struct completion decode_completion; struct clk *clk; + struct clk *clk_bsev; dma_addr_t iram_lists_addr; u32 *iram; }; @@ -979,6 +981,11 @@ static int tegra_vde_runtime_suspend(struct device *dev) return err; } + reset_control_assert(vde->rst_bsev); + + usleep_range(2000, 4000); + + clk_disable_unprepare(vde->clk_bsev); clk_disable_unprepare(vde->clk); return 0; @@ -996,6 +1003,16 @@ static int tegra_vde_runtime_resume(struct device *dev) return err; } + err = clk_prepare_enable(vde->clk_bsev); + if (err < 0) + return err; + + err = reset_control_deassert(vde->rst_bsev); + if (err < 0) + return err; + + usleep_range(2000, 4000); + return 0; } @@ -1084,14 +1101,21 @@ static int tegra_vde_probe(struct platform_device *pdev) if (IS_ERR(vde->frameid)) return PTR_ERR(vde->frameid); - vde->clk = devm_clk_get(dev, NULL); + vde->clk = devm_clk_get(dev, "vde"); if (IS_ERR(vde->clk)) { err = PTR_ERR(vde->clk); dev_err(dev, "Could not get VDE clk %d\n", err); return err; } - vde->rst = devm_reset_control_get(dev, NULL); + vde->clk_bsev = devm_clk_get(dev, "bsev"); + if (IS_ERR(vde->clk_bsev)) { + err = PTR_ERR(vde->clk_bsev); + dev_err(dev, "failed to get BSEV clock: %d\n", err); + return err; + } + + vde->rst = devm_reset_control_get(dev, "vde"); if (IS_ERR(vde->rst)) { err = PTR_ERR(vde->rst); dev_err(dev, "Could not get VDE reset %d\n", err); @@ -1105,6 +1129,13 @@ static int tegra_vde_probe(struct platform_device *pdev) return err; } + vde->rst_bsev = devm_reset_control_get(dev, "bsev"); + if (IS_ERR(vde->rst_bsev)) { + err = PTR_ERR(vde->rst_bsev); + dev_err(dev, "failed to get BSEV reset: %d\n", err); + return err; + } + irq = platform_get_irq_byname(pdev, "sync-token"); if (irq < 0) return irq; From patchwork Mon Aug 13 14:50:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957007 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nNgXmb+R"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDW0ZYVz9s0n for ; Tue, 14 Aug 2018 00:50:35 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728455AbeHMRdJ (ORCPT ); Mon, 13 Aug 2018 13:33:09 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:41483 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbeHMRdJ (ORCPT ); Mon, 13 Aug 2018 13:33:09 -0400 Received: by mail-wr1-f68.google.com with SMTP id j5-v6so14502373wrr.8; Mon, 13 Aug 2018 07:50:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=qteDYzDiZnQwAn/X/LOGGxYHV1w214Lzas2eOt+wqfY=; b=nNgXmb+RscTGyXJRQHBgNdQnUAO4m8PCU8+/v9n1/FLH5fKPvBU545zPyHkEzgk55Z ff9U9p03hsSPLRFGAf5AgnwK9XJHdZ2RrUxWMvLPnBp2oJdrVZF+f8O6wyNMqqbTA5bF uRAP9+lxgiTZK6RuiUCOsfCYUrL/6lNjbhrU8Q6MFeSLoFaGJ5OBkPkCIeOmckZu6MV1 chbiQyWrgPmdtD5m60UHxSbvjlUmBbCGES2FXqfnpLUTMQbvSytxDshG4cRVw9jANGhm QXGL/iRP65216AvJNormrIx0gevfJ/EsbCwz4Nq3BzBBXsZgTx5Sb1XVYzPeOwyg3n94 6j1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=qteDYzDiZnQwAn/X/LOGGxYHV1w214Lzas2eOt+wqfY=; b=sdc42gUs1rm2DI77aTpztnLE2jBzawaYP4b2tl5R0/882ygfICXiAAJtcIZSWhujTZ Sy3G4utkbXl1xD0cRHzhO4tNNoKpaOLVa3Q5wS1Jy1EhJW2CsKjvMsUz9Mhkeujzl5LR 0LJFgZWEY6MQSazg6eiE3543nRkyPwjeDw6ccC0O+3/xZ5R+WsQl6hqNCl/B+EfAHydi /VSYZ/iviB3DAaWoiL+nEezCF4mM3wEdmg6WJYkJzudt8kOpRNQ4eE8o2wZr+ToOS1tS boM+ezugXQ24NnAW1yvHriMSPAFHJz5K/AhBKqiynKU0JbyzgaLAagM5YVZlWPEaTr8M fB3A== X-Gm-Message-State: AOUpUlGnrEOGSFQZItLkyOuhn0XFikW51Ju6m6qqcwoVQmNdLxLy3W35 IpAhTPKnZAmJSGeHRUqUT0c= X-Google-Smtp-Source: AA+uWPwzlEr2BMwVpeuzjO8FSfafEksxOXJyAQpxqsQb/0N8/aMLUuh4Iz1roFh5DxNbHEqhd/Y2Pw== X-Received: by 2002:adf:ae01:: with SMTP id x1-v6mr11210731wrc.45.1534171832511; Mon, 13 Aug 2018 07:50:32 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id t5-v6sm27621596wrm.80.2018.08.13.07.50.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:31 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 02/14] staging: media: tegra-vde: Support reference picture marking Date: Mon, 13 Aug 2018 16:50:15 +0200 Message-Id: <20180813145027.16346-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Tegra114 and Tegra124 support reference picture marking, which will cause BSEV to write picture marking data to SDRAM. Make sure there is a valid destination address for that data to avoid error messages from the memory controller. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 54 ++++++++++++++++++++- drivers/staging/media/tegra-vde/uapi.h | 3 ++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 9d8f833744db..3027b11b11ae 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -60,7 +60,12 @@ struct video_frame { u32 flags; }; +struct tegra_vde_soc { + bool supports_ref_pic_marking; +}; + struct tegra_vde { + const struct tegra_vde_soc *soc; void __iomem *sxe; void __iomem *bsev; void __iomem *mbe; @@ -330,6 +335,7 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, struct video_frame *dpb_frames, dma_addr_t bitstream_data_addr, size_t bitstream_data_size, + dma_addr_t secure_addr, unsigned int macroblocks_nb) { struct device *dev = vde->miscdev.parent; @@ -454,6 +460,9 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, VDE_WR(bitstream_data_addr, vde->sxe + 0x6C); + if (vde->soc->supports_ref_pic_marking) + VDE_WR(secure_addr, vde->sxe + 0x7c); + value = 0x10000005; value |= ctx->pic_width_in_mbs << 11; value |= ctx->pic_height_in_mbs << 3; @@ -772,12 +781,15 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, struct tegra_vde_h264_frame __user *frames_user; struct video_frame *dpb_frames; struct dma_buf_attachment *bitstream_data_dmabuf_attachment; - struct sg_table *bitstream_sgt; + struct dma_buf_attachment *secure_attachment = NULL; + struct sg_table *bitstream_sgt, *secure_sgt; enum dma_data_direction dma_dir; dma_addr_t bitstream_data_addr; + dma_addr_t secure_addr; dma_addr_t bsev_ptr; size_t lsize, csize; size_t bitstream_data_size; + size_t secure_size; unsigned int macroblocks_nb; unsigned int read_bytes; unsigned int cstride; @@ -803,6 +815,18 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, if (ret) return ret; + if (vde->soc->supports_ref_pic_marking) { + ret = tegra_vde_attach_dmabuf(dev, ctx.secure_fd, + ctx.secure_offset, 0, SZ_256, + &secure_attachment, + &secure_addr, + &secure_sgt, + &secure_size, + DMA_TO_DEVICE); + if (ret) + goto release_bitstream_dmabuf; + } + dpb_frames = kcalloc(ctx.dpb_frames_nb, sizeof(*dpb_frames), GFP_KERNEL); if (!dpb_frames) { @@ -876,6 +900,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, ret = tegra_vde_setup_hw_context(vde, &ctx, dpb_frames, bitstream_data_addr, bitstream_data_size, + secure_addr, macroblocks_nb); if (ret) goto put_runtime_pm; @@ -929,6 +954,10 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, kfree(dpb_frames); release_bitstream_dmabuf: + if (secure_attachment) + tegra_vde_detach_and_put_dmabuf(secure_attachment, secure_sgt, + DMA_TO_DEVICE); + tegra_vde_detach_and_put_dmabuf(bitstream_data_dmabuf_attachment, bitstream_sgt, DMA_TO_DEVICE); @@ -1029,6 +1058,8 @@ static int tegra_vde_probe(struct platform_device *pdev) platform_set_drvdata(pdev, vde); + vde->soc = of_device_get_match_data(&pdev->dev); + regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "sxe"); if (!regs) return -ENODEV; @@ -1258,8 +1289,27 @@ static const struct dev_pm_ops tegra_vde_pm_ops = { tegra_vde_pm_resume) }; +static const struct tegra_vde_soc tegra20_vde_soc = { + .supports_ref_pic_marking = false, +}; + +static const struct tegra_vde_soc tegra30_vde_soc = { + .supports_ref_pic_marking = false, +}; + +static const struct tegra_vde_soc tegra114_vde_soc = { + .supports_ref_pic_marking = true, +}; + +static const struct tegra_vde_soc tegra124_vde_soc = { + .supports_ref_pic_marking = true, +}; + static const struct of_device_id tegra_vde_of_match[] = { - { .compatible = "nvidia,tegra20-vde", }, + { .compatible = "nvidia,tegra124-vde", .data = &tegra124_vde_soc }, + { .compatible = "nvidia,tegra114-vde", .data = &tegra114_vde_soc }, + { .compatible = "nvidia,tegra30-vde", .data = &tegra30_vde_soc }, + { .compatible = "nvidia,tegra20-vde", .data = &tegra20_vde_soc }, { }, }; MODULE_DEVICE_TABLE(of, tegra_vde_of_match); diff --git a/drivers/staging/media/tegra-vde/uapi.h b/drivers/staging/media/tegra-vde/uapi.h index a50c7bcae057..58bfd56de55e 100644 --- a/drivers/staging/media/tegra-vde/uapi.h +++ b/drivers/staging/media/tegra-vde/uapi.h @@ -35,6 +35,9 @@ struct tegra_vde_h264_decoder_ctx { __s32 bitstream_data_fd; __u32 bitstream_data_offset; + __s32 secure_fd; + __u32 secure_offset; + __u64 dpb_frames_ptr; __u8 dpb_frames_nb; __u8 dpb_ref_frames_with_earlier_poc_nb; From patchwork Mon Aug 13 14:50:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957008 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="f8TlSsOy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDZ3K99z9s0n for ; Tue, 14 Aug 2018 00:50:38 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729726AbeHMRdM (ORCPT ); Mon, 13 Aug 2018 13:33:12 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:50715 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbeHMRdM (ORCPT ); Mon, 13 Aug 2018 13:33:12 -0400 Received: by mail-wm0-f65.google.com with SMTP id s12-v6so9178856wmc.0; Mon, 13 Aug 2018 07:50:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QjNqAjneRCpCt+DzZPOWHed3I+7iqnRlc+xsP/y66Y4=; b=f8TlSsOyVYVGOLM2OpEMmI8O8vf7cjK8cF0+PSDfqH82UKAaWxKRSiAIebvc7DkYnU 11pCnpmWe8uyRfHXV+EKdx7+eG7YCIEjhoUHbsP4PBy1vXaWuOUgMu4IKuskxmMpaMVu d423zHopdYlX9I5Nrb5YgM2R7HWurhKUc9RKRA/3DPA7HNb9dYMTBYbBHfewr+BaCO6q vAe7q34VOYpW8DTVxSM67c4oaD6KcFB1U7wEQGZPVNhH7+tcGRoUiZEM3e7ikHwHivqh 96OrASXm/K+Nxvkrh/0CHNhR49iojF6bIo36/MM3AnE2Sg96cGwukhNPRHGvQwyytbUf wVmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QjNqAjneRCpCt+DzZPOWHed3I+7iqnRlc+xsP/y66Y4=; b=rwG4HKiLdN7ZuSiz+L+6YvDDrFr2mLcgjLKdzZWelv6UvXiYEOdqaNPOkm3FLOIT+Y QZuPY92QFn4aj+7/lnoJa9bkkKFm4OhQZq2M+nHbohU9SExB5Y0i0iVV7aMkVTUyW/nO /a4soOEAiiApcAcC/GsfCe6Irq5ibwRuI6AOXdC7/kCR0GcwrWu3hN2X5v6LM7G/K3/+ 7+FxBSdEZKAD4vOzntrVUhP/iJG3fjYPi4x8m57uiJ5ZplbePAo2WHyYLgTaEO7kVY6G VeIZ3gvY8gCZlzrvF52X71xVxxztLoyFtY/J1gy2dCJj83Uoe9izm5ASexzzEWAYyIaj uQ7w== X-Gm-Message-State: AOUpUlHHQdi/AQKxZsAUblxw3cNXEhxT/UzecPu6l4RCaWowWUssz/32 F6WuWcFTPmaeMVUr53KYXag= X-Google-Smtp-Source: AA+uWPxTzie2azwjw/0uON4OPfEi4Tiwz4LKYVZoFr3gKyFKixxmcMqD7RW+6uHVWtvinrkHHKYMNw== X-Received: by 2002:a1c:7908:: with SMTP id l8-v6mr5614237wme.80.1534171834263; Mon, 13 Aug 2018 07:50:34 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id t186-v6sm11545488wmf.14.2018.08.13.07.50.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:33 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 03/14] staging: media: tegra-vde: Prepare for interlacing support Date: Mon, 13 Aug 2018 16:50:16 +0200 Message-Id: <20180813145027.16346-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding The number of frames doubles when decoding interlaced content and the structures describing the frames double in size. Take that into account to prepare for interlacing support. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 73 ++++++++++++++++----- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 3027b11b11ae..1a40f6dff7c8 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -61,7 +61,9 @@ struct video_frame { }; struct tegra_vde_soc { + unsigned int num_ref_pics; bool supports_ref_pic_marking; + bool supports_interlacing; }; struct tegra_vde { @@ -205,8 +207,12 @@ static void tegra_vde_setup_frameid(struct tegra_vde *vde, u32 cr_addr = frame ? frame->cr_addr : 0x6CDEAD00; u32 value1 = frame ? ((mbs_width << 16) | mbs_height) : 0; u32 value2 = frame ? ((((mbs_width + 1) >> 1) << 6) | 1) : 0; + u32 value = y_addr >> 8; - VDE_WR(y_addr >> 8, vde->frameid + 0x000 + frameid * 4); + if (vde->soc->supports_interlacing) + value |= BIT(31); + + VDE_WR(value, vde->frameid + 0x000 + frameid * 4); VDE_WR(cb_addr >> 8, vde->frameid + 0x100 + frameid * 4); VDE_WR(cr_addr >> 8, vde->frameid + 0x180 + frameid * 4); VDE_WR(value1, vde->frameid + 0x080 + frameid * 4); @@ -229,20 +235,23 @@ static void tegra_setup_frameidx(struct tegra_vde *vde, } static void tegra_vde_setup_iram_entry(struct tegra_vde *vde, + unsigned int num_ref_pics, unsigned int table, unsigned int row, u32 value1, u32 value2) { + unsigned int entries = num_ref_pics * 2; u32 *iram_tables = vde->iram; dev_dbg(vde->miscdev.parent, "IRAM table %u: row %u: 0x%08X 0x%08X\n", table, row, value1, value2); - iram_tables[0x20 * table + row * 2] = value1; - iram_tables[0x20 * table + row * 2 + 1] = value2; + iram_tables[entries * table + row * 2] = value1; + iram_tables[entries * table + row * 2 + 1] = value2; } static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, + unsigned int num_ref_pics, struct video_frame *dpb_frames, unsigned int ref_frames_nb, unsigned int with_earlier_poc_nb) @@ -251,13 +260,17 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, u32 value, aux_addr; int with_later_poc_nb; unsigned int i, k; + size_t size; + + size = num_ref_pics * 4 * 8; + memset(vde->iram, 0, size); dev_dbg(vde->miscdev.parent, "DPB: Frame 0: frame_num = %d\n", dpb_frames[0].frame_num); dev_dbg(vde->miscdev.parent, "REF L0:\n"); - for (i = 0; i < 16; i++) { + for (i = 0; i < num_ref_pics; i++) { if (i < ref_frames_nb) { frame = &dpb_frames[i + 1]; @@ -277,10 +290,14 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, value = 0; } - tegra_vde_setup_iram_entry(vde, 0, i, value, aux_addr); - tegra_vde_setup_iram_entry(vde, 1, i, value, aux_addr); - tegra_vde_setup_iram_entry(vde, 2, i, value, aux_addr); - tegra_vde_setup_iram_entry(vde, 3, i, value, aux_addr); + tegra_vde_setup_iram_entry(vde, num_ref_pics, 0, i, value, + aux_addr); + tegra_vde_setup_iram_entry(vde, num_ref_pics, 1, i, value, + aux_addr); + tegra_vde_setup_iram_entry(vde, num_ref_pics, 2, i, value, + aux_addr); + tegra_vde_setup_iram_entry(vde, num_ref_pics, 3, i, value, + aux_addr); } if (!(dpb_frames[0].flags & FLAG_B_FRAME)) @@ -309,7 +326,8 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, "\tFrame %d: frame_num = %d\n", k + 1, frame->frame_num); - tegra_vde_setup_iram_entry(vde, 2, i, value, aux_addr); + tegra_vde_setup_iram_entry(vde, num_ref_pics, 2, i, value, + aux_addr); } for (k = 0; i < ref_frames_nb; i++, k++) { @@ -326,7 +344,8 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, "\tFrame %d: frame_num = %d\n", k + 1, frame->frame_num); - tegra_vde_setup_iram_entry(vde, 2, i, value, aux_addr); + tegra_vde_setup_iram_entry(vde, num_ref_pics, 2, i, value, + aux_addr); } } @@ -339,9 +358,20 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, unsigned int macroblocks_nb) { struct device *dev = vde->miscdev.parent; + unsigned int num_ref_pics = 16; + /* XXX extend ABI to provide this */ + bool interlaced = false; + size_t size; u32 value; int err; + if (vde->soc->supports_interlacing) { + if (interlaced) + num_ref_pics = vde->soc->num_ref_pics; + else + num_ref_pics = 16; + } + tegra_vde_set_bits(vde, 0x000A, vde->sxe + 0xF0); tegra_vde_set_bits(vde, 0x000B, vde->bsev + CMDQUE_CONTROL); tegra_vde_set_bits(vde, 0x8002, vde->mbe + 0x50); @@ -369,12 +399,12 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, VDE_WR(0x00000000, vde->bsev + 0x98); VDE_WR(0x00000060, vde->bsev + 0x9C); - memset(vde->iram + 128, 0, macroblocks_nb / 2); + memset(vde->iram + 1024, 0, macroblocks_nb / 2); tegra_setup_frameidx(vde, dpb_frames, ctx->dpb_frames_nb, ctx->pic_width_in_mbs, ctx->pic_height_in_mbs); - tegra_vde_setup_iram_tables(vde, dpb_frames, + tegra_vde_setup_iram_tables(vde, num_ref_pics, dpb_frames, ctx->dpb_frames_nb - 1, ctx->dpb_ref_frames_with_earlier_poc_nb); @@ -396,22 +426,27 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, if (err) return err; - err = tegra_vde_push_to_bsev_icmdqueue(vde, 0x800003FC, false); + value = (0x20 << 26) | (0 << 25) | ((4096 >> 2) & 0x1fff); + err = tegra_vde_push_to_bsev_icmdqueue(vde, value, false); if (err) return err; value = 0x01500000; - value |= ((vde->iram_lists_addr + 512) >> 2) & 0xFFFF; + value |= ((vde->iram_lists_addr + 1024) >> 2) & 0xffff; err = tegra_vde_push_to_bsev_icmdqueue(vde, value, true); if (err) return err; + value = (0x21 << 26) | ((240 & 0x1fff) << 12) | (0x54c & 0xfff); err = tegra_vde_push_to_bsev_icmdqueue(vde, 0x840F054C, false); if (err) return err; - err = tegra_vde_push_to_bsev_icmdqueue(vde, 0x80000080, false); + size = num_ref_pics * 4 * 8; + + value = (0x20 << 26) | (0x0 << 25) | ((size >> 2) & 0x1fff); + err = tegra_vde_push_to_bsev_icmdqueue(vde, value, false); if (err) return err; @@ -1290,19 +1325,27 @@ static const struct dev_pm_ops tegra_vde_pm_ops = { }; static const struct tegra_vde_soc tegra20_vde_soc = { + .num_ref_pics = 16, .supports_ref_pic_marking = false, + .supports_interlacing = false, }; static const struct tegra_vde_soc tegra30_vde_soc = { + .num_ref_pics = 32, .supports_ref_pic_marking = false, + .supports_interlacing = false, }; static const struct tegra_vde_soc tegra114_vde_soc = { + .num_ref_pics = 32, .supports_ref_pic_marking = true, + .supports_interlacing = false, }; static const struct tegra_vde_soc tegra124_vde_soc = { + .num_ref_pics = 32, .supports_ref_pic_marking = true, + .supports_interlacing = true, }; static const struct of_device_id tegra_vde_of_match[] = { From patchwork Mon Aug 13 14:50:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957009 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="U5FGGoxX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDb6Bplz9s9l for ; Tue, 14 Aug 2018 00:50:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729737AbeHMRdN (ORCPT ); Mon, 13 Aug 2018 13:33:13 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:33931 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729029AbeHMRdN (ORCPT ); Mon, 13 Aug 2018 13:33:13 -0400 Received: by mail-wr1-f66.google.com with SMTP id c13-v6so14555708wrt.1; Mon, 13 Aug 2018 07:50:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+gZJqHBkA0OkNnentN+O/obHj8dBBn6OViGFYjqoxY0=; b=U5FGGoxX2bIS1IEQOVefiOQxjdmvma1ot5RUDcQN+hBHP3xkFjPDPhhakY1ocydH7j ZmGpK4BZaT8aGvA2cKS2Z1pQm2Z1Ta7JStS3bplDRDwiI2P8O2/bLzV32p2bgTjoH675 /VpDiGOgEBx9p/fdgIMKWMpqA/8VtKhfBWpt+aJb4wBN9Oc8vkf1BhTpmvRCpBhJnasi sH0V40zzDFmrjkp+ZfKC+Y2fIcs2kC3z6u3ZDSBDr7qyCkwjn9h0qdy/KbmjwwU57o8p 4XaXByaWtoLpY1HRBrAzFWyoanzweKwGtEnUmlOjak90M4xz2DK6kco9P7InqR+DPX9X DSCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+gZJqHBkA0OkNnentN+O/obHj8dBBn6OViGFYjqoxY0=; b=FRAD3AnRP89fhZo8X1m9UkHcihx0O+Q/+92KEgdmvrOXLywptIbEBhu3xvxL7HOrDF K7PZu82jBoH/nOR20ADNBYt8iOJPTb5EoxWwYCionChMaO99nNHZk0yqYq6IKRb+yS1P pPEaRaOpgQ26rehgtfardM1V+4Fex+kIxRvbbA51DoPnKTjsBpBtTvUM6qCd5Qjwo2XE isvyyaZySp369l+nIH47Aw25iy/PQad8KVLc3bFX8l4AmOBUAylbNE29HUw0hqaCD7EW tQ2/91/Wc6Quqy+G6zw8hDdSFMcI1C+ktII+cGyEtEYEACknaTrMWrA46wbR3oAXDQ+g 1AsA== X-Gm-Message-State: AOUpUlFrWPYCFUntxNnAew5A5zFqgXjy4d/en0DZ5jIIzSJa+jk1+/9z vrmH1lRq2HAjfKno1dn90zc= X-Google-Smtp-Source: AA+uWPwSFzaBmalIcujxY2dMvA7PNb5svDyT0HLWwXfIQMpZZatcFjVxZloULyEYBEH6jztt1umxPQ== X-Received: by 2002:a5d:438d:: with SMTP id i13-v6mr11268409wrq.156.1534171836057; Mon, 13 Aug 2018 07:50:36 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id u7-v6sm19899072wmd.46.2018.08.13.07.50.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:35 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 04/14] staging: media: tegra-vde: Use DRM/KMS framebuffer modifiers Date: Mon, 13 Aug 2018 16:50:17 +0200 Message-Id: <20180813145027.16346-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding VDE on Tegra20 through Tegra114 supports reading and writing frames in 16x16 tiled layout. Similarily, the various block-linear layouts that are supported by the GPU on Tegra124 can also be read from and written to by the Tegra124 VDE. Enable userspace to specify the desired layout using the existing DRM framebuffer modifiers. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 112 +++++++++++++++++--- drivers/staging/media/tegra-vde/uapi.h | 3 +- 2 files changed, 100 insertions(+), 15 deletions(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 1a40f6dff7c8..275884e745df 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -24,6 +24,8 @@ #include +#include + #include "uapi.h" #define ICMDQUE_WR 0x00 @@ -58,12 +60,14 @@ struct video_frame { dma_addr_t aux_addr; u32 frame_num; u32 flags; + u64 modifier; }; struct tegra_vde_soc { unsigned int num_ref_pics; bool supports_ref_pic_marking; bool supports_interlacing; + bool supports_block_linear; }; struct tegra_vde { @@ -202,6 +206,7 @@ static void tegra_vde_setup_frameid(struct tegra_vde *vde, unsigned int frameid, u32 mbs_width, u32 mbs_height) { + u64 modifier = frame ? frame->modifier : DRM_FORMAT_MOD_LINEAR; u32 y_addr = frame ? frame->y_addr : 0x6CDEAD00; u32 cb_addr = frame ? frame->cb_addr : 0x6CDEAD00; u32 cr_addr = frame ? frame->cr_addr : 0x6CDEAD00; @@ -209,8 +214,12 @@ static void tegra_vde_setup_frameid(struct tegra_vde *vde, u32 value2 = frame ? ((((mbs_width + 1) >> 1) << 6) | 1) : 0; u32 value = y_addr >> 8; - if (vde->soc->supports_interlacing) + if (!vde->soc->supports_interlacing) { + if (modifier == DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED) + value |= BIT(31); + } else { value |= BIT(31); + } VDE_WR(value, vde->frameid + 0x000 + frameid * 4); VDE_WR(cb_addr >> 8, vde->frameid + 0x100 + frameid * 4); @@ -349,6 +358,37 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, } } +static int tegra_vde_get_block_height(u64 modifier, unsigned int *block_height) +{ + switch (modifier) { + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB: + *block_height = 0; + return 0; + + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB: + *block_height = 1; + return 0; + + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB: + *block_height = 2; + return 0; + + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB: + *block_height = 3; + return 0; + + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB: + *block_height = 4; + return 0; + + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB: + *block_height = 5; + return 0; + } + + return -EINVAL; +} + static int tegra_vde_setup_hw_context(struct tegra_vde *vde, struct tegra_vde_h264_decoder_ctx *ctx, struct video_frame *dpb_frames, @@ -383,7 +423,21 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, tegra_vde_set_bits(vde, 0x0005, vde->vdma + 0x04); VDE_WR(0x00000000, vde->vdma + 0x1C); - VDE_WR(0x00000000, vde->vdma + 0x00); + + value = 0x00000000; + + if (vde->soc->supports_block_linear) { + unsigned int block_height; + + err = tegra_vde_get_block_height(dpb_frames[0].modifier, + &block_height); + if (err < 0) + return err; + + value |= block_height << 10; + } + + VDE_WR(value, vde->vdma + 0x00); VDE_WR(0x00000007, vde->vdma + 0x04); VDE_WR(0x00000007, vde->frameid + 0x200); VDE_WR(0x00000005, vde->tfe + 0x04); @@ -730,11 +784,37 @@ static void tegra_vde_release_frame_dmabufs(struct video_frame *frame, static int tegra_vde_validate_frame(struct device *dev, struct tegra_vde_h264_frame *frame) { + struct tegra_vde *vde = dev_get_drvdata(dev); + if (frame->frame_num > 0x7FFFFF) { dev_err(dev, "Bad frame_num %u\n", frame->frame_num); return -EINVAL; } + if (vde->soc->supports_block_linear) { + switch (frame->modifier) { + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB: + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB: + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB: + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB: + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB: + case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB: + break; + + default: + return -EINVAL; + } + } else { + switch (frame->modifier) { + case DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED: + case DRM_FORMAT_MOD_LINEAR: + break; + + default: + return -EINVAL; + } + } + return 0; } @@ -812,7 +892,6 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, { struct device *dev = vde->miscdev.parent; struct tegra_vde_h264_decoder_ctx ctx; - struct tegra_vde_h264_frame frames[17]; struct tegra_vde_h264_frame __user *frames_user; struct video_frame *dpb_frames; struct dma_buf_attachment *bitstream_data_dmabuf_attachment; @@ -872,28 +951,30 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, macroblocks_nb = ctx.pic_width_in_mbs * ctx.pic_height_in_mbs; frames_user = u64_to_user_ptr(ctx.dpb_frames_ptr); - if (copy_from_user(frames, frames_user, - ctx.dpb_frames_nb * sizeof(*frames))) { - ret = -EFAULT; - goto free_dpb_frames; - } - cstride = ALIGN(ctx.pic_width_in_mbs * 8, 16); csize = cstride * ctx.pic_height_in_mbs * 8; lsize = macroblocks_nb * 256; for (i = 0; i < ctx.dpb_frames_nb; i++) { - ret = tegra_vde_validate_frame(dev, &frames[i]); + struct tegra_vde_h264_frame frame; + + if (copy_from_user(&frame, &frames_user[i], sizeof(frame))) { + ret = -EFAULT; + goto release_dpb_frames; + } + + ret = tegra_vde_validate_frame(dev, &frame); if (ret) goto release_dpb_frames; - dpb_frames[i].flags = frames[i].flags; - dpb_frames[i].frame_num = frames[i].frame_num; + dpb_frames[i].flags = frame.flags; + dpb_frames[i].frame_num = frame.frame_num; + dpb_frames[i].modifier = frame.modifier; dma_dir = (i == 0) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; ret = tegra_vde_attach_dmabufs_to_frame(dev, &dpb_frames[i], - &frames[i], dma_dir, + &frame, dma_dir, ctx.baseline_profile, lsize, csize); if (ret) @@ -985,7 +1066,6 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, ctx.baseline_profile); } -free_dpb_frames: kfree(dpb_frames); release_bitstream_dmabuf: @@ -1328,24 +1408,28 @@ static const struct tegra_vde_soc tegra20_vde_soc = { .num_ref_pics = 16, .supports_ref_pic_marking = false, .supports_interlacing = false, + .supports_block_linear = false, }; static const struct tegra_vde_soc tegra30_vde_soc = { .num_ref_pics = 32, .supports_ref_pic_marking = false, .supports_interlacing = false, + .supports_block_linear = false, }; static const struct tegra_vde_soc tegra114_vde_soc = { .num_ref_pics = 32, .supports_ref_pic_marking = true, .supports_interlacing = false, + .supports_block_linear = false, }; static const struct tegra_vde_soc tegra124_vde_soc = { .num_ref_pics = 32, .supports_ref_pic_marking = true, .supports_interlacing = true, + .supports_block_linear = true, }; static const struct of_device_id tegra_vde_of_match[] = { diff --git a/drivers/staging/media/tegra-vde/uapi.h b/drivers/staging/media/tegra-vde/uapi.h index 58bfd56de55e..6cd730dda61c 100644 --- a/drivers/staging/media/tegra-vde/uapi.h +++ b/drivers/staging/media/tegra-vde/uapi.h @@ -27,8 +27,9 @@ struct tegra_vde_h264_frame { __u32 aux_offset; __u32 frame_num; __u32 flags; + __u64 modifier; - __u32 reserved; + __u32 reserved[4]; } __attribute__((packed)); struct tegra_vde_h264_decoder_ctx { From patchwork Mon Aug 13 14:50:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957010 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="FWPDHh16"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDd0VKlz9s0n for ; Tue, 14 Aug 2018 00:50:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729740AbeHMRdO (ORCPT ); Mon, 13 Aug 2018 13:33:14 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:39561 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbeHMRdO (ORCPT ); Mon, 13 Aug 2018 13:33:14 -0400 Received: by mail-wm0-f68.google.com with SMTP id q8-v6so9151848wmq.4; Mon, 13 Aug 2018 07:50:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=C0+GgP3njwNT2n/n/JNZhHW4depIkTqvZwC6lTS5aSs=; b=FWPDHh16hhRA6EiMCGSEPFpX4m6hN5MM7x0/2z4WAqml+J2TWHfJxJtkO+aEKfbyVE u2lXqe8ykNyk2fErYLTSz8RrY7cLvQ7UbRdh8ub4fyveL4+Wy0cLxuxM1Uu5GqJ9hDzn KgdCRekvYJDpAgY2hEO2lPBjzNuMdRiG7Ei3On2hE2iaUZaxL2pfeadzcGrxnsD4EbPi 1tYHr9bqpgkyEgPSRPQDK/xI+4+E9/xZEaAidzsaYvfMtY3MAR1ZvR7kavY3iJJmRDP1 F9K+dwfB1veR092qsS6v40HWiMCl72S+P4EQlxmabMrvVV9ND9mC3G5tgE3ga+R23eWa lw4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=C0+GgP3njwNT2n/n/JNZhHW4depIkTqvZwC6lTS5aSs=; b=beOdZcDDdvkDffZA7wGExooFTsp2hwxle0CWei67DqWzS6mTRGG942sXUUBNqkVXMl Kx5OETCeV/A0y444cz6I0wRN9Q8KhyQefk8CFOvPl2kMDpD57NC2m0/7z+UN9jer6FwV JqZqh1mr+IFyX/U/XCibxFvSuCb0swvZNT/nVKLq+JxOa1vWMcraeKNeyQtZBlZMcbfH /smK4YuleP8zYUPGRCB0UxiQEnuKVHa8dhgr8cnId7K0ROXVbSd/j/ol0abRSlb5hjGz bgDV2nzBm7Lfn6nlBE1nkHf/+EwDs9sQowNXCS3Zb8UFphYRBC7+qGf7E3cy8z2N1t73 a6pA== X-Gm-Message-State: AOUpUlFZ4IR0wILCPdMkybV4yxCFWXaA/F505+vTLqPDf5CipJ0Q6aZH gbULX+0JtCVV695otXbYW78= X-Google-Smtp-Source: AA+uWPxG1BSqZe4rqoIPBcy+MQ6Xus105VbVqkNzytmSeJSocCE7r/rwOeoodpisD8Dsy/2YRJkdEg== X-Received: by 2002:a1c:7d47:: with SMTP id y68-v6mr7875710wmc.62.1534171837787; Mon, 13 Aug 2018 07:50:37 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id z11-v6sm22356721wrm.94.2018.08.13.07.50.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:36 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 05/14] staging: media: tegra-vde: Properly mark invalid entries Date: Mon, 13 Aug 2018 16:50:18 +0200 Message-Id: <20180813145027.16346-6-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Entries in the reference picture list are marked as invalid by setting the frame ID to 0x3f. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko Tested-by: Dmitry Osipenko --- drivers/staging/media/tegra-vde/tegra-vde.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 275884e745df..0ce30c7ccb75 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -296,7 +296,7 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, (frame->flags & FLAG_B_FRAME)); } else { aux_addr = 0x6ADEAD00; - value = 0; + value = 0x3f; } tegra_vde_setup_iram_entry(vde, num_ref_pics, 0, i, value, From patchwork Mon Aug 13 14:50:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957011 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vLnB7SA7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDd6pSmz9s9l for ; Tue, 14 Aug 2018 00:50:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729852AbeHMRdQ (ORCPT ); Mon, 13 Aug 2018 13:33:16 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:40368 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbeHMRdP (ORCPT ); Mon, 13 Aug 2018 13:33:15 -0400 Received: by mail-wm0-f67.google.com with SMTP id y9-v6so9156748wma.5; Mon, 13 Aug 2018 07:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=feg/t16e3qZNqFoVQBoPmdNwwv39cfp6pddCDmgqo8I=; b=vLnB7SA7zwYaj7mlIScJbDX8E2+sJZupuwtl8KmWxi0iFL05FKqV8ohFcQCs4gNM7v DPPEa86V4lf5RIu8FG4kZHg4giniShCMPUjnJfM/3np5Bh7AYAUrtGwquLnkLqAXP81M /zTJ/BfgNxywoJLw6tnJrrp28GT9N6V02xrmGK40Qp8XFYgO2DAcrxqeLjFJ/Su3vNnG zkN6f5E5+3uq1sVMNfmMod9k/pIkK4ZjBROCjbUQlL3dfnYOjfuzmS5sGmxON8jVvYtc KmduvcF4/o5UBIhuZCv8zpQqbHt1vOIm6SdX33vaxyoomxEPOt+zH6wg9CFDZZKqQkK6 SfDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=feg/t16e3qZNqFoVQBoPmdNwwv39cfp6pddCDmgqo8I=; b=rF+34/MFejO15TTkrGqKDkNVmxJqbljOVwDowjqUde6pv+59mWuhB0kWec0ebpiDmM XNJRCvKdfxmx14H+FEnA0zIZeXL9l6RTQLp9qGaJWisH/cs/HDWOtTqRVTSk/960nghJ XJIf/9dIizsPCAQsvZ4Oj0wPI7QsYGxia3Jp/1ck5WQt6S86C8yK9bsNPp4/KApzVC2V 1GnI5Mxxp0yctPJNAR0EYBckzFG/ltMFJ900ZIgZR2+ggwZF2xrIFsBIxaU5MBPrSvyZ EiG6maueImixcDWRyBDT4nF9AHEVoOdzUF74o4Y3YZi4a2PIvnATAR292bPZ0m92uYgG ATZA== X-Gm-Message-State: AOUpUlFiGRsD61uniGzvYEOAdpJKcBv4KVyaGdiG9mlmdSTAoHcJ8e5c Y6d+Pk7NHmDd4L8a3zuqCZ4= X-Google-Smtp-Source: AA+uWPxRgd5jdmoSYxxUgIgr2ul9gdVfBBiG+IFPVzMmq7ELL2bagQx6meZCiikeYvpSJ455BLwKeg== X-Received: by 2002:a1c:4143:: with SMTP id o64-v6mr8902327wma.123.1534171839477; Mon, 13 Aug 2018 07:50:39 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id u127-v6sm6555165wmf.48.2018.08.13.07.50.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:38 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 06/14] staging: media: tegra-vde: Print out invalid FD Date: Mon, 13 Aug 2018 16:50:19 +0200 Message-Id: <20180813145027.16346-7-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Include the invalid file descriptor when reporting an error message to help diagnosing why importing the buffer failed. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko --- drivers/staging/media/tegra-vde/tegra-vde.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 0ce30c7ccb75..0adc603fa437 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -643,7 +643,7 @@ static int tegra_vde_attach_dmabuf(struct device *dev, dmabuf = dma_buf_get(fd); if (IS_ERR(dmabuf)) { - dev_err(dev, "Invalid dmabuf FD\n"); + dev_err(dev, "Invalid dmabuf FD: %d\n", fd); return PTR_ERR(dmabuf); } From patchwork Mon Aug 13 14:50:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957012 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Nz8Nd8hZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDg6yLXz9s0n for ; Tue, 14 Aug 2018 00:50:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729106AbeHMRdS (ORCPT ); Mon, 13 Aug 2018 13:33:18 -0400 Received: from mail-wr1-f68.google.com ([209.85.221.68]:38990 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbeHMRdR (ORCPT ); Mon, 13 Aug 2018 13:33:17 -0400 Received: by mail-wr1-f68.google.com with SMTP id h10-v6so14508935wre.6; Mon, 13 Aug 2018 07:50:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IJtSFPbw65hsDLq3gAd+KoarZAwKlj9j7dR8oBCOojs=; b=Nz8Nd8hZrQv+pymO3aEyhANNHIByJJNhWpf2gR1b07em2b12f8MZSj2lAWKXFa4rry zsMnFUdIMILy4QRwT3zkimndmbnOHOw7kLtriz1yO2KbUgTKcUjimJrCTVsodjvorC7i m2G7m6w8+efCF+JDQRU3EEFs6BbGKZUzsyEHqNKumLZ6QNbUJ4Kf+/loetbh9e56R2Wp Z3wF5dpS5tIJaLDHoGrdLV8k2/qvXUQHgn4tk4zqZ5etnnTVFj/RMZOXN7A/MU/sVmsy waOJea/JMMd9KrcIpcdTJAq1NDJtV3LNZFNHKPGesC9/DDyx5wcUpV3DUjZKlav1iYqP VaSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IJtSFPbw65hsDLq3gAd+KoarZAwKlj9j7dR8oBCOojs=; b=tgyiUTiVeHYsO/rJIcd0Fawo654WnncxQ2031HEV5EziRtidVt9Gg9l5pqFKmxM7m+ lW5ZvXY2ACwI3ES6U1JCMWpvN4ELOEMyIeo0PBKCIjSxXfT03vxW9KlyMuUADQFMe/hu OK2vCkLjzHUEyG0E3vYvuq4nCykjqXeXDKdme+3OdmP60bErifbJfdyMk86tuNErohUk vdcN6zH5Oy5LQ+pW2H20a3IbL/q9wFpybfpuNGpEwDiiKdQ8VofBzGOKS1Q2Unj173Fb g5i4zK+/pPz3IMJjOm41qy5sSreWn9L+Ft/u104t6mMnBk7HU4zTSiaptmRK/M2TXO+i CWfw== X-Gm-Message-State: AOUpUlHC6qBaDOBVJSuAW8BoWdslLUlrX/C6Ek5vqt9DrEn36UMrwx1E vgpY9JA1sJ4XGirHgYAzVPkKH9FQ X-Google-Smtp-Source: AA+uWPyF9HYW9oCz0GOmfakFeBUgwak5Xrg8cXoJWkvrsiuUESnu+jp0MIZ1GanOO281hMQUA4JheQ== X-Received: by 2002:a5d:62c7:: with SMTP id o7-v6mr11821787wrv.83.1534171841217; Mon, 13 Aug 2018 07:50:41 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id j8-v6sm15707173wrp.11.2018.08.13.07.50.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:40 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 07/14] staging: media: tegra-vde: Add some clarifying comments Date: Mon, 13 Aug 2018 16:50:20 +0200 Message-Id: <20180813145027.16346-8-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Add some comments specifying what tables are being set up in VRAM. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 0adc603fa437..41cf86dc5dbd 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -271,6 +271,7 @@ static void tegra_vde_setup_iram_tables(struct tegra_vde *vde, unsigned int i, k; size_t size; + /* clear H256RefPicList */ size = num_ref_pics * 4 * 8; memset(vde->iram, 0, size); @@ -453,6 +454,7 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, VDE_WR(0x00000000, vde->bsev + 0x98); VDE_WR(0x00000060, vde->bsev + 0x9C); + /* clear H264MB2SliceGroupMap, assuming no FMO */ memset(vde->iram + 1024, 0, macroblocks_nb / 2); tegra_setup_frameidx(vde, dpb_frames, ctx->dpb_frames_nb, @@ -480,6 +482,8 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, if (err) return err; + /* upload H264MB2SliceGroupMap */ + /* XXX don't hardcode map size? */ value = (0x20 << 26) | (0 << 25) | ((4096 >> 2) & 0x1fff); err = tegra_vde_push_to_bsev_icmdqueue(vde, value, false); if (err) @@ -492,6 +496,7 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, if (err) return err; + /* clear H264MBInfo XXX don't hardcode size */ value = (0x21 << 26) | ((240 & 0x1fff) << 12) | (0x54c & 0xfff); err = tegra_vde_push_to_bsev_icmdqueue(vde, 0x840F054C, false); if (err) @@ -499,6 +504,16 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, size = num_ref_pics * 4 * 8; + /* clear H264RefPicList */ + /* + value = (0x21 << 26) | (((size >> 2) & 0x1fff) << 12) | 0xE34; + + err = tegra_vde_push_to_bsev_icmdqueue(vde, value, false); + if (err) + return err; + */ + + /* upload H264RefPicList */ value = (0x20 << 26) | (0x0 << 25) | ((size >> 2) & 0x1fff); err = tegra_vde_push_to_bsev_icmdqueue(vde, value, false); if (err) @@ -584,7 +599,11 @@ static int tegra_vde_setup_hw_context(struct tegra_vde *vde, tegra_vde_mbe_set_0xa_reg(vde, 0, 0x000009FC); tegra_vde_mbe_set_0xa_reg(vde, 2, 0x61DEAD00); +#if 0 + tegra_vde_mbe_set_0xa_reg(vde, 4, dpb_frames[0].aux_addr); /* 0x62DEAD00 */ +#else tegra_vde_mbe_set_0xa_reg(vde, 4, 0x62DEAD00); +#endif tegra_vde_mbe_set_0xa_reg(vde, 6, 0x63DEAD00); tegra_vde_mbe_set_0xa_reg(vde, 8, dpb_frames[0].aux_addr); From patchwork Mon Aug 13 14:50:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957013 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="QWYPnVdJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDk5T8Jz9s0n for ; Tue, 14 Aug 2018 00:50:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729902AbeHMRdU (ORCPT ); Mon, 13 Aug 2018 13:33:20 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:40009 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728547AbeHMRdU (ORCPT ); Mon, 13 Aug 2018 13:33:20 -0400 Received: by mail-wr1-f66.google.com with SMTP id h15-v6so14522627wrs.7; Mon, 13 Aug 2018 07:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UsYQ2TchnRpDlprCsFQeNiQOEjEFBEJTIWorlglSAC4=; b=QWYPnVdJ64WlHEVuAfzNyJLY6AglvkG6lE1ZaWOnroSydCC0awq2WzsuKeP29hQRXh pRpTjWUXofkHPtkGsWa3oKLGYWEzjBBRB3DsoMYEOErbvcvoQPbvq7JTSPO/6gY2tooS +nS8Hby9cuBwVb++npMCDKO+veiMdeLVy1Ab/AF60NROLYoF1ZNU2s3WGdGf/8P+JjfY A5ciR253vVJGwkPEuC3TQpHdZErRLo1+Vl1fJ+8CvjCw36Jr/1BBmx2EC0QHowRZ+Q7h +xKlC00qXc7l27AbgXuthLheUSna5syvPR2ry8a3ymgUZUyubYvFPkUufmheqmdJzemv 5rAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UsYQ2TchnRpDlprCsFQeNiQOEjEFBEJTIWorlglSAC4=; b=AZkAJrF/SyGQKQ3ILhYGmIZv20K8WK733mgVaq1Bx1l/4/gXGH+qQz5lBzwtoDF5Kh MVoiX+sF+XxbwOoPvL/8lI/IS1YkkAyEAiL2bH8DNQhEa9Vpvru5zFhIPHZnz0ywA5jd W/L5pFsVesD1DJp38w1rxTWeahD5PBlASQa2q84wj14+NDvuCT5wFHsyqCujjQ+5lSEA 08rP/ro1HGaE23mybHkXQjLSQz1RL8qjy2caV9slNoyQWaGTWyzmVvkRDheOE/Y5kgAo HidVFW8PRUl/k8aIs213uTKLmxcdIyaiTCVSCcuUCJsgAUl2m5J0p2MKzIolQLK+guNh qMtg== X-Gm-Message-State: AOUpUlHIYyjMSwRv3cy6Q1FvU5xig05Mdzyl21ybVff9lrRpnYw+hh2a dQJwaV6YkM/9Wyt6lClybmo= X-Google-Smtp-Source: AA+uWPwSSwT57oPnlGRIxmCLpUMS77tKV+yoXBCcKlz0slcuUfZKLVXkgQs1t7FWc6crSg9kWwB/TQ== X-Received: by 2002:adf:e642:: with SMTP id b2-v6mr11681090wrn.254.1534171843001; Mon, 13 Aug 2018 07:50:43 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id f8-v6sm17636663wrj.9.2018.08.13.07.50.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:42 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 08/14] staging: media: tegra-vde: Track struct device * Date: Mon, 13 Aug 2018 16:50:21 +0200 Message-Id: <20180813145027.16346-9-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding The pointer to the struct device is frequently used, so store it in struct tegra_vde. Also, pass around a pointer to a struct tegra_vde instead of struct device in some cases to prepare for subsequent patches referencing additional data from that structure. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko --- drivers/staging/media/tegra-vde/tegra-vde.c | 63 ++++++++++++--------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 41cf86dc5dbd..2496a03fd158 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -71,6 +71,7 @@ struct tegra_vde_soc { }; struct tegra_vde { + struct device *dev; const struct tegra_vde_soc *soc; void __iomem *sxe; void __iomem *bsev; @@ -644,7 +645,7 @@ static void tegra_vde_detach_and_put_dmabuf(struct dma_buf_attachment *a, dma_buf_put(dmabuf); } -static int tegra_vde_attach_dmabuf(struct device *dev, +static int tegra_vde_attach_dmabuf(struct tegra_vde *vde, int fd, unsigned long offset, size_t min_size, @@ -662,38 +663,40 @@ static int tegra_vde_attach_dmabuf(struct device *dev, dmabuf = dma_buf_get(fd); if (IS_ERR(dmabuf)) { - dev_err(dev, "Invalid dmabuf FD: %d\n", fd); + dev_err(vde->dev, "Invalid dmabuf FD: %d\n", fd); return PTR_ERR(dmabuf); } if (dmabuf->size & (align_size - 1)) { - dev_err(dev, "Unaligned dmabuf 0x%zX, should be aligned to 0x%zX\n", + dev_err(vde->dev, + "Unaligned dmabuf 0x%zX, should be aligned to 0x%zX\n", dmabuf->size, align_size); return -EINVAL; } if ((u64)offset + min_size > dmabuf->size) { - dev_err(dev, "Too small dmabuf size %zu @0x%lX, should be at least %zu\n", + dev_err(vde->dev, + "Too small dmabuf size %zu @0x%lX, should be at least %zu\n", dmabuf->size, offset, min_size); return -EINVAL; } - attachment = dma_buf_attach(dmabuf, dev); + attachment = dma_buf_attach(dmabuf, vde->dev); if (IS_ERR(attachment)) { - dev_err(dev, "Failed to attach dmabuf\n"); + dev_err(vde->dev, "Failed to attach dmabuf\n"); err = PTR_ERR(attachment); goto err_put; } sgt = dma_buf_map_attachment(attachment, dma_dir); if (IS_ERR(sgt)) { - dev_err(dev, "Failed to get dmabufs sg_table\n"); + dev_err(vde->dev, "Failed to get dmabufs sg_table\n"); err = PTR_ERR(sgt); goto err_detach; } if (sgt->nents != 1) { - dev_err(dev, "Sparse DMA region is unsupported\n"); + dev_err(vde->dev, "Sparse DMA region is unsupported\n"); err = -EINVAL; goto err_unmap; } @@ -717,7 +720,7 @@ static int tegra_vde_attach_dmabuf(struct device *dev, return err; } -static int tegra_vde_attach_dmabufs_to_frame(struct device *dev, +static int tegra_vde_attach_dmabufs_to_frame(struct tegra_vde *vde, struct video_frame *frame, struct tegra_vde_h264_frame *src, enum dma_data_direction dma_dir, @@ -726,7 +729,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct device *dev, { int err; - err = tegra_vde_attach_dmabuf(dev, src->y_fd, + err = tegra_vde_attach_dmabuf(vde, src->y_fd, src->y_offset, lsize, SZ_256, &frame->y_dmabuf_attachment, &frame->y_addr, @@ -735,7 +738,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct device *dev, if (err) return err; - err = tegra_vde_attach_dmabuf(dev, src->cb_fd, + err = tegra_vde_attach_dmabuf(vde, src->cb_fd, src->cb_offset, csize, SZ_256, &frame->cb_dmabuf_attachment, &frame->cb_addr, @@ -744,7 +747,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct device *dev, if (err) goto err_release_y; - err = tegra_vde_attach_dmabuf(dev, src->cr_fd, + err = tegra_vde_attach_dmabuf(vde, src->cr_fd, src->cr_offset, csize, SZ_256, &frame->cr_dmabuf_attachment, &frame->cr_addr, @@ -758,7 +761,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct device *dev, return 0; } - err = tegra_vde_attach_dmabuf(dev, src->aux_fd, + err = tegra_vde_attach_dmabuf(vde, src->aux_fd, src->aux_offset, csize, SZ_256, &frame->aux_dmabuf_attachment, &frame->aux_addr, @@ -770,33 +773,35 @@ static int tegra_vde_attach_dmabufs_to_frame(struct device *dev, return 0; err_release_cr: - tegra_vde_detach_and_put_dmabuf(frame->cr_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, frame->cr_dmabuf_attachment, frame->cr_sgt, dma_dir); err_release_cb: - tegra_vde_detach_and_put_dmabuf(frame->cb_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, frame->cb_dmabuf_attachment, frame->cb_sgt, dma_dir); err_release_y: - tegra_vde_detach_and_put_dmabuf(frame->y_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, frame->y_dmabuf_attachment, frame->y_sgt, dma_dir); return err; } -static void tegra_vde_release_frame_dmabufs(struct video_frame *frame, +static void tegra_vde_release_frame_dmabufs(struct tegra_vde *vde, + struct video_frame *frame, enum dma_data_direction dma_dir, bool baseline_profile) { if (!baseline_profile) - tegra_vde_detach_and_put_dmabuf(frame->aux_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, + frame->aux_dmabuf_attachment, frame->aux_sgt, dma_dir); - tegra_vde_detach_and_put_dmabuf(frame->cr_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, frame->cr_dmabuf_attachment, frame->cr_sgt, dma_dir); - tegra_vde_detach_and_put_dmabuf(frame->cb_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, frame->cb_dmabuf_attachment, frame->cb_sgt, dma_dir); - tegra_vde_detach_and_put_dmabuf(frame->y_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, frame->y_dmabuf_attachment, frame->y_sgt, dma_dir); } @@ -937,7 +942,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, if (ret) return ret; - ret = tegra_vde_attach_dmabuf(dev, ctx.bitstream_data_fd, + ret = tegra_vde_attach_dmabuf(vde, ctx.bitstream_data_fd, ctx.bitstream_data_offset, SZ_16K, SZ_16K, &bitstream_data_dmabuf_attachment, @@ -949,7 +954,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, return ret; if (vde->soc->supports_ref_pic_marking) { - ret = tegra_vde_attach_dmabuf(dev, ctx.secure_fd, + ret = tegra_vde_attach_dmabuf(vde, ctx.secure_fd, ctx.secure_offset, 0, SZ_256, &secure_attachment, &secure_addr, @@ -992,7 +997,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, dma_dir = (i == 0) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; - ret = tegra_vde_attach_dmabufs_to_frame(dev, &dpb_frames[i], + ret = tegra_vde_attach_dmabufs_to_frame(vde, &dpb_frames[i], &frame, dma_dir, ctx.baseline_profile, lsize, csize); @@ -1081,7 +1086,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, while (i--) { dma_dir = (i == 0) ? DMA_FROM_DEVICE : DMA_TO_DEVICE; - tegra_vde_release_frame_dmabufs(&dpb_frames[i], dma_dir, + tegra_vde_release_frame_dmabufs(vde, &dpb_frames[i], dma_dir, ctx.baseline_profile); } @@ -1089,10 +1094,12 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, release_bitstream_dmabuf: if (secure_attachment) - tegra_vde_detach_and_put_dmabuf(secure_attachment, secure_sgt, + tegra_vde_detach_and_put_dmabuf(vde, secure_attachment, + secure_sgt, DMA_TO_DEVICE); - tegra_vde_detach_and_put_dmabuf(bitstream_data_dmabuf_attachment, + tegra_vde_detach_and_put_dmabuf(vde, + bitstream_data_dmabuf_attachment, bitstream_sgt, DMA_TO_DEVICE); return ret; @@ -1190,6 +1197,8 @@ static int tegra_vde_probe(struct platform_device *pdev) if (!vde) return -ENOMEM; + vde->dev = &pdev->dev; + platform_set_drvdata(pdev, vde); vde->soc = of_device_get_match_data(&pdev->dev); From patchwork Mon Aug 13 14:50:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957014 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="YpPx2R6D"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDm54wgz9s0n for ; Tue, 14 Aug 2018 00:50:48 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729292AbeHMRdW (ORCPT ); Mon, 13 Aug 2018 13:33:22 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:54351 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729900AbeHMRdW (ORCPT ); Mon, 13 Aug 2018 13:33:22 -0400 Received: by mail-wm0-f65.google.com with SMTP id c14-v6so9156573wmb.4; Mon, 13 Aug 2018 07:50:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZzgC4hScJSyPZJWQ2HBQJb4bgjdwsFh317zQeqHCATE=; b=YpPx2R6Dfp6IqrF3hn0EA4tKOHkfDzD3Dg2LQ3vMjJW3tWUNyNZ4es4RzJH1Qmw3N0 3B44q6NfBSrTgnwFDXbvcnNjx/ekeIE6gLlHsRKVk+63dGkTryovkTdHn/31V6U2xzLO iACAjLi331RatmR2VgvL2s/nPpuXxhEq9GhQOfTOdEohaKX9VWNfHT3o2fYuxvshpmAv PxkL8OKT5lKF/SQLvOCqFHC8Op5XC1rVRev2HmnBfQMcxp2TTXRq8hbJDtdV9oWmOz+0 G7TQp3eypPOjVYAMLpsrqQuj5wFOCdQNX2xNJNz7BFiTaV9uLGUyhcYOnAPFdJEirL03 6XoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZzgC4hScJSyPZJWQ2HBQJb4bgjdwsFh317zQeqHCATE=; b=K4Cf2uGmvG9frQzBXWqutoFtfoIx98DDWO4I+tByiCjwhm7mVY4KVFE5m00JEEztlJ F8v8Il+HfDbeN1YLAxtyv0kM/yeXMI6Nu6NAq5QYYSD2mexhyxNQytGiPmJ7qVmTK0XD zi9Bb50W7xERs8vuSUxCU8ym2DPxGZRxbymSF9MN7OCDsENda1sXac/Oc5PRgJ6lNLYs TfNaESNckPfx4Pvw8V5aDreBgkHP72U3tOF3Sy0vFOv7Dtvqv+O0iDgC0B+IKmUY3qEw Rg5Eif6eO7974h1FnYX5nroazB/Cn5OBq4GLmtwCxIDUM6H7i9KNM8YNYFiCO2DUr/D+ AbWQ== X-Gm-Message-State: AOUpUlGT+IgDN6MCbQaYi4e0IBqWm1+JioPiWbceTwB+GWlb0awKZFSA Q2NQmQQ4JjMTHDwpuQ09I2k= X-Google-Smtp-Source: AA+uWPwIF8m5xYre6dtxgOgjotMsLP0g+ZpnY6F5zjoy2pliOoxMAAFCQ3Pxox/svdkFdhI6KeOhGA== X-Received: by 2002:a7b:c086:: with SMTP id r6-v6mr8049488wmh.119.1534171844886; Mon, 13 Aug 2018 07:50:44 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id m200-v6sm13374813wma.32.2018.08.13.07.50.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:43 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 09/14] staging: media: tegra-vde: Add IOMMU support Date: Mon, 13 Aug 2018 16:50:22 +0200 Message-Id: <20180813145027.16346-10-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Implement support for using an IOMMU to map physically discontiguous buffers into contiguous I/O virtual mappings that the VDE can use. This allows importing arbitrary DMA-BUFs for use by the VDE. While at it, make sure that the device is detached from any DMA/IOMMU mapping that it might have automatically been attached to at boot. If using the IOMMU API explicitly, detaching from any existing mapping is required to avoid double mapping of buffers. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 171 +++++++++++++++++--- 1 file changed, 153 insertions(+), 18 deletions(-) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 2496a03fd158..3bc0bfcfe34e 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -13,7 +13,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -22,6 +24,10 @@ #include #include +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU) +#include +#endif + #include #include @@ -61,6 +67,11 @@ struct video_frame { u32 frame_num; u32 flags; u64 modifier; + + struct iova *y_iova; + struct iova *cb_iova; + struct iova *cr_iova; + struct iova *aux_iova; }; struct tegra_vde_soc { @@ -93,6 +104,12 @@ struct tegra_vde { struct clk *clk_bsev; dma_addr_t iram_lists_addr; u32 *iram; + + struct iommu_domain *domain; + struct iommu_group *group; + struct iova_domain iova; + unsigned long limit; + unsigned int shift; }; static void tegra_vde_set_bits(struct tegra_vde *vde, @@ -634,12 +651,22 @@ static void tegra_vde_decode_frame(struct tegra_vde *vde, VDE_WR(0x20000000 | (macroblocks_nb - 1), vde->sxe + 0x00); } -static void tegra_vde_detach_and_put_dmabuf(struct dma_buf_attachment *a, +static void tegra_vde_detach_and_put_dmabuf(struct tegra_vde *vde, + struct dma_buf_attachment *a, struct sg_table *sgt, + struct iova *iova, enum dma_data_direction dma_dir) { struct dma_buf *dmabuf = a->dmabuf; + if (vde->domain) { + unsigned long size = iova_size(iova) << vde->shift; + dma_addr_t addr = iova_dma_addr(&vde->iova, iova); + + iommu_unmap(vde->domain, addr, size); + __free_iova(&vde->iova, iova); + } + dma_buf_unmap_attachment(a, sgt, dma_dir); dma_buf_detach(dmabuf, a); dma_buf_put(dmabuf); @@ -651,14 +678,16 @@ static int tegra_vde_attach_dmabuf(struct tegra_vde *vde, size_t min_size, size_t align_size, struct dma_buf_attachment **a, - dma_addr_t *addr, + dma_addr_t *addrp, struct sg_table **s, - size_t *size, + struct iova **iovap, + size_t *sizep, enum dma_data_direction dma_dir) { struct dma_buf_attachment *attachment; struct dma_buf *dmabuf; struct sg_table *sgt; + size_t size; int err; dmabuf = dma_buf_get(fd); @@ -695,18 +724,47 @@ static int tegra_vde_attach_dmabuf(struct tegra_vde *vde, goto err_detach; } - if (sgt->nents != 1) { + if (sgt->nents > 1 && !vde->domain) { dev_err(vde->dev, "Sparse DMA region is unsupported\n"); err = -EINVAL; goto err_unmap; } - *addr = sg_dma_address(sgt->sgl) + offset; + if (vde->domain) { + int prot = IOMMU_READ | IOMMU_WRITE; + struct iova *iova; + dma_addr_t addr; + + size = (dmabuf->size - offset) >> vde->shift; + + iova = alloc_iova(&vde->iova, size, vde->limit - 1, true); + if (!iova) { + err = -ENOMEM; + goto err_unmap; + } + + addr = iova_dma_addr(&vde->iova, iova); + + size = iommu_map_sg(vde->domain, addr, sgt->sgl, sgt->nents, + prot); + if (!size) { + __free_iova(&vde->iova, iova); + err = -ENXIO; + goto err_unmap; + } + + *addrp = addr; + *iovap = iova; + } else { + *addrp = sg_dma_address(sgt->sgl) + offset; + size = dmabuf->size - offset; + } + *a = attachment; *s = sgt; - if (size) - *size = dmabuf->size - offset; + if (sizep) + *sizep = size; return 0; @@ -734,6 +792,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct tegra_vde *vde, &frame->y_dmabuf_attachment, &frame->y_addr, &frame->y_sgt, + &frame->y_iova, NULL, dma_dir); if (err) return err; @@ -743,6 +802,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct tegra_vde *vde, &frame->cb_dmabuf_attachment, &frame->cb_addr, &frame->cb_sgt, + &frame->cb_iova, NULL, dma_dir); if (err) goto err_release_y; @@ -752,6 +812,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct tegra_vde *vde, &frame->cr_dmabuf_attachment, &frame->cr_addr, &frame->cr_sgt, + &frame->cr_iova, NULL, dma_dir); if (err) goto err_release_cb; @@ -766,6 +827,7 @@ static int tegra_vde_attach_dmabufs_to_frame(struct tegra_vde *vde, &frame->aux_dmabuf_attachment, &frame->aux_addr, &frame->aux_sgt, + &frame->aux_iova, NULL, dma_dir); if (err) goto err_release_cr; @@ -774,13 +836,16 @@ static int tegra_vde_attach_dmabufs_to_frame(struct tegra_vde *vde, err_release_cr: tegra_vde_detach_and_put_dmabuf(vde, frame->cr_dmabuf_attachment, - frame->cr_sgt, dma_dir); + frame->cr_sgt, frame->cr_iova, + dma_dir); err_release_cb: tegra_vde_detach_and_put_dmabuf(vde, frame->cb_dmabuf_attachment, - frame->cb_sgt, dma_dir); + frame->cb_sgt, frame->cb_iova, + dma_dir); err_release_y: tegra_vde_detach_and_put_dmabuf(vde, frame->y_dmabuf_attachment, - frame->y_sgt, dma_dir); + frame->y_sgt, frame->y_iova, + dma_dir); return err; } @@ -793,16 +858,20 @@ static void tegra_vde_release_frame_dmabufs(struct tegra_vde *vde, if (!baseline_profile) tegra_vde_detach_and_put_dmabuf(vde, frame->aux_dmabuf_attachment, - frame->aux_sgt, dma_dir); + frame->aux_sgt, + frame->aux_iova, dma_dir); tegra_vde_detach_and_put_dmabuf(vde, frame->cr_dmabuf_attachment, - frame->cr_sgt, dma_dir); + frame->cr_sgt, frame->cr_iova, + dma_dir); tegra_vde_detach_and_put_dmabuf(vde, frame->cb_dmabuf_attachment, - frame->cb_sgt, dma_dir); + frame->cb_sgt, frame->cb_iova, + dma_dir); tegra_vde_detach_and_put_dmabuf(vde, frame->y_dmabuf_attachment, - frame->y_sgt, dma_dir); + frame->y_sgt, frame->y_iova, + dma_dir); } static int tegra_vde_validate_frame(struct device *dev, @@ -923,6 +992,8 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, struct sg_table *bitstream_sgt, *secure_sgt; enum dma_data_direction dma_dir; dma_addr_t bitstream_data_addr; + struct iova *bitstream_iova; + struct iova *secure_iova; dma_addr_t secure_addr; dma_addr_t bsev_ptr; size_t lsize, csize; @@ -948,6 +1019,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, &bitstream_data_dmabuf_attachment, &bitstream_data_addr, &bitstream_sgt, + &bitstream_iova, &bitstream_data_size, DMA_TO_DEVICE); if (ret) @@ -959,6 +1031,7 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, &secure_attachment, &secure_addr, &secure_sgt, + &secure_iova, &secure_size, DMA_TO_DEVICE); if (ret) @@ -1095,12 +1168,13 @@ static int tegra_vde_ioctl_decode_h264(struct tegra_vde *vde, release_bitstream_dmabuf: if (secure_attachment) tegra_vde_detach_and_put_dmabuf(vde, secure_attachment, - secure_sgt, + secure_sgt, secure_iova, DMA_TO_DEVICE); tegra_vde_detach_and_put_dmabuf(vde, bitstream_data_dmabuf_attachment, - bitstream_sgt, DMA_TO_DEVICE); + bitstream_sgt, bitstream_iova, + DMA_TO_DEVICE); return ret; } @@ -1193,6 +1267,15 @@ static int tegra_vde_probe(struct platform_device *pdev) struct tegra_vde *vde; int irq, err; +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU) + if (dev->archdata.mapping) { + struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(dev); + + arm_iommu_detach_device(dev); + arm_iommu_release_mapping(mapping); + } +#endif + vde = devm_kzalloc(dev, sizeof(*vde), GFP_KERNEL); if (!vde) return -ENOMEM; @@ -1335,6 +1418,37 @@ static int tegra_vde_probe(struct platform_device *pdev) return -ENOMEM; } + vde->group = iommu_group_get(dev); + if (vde->group) { + unsigned long order; + + vde->domain = iommu_domain_alloc(&platform_bus_type); + if (!vde->domain) { + iommu_group_put(vde->group); + vde->group = NULL; + } else { + err = iova_cache_get(); + if (err < 0) + goto free_domain; + + order = __ffs(vde->domain->pgsize_bitmap); + + init_iova_domain(&vde->iova, 1UL << order, 0); + vde->shift = iova_shift(&vde->iova); + vde->limit = 1 << (32 - vde->shift); + + /* + * VDE doesn't seem to like accessing the last page of + * its 32-bit address space. + */ + vde->limit -= 1; + + err = iommu_attach_group(vde->domain, vde->group); + if (err < 0) + goto put_cache; + } + } + mutex_init(&vde->lock); init_completion(&vde->decode_completion); @@ -1346,7 +1460,7 @@ static int tegra_vde_probe(struct platform_device *pdev) err = misc_register(&vde->miscdev); if (err) { dev_err(dev, "Failed to register misc device: %d\n", err); - goto err_gen_free; + goto detach; } pm_runtime_enable(dev); @@ -1364,7 +1478,21 @@ static int tegra_vde_probe(struct platform_device *pdev) err_misc_unreg: misc_deregister(&vde->miscdev); -err_gen_free: +detach: + if (vde->domain) + iommu_detach_group(vde->domain, vde->group); + +put_cache: + if (vde->domain) + iova_cache_put(); + +free_domain: + if (vde->domain) + iommu_domain_free(vde->domain); + + if (vde->group) + iommu_group_put(vde->group); + gen_pool_free(vde->iram_pool, (unsigned long)vde->iram, gen_pool_size(vde->iram_pool)); @@ -1388,6 +1516,13 @@ static int tegra_vde_remove(struct platform_device *pdev) misc_deregister(&vde->miscdev); + if (vde->domain) { + iommu_detach_group(vde->domain, vde->group); + iova_cache_put(); + iommu_domain_free(vde->domain); + iommu_group_put(vde->group); + } + gen_pool_free(vde->iram_pool, (unsigned long)vde->iram, gen_pool_size(vde->iram_pool)); From patchwork Mon Aug 13 14:50:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957015 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="okga4UX7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDq0d5gz9s9l for ; Tue, 14 Aug 2018 00:50:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729919AbeHMRdX (ORCPT ); Mon, 13 Aug 2018 13:33:23 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:43923 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729915AbeHMRdW (ORCPT ); Mon, 13 Aug 2018 13:33:22 -0400 Received: by mail-wr1-f67.google.com with SMTP id b15-v6so14503953wrv.10; Mon, 13 Aug 2018 07:50:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+6nmsEvNblRwnLHR0zPkXbRrPJqrw/jMOKiKqj2SLmM=; b=okga4UX7eQGUDDFVHZM5LK7j9m926Kg5ADRUU8Hklysz0r1B1VbGSBmMoPtbFBPAgk 5/nbAAN6EiW47jYVWa+dweEZAiRX4QYpbf0QgyBFgvTgSsScfZPrOcaDlUL2tNMKsAcv X6WuXGspP2ojDBuggVwxaB694Ih596YWC6giNGT/8T918ew4Hr6ZluK/MmUL9FxWvUZp NDzNcc8kkZKTtziVoIIAlp37ErZUrAOTKpHhrcOM9gOMX01w1N8gXB+70yJ0Gzsc0WL3 bGGA6LYyfr5VDmlcOHi2io/7OXW/xfhJ0xB6ZnM/ezd8y544lvoxuHpSBQUHim/fepP/ BFpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+6nmsEvNblRwnLHR0zPkXbRrPJqrw/jMOKiKqj2SLmM=; b=PKRJpZ3KBsKAe1aFc0/P8FR+Lhyu07D3zFdD3qlL7N/cQ8PsenYm/6tMjTCUpjrzB4 ZiECTWSwqitZPUeiMffEnHx9jhFAp49j2j45BKyNRoeKu7d8gNo8P6uoyTv8Mn1KFaBg dJVMJUiy8Md62sKNWf7QZ64VKk0hzFYqcUy/ruKl4YeqY2IfuvfsHJUJwnITGMn7hWlm PnFP2i2p9GiTYNa+t4DIQIeuxlhHsGBlLYsYIqaHViLh3mC4VICNoPL/1A09SUZaqxzI 5Fb/R18J7efSpegbTHo55tPLxb6JtKeXxGpv1KVPV5gVeUdlr0H2teBQNtAD27KrURCG ZfyA== X-Gm-Message-State: AOUpUlEFpWN/oTUl52FVUFDMq7U0Ja2vf+vT6palwTZxOKo1Gm+hTagJ lUtfaSF+3MHQKRXUaR2WWms= X-Google-Smtp-Source: AA+uWPxi1+b4E3Ojl5R24sE+iWX44g6WxOZWvmTemZnShZYg+kgxY+0wwUF++9Aq6zen4GLadcgwdg== X-Received: by 2002:a5d:4452:: with SMTP id x18-v6mr11694450wrr.227.1534171846607; Mon, 13 Aug 2018 07:50:46 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id 66-v6sm21208384wmw.34.2018.08.13.07.50.45 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:45 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 10/14] staging: media: tegra-vde: Keep VDE in reset when unused Date: Mon, 13 Aug 2018 16:50:23 +0200 Message-Id: <20180813145027.16346-11-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding There is no point in keeping the VDE module out of reset when it is not in use. Reset it on runtime suspend. Signed-off-by: Thierry Reding --- drivers/staging/media/tegra-vde/tegra-vde.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/staging/media/tegra-vde/tegra-vde.c b/drivers/staging/media/tegra-vde/tegra-vde.c index 3bc0bfcfe34e..4b3c6ab3c77e 100644 --- a/drivers/staging/media/tegra-vde/tegra-vde.c +++ b/drivers/staging/media/tegra-vde/tegra-vde.c @@ -1226,6 +1226,7 @@ static int tegra_vde_runtime_suspend(struct device *dev) } reset_control_assert(vde->rst_bsev); + reset_control_assert(vde->rst); usleep_range(2000, 4000); From patchwork Mon Aug 13 14:50:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957016 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="CEGieUVf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDr3Sxmz9s0n for ; Tue, 14 Aug 2018 00:50:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729921AbeHMRdY (ORCPT ); Mon, 13 Aug 2018 13:33:24 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:33593 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729915AbeHMRdY (ORCPT ); Mon, 13 Aug 2018 13:33:24 -0400 Received: by mail-wm0-f68.google.com with SMTP id i134-v6so630905wmf.0; Mon, 13 Aug 2018 07:50:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wUQEMwemrgYTXPtJXSxmgCXS+6Bkoho9cKZzG/PJ4mc=; b=CEGieUVfZefPwbW1yUi8tevhcqtmhxEm2CcB3PXf3SiFWG7qs0wJrkyyalG2fUfTZd WL0QzH+TL0RclrmA7AzR3obKbre8kg0se+DmGb6oWomLDKz/rBGhcuJa3pHoV2bGJdn7 U7UnFagka2v4ZU6wuzaf0+bniiug597qMjaRiEJTLnTbnr3iCXz1VKdJhU94CvTmqjGT 9dMBVn0nBCnAeANDu2i2COkaG8zSrSjSEqJFHTCirzf3MQADQVaQ/BjpUdW5QPaLeqXG aH2+74uJZudYs99IFYaRbtcUn8tt6Lzta4tLED7q4mvi5IoVxSdI92ysj1J7afJax/mG Xa8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=wUQEMwemrgYTXPtJXSxmgCXS+6Bkoho9cKZzG/PJ4mc=; b=l0QjZIRMeLziXbSbyKwhD4UiYVO/li4QOz+TnAaux0ZJCxh525RXE/zYDR4CXsmo8E 4PcIbkKIWdidabbzTP6jNMaIFzxNwPSAVwTSaMOUzGyOvPInbXj0ROJa/iwROqBGjyAM EUkIesodl+1Q0OsMJRTn6JZx97nWUDRZbrRkjw/yhXXUo2kiKI7ssre8jHoS10EGgnyu jSTmYH3mzhsH0IfJsQXmRxXXtfU80lxE+dTk0q/t7ZMPnevrQOqB9PmducGx7YrTfkOD jdtwuWHIfVU2RhrEZ3kwyOIIP8pwoMWWmM46EVPXUITnABV1mvrugNol+cByw/3MoBxn uauw== X-Gm-Message-State: AOUpUlGSn8I7VGTnVljX96dTvuItlWZpAlb2MxL3QriaTGtsXZOirbCM IUPAHtH0hrlS2kaZqZMZLDc= X-Google-Smtp-Source: AA+uWPwFChd6xBzYdUFAfVNVFp5haN3gwjMXnIe/oPvtKOCVllxCpxaFOOr0UwFcn16dg40ZfJRZ6Q== X-Received: by 2002:a1c:8dd1:: with SMTP id p200-v6mr7710230wmd.145.1534171848398; Mon, 13 Aug 2018 07:50:48 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id m68-v6sm23433764wmb.10.2018.08.13.07.50.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:47 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 11/14] ARM: tegra: Enable VDE on Tegra124 Date: Mon, 13 Aug 2018 16:50:24 +0200 Message-Id: <20180813145027.16346-12-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Signed-off-by: Thierry Reding --- arch/arm/boot/dts/tegra124.dtsi | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/arch/arm/boot/dts/tegra124.dtsi b/arch/arm/boot/dts/tegra124.dtsi index b113e47b2b2a..8fdca4723205 100644 --- a/arch/arm/boot/dts/tegra124.dtsi +++ b/arch/arm/boot/dts/tegra124.dtsi @@ -83,6 +83,19 @@ }; }; + iram@40000000 { + compatible = "mmio-sram"; + reg = <0x0 0x40000000 0x0 0x40000>; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 0x0 0x40000000 0x40000>; + + vde_pool: pool@400 { + reg = <0x400 0x3fc00>; + pool; + }; + }; + host1x@50000000 { compatible = "nvidia,tegra124-host1x", "simple-bus"; reg = <0x0 0x50000000 0x0 0x00034000>; @@ -283,6 +296,33 @@ */ }; + vde@60030000 { + compatible = "nvidia,tegra124-vde", "nvidia,tegra30-vde", + "nvidia,tegra20-vde"; + reg = <0x0 0x60030000 0x0 0x1000 /* Syntax Engine */ + 0x0 0x60031000 0x0 0x1000 /* Video Bitstream Engine */ + 0x0 0x60032000 0x0 0x0100 /* Macroblock Engine */ + 0x0 0x60032200 0x0 0x0100 /* Post-processing Engine */ + 0x0 0x60032400 0x0 0x0100 /* Motion Compensation Engine */ + 0x0 0x60032600 0x0 0x0100 /* Transform Engine */ + 0x0 0x60032800 0x0 0x0100 /* Pixel prediction block */ + 0x0 0x60032a00 0x0 0x0100 /* Video DMA */ + 0x0 0x60033800 0x0 0x0400>; /* Video frame controls */ + reg-names = "sxe", "bsev", "mbe", "ppe", "mce", + "tfe", "ppb", "vdma", "frameid"; + iram = <&vde_pool>; /* IRAM region */ + interrupts = , /* Sync token interrupt */ + , /* BSE-V interrupt */ + ; /* SXE interrupt */ + interrupt-names = "sync-token", "bsev", "sxe"; + clocks = <&tegra_car TEGRA124_CLK_VDE>, + <&tegra_car TEGRA124_CLK_BSEV>; + clock-names = "vde", "bsev"; + resets = <&tegra_car 61>, + <&tegra_car 63>; + reset-names = "vde", "bsev"; + }; + apbdma: dma@60020000 { compatible = "nvidia,tegra124-apbdma", "nvidia,tegra148-apbdma"; reg = <0x0 0x60020000 0x0 0x1400>; From patchwork Mon Aug 13 14:50:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957017 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RX6SZQWv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDt01TNz9s0n for ; Tue, 14 Aug 2018 00:50:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729915AbeHMRd2 (ORCPT ); Mon, 13 Aug 2018 13:33:28 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:56010 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729928AbeHMRd1 (ORCPT ); Mon, 13 Aug 2018 13:33:27 -0400 Received: by mail-wm0-f65.google.com with SMTP id f21-v6so9155320wmc.5; Mon, 13 Aug 2018 07:50:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oHsOgTN0T0aMQusZ2KOlu4RymDoIup7RrtI3YHwWpew=; b=RX6SZQWvuRCyitmcrJ8V2wQrc98U1qryN162MZPAk2YWvCXrqsOQIHwCmn7nGUrtyx PWHmBKIHio25v3jC92HSJT1fjExyw2QNmJRSXzTxBiQqJDh0L0ondNoSuVAsQ2K6i/+y L/jlTRhqxRB7lVR8TY+efbJ7qkb2iA142f0S+XkclBvzvxOhSz0NdcgEPlS8PigRw6xO uSO2SuYa9UhEZ6auTnAxk2nzGmVH+RVDg4ZZTcmNnpQmgAoYrCwPpGL+x/W6p6x7BBgF Igj5dhlfcVHNoZtyIxU1mE9PpSZ128p7r0ngytnQBL43z/BKDgiDp1LR4lwvosNJ9jfL bd1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oHsOgTN0T0aMQusZ2KOlu4RymDoIup7RrtI3YHwWpew=; b=LKrIpbmD+19Sv/nOrSCqRm8EeDEa9/dJRfFQB4zkOWr/4hL0EjT6KDFeuI3eQu8NOn bVjq/pqIUT3GHogct7tzO5RFgvnzcqaoQB3tNhWa65IJ2ZFiSrOIkMnoBl0XDyCjYJBf cEkAcnKkEPZwPzZzqFrYelgruBVsxdMm27EnE2uRHd4oBI1WuJRlLwAzTZQi53/g15a7 h2Rc2sJFUD99qVmZRss5KtUVNCf0Bwr8fut3uCEaOzhfHaeI0jI8ErBWKtrKn0hK6Yl2 J+uo7OD/6cuE4Tw+3ExFYMSevCqymCTXaYUDqs8yN6iYDgBiLaVTJ7dsyUqJU1R1eUwc oLgw== X-Gm-Message-State: AOUpUlGFqaEpECsT3S++7N3jc7X89etzbx4cRDmcgwYFUTY3wTdbB+R5 kB7Rghf3QEo1w876Loqxqso= X-Google-Smtp-Source: AA+uWPwjyJE8SSjLv80/1kYCISGtEGfwpEAHqbISbotoJkE0aBIqib+2LfK833CYC/cyOA7PgkR0Xw== X-Received: by 2002:a1c:4143:: with SMTP id o64-v6mr8902774wma.123.1534171851348; Mon, 13 Aug 2018 07:50:51 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id e141-v6sm15954780wmd.32.2018.08.13.07.50.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:50 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 12/14] ARM: tegra: Add BSEV clock and reset for VDE on Tegra20 Date: Mon, 13 Aug 2018 16:50:25 +0200 Message-Id: <20180813145027.16346-13-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Signed-off-by: Thierry Reding --- arch/arm/boot/dts/tegra20.dtsi | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 15b73bd377f0..abb5738a0705 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi @@ -287,9 +287,13 @@ , /* BSE-V interrupt */ ; /* SXE interrupt */ interrupt-names = "sync-token", "bsev", "sxe"; - clocks = <&tegra_car TEGRA20_CLK_VDE>; - reset-names = "vde", "mc"; - resets = <&tegra_car 61>, <&mc TEGRA20_MC_RESET_VDE>; + clocks = <&tegra_car TEGRA20_CLK_VDE>, + <&tegra_car TEGRA20_CLK_BSEV>; + clock-names = "vde", "bsev"; + resets = <&tegra_car 61>, + <&tegra_car 63>, + <&mc TEGRA20_MC_RESET_VDE>; + reset-names = "vde", "bsev", "mc"; }; apbmisc@70000800 { From patchwork Mon Aug 13 14:50:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957018 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="WXDdnPsc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDw35HQz9s0n for ; Tue, 14 Aug 2018 00:50:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729940AbeHMRd3 (ORCPT ); Mon, 13 Aug 2018 13:33:29 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:33949 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729928AbeHMRd3 (ORCPT ); Mon, 13 Aug 2018 13:33:29 -0400 Received: by mail-wr1-f65.google.com with SMTP id c13-v6so14556567wrt.1; Mon, 13 Aug 2018 07:50:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=4yxJproGfanbKIkWG8cPsaP3h8UaxKdH5RrOa027FOw=; b=WXDdnPsc3p3qtbyB0K/af1ZVRmDknzMdUs1EU5OChP0NFOYqLE0jG5NlWVnoF9c0nm ThzXLj9NAXOwVG5XeEcD5u2bVWIIQd4LBJKBydfNqj6igJfACzR9XEWav9RALjb7px0k Dikq66fKsdBLtD7OQHib8P/zBCB6zIqw8m+e94cDA2+uxclwC6tYnpLnAeh21RD0z+2L uPPCX4KLGJocYNImeLYClUdVQLxmQ7TvceVAlaoMRcQ2Rg1g9ivfZy5HOXCipxgwGJg2 ZMGahIPBqKQwc7XDP72FwYxQ+JlXYzi7DJAueKUuVCaZWjNFVsG1Wu+NQCsEoaaT+kuv SUFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=4yxJproGfanbKIkWG8cPsaP3h8UaxKdH5RrOa027FOw=; b=MRyUoGMyQkaPAvNeHYOSNmdkTvslTaoA75+qYjFRod2l5H7kOrtGhnYtjBJvwkXyV/ N2q1tWEnuWXsNmZlUg5a2scPHt9UBroTSQVKs8dLZsiDCXAxwT4jrZHEoy85n5payeOQ kqeq8mfVTR6FbQNCULzvhIuWo0jzVw1uW6aytTcy8JAEmHUIN9B+kuki1PPeZVQtB7j2 DSNp3uBfmBSqUNclrbbIcr4ClLEb3DhP9LfYCWmDcACruiOnQyv4eaOricbnJJcBuKdS ztCxuJk1jcT518RILXk4wYVBONCAAwQnOyH1jTOb8KyqTtp9NsFFEZAx5dEHwHVNwMQO wtSA== X-Gm-Message-State: AOUpUlFuR82bWGAKDcA5jFvksZRX3Wr+UlrQVVQrri6ynx8ALWtxtWcu Mzv6kLr1UgcM8j/6xdLaMyg= X-Google-Smtp-Source: AA+uWPzzW51m1qyLjYAW/Y5VGFkGGQYHmeP50dKagD2t4X1nV+CeiNJFJ0vRyQbD76/nCHpHjWoBvg== X-Received: by 2002:adf:b2a7:: with SMTP id g36-v6mr10626202wrd.218.1534171853131; Mon, 13 Aug 2018 07:50:53 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id x14-v6sm20752397wrv.21.2018.08.13.07.50.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:52 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 13/14] ARM: tegra: Add BSEV clock and reset for VDE on Tegra30 Date: Mon, 13 Aug 2018 16:50:26 +0200 Message-Id: <20180813145027.16346-14-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding Signed-off-by: Thierry Reding --- arch/arm/boot/dts/tegra30.dtsi | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index a6781f653310..492917d61bab 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi @@ -408,9 +408,13 @@ , /* BSE-V interrupt */ ; /* SXE interrupt */ interrupt-names = "sync-token", "bsev", "sxe"; - clocks = <&tegra_car TEGRA30_CLK_VDE>; - reset-names = "vde", "mc"; - resets = <&tegra_car 61>, <&mc TEGRA30_MC_RESET_VDE>; + clocks = <&tegra_car TEGRA30_CLK_VDE>, + <&tegra_car TEGRA30_CLK_BSEV>; + clock-names = "vde", "bsev"; + resets = <&tegra_car 61>, + <&tegra_car 63>, + <&mc TEGRA30_MC_RESET_VDE>; + reset-names = "vde", "bsev", "mc"; }; apbmisc@70000800 { From patchwork Mon Aug 13 14:50:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 957019 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="k3na+3a3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41pzDx3Qsjz9s9l for ; Tue, 14 Aug 2018 00:50:57 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729941AbeHMRdb (ORCPT ); Mon, 13 Aug 2018 13:33:31 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:39581 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729928AbeHMRdb (ORCPT ); Mon, 13 Aug 2018 13:33:31 -0400 Received: by mail-wm0-f66.google.com with SMTP id q8-v6so9152757wmq.4; Mon, 13 Aug 2018 07:50:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DzsrSXfS4zFUIy0Ts/ZjLh32WDTTeTmex7NrxZAS25Y=; b=k3na+3a3AJN668w4FZFaTw7q0vTuGN2qGXmV/803SnL9R2KDiA3w3AC/AldihmQ3Df Sz1r76M3RuYEgpisaVT+IDPAjEhr1uxULEJABfqiiFXi705QqTc477sGGsboByb/OUWx yppMde1AMGDf7loPgsg9Xh0Z47bGnFCUoBz/zhjG2G/zQp5n+o0oWZ0cxy9ehrRrJhk3 SOfzkA0cuogz3n5G/DYkxcLVLU9wgI2jgsiiFosuyypirPiUNkt8zcdqT72v0vZDe6WL SGBcghjfkjSSS3g5HCfTh2tMkiTWoR8MAMmi/XpokjFZoCJeXglmpW/qsyaZl80gxFMO MLCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=DzsrSXfS4zFUIy0Ts/ZjLh32WDTTeTmex7NrxZAS25Y=; b=c59LX9z6+c4CNz2z4ayiRJBGlUWf+eCMAZDh6WJA2hKeZoA3nrpaWZIAXIwbr8ktNC WawNxwW9s2s25TZe3fUAEY9llQCNefBohihW3otNo89F6cZCm4IXo1eJrWCgaexYmlY2 BoL0/V03+WymtvtxF/xZtRTrq9nVUXJ3CaV7bcZzpM2vhYGi0b9grnQruOdkGiuOoFwD F3ckwnQcukHRnBPHoZq6HAzC4e9hjHnNKRjDHTImulifK/Q4LY4fb15EXDKHyeoH3ntv Vi5HJvcYF2XflGJ2FfVYlCxpgUwpZkw5SqOXguMTX9t+njaOhf3YAGKcQ4p+NmAisJIY Emeg== X-Gm-Message-State: AOUpUlGKH9QoVt1iRtHWDObUFMuyYH9ryPeONFKYmDCx1qQxxuHfGlOW 5FlxOn1zHhFvZIIK+/Y9zWA= X-Google-Smtp-Source: AA+uWPz1tq4TqscXTy87pyUZph1Y2Kvu7JgD521H3DF6mIdSfIP6noYnyjz+aSx3xe0S6vWaEYoy1w== X-Received: by 2002:a1c:1dcd:: with SMTP id d196-v6mr8758519wmd.114.1534171854788; Mon, 13 Aug 2018 07:50:54 -0700 (PDT) Received: from localhost (pD9E51C80.dip0.t-ipconnect.de. [217.229.28.128]) by smtp.gmail.com with ESMTPSA id e141-v6sm15955117wmd.32.2018.08.13.07.50.53 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 13 Aug 2018 07:50:53 -0700 (PDT) From: Thierry Reding To: Mauro Carvalho Chehab , Thierry Reding Cc: Greg Kroah-Hartman , Dmitry Osipenko , Jonathan Hunter , linux-media@vger.kernel.org, linux-tegra@vger.kernel.org, devel@driverdev.osuosl.org Subject: [PATCH 14/14] ARM: tegra: Enable SMMU for VDE on Tegra124 Date: Mon, 13 Aug 2018 16:50:27 +0200 Message-Id: <20180813145027.16346-15-thierry.reding@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180813145027.16346-1-thierry.reding@gmail.com> References: <20180813145027.16346-1-thierry.reding@gmail.com> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org From: Thierry Reding The video decode engine can use the SMMU to use buffers that are not physically contiguous in memory. This allows better memory usage for video decoding, since fragmentation may cause contiguous allocations to fail. Signed-off-by: Thierry Reding Reviewed-by: Dmitry Osipenko --- arch/arm/boot/dts/tegra124.dtsi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/boot/dts/tegra124.dtsi b/arch/arm/boot/dts/tegra124.dtsi index 8fdca4723205..0713e0ed5fef 100644 --- a/arch/arm/boot/dts/tegra124.dtsi +++ b/arch/arm/boot/dts/tegra124.dtsi @@ -321,6 +321,8 @@ resets = <&tegra_car 61>, <&tegra_car 63>; reset-names = "vde", "bsev"; + + iommus = <&mc TEGRA_SWGROUP_VDE>; }; apbdma: dma@60020000 {