From patchwork Wed Sep 7 19:15:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 603699 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C599C38145 for ; Wed, 7 Sep 2022 19:16:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229821AbiIGTQI (ORCPT ); Wed, 7 Sep 2022 15:16:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229781AbiIGTQH (ORCPT ); Wed, 7 Sep 2022 15:16:07 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 768BCBFEA1 for ; Wed, 7 Sep 2022 12:16:06 -0700 (PDT) Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id BAD0381E; Wed, 7 Sep 2022 21:16:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1662578165; bh=uJiuKhXxm/KoPu0EcCEDfZTxnvLkmb+UhggSP6gJ0Q8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JE5WCaQvE2LVhPXInVtwx+Pq31/8sS8vOwxrExHxOd8Gm/f2UBBg1mAKr9sLlaGWp c2uEAAjjpjM7pmLAwjW9D3jw71ELbc902HBe5M/R6uvMWYFFYRBt5IHfSMNptT/+KP n418H2E/Mzbq9Dg0quUC9V7ldyIkqY3Q/iyM5Ftk= From: Laurent Pinchart To: linux-media@vger.kernel.org Cc: Rui Miguel Silva , Steve Longerbeam , Philipp Zabel , Paul Elder , Jacopo Mondi , kernel@pengutronix.de, linux-imx@nxp.com Subject: [PATCH 1/3] media: imx: imx7-media-csi: Move variable to loop scope Date: Wed, 7 Sep 2022 22:15:45 +0300 Message-Id: <20220907191547.19255-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220907191547.19255-1-laurent.pinchart@ideasonboard.com> References: <20220907191547.19255-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org The phys variable is only used as a local loop variable in imx7_csi_setup_vb2_buf(), with each entry in the array being used in the corresponding iteration of the loop only. Move it to loop scope, simplifying the array to a single variable. Signed-off-by: Laurent Pinchart Reviewed-by: Paul Elder --- drivers/staging/media/imx/imx7-media-csi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index 336f746ae324..1aef2cf41745 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -399,21 +399,22 @@ static void imx7_csi_setup_vb2_buf(struct imx7_csi *csi) { struct imx7_csi_vb2_buffer *buf; struct vb2_buffer *vb2_buf; - dma_addr_t phys[2]; int i; for (i = 0; i < 2; i++) { + dma_addr_t phys; + buf = imx7_csi_video_next_buf(csi); if (buf) { csi->active_vb2_buf[i] = buf; vb2_buf = &buf->vbuf.vb2_buf; - phys[i] = vb2_dma_contig_plane_dma_addr(vb2_buf, 0); + phys = vb2_dma_contig_plane_dma_addr(vb2_buf, 0); } else { csi->active_vb2_buf[i] = NULL; - phys[i] = csi->underrun_buf.phys; + phys = csi->underrun_buf.phys; } - imx7_csi_update_buf(csi, phys[i], i); + imx7_csi_update_buf(csi, phys, i); } } From patchwork Wed Sep 7 19:15:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 604947 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9E326C38145 for ; Wed, 7 Sep 2022 19:16:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229781AbiIGTQL (ORCPT ); Wed, 7 Sep 2022 15:16:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229806AbiIGTQK (ORCPT ); Wed, 7 Sep 2022 15:16:10 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 87C39BFC65 for ; Wed, 7 Sep 2022 12:16:08 -0700 (PDT) Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 98D8A883; Wed, 7 Sep 2022 21:16:06 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1662578166; bh=ga/XQTyDxRsShQeLA6Uq+LUHj3YPF/k5p9BSXrLg51A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WKO8nJLMmwLcVSVZO1Od1dAlw2mh4ayNjjHoK45EUVcFAmK6s/SYvc0Vdy1fAIaCO 0j1gyuuhnAHtSBW1U89BTA1IzKi8K5squtmLaC6IcltY1XZp0RG+WbODDzYfbGrrGx 3QkhDCl912/mAsR31moTtEXo5XxMjL2FKS2rB+wo= From: Laurent Pinchart To: linux-media@vger.kernel.org Cc: Rui Miguel Silva , Steve Longerbeam , Philipp Zabel , Paul Elder , Jacopo Mondi , kernel@pengutronix.de, linux-imx@nxp.com Subject: [PATCH 2/3] media: imx: imx7-media-csi: Rename phys variables to dma_addr Date: Wed, 7 Sep 2022 22:15:46 +0300 Message-Id: <20220907191547.19255-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220907191547.19255-1-laurent.pinchart@ideasonboard.com> References: <20220907191547.19255-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org All the phys variables and structure fields store a DMA address, not a physical address. Even if the two are effectively identical on all platforms where this driver is used due to the lack of IOMMU, rename the variables to dma_addr to make their usage clearer. Signed-off-by: Laurent Pinchart --- drivers/staging/media/imx/imx7-media-csi.c | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index 1aef2cf41745..03986445c0da 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -200,7 +200,7 @@ to_imx7_csi_vb2_buffer(struct vb2_buffer *vb) struct imx7_csi_dma_buf { void *virt; - dma_addr_t phys; + dma_addr_t dma_addr; unsigned long len; }; @@ -384,13 +384,13 @@ static void imx7_csi_dmareq_rff_disable(struct imx7_csi *csi) imx7_csi_reg_write(csi, cr3, CSI_CSICR3); } -static void imx7_csi_update_buf(struct imx7_csi *csi, dma_addr_t phys, +static void imx7_csi_update_buf(struct imx7_csi *csi, dma_addr_t dma_addr, int buf_num) { if (buf_num == 1) - imx7_csi_reg_write(csi, phys, CSI_CSIDMASA_FB2); + imx7_csi_reg_write(csi, dma_addr, CSI_CSIDMASA_FB2); else - imx7_csi_reg_write(csi, phys, CSI_CSIDMASA_FB1); + imx7_csi_reg_write(csi, dma_addr, CSI_CSIDMASA_FB1); } static struct imx7_csi_vb2_buffer *imx7_csi_video_next_buf(struct imx7_csi *csi); @@ -402,19 +402,19 @@ static void imx7_csi_setup_vb2_buf(struct imx7_csi *csi) int i; for (i = 0; i < 2; i++) { - dma_addr_t phys; + dma_addr_t dma_addr; buf = imx7_csi_video_next_buf(csi); if (buf) { csi->active_vb2_buf[i] = buf; vb2_buf = &buf->vbuf.vb2_buf; - phys = vb2_dma_contig_plane_dma_addr(vb2_buf, 0); + dma_addr = vb2_dma_contig_plane_dma_addr(vb2_buf, 0); } else { csi->active_vb2_buf[i] = NULL; - phys = csi->underrun_buf.phys; + dma_addr = csi->underrun_buf.dma_addr; } - imx7_csi_update_buf(csi, phys, i); + imx7_csi_update_buf(csi, dma_addr, i); } } @@ -441,10 +441,10 @@ static void imx7_csi_free_dma_buf(struct imx7_csi *csi, struct imx7_csi_dma_buf *buf) { if (buf->virt) - dma_free_coherent(csi->dev, buf->len, buf->virt, buf->phys); + dma_free_coherent(csi->dev, buf->len, buf->virt, buf->dma_addr); buf->virt = NULL; - buf->phys = 0; + buf->dma_addr = 0; } static int imx7_csi_alloc_dma_buf(struct imx7_csi *csi, @@ -453,7 +453,7 @@ static int imx7_csi_alloc_dma_buf(struct imx7_csi *csi, imx7_csi_free_dma_buf(csi, buf); buf->len = PAGE_ALIGN(size); - buf->virt = dma_alloc_coherent(csi->dev, buf->len, &buf->phys, + buf->virt = dma_alloc_coherent(csi->dev, buf->len, &buf->dma_addr, GFP_DMA | GFP_KERNEL); if (!buf->virt) return -ENOMEM; @@ -714,7 +714,7 @@ static void imx7_csi_vb2_buf_done(struct imx7_csi *csi) { struct imx7_csi_vb2_buffer *done, *next; struct vb2_buffer *vb; - dma_addr_t phys; + dma_addr_t dma_addr; done = csi->active_vb2_buf[csi->buf_num]; if (done) { @@ -729,14 +729,14 @@ static void imx7_csi_vb2_buf_done(struct imx7_csi *csi) /* get next queued buffer */ next = imx7_csi_video_next_buf(csi); if (next) { - phys = vb2_dma_contig_plane_dma_addr(&next->vbuf.vb2_buf, 0); + dma_addr = vb2_dma_contig_plane_dma_addr(&next->vbuf.vb2_buf, 0); csi->active_vb2_buf[csi->buf_num] = next; } else { - phys = csi->underrun_buf.phys; + dma_addr = csi->underrun_buf.dma_addr; csi->active_vb2_buf[csi->buf_num] = NULL; } - imx7_csi_update_buf(csi, phys, csi->buf_num); + imx7_csi_update_buf(csi, dma_addr, csi->buf_num); } static irqreturn_t imx7_csi_irq_handler(int irq, void *data) @@ -1301,14 +1301,14 @@ static bool imx7_csi_fast_track_buffer(struct imx7_csi *csi, struct imx7_csi_vb2_buffer *buf) { unsigned long flags; - dma_addr_t phys; + dma_addr_t dma_addr; int buf_num; u32 isr; if (!csi->is_streaming) return false; - phys = vb2_dma_contig_plane_dma_addr(&buf->vbuf.vb2_buf, 0); + dma_addr = vb2_dma_contig_plane_dma_addr(&buf->vbuf.vb2_buf, 0); /* * buf_num holds the framebuffer ID of the most recently (*not* the next @@ -1345,7 +1345,7 @@ static bool imx7_csi_fast_track_buffer(struct imx7_csi *csi, return false; } - imx7_csi_update_buf(csi, phys, buf_num); + imx7_csi_update_buf(csi, dma_addr, buf_num); isr = imx7_csi_reg_read(csi, CSI_CSISR); if (isr & (buf_num ? BIT_DMA_TSF_DONE_FB1 : BIT_DMA_TSF_DONE_FB2)) { From patchwork Wed Sep 7 19:15:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 603698 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94FBBC6FA83 for ; Wed, 7 Sep 2022 19:16:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229926AbiIGTQM (ORCPT ); Wed, 7 Sep 2022 15:16:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229842AbiIGTQK (ORCPT ); Wed, 7 Sep 2022 15:16:10 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1092BFE93 for ; Wed, 7 Sep 2022 12:16:09 -0700 (PDT) Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 247D781E; Wed, 7 Sep 2022 21:16:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1662578168; bh=DMEyij57pBiJGUTLs2s8+MqbDmXotXG9eTnDXge7iP0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XQGqc5NtCsdVzisKCX9ZCamOxeVIT6ESQodTrEImhpZlvE45gWYWS3qiCOMIoaiMv yIxwN8bHJolWuiLm3OWji1HUgoS2SVQnC6uJWN/D5L6fk4OUiU9+gK4rMxIRXvU/wl 8E7SX0yXc351lxZUw5xvvCTIq15rzJJD2ozCLb4I= From: Laurent Pinchart To: linux-media@vger.kernel.org Cc: Rui Miguel Silva , Steve Longerbeam , Philipp Zabel , Paul Elder , Jacopo Mondi , kernel@pengutronix.de, linux-imx@nxp.com Subject: [PATCH 3/3] media: imx: imx7-media-csi: Clear BIT_MIPI_DOUBLE_CMPNT for <16b formats Date: Wed, 7 Sep 2022 22:15:47 +0300 Message-Id: <20220907191547.19255-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220907191547.19255-1-laurent.pinchart@ideasonboard.com> References: <20220907191547.19255-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Commit 9babbbaaeb87 ("media: imx: imx7-media-csi: Use dual sampling for YUV 1X16") set BIT_MIPI_DOUBLE_CMPNT in the CR18 register for 16-bit YUV formats in imx7_csi_configure(). The CR18 register is always updated with read-modify-write cycles, so if a 16-bit YUV format is selected, the bit will stay set forever, even if the format is changed. Fix it by clearing the bit at the beginning of the imx7_csi_configure() function. While at it, swap two of the bits being cleared to match the MSB to LSB order. This doesn't cause any functional change. Fixes: 9babbbaaeb87 ("media: imx: imx7-media-csi: Use dual sampling for YUV 1X16") Signed-off-by: Laurent Pinchart Reviewed-by: Paul Elder --- drivers/staging/media/imx/imx7-media-csi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/staging/media/imx/imx7-media-csi.c b/drivers/staging/media/imx/imx7-media-csi.c index 03986445c0da..21d6e56ffcd4 100644 --- a/drivers/staging/media/imx/imx7-media-csi.c +++ b/drivers/staging/media/imx/imx7-media-csi.c @@ -522,9 +522,9 @@ static void imx7_csi_configure(struct imx7_csi *csi) cr18 = imx7_csi_reg_read(csi, CSI_CSICR18); cr18 &= ~(BIT_CSI_HW_ENABLE | BIT_MIPI_DATA_FORMAT_MASK | - BIT_DATA_FROM_MIPI | BIT_BASEADDR_CHG_ERR_EN | - BIT_BASEADDR_SWITCH_EN | BIT_BASEADDR_SWITCH_SEL | - BIT_DEINTERLACE_EN); + BIT_DATA_FROM_MIPI | BIT_MIPI_DOUBLE_CMPNT | + BIT_BASEADDR_CHG_ERR_EN | BIT_BASEADDR_SWITCH_SEL | + BIT_BASEADDR_SWITCH_EN | BIT_DEINTERLACE_EN); if (out_pix->field == V4L2_FIELD_INTERLACED) { cr18 |= BIT_DEINTERLACE_EN;