# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
#
# (C) COPYRIGHT 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_BASE_MODULES
	bool "Mali Base extra modules"
	default y if BACKEND_KERNEL
	help
	  Enable this option to build support for a Arm Mali base modules.
	  Those modules provide extra features or debug interfaces and,
	  are optional for the use of the Mali GPU modules.

config DMA_BUF_LOCK
	bool "Build dma-buf lock module"
	depends on MALI_BASE_MODULES && MALI_DMA_FENCE
	default y
	help
	  This option will build the dma_buf_lock module.

	  Modules:
	    - dma_buf_lock.ko

config DMA_SHARED_BUFFER_TEST_EXPORTER
	bool "Build dma-buf framework test exporter module"
	depends on MALI_BASE_MODULES
	default y
	help
	  This option will build the dma-buf framework test exporter module.
	  Usable to help test importers.

	  Modules:
	    - dma-buf-test-exporter.ko

config MALI_MEMORY_GROUP_MANAGER
	bool "Build Mali Memory Group Manager module"
	depends on MALI_BASE_MODULES
	default y
	help
	  This option will build the memory group manager module.
	  This is an example implementation for allocation and release of pages
	  for memory pools managed by Mali GPU device drivers.

	  Modules:
	    - memory_group_manager.ko

config MALI_PROTECTED_MEMORY_ALLOCATOR
	bool "Build Mali Protected Memory Allocator module"
	depends on MALI_BASE_MODULES && GPU_HAS_CSF
	default y
	help
	  This option will build the protected memory allocator module.
	  This is an example implementation for allocation and release of pages
	  of secure memory intended to be used by the firmware
	  of Mali GPU device drivers.

	  Modules:
	    - protected_memory_allocator.ko

