From: Jungo Lin <jungo.lin@mediatek.com>
To: tfiga@chromium.org, hverkuil@xs4all.nl,
laurent.pinchart@ideasonboard.com, matthias.bgg@gmail.com,
mchehab@kernel.org
Cc: devicetree@vger.kernel.org, sean.cheng@mediatek.com,
rynn.wu@mediatek.com, srv_heupstream@mediatek.com,
robh@kernel.org, ryan.yu@mediatek.com, frankie.chiu@mediatek.com,
jungo.lin@mediatek.com, sj.huang@mediatek.com,
linux-mediatek@lists.infradead.org, ddavenport@chromium.org,
frederic.chen@mediatek.com, linux-arm-kernel@lists.infradead.org,
linux-media@vger.kernel.org
Subject: [RFC, v3 9/9] media: platform: Add Mediatek ISP P1 shared memory device
Date: Tue, 11 Jun 2019 11:53:44 +0800 [thread overview]
Message-ID: <20190611035344.29814-10-jungo.lin@mediatek.com> (raw)
In-Reply-To: <20190611035344.29814-1-jungo.lin@mediatek.com>
The purpose of this child device is to provide shared
memory management for exchanging tuning data between co-processor
and the Pass 1 unit of the camera ISP system, including cache
buffer handling.
Signed-off-by: Jungo Lin <jungo.lin@mediatek.com>
---
This patch depends on "Add support for mt8183 SCP"[1].
[1] https://patchwork.kernel.org/cover/10972143/
---
.../platform/mtk-isp/isp_50/cam/Makefile | 1 +
.../mtk-isp/isp_50/cam/mtk_cam-smem.c | 304 ++++++++++++++++++
.../mtk-isp/isp_50/cam/mtk_cam-smem.h | 18 ++
3 files changed, 323 insertions(+)
create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.c
create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.h
diff --git a/drivers/media/platform/mtk-isp/isp_50/cam/Makefile b/drivers/media/platform/mtk-isp/isp_50/cam/Makefile
index 95f0b1c8fa1c..d545ca6f09c5 100644
--- a/drivers/media/platform/mtk-isp/isp_50/cam/Makefile
+++ b/drivers/media/platform/mtk-isp/isp_50/cam/Makefile
@@ -4,5 +4,6 @@ mtk-cam-isp-objs += mtk_cam-ctrl.o
mtk-cam-isp-objs += mtk_cam-v4l2-util.o
mtk-cam-isp-objs += mtk_cam.o
mtk-cam-isp-objs += mtk_cam-scp.o
+mtk-cam-isp-objs += mtk_cam-smem.o
obj-$(CONFIG_VIDEO_MEDIATEK_ISP_PASS1) += mtk-cam-isp.o
\ No newline at end of file
diff --git a/drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.c b/drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.c
new file mode 100644
index 000000000000..a9845668ce10
--- /dev/null
+++ b/drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.c
@@ -0,0 +1,304 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Copyright (c) 2018 MediaTek Inc.
+
+#include <asm/cacheflush.h>
+#include <linux/device.h>
+#include <linux/io.h>
+#include <linux/iommu.h>
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_reserved_mem.h>
+#include <linux/platform_device.h>
+#include <linux/platform_data/mtk_scp.h>
+#include <media/videobuf2-dma-contig.h>
+
+#include "mtk_cam-smem.h"
+
+static struct dma_map_ops smem_dma_ops;
+
+struct mtk_cam_smem_dev {
+ struct device *dev;
+ struct sg_table sgt;
+ struct page **smem_pages;
+ dma_addr_t smem_base;
+ dma_addr_t smem_dma_base;
+ int smem_size;
+};
+
+struct dma_coherent_mem {
+ void *virt_base;
+ dma_addr_t device_base;
+ unsigned long pfn_base;
+ int size;
+ int flags;
+ unsigned long *bitmap;
+ spinlock_t spinlock; /* dma_coherent_mem attributes protection */
+ bool use_dev_dma_pfn_offset;
+};
+
+dma_addr_t mtk_cam_smem_iova_to_scp_addr(struct device *dev,
+ dma_addr_t iova)
+{
+ struct iommu_domain *domain;
+ dma_addr_t addr, limit;
+ struct mtk_cam_smem_dev *smem_dev = dev_get_drvdata(dev);
+
+ domain = iommu_get_domain_for_dev(dev);
+ if (!domain) {
+ dev_warn(dev, "No iommu group domain\n");
+ return 0;
+ }
+
+ addr = iommu_iova_to_phys(domain, iova);
+ limit = smem_dev->smem_base + smem_dev->smem_size;
+ if (addr < smem_dev->smem_base || addr >= limit) {
+ dev_err(dev,
+ "Unexpected scp_addr:%pad must >= %pad and < %pad)\n",
+ &addr, &smem_dev->smem_base, &limit);
+ return 0;
+ }
+ return addr;
+}
+
+static int mtk_cam_smem_get_sgtable(struct device *dev,
+ struct sg_table *sgt,
+ void *cpu_addr, dma_addr_t dma_addr,
+ size_t size, unsigned long attrs)
+{
+ struct mtk_cam_smem_dev *smem_dev = dev_get_drvdata(dev);
+ size_t pages_count = PAGE_ALIGN(size) >> PAGE_SHIFT;
+ dma_addr_t scp_addr = mtk_cam_smem_iova_to_scp_addr(dev, dma_addr);
+ u32 pages_start = (scp_addr - smem_dev->smem_base) >> PAGE_SHIFT;
+
+ dev_dbg(dev,
+ "%s:page:%u va:%pK scp addr:%pad, aligned size:%zu pages:%zu\n",
+ __func__, pages_start, cpu_addr, &scp_addr, size, pages_count);
+
+ return sg_alloc_table_from_pages(sgt,
+ smem_dev->smem_pages + pages_start,
+ pages_count, 0, size, GFP_KERNEL);
+}
+
+static void *mtk_cam_smem_get_cpu_addr(struct mtk_cam_smem_dev *smem_dev,
+ dma_addr_t addr)
+{
+ struct device *dev = smem_dev->dev;
+ struct dma_coherent_mem *dma_mem = dev->dma_mem;
+
+ if (addr < smem_dev->smem_base ||
+ addr > smem_dev->smem_base + smem_dev->smem_size) {
+ dev_err(dev, "Invalid scp_addr %pad from sg\n", &addr);
+ return NULL;
+ }
+ return dma_mem->virt_base + (addr - smem_dev->smem_base);
+}
+
+static void mtk_cam_smem_sync_sg_for_cpu(struct device *dev,
+ struct scatterlist *sgl, int nelems,
+ enum dma_data_direction dir)
+{
+ struct mtk_cam_smem_dev *smem_dev = dev_get_drvdata(dev);
+ dma_addr_t scp_addr = sg_phys(sgl);
+ void *cpu_addr = mtk_cam_smem_get_cpu_addr(smem_dev, scp_addr);
+
+ dev_dbg(dev,
+ "__dma_unmap_area:scp_addr:%pad,vaddr:%pK,size:%d,dir:%d\n",
+ &scp_addr, cpu_addr, sgl->length, dir);
+ __dma_unmap_area(cpu_addr, sgl->length, dir);
+}
+
+static void mtk_cam_smem_sync_sg_for_device(struct device *dev,
+ struct scatterlist *sgl,
+ int nelems,
+ enum dma_data_direction dir)
+{
+ struct mtk_cam_smem_dev *smem_dev = dev_get_drvdata(dev);
+ dma_addr_t scp_addr = sg_phys(sgl);
+ void *cpu_addr = mtk_cam_smem_get_cpu_addr(smem_dev, scp_addr);
+
+ dev_dbg(dev,
+ "__dma_map_area:scp_addr:%pad,vaddr:%pK,size:%d,dir:%d\n",
+ &scp_addr, cpu_addr, sgl->length, dir);
+ __dma_map_area(cpu_addr, sgl->length, dir);
+}
+
+static void mtk_cam_smem_setup_dma_ops(struct device *dev,
+ struct dma_map_ops *smem_ops)
+{
+ memcpy((void *)smem_ops, dev->dma_ops, sizeof(*smem_ops));
+ smem_ops->get_sgtable = mtk_cam_smem_get_sgtable;
+ smem_ops->sync_sg_for_device = mtk_cam_smem_sync_sg_for_device;
+ smem_ops->sync_sg_for_cpu = mtk_cam_smem_sync_sg_for_cpu;
+ set_dma_ops(dev, smem_ops);
+}
+
+static int mtk_cam_reserved_drm_sg_init(struct mtk_cam_smem_dev *smem_dev)
+{
+ u32 size_align, n_pages;
+ struct device *dev = smem_dev->dev;
+ struct sg_table *sgt = &smem_dev->sgt;
+ struct page **pages;
+ dma_addr_t dma_addr;
+ unsigned int i;
+ int ret;
+
+ smem_dev->smem_base = scp_get_reserve_mem_phys(SCP_ISP_MEM2_ID);
+ smem_dev->smem_size = scp_get_reserve_mem_size(SCP_ISP_MEM2_ID);
+ if (!smem_dev->smem_base || !smem_dev->smem_size)
+ return -EPROBE_DEFER;
+
+ dev_info(dev, "%s dev:0x%pK base:%pad size:%u MiB\n",
+ __func__,
+ smem_dev->dev,
+ &smem_dev->smem_base,
+ (smem_dev->smem_size / SZ_1M));
+
+ size_align = PAGE_ALIGN(smem_dev->smem_size);
+ n_pages = size_align >> PAGE_SHIFT;
+
+ pages = kmalloc_array(n_pages, sizeof(struct page *), GFP_KERNEL);
+ if (!pages)
+ return -ENOMEM;
+
+ for (i = 0; i < n_pages; i++)
+ pages[i] = phys_to_page(smem_dev->smem_base + i * PAGE_SIZE);
+
+ ret = sg_alloc_table_from_pages(sgt, pages, n_pages, 0,
+ size_align, GFP_KERNEL);
+ if (ret) {
+ dev_err(dev, "failed to alloca sg table:%d\n", ret);
+ goto fail_table_alloc;
+ }
+ sgt->nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents,
+ DMA_BIDIRECTIONAL,
+ DMA_ATTR_SKIP_CPU_SYNC);
+ if (!sgt->nents) {
+ dev_err(dev, "failed to dma sg map\n");
+ goto fail_map;
+ }
+
+ dma_addr = sg_dma_address(sgt->sgl);
+ ret = dma_declare_coherent_memory(dev, smem_dev->smem_base,
+ dma_addr, size_align,
+ DMA_MEMORY_EXCLUSIVE);
+ if (ret) {
+ dev_err(dev, "Unable to declare smem memory:%d\n", ret);
+ goto fail_map;
+ }
+
+ dev_info(dev, "Coherent mem pa:%pad/%pad, size:%d\n",
+ &smem_dev->smem_base, &dma_addr, size_align);
+
+ smem_dev->smem_size = size_align;
+ smem_dev->smem_pages = pages;
+ smem_dev->smem_dma_base = dma_addr;
+
+ return 0;
+
+fail_map:
+ sg_free_table(sgt);
+fail_table_alloc:
+ while (n_pages--)
+ __free_page(pages[n_pages]);
+ kfree(pages);
+
+ return -ENOMEM;
+}
+
+/* DMA memory related helper functions */
+static void mtk_cam_memdev_release(struct device *dev)
+{
+ vb2_dma_contig_clear_max_seg_size(dev);
+}
+
+static struct device *mtk_cam_alloc_smem_dev(struct device *dev,
+ const char *name)
+{
+ struct device *child;
+ int ret;
+
+ child = devm_kzalloc(dev, sizeof(*child), GFP_KERNEL);
+ if (!child)
+ return NULL;
+
+ child->parent = dev;
+ child->iommu_group = dev->iommu_group;
+ child->release = mtk_cam_memdev_release;
+ dev_set_name(child, name);
+ set_dma_ops(child, get_dma_ops(dev));
+ child->dma_mask = dev->dma_mask;
+ ret = dma_set_coherent_mask(child, DMA_BIT_MASK(32));
+ if (ret)
+ return NULL;
+
+ vb2_dma_contig_set_max_seg_size(child, DMA_BIT_MASK(32));
+
+ if (device_register(child)) {
+ device_del(child);
+ return NULL;
+ }
+
+ return child;
+}
+
+static int mtk_cam_composer_dma_init(struct mtk_isp_p1_ctx *isp_ctx)
+{
+ struct isp_p1_device *p1_dev = p1_ctx_to_dev(isp_ctx);
+ struct device *dev = &p1_dev->pdev->dev;
+ u32 size;
+ dma_addr_t addr;
+
+ isp_ctx->scp_mem_pa = scp_get_reserve_mem_phys(SCP_ISP_MEM_ID);
+ size = PAGE_ALIGN(scp_get_reserve_mem_size(SCP_ISP_MEM_ID));
+ if (!isp_ctx->scp_mem_pa || !size)
+ return -EPROBE_DEFER;
+
+ dev_info(dev, "scp addr:%pad size:0x%x\n", &isp_ctx->scp_mem_pa, size);
+
+ /* get iova address */
+ addr = dma_map_page_attrs(dev, phys_to_page(isp_ctx->scp_mem_pa), 0,
+ size, DMA_BIDIRECTIONAL,
+ DMA_ATTR_SKIP_CPU_SYNC);
+ if (dma_mapping_error(dev, addr)) {
+ isp_ctx->scp_mem_pa = 0;
+ dev_err(dev, "Failed to map scp iova\n");
+ return -ENOMEM;
+ }
+
+ isp_ctx->scp_mem_iova = addr;
+
+ return 0;
+}
+
+int mtk_cam_reserved_memory_init(struct isp_p1_device *p1_dev)
+{
+ struct device *dev = &p1_dev->pdev->dev;
+ struct mtk_cam_smem_dev *smem_dev;
+ int ret;
+
+ ret = mtk_cam_composer_dma_init(&p1_dev->isp_ctx);
+ if (ret)
+ return ret;
+
+ /* Allocate context */
+ smem_dev = devm_kzalloc(dev, sizeof(*smem_dev), GFP_KERNEL);
+ if (!smem_dev)
+ return -ENOMEM;
+
+ smem_dev->dev = mtk_cam_alloc_smem_dev(dev, "cam-smem");
+ if (!smem_dev->dev) {
+ dev_err(dev, "failed to alloc smem device\n");
+ return -ENODEV;
+ }
+ dev_set_drvdata(smem_dev->dev, smem_dev);
+ p1_dev->cam_dev.smem_dev = smem_dev->dev;
+
+ ret = mtk_cam_reserved_drm_sg_init(smem_dev);
+ if (ret)
+ return ret;
+
+ mtk_cam_smem_setup_dma_ops(smem_dev->dev, &smem_dma_ops);
+
+ return 0;
+}
diff --git a/drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.h b/drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.h
new file mode 100644
index 000000000000..981d47178e99
--- /dev/null
+++ b/drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-smem.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2018 MediaTek Inc.
+ */
+
+#ifndef __MTK_CAM_ISP_SMEM_H
+#define __MTK_CAM_ISP_SMEM_H
+
+#include <linux/dma-mapping.h>
+
+#include "mtk_cam.h"
+
+int mtk_cam_reserved_memory_init(struct isp_p1_device *p1_dev);
+dma_addr_t mtk_cam_smem_iova_to_scp_addr(struct device *smem_dev,
+ dma_addr_t iova);
+
+#endif
+
--
2.18.0
next prev parent reply other threads:[~2019-06-11 3:53 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <jungo.lin@mediatek.com>
2019-03-28 9:56 ` [RFC V1 00/12] meida: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Jungo Lin
2019-03-28 9:56 ` [RFC V1 01/12] dt-bindings: mt8183: Add binding for ISP Pass 1 reserved memory Jungo Lin
2019-03-28 9:56 ` [RFC V1 02/12] dts: arm64: mt8183: Add ISP Pass 1 shared memory node Jungo Lin
2019-03-28 9:56 ` [RFC V1 03/12] dt-bindings: mt8183: Added cam-smem dt-bindings Jungo Lin
2019-03-28 9:56 ` [RFC V1 04/12] dt-bindings: mt8183: Added camera ISP Pass 1 Jungo Lin
2019-03-28 9:56 ` [RFC V1 05/12] dts: arm64: mt8183: Add ISP Pass 1 nodes Jungo Lin
2019-03-28 9:56 ` [RFC V1 08/12] media: platform: Add Mediatek ISP P1 private control Jungo Lin
2019-03-28 9:56 ` [RFC V1 09/12] media: platform: Add Mediatek ISP P1 V4L2 functions Jungo Lin
2019-03-28 9:56 ` [RFC V1 10/12] media: platform: Add Mediatek ISP P1 device driver Jungo Lin
[not found] ` <1553767007-11909-1-git-send-email-jungo.lin-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-03-28 9:56 ` [RFC V1 06/12] media: platform: Add Mediatek ISP Pass 1 driver Kconfig Jungo Lin
2019-03-28 9:56 ` [RFC V1 07/12] media: platform: Add Mediatek ISP P1 image & meta formats Jungo Lin
2019-03-28 9:56 ` [RFC V1 11/12] media: platform: Add Mediatek ISP P1 SCP communication Jungo Lin
2019-03-28 9:56 ` [RFC V1 12/12] media: platform: Add Mediatek ISP P1 shared memory driver Jungo Lin
2019-06-11 3:53 ` [RFC, V3 0/9] media: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Jungo Lin
2019-06-11 3:53 ` [RFC,v3 1/9] dt-bindings: mt8183: Added camera ISP Pass 1 Jungo Lin
2019-06-11 3:53 ` [RFC,v3 2/9] dts: arm64: mt8183: Add ISP Pass 1 nodes Jungo Lin
2019-06-11 3:53 ` [RFC,v3 3/9] media: platform: Add Mediatek ISP Pass 1 driver Kconfig Jungo Lin
2019-06-11 3:53 ` [RFC, v3 4/9] media: platform: Add Mediatek ISP P1 image & meta formats Jungo Lin
2019-06-11 3:53 ` [RFC,v3 5/9] media: platform: Add Mediatek ISP P1 V4L2 control Jungo Lin
2019-07-01 5:50 ` Tomasz Figa
2019-07-02 11:34 ` Jungo Lin
2019-06-11 3:53 ` [RFC,v3 6/9] media: platform: Add Mediatek ISP P1 V4L2 functions Jungo Lin
2019-07-10 9:54 ` Tomasz Figa
2019-07-18 4:39 ` Jungo Lin
2019-07-23 10:21 ` Tomasz Figa
2019-07-24 4:31 ` Jungo Lin
2019-07-26 5:49 ` Tomasz Figa
2019-07-29 1:18 ` Jungo Lin
2019-07-29 10:04 ` Tomasz Figa
2019-07-30 1:44 ` Jungo Lin
2019-08-05 9:59 ` Tomasz Figa
2019-06-11 3:53 ` [RFC,v3 7/9] media: platform: Add Mediatek ISP P1 device driver Jungo Lin
2019-07-10 9:56 ` Tomasz Figa
2019-07-20 9:58 ` Jungo Lin
2019-07-25 9:23 ` Tomasz Figa
2019-07-26 7:23 ` Jungo Lin
2019-08-06 9:47 ` Tomasz Figa
2019-08-07 2:11 ` Jungo Lin
2019-08-07 13:25 ` Tomasz Figa
2019-06-11 3:53 ` [RFC,v3 8/9] media: platform: Add Mediatek ISP P1 SCP communication Jungo Lin
[not found] ` <20190611035344.29814-9-jungo.lin-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-07-10 9:58 ` Tomasz Figa
2019-07-21 2:18 ` Jungo Lin
2019-07-25 10:56 ` [RFC, v3 " Tomasz Figa
2019-07-26 8:07 ` [RFC,v3 " Jungo Lin
2019-06-11 3:53 ` Jungo Lin [this message]
2019-07-01 7:25 ` [RFC,v3 9/9] media: platform: Add Mediatek ISP P1 shared memory device Tomasz Figa
2019-07-05 3:33 ` Jungo Lin
2019-07-05 4:22 ` [RFC, v3 " Tomasz Figa
[not found] ` <CAAFQd5BaTQ-Q7gsE0X+d4_81OZq9WHaCYkmALt7_4A1JFo=_8g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-07-05 5:44 ` [RFC,v3 " Jungo Lin
2019-07-05 7:59 ` Jungo Lin
2019-07-23 7:20 ` [RFC, v3 " Tomasz Figa
[not found] ` <CAAFQd5AaNFpMGCVJREY85n8UetEwd99TOka8-ECoLzMbMkos_g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-07-23 8:21 ` Jungo Lin
2019-07-26 5:15 ` Tomasz Figa
[not found] ` <CAAFQd5Bh80N+cMhz=eyHUGJLaE5uuypOawQvHrTgGSMDvmcpLA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-07-26 7:41 ` Christoph Hellwig
2019-07-26 7:42 ` Tomasz Figa
[not found] ` <CAAFQd5CXwRm-3jD+rfNNDNLH=gT_i0QYSAG3XBo3SJnPTY56_w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-07-26 11:04 ` Robin Murphy
[not found] ` <4460bc91-352a-7f3a-cbed-1b95e743ca8c-5wv7dgnIgG8@public.gmane.org>
2019-07-26 11:59 ` Jungo Lin
2019-07-26 14:04 ` Tomasz Figa
[not found] <Jungo Lin <jungo.lin@mediatek.com>
2019-04-02 10:04 ` [PATCH v1] media: media_device_enum_links32: fix missing reserved field copy Jungo Lin
2019-04-02 11:33 ` Laurent Pinchart
2019-04-03 0:30 ` Jungo Lin
2019-04-03 1:44 ` [PATCH] media: media_device_enum_links32: clean a reserved field Jungo Lin
2019-05-10 1:57 ` [RFC, V2, 00/11] meida: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Jungo Lin
2019-05-10 1:57 ` [RFC, V2, 01/11] dt-bindings: mt8183: Add binding for ISP Pass 1 reserved memory Jungo Lin
2019-05-14 19:50 ` [RFC,V2,01/11] " Rob Herring
2019-05-15 13:02 ` Jungo Lin
2019-05-10 1:57 ` [RFC,V2,02/11] dts: arm64: mt8183: Add ISP Pass 1 shared memory node Jungo Lin
2019-05-10 1:57 ` [RFC,V2,03/11] dt-bindings: mt8183: Added camera ISP Pass 1 Jungo Lin
2019-05-14 19:54 ` Rob Herring
2019-05-16 6:12 ` Jungo Lin
2019-05-10 1:57 ` [RFC,V2,04/11] dts: arm64: mt8183: Add ISP Pass 1 nodes Jungo Lin
2019-05-10 1:57 ` [RFC, V2, 05/11] media: platform: Add Mediatek ISP Pass 1 driver Kconfig Jungo Lin
2019-05-10 1:57 ` [RFC, V2, 06/11] media: platform: Add Mediatek ISP P1 image & meta formats Jungo Lin
2019-05-13 8:35 ` Hans Verkuil
2019-05-15 12:49 ` Jungo Lin
2019-05-10 1:58 ` [RFC,V2,07/11] media: platform: Add Mediatek ISP P1 private control Jungo Lin
2019-05-13 8:46 ` Hans Verkuil
[not found] ` <49a8ba54-aba4-1915-6732-987a58e8bd3c-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2019-05-14 6:23 ` Jungo Lin
2019-10-02 10:55 ` Sakari Ailus
2019-10-02 11:02 ` Sakari Ailus
[not found] ` <Jungo Lin <jungo.lin-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-05-10 1:58 ` [RFC,V2,08/11] media: platform: Add Mediatek ISP P1 V4L2 functions Jungo Lin
2019-05-24 18:49 ` Drew Davenport
2019-05-28 1:00 ` Jungo Lin
2019-05-10 1:58 ` [RFC,V2,09/11] media: platform: Add Mediatek ISP P1 device driver Jungo Lin
2019-05-24 21:19 ` [RFC, V2, 09/11] " Drew Davenport
2019-05-27 13:07 ` Jungo Lin
2019-05-10 1:58 ` [RFC, V2, 10/11] media: platform: Add Mediatek ISP P1 SCP communication Jungo Lin
2019-05-10 1:58 ` [RFC, V2, 11/11] media: platform: Add Mediatek ISP P1 shared memory device Jungo Lin
2019-08-07 12:47 ` [RFC, v4, 0/4] media: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Jungo Lin
2019-08-07 12:48 ` [RFC,v4,1/4] media: dt-bindings: mt8183: Added camera ISP Pass 1 Jungo Lin
2019-08-21 19:47 ` Rob Herring
2019-08-22 12:47 ` Jungo Lin
[not found] ` <20190807124803.29884-2-jungo.lin-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-08-21 20:17 ` Rob Herring
2019-08-22 12:48 ` Jungo Lin
2019-08-07 12:48 ` [RFC,v4,2/4] dts: arm64: mt8183: Add ISP Pass 1 nodes Jungo Lin
2019-08-07 12:48 ` [RFC, v4, 3/4] media: platform: Add Mediatek ISP P1 image & meta formats Jungo Lin
2019-08-07 12:48 ` [RFC,v4,4/4] media: platform: Add Mediatek ISP P1 V4L2 device driver Jungo Lin
2019-09-02 7:51 ` [RFC, v5, 0/5] media: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Jungo Lin
2019-09-02 7:51 ` [RFC,v5, 1/5] media: dt-bindings: mt8183: Added camera ISP Pass 1 Jungo Lin
2019-09-02 15:17 ` [RFC, v5, " Rob Herring
2019-09-02 7:51 ` [RFC,v5, 2/5] dts: arm64: mt8183: Add ISP Pass 1 nodes Jungo Lin
2019-09-02 7:51 ` [RFC,v5, 3/5] media: videodev2.h: Add new boottime timestamp type Jungo Lin
2019-09-02 7:51 ` [RFC, v5, 4/5] media: pixfmt: Add Mediatek ISP P1 image & meta formats Jungo Lin
2019-09-02 7:51 ` [RFC, v5, 5/5] media: platform: Add Mediatek ISP P1 V4L2 device driver Jungo Lin
2019-12-19 5:49 ` [v6, 0/5] media: media: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Jungo Lin
2019-12-19 5:49 ` [v6, 1/5] media: dt-bindings: mt8183: Added camera ISP Pass 1 Jungo Lin
2020-03-31 15:34 ` Helen Koike
2020-04-10 10:04 ` Jungo Lin
2019-12-19 5:49 ` [v6, 2/5] dts: arm64: mt8183: Add ISP Pass 1 nodes Jungo Lin
2019-12-19 5:49 ` [v6, 3/5] media: videodev2.h: Add new boottime timestamp type Jungo Lin
2020-01-07 14:10 ` Hans Verkuil
2020-01-10 10:08 ` Jungo Lin
2019-12-19 5:49 ` [v6, 4/5] media: platform: Add Mediatek ISP P1 image & meta formats Jungo Lin
2020-04-03 2:30 ` Laurent Pinchart
2020-04-10 10:00 ` Jungo Lin
2019-12-19 5:49 ` [v6, 5/5] media: platform: Add Mediatek ISP P1 V4L2 device driver Jungo Lin
2020-01-23 13:59 ` Hans Verkuil
2020-01-28 2:13 ` Jungo Lin
2020-03-31 15:34 ` Helen Koike
2020-04-09 2:05 ` Jungo Lin
2020-04-14 12:25 ` Helen Koike
[not found] ` <b2c30e560e9b4ec488957ca62bae09fe@mtkmbs01n2.mediatek.inc>
2020-05-04 12:27 ` Jungo Lin
2020-05-05 15:38 ` Helen Koike
2020-04-02 16:45 ` Dafna Hirschfeld
2020-04-09 2:49 ` Jungo Lin
2020-03-31 15:34 ` [v6, 0/5] media: media: platform: mtk-isp: Add Mediatek ISP Pass 1 driver Helen Koike
2020-04-10 10:32 ` Jungo Lin
2020-04-14 12:25 ` Helen Koike
[not found] ` <1fd3615eb18f48ada186bfe228fc907b@mtkmbs01n2.mediatek.inc>
2020-05-04 12:40 ` Jungo Lin
2020-05-05 15:30 ` Helen Koike
2020-05-05 16:18 ` Tomasz Figa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190611035344.29814-10-jungo.lin@mediatek.com \
--to=jungo.lin@mediatek.com \
--cc=ddavenport@chromium.org \
--cc=devicetree@vger.kernel.org \
--cc=frankie.chiu@mediatek.com \
--cc=frederic.chen@mediatek.com \
--cc=hverkuil@xs4all.nl \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=mchehab@kernel.org \
--cc=robh@kernel.org \
--cc=ryan.yu@mediatek.com \
--cc=rynn.wu@mediatek.com \
--cc=sean.cheng@mediatek.com \
--cc=sj.huang@mediatek.com \
--cc=srv_heupstream@mediatek.com \
--cc=tfiga@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).