- Add EXPERT config option to allow phys mem leak from fbdev for blob drivers (Neil)
Cc: Neil Armstrong <narmstrong@baylibre.com> -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEfxcpfMSgdnQMs+QqlvcN/ahKBwoFAlu1H1cACgkQlvcN/ahK Bwq9Lgf/RxZs3/4x6BQi0uNaJ+InuQDaPy91VWM7J4VSvTvPkDGQJgQS4a4AQqK8 p41rodzdFGhbE1C3GeWKd2eGDYG2+8M5xSzQ4F1q0gAJhseaJgC1EW3AP9zZRHwU ByVLflSW3KJKXST+Id4pF10cVs1X1RZCkUQj7T6uRaM9i7bFXekwLJrV/cHRrnnV KbYpzMq6s+JRxaLKp8s4OIfdpVxHxTYtj34S22r5D56X3N5NF+wg1MZQgaH4prjk Bbc7Y5HfH2GgTaSc1X7haD/HAPfAST0YZmkew1OsWddIuCTKECddXYelVEA3B8+1 nBNKZXlqldPOwnvOMiqz52U+2o/aKw== =zl4K -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-fixes-2018-10-03' of git://anongit.freedesktop.org/drm/drm-misc into drm-next - Add EXPERT config option to allow phys mem leak from fbdev for blob drivers (Neil) Cc: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Dave Airlie <airlied@redhat.com> From: Sean Paul <sean@poorly.run> Link: https://patchwork.freedesktop.org/patch/msgid/20181003195957.GA64584@art_vandelay
This commit is contained in:
commit
29b90203f8
|
@ -110,6 +110,26 @@ config DRM_FBDEV_OVERALLOC
|
|||
is 100. Typical values for double buffering will be 200,
|
||||
triple buffering 300.
|
||||
|
||||
config DRM_FBDEV_LEAK_PHYS_SMEM
|
||||
bool "Shamelessly allow leaking of fbdev physical address (DANGEROUS)"
|
||||
depends on DRM_FBDEV_EMULATION && EXPERT
|
||||
default n
|
||||
help
|
||||
In order to keep user-space compatibility, we want in certain
|
||||
use-cases to keep leaking the fbdev physical address to the
|
||||
user-space program handling the fbdev buffer.
|
||||
This affects, not only, Amlogic, Allwinner or Rockchip devices
|
||||
with ARM Mali GPUs using an userspace Blob.
|
||||
This option is not supported by upstream developers and should be
|
||||
removed as soon as possible and be considered as a broken and
|
||||
legacy behaviour from a modern fbdev device driver.
|
||||
|
||||
Please send any bug reports when using this to your proprietary
|
||||
software vendor that requires this.
|
||||
|
||||
If in doubt, say "N" or spread the word to your closed source
|
||||
library vendor.
|
||||
|
||||
config DRM_LOAD_EDID_FIRMWARE
|
||||
bool "Allow to specify an EDID data set instead of probing for it"
|
||||
depends on DRM
|
||||
|
|
|
@ -56,6 +56,25 @@ MODULE_PARM_DESC(drm_fbdev_overalloc,
|
|||
"Overallocation of the fbdev buffer (%) [default="
|
||||
__MODULE_STRING(CONFIG_DRM_FBDEV_OVERALLOC) "]");
|
||||
|
||||
/*
|
||||
* In order to keep user-space compatibility, we want in certain use-cases
|
||||
* to keep leaking the fbdev physical address to the user-space program
|
||||
* handling the fbdev buffer.
|
||||
* This is a bad habit essentially kept into closed source opengl driver
|
||||
* that should really be moved into open-source upstream projects instead
|
||||
* of using legacy physical addresses in user space to communicate with
|
||||
* other out-of-tree kernel modules.
|
||||
*
|
||||
* This module_param *should* be removed as soon as possible and be
|
||||
* considered as a broken and legacy behaviour from a modern fbdev device.
|
||||
*/
|
||||
#if IS_ENABLED(CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM)
|
||||
static bool drm_leak_fbdev_smem = false;
|
||||
module_param_unsafe(drm_leak_fbdev_smem, bool, 0600);
|
||||
MODULE_PARM_DESC(fbdev_emulation,
|
||||
"Allow unsafe leaking fbdev physical smem address [default=false]");
|
||||
#endif
|
||||
|
||||
static LIST_HEAD(kernel_fb_helper_list);
|
||||
static DEFINE_MUTEX(kernel_fb_helper_lock);
|
||||
|
||||
|
@ -2670,8 +2689,12 @@ __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper,
|
|||
|
||||
info = fb_helper->fbdev;
|
||||
info->var.pixclock = 0;
|
||||
/* don't leak any physical addresses to userspace */
|
||||
info->flags |= FBINFO_HIDE_SMEM_START;
|
||||
/* Shamelessly allow physical address leaking to userspace */
|
||||
#if IS_ENABLED(CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM)
|
||||
if (!drm_leak_fbdev_smem)
|
||||
#endif
|
||||
/* don't leak any physical addresses to userspace */
|
||||
info->flags |= FBINFO_HIDE_SMEM_START;
|
||||
|
||||
/* Need to drop locks to avoid recursive deadlock in
|
||||
* register_framebuffer. This is ok because the only thing left to do is
|
||||
|
@ -3081,6 +3104,12 @@ int drm_fb_helper_generic_probe(struct drm_fb_helper *fb_helper,
|
|||
fbi->screen_size = fb->height * fb->pitches[0];
|
||||
fbi->fix.smem_len = fbi->screen_size;
|
||||
fbi->screen_buffer = buffer->vaddr;
|
||||
/* Shamelessly leak the physical address to user-space */
|
||||
#if IS_ENABLED(CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM)
|
||||
if (drm_leak_fbdev_smem && fbi->fix.smem_start == 0)
|
||||
fbi->fix.smem_start =
|
||||
page_to_phys(virt_to_page(fbi->screen_buffer));
|
||||
#endif
|
||||
strcpy(fbi->fix.id, "DRM emulated");
|
||||
|
||||
drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->format->depth);
|
||||
|
|
Loading…
Reference in New Issue