-
Notifications
You must be signed in to change notification settings - Fork 7
/
README
128 lines (101 loc) · 4.33 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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 <ichiro_k@ca2.so-net.ne.jp>
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