# 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 n
	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_SHARED_BUFFER_TEST_EXPORTER
	bool "Build dma-buf framework test exporter module"
	depends on MALI_BASE_MODULES && DMA_SHARED_BUFFER
	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 && MALI_CSF_SUPPORT
	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

