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

