Merge tag 'sunxi-dt-for-5.10-1' of https://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / gpu / drm / selftests / test-drm_format.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Test cases for the drm_format functions
4  */
5
6 #define pr_fmt(fmt) "drm_format: " fmt
7
8 #include <linux/errno.h>
9 #include <linux/kernel.h>
10
11 #include <drm/drm_fourcc.h>
12
13 #include "test-drm_modeset_common.h"
14
15 int igt_check_drm_format_block_width(void *ignored)
16 {
17         const struct drm_format_info *info = NULL;
18
19         /* Test invalid arguments */
20         FAIL_ON(drm_format_info_block_width(info, 0) != 0);
21         FAIL_ON(drm_format_info_block_width(info, -1) != 0);
22         FAIL_ON(drm_format_info_block_width(info, 1) != 0);
23
24         /* Test 1 plane format */
25         info = drm_format_info(DRM_FORMAT_XRGB4444);
26         FAIL_ON(!info);
27         FAIL_ON(drm_format_info_block_width(info, 0) != 1);
28         FAIL_ON(drm_format_info_block_width(info, 1) != 0);
29         FAIL_ON(drm_format_info_block_width(info, -1) != 0);
30
31         /* Test 2 planes format */
32         info = drm_format_info(DRM_FORMAT_NV12);
33         FAIL_ON(!info);
34         FAIL_ON(drm_format_info_block_width(info, 0) != 1);
35         FAIL_ON(drm_format_info_block_width(info, 1) != 1);
36         FAIL_ON(drm_format_info_block_width(info, 2) != 0);
37         FAIL_ON(drm_format_info_block_width(info, -1) != 0);
38
39         /* Test 3 planes format */
40         info = drm_format_info(DRM_FORMAT_YUV422);
41         FAIL_ON(!info);
42         FAIL_ON(drm_format_info_block_width(info, 0) != 1);
43         FAIL_ON(drm_format_info_block_width(info, 1) != 1);
44         FAIL_ON(drm_format_info_block_width(info, 2) != 1);
45         FAIL_ON(drm_format_info_block_width(info, 3) != 0);
46         FAIL_ON(drm_format_info_block_width(info, -1) != 0);
47
48         /* Test a tiled format */
49         info = drm_format_info(DRM_FORMAT_X0L0);
50         FAIL_ON(!info);
51         FAIL_ON(drm_format_info_block_width(info, 0) != 2);
52         FAIL_ON(drm_format_info_block_width(info, 1) != 0);
53         FAIL_ON(drm_format_info_block_width(info, -1) != 0);
54
55         return 0;
56 }
57
58 int igt_check_drm_format_block_height(void *ignored)
59 {
60         const struct drm_format_info *info = NULL;
61
62         /* Test invalid arguments */
63         FAIL_ON(drm_format_info_block_height(info, 0) != 0);
64         FAIL_ON(drm_format_info_block_height(info, -1) != 0);
65         FAIL_ON(drm_format_info_block_height(info, 1) != 0);
66
67         /* Test 1 plane format */
68         info = drm_format_info(DRM_FORMAT_XRGB4444);
69         FAIL_ON(!info);
70         FAIL_ON(drm_format_info_block_height(info, 0) != 1);
71         FAIL_ON(drm_format_info_block_height(info, 1) != 0);
72         FAIL_ON(drm_format_info_block_height(info, -1) != 0);
73
74         /* Test 2 planes format */
75         info = drm_format_info(DRM_FORMAT_NV12);
76         FAIL_ON(!info);
77         FAIL_ON(drm_format_info_block_height(info, 0) != 1);
78         FAIL_ON(drm_format_info_block_height(info, 1) != 1);
79         FAIL_ON(drm_format_info_block_height(info, 2) != 0);
80         FAIL_ON(drm_format_info_block_height(info, -1) != 0);
81
82         /* Test 3 planes format */
83         info = drm_format_info(DRM_FORMAT_YUV422);
84         FAIL_ON(!info);
85         FAIL_ON(drm_format_info_block_height(info, 0) != 1);
86         FAIL_ON(drm_format_info_block_height(info, 1) != 1);
87         FAIL_ON(drm_format_info_block_height(info, 2) != 1);
88         FAIL_ON(drm_format_info_block_height(info, 3) != 0);
89         FAIL_ON(drm_format_info_block_height(info, -1) != 0);
90
91         /* Test a tiled format */
92         info = drm_format_info(DRM_FORMAT_X0L0);
93         FAIL_ON(!info);
94         FAIL_ON(drm_format_info_block_height(info, 0) != 2);
95         FAIL_ON(drm_format_info_block_height(info, 1) != 0);
96         FAIL_ON(drm_format_info_block_height(info, -1) != 0);
97
98         return 0;
99 }
100
101 int igt_check_drm_format_min_pitch(void *ignored)
102 {
103         const struct drm_format_info *info = NULL;
104
105         /* Test invalid arguments */
106         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
107         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
108         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
109
110         /* Test 1 plane 8 bits per pixel format */
111         info = drm_format_info(DRM_FORMAT_RGB332);
112         FAIL_ON(!info);
113         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
114         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
115         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
116
117         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
118         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
119         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
120         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
121         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
122         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
123         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
124         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
125                         (uint64_t)UINT_MAX);
126         FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
127                         (uint64_t)(UINT_MAX - 1));
128
129         /* Test 1 plane 16 bits per pixel format */
130         info = drm_format_info(DRM_FORMAT_XRGB4444);
131         FAIL_ON(!info);
132         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
133         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
134         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
135
136         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 2);
137         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 4);
138         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1280);
139         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 2048);
140         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 3840);
141         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 8192);
142         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 1342);
143         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
144                         (uint64_t)UINT_MAX * 2);
145         FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
146                         (uint64_t)(UINT_MAX - 1) * 2);
147
148         /* Test 1 plane 24 bits per pixel format */
149         info = drm_format_info(DRM_FORMAT_RGB888);
150         FAIL_ON(!info);
151         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
152         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
153         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
154
155         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 3);
156         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 6);
157         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1920);
158         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 3072);
159         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 5760);
160         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 12288);
161         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 2013);
162         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
163                         (uint64_t)UINT_MAX * 3);
164         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
165                         (uint64_t)(UINT_MAX - 1) * 3);
166
167         /* Test 1 plane 32 bits per pixel format */
168         info = drm_format_info(DRM_FORMAT_ABGR8888);
169         FAIL_ON(!info);
170         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
171         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
172         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
173
174         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 4);
175         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 8);
176         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 2560);
177         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 4096);
178         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 7680);
179         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 16384);
180         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 2684);
181         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
182                         (uint64_t)UINT_MAX * 4);
183         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
184                         (uint64_t)(UINT_MAX - 1) * 4);
185
186         /* Test 2 planes format */
187         info = drm_format_info(DRM_FORMAT_NV12);
188         FAIL_ON(!info);
189         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
190         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
191         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
192         FAIL_ON(drm_format_info_min_pitch(info, 2, 0) != 0);
193
194         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
195         FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 2);
196         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
197         FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 2);
198         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
199         FAIL_ON(drm_format_info_min_pitch(info, 1, 320) != 640);
200         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
201         FAIL_ON(drm_format_info_min_pitch(info, 1, 512) != 1024);
202         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
203         FAIL_ON(drm_format_info_min_pitch(info, 1, 960) != 1920);
204         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
205         FAIL_ON(drm_format_info_min_pitch(info, 1, 2048) != 4096);
206         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
207         FAIL_ON(drm_format_info_min_pitch(info, 1, 336) != 672);
208         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
209                         (uint64_t)UINT_MAX);
210         FAIL_ON(drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1) !=
211                         (uint64_t)UINT_MAX + 1);
212         FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
213                         (uint64_t)(UINT_MAX - 1));
214         FAIL_ON(drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) /  2) !=
215                         (uint64_t)(UINT_MAX - 1));
216
217         /* Test 3 planes 8 bits per pixel format */
218         info = drm_format_info(DRM_FORMAT_YUV422);
219         FAIL_ON(!info);
220         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
221         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
222         FAIL_ON(drm_format_info_min_pitch(info, 2, 0) != 0);
223         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
224         FAIL_ON(drm_format_info_min_pitch(info, 3, 0) != 0);
225
226         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
227         FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 1);
228         FAIL_ON(drm_format_info_min_pitch(info, 2, 1) != 1);
229         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
230         FAIL_ON(drm_format_info_min_pitch(info, 1, 2) != 2);
231         FAIL_ON(drm_format_info_min_pitch(info, 2, 2) != 2);
232         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
233         FAIL_ON(drm_format_info_min_pitch(info, 1, 320) != 320);
234         FAIL_ON(drm_format_info_min_pitch(info, 2, 320) != 320);
235         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
236         FAIL_ON(drm_format_info_min_pitch(info, 1, 512) != 512);
237         FAIL_ON(drm_format_info_min_pitch(info, 2, 512) != 512);
238         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
239         FAIL_ON(drm_format_info_min_pitch(info, 1, 960) != 960);
240         FAIL_ON(drm_format_info_min_pitch(info, 2, 960) != 960);
241         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
242         FAIL_ON(drm_format_info_min_pitch(info, 1, 2048) != 2048);
243         FAIL_ON(drm_format_info_min_pitch(info, 2, 2048) != 2048);
244         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
245         FAIL_ON(drm_format_info_min_pitch(info, 1, 336) != 336);
246         FAIL_ON(drm_format_info_min_pitch(info, 2, 336) != 336);
247         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
248                         (uint64_t)UINT_MAX);
249         FAIL_ON(drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1) !=
250                         (uint64_t)UINT_MAX / 2 + 1);
251         FAIL_ON(drm_format_info_min_pitch(info, 2, UINT_MAX / 2 + 1) !=
252                         (uint64_t)UINT_MAX / 2 + 1);
253         FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1) / 2) !=
254                         (uint64_t)(UINT_MAX - 1) / 2);
255         FAIL_ON(drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) / 2) !=
256                         (uint64_t)(UINT_MAX - 1) / 2);
257         FAIL_ON(drm_format_info_min_pitch(info, 2, (UINT_MAX - 1) / 2) !=
258                         (uint64_t)(UINT_MAX - 1) / 2);
259
260         /* Test tiled format */
261         info = drm_format_info(DRM_FORMAT_X0L2);
262         FAIL_ON(!info);
263         FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
264         FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
265         FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
266
267         FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 2);
268         FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 4);
269         FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1280);
270         FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 2048);
271         FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 3840);
272         FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 8192);
273         FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 1342);
274         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
275                         (uint64_t)UINT_MAX * 2);
276         FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
277                         (uint64_t)(UINT_MAX - 1) * 2);
278
279         return 0;
280 }