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

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@2040000 {
	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>;
};