#
# (C) COPYRIGHT 2012-2019 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, you can access it online at
# http://www.gnu.org/licenses/gpl-2.0.html.
#
# SPDX-License-Identifier: GPL-2.0
#
#


menuconfig MALI_MIDGARD
	tristate "Mali Midgard series support"
	select GPU_TRACEPOINTS if ANDROID
	select DMA_SHARED_BUFFER
	default n
	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 "Enable Streamline tracing support"
	depends on MALI_MIDGARD
	default y
	help
	  Enables kbase tracing used by the Arm Streamline Performance Analyzer.
	  The tracepoints are used to derive GPU activity charts in 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 && PM_DEVFREQ
	default y
	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 "devicetree"
	help
	  Enter the name of the desired platform configuration directory to
	  include in the build. 'platform/$(MALI_PLATFORM_NAME)/Kbuild' must
	  exist.

# MALI_EXPERT configuration options

menuconfig MALI_EXPERT
	depends on MALI_MIDGARD
	bool "Enable Expert Settings"
	default n
	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_PLATFORM_POWER_DOWN_ONLY
	bool "Support disabling the power down of individual cores"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Enabling this feature will let the driver avoid power down of the
	  shader cores, the tiler, and the L2 cache.
	  The entire GPU would be powered down at once through the platform
	  specific code.
	  This may be required for certain platform configurations only.
	  This also limits the available power policies.

	  If unsure, say N.

config MALI_DEBUG
	bool "Debug build"
	depends on MALI_MIDGARD && MALI_EXPERT
	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 && (SYNC || SYNC_FILE)
	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_NO_MALI
	bool "No Mali"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  This can be used to test the driver in a simulated environment
	  whereby the hardware is not physically present. If the hardware is physically
	  present it will not be used. This can be used to test the majority of the
	  driver without needing actual hardware or for software benchmarking.
	  All calls to the simulated hardware will complete immediately as if the hardware
	  completed the task.

config MALI_REAL_HW
	def_bool !MALI_NO_MALI

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

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_PWRSOFT_765
	bool "PWRSOFT-765 ticket"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  PWRSOFT-765 fixes devfreq cooling devices issues. The fix was merged
	  in kernel v4.10, however if backported into the kernel then this
	  option must be manually selected.

	  If using kernel >= v4.10 then say N, otherwise if devfreq cooling
	  changes have been backported say Y to avoid compilation errors.

config MALI_MEMORY_FULLY_BACKED
	bool "Memory fully physically-backed"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  This option enables full physical backing of all virtual
	  memory allocations in the kernel. Notice that this build
	  option only affects allocations of grow-on-GPU-page-fault
	  memory.

config MALI_DMA_BUF_MAP_ON_DEMAND
	bool "Map imported dma-bufs on demand"
	depends on MALI_MIDGARD
	default n
	help
	  This option caused kbase to set up the GPU mapping of imported
	  dma-buf when needed to run atoms.  This is the legacy behaviour.

	  This is intended for testing and the option will get removed in the
	  future.

config MALI_DMA_BUF_LEGACY_COMPAT
	bool "Enable legacy compatibility cache flush on dma-buf map"
	depends on MALI_MIDGARD && !MALI_DMA_BUF_MAP_ON_DEMAND
	default y
	help
	  This option enables compatibility with legacy dma-buf mapping
	  behavior, then the dma-buf is mapped on import, by adding cache
	  maintenance where MALI_DMA_BUF_MAP_ON_DEMAND would do the mapping,
	  including a cache flush.

config MALI_HW_ERRATA_1485982_NOT_AFFECTED
	bool "Disable workaround for BASE_HW_ISSUE_GPU2017_1336"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  This option disables the default workaround for GPU2017-1336. The
	  workaround keeps the L2 cache powered up except for powerdown and reset.

	  The workaround introduces a limitation that will prevent the running of
	  protected mode content on fully coherent platforms, as the switch to IO
	  coherency mode requires the L2 to be turned off.

config MALI_HW_ERRATA_1485982_USE_CLOCK_ALTERNATIVE
	bool "Use alternative workaround for BASE_HW_ISSUE_GPU2017_1336"
	depends on MALI_MIDGARD && MALI_EXPERT && !MALI_HW_ERRATA_1485982_NOT_AFFECTED
	default n
	help
	  This option uses an alternative workaround for GPU2017-1336. Lowering
	  the GPU clock to a, platform specific, known good frequeuncy before
	  powering down the L2 cache. The clock can be specified in the device
	  tree using the property, opp-mali-errata-1485982. Otherwise the
	  slowest clock will be selected.

# Instrumentation options.

config MALI_JOB_DUMP
	bool "Enable system level support needed for job dumping"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Choose this option to enable system level support needed for
	  job dumping. This is typically used for instrumentation but has
	  minimal overhead when not in use. Enable only if you know what
	  you are doing.

config MALI_PRFCNT_SET_SECONDARY
	bool "Use secondary set of performance counters"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Select this option to use secondary set of performance counters. Kernel
	  features that depend on an access to the primary set of counters may
	  become unavailable. Enabling this option will prevent power management
	  from working optimally and may cause instrumentation tools to return
	  bogus results.

	  If unsure, say N.

source "drivers/gpu/arm/midgard/platform/Kconfig"
source "drivers/gpu/arm/midgard/tests/Kconfig"
