From patchwork Fri Sep 18 14:48:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 313201 Delivered-To: patch@linaro.org Received: by 2002:a92:5ad1:0:0:0:0:0 with SMTP id b78csp1400220ilg; Fri, 18 Sep 2020 07:48:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzFwwxCECJoUr176ZMdm21Lj1XQfWPQvObelM4dv/yYWJkQcH5ZC/7Iy87K5koqesHd1wTh X-Received: by 2002:a17:906:72d2:: with SMTP id m18mr36024065ejl.220.1600440538252; Fri, 18 Sep 2020 07:48:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600440538; cv=none; d=google.com; s=arc-20160816; b=YHW3gdX+s4SgurD4lLYh00SZfq1a9r21jVI44G6VHV/QcVlCRWqkx454ih0dT2+IgH b1q8tyHse6O8Duh0mumXav4O4Dlld4J092586vfbgbxOGoNHa9kAyVZ0qYPFvhIahgj3 h34ZMJuo9T1jx33GmKehcblF6mAy8aaJmUizdlzzEWyRFwVYlrVDbBUVepsnPWrhvYEF 8dcvs3wd+MSKwMrGQbduQOIvmMrNlAHU+4o5q23MT8uScAbV55the3qRcSbcy3Jhe6En j9S8zU7H8ko9h1BuskT7NkbSksQNpWCDpUt4PLrMGoFKRBGEPThhpVizVYfd932gk40G hbOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:cms-type:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-filter; bh=Qqymb2wpODbhpuSz8Xj9i/kRimYKlxxfRHerUqv0mt0=; b=HMwhTdEqevLJ1nSI6jvfGGvPlgDLWDqQq5n/14ZVhhWsjmNkF9TMeV1tTxwZY2qUYS vhRhNw+0i3N3giUprkTVyTSzmRyfV38EJ1jMfr/Jo8Y5xcjjmWeFLq1kGw08JHRtz7nV TtUDjhyPpnbidPea6sTIRwSvcfYGkKVtlBaSDyN4JpJXtk19TIMcg/urhMcliFrq4rH7 FADdNfnLMY3G5wRKb9Rdv6g5RB27V6r0yfc+SdticPVsQBYJtdxz2iNmPjTccBHyI84b Y7x4PkFb+N/fjEzl9MaaZcrnPJCIU8pelK9qVTBuO6Zy0Ar6Eb7Q4bDjx7POoAskBYn0 WCKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=FHlXEkyR; spf=pass (google.com: domain of linux-media-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-media-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id pw5si2411330ejb.513.2020.09.18.07.48.57; Fri, 18 Sep 2020 07:48:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-media-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=FHlXEkyR; spf=pass (google.com: domain of linux-media-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-media-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726687AbgIROs5 (ORCPT + 4 others); Fri, 18 Sep 2020 10:48:57 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:44486 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726239AbgIROs4 (ORCPT ); Fri, 18 Sep 2020 10:48:56 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200918144853euoutp02a33b091c6542508990efb35b3e08cfa2~16C_HGGnf2942229422euoutp02u for ; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200918144853euoutp02a33b091c6542508990efb35b3e08cfa2~16C_HGGnf2942229422euoutp02u DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1600440533; bh=Qqymb2wpODbhpuSz8Xj9i/kRimYKlxxfRHerUqv0mt0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FHlXEkyRubwiNlAGggTtacUAJLUlNtQ0eOXnQctYGUwjQsU/u4niS9kemzcCHelW/ D6HLa0o6yRfsUGg35cqvsTEnxgDlGtsssHKDMtCjVvbkogA1p8DIyrmsjiopw9LtZK pC5X96QpKabrKgMjl3NEBpPNyQTIlASW6UdPmpow= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200918144853eucas1p271e7179ba2e19a2f4ec70e2107c9fdc4~16C94f6PF3250032500eucas1p2b; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id CE.30.06456.5D8C46F5; Fri, 18 Sep 2020 15:48:53 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200918144852eucas1p1d23d84ef3ecf48e377b1b82a915a256b~16C9f_caz1471314713eucas1p1q; Fri, 18 Sep 2020 14:48:52 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200918144852eusmtrp29cba7ed5828a62cd7c8acf0136d6fe4f~16C9fXn-B2279922799eusmtrp2r; Fri, 18 Sep 2020 14:48:52 +0000 (GMT) X-AuditID: cbfec7f2-7efff70000001938-12-5f64c8d5b779 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 4D.4F.06017.4D8C46F5; Fri, 18 Sep 2020 15:48:52 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200918144852eusmtip18196de618895ad626e63533ffa2f7454~16C9ACno01085610856eusmtip1J; Fri, 18 Sep 2020 14:48:52 +0000 (GMT) From: Marek Szyprowski To: linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Robin Murphy , Bartlomiej Zolnierkiewicz , Mauro Carvalho Chehab , Tomasz Figa Subject: [PATCH v2 1/4] media: platform: exynos4-is: remove all references to physicall addresses Date: Fri, 18 Sep 2020 16:48:30 +0200 Message-Id: <20200918144833.14618-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200918144833.14618-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjleLIzCtJLcpLzFFi42LZduzned2rJ1LiDbrnslpsnLGe1eL8+Q3s Fj0btrJazDi/j8li7ZG77BbLNv1hsjj44QmrRfvTl8wWn1v/sTlweqyZt4bRY3bDRRaPTas6 2Tz6tqxi9Pi8SS6ANYrLJiU1J7MstUjfLoErY+WB78wFs5oYKxrvNDM3MF7L6WLk5JAQMJHY vOUqexcjF4eQwApGic0LNzFCOF8YJfZ09bJBOJ8ZJd7va2KBaZnXfJ0JxBYSWM4oMWEKC0LH 3k5GkASbgKFE19suNhBbRMBJYuGsv2A7mAU2MUnsevMBrFtYIFli8edesAYWAVWJGWf2M4PY vAK2Esfn3WWH2CYvsXrDAaA4BwengJ3E1SZLkDkSAs3sEs8e72OGqHGRWNOyBuo6YYlXx7dA 9cpI/N85nwmqgVHi4bm17BBOD6PE5aYZjBBV1hJ3zv1iA9nALKApsX6XPogpIeAosfAAF4TJ J3HjrSBIMTOQOWnbdGaIMK9ER5sQxAw1iVnH18FtPXjhEtRlHhKdl5dAg3cio8TfrTeYJjDK z0LYtYCRcRWjeGppcW56arFhXmq5XnFibnFpXrpecn7uJkZg6jj97/inHYxfLyUdYhTgYFTi 4f2xJiVeiDWxrLgy9xCjBAezkgiv09nTcUK8KYmVValF+fFFpTmpxYcYpTlYlMR5jRe9jBUS SE8sSc1OTS1ILYLJMnFwSjUw1jqybPLZJJv15uMqhQNcXhXf3A34t+3IXbn4Q/uWgktzF2/0 V77Y0nsp4KjT0niBlwu8PDWYHr+JTNyUsScw46TA7I7H+zftj5xowMd9YtuxaVn1X82mn5ii E7B437oH/hcvBp8I0C1bc/7t+VWOl59laN2fdfLxobp3eoHX2pxTDu4PX60lcFiJpTgj0VCL uag4EQBvAJYiGQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBLMWRmVeSWpSXmKPExsVy+t/xu7pXTqTEG+xu1bHYOGM9q8X58xvY LXo2bGW1mHF+H5PF2iN32S2WbfrDZHHwwxNWi/anL5ktPrf+Y3Pg9Fgzbw2jx+yGiywem1Z1 snn0bVnF6PF5k1wAa5SeTVF+aUmqQkZ+cYmtUrShhZGeoaWFnpGJpZ6hsXmslZGpkr6dTUpq TmZZapG+XYJexsoD35kLZjUxVjTeaWZuYLyW08XIySEhYCIxr/k6UxcjF4eQwFJGiaY5i9gh EjISJ6c1sELYwhJ/rnWxQRR9YpR4dmgNG0iCTcBQouttF5gtIuAisX/PU2aQImaBbUwSv7Yu YgJJCAskSjzZ2MACYrMIqErMOLOfGcTmFbCVOD7vLtQ2eYnVGw4AxTk4OAXsJK42WYKEhYBK WpcsYZvAyLeAkWEVo0hqaXFuem6xkV5xYm5xaV66XnJ+7iZGYChvO/Zzyw7GrnfBhxgFOBiV eHhfzEuJF2JNLCuuzD3EKMHBrCTC63T2dJwQb0piZVVqUX58UWlOavEhRlOgmyYyS4km5wPj LK8k3tDU0NzC0tDc2NzYzEJJnLdD4GCMkEB6YklqdmpqQWoRTB8TB6dUA6PK12L2mEdvsosU v/3Rt3G/t251qt4rg/a8i3e9ZV4+jyqcXHDiWseihtnKgjMunJtcvbR+Z/bU4tSbSltNXnAl MGzaor4v77PNeuemv0Et+5WmBjdvenBd+bX/h+eRu39K5Fp8qlq0QGlKxJ7LC2IDmiZfnZMV L8mbNe+9UsRUCcE/k1blR+YpsRRnJBpqMRcVJwIAPgSsu3sCAAA= X-CMS-MailID: 20200918144852eucas1p1d23d84ef3ecf48e377b1b82a915a256b X-Msg-Generator: CA X-RootMTR: 20200918144852eucas1p1d23d84ef3ecf48e377b1b82a915a256b X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200918144852eucas1p1d23d84ef3ecf48e377b1b82a915a256b References: <20200918144833.14618-1-m.szyprowski@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org This driver always operates on the DMA/IOVA addresses, so calling them physicall addresses is misleading, although when no IOMMU is used they equal each other. Fix this by renaming all such entries to 'addr' and adjusting comments. Signed-off-by: Marek Szyprowski --- .../media/platform/exynos4-is/fimc-capture.c | 6 ++-- drivers/media/platform/exynos4-is/fimc-core.c | 28 +++++++++---------- drivers/media/platform/exynos4-is/fimc-core.h | 18 ++++++------ drivers/media/platform/exynos4-is/fimc-is.c | 20 ++++++------- drivers/media/platform/exynos4-is/fimc-is.h | 6 ++-- .../media/platform/exynos4-is/fimc-lite-reg.c | 4 +-- drivers/media/platform/exynos4-is/fimc-lite.c | 2 +- drivers/media/platform/exynos4-is/fimc-lite.h | 4 +-- drivers/media/platform/exynos4-is/fimc-m2m.c | 8 +++--- drivers/media/platform/exynos4-is/fimc-reg.c | 18 ++++++------ drivers/media/platform/exynos4-is/fimc-reg.h | 4 +-- 11 files changed, 58 insertions(+), 60 deletions(-) -- 2.17.1 diff --git a/drivers/media/platform/exynos4-is/fimc-capture.c b/drivers/media/platform/exynos4-is/fimc-capture.c index e7a4b06e6dfe..2b163480eba4 100644 --- a/drivers/media/platform/exynos4-is/fimc-capture.c +++ b/drivers/media/platform/exynos4-is/fimc-capture.c @@ -201,7 +201,7 @@ void fimc_capture_irq_handler(struct fimc_dev *fimc, int deq_buf) if (!list_empty(&cap->pending_buf_q)) { v_buf = fimc_pending_queue_pop(cap); - fimc_hw_set_output_addr(fimc, &v_buf->paddr, cap->buf_index); + fimc_hw_set_output_addr(fimc, &v_buf->addr, cap->buf_index); v_buf->index = cap->buf_index; /* Move the buffer to the capture active queue */ @@ -410,7 +410,7 @@ static void buffer_queue(struct vb2_buffer *vb) int min_bufs; spin_lock_irqsave(&fimc->slock, flags); - fimc_prepare_addr(ctx, &buf->vb.vb2_buf, &ctx->d_frame, &buf->paddr); + fimc_prepare_addr(ctx, &buf->vb.vb2_buf, &ctx->d_frame, &buf->addr); if (!test_bit(ST_CAPT_SUSPENDED, &fimc->state) && !test_bit(ST_CAPT_STREAM, &fimc->state) && @@ -419,7 +419,7 @@ static void buffer_queue(struct vb2_buffer *vb) int buf_id = (vid_cap->reqbufs_count == 1) ? -1 : vid_cap->buf_index; - fimc_hw_set_output_addr(fimc, &buf->paddr, buf_id); + fimc_hw_set_output_addr(fimc, &buf->addr, buf_id); buf->index = vid_cap->buf_index; fimc_active_queue_add(vid_cap, buf); diff --git a/drivers/media/platform/exynos4-is/fimc-core.c b/drivers/media/platform/exynos4-is/fimc-core.c index cde60fbb23a8..93d85fc83f50 100644 --- a/drivers/media/platform/exynos4-is/fimc-core.c +++ b/drivers/media/platform/exynos4-is/fimc-core.c @@ -325,7 +325,7 @@ static irqreturn_t fimc_irq_handler(int irq, void *priv) /* The color format (colplanes, memplanes) must be already configured. */ int fimc_prepare_addr(struct fimc_ctx *ctx, struct vb2_buffer *vb, - struct fimc_frame *frame, struct fimc_addr *paddr) + struct fimc_frame *frame, struct fimc_addr *addr) { int ret = 0; u32 pix_size; @@ -338,42 +338,40 @@ int fimc_prepare_addr(struct fimc_ctx *ctx, struct vb2_buffer *vb, dbg("memplanes= %d, colplanes= %d, pix_size= %d", frame->fmt->memplanes, frame->fmt->colplanes, pix_size); - paddr->y = vb2_dma_contig_plane_dma_addr(vb, 0); + addr->y = vb2_dma_contig_plane_dma_addr(vb, 0); if (frame->fmt->memplanes == 1) { switch (frame->fmt->colplanes) { case 1: - paddr->cb = 0; - paddr->cr = 0; + addr->cb = 0; + addr->cr = 0; break; case 2: /* decompose Y into Y/Cb */ - paddr->cb = (u32)(paddr->y + pix_size); - paddr->cr = 0; + addr->cb = (u32)(addr->y + pix_size); + addr->cr = 0; break; case 3: - paddr->cb = (u32)(paddr->y + pix_size); + addr->cb = (u32)(addr->y + pix_size); /* decompose Y into Y/Cb/Cr */ if (FIMC_FMT_YCBCR420 == frame->fmt->color) - paddr->cr = (u32)(paddr->cb - + (pix_size >> 2)); + addr->cr = (u32)(addr->cb + (pix_size >> 2)); else /* 422 */ - paddr->cr = (u32)(paddr->cb - + (pix_size >> 1)); + addr->cr = (u32)(addr->cb + (pix_size >> 1)); break; default: return -EINVAL; } } else if (!frame->fmt->mdataplanes) { if (frame->fmt->memplanes >= 2) - paddr->cb = vb2_dma_contig_plane_dma_addr(vb, 1); + addr->cb = vb2_dma_contig_plane_dma_addr(vb, 1); if (frame->fmt->memplanes == 3) - paddr->cr = vb2_dma_contig_plane_dma_addr(vb, 2); + addr->cr = vb2_dma_contig_plane_dma_addr(vb, 2); } - dbg("PHYS_ADDR: y= 0x%X cb= 0x%X cr= 0x%X ret= %d", - paddr->y, paddr->cb, paddr->cr, ret); + dbg("DMA ADDR: y= 0x%X cb= 0x%X cr= 0x%X ret= %d", + addr->y, addr->cb, addr->cr, ret); return ret; } diff --git a/drivers/media/platform/exynos4-is/fimc-core.h b/drivers/media/platform/exynos4-is/fimc-core.h index d130f664a60b..5419c3fdc307 100644 --- a/drivers/media/platform/exynos4-is/fimc-core.h +++ b/drivers/media/platform/exynos4-is/fimc-core.h @@ -202,10 +202,10 @@ struct fimc_scaler { }; /** - * struct fimc_addr - the FIMC physical address set for DMA - * @y: luminance plane physical address - * @cb: Cb plane physical address - * @cr: Cr plane physical address + * struct fimc_addr - the FIMC address set for DMA + * @y: luminance plane address + * @cb: Cb plane address + * @cr: Cr plane address */ struct fimc_addr { u32 y; @@ -217,13 +217,13 @@ struct fimc_addr { * struct fimc_vid_buffer - the driver's video buffer * @vb: v4l videobuf buffer * @list: linked list structure for buffer queue - * @paddr: precalculated physical address set + * @addr: precalculated DMA address set * @index: buffer index for the output DMA engine */ struct fimc_vid_buffer { struct vb2_v4l2_buffer vb; struct list_head list; - struct fimc_addr paddr; + struct fimc_addr addr; int index; }; @@ -239,7 +239,7 @@ struct fimc_vid_buffer { * @height: image pixel weight * @payload: image size in bytes (w x h x bpp) * @bytesperline: bytesperline value for each plane - * @paddr: image frame buffer physical addresses + * @addr: image frame buffer DMA addresses * @dma_offset: DMA offset in bytes * @fmt: fimc color format pointer */ @@ -254,7 +254,7 @@ struct fimc_frame { u32 height; unsigned int payload[VIDEO_MAX_PLANES]; unsigned int bytesperline[VIDEO_MAX_PLANES]; - struct fimc_addr paddr; + struct fimc_addr addr; struct fimc_dma_offset dma_offset; struct fimc_fmt *fmt; u8 alpha; @@ -631,7 +631,7 @@ int fimc_check_scaler_ratio(struct fimc_ctx *ctx, int sw, int sh, int fimc_set_scaler_info(struct fimc_ctx *ctx); int fimc_prepare_config(struct fimc_ctx *ctx, u32 flags); int fimc_prepare_addr(struct fimc_ctx *ctx, struct vb2_buffer *vb, - struct fimc_frame *frame, struct fimc_addr *paddr); + struct fimc_frame *frame, struct fimc_addr *addr); void fimc_prepare_dma_offset(struct fimc_ctx *ctx, struct fimc_frame *f); void fimc_set_yuv_order(struct fimc_ctx *ctx); void fimc_capture_irq_handler(struct fimc_dev *fimc, int deq_buf); diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c index a474014f0a0f..69510a700798 100644 --- a/drivers/media/platform/exynos4-is/fimc-is.c +++ b/drivers/media/platform/exynos4-is/fimc-is.c @@ -269,7 +269,7 @@ int fimc_is_cpu_set_power(struct fimc_is *is, int on) mcuctl_write(0, is, REG_WDT_ISP); /* Cortex-A5 start address setting */ - mcuctl_write(is->memory.paddr, is, MCUCTL_REG_BBOAR); + mcuctl_write(is->memory.addr, is, MCUCTL_REG_BBOAR); /* Enable and start Cortex-A5 */ pmuisp_write(0x18000, is, REG_PMU_ISP_ARM_OPTION); @@ -336,26 +336,26 @@ static int fimc_is_alloc_cpu_memory(struct fimc_is *is) struct device *dev = &is->pdev->dev; is->memory.vaddr = dma_alloc_coherent(dev, FIMC_IS_CPU_MEM_SIZE, - &is->memory.paddr, GFP_KERNEL); + &is->memory.addr, GFP_KERNEL); if (is->memory.vaddr == NULL) return -ENOMEM; is->memory.size = FIMC_IS_CPU_MEM_SIZE; - dev_info(dev, "FIMC-IS CPU memory base: %#x\n", (u32)is->memory.paddr); + dev_info(dev, "FIMC-IS CPU memory base: %pad\n", &is->memory.addr); - if (((u32)is->memory.paddr) & FIMC_IS_FW_ADDR_MASK) { + if (((u32)is->memory.addr) & FIMC_IS_FW_ADDR_MASK) { dev_err(dev, "invalid firmware memory alignment: %#x\n", - (u32)is->memory.paddr); + (u32)is->memory.addr); dma_free_coherent(dev, is->memory.size, is->memory.vaddr, - is->memory.paddr); + is->memory.addr); return -EIO; } is->is_p_region = (struct is_region *)(is->memory.vaddr + FIMC_IS_CPU_MEM_SIZE - FIMC_IS_REGION_SIZE); - is->is_dma_p_region = is->memory.paddr + + is->is_dma_p_region = is->memory.addr + FIMC_IS_CPU_MEM_SIZE - FIMC_IS_REGION_SIZE; is->is_shared_region = (struct is_share_region *)(is->memory.vaddr + @@ -371,7 +371,7 @@ static void fimc_is_free_cpu_memory(struct fimc_is *is) return; dma_free_coherent(dev, is->memory.size, is->memory.vaddr, - is->memory.paddr); + is->memory.addr); } static void fimc_is_load_firmware(const struct firmware *fw, void *context) @@ -416,7 +416,7 @@ static void fimc_is_load_firmware(const struct firmware *fw, void *context) dev_info(dev, "loaded firmware: %s, rev. %s\n", is->fw.info, is->fw.version); - dev_dbg(dev, "FW size: %zu, paddr: %pad\n", fw->size, &is->memory.paddr); + dev_dbg(dev, "FW size: %zu, DMA addr: %pad\n", fw->size, &is->memory.addr); is->is_shared_region->chip_id = 0xe4412; is->is_shared_region->chip_rev_no = 1; @@ -699,7 +699,7 @@ int fimc_is_hw_initialize(struct fimc_is *is) } pr_debug("shared region: %pad, parameter region: %pad\n", - &is->memory.paddr + FIMC_IS_SHARED_REGION_OFFSET, + &is->memory.addr + FIMC_IS_SHARED_REGION_OFFSET, &is->is_dma_p_region); is->setfile.sub_index = 0; diff --git a/drivers/media/platform/exynos4-is/fimc-is.h b/drivers/media/platform/exynos4-is/fimc-is.h index 7ee96a058d40..ce30b007bc55 100644 --- a/drivers/media/platform/exynos4-is/fimc-is.h +++ b/drivers/media/platform/exynos4-is/fimc-is.h @@ -174,7 +174,7 @@ struct is_af_info { struct fimc_is_firmware { const struct firmware *f_w; - dma_addr_t paddr; + dma_addr_t addr; void *vaddr; unsigned int size; @@ -185,8 +185,8 @@ struct fimc_is_firmware { }; struct fimc_is_memory { - /* physical base address */ - dma_addr_t paddr; + /* DMA base address */ + dma_addr_t addr; /* virtual base address */ void *vaddr; /* total length */ diff --git a/drivers/media/platform/exynos4-is/fimc-lite-reg.c b/drivers/media/platform/exynos4-is/fimc-lite-reg.c index 85f765e0f4e1..57996b4104b4 100644 --- a/drivers/media/platform/exynos4-is/fimc-lite-reg.c +++ b/drivers/media/platform/exynos4-is/fimc-lite-reg.c @@ -272,9 +272,9 @@ void flite_hw_set_dma_buffer(struct fimc_lite *dev, struct flite_buffer *buf) index = buf->index; if (index == 0) - writel(buf->paddr, dev->regs + FLITE_REG_CIOSA); + writel(buf->addr, dev->regs + FLITE_REG_CIOSA); else - writel(buf->paddr, dev->regs + FLITE_REG_CIOSAN(index - 1)); + writel(buf->addr, dev->regs + FLITE_REG_CIOSAN(index - 1)); cfg = readl(dev->regs + FLITE_REG_CIFCNTSEQ); cfg |= BIT(index); diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c index 9c666f663ab4..1576f273761b 100644 --- a/drivers/media/platform/exynos4-is/fimc-lite.c +++ b/drivers/media/platform/exynos4-is/fimc-lite.c @@ -409,7 +409,7 @@ static void buffer_queue(struct vb2_buffer *vb) unsigned long flags; spin_lock_irqsave(&fimc->slock, flags); - buf->paddr = vb2_dma_contig_plane_dma_addr(vb, 0); + buf->addr = vb2_dma_contig_plane_dma_addr(vb, 0); buf->index = fimc->buf_index++; if (fimc->buf_index >= fimc->reqbufs_count) diff --git a/drivers/media/platform/exynos4-is/fimc-lite.h b/drivers/media/platform/exynos4-is/fimc-lite.h index e6846c5fc9ac..e2d4d628b5aa 100644 --- a/drivers/media/platform/exynos4-is/fimc-lite.h +++ b/drivers/media/platform/exynos4-is/fimc-lite.h @@ -93,13 +93,13 @@ struct flite_frame { * struct flite_buffer - video buffer structure * @vb: vb2 buffer * @list: list head for the buffers queue - * @paddr: DMA buffer start address + * @addr: DMA buffer start address * @index: DMA start address register's index */ struct flite_buffer { struct vb2_v4l2_buffer vb; struct list_head list; - dma_addr_t paddr; + dma_addr_t addr; unsigned short index; }; diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media/platform/exynos4-is/fimc-m2m.c index 4acb179556c4..c9704a147e5c 100644 --- a/drivers/media/platform/exynos4-is/fimc-m2m.c +++ b/drivers/media/platform/exynos4-is/fimc-m2m.c @@ -115,12 +115,12 @@ static void fimc_device_run(void *priv) } src_vb = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); - ret = fimc_prepare_addr(ctx, &src_vb->vb2_buf, sf, &sf->paddr); + ret = fimc_prepare_addr(ctx, &src_vb->vb2_buf, sf, &sf->addr); if (ret) goto dma_unlock; dst_vb = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); - ret = fimc_prepare_addr(ctx, &dst_vb->vb2_buf, df, &df->paddr); + ret = fimc_prepare_addr(ctx, &dst_vb->vb2_buf, df, &df->addr); if (ret) goto dma_unlock; @@ -152,8 +152,8 @@ static void fimc_device_run(void *priv) fimc_hw_set_rgb_alpha(ctx); fimc_hw_set_output_path(ctx); } - fimc_hw_set_input_addr(fimc, &sf->paddr); - fimc_hw_set_output_addr(fimc, &df->paddr, -1); + fimc_hw_set_input_addr(fimc, &sf->addr); + fimc_hw_set_output_addr(fimc, &df->addr, -1); fimc_activate_capture(ctx); ctx->state &= (FIMC_CTX_M2M | FIMC_CTX_CAP); diff --git a/drivers/media/platform/exynos4-is/fimc-reg.c b/drivers/media/platform/exynos4-is/fimc-reg.c index 5ce2bdebd424..76b97d567673 100644 --- a/drivers/media/platform/exynos4-is/fimc-reg.c +++ b/drivers/media/platform/exynos4-is/fimc-reg.c @@ -526,30 +526,30 @@ void fimc_hw_set_output_path(struct fimc_ctx *ctx) writel(cfg, dev->regs + FIMC_REG_CISCCTRL); } -void fimc_hw_set_input_addr(struct fimc_dev *dev, struct fimc_addr *paddr) +void fimc_hw_set_input_addr(struct fimc_dev *dev, struct fimc_addr *addr) { u32 cfg = readl(dev->regs + FIMC_REG_CIREAL_ISIZE); cfg |= FIMC_REG_CIREAL_ISIZE_ADDR_CH_DIS; writel(cfg, dev->regs + FIMC_REG_CIREAL_ISIZE); - writel(paddr->y, dev->regs + FIMC_REG_CIIYSA(0)); - writel(paddr->cb, dev->regs + FIMC_REG_CIICBSA(0)); - writel(paddr->cr, dev->regs + FIMC_REG_CIICRSA(0)); + writel(addr->y, dev->regs + FIMC_REG_CIIYSA(0)); + writel(addr->cb, dev->regs + FIMC_REG_CIICBSA(0)); + writel(addr->cr, dev->regs + FIMC_REG_CIICRSA(0)); cfg &= ~FIMC_REG_CIREAL_ISIZE_ADDR_CH_DIS; writel(cfg, dev->regs + FIMC_REG_CIREAL_ISIZE); } void fimc_hw_set_output_addr(struct fimc_dev *dev, - struct fimc_addr *paddr, int index) + struct fimc_addr *addr, int index) { int i = (index == -1) ? 0 : index; do { - writel(paddr->y, dev->regs + FIMC_REG_CIOYSA(i)); - writel(paddr->cb, dev->regs + FIMC_REG_CIOCBSA(i)); - writel(paddr->cr, dev->regs + FIMC_REG_CIOCRSA(i)); + writel(addr->y, dev->regs + FIMC_REG_CIOYSA(i)); + writel(addr->cb, dev->regs + FIMC_REG_CIOCBSA(i)); + writel(addr->cr, dev->regs + FIMC_REG_CIOCRSA(i)); dbg("dst_buf[%d]: 0x%X, cb: 0x%X, cr: 0x%X", - i, paddr->y, paddr->cb, paddr->cr); + i, addr->y, addr->cb, addr->cr); } while (index == -1 && ++i < FIMC_MAX_OUT_BUFS); } diff --git a/drivers/media/platform/exynos4-is/fimc-reg.h b/drivers/media/platform/exynos4-is/fimc-reg.h index b81826d04936..d7a62465c14e 100644 --- a/drivers/media/platform/exynos4-is/fimc-reg.h +++ b/drivers/media/platform/exynos4-is/fimc-reg.h @@ -302,8 +302,8 @@ void fimc_hw_set_rgb_alpha(struct fimc_ctx *ctx); void fimc_hw_set_in_dma(struct fimc_ctx *ctx); void fimc_hw_set_input_path(struct fimc_ctx *ctx); void fimc_hw_set_output_path(struct fimc_ctx *ctx); -void fimc_hw_set_input_addr(struct fimc_dev *fimc, struct fimc_addr *paddr); -void fimc_hw_set_output_addr(struct fimc_dev *fimc, struct fimc_addr *paddr, +void fimc_hw_set_input_addr(struct fimc_dev *fimc, struct fimc_addr *addr); +void fimc_hw_set_output_addr(struct fimc_dev *fimc, struct fimc_addr *addr, int index); int fimc_hw_set_camera_source(struct fimc_dev *fimc, struct fimc_source_info *cam); From patchwork Fri Sep 18 14:48:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 313199 Delivered-To: patch@linaro.org Received: by 2002:a92:5ad1:0:0:0:0:0 with SMTP id b78csp1400195ilg; Fri, 18 Sep 2020 07:48:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwpeZtRQmYjSFK2Zp6ne4fz1x9oh5YjK69UlY9CS77OWbOmrh+SgKra+JhsAV2ClnJQCK2w X-Received: by 2002:a50:baed:: with SMTP id x100mr23380782ede.384.1600440536916; Fri, 18 Sep 2020 07:48:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600440536; cv=none; d=google.com; s=arc-20160816; b=Fg3WpYeZXbgUfUauqqA9MT5/AGfZoD3raxdWHJENOzMAeJvwAyotVpcFknOCE8aqeH feYNcVJPp7kSkLwjJa6u7nIxuy88TN0cMwPSIWDGOR2Rqmq6svLazlqtxNV8NMkPUp6q mYUZbGSV0TiqtETwzj0E6hg3G+jU87JiDcLaXp2WHk7KcICyaV1eeMOdL/o5ltJklZG0 qfuO49N/I1oWjoBD7yWzflrUA9JyCTpI5rHzqq3VwKK+Ac1UYLuNI2xQ2+raKpGgqxO9 Y+qD+VE3Ba7IWpcZxER5owVeweQUiMbEz18gkJh8474VHKM14oTgGrAwdicCcyh0D6YD GBBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:cms-type:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-filter; bh=NT9iqMLTjgKNpXXtL1v6+t4dPuGuedIJyGlk+Ys+a+c=; b=GY58UHU5oU7Y/Q+FIV0wOny1gD877Zs4bHz5pJzL9wqltd0G6KUSNVDLMkqM/ogHAB c7tiG+b/Uhs29fJMrXWAL+ivqQoGMcrXjZ6z+b1pMB9ZkQZPuqoOoLw1PK7LRK+XxDs9 rRI9X9/eZyrbeq9gp4dsMMwZlJ8JQVAWsXeOoUJJxmrOj6WpcYmvaMYfCSyVpyxgzLXf HE7NKzK599WRBfQ+6amyz0Zu1EvHymjyjO3U3lARLP3GYO/8cHhyhULi6Fyk/hCtehyK 5hcafGZJj5yjjAwiKTvDoB2aKS4P6ht2rbnfh103h7qgFpyTUj13o0sSR4odZMUFHoTv koQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=qNaSX45G; spf=pass (google.com: domain of linux-media-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-media-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id pw5si2411330ejb.513.2020.09.18.07.48.56; Fri, 18 Sep 2020 07:48:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-media-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=qNaSX45G; spf=pass (google.com: domain of linux-media-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-media-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726696AbgIROsz (ORCPT + 4 others); Fri, 18 Sep 2020 10:48:55 -0400 Received: from mailout2.w1.samsung.com ([210.118.77.12]:44495 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726380AbgIROsz (ORCPT ); Fri, 18 Sep 2020 10:48:55 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20200918144853euoutp02a82e07887cc8deb5dafb0a3e815517cb~16C_lLHMx2946329463euoutp02l for ; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20200918144853euoutp02a82e07887cc8deb5dafb0a3e815517cb~16C_lLHMx2946329463euoutp02l DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1600440533; bh=NT9iqMLTjgKNpXXtL1v6+t4dPuGuedIJyGlk+Ys+a+c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qNaSX45GwO06KcEQBYkeIoDhj1x+063c6H+OLmSIw2Rrt17+riqtZfgIUUPTs+ROK StkXvuljDFrZtBQA1IDUSn2gKgGo6PZaJQ2pShXMukNcO7CNFc3b3kXSRTHGGPMB7I PsTvHhMMlzyz1626T8pSlztZqjscZ5fRy9N2dg9k= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200918144853eucas1p215d60de9e9481717700567ee4f6d2214~16C_XPre11376313763eucas1p2J; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id E7.BE.05997.5D8C46F5; Fri, 18 Sep 2020 15:48:53 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20200918144853eucas1p1b04a96d33c66052f845b3979a3105f9f~16C_Ahl3N3169231692eucas1p1p; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200918144853eusmtrp1713718cbbb730d4a4f38e7646ae43202~16C9-5vk61892418924eusmtrp1B; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) X-AuditID: cbfec7f4-65dff7000000176d-53-5f64c8d549a4 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 98.2E.06314.5D8C46F5; Fri, 18 Sep 2020 15:48:53 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200918144852eusmtip15af5d2da0fd731f0d3933141779eef8c~16C9eRFtd1497714977eusmtip1h; Fri, 18 Sep 2020 14:48:52 +0000 (GMT) From: Marek Szyprowski To: linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Robin Murphy , Bartlomiej Zolnierkiewicz , Mauro Carvalho Chehab , Tomasz Figa Subject: [PATCH v2 2/4] media: platform: exynos4-is: add support for generic IOMMU-DMA glue code Date: Fri, 18 Sep 2020 16:48:31 +0200 Message-Id: <20200918144833.14618-3-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200918144833.14618-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjleLIzCtJLcpLzFFi42LZduzned2rJ1LiDZ7NUrfYOGM9q8X58xvY LXo2bGW1mHF+H5PF2iN32S2WbfrDZHHwwxNWi/anL5ktPrf+Y3Pg9Fgzbw2jx+yGiywem1Z1 snn0bVnF6PF5k1wAaxSXTUpqTmZZapG+XQJXRsf3hUwFC3Qrem42szQwXlLtYuTkkBAwkVhy 5Q5rFyMXh5DACkaJfftOsUM4Xxgldsy4zQLhfGaUaP9ynBGmZU7nOUaIxHJGic5Tc1nhWibt /8oKUsUmYCjR9baLDcQWEXCSWDjrL9hcZoFNTBK73nxg6mLk4BAWSJKYdMEcpIZFQFVi6qU7 YPW8ArYS8y4dZIbYJi+xesMBZpByTgE7iatNliBjJAT+s0lc3X0f6iIXiWX7NkHVC0u8Or6F HcKWkTg9uYcFoqGZUeLhubXsEE4Po8TlphlQ3dYSd879YgPZwCygKbF+lz5E2FHi1415LCBh CQE+iRtvBUHCzEDmpG3TmSHCvBIdbUIQ1WoSs46vg1t78MIlqHM8JOYdnswGCZ+JjBI3dq1n mcAoPwth2QJGxlWM4qmlxbnpqcVGeanlesWJucWleel6yfm5mxiBqeP0v+NfdjDu+pN0iFGA g1GJh/fFvJR4IdbEsuLK3EOMEhzMSiK8TmdPxwnxpiRWVqUW5ccXleakFh9ilOZgURLnNV70 MlZIID2xJDU7NbUgtQgmy8TBKdXAKM8h+XYLT8NrwfI3Z1b9Z5Jfs/V4Y8+0+KYHGXmscvmx Zl4vd16r5rb1WJg9NXC5gEL8dkn3PsvsrfaZpdtm3PM1105YliCT83fXfTdB594sg2iRhkXf mBImPnv9ucs/Wz6fdfrcFQsL/z0XmDqr7Mecx3yGeesEY4o/qUyclsRn4Fg78+YKJZbijERD Leai4kQANlKKShkDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrGLMWRmVeSWpSXmKPExsVy+t/xu7pXT6TEG/Qe5rTYOGM9q8X58xvY LXo2bGW1mHF+H5PF2iN32S2WbfrDZHHwwxNWi/anL5ktPrf+Y3Pg9Fgzbw2jx+yGiywem1Z1 snn0bVnF6PF5k1wAa5SeTVF+aUmqQkZ+cYmtUrShhZGeoaWFnpGJpZ6hsXmslZGpkr6dTUpq TmZZapG+XYJeRsf3hUwFC3Qrem42szQwXlLtYuTkkBAwkZjTeY6xi5GLQ0hgKaNE84mtrBAJ GYmT0xqgbGGJP9e62CCKPjFKvN13FyzBJmAo0fUWJMHJISLgIrF/z1NmkCJmgW1MEr+2LmLq YuTgEBZIkDjxzgekhkVAVWLqpTtg9bwCthLzLh1khlggL7F6wwFmkHJOATuJq02WIGEhoJLW JUvYJjDyLWBkWMUoklpanJueW2yoV5yYW1yal66XnJ+7iREYxtuO/dy8g/HSxuBDjAIcjEo8 vC/mpcQLsSaWFVfmHmKU4GBWEuF1Ons6Tog3JbGyKrUoP76oNCe1+BCjKdBNE5mlRJPzgTGW VxJvaGpobmFpaG5sbmxmoSTO2yFwMEZIID2xJDU7NbUgtQimj4mDU6qBUfGt4Y2zLy7MUp8S vyrYuc9e0Vxy/cfySyfdQjod/n4WErPr8LbL9pz9ZW+4TXuo59aSkAmz0ueLuglzt0q/sr3K YrAn5LfZta6fmdODbuRkZDMflUt5LSmnvkfoSa7vvJN3vtxWW6u894vLoi1L49cflPwb1SjX mlLaFnv03sSN0/6vr7mYrMRSnJFoqMVcVJwIAC5MSwx5AgAA X-CMS-MailID: 20200918144853eucas1p1b04a96d33c66052f845b3979a3105f9f X-Msg-Generator: CA X-RootMTR: 20200918144853eucas1p1b04a96d33c66052f845b3979a3105f9f X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200918144853eucas1p1b04a96d33c66052f845b3979a3105f9f References: <20200918144833.14618-1-m.szyprowski@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Exynos4-IS driver relied on the was the ARM DMA-IOMMU glue code worked - mainly it relied on the fact that the allocator used first-fit algorithm and the first allocated buffer were at 0x0 DMA/IOVA address. This is not true for the generic IOMMU-DMA glue code that will be used for ARM architecture soon, so add the needed code to support such case. Signed-off-by: Marek Szyprowski --- drivers/media/platform/exynos4-is/fimc-is.c | 72 +++++++++++++++++---- drivers/media/platform/exynos4-is/fimc-is.h | 4 +- 2 files changed, 63 insertions(+), 13 deletions(-) -- 2.17.1 diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c index 69510a700798..98fb242b6ac7 100644 --- a/drivers/media/platform/exynos4-is/fimc-is.c +++ b/drivers/media/platform/exynos4-is/fimc-is.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -269,7 +270,7 @@ int fimc_is_cpu_set_power(struct fimc_is *is, int on) mcuctl_write(0, is, REG_WDT_ISP); /* Cortex-A5 start address setting */ - mcuctl_write(is->memory.addr, is, MCUCTL_REG_BBOAR); + mcuctl_write(is->memory.base, is, MCUCTL_REG_BBOAR); /* Enable and start Cortex-A5 */ pmuisp_write(0x18000, is, REG_PMU_ISP_ARM_OPTION); @@ -330,37 +331,82 @@ int fimc_is_start_firmware(struct fimc_is *is) return ret; } +#ifdef CONFIG_IOMMU_DMA +#define FIMC_IS_CPU_MEM_BASE (0) +static int fimc_iommu_remap_cpu_memory(struct fimc_is *is) +{ + struct device *dev = &is->pdev->dev; + struct sg_table sgt; + int ret; + + if (!dev_iommu_priv_get(dev)) + return 0; + + ret = dma_get_sgtable(dev, &sgt, is->memory.vaddr, + is->memory.alloc_addr, FIMC_IS_CPU_MEM_SIZE); + if (ret) + return ret; + + ret = iommu_map_sgtable(iommu_get_domain_for_dev(dev), + FIMC_IS_CPU_MEM_BASE, &sgt, + IOMMU_READ | IOMMU_WRITE); + sg_free_table(&sgt); + if (ret != FIMC_IS_CPU_MEM_SIZE) + return -EINVAL; + + is->memory.base = FIMC_IS_CPU_MEM_BASE; + return 0; +} + +static void fimc_iommu_unmap_cpu_memory(struct fimc_is *is) +{ + struct device *dev = &is->pdev->dev; + + iommu_unmap(iommu_get_domain_for_dev(dev), FIMC_IS_CPU_MEM_BASE, + FIMC_IS_CPU_MEM_SIZE); +} +#else +static inline int fimc_iommu_remap_cpu_memory(struct fimc_is *is) { return 0; } +static void fimc_iommu_unmap_cpu_memory(struct fimc_is *is) { } +#endif + /* Allocate working memory for the FIMC-IS CPU. */ static int fimc_is_alloc_cpu_memory(struct fimc_is *is) { struct device *dev = &is->pdev->dev; is->memory.vaddr = dma_alloc_coherent(dev, FIMC_IS_CPU_MEM_SIZE, - &is->memory.addr, GFP_KERNEL); + &is->memory.alloc_addr, GFP_KERNEL); if (is->memory.vaddr == NULL) return -ENOMEM; + is->memory.base = is->memory.alloc_addr; is->memory.size = FIMC_IS_CPU_MEM_SIZE; - dev_info(dev, "FIMC-IS CPU memory base: %pad\n", &is->memory.addr); + if (fimc_iommu_remap_cpu_memory(is)) + goto err; + + dev_info(dev, "FIMC-IS CPU memory base: %pad\n", &is->memory.base); - if (((u32)is->memory.addr) & FIMC_IS_FW_ADDR_MASK) { + if (((u32)is->memory.base) & FIMC_IS_FW_ADDR_MASK) { dev_err(dev, "invalid firmware memory alignment: %#x\n", - (u32)is->memory.addr); - dma_free_coherent(dev, is->memory.size, is->memory.vaddr, - is->memory.addr); - return -EIO; + (u32)is->memory.base); + goto err; } is->is_p_region = (struct is_region *)(is->memory.vaddr + FIMC_IS_CPU_MEM_SIZE - FIMC_IS_REGION_SIZE); - is->is_dma_p_region = is->memory.addr + + is->is_dma_p_region = is->memory.base + FIMC_IS_CPU_MEM_SIZE - FIMC_IS_REGION_SIZE; is->is_shared_region = (struct is_share_region *)(is->memory.vaddr + FIMC_IS_SHARED_REGION_OFFSET); return 0; +err: + dma_free_coherent(dev, is->memory.size, is->memory.vaddr, + is->memory.alloc_addr); + return -EIO; } static void fimc_is_free_cpu_memory(struct fimc_is *is) @@ -370,8 +416,9 @@ static void fimc_is_free_cpu_memory(struct fimc_is *is) if (is->memory.vaddr == NULL) return; + fimc_iommu_unmap_cpu_memory(is); dma_free_coherent(dev, is->memory.size, is->memory.vaddr, - is->memory.addr); + is->memory.alloc_addr); } static void fimc_is_load_firmware(const struct firmware *fw, void *context) @@ -416,7 +463,8 @@ static void fimc_is_load_firmware(const struct firmware *fw, void *context) dev_info(dev, "loaded firmware: %s, rev. %s\n", is->fw.info, is->fw.version); - dev_dbg(dev, "FW size: %zu, DMA addr: %pad\n", fw->size, &is->memory.addr); + dev_dbg(dev, "FW size: %zu, DMA addr: %pad\n", fw->size, + &is->memory.base); is->is_shared_region->chip_id = 0xe4412; is->is_shared_region->chip_rev_no = 1; @@ -699,7 +747,7 @@ int fimc_is_hw_initialize(struct fimc_is *is) } pr_debug("shared region: %pad, parameter region: %pad\n", - &is->memory.addr + FIMC_IS_SHARED_REGION_OFFSET, + &is->memory.base + FIMC_IS_SHARED_REGION_OFFSET, &is->is_dma_p_region); is->setfile.sub_index = 0; diff --git a/drivers/media/platform/exynos4-is/fimc-is.h b/drivers/media/platform/exynos4-is/fimc-is.h index ce30b007bc55..d44729839310 100644 --- a/drivers/media/platform/exynos4-is/fimc-is.h +++ b/drivers/media/platform/exynos4-is/fimc-is.h @@ -186,7 +186,9 @@ struct fimc_is_firmware { struct fimc_is_memory { /* DMA base address */ - dma_addr_t addr; + dma_addr_t base; + /* DMA address from allocator */ + dma_addr_t alloc_addr; /* virtual base address */ void *vaddr; /* total length */ From patchwork Fri Sep 18 14:48:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 255742 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4DA7FC43465 for ; Fri, 18 Sep 2020 14:48:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D5FE02311D for ; Fri, 18 Sep 2020 14:48:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="hATTHYgM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726806AbgIROs5 (ORCPT ); Fri, 18 Sep 2020 10:48:57 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:43897 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726299AbgIROs4 (ORCPT ); Fri, 18 Sep 2020 10:48:56 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200918144854euoutp01ad97d555e0950b914a2e9375825219ef~16C-e8aAd1226312263euoutp01H for ; Fri, 18 Sep 2020 14:48:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200918144854euoutp01ad97d555e0950b914a2e9375825219ef~16C-e8aAd1226312263euoutp01H DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1600440534; bh=IiawuiQon3bMj9SyrhlKvNiI0k+pbXtLPi/hSaefohU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hATTHYgMh3imV+3bwvMMAhduTGCmuogeli26zojVAwtxc7/GL8OhB6aL29CQxiazs gDMqq9tIqPoKB5sIiiSozYFJF2IEUN5753cUQF4/NEJjMA9jV7pGWI6nt6IwTpLfyN iWbfvKDjWZ90qYAAXwsa7YuqWSUgy/Or7qFWK7e0= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200918144854eucas1p1298290dbd811fcf2d45b88241bba6aca~16C_0FF3p1092510925eucas1p1Y; Fri, 18 Sep 2020 14:48:54 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id AF.30.06456.6D8C46F5; Fri, 18 Sep 2020 15:48:54 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200918144853eucas1p262f37bb7353e97bacfd2df2449622bef~16C_Yz5jl3250032500eucas1p2d; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200918144853eusmtrp118679cc76acb9f08e145fc11da5fb361~16C_YSjI31892418924eusmtrp1C; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) X-AuditID: cbfec7f2-7efff70000001938-16-5f64c8d6ea73 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 39.2E.06314.5D8C46F5; Fri, 18 Sep 2020 15:48:53 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200918144853eusmtip1568b4f3f1bf310b2acc54f09d1a59d19~16C94MclU1559115591eusmtip1b; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) From: Marek Szyprowski To: linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Robin Murphy , Bartlomiej Zolnierkiewicz , Mauro Carvalho Chehab , Tomasz Figa Subject: [PATCH v2 3/4] media: platform: s5p-mfc: properly assign device to both vb2 queues Date: Fri, 18 Sep 2020 16:48:32 +0200 Message-Id: <20200918144833.14618-4-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200918144833.14618-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmphleLIzCtJLcpLzFFi42LZduzned1rJ1LiDc5vZbfYOGM9q8X58xvY LXo2bGW1mHF+H5PF2iN32S2WbfrDZHHwwxNWi/anL5ktPrf+Y3Pg9Fgzbw2jx+yGiywem1Z1 snn0bVnF6PF5k1wAaxSXTUpqTmZZapG+XQJXxuzLa1kK3nBUzFq2haWBcRd7FyMnh4SAicSx DzeYuhi5OIQEVjBKfJq6jBEkISTwhVFi2+VECPszo0TDFwOYhkmPPkA1LGeU2DPhBAuEA9Qw 8+cTVpAqNgFDia63XWwgtoiAk8TCWX/ZQYqYBTYxSex6A9LOySEsECuxfcZRsHUsAqoSm8+/ B4pzcPAK2ErsuScOsU1eYvWGA8wgYU4BO4mrTZYgYyQE/rNJdD7pZ4OocZGY+ushI4QtLPHq +Bao12QkTk/uYYFoaGaUeHhuLTuE08MocblpBlSHtcSdc7/YQDYwC2hKrN+lDxF2lPh6cjc7 SFhCgE/ixltBkDAzkDlp23RmiDCvREebEES1msSs4+vg1h68cIkZwvaQ6D68ih0SPhMZJbq2 9zNPYJSfhbBsASPjKkbx1NLi3PTUYsO81HK94sTc4tK8dL3k/NxNjMC0cfrf8U87GL9eSjrE KMDBqMTD+2NNSrwQa2JZcWXuIUYJDmYlEV6ns6fjhHhTEiurUovy44tKc1KLDzFKc7AoifMa L3oZKySQnliSmp2aWpBaBJNl4uCUamBc7dHbueze/hghBrHyhHmHam8+cVrXdkMlmmnh4n1P rmRvP2LsLHM4o9UwpPyuanpZ6KL2BsPlfjX7e51LemuSxfbffsi007r5rO+vi+cP/J0t9X7L 7nbOa93tQRvtEzY5HNx06X9zWezlg/Em0ZVFgrteNgWGcu303l1mKa1d+SJVSTMtZYISS3FG oqEWc1FxIgDNdaa/FwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrKLMWRmVeSWpSXmKPExsVy+t/xu7pXT6TEG0yZo2axccZ6Vovz5zew W/Rs2MpqMeP8PiaLtUfuslss2/SHyeLghyesFu1PXzJbfG79x+bA6bFm3hpGj9kNF1k8Nq3q ZPPo27KK0ePzJrkA1ig9m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TU nMyy1CJ9uwS9jNmX17IUvOGomLVsC0sD4y72LkZODgkBE4lJjz4wgdhCAksZJV6cF4SIy0ic nNbACmELS/y51sXWxcgFVPOJUeLb85dgDWwChhJdb0ESnBwiAi4S+/c8ZQYpYhbYxiTxa+si sCJhgWiJtT8+g21jEVCV2Hz+PVCcg4NXwFZizz1xiAXyEqs3HGAGCXMK2ElcbbKEuMdWonXJ ErYJjHwLGBlWMYqklhbnpucWG+oVJ+YWl+al6yXn525iBAbxtmM/N+9gvLQx+BCjAAejEg/v i3kp8UKsiWXFlbmHGCU4mJVEeJ3Ono4T4k1JrKxKLcqPLyrNSS0+xGgKdNJEZinR5HxghOWV xBuaGppbWBqaG5sbm1koifN2CByMERJITyxJzU5NLUgtgulj4uCUamBUs0yeMjE37+dyzobq LO8py88uLFhxbavczNiwOHZJo20WXnbvXj5zfcDXLpV4J/tnjvvmIzk2R9fouGzMfNlWfOQ+ x6NGh1kxLJKsK4X1j02f8De0IXb//Z1Hr9505Vr4+ZJVcvI+t4SwgqthYvuZnjU6WO09w8Z/ xkI5eP66VbqPHlXorL6mxFKckWioxVxUnAgAaLvFgXgCAAA= X-CMS-MailID: 20200918144853eucas1p262f37bb7353e97bacfd2df2449622bef X-Msg-Generator: CA X-RootMTR: 20200918144853eucas1p262f37bb7353e97bacfd2df2449622bef X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200918144853eucas1p262f37bb7353e97bacfd2df2449622bef References: <20200918144833.14618-1-m.szyprowski@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Properly set device pointers in videobuf2 queues, so the videobuf2 debugging messages will be prefixed with the respective device name. Signed-off-by: Marek Szyprowski --- drivers/media/platform/s5p-mfc/s5p_mfc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c index eba2b9f040df..4e50c342b322 100644 --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c @@ -844,6 +844,7 @@ static int s5p_mfc_open(struct file *file) q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; q->drv_priv = &ctx->fh; q->lock = &dev->mfc_mutex; + q->dev = &dev->plat_dev->dev; if (vdev == dev->vfd_dec) { q->io_modes = VB2_MMAP; q->ops = get_dec_queue_ops(); @@ -871,6 +872,7 @@ static int s5p_mfc_open(struct file *file) q->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; q->drv_priv = &ctx->fh; q->lock = &dev->mfc_mutex; + q->dev = &dev->plat_dev->dev; if (vdev == dev->vfd_dec) { q->io_modes = VB2_MMAP; q->ops = get_dec_queue_ops(); From patchwork Fri Sep 18 14:48:33 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 255741 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6E01C4346B for ; Fri, 18 Sep 2020 14:48:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8D96423119 for ; Fri, 18 Sep 2020 14:48:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="mgrImLII" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726827AbgIROs6 (ORCPT ); Fri, 18 Sep 2020 10:48:58 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:43905 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726380AbgIROs4 (ORCPT ); Fri, 18 Sep 2020 10:48:56 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200918144855euoutp01807c5dd7e37e41282cbc93b5500970d0~16C-teeQH1226312263euoutp01I for ; Fri, 18 Sep 2020 14:48:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200918144855euoutp01807c5dd7e37e41282cbc93b5500970d0~16C-teeQH1226312263euoutp01I DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1600440535; bh=RCuLRfHQO0zMamxsPVc9KnXy3A4V8FmIbMSlqAKbmTI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mgrImLIIBkbayygnBjYlCj5KeIugTkC52wSuYEtCueUwyD1XpUfl/vNjGWnOS7eaz dOJVRMff+pr+KCCGhRVyO6Mdc0GFyiWd4UvKjoo97v65IWt6dgKqBYd/fBurKdLIXI IHWIvMqkGnk+465Obyvr/gorTzq+f98oUZTliQ/w= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20200918144854eucas1p1967dc67825cc314eba6121726efef9cc~16C-e10zj2767027670eucas1p12; Fri, 18 Sep 2020 14:48:54 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id B8.BE.05997.6D8C46F5; Fri, 18 Sep 2020 15:48:54 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200918144854eucas1p2ad33e726e1e3caa04ab4145f86b05486~16C_wu6F21175311753eucas1p2O; Fri, 18 Sep 2020 14:48:54 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200918144854eusmtrp12b51a427d45a1a2583df8d4e1c665556~16C_wIer21892418924eusmtrp1E; Fri, 18 Sep 2020 14:48:54 +0000 (GMT) X-AuditID: cbfec7f4-65dff7000000176d-57-5f64c8d63011 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id F9.2E.06314.6D8C46F5; Fri, 18 Sep 2020 15:48:54 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200918144853eusmtip111e745941de67270c021f9ae5210ac18~16C_UYDIz1497714977eusmtip1i; Fri, 18 Sep 2020 14:48:53 +0000 (GMT) From: Marek Szyprowski To: linux-media@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Robin Murphy , Bartlomiej Zolnierkiewicz , Mauro Carvalho Chehab , Tomasz Figa Subject: [PATCH v2 4/4] media: platform: s5p-mfc: add support for generic DMA-IOMMU glue code Date: Fri, 18 Sep 2020 16:48:33 +0200 Message-Id: <20200918144833.14618-5-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200918144833.14618-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjleLIzCtJLcpLzFFi42LZduznOd1rJ1LiDRb2GltsnLGe1eL8+Q3s Fj0btrJazDi/j8li7ZG77BbLNv1hsjj44QmrRfvTl8wWn1v/sTlweqyZt4bRY3bDRRaPTas6 2Tz6tqxi9Pi8SS6ANYrLJiU1J7MstUjfLoEro/fAQuaC6XIV006eZW5gnCfZxcjJISFgIvFn 8y82EFtIYAWjxJM9yl2MXED2F0aJ183T2SCcz4wSlxbvZ4TpOL5vIhNEYjmjxOeNs9nhWg5t +8QKUsUmYCjR9bYLbK6IgJPEwll/wYqYBTYxSex684EJJCEsEC/x8fdsFhCbRUBVoufRLHYQ m1fAVuLS86csEOvkJVZvOMDcxcjBwSlgJ3G1yRJkjoRAM7vElBnfWCFqXCQObOplgrCFJV4d 38IOYctInJ7cwwLVwCjx8Nxadginh1HictMMqIesJe6cAwUBB9B5mhLrd+lDhB0lfi5fBLZY QoBP4sZbQZAwM5A5adt0qDCvREebEES1msSs4+vg1h68cIkZwvaQmPPhByskgCYySsyec5p9 AqP8LIRlCxgZVzGKp5YW56anFhvlpZbrFSfmFpfmpesl5+duYgSmjtP/jn/ZwbjrT9IhRgEO RiUe3hfzUuKFWBPLiitzDzFKcDArifA6nT0dJ8SbklhZlVqUH19UmpNafIhRmoNFSZzXeNHL WCGB9MSS1OzU1ILUIpgsEwenVAOjpOKuXwvda7fGcM40qn5W2+XX8fewyXaRnIIXXV/fl0y2 DtKzzqlS3+dge3haPZdTc32/YcvrefMuv/ezyftsZ7XPQa3DPWV1glpyttmVdU0TuaI6V1n/ upMgmLtHRqs2yuVWglecuIfphyN3Jj5ZZ7/8ikTzvpqJMzNi+O+fURfdWWl4epcSS3FGoqEW c1FxIgBmwhzKGQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOLMWRmVeSWpSXmKPExsVy+t/xu7rXTqTEG+z/xmyxccZ6Vovz5zew W/Rs2MpqMeP8PiaLtUfuslss2/SHyeLghyesFu1PXzJbfG79x+bA6bFm3hpGj9kNF1k8Nq3q ZPPo27KK0ePzJrkA1ig9m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TU nMyy1CJ9uwS9jN4DC5kLpstVTDt5lrmBcZ5kFyMnh4SAicTxfROZuhi5OIQEljJKXNl+iBki ISNxcloDK4QtLPHnWhcbRNEnRomlz66xgCTYBAwlut6CJDg5RARcJPbvecoMUsQssI1J4tfW RUwgCWGBWIn+F2vBGlgEVCV6Hs1iB7F5BWwlLj1/ygKxQV5i9YYDQM0cHJwCdhJXmyxBwkJA Ja1LlrBNYORbwMiwilEktbQ4Nz232FCvODG3uDQvXS85P3cTIzCQtx37uXkH46WNwYcYBTgY lXh4X8xLiRdiTSwrrsw9xCjBwawkwut09nScEG9KYmVValF+fFFpTmrxIUZToJsmMkuJJucD oyyvJN7Q1NDcwtLQ3Njc2MxCSZy3Q+BgjJBAemJJanZqakFqEUwfEwenVANjyXax2bwtn0s9 Vk75t//UhaMHb8+WlJ/NI/Bgu8f/i2alCg/WO2x+e0J5ktW8M+45zszGxp0OtXOZDzuzLzMu v2n0Qvav4RTvmCUJ4hkXg87auYR6JG36sK7v3SGZpbFmIle8Jla9Ff97xICtdY7CqnfXClln XX/zbJ6ZlkwV+5m/jXYb94kHK7EUZyQaajEXFScCAIlTWCV6AgAA X-CMS-MailID: 20200918144854eucas1p2ad33e726e1e3caa04ab4145f86b05486 X-Msg-Generator: CA X-RootMTR: 20200918144854eucas1p2ad33e726e1e3caa04ab4145f86b05486 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200918144854eucas1p2ad33e726e1e3caa04ab4145f86b05486 References: <20200918144833.14618-1-m.szyprowski@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org S5P-MFC driver relies on the way the ARM DMA-IOMMU glue code works: the IOVA allocator uses first-fit algorithm, so the first allocated buffer is at 0x0 DMA/IOVA address. This is not true for the generic IOMMU-DMA glue code that will be used for ARM architecture soon, so add the needed code to support it too. Signed-off-by: Marek Szyprowski --- drivers/media/platform/s5p-mfc/s5p_mfc.c | 35 ++++++++++++++++++- .../media/platform/s5p-mfc/s5p_mfc_common.h | 2 ++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c index 4e50c342b322..63cbf1d29c43 100644 --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -1201,6 +1202,10 @@ static int s5p_mfc_configure_common_memory(struct s5p_mfc_dev *mfc_dev) if (!mfc_dev->mem_bitmap) return -ENOMEM; + /* MFC v5 can access memory only via the 128M window */ + if (exynos_is_iommu_available(dev) && !IS_MFCV6_PLUS(mfc_dev)) + dma_set_mask_and_coherent(dev, SZ_128M - 1); + mfc_dev->mem_virt = dma_alloc_coherent(dev, mem_size, &mfc_dev->mem_base, GFP_KERNEL); if (!mfc_dev->mem_virt) { @@ -1218,13 +1223,37 @@ static int s5p_mfc_configure_common_memory(struct s5p_mfc_dev *mfc_dev) * as used (to keep required base alignment) and adjust base address */ if (mfc_dev->mem_base == (dma_addr_t)0) { - unsigned int offset = 1 << MFC_BASE_ALIGN_ORDER; + unsigned int offset = MFC_MIN_VALID_BASE; bitmap_set(mfc_dev->mem_bitmap, 0, offset >> PAGE_SHIFT); mfc_dev->dma_base[BANK_L_CTX] += offset; mfc_dev->dma_base[BANK_R_CTX] += offset; } + /* + * Generic DMA-IOMMU use last-fit memory allocation algorithm, so + * remap the firmware to the lowest supported address for MFC v5 to + * let HW properly address buffers as an offset from the firmware. + */ + if (IS_ENABLED(CONFIG_IOMMU_DMA) && exynos_is_iommu_available(dev) && + !IS_MFCV6_PLUS(mfc_dev)) { + struct sg_table sgt; + int size; + + if (dma_get_sgtable(dev, &sgt, mfc_dev->mem_virt, + mfc_dev->mem_base, mfc_dev->mem_size) != 0) + return -ENOMEM; + size = iommu_map_sgtable(iommu_get_domain_for_dev(dev), + MFC_MIN_VALID_BASE, &sgt, + IOMMU_READ | IOMMU_WRITE); + sg_free_table(&sgt); + if (size != mem_size) + return -ENOMEM; + + mfc_dev->dma_base[BANK_L_CTX] = MFC_MIN_VALID_BASE; + mfc_dev->dma_base[BANK_R_CTX] = MFC_MIN_VALID_BASE; + } + /* Firmware allocation cannot fail in this case */ s5p_mfc_alloc_firmware(mfc_dev); @@ -1241,6 +1270,10 @@ static void s5p_mfc_unconfigure_common_memory(struct s5p_mfc_dev *mfc_dev) { struct device *dev = &mfc_dev->plat_dev->dev; + if (IS_ENABLED(CONFIG_IOMMU_DMA) && exynos_is_iommu_available(dev) && + !IS_MFCV6_PLUS(mfc_dev)) + iommu_unmap(iommu_get_domain_for_dev(dev), MFC_MIN_VALID_BASE, + mfc_dev->mem_size); dma_free_coherent(dev, mfc_dev->mem_size, mfc_dev->mem_virt, mfc_dev->mem_base); kfree(mfc_dev->mem_bitmap); diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h index 96d1ecd1521b..f28c943b8426 100644 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_common.h +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_common.h @@ -37,6 +37,8 @@ #define MFC_BANK2_ALIGN_ORDER 13 #define MFC_BASE_ALIGN_ORDER 17 +#define MFC_MIN_VALID_BASE (1 << MFC_BASE_ALIGN_ORDER) + #define MFC_FW_MAX_VERSIONS 2 #include