# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note OR MIT
#
# (C) COPYRIGHT 2012-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.
#
#

config MALI_XEN
	tristate "Enable Xen Interface reference code"
	depends on MALI_ARBITRATION && XEN
	default n
	help
	  Enables the build of xen interface modules used in the reference
	  virtualization setup for Mali
	  If unsure, say N.

config MALI_ARBITER_MODULES
	tristate "Enable mali arbiter modules"
	depends on MALI_ARBITRATION
	default y
	help
	  Enables the build of the arbiter modules used in the reference
	  virtualization setup for Mali
	  If unsure, say N

config MALI_GPU_POWER_MODULES
	tristate "Enable gpu power modules"
	depends on MALI_ARBITRATION
	default y
	help
	  Enables the build of the gpu power modules used in the reference
	  virtualization setup for Mali
	  If unsure, say N


source "drivers/gpu/arm/midgard/arbitration/ptm/Kconfig"
