[RFC PATCH 0/2] Fix SDL 1.2 on emulated fbdev devices (broken in kernels >=4.19)

From: Ivan Mironov
Date: Wed Dec 26 2018 - 07:13:03 EST


Originally this issue was brought up on linux.org.ru forum by user
saahriktu, he is on Cc. He discovered that commit db05c48197759
("drm: fb-helper: Reject all pixel format changing requests") breaks
support of SDL1 programs, like various old games and emulators of old
game consoles. First patch contains fix for that commit.

I tried to reproduce the same issue in a VM under qemu, and found yet
another part of kernel code which prevents SDL1 apps from running
normally. Second patch in this series fixes this problem.

However, I still have few unresolved questions regarding this patches:
* Why simple revert of commit db05c48197759 fixes SDL1 support for
saahriktu? I do not understand how this could work when SDL1 has
hardcoded non-zero pixclock values, for which current code always
returns EINVAL.
* How this worked before? How this is working for non-DRM fbdev drivers?
fbdev support code in SDL1 is also very old by the way.

Also, it seems that at least in some cases both problems could be
circumvented by adding appropriate modes into /etc/fb.modes. But without
examining the kernel code it is not clear which values are correct. I am
not sure that such circumvention covers all possible cases, and it is
definitely far from any user-frienliness.

Ah, almost forgot this: the easiest way to reproduce both problems is to
install sdl-sopwith[1] and try to run it from console without X. At
least in Fedora 29, sopwith may be simply installed from standard

[1] http://sdl-sopwith.sourceforge.net/

Ivan Mironov (2):
drm/fb-helper: Bring back workaround for bugs of SDL 1.2
drm/fb-helper: Ignore the value of fb_var_screeninfo.pixclock

drivers/gpu/drm/drm_fb_helper.c | 153 +++++++++++++++++++++-----------
1 file changed, 99 insertions(+), 54 deletions(-)