Hi Frederic Chen, On 2/1/19 12:21 PM, Frederic Chen wrote: > Hello, > > This is the first version of the RFC patch series adding Digital Image > Processing (DIP) driver on Mediatek mt8183 SoC, which will be used in camera > features on CrOS application. It belongs to the first Mediatek’s ISP driver > series based on V4L2 and media controller framework. I posted the main part of > the DIP driver as RFC to discuss first and would like some review comments on > the overall structure of the driver. > > Digital Image Processing (DIP) unit can accept the tuning parameters and adjust > the image content in Mediatek ISP system. Furthermore, it performs demosaicing > and noise reduction on the image to support the advanced camera features of the > application. The DIP driver also support image format conversion, resizing and > rotation with its hardware path. > > The driver is implemented with V4L2 and media controller framework. We have the > following entities describing the DIP path. > > 1. Meta (output video device): connects to DIP sub device. It accepts the input > tuning buffer from userspace. The metadata interface used currently is only > a temporary solution to kick off driver development and is not ready for > reviewed yet. > > 2. RAW (output video device): connects to DIP sub device. It accepts input image > buffer from userspace. > > 3. DIP (sub device): connects to MDP-0 and MDP-1. When processing an image, DIP > hardware support multiple output image with different size and format so it > needs two capture video devices to return the streaming data to the user. > > 4. MDP-0 (capture video device): return the processed image data. > > 5. MDP-1 (capture video device): return the processed image data, the image > size and format can be different from the ones of MDP-0. Just a high-level comment before you post the next version of this series and for your "platform: Add support for ISP Pass 1 on mt8183 SoC" series Please compile the latest version of v4l2-compliance (part of git://linuxtv.org/v4l-utils.git) and run it against your driver: v4l2-compliance -m /dev/mediaX Whenever you post a new version of this series, please do a 'git pull' of the v4l-utils repo, recompile and retest with v4l2-compliance and post the test results in the cover letter. Obviously, there should be no FAILs and probably no warnings. I suspect that streaming (e.g. adding the -s10 option to v4l2-compliance) might not work since v4l2-compliance doesn't know about the meta data formats. But give it a try and see what happens :-) Regards, Hans > > The overall file structure of the DIP driver is as following: > > * mtk_dip-dev-ctx-core.c: Implements common software flow of DIP driver. > DIP driver supports two or more software contexts. For example, context 0 is > created for preview path and context 1 is for capture path. Both the two > contexts share the same DIP hardware to process the images. > * mtk_dip-v4l2.c: Static DIP contexts configuration. > * mtk_dip.c: Controls the hardware flow. > * mtk_dip-dev.c: Implements context-independent flow. > * mtk_dip-ctrl.c: Handles the HW ctrl request from userspace. > * mtk_dip-smem-drv.c: Provides the shared memory management required operation. > We reserved a memory region for the co-processor and DIP to exchange the > tuning and hardware configuration data. > * mtk_dip-v4l2-util.c: Implements V4L2 and vb2 ops. > > Frederic Chen (7): > [media] dt-bindings: mt8183: Add binding for DIP shared memory > dts: arm64: mt8183: Add DIP shared memory node > [media] dt-bindings: mt8183: Added DIP-SMEM dt-bindings > [media] dt-bindings: mt8183: Added DIP dt-bindings > dts: arm64: mt8183: Add DIP nodes > media: platform: Add Mediatek DIP driver KConfig > [media] platform: mtk-isp: Add Mediatek DIP driver > > .../bindings/media/mediatek,dip_smem.txt | 29 + > .../bindings/media/mediatek,mt8183-dip.txt | 35 + > .../mediatek,reserve-memory-dip_smem.txt | 45 + > arch/arm64/boot/dts/mediatek/mt8183.dtsi | 36 + > drivers/media/platform/Kconfig | 2 + > drivers/media/platform/mtk-isp/Kconfig | 21 + > drivers/media/platform/mtk-isp/Makefile | 18 + > drivers/media/platform/mtk-isp/isp_50/Makefile | 17 + > drivers/media/platform/mtk-isp/isp_50/dip/Makefile | 35 + > .../platform/mtk-isp/isp_50/dip/mtk_dip-core.h | 188 +++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-ctrl.c | 173 +++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-ctrl.h | 43 + > .../platform/mtk-isp/isp_50/dip/mtk_dip-ctx.h | 319 ++++ > .../mtk-isp/isp_50/dip/mtk_dip-dev-ctx-core.c | 1643 ++++++++++++++++++++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-dev.c | 374 +++++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-dev.h | 191 +++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-smem-drv.c | 452 ++++++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-smem.h | 25 + > .../mtk-isp/isp_50/dip/mtk_dip-v4l2-util.c | 1000 ++++++++++++ > .../mtk-isp/isp_50/dip/mtk_dip-v4l2-util.h | 38 + > .../platform/mtk-isp/isp_50/dip/mtk_dip-v4l2.c | 292 ++++ > .../platform/mtk-isp/isp_50/dip/mtk_dip-v4l2.h | 60 + > .../media/platform/mtk-isp/isp_50/dip/mtk_dip.c | 1385 +++++++++++++++++ > .../media/platform/mtk-isp/isp_50/dip/mtk_dip.h | 93 ++ > 24 files changed, 6514 insertions(+) > create mode 100644 Documentation/devicetree/bindings/media/mediatek,dip_smem.txt > create mode 100644 Documentation/devicetree/bindings/media/mediatek,mt8183-dip.txt > create mode 100644 Documentation/devicetree/bindings/reserved-memory/mediatek,reserve-memory-dip_smem.txt > create mode 100644 drivers/media/platform/mtk-isp/Kconfig > create mode 100644 drivers/media/platform/mtk-isp/Makefile > create mode 100644 drivers/media/platform/mtk-isp/isp_50/Makefile > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/Makefile > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-core.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-ctrl.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-ctrl.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-ctx.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-dev-ctx-core.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-dev.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-dev.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-smem-drv.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-smem.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-v4l2-util.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-v4l2-util.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-v4l2.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip-v4l2.h > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip.c > create mode 100644 drivers/media/platform/mtk-isp/isp_50/dip/mtk_dip.h >