* fix qemu for m68k by just using tcg-interpreter, too
[t2sde.git] / package / xorg / xorg-server / hotfix-fbdevHWSetMode.patch
blob1c4b9426e18a5dd88375188a8cf3ac199b0085c1
1 # --- T2-COPYRIGHT-NOTE-BEGIN ---
2 # T2 SDE: package/*/xorg-server/hotfix-fbdevHWSetMode.patch
3 # Copyright (C) 2024 The T2 SDE Project
4 #
5 # This Copyright note is generated by scripts/Create-CopyPatch,
6 # more information can be found in the files COPYING and README.
7 #
8 # This patch file is dual-licensed. It is available under the license the
9 # patched project is licensed under, as long as it is an OpenSource license
10 # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
11 # of the GNU General Public License version 2 as used by the T2 SDE.
12 # --- T2-COPYRIGHT-NOTE-END ---
14 Some Linux fb drivers, like sgi-o2 gbe update the mode struct to actually
15 constraint sync values. Actually inform the user about what changed, and
16 don't error out for unimportant sync details.
18 --- xorg-server-21.1.10/hw/xfree86/fbdevhw/fbdevhw.c.orig 2023-12-13 02:31:04.000000000 +0100
19 +++ xorg-server-21.1.10/hw/xfree86/fbdevhw/fbdevhw.c 2024-01-09 13:32:27.895682324 +0100
20 @@ -200,22 +200,50 @@
23 static Bool
24 -fbdev_modes_equal(struct fb_var_screeninfo *set, struct fb_var_screeninfo *req)
25 +fbdev_modes_equal(ScrnInfoPtr pScrn, struct fb_var_screeninfo *set, struct fb_var_screeninfo *req)
27 - return (set->xres_virtual >= req->xres_virtual &&
28 - set->yres_virtual >= req->yres_virtual &&
29 - set->bits_per_pixel == req->bits_per_pixel &&
30 - set->red.length == req->red.length &&
31 - set->green.length == req->green.length &&
32 - set->blue.length == req->blue.length &&
33 - set->xres == req->xres && set->yres == req->yres &&
34 - set->right_margin == req->right_margin &&
35 - set->hsync_len == req->hsync_len &&
36 - set->left_margin == req->left_margin &&
37 - set->lower_margin == req->lower_margin &&
38 - set->vsync_len == req->vsync_len &&
39 - set->upper_margin == req->upper_margin &&
40 - set->sync == req->sync && set->vmode == req->vmode);
41 + if (set->xres != req->xres || set->yres != req->yres) {
42 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: res not equal\n");
43 + return FALSE;
44 + }
46 + if (set->xres_virtual < req->xres_virtual || set->yres_virtual < req->yres_virtual) {
47 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: virtual res not equal\n");
48 + return FALSE;
49 + }
51 + if (set->sync != req->sync || set->vmode != req->vmode) {
52 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: sync or vmode not equal\n");
53 + return FALSE;
54 + }
56 + if (set->bits_per_pixel != req->bits_per_pixel) {
57 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: bits per pixel not equal\n");
58 + return FALSE;
59 + }
61 + if (set->red.length != req->red.length ||
62 + set->green.length != req->green.length ||
63 + set->blue.length != req->blue.length) {
64 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: RGB lengths not equal\n");
65 + return FALSE;
66 + }
68 + if (set->hsync_len != req->hsync_len ||
69 + set->vsync_len != req->vsync_len) {
70 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: sync not equal\n");
71 + //return FALSE;
72 + }
74 + if (set->right_margin != req->right_margin ||
75 + set->left_margin != req->left_margin ||
76 + set->lower_margin != req->lower_margin ||
77 + set->upper_margin != req->upper_margin) {
78 + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "fbdev_modes: margins not equal\n");
79 + //return FALSE;
80 + }
82 + return TRUE;
85 static void
86 @@ -526,7 +526,7 @@
87 return FALSE;
90 - if (!fbdev_modes_equal(&set_var, &req_var)) {
91 + if (!fbdev_modes_equal(pScrn, &set_var, &req_var)) {
92 if (!check)
93 xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
94 "FBIOPUT_VSCREENINFO succeeded but modified " "mode\n");