#
# (C) COPYRIGHT 2012-2015 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
	tristate "Mali Midgard series support"
	select GPU_TRACEPOINTS if ANDROID
	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 "Streamline support via Gator"
	depends on MALI_MIDGARD
	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 && !MALI_PLATFORM_DEVICETREE
	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
	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 && !KDS
	default n
	help
	  Support DMA_BUF fences for Mali.

	  This option should only be enabled if KDS is not present and
	  the Linux Kernel has built in support for DMA_BUF fences.

# 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_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.

config MALI_PLATFORM_FAKE
	bool "Enable fake platform device support"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  When you start to work with the Mali Midgard series device driver the platform-specific code of
	  the Linux kernel for your platform may not be complete. In this situation the kernel device driver
	  supports creating the platform device outside of the Linux platform-specific code.
	  Enable this option if would like to use a platform device configuration from within the device driver.

choice
	prompt "Platform configuration"
	depends on MALI_MIDGARD && MALI_EXPERT
	default MALI_PLATFORM_DEVICETREE
	help
	  Select the SOC platform that contains a Mali Midgard GPU

config MALI_PLATFORM_DEVICETREE
	bool "Device Tree platform"
	depends on OF
	help
	  Select this option to use Device Tree with the Mali driver.

	  When using this option the Mali driver will get the details of the
	  GPU hardware from the Device Tree. This means that the same driver
	  binary can run on multiple platforms as long as all the GPU hardware
	  details are described in the device tree.

	  Device Tree is the recommended method for the Mali driver platform
	  integration.

config MALI_PLATFORM_VEXPRESS
	depends on ARCH_VEXPRESS && (ARCH_VEXPRESS_CA9X4 || ARCH_VEXPRESS_CA15X4)
	bool "Versatile Express"
config MALI_PLATFORM_VEXPRESS_VIRTEX7_40MHZ
	depends on ARCH_VEXPRESS && (ARCH_VEXPRESS_CA9X4 || ARCH_VEXPRESS_CA15X4)
	bool "Versatile Express w/Virtex7 @ 40Mhz"
config MALI_PLATFORM_GOLDFISH
	depends on ARCH_GOLDFISH
	bool "Android Goldfish virtual CPU"
config MALI_PLATFORM_PBX
	depends on ARCH_REALVIEW && REALVIEW_EB_A9MP && MACH_REALVIEW_PBX
	bool "Realview PBX-A9"
config MALI_PLATFORM_THIRDPARTY
	bool "Third Party Platform"
endchoice

config MALI_PLATFORM_THIRDPARTY_NAME
	depends on MALI_MIDGARD && MALI_PLATFORM_THIRDPARTY && MALI_EXPERT
	string "Third party platform name"
	help
	  Enter the name of a third party platform that is supported. The third part configuration
	  file must be in midgard/config/tpip/mali_kbase_config_xxx.c where xxx is the name
	  specified here.

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
	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_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_TRACE_TIMELINE
	bool "Timeline tracing"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Enables timeline tracing through the kernel tracepoint system.

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_GPU_MMU_AARCH64
	bool "Use AArch64 page tables"
	depends on MALI_MIDGARD && MALI_EXPERT
	default n
	help
	  Use AArch64 format page tables for the GPU instead of LPAE-style.
	  The two formats have the same functionality and performance but a
	  future GPU may deprecate or remove the legacy LPAE-style format.

	  The LPAE-style format is supported on all Midgard and current Bifrost
	  GPUs. Enabling AArch64 format restricts the driver to only supporting
	  Bifrost GPUs.

	  If in doubt, say N.

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