#
# (C) COPYRIGHT 2012-2018 ARM Limited. All rights reserved.
#
# This program is free software and is provided to you under the terms of the
# GNU General Public License version 2 as published by the Free Software
# Foundation, and any use by you of this program is subject to the terms
# of such GNU licence.
#
# A copy of the licence is included with the program, and can also be obtained
# from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA  02110-1301, USA.
#
#


menuconfig MALI_MIDGARD
	bool "Mali Midgard series support"
	default y
	help
	  Enable this option to build support for a ARM Mali Midgard GPU.

	  To compile this driver as a module, choose M here:
	  this will generate a single module, called mali_kbase.

config MALI_GATOR_SUPPORT
	bool "Streamline support via Gator"
	depends on MALI_MIDGARD && !BACKEND_USER
	default y if INSTRUMENTATION_STREAMLINE_OLD
	default n
	help
	  Adds diagnostic support for use with the ARM Streamline Performance Analyzer.
	  You will need the Gator device driver already loaded before loading this driver when enabling
	  Streamline debug support.
	  This is a legacy interface required by older versions of Streamline.

config MALI_MIDGARD_DVFS
	bool "Enable legacy DVFS"
	depends on MALI_MIDGARD && !MALI_DEVFREQ
	default n
	help
	  Choose this option to enable legacy DVFS in the Mali Midgard DDK.

config MALI_MIDGARD_ENABLE_TRACE
	bool "Enable kbase tracing"
	depends on MALI_MIDGARD
	default n
	help
	  Enables tracing in kbase.  Trace log available through
	  the "mali_trace" debugfs file, when the CONFIG_DEBUG_FS is enabled

config MALI_DEVFREQ
	bool "devfreq support for Mali"
	depends on MALI_MIDGARD
	default y if PLATFORM_JUNO
	default y if PLATFORM_CUSTOM
	help
	  Support devfreq for Mali.

	  Using the devfreq framework and, by default, the simpleondemand
	  governor, the frequency of Mali will be dynamically selected from the
	  available OPPs.

config MALI_DMA_FENCE
	bool "DMA_BUF fence support for Mali"
	depends on MALI_MIDGARD
	default n
	help
	  Support DMA_BUF fences for Mali.

	  This option should only be enabled if the Linux Kernel has built in
	  support for DMA_BUF fences.

config MALI_PLATFORM_NAME
	depends on MALI_MIDGARD
	string "Platform name"
	default "arndale" if PLATFORM_ARNDALE
	default "arndale_octa" if PLATFORM_ARNDALE_OCTA
	default "rk" if PLATFORM_FIREFLY
	default "hisilicon" if PLATFORM_HIKEY960
	default "hisilicon" if PLATFORM_HIKEY970
	default "vexpress" if PLATFORM_VEXPRESS
	default "devicetree"
	help
	  Enter the name of the desired platform configuration directory to
	  include in the build. 'platform/$(MALI_PLATFORM_NAME)/Kbuild' must
	  exist.

	  When PLATFORM_CUSTOM is set, this needs to be set manually to
	  pick up the desired platform files.

config MALI_MOCK_TEST
	bool
	depends on MALI_MIDGARD && !RELEASE
	default y

# MALI_EXPERT configuration options

menuconfig MALI_EXPERT
	depends on MALI_MIDGARD
	bool "Enable Expert Settings"
	default y
	help
	  Enabling this option and modifying the default settings may produce a driver with performance or
	  other limitations.

config MALI_CORESTACK
	bool "Support controlling power to the GPU core stack"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Enabling this feature on supported GPUs will let the driver powering
	  on/off the GPU core stack independently without involving the Power
	  Domain Controller. This should only be enabled on platforms which
	  integration of the PDC to the Mali GPU is known to be problematic.
	  This feature is currently only supported on t-Six and t-HEx GPUs.

	  If unsure, say N.

config MALI_DEBUG
	bool "Debug build"
	depends on MALI_MIDGARD && MALI_EXPERT
	default y if DEBUG
	default n
	help
	  Select this option for increased checking and reporting of errors.

config MALI_FENCE_DEBUG
	bool "Debug sync fence usage"
	depends on MALI_MIDGARD && MALI_EXPERT
	default y if MALI_DEBUG
	help
	  Select this option to enable additional checking and reporting on the
	  use of sync fences in the Mali driver.

	  This will add a 3s timeout to all sync fence waits in the Mali
	  driver, so that when work for Mali has been waiting on a sync fence
	  for a long time a debug message will be printed, detailing what fence
	  is causing the block, and which dependent Mali atoms are blocked as a
	  result of this.

	  The timeout can be changed at runtime through the js_soft_timeout
	  device attribute, where the timeout is specified in milliseconds.

config MALI_ERROR_INJECT
	bool "Error injection"
	depends on MALI_MIDGARD && MALI_EXPERT && NO_MALI
	default n
	help
	  Enables insertion of errors to test module failure and recovery mechanisms.

config MALI_ERROR_INJECT_RANDOM
	bool "Random error injection"
	depends on MALI_MIDGARD && MALI_EXPERT && NO_MALI && MALI_ERROR_INJECT
	default n
	help
	  Injected errors are random, rather than user-driven.

config MALI_SYSTEM_TRACE
	bool "Enable system event tracing support"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Choose this option to enable system trace events for each
	  kbase event.	This is typically used for debugging but has
	  minimal overhead when not in use. Enable only if you know what
	  you are doing.

config MALI_2MB_ALLOC
	bool "Attempt to allocate 2MB pages"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Rather than allocating all GPU memory page-by-page, attempt to
	  allocate 2MB pages from the kernel. This reduces TLB pressure and
	  helps to prevent memory fragmentation.

	  If in doubt, say N

config MALI_FPGA_BUS_LOGGER
	bool "Enable bus log integration"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n

config MALI_PWRSOFT_765
	bool "PWRSOFT-765 ticket"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  PWRSOFT-765 fixes devfreq cooling devices issues. However, they are
	  not merged in mainline kernel yet. So this define helps to guard those
	  parts of the code.

# Instrumentation options.

# config MALI_JOB_DUMP exists in the Kernel Kconfig but is configured using CINSTR_JOB_DUMP in Mconfig.
# config MALI_PRFCNT_SET_SECONDARY exists in the Kernel Kconfig but is configured using CINSTR_SECONDARY_HWC in Mconfig.

source "kernel/drivers/gpu/arm/midgard/tests/Mconfig"
