# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
#
# (C) COPYRIGHT 2017, 2020-2021 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 license.
#
# 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.
#
#

menuconfig MALI_KUTF
	bool "Build Mali Kernel Unit Test Framework modules"
	depends on MALI_MIDGARD && MALI_DEBUG
	default y if MALI_DEBUG
	help
	  This option will build the Mali testing framework modules.

	  Modules:
	   - kutf.ko
	   - kutf_test.ko

config MALI_KUTF_IRQ_TEST
	bool "Build Mali KUTF IRQ test module"
	depends on MALI_KUTF
	default y
	help
	  This option will build the IRQ latency measurement test module.
	  It can determine the latency of the Mali GPU IRQ on your system.

	  Modules:
	    - mali_kutf_irq_test.ko

config MALI_KUTF_CLK_RATE_TRACE
	bool "Build Mali KUTF Clock rate trace test module"
	depends on MALI_KUTF
	default y
	help
	  This option will build the clock rate trace portal test module.
	  It can test the clocks integration into the platform and exercise some
	  basic trace test in the system.

	  Modules:
	    - mali_kutf_clk_rate_trace_test_portal.ko


comment "Enable MALI_DEBUG for KUTF modules support"
	depends on MALI_MIDGARD && !MALI_DEBUG && MALI_KUTF
