Re: [PATCH 00/33] Qualcomm video decoder/encoder driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 28/07/2023 16:23, Vikash Garodia wrote:
This patch series introduces support for Qualcomm new video acceleration
hardware architecture, used for video stream decoding/encoding. This driver
is based on new communication protocol between video hardware and application
processor.

This driver comes with below capabilities:
- V4L2 complaint video driver with M2M and STREAMING capability.
- Supports H264, H265, VP9 decoders.
- Supports H264, H265 encoders.

This driver comes with below features:
- Centralized resource and memory management.
- Centralized management of core and instance states.
- Defines platform specific capabilities and features. As a results, it provides
   a single point of control to enable/disable a given feature depending on
   specific platform capabilities.
- Handles hardware interdependent configurations. For a given configuration from
   client, the driver checks for hardware dependent configuration/s and updates
   the same.
- Handles multiple complex video scenarios involving state transitions - DRC,
   Drain, Seek, back to back DRC, DRC during Drain sequence, DRC during Seek
   sequence.
- Introduces a flexible way for driver to subscribe for any property with
   hardware. Hardware would inform driver with those subscribed property with any
   change in value.
- Introduces performance (clock and bus) model based on new hardware
   architecture.
- Introduces multi thread safe design to handle communication between client and
   hardware.
- Adapts encoder quality improvements available in new hardware architecture.
- Implements asynchronous communication with hardware to achieve better
   experience in low latency usecases.
- Supports multi stage hardware architecture for encode/decode.
- Output and capture planes are controlled independently. Thereby providing a
   way to reconfigure individual plane.
- Hardware packetization layer supports synchronization between configuration
   packet and data packet.
- Introduces a flexibility to receive a hardware response for a given command
   packet.
- Native hardware support of LAST flag which is mandatory to align with port
   reconfiguration and DRAIN sequence as per V4L guidelines.
- Native hardware support for drain sequence.

I think that the driver is in good shape for mainline kernel, and I hope the
review comments will help to improve it, so please do review, and make comments.

No bindings, no driver. Please post start the series from the bindings.


Dikshita Agarwal (17):
   iris: vidc: add core functions
   iris: add vidc wrapper file
   iris: vidc: add vb2 ops
   iris: vidc: add helpers for memory management
   iris: vidc: add helper functions for resource management
   iris: vidc: add helper functions for power management
   iris: add helpers for media format
   iris: vidc: add PIL functionality for video firmware
   iris: platform: add platform files
   iris: platform: sm8550: add capability file for sm8550
   iris: variant: add helper functions for register handling
   iris: variant: iris3: add iris3 specific ops
   iris: variant: iris3: add helpers for buffer size calculations
   iris: variant: iris3: add helper for bus and clock calculation
   iris: variant: iris: implement the logic to compute bus bandwidth
   iris: variant: iris3: implement logic to compute clock frequency
   iris: enable building of iris video driver

Vikash Garodia (16):
   MAINTAINERS: Add Qualcomm Iris video accelerator driver
   iris: vidc: add v4l2 wrapper file
   iris: vidc: define video core and instance context
   iris: iris: add video encoder files
   iris: vidc: add video decoder files
   iris: vidc: add control files
   iris: vidc: add helper functions
   iris: vidc: add helpers for state management
   iris: add vidc buffer files
   iris: vidc: define various structures and enum
   iris: vidc: hfi: add Host Firmware Interface (HFI)
   iris: vidc: hfi: add Host Firmware Interface (HFI) response handling
   iris: vidc: hfi: add helpers for handling shared queues
   iris: vidc: hfi: Add packetization layer
   iris: vidc: hfi: defines HFI properties and enums
   iris: vidc: add debug files

  MAINTAINERS                                        |   10 +
  drivers/media/platform/qcom/Kconfig                |    1 +
  drivers/media/platform/qcom/Makefile               |    1 +
  drivers/media/platform/qcom/iris/Kconfig           |   15 +
  drivers/media/platform/qcom/iris/Makefile          |   46 +
  .../iris/platform/common/inc/msm_vidc_platform.h   |  305 ++
  .../iris/platform/common/src/msm_vidc_platform.c   | 2499 ++++++++++++
  .../iris/platform/sm8550/inc/msm_vidc_sm8550.h     |   14 +
  .../iris/platform/sm8550/src/msm_vidc_sm8550.c     | 1727 ++++++++
  .../iris/variant/common/inc/msm_vidc_variant.h     |   22 +
  .../iris/variant/common/src/msm_vidc_variant.c     |  163 +
  .../qcom/iris/variant/iris3/inc/hfi_buffer_iris3.h | 1481 +++++++
  .../iris/variant/iris3/inc/msm_vidc_buffer_iris3.h |   19 +
  .../qcom/iris/variant/iris3/inc/msm_vidc_iris3.h   |   15 +
  .../iris/variant/iris3/inc/msm_vidc_power_iris3.h  |   17 +
  .../iris/variant/iris3/inc/perf_static_model.h     |  229 ++
  .../iris/variant/iris3/src/msm_vidc_buffer_iris3.c |  595 +++
  .../iris/variant/iris3/src/msm_vidc_bus_iris3.c    |  884 ++++
  .../iris/variant/iris3/src/msm_vidc_clock_iris3.c  |  627 +++
  .../qcom/iris/variant/iris3/src/msm_vidc_iris3.c   |  954 +++++
  .../iris/variant/iris3/src/msm_vidc_power_iris3.c  |  345 ++
  .../media/platform/qcom/iris/vidc/inc/firmware.h   |   18 +
  .../platform/qcom/iris/vidc/inc/hfi_command.h      |  190 +
  .../media/platform/qcom/iris/vidc/inc/hfi_packet.h |   52 +
  .../platform/qcom/iris/vidc/inc/hfi_property.h     |  666 +++
  .../platform/qcom/iris/vidc/inc/msm_media_info.h   |  599 +++
  .../media/platform/qcom/iris/vidc/inc/msm_vdec.h   |   40 +
  .../media/platform/qcom/iris/vidc/inc/msm_venc.h   |   34 +
  .../media/platform/qcom/iris/vidc/inc/msm_vidc.h   |   60 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_buffer.h  |   32 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_control.h |   26 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_core.h    |  165 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_debug.h   |  186 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_driver.h  |  352 ++
  .../platform/qcom/iris/vidc/inc/msm_vidc_inst.h    |  207 +
  .../qcom/iris/vidc/inc/msm_vidc_internal.h         |  787 ++++
  .../platform/qcom/iris/vidc/inc/msm_vidc_memory.h  |   83 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_power.h   |   94 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_state.h   |  102 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h    |   77 +
  .../platform/qcom/iris/vidc/inc/msm_vidc_vb2.h     |   39 +
  .../media/platform/qcom/iris/vidc/inc/resources.h  |  259 ++
  .../media/platform/qcom/iris/vidc/inc/venus_hfi.h  |   66 +
  .../platform/qcom/iris/vidc/inc/venus_hfi_queue.h  |   89 +
  .../qcom/iris/vidc/inc/venus_hfi_response.h        |   26 +
  .../media/platform/qcom/iris/vidc/src/firmware.c   |  294 ++
  .../media/platform/qcom/iris/vidc/src/hfi_packet.c |  657 +++
  .../media/platform/qcom/iris/vidc/src/msm_vdec.c   | 2091 ++++++++++
  .../media/platform/qcom/iris/vidc/src/msm_venc.c   | 1484 +++++++
  .../media/platform/qcom/iris/vidc/src/msm_vidc.c   |  841 ++++
  .../platform/qcom/iris/vidc/src/msm_vidc_buffer.c  |  290 ++
  .../platform/qcom/iris/vidc/src/msm_vidc_control.c |  824 ++++
  .../platform/qcom/iris/vidc/src/msm_vidc_debug.c   |  581 +++
  .../platform/qcom/iris/vidc/src/msm_vidc_driver.c  | 4276 ++++++++++++++++++++
  .../platform/qcom/iris/vidc/src/msm_vidc_memory.c  |  448 ++
  .../platform/qcom/iris/vidc/src/msm_vidc_power.c   |  560 +++
  .../platform/qcom/iris/vidc/src/msm_vidc_probe.c   |  660 +++
  .../platform/qcom/iris/vidc/src/msm_vidc_state.c   | 1607 ++++++++
  .../platform/qcom/iris/vidc/src/msm_vidc_v4l2.c    |  953 +++++
  .../platform/qcom/iris/vidc/src/msm_vidc_vb2.c     |  605 +++
  .../media/platform/qcom/iris/vidc/src/resources.c  | 1321 ++++++
  .../media/platform/qcom/iris/vidc/src/venus_hfi.c  | 1503 +++++++
  .../platform/qcom/iris/vidc/src/venus_hfi_queue.c  |  537 +++
  .../qcom/iris/vidc/src/venus_hfi_response.c        | 1607 ++++++++
  64 files changed, 35357 insertions(+)
  create mode 100644 drivers/media/platform/qcom/iris/Kconfig
  create mode 100644 drivers/media/platform/qcom/iris/Makefile
  create mode 100644 drivers/media/platform/qcom/iris/platform/common/inc/msm_vidc_platform.h
  create mode 100644 drivers/media/platform/qcom/iris/platform/common/src/msm_vidc_platform.c
  create mode 100644 drivers/media/platform/qcom/iris/platform/sm8550/inc/msm_vidc_sm8550.h
  create mode 100644 drivers/media/platform/qcom/iris/platform/sm8550/src/msm_vidc_sm8550.c
  create mode 100644 drivers/media/platform/qcom/iris/variant/common/inc/msm_vidc_variant.h
  create mode 100644 drivers/media/platform/qcom/iris/variant/common/src/msm_vidc_variant.c
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/inc/hfi_buffer_iris3.h
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/inc/msm_vidc_buffer_iris3.h
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/inc/msm_vidc_iris3.h
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/inc/msm_vidc_power_iris3.h
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/inc/perf_static_model.h
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/src/msm_vidc_buffer_iris3.c
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/src/msm_vidc_bus_iris3.c
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/src/msm_vidc_clock_iris3.c
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/src/msm_vidc_iris3.c
  create mode 100644 drivers/media/platform/qcom/iris/variant/iris3/src/msm_vidc_power_iris3.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/firmware.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/hfi_command.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/hfi_packet.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/hfi_property.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_media_info.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vdec.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_venc.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_buffer.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_control.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_core.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_debug.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_driver.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_inst.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_internal.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_memory.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_power.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_state.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_v4l2.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/msm_vidc_vb2.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/resources.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/venus_hfi.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/venus_hfi_queue.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/inc/venus_hfi_response.h
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/firmware.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/hfi_packet.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vdec.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_venc.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_buffer.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_control.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_debug.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_driver.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_memory.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_power.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_probe.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_state.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_v4l2.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/msm_vidc_vb2.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/resources.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/venus_hfi.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/venus_hfi_queue.c
  create mode 100644 drivers/media/platform/qcom/iris/vidc/src/venus_hfi_response.c


--
With best wishes
Dmitry




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux