The Video Processing Unit (VPU) is a multi-standard video codec (encoder/decoder) capable of simultaneously handling multiple streams by time multiplexing.

The VPU software can be divided into two parts: the kernel driver and the user-space library.

Kernel configuration

You can manage the VPU driver support through the kernel configuration option:

  • MXC VPU (Video Processing Unit) support (CONFIG_MXC_VPU)

This option is enabled as built-in on the ConnectCore 6 SBC kernel configuration file.

Kernel driver

The VPU drivers for the i.MX6 are located at:

File Description

include/linux/mxc_vpu.h

Header file defining IOCTLs and memory structures

drivers/mxc/vpu/mxc_vpu.c

Device management and file operation interface implementation

Device tree bindings and customization

The i.MX6 VPU device tree binding is documented at Documentation/devicetree/bindings/media/coda.txt.

The VPU is defined in the i.MX6 CPU device tree file.

Definition of the VPU interface

Common ConnectCore 6 device tree
vpu_fsl: vpu_fsl@02040000 {
                compatible = "fsl,imx6-vpu";
                reg = <0x02040000 0x3c000>;
                reg-names = "vpu_regs";
                interrupts = <0 3 IRQ_TYPE_EDGE_RISING>,
                             <0 12 IRQ_TYPE_LEVEL_HIGH>;
                interrupt-names = "vpu_jpu_irq", "vpu_ipi_irq";
                clocks = <&clks IMX6QDL_CLK_VPU_AXI>,
                     <&clks IMX6QDL_CLK_MMDC_CH0_AXI>,
                     <&clks IMX6QDL_CLK_OCRAM>;
                clock-names = "vpu_clk", "mmdc_ch0_axi", "ocram";
                iramsize = <0x21000>;
                iram = <&ocram>;
                resets = <&src 1>;
                power-domains = <&gpc 1>;
};

The VPU interface is enabled by default.

IOMUX configuration

The VPU is a CPU-internal subsystem. No IOMUX configuration is necessary.