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. 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 -- 2.7.4