Table of Contents

Introduction

The purpose of this page is to describe the Linux V4L2 driver for Xilinx VPSS Scaler soft IP. VPSS refers to the Video Processing Sub System.
To understand more about the capabilities of this IP please see the Product Guide (Scaler Only configuration) for VPSS.
The Linux VPSS Scaler driver (xilinx-vpss-scaler.c) based on the V4L2 framework creates a subdev node(/dev/v4l-subdev*) which can be used to configure the VPSS Scaler IP core. The V4L2 VPSS Scaler driver controls the VPSS Scaler soft IP to achieve upscaling and downscaling of Video and it also provides certain color space conversions. The driver is available at https://github.com/Xilinx/linux-xlnx/blob/master/drivers/media/platform/xilinx/xilinx-vpss-scaler.c

IP/Driver Features

IP features2018.1 to 2018.32019.12019.2 - 2021.2
IP version2.02.2
One, two or four pixel-wide AXI4-Stream video interfaceYes*

Supports 1,2,4 and 8 ppc

Driver supports 1,2 and 4

Video resolution support up to UHD at 60 fpsYes
8, 10, 12, and 16 bits per component support

Driver supports only 8 and 10 bpc formats using only 8 bpc MEDIA BUS formats.

Yes** Driver supports only 8 and 10 bpc formats using 8 and 10 bpc media bus formats

Yes** Driver supports only 8 and 10 bpc formats using 8 and 10 bpc media bus formats
Bilinear, Bicubic and polyphase algorithms supported.Yes***

Missing Features / Known Issues / Limitations in Driver

Video Processing Subsystem Release Notes and Known Issues


Kernel Configuration

CONFIG_VIDEO_XILINX_VPSS_SCALER and CONFIG_VIDEO_XILINX should be enabled.

Device Tree Binding

The dts node should be defined with correct hardware configuration. How to define the node is documented here:
https://github.com/Xilinx/linux-xlnx/blob/master/Documentation/devicetree/bindings/media/xilinx/xlnx%2Cv-vpss-scaler.txt

Testing Procedure

This driver is a V4L2 sub-device driver, which means it is designed to operate with a video device in it's graph. The driver has been tested with a Xilinx video device (a V4L2 capture device) that is backed by
a DMA element (like Framebuffer Write IP). The V4L2 device driver for this IP cannot be tested in isolation by itself. The successful operation of the driver can be tested in two phases :

Successful Creation of a Media Device

media-ctl is a Linux user space utility that can control media entities, it is a part of a larger set of V4L2 tools called v4l-utils
media-ctl allows you to print the topology of your media pipeline and specify input and output pad properties.

Successful Frame Captures

Please see the Test Approach section of the Frame Buffer Write Wiki for more details on how to capture frames.
The driver has been tested with a design having TPG + VTC feeding video to VPSS Scaler connected to Framebuffer Write.

/* Setup TPG color bar pattern */
media-ctl -v -V '"a3c30000.tpg":0 [fmt:RBG24/1920x1080 field:none]'
media-ctl -v -V '"a3c40000.csc":1 [fmt:RBG24/1280x720 field:none]'
yavta -n3 -c15 -f  RGB24 -s1280x720 --skip 12 -F /dev/video0

Frame Scaling or Resizing:

This media-ctl and yavta commands capture frames down scaled from 1920x1080 to 1280x720 in RGB888 format.

Scaling using bilinear, bicubic and poly-phase (6, 8, 10 and 12 tap) filters that use coefficients programmed by the driver.
Color Space Conversion. All color space conversions have been tested.


#VPSS: Scaler Only with CSC Upscale from 720p to 1080p and changing the color space from RGB to YUV 4:2:0
media-ctl -d /dev/media7 -V '"a0080000.v_proc_ss":0  [fmt:RBG888_1X24/1280x720 field:none]'
media-ctl -d /dev/media7 -V '"a0080000.v_proc_ss":1  [fmt:VYYUYY8_1X24/1920x1080 field:none]'


Scaling Formats that have been tested are as follow :


Sr No.Video Input ResolutionVideo Output Resolution
1.1280x7201920x1080
2.1280x7203840x2160
3.3840x21601920x1080
4.640x4801280x720
Generally arbitrary scaling resolutions are also supported (limited to a maximum of 3840x2160 and a minimum of 224X128).

Boards Supported

Driver has been tested on following boards:

Known Issues

Change log

2024.1

2023.2

2023.1

2022.2

2022.1

2021.2

2021.1

2020.2

2020.1

2019.2

2019.1

2018.3

2018.2

2018.1

2017.4

2017.3

Related Links