Skip to content

X.org graphics driver for ARM graphics(with Zynq UltraScale+ MPSoC)

License

Notifications You must be signed in to change notification settings

ikwzm/xf86-video-armsoc-xilinx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xf86-video-armsoc-xilinx
========================
Open-source X.org graphics driver for ARM graphics(with Zynq UltraScale+ MPSoC)

Original: https://anongit.freedesktop.org/git/xorg/driver/xf86-video-armsoc.git

Build Debian Package
--------------------

### Install packages required for build

```console
shell$ apt install libdrm-dev libudev-dev libxext-dev pkg-config x11proto-core-dev x11proto-fonts-dev x11proto-gl-dev x11proto-xf86dri-dev xutils-dev xserver-xorg-dev quilt dh-autoreconf debhelper
```

### Generate configure and Makefile

```console
shell$ ./autogen.sh
     :
shell$ make distclean
     :
```

### Build binary packages

```console
shell$ sudo debian/rules binary
```

```console
shell$ cd ..
shell$ dpkg --info xserver-xorg-video-armsoc-xilinx_1.4-2_arm64.deb 
 new Debian package, version 2.0.
 size 34108 bytes: control archive=832 bytes.
     501 bytes,    12 lines      control              
     614 bytes,     7 lines      md5sums              
 Package: xserver-xorg-video-armsoc-xilinx
 Source: xf86-video-armsoc-xilinx
 Version: 1.4-2
 Architecture: arm64
 Maintainer: ikwzm <[email protected]>
 Installed-Size: 99
 Depends: libc6 (>= 2.17), libdrm2 (>= 2.4.36), libpixman-1-0, xserver-xorg-core
 Provides: xorg-driver-video
 Section: x11
 Priority: optional
 Homepage: <https://github.com/ikwzm/xf86-video-armsoc-xilinx>
 Description: X.Org X Server -- ARM SoC display driver for rockchip, amlogic, sunxi and Xilinx(ZynqMP) DRM (mainline kernel)
```
Install Debian Package
----------------------

```console
shell$ sudo dpkg -i xserver-xorg-video-armsoc-xilinx_1.4-2_arm64.deb 
(Reading database ... 104374 files and directories currently installed.)
Preparing to unpack xserver-xorg-video-armsoc-xilinx_1.4-2_arm64.deb ...
Unpacking xserver-xorg-video-armsoc-xilinx (1.4-2) over (1.4-1) ...
Setting up xserver-xorg-video-armsoc-xilinx (1.4-2) ...
Processing triggers for man-db (2.8.5-2) ...
```

Configuration xserver-xorg-video
--------------------------------

/etc/X11/xorg.conf

```conf:/etc/X11/xorg.conf
Section "Device"
	Identifier	"ZynqMP"
	Driver		"armsoc"
	Option		"DRI2"			"true"
	Option		"DRI2_PAGE_FLIP"	"false"
	Option		"DRI2_WAIT_VSYNC"	"true"
	Option		"DEBUG"			"false"
EndSection

Section "Screen"
	Identifier	"DefaultScreen"
	Device		"ZynqMP"
EndSection
```

DRM driver selection
--------------------
While most operations use only the standard DRM modesetting interfaces, certain operations
unavoidably rely on specific driver behaviour (including dumb buffer allocation flags and cursor
plane z-ordering). As such, the armsoc driver should choose a particular DRM driver dynamically
according to the current environment.

The currently supported DRM drivers are:
- pl111
- exynos
- kirin
- sti
- xilinx

For other drivers, you will need to implement this support yourself. A template implementation is
provided in src/drmmode_template.
The interface is defined and documented in src/drmmode_driver.h, and you should refer to this while
modifying the template to set up your DRM driver's abstraction appropriately.

You can also copy src/drmmode_template into src/drmmode_<yourdrivername>,
modify the driver_name to match with the name used in the kernel drm driver.

Summary of bo reference counting
--------------------------------
The Screen takes a ref on the scanout bo in InitScreen and drops it in ScreenClose. When the scanout bo changes
(due to a flip or a modeset) the ref is moved from the old bo to the new one by set_scanout_bo.

Pixmaps take a ref on their bo(s) when created in ARMSOCCreatePixmap2 and drop it in ARMSOCDestroyPixmap.
If ARMSOCModifyPixmapHeader points a pixmap at anything other than the scanout bo then the ref to
the existing bo (if any) is dropped.
If ARMSOCModifyPixmapHeader points a pixmap at the scanout bo the ref is moved from the old bo to the new
If ARMSOCModifyPixmapHeader changes the size of the pixmap's bo the ref is dropped, a new bo created and a
ref taken on that.

resize_scanout_bo creates and takes a ref on the new bo and drops its ref when the new bo becomes the scanout bo and
the Screen has taken a ref.

The swap chain takes a ref on the src and dst bos when a swap is scheduled in ARMSOCDRI2ScheduleSwap and drops them
in ARMSOCDRI2SwapComplete after the src becomes pARMSOC->scanout and the screen takes a ref. 

The cursor takes a ref on its bo in drmmode_cursor_init and drops it in drmmode_cursor_fini