# SPDX-License-Identifier: GPL-2.0-only
#
# Drm device configuration
#
# This driver provides support for the
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
#
menuconfig DRM
	tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)"
	depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA
	select DRM_PANEL_ORIENTATION_QUIRKS
	select HDMI
	select I2C
	select DMA_SHARED_BUFFER
	select SYNC_FILE
# gallium uses SYS_kcmp for os_same_file_description() to de-duplicate
# device and dmabuf fd. Let's make sure that is available for our userspace.
	select KCMP
	select VIDEO
	help
	  Kernel-level support for the Direct Rendering Infrastructure (DRI)
	  introduced in XFree86 4.0. If you say Y here, you need to select
	  the module that's right for your graphics card from the list below.
	  These modules provide support for synchronization, security, and
	  DMA transfers. Please see <http://dri.sourceforge.net/> for more
	  details.  You should also select and configure AGP
	  (/dev/agpgart) support if it is available for your platform.

menu "DRM debugging options"
depends on DRM
source "drivers/gpu/drm/Kconfig.debug"
endmenu

if DRM

config DRM_MIPI_DBI
	tristate
	depends on DRM
	select DRM_KMS_HELPER

config DRM_MIPI_DSI
	bool
	depends on DRM

config DRM_KMS_HELPER
	tristate
	depends on DRM
	select FB_CORE if DRM_FBDEV_EMULATION
	help
	  CRTC helpers for KMS drivers.

config DRM_DRAW
	bool
	depends on DRM

config DRM_PANIC
	bool "Display a user-friendly message when a kernel panic occurs"
	depends on DRM
	select FONT_SUPPORT
	select DRM_DRAW
	help
	  Enable a drm panic handler, which will display a user-friendly message
	  when a kernel panic occurs. It's useful when using a user-space
	  console instead of fbcon.
	  It will only work if your graphic driver supports this feature.
	  To support Hi-DPI Display, you can enable bigger fonts like
	  FONT_TER16x32

config DRM_PANIC_FOREGROUND_COLOR
	hex "Drm panic screen foreground color, in RGB"
	depends on DRM_PANIC
	default 0xffffff

config DRM_PANIC_BACKGROUND_COLOR
	hex "Drm panic screen background color, in RGB"
	depends on DRM_PANIC
	default 0x000000

config DRM_PANIC_DEBUG
	bool "Add a debug fs entry to trigger drm_panic"
	depends on DRM_PANIC && DEBUG_FS
	help
	  Add dri/[device]/drm_panic_plane_x in the kernel debugfs, to force the
	  panic handler to write the panic message to this plane scanout buffer.
	  This is unsafe and should not be enabled on a production build.
	  If in doubt, say "N".

config DRM_PANIC_SCREEN
	string "Panic screen formatter"
	default "user"
	depends on DRM_PANIC
	help
	  This option enable to choose what will be displayed when a kernel
	  panic occurs. You can choose between "user", a short message telling
	  the user to reboot the system, or "kmsg" which will display the last
	  lines of kmsg.
	  This can also be overridden by drm.panic_screen=xxxx kernel parameter
	  or by writing to /sys/module/drm/parameters/panic_screen sysfs entry
	  Default is "user"

config DRM_PANIC_SCREEN_QR_CODE
	bool "Add a panic screen with a QR code"
	depends on DRM_PANIC && RUST
	select ZLIB_DEFLATE
	help
	  This option adds a QR code generator, and a panic screen with a QR
	  code. The QR code will contain the last lines of kmsg and other debug
	  information. This should be easier for the user to report a kernel
	  panic, with all debug information available.
	  To use this panic screen, also set DRM_PANIC_SCREEN to "qr_code"

config DRM_PANIC_SCREEN_QR_CODE_URL
	string "Base URL of the QR code in the panic screen"
	depends on DRM_PANIC_SCREEN_QR_CODE
	help
	  This option sets the base URL to report the kernel panic. If it's set
	  the QR code will contain the URL and the kmsg compressed with zlib as
	  a URL parameter. If it's empty, the QR code will contain the kmsg as
	  uncompressed text only.
	  There is a demo code in javascript, to decode and uncompress the kmsg
	  data from the URL parameter at https://github.com/kdj0c/panic_report

config DRM_PANIC_SCREEN_QR_VERSION
	int "Maximum version (size) of the QR code."
	depends on DRM_PANIC_SCREEN_QR_CODE
	default 40
	help
	  This option limits the version (or size) of the QR code. QR code
	  version ranges from Version 1 (21x21) to Version 40 (177x177).
	  Smaller QR code are easier to read, but will contain less debugging
	  data. Default is 40.

config DRM_DEBUG_DP_MST_TOPOLOGY_REFS
        bool "Enable refcount backtrace history in the DP MST helpers"
	depends on STACKTRACE_SUPPORT
        select STACKDEPOT
        select DRM_KMS_HELPER
        depends on DEBUG_KERNEL
        depends on EXPERT
        help
          Enables debug tracing for topology refs in DRM's DP MST helpers. A
          history of each topology reference/dereference will be printed to the
          kernel log once a port or branch device's topology refcount reaches 0.

          This has the potential to use a lot of memory and print some very
          large kernel messages. If in doubt, say "N".

config DRM_DEBUG_MODESET_LOCK
	bool "Enable backtrace history for lock contention"
	depends on STACKTRACE_SUPPORT
	depends on DEBUG_KERNEL
	depends on EXPERT
	select STACKDEPOT
	default y if DEBUG_WW_MUTEX_SLOWPATH
	help
	  Enable debug tracing of failures to gracefully handle drm modeset lock
	  contention. A history of each drm modeset lock path hitting -EDEADLK
	  will be saved until gracefully handled, and the backtrace will be
	  printed when attempting to lock a contended lock.

	  If in doubt, say "N".

config DRM_CLIENT
	bool
	depends on DRM
	help
	  Enables support for DRM clients. DRM drivers that need
	  struct drm_client_dev and its interfaces should select this
	  option. Drivers that support the default clients should
	  select DRM_CLIENT_SELECTION instead.

source "drivers/gpu/drm/clients/Kconfig"

config DRM_LOAD_EDID_FIRMWARE
	bool "Allow to specify an EDID data set instead of probing for it"
	depends on DRM
	help
	  Say Y here, if you want to use EDID data to be loaded from the
	  /lib/firmware directory or one of the provided built-in
	  data sets. This may be necessary, if the graphics adapter or
	  monitor are unable to provide appropriate EDID data. Since this
	  feature is provided as a workaround for broken hardware, the
	  default case is N. Details and instructions how to build your own
	  EDID data are given in Documentation/admin-guide/edid.rst.

source "drivers/gpu/drm/display/Kconfig"

config DRM_TTM
	tristate
	depends on DRM && MMU
	select SHMEM
	help
	  GPU memory management subsystem for devices with multiple
	  GPU memory types. Will be enabled automatically if a device driver
	  uses it.

config DRM_EXEC
	tristate
	depends on DRM
	help
	  Execution context for command submissions

config DRM_GPUVM
	tristate
	depends on DRM
	select DRM_EXEC
	help
	  GPU-VM representation providing helpers to manage a GPUs virtual
	  address space

config DRM_GPUSVM
	tristate
	depends on DRM
	select HMM_MIRROR
	select MMU_NOTIFIER
	help
	  GPU-SVM representation providing helpers to manage a GPUs shared
	  virtual memory

config DRM_BUDDY
	tristate
	depends on DRM
	help
	  A page based buddy allocator

config DRM_VRAM_HELPER
	tristate
	depends on DRM
	help
	  Helpers for VRAM memory management

config DRM_TTM_HELPER
	tristate
	depends on DRM
	select DRM_TTM
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
	  Helpers for ttm-based gem objects

config DRM_GEM_DMA_HELPER
	tristate
	depends on DRM
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_DMAMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
	  Choose this if you need the GEM DMA helper functions

config DRM_GEM_SHMEM_HELPER
	tristate
	depends on DRM && MMU
	select DRM_KMS_HELPER if DRM_FBDEV_EMULATION
	select FB_CORE if DRM_FBDEV_EMULATION
	select FB_SYSMEM_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
	help
	  Choose this if you need the GEM shmem helper functions

config DRM_SUBALLOC_HELPER
	tristate
	depends on DRM

config DRM_SCHED
	tristate
	depends on DRM

# Separate option as not all DRM drivers use it
config DRM_PANEL_BACKLIGHT_QUIRKS
	tristate

config DRM_LIB_RANDOM
	bool
	default n

config DRM_PRIVACY_SCREEN
	bool
	default n

# DRM driver Kconfig files, sorted
source "drivers/gpu/drm/adp/Kconfig"
source "drivers/gpu/drm/amd/amdgpu/Kconfig"
source "drivers/gpu/drm/arm/Kconfig"
source "drivers/gpu/drm/armada/Kconfig"
source "drivers/gpu/drm/aspeed/Kconfig"
source "drivers/gpu/drm/ast/Kconfig"
source "drivers/gpu/drm/atmel-hlcdc/Kconfig"
source "drivers/gpu/drm/bridge/Kconfig"
source "drivers/gpu/drm/etnaviv/Kconfig"
source "drivers/gpu/drm/exynos/Kconfig"
source "drivers/gpu/drm/fsl-dcu/Kconfig"
source "drivers/gpu/drm/gma500/Kconfig"
source "drivers/gpu/drm/gud/Kconfig"
source "drivers/gpu/drm/hisilicon/Kconfig"
source "drivers/gpu/drm/hyperv/Kconfig"
source "drivers/gpu/drm/i915/Kconfig"
source "drivers/gpu/drm/imagination/Kconfig"
source "drivers/gpu/drm/imx/Kconfig"
source "drivers/gpu/drm/ingenic/Kconfig"
source "drivers/gpu/drm/kmb/Kconfig"
source "drivers/gpu/drm/lima/Kconfig"
source "drivers/gpu/drm/logicvc/Kconfig"
source "drivers/gpu/drm/loongson/Kconfig"
source "drivers/gpu/drm/mcde/Kconfig"
source "drivers/gpu/drm/mediatek/Kconfig"
source "drivers/gpu/drm/meson/Kconfig"
source "drivers/gpu/drm/mgag200/Kconfig"
source "drivers/gpu/drm/msm/Kconfig"
source "drivers/gpu/drm/mxsfb/Kconfig"
source "drivers/gpu/drm/nouveau/Kconfig"
source "drivers/gpu/drm/nova/Kconfig"
source "drivers/gpu/drm/omapdrm/Kconfig"
source "drivers/gpu/drm/panel/Kconfig"
source "drivers/gpu/drm/panfrost/Kconfig"
source "drivers/gpu/drm/panthor/Kconfig"
source "drivers/gpu/drm/pl111/Kconfig"
source "drivers/gpu/drm/qxl/Kconfig"
source "drivers/gpu/drm/radeon/Kconfig"
source "drivers/gpu/drm/renesas/Kconfig"
source "drivers/gpu/drm/rockchip/Kconfig"
source "drivers/gpu/drm/sitronix/Kconfig"
source "drivers/gpu/drm/solomon/Kconfig"
source "drivers/gpu/drm/sprd/Kconfig"
source "drivers/gpu/drm/sti/Kconfig"
source "drivers/gpu/drm/stm/Kconfig"
source "drivers/gpu/drm/sun4i/Kconfig"
source "drivers/gpu/drm/sysfb/Kconfig"
source "drivers/gpu/drm/tegra/Kconfig"
source "drivers/gpu/drm/tidss/Kconfig"
source "drivers/gpu/drm/tilcdc/Kconfig"
source "drivers/gpu/drm/tiny/Kconfig"
source "drivers/gpu/drm/tve200/Kconfig"
source "drivers/gpu/drm/tyr/Kconfig"
source "drivers/gpu/drm/udl/Kconfig"
source "drivers/gpu/drm/v3d/Kconfig"
source "drivers/gpu/drm/vboxvideo/Kconfig"
source "drivers/gpu/drm/vc4/Kconfig"
source "drivers/gpu/drm/vgem/Kconfig"
source "drivers/gpu/drm/virtio/Kconfig"
source "drivers/gpu/drm/vkms/Kconfig"
source "drivers/gpu/drm/vmwgfx/Kconfig"
source "drivers/gpu/drm/xe/Kconfig"
source "drivers/gpu/drm/xen/Kconfig"
source "drivers/gpu/drm/xlnx/Kconfig"

endif

# Separate option because drm_panel_orientation_quirks.c is shared with fbdev
config DRM_PANEL_ORIENTATION_QUIRKS
	tristate
