# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
#
# (C) COPYRIGHT 2018-2022 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 BACKEND_KERNEL && 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

config MALI_KUTF_MGM_INTEGRATION_TEST
	bool "Build Mali KUTF MGM integration test module"
	depends on MALI_KUTF
	default y
	help
	  This option will build the MGM integration test module.
	  It can test the implementation of PTE translation for specific
	  group ids.

	  Modules:
	    - mali_kutf_mgm_integration_test.ko


# Enable MALI_DEBUG for KUTF modules support

config UNIT_TEST_KERNEL_MODULES
       bool
       default y if UNIT_TEST_CODE && BACKEND_KERNEL
       default n
