mbox series

[v9,0/7] media: mediatek: support mdp3 on mt8183 platform

Message ID 20211201095031.31606-1-moudy.ho@mediatek.com (mailing list archive)
Headers show
Series media: mediatek: support mdp3 on mt8183 platform | expand

Message

Moudy Ho (何宗原) Dec. 1, 2021, 9:50 a.m. UTC
Change since v8:
- Rebase on v5.16-rc2.
- Refer to Angelo's suggestion, adjust the register writing format to increase
  readability and significance.
- Refer to Angelo's suggestion, adjust or reduce inappropriate debugging
  messages.
- Refer to Rob Herring's suggestion to correct the the binding file
  to make it with the specification.
- Fix compile warning reported by kernel test robot.

Change since v7:
- Rebase on v5.15-rc6.
- Revise several V4L2 M2M settings to pass v4l2-compliance test.
- Integrate those same component dt-binding documents of DRM and MDP, and
  move them under the MMSYS domain.
- Split MMSYS and MUTEX into two different files according to
  their functional properties.

Changes since v6:
- Refactor GCE event to corresponding node.
- Fix dt_binding_check fail.
- Fix compilation errors.

Changes since v5:
- Rebase on v5.14-rc6.
- Move MMSYS/Mutex settings to corresponding driver.
- Revise the software license description and copyright.
- Remove unnecessary enum. or definitions.
- Optimize platform/chip definition conditions.
- Use general printing functions instead of MDP3 private ones.
- Fix compile warning.

Changes since v4:
- Rebase on v5.13-rc1.
- Remove the CMDQ flush flow to match the CMDQ API change.
- Integrate four of MDP's direct-link subcomponents into MDP controller node
  from syscon node to avoid illegal clock usage.
- Rewrite dt-binding in a JSON compatible subset of YAML
- Fix a bit of macro argument precedence.

Changes since v3:
- Rebase on v5.9-rc1.
- modify code for review comment from Rob Herring, cancel multiple nodes using
  same register base situation.
- control IOMMU port through pm runtime get/put to DMA components' device.
- SCP(VPU) driver revision.
- stop queuing jobs(remove flush_workqueue()) after mdp_m2m_release().
- add computation of plane address with data_offset.
- fix scale ratio check issue.
- add default v4l2_format setting.

Changes since v2:
- modify code for review comment from Tomasz Figa & Alexandre Courbot
- review comment from Rob Herring will offer code revision in v4, due to
  it's related to device node modification, will need to modify code
  architecture

Changes since v1:
- modify code for CMDQ v3 API support
- EC ipi cmd migration
- fix compliance test fail item (m2m cmd with -f) due to there is two problem in runing all format(-f) cmd:
1. out of memory before test complete
        Due to capture buffer mmap (refcount + 1) after reqbuf but seems
        no corresponding munmap called before device close.
        There are total 12XX items(formats) in format test and each format
        alloc 8 capture/output buffers.
2. unceasingly captureBufs() (randomly)
        Seems the break statement didn't catch the count == 0 situation:
        In v4l2-test-buffers.cpp, function: captureBufs()
                        ...
                        count--;
                        if (!node->is_m2m && !count)
                                break;
        Log is as attachment

I will paste the test result with problem part in another e-mail

Hi,

This is the first version of RFC patch for Media Data Path 3 (MDP3),
MDP3 is used for scaling and color format conversion.
support using GCE to write register in critical time limitation.
support V4L2 m2m device control.


Moudy Ho (7):
  soc: mediatek: mmsys: add support for MDP
  soc: mediatek: mmsys: add support for ISP control
  soc: mediatek: mutex: add support for MDP
  soc: mediatek: mutex: add functions that operate registers by CMDQ
  dt-binding: mt8183: add Mediatek MDP3 dt-bindings
  dts: arm64: mt8183: add Mediatek MDP3 nodes
  media: platform: mtk-mdp3: add Mediatek MDP3 driver

 .../bindings/media/mediatek,mdp3-rsz.yaml     |   65 +
 .../bindings/media/mediatek,mdp3-wrot.yaml    |   67 +
 .../bindings/soc/mediatek/mediatek,ccorr.yaml |   57 +
 .../bindings/soc/mediatek/mediatek,rdma.yaml  |  216 +++
 .../bindings/soc/mediatek/mediatek,wdma.yaml  |   68 +
 arch/arm64/boot/dts/mediatek/mt8183.dtsi      |  115 +-
 drivers/media/platform/Kconfig                |   19 +
 drivers/media/platform/Makefile               |    2 +
 drivers/media/platform/mtk-mdp3/Makefile      |    6 +
 .../media/platform/mtk-mdp3/mdp_reg_ccorr.h   |   19 +
 drivers/media/platform/mtk-mdp3/mdp_reg_isp.h |   27 +
 .../media/platform/mtk-mdp3/mdp_reg_rdma.h    |   65 +
 drivers/media/platform/mtk-mdp3/mdp_reg_rsz.h |   39 +
 .../media/platform/mtk-mdp3/mdp_reg_wdma.h    |   47 +
 .../media/platform/mtk-mdp3/mdp_reg_wrot.h    |   55 +
 drivers/media/platform/mtk-mdp3/mtk-img-ipi.h |  280 ++++
 .../media/platform/mtk-mdp3/mtk-mdp3-cmdq.c   |  514 +++++++
 .../media/platform/mtk-mdp3/mtk-mdp3-cmdq.h   |   46 +
 .../media/platform/mtk-mdp3/mtk-mdp3-comp.c   | 1264 +++++++++++++++++
 .../media/platform/mtk-mdp3/mtk-mdp3-comp.h   |  147 ++
 .../media/platform/mtk-mdp3/mtk-mdp3-core.c   |  338 +++++
 .../media/platform/mtk-mdp3/mtk-mdp3-core.h   |   76 +
 .../media/platform/mtk-mdp3/mtk-mdp3-m2m.c    |  789 ++++++++++
 .../media/platform/mtk-mdp3/mtk-mdp3-m2m.h    |   49 +
 .../media/platform/mtk-mdp3/mtk-mdp3-regs.c   |  737 ++++++++++
 .../media/platform/mtk-mdp3/mtk-mdp3-regs.h   |  372 +++++
 .../media/platform/mtk-mdp3/mtk-mdp3-vpu.c    |  312 ++++
 .../media/platform/mtk-mdp3/mtk-mdp3-vpu.h    |   78 +
 drivers/soc/mediatek/Kconfig                  |    1 +
 drivers/soc/mediatek/mt8183-mmsys.h           |  294 ++++
 drivers/soc/mediatek/mtk-mmsys.c              |  173 +++
 drivers/soc/mediatek/mtk-mmsys.h              |    3 +
 drivers/soc/mediatek/mtk-mutex.c              |   98 +-
 include/linux/soc/mediatek/mtk-mmsys.h        |   86 ++
 include/linux/soc/mediatek/mtk-mutex.h        |    8 +
 35 files changed, 6530 insertions(+), 2 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-rsz.yaml
 create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-wrot.yaml
 create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,ccorr.yaml
 create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,rdma.yaml
 create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,wdma.yaml
 create mode 100644 drivers/media/platform/mtk-mdp3/Makefile
 create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_ccorr.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_isp.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_rdma.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_rsz.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_wdma.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_wrot.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-img-ipi.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-comp.c
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-comp.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-core.c
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-core.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-m2m.c
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-m2m.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.h
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-vpu.c
 create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-vpu.h

Comments

AngeloGioacchino Del Regno Dec. 1, 2021, 10:18 a.m. UTC | #1
Il 01/12/21 10:50, Moudy Ho ha scritto:
> Change since v8:
> - Rebase on v5.16-rc2.
> - Refer to Angelo's suggestion, adjust the register writing format to increase
>    readability and significance.
> - Refer to Angelo's suggestion, adjust or reduce inappropriate debugging
>    messages.
> - Refer to Rob Herring's suggestion to correct the the binding file
>    to make it with the specification.
> - Fix compile warning reported by kernel test robot.
> 
> Change since v7:
> - Rebase on v5.15-rc6.
> - Revise several V4L2 M2M settings to pass v4l2-compliance test.
> - Integrate those same component dt-binding documents of DRM and MDP, and
>    move them under the MMSYS domain.
> - Split MMSYS and MUTEX into two different files according to
>    their functional properties.
> 
> Changes since v6:
> - Refactor GCE event to corresponding node.
> - Fix dt_binding_check fail.
> - Fix compilation errors.
> 
> Changes since v5:
> - Rebase on v5.14-rc6.
> - Move MMSYS/Mutex settings to corresponding driver.
> - Revise the software license description and copyright.
> - Remove unnecessary enum. or definitions.
> - Optimize platform/chip definition conditions.
> - Use general printing functions instead of MDP3 private ones.
> - Fix compile warning.
> 
> Changes since v4:
> - Rebase on v5.13-rc1.
> - Remove the CMDQ flush flow to match the CMDQ API change.
> - Integrate four of MDP's direct-link subcomponents into MDP controller node
>    from syscon node to avoid illegal clock usage.
> - Rewrite dt-binding in a JSON compatible subset of YAML
> - Fix a bit of macro argument precedence.
> 
> Changes since v3:
> - Rebase on v5.9-rc1.
> - modify code for review comment from Rob Herring, cancel multiple nodes using
>    same register base situation.
> - control IOMMU port through pm runtime get/put to DMA components' device.
> - SCP(VPU) driver revision.
> - stop queuing jobs(remove flush_workqueue()) after mdp_m2m_release().
> - add computation of plane address with data_offset.
> - fix scale ratio check issue.
> - add default v4l2_format setting.
> 
> Changes since v2:
> - modify code for review comment from Tomasz Figa & Alexandre Courbot
> - review comment from Rob Herring will offer code revision in v4, due to
>    it's related to device node modification, will need to modify code
>    architecture
> 
> Changes since v1:
> - modify code for CMDQ v3 API support
> - EC ipi cmd migration
> - fix compliance test fail item (m2m cmd with -f) due to there is two problem in runing all format(-f) cmd:
> 1. out of memory before test complete
>          Due to capture buffer mmap (refcount + 1) after reqbuf but seems
>          no corresponding munmap called before device close.
>          There are total 12XX items(formats) in format test and each format
>          alloc 8 capture/output buffers.
> 2. unceasingly captureBufs() (randomly)
>          Seems the break statement didn't catch the count == 0 situation:
>          In v4l2-test-buffers.cpp, function: captureBufs()
>                          ...
>                          count--;
>                          if (!node->is_m2m && !count)
>                                  break;
>          Log is as attachment
> 
> I will paste the test result with problem part in another e-mail
> 
> Hi,
> 
> This is the first version of RFC patch for Media Data Path 3 (MDP3),
> MDP3 is used for scaling and color format conversion.
> support using GCE to write register in critical time limitation.
> support V4L2 m2m device control.
> 
> 
> Moudy Ho (7):
>    soc: mediatek: mmsys: add support for MDP
>    soc: mediatek: mmsys: add support for ISP control
>    soc: mediatek: mutex: add support for MDP
>    soc: mediatek: mutex: add functions that operate registers by CMDQ
>    dt-binding: mt8183: add Mediatek MDP3 dt-bindings
>    dts: arm64: mt8183: add Mediatek MDP3 nodes
>    media: platform: mtk-mdp3: add Mediatek MDP3 driver
> 

Hello Moudy,

I agree with your vision of mmsys and mutex patches being somewhat tied to the
MDP3 driver being present but, still, can you please split this series?

The reason for this is that the four patches related to mmsys and mutex are ok,
ready to be merged, and unlikely to get any other change during the development
of the MDP3 driver specifically.
Like that, we could at least start getting all the required base support upstream
and reduce the strain on you (and on reviewers) when releasing/rebasing any new
version of this series; this will consequently help raising the quality of this
work.

Regards,
- Angelo
Benjamin Gaignard Dec. 1, 2021, 4:51 p.m. UTC | #2
Le 01/12/2021 à 10:50, Moudy Ho a écrit :
> Change since v8:
> - Rebase on v5.16-rc2.
> - Refer to Angelo's suggestion, adjust the register writing format to increase
>    readability and significance.
> - Refer to Angelo's suggestion, adjust or reduce inappropriate debugging
>    messages.
> - Refer to Rob Herring's suggestion to correct the the binding file
>    to make it with the specification.
> - Fix compile warning reported by kernel test robot.
>
> Change since v7:
> - Rebase on v5.15-rc6.
> - Revise several V4L2 M2M settings to pass v4l2-compliance test.
> - Integrate those same component dt-binding documents of DRM and MDP, and
>    move them under the MMSYS domain.
> - Split MMSYS and MUTEX into two different files according to
>    their functional properties.
>
> Changes since v6:
> - Refactor GCE event to corresponding node.
> - Fix dt_binding_check fail.
> - Fix compilation errors.
>
> Changes since v5:
> - Rebase on v5.14-rc6.
> - Move MMSYS/Mutex settings to corresponding driver.
> - Revise the software license description and copyright.
> - Remove unnecessary enum. or definitions.
> - Optimize platform/chip definition conditions.
> - Use general printing functions instead of MDP3 private ones.
> - Fix compile warning.
>
> Changes since v4:
> - Rebase on v5.13-rc1.
> - Remove the CMDQ flush flow to match the CMDQ API change.
> - Integrate four of MDP's direct-link subcomponents into MDP controller node
>    from syscon node to avoid illegal clock usage.
> - Rewrite dt-binding in a JSON compatible subset of YAML
> - Fix a bit of macro argument precedence.
>
> Changes since v3:
> - Rebase on v5.9-rc1.
> - modify code for review comment from Rob Herring, cancel multiple nodes using
>    same register base situation.
> - control IOMMU port through pm runtime get/put to DMA components' device.
> - SCP(VPU) driver revision.
> - stop queuing jobs(remove flush_workqueue()) after mdp_m2m_release().
> - add computation of plane address with data_offset.
> - fix scale ratio check issue.
> - add default v4l2_format setting.
>
> Changes since v2:
> - modify code for review comment from Tomasz Figa & Alexandre Courbot
> - review comment from Rob Herring will offer code revision in v4, due to
>    it's related to device node modification, will need to modify code
>    architecture
>
> Changes since v1:
> - modify code for CMDQ v3 API support
> - EC ipi cmd migration
> - fix compliance test fail item (m2m cmd with -f) due to there is two problem in runing all format(-f) cmd:
> 1. out of memory before test complete
>          Due to capture buffer mmap (refcount + 1) after reqbuf but seems
>          no corresponding munmap called before device close.
>          There are total 12XX items(formats) in format test and each format
>          alloc 8 capture/output buffers.
> 2. unceasingly captureBufs() (randomly)
>          Seems the break statement didn't catch the count == 0 situation:
>          In v4l2-test-buffers.cpp, function: captureBufs()
>                          ...
>                          count--;
>                          if (!node->is_m2m && !count)
>                                  break;
>          Log is as attachment
>
> I will paste the test result with problem part in another e-mail
>
> Hi,
>
> This is the first version of RFC patch for Media Data Path 3 (MDP3),
> MDP3 is used for scaling and color format conversion.
> support using GCE to write register in critical time limitation.
> support V4L2 m2m device control.

Hi,

I think it would be good to add v4l2-compliance test result here.

Regards,
Benjamin

>
>
> Moudy Ho (7):
>    soc: mediatek: mmsys: add support for MDP
>    soc: mediatek: mmsys: add support for ISP control
>    soc: mediatek: mutex: add support for MDP
>    soc: mediatek: mutex: add functions that operate registers by CMDQ
>    dt-binding: mt8183: add Mediatek MDP3 dt-bindings
>    dts: arm64: mt8183: add Mediatek MDP3 nodes
>    media: platform: mtk-mdp3: add Mediatek MDP3 driver
>
>   .../bindings/media/mediatek,mdp3-rsz.yaml     |   65 +
>   .../bindings/media/mediatek,mdp3-wrot.yaml    |   67 +
>   .../bindings/soc/mediatek/mediatek,ccorr.yaml |   57 +
>   .../bindings/soc/mediatek/mediatek,rdma.yaml  |  216 +++
>   .../bindings/soc/mediatek/mediatek,wdma.yaml  |   68 +
>   arch/arm64/boot/dts/mediatek/mt8183.dtsi      |  115 +-
>   drivers/media/platform/Kconfig                |   19 +
>   drivers/media/platform/Makefile               |    2 +
>   drivers/media/platform/mtk-mdp3/Makefile      |    6 +
>   .../media/platform/mtk-mdp3/mdp_reg_ccorr.h   |   19 +
>   drivers/media/platform/mtk-mdp3/mdp_reg_isp.h |   27 +
>   .../media/platform/mtk-mdp3/mdp_reg_rdma.h    |   65 +
>   drivers/media/platform/mtk-mdp3/mdp_reg_rsz.h |   39 +
>   .../media/platform/mtk-mdp3/mdp_reg_wdma.h    |   47 +
>   .../media/platform/mtk-mdp3/mdp_reg_wrot.h    |   55 +
>   drivers/media/platform/mtk-mdp3/mtk-img-ipi.h |  280 ++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-cmdq.c   |  514 +++++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-cmdq.h   |   46 +
>   .../media/platform/mtk-mdp3/mtk-mdp3-comp.c   | 1264 +++++++++++++++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-comp.h   |  147 ++
>   .../media/platform/mtk-mdp3/mtk-mdp3-core.c   |  338 +++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-core.h   |   76 +
>   .../media/platform/mtk-mdp3/mtk-mdp3-m2m.c    |  789 ++++++++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-m2m.h    |   49 +
>   .../media/platform/mtk-mdp3/mtk-mdp3-regs.c   |  737 ++++++++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-regs.h   |  372 +++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-vpu.c    |  312 ++++
>   .../media/platform/mtk-mdp3/mtk-mdp3-vpu.h    |   78 +
>   drivers/soc/mediatek/Kconfig                  |    1 +
>   drivers/soc/mediatek/mt8183-mmsys.h           |  294 ++++
>   drivers/soc/mediatek/mtk-mmsys.c              |  173 +++
>   drivers/soc/mediatek/mtk-mmsys.h              |    3 +
>   drivers/soc/mediatek/mtk-mutex.c              |   98 +-
>   include/linux/soc/mediatek/mtk-mmsys.h        |   86 ++
>   include/linux/soc/mediatek/mtk-mutex.h        |    8 +
>   35 files changed, 6530 insertions(+), 2 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-rsz.yaml
>   create mode 100644 Documentation/devicetree/bindings/media/mediatek,mdp3-wrot.yaml
>   create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,ccorr.yaml
>   create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,rdma.yaml
>   create mode 100644 Documentation/devicetree/bindings/soc/mediatek/mediatek,wdma.yaml
>   create mode 100644 drivers/media/platform/mtk-mdp3/Makefile
>   create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_ccorr.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_isp.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_rdma.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_rsz.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_wdma.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mdp_reg_wrot.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-img-ipi.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-comp.c
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-comp.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-core.c
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-core.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-m2m.c
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-m2m.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.h
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-vpu.c
>   create mode 100644 drivers/media/platform/mtk-mdp3/mtk-mdp3-vpu.h
>