xref: /OK3568_Linux_fs/buildroot/package/libdrm/0002-modetest-Speed-up-dumping-info.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 65b545d762100c4012c2f8176f5c296d5bfcbdc4 Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com>
3*4882a593SmuzhiyunDate: Sat, 15 Dec 2018 12:20:01 +0800
4*4882a593SmuzhiyunSubject: [PATCH 2/5] modetest: Speed up dumping info
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
7*4882a593Smuzhiyun---
8*4882a593Smuzhiyun tests/modetest/modetest.c | 28 +++++++++++++++++++++-------
9*4882a593Smuzhiyun 1 file changed, 21 insertions(+), 7 deletions(-)
10*4882a593Smuzhiyun
11*4882a593Smuzhiyundiff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
12*4882a593Smuzhiyunindex 8ff6c80..5291ca0 100644
13*4882a593Smuzhiyun--- a/tests/modetest/modetest.c
14*4882a593Smuzhiyun+++ b/tests/modetest/modetest.c
15*4882a593Smuzhiyun@@ -50,6 +50,7 @@
16*4882a593Smuzhiyun #include <strings.h>
17*4882a593Smuzhiyun #include <errno.h>
18*4882a593Smuzhiyun #include <poll.h>
19*4882a593Smuzhiyun+#include <fcntl.h>
20*4882a593Smuzhiyun #include <sys/time.h>
21*4882a593Smuzhiyun #if HAVE_SYS_SELECT_H
22*4882a593Smuzhiyun #include <sys/select.h>
23*4882a593Smuzhiyun@@ -71,6 +72,10 @@
24*4882a593Smuzhiyun static enum util_fill_pattern primary_fill = UTIL_PATTERN_SMPTE;
25*4882a593Smuzhiyun static enum util_fill_pattern secondary_fill = UTIL_PATTERN_TILES;
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun+int encoders = 0, connectors = 0, crtcs = 0, planes = 0, fbs = 0;
28*4882a593Smuzhiyun+int dump_only;
29*4882a593Smuzhiyun+#define need_resource(type) (!dump_only || type##s)
30*4882a593Smuzhiyun+
31*4882a593Smuzhiyun struct crtc {
32*4882a593Smuzhiyun 	drmModeCrtc *crtc;
33*4882a593Smuzhiyun 	drmModeObjectProperties *props;
34*4882a593Smuzhiyun@@ -485,7 +490,7 @@ static void dump_crtcs(struct device *dev)
35*4882a593Smuzhiyun 	printf("\n");
36*4882a593Smuzhiyun }
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun-static void dump_framebuffers(struct device *dev)
39*4882a593Smuzhiyun+static void dump_fbs(struct device *dev)
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun 	drmModeFB *fb;
42*4882a593Smuzhiyun 	int i;
43*4882a593Smuzhiyun@@ -554,6 +559,7 @@ static void free_resources(struct resources *res)
44*4882a593Smuzhiyun 		return;
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun #define free_resource(_res, type, Type)					\
47*4882a593Smuzhiyun+	if (need_resource(type))						\
48*4882a593Smuzhiyun 	do {									\
49*4882a593Smuzhiyun 		if (!(_res)->type##s)						\
50*4882a593Smuzhiyun 			break;							\
51*4882a593Smuzhiyun@@ -566,6 +572,7 @@ static void free_resources(struct resources *res)
52*4882a593Smuzhiyun 	} while (0)
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun #define free_properties(_res, type)					\
55*4882a593Smuzhiyun+	if (need_resource(type))						\
56*4882a593Smuzhiyun 	do {									\
57*4882a593Smuzhiyun 		for (i = 0; i < (int)(_res)->count_##type##s; ++i) {	\
58*4882a593Smuzhiyun 			unsigned int j;										\
59*4882a593Smuzhiyun@@ -578,10 +585,10 @@ static void free_resources(struct resources *res)
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun 	free_properties(res, plane);
62*4882a593Smuzhiyun 	free_resource(res, plane, Plane);
63*4882a593Smuzhiyun-
64*4882a593Smuzhiyun 	free_properties(res, connector);
65*4882a593Smuzhiyun 	free_properties(res, crtc);
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun+	if (need_resource(connector))
68*4882a593Smuzhiyun 	for (i = 0; i < res->count_connectors; i++)
69*4882a593Smuzhiyun 		free(res->connectors[i].name);
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun@@ -630,6 +637,7 @@ static struct resources *get_resources(struct device *dev)
72*4882a593Smuzhiyun     }
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun #define get_resource(_res, __res, type, Type)					\
75*4882a593Smuzhiyun+	if (need_resource(type))						\
76*4882a593Smuzhiyun 	do {									\
77*4882a593Smuzhiyun 		for (i = 0; i < (int)(_res)->count_##type##s; ++i) {	\
78*4882a593Smuzhiyun 			uint32_t type##id = (__res)->type##s[i];			\
79*4882a593Smuzhiyun@@ -650,6 +658,7 @@ static struct resources *get_resources(struct device *dev)
80*4882a593Smuzhiyun 	drmModeFreeResources(_res);
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun 	/* Set the name of all connectors based on the type name and the per-type ID. */
83*4882a593Smuzhiyun+	if (need_resource(connector))
84*4882a593Smuzhiyun 	for (i = 0; i < res->count_connectors; i++) {
85*4882a593Smuzhiyun 		struct connector *connector = &res->connectors[i];
86*4882a593Smuzhiyun 		drmModeConnector *conn = connector->connector;
87*4882a593Smuzhiyun@@ -663,6 +672,7 @@ static struct resources *get_resources(struct device *dev)
88*4882a593Smuzhiyun 	}
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun #define get_properties(_res, type, Type)					\
91*4882a593Smuzhiyun+	if (need_resource(type))						\
92*4882a593Smuzhiyun 	do {									\
93*4882a593Smuzhiyun 		for (i = 0; i < (int)(_res)->count_##type##s; ++i) {	\
94*4882a593Smuzhiyun 			struct type *obj = &res->type##s[i];			\
95*4882a593Smuzhiyun@@ -690,6 +700,7 @@ static struct resources *get_resources(struct device *dev)
96*4882a593Smuzhiyun 	get_properties(res, crtc, CRTC);
97*4882a593Smuzhiyun 	get_properties(res, connector, CONNECTOR);
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun+	if (need_resource(crtc))
100*4882a593Smuzhiyun 	for (i = 0; i < res->count_crtcs; ++i)
101*4882a593Smuzhiyun 		res->crtcs[i].mode = &res->crtcs[i].crtc->mode;
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun@@ -2026,7 +2037,6 @@ int main(int argc, char **argv)
104*4882a593Smuzhiyun 	struct device dev;
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun 	int c;
107*4882a593Smuzhiyun-	int encoders = 0, connectors = 0, crtcs = 0, planes = 0, framebuffers = 0;
108*4882a593Smuzhiyun 	int drop_master = 0;
109*4882a593Smuzhiyun 	int test_vsync = 0;
110*4882a593Smuzhiyun 	int test_cursor = 0;
111*4882a593Smuzhiyun@@ -2070,7 +2080,7 @@ int main(int argc, char **argv)
112*4882a593Smuzhiyun 			encoders = 1;
113*4882a593Smuzhiyun 			break;
114*4882a593Smuzhiyun 		case 'f':
115*4882a593Smuzhiyun-			framebuffers = 1;
116*4882a593Smuzhiyun+			fbs = 1;
117*4882a593Smuzhiyun 			break;
118*4882a593Smuzhiyun 		case 'F':
119*4882a593Smuzhiyun 			parse_fill_patterns(optarg);
120*4882a593Smuzhiyun@@ -2143,7 +2153,7 @@ int main(int argc, char **argv)
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun 	/* Dump all the details when no* arguments are provided. */
123*4882a593Smuzhiyun 	if (!args)
124*4882a593Smuzhiyun-		encoders = connectors = crtcs = planes = framebuffers = 1;
125*4882a593Smuzhiyun+		encoders = connectors = crtcs = planes = fbs = 1;
126*4882a593Smuzhiyun
127*4882a593Smuzhiyun 	if (test_vsync && !count) {
128*4882a593Smuzhiyun 		fprintf(stderr, "page flipping requires at least one -s option.\n");
129*4882a593Smuzhiyun@@ -2159,7 +2169,11 @@ int main(int argc, char **argv)
130*4882a593Smuzhiyun 		return -1;
131*4882a593Smuzhiyun 	}
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun-	dev.fd = util_open(device, module);
134*4882a593Smuzhiyun+	dump_only = !count && !plane_count && !prop_count;
135*4882a593Smuzhiyun+	if (dump_only && !device && !module)
136*4882a593Smuzhiyun+		dev.fd = open("/dev/dri/card0", O_RDWR);
137*4882a593Smuzhiyun+	else
138*4882a593Smuzhiyun+		dev.fd = util_open(device, module);
139*4882a593Smuzhiyun 	if (dev.fd < 0)
140*4882a593Smuzhiyun 		return -1;
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun@@ -2186,7 +2200,7 @@ int main(int argc, char **argv)
143*4882a593Smuzhiyun 	dump_resource(&dev, connectors);
144*4882a593Smuzhiyun 	dump_resource(&dev, crtcs);
145*4882a593Smuzhiyun 	dump_resource(&dev, planes);
146*4882a593Smuzhiyun-	dump_resource(&dev, framebuffers);
147*4882a593Smuzhiyun+	dump_resource(&dev, fbs);
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun 	for (i = 0; i < prop_count; ++i)
150*4882a593Smuzhiyun 		set_property(&dev, &prop_args[i]);
151*4882a593Smuzhiyun--
152*4882a593Smuzhiyun2.20.1
153*4882a593Smuzhiyun
154