#
# Copyright (c) 2019-2023, NVIDIA CORPORATION.  All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
#

# This file defines the make variables and cflags applicable to nvgpu common
# shared by qnx, nvgpu userspace, test builds. Note that cflags are added to
# variable NVGPU_COMMON_CFLAGS that needs to be used by the parent Makefile
# to update corresponding cflags variable.

# Default is the regular profile. That can be overridden if necessary. by
# setting the NVGPU_FORCE_SAFETY_PROFILE. This is a useful hack while we
# wait for the userspace tmake build to make its way into a proper safety
# profile build.
profile := default

# Decide whether to use the safety release, safety debug or the regular profile.
ifeq ($(NV_BUILD_CONFIGURATION_IS_SAFETY),1)
profile := safety_release
ifeq ($(NV_BUILD_CONFIGURATION_IS_DEBUG),1)
profile := safety_debug
endif
endif

ifeq ($(NVGPU_FORCE_SAFETY_PROFILE),1)
profile := safety_release
ifeq ($(NVGPU_FORCE_DEBUG_PROFILE),1)
profile := safety_debug
endif
endif

NVGPU_COMMON_CFLAGS		:=

# Enable debug flag for both safety debug and standard debug builds.
ifeq ($(NV_BUILD_CONFIGURATION_IS_DEBUG),1)
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVGPU_BUILD_CONFIGURATION_IS_DEBUG
endif

#
# Flags always enabled regardless of build profile.
#

NVGPU_COMMON_CFLAGS		+=		\
	-DCONFIG_TEGRA_GK20A_PMU=1		\
	-DCONFIG_TEGRA_ACR=1			\
	-DCONFIG_NVGPU_GR_VIRTUALIZATION \
	-DCONFIG_NVS_ROUND_ROBIN_SCHEDULER_DISABLE


# Enable the PCI probe functionality for all builds
CONFIG_NVGPU_PCI_IGPU		:= 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVGPU_PCI_IGPU

ifeq ($(CONFIG_NVGPU_DGPU),1)
NVGPU_COMMON_CFLAGS		+= -DCONFIG_PCI_MSI
endif

ifndef NVGPU_HVRTOS
CONFIG_NVGPU_IVM_BUILD               := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_IVM_BUILD
endif

CONFIG_NVGPU_LOGGING                 := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_LOGGING

ifneq ($(CONFIG_NVGPU_DGPU),1)
ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVS_PRESENT		:= 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVS_PRESENT
CONFIG_KMD_SCHEDULING_WORKER_THREAD  := 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_KMD_SCHEDULING_WORKER_THREAD

NVS_USE_IMPL_TYPES		:= 1
NVGPU_COMMON_CFLAGS		+= -DNVS_USE_IMPL_TYPES
endif
endif

# Syncpoint support provided by nvhost is expected to exist.
CONFIG_TEGRA_GK20A_NVHOST            := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_TEGRA_GK20A_NVHOST

# Syncfds are a Linux feature.
CONFIG_NVGPU_SYNCFD_NONE             := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_SYNCFD_NONE

CONFIG_NVGPU_GRAPHICS                := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_GRAPHICS

CONFIG_NVGPU_SUPPORT_GV11B           := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_SUPPORT_GV11B

# Error reporting needs to be supported in qnx-safety, qnx-standard, linux.
# In qnx-standard, nvgpu makefile is used for RM SERVER. Since iGPU is in
# pass through mode in all three platforms, EPL libraries should not be
# included in RM server. Use this flag to include/exclude MISC_EC libraries.
ifneq ($(NV_BUILD_CONFIGURATION_IS_VM_SERVER), 1)
CONFIG_NVGPU_ENABLE_MISC_EC          := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_ENABLE_MISC_EC
endif
CONFIG_NVGPU_COMPRESSION             := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_COMPRESSION

ifeq ($(profile),$(filter $(profile),safety_debug safety_release))

# Enable golden context verification only for safety debug/release build
NVGPU_COMMON_CFLAGS             +=      \
	-DCONFIG_NVGPU_GR_GOLDEN_CTX_VERIFICATION     \
	-DCONFIG_NVGPU_BUILD_CONFIGURATION_IS_SAFETY
#Enable NVGPU_MON interaction with NVGPU-RM
CONFIG_NVGPU_MON_PRESENT        := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_MON_PRESENT

# Enable ASIL-D checkers
CONFIG_NVGPU_CHECKER              := 1
NVGPU_COMMON_CFLAGS               += -DCONFIG_NVGPU_CHECKER=1

## For tesing of CTXSW FW error codes manually, enable below configs in safety build.
## Enable only one config at a time, because only one error can be tested at a time.
# NVGPU_COMMON_CFLAGS             +=      \
# 	-DCONFIG_NVGPU_CTXSW_FW_ERROR_WDT_TESTING
#
# NVGPU_COMMON_CFLAGS             +=      \
# 	-DCONFIG_NVGPU_CTXSW_FW_ERROR_CODE_TESTING
#
# NVGPU_COMMON_CFLAGS             +=      \
# 	-DCONFIG_NVGPU_CTXSW_FW_ERROR_HEADER_TESTING

# Enable gsp scheduler for safety build
ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVGPU_GSP_SCHEDULER	:= 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVGPU_GSP_SCHEDULER
endif

# used by sec2/gsp code
CONFIG_NVGPU_ENGINE_QUEUE       := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_ENGINE_QUEUE

ifeq ($(CONFIG_NVGPU_DGPU),1)

NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_DGPU

CONFIG_NVGPU_NVLINK             := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_NVLINK

# used in ce_app
CONFIG_NVGPU_FENCE              := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FENCE

# ce_app uses syncpt (nvgpu_nvhost_syncpt_wait_timeout_ext)
CONFIG_NVGPU_KERNEL_MODE_SUBMIT := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_KERNEL_MODE_SUBMIT

CONFIG_NVGPU_FALCON_NON_FUSA	:= 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FALCON_NON_FUSA

CONFIG_NVGPU_FALCON_DEBUG   := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FALCON_DEBUG

CONFIG_NVGPU_GR_FALCON_NON_SECURE_BOOT := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_GR_FALCON_NON_SECURE_BOOT

CONFIG_NVGPU_SM_DIVERSITY := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_SM_DIVERSITY

CONFIG_NVGPU_USE_3LSS_ERR_INJECTION := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_USE_3LSS_ERR_INJECTION

CONFIG_NVGPU_LS_PMU             := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_LS_PMU

CONFIG_NVGPU_CLK_ARB            := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_CLK_ARB
endif

endif

CONFIG_NVGPU_TEGRA_FUSE		:= 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVGPU_TEGRA_FUSE

#
# Flags enabled only for safety debug and regular build profile.
#
ifneq ($(profile),safety_release)

ifndef NVGPU_HVRTOS
CONFIG_NVGPU_TRACE              := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_TRACE
endif

CONFIG_NVGPU_FALCON_DEBUG       := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FALCON_DEBUG

ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVGPU_SYSFS              := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_SYSFS
endif

#
# Flags enabled only for regular build profile.
#
ifneq ($(profile),safety_debug)

ifneq ($(NVGPU_HVRTOS),1)
ifeq ($(CONFIG_NVGPU_ENABLE_MISC_EC),1)
ifneq ($(CONFIG_NVGPU_MON_PRESENT),1)
CONFIG_NVGPU_EPL_INIT            := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_EPL_INIT
endif
endif
endif

# Enable FSI Error injection support only on regular build when the
# build configuartion is VLTest. The safety build will use
# Mon process, so error injection on safety build is part of Mon
# Makefile.
# Also, enable this HSI error injection when NVGPU's MISC_EC support
# is enabled and Server support is not present.
ifeq ($(NV_BUILD_CONFIGURATION_IS_VLTEST),1)
ifeq ($(CONFIG_NVGPU_ENABLE_MISC_EC),1)
ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVGPU_FSI_ERR_INJECTION    := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FSI_ERR_INJECTION
endif
endif
endif

# ACR feature to enable old tegra ACR profile support
CONFIG_NVGPU_ACR_LEGACY         := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_ACR_LEGACY

CONFIG_NVGPU_DEBUGGER           := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_DEBUGGER

CONFIG_NVGPU_PROFILER           := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_PROFILER

CONFIG_NVGPU_RECOVERY           := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_RECOVERY

CONFIG_NVGPU_CILP               := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_CILP

CONFIG_NVGPU_GFXP               := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_GFXP

CONFIG_NVGPU_CYCLESTATS         := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_CYCLESTATS

CONFIG_NVGPU_FECS_TRACE         := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FECS_TRACE

ifneq ($(CONFIG_NVGPU_DGPU),1)
ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVGPU_IGPU_VIRT          := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_IGPU_VIRT
endif
endif

# Enable the usage of 3LSS error injection features.
CONFIG_NVGPU_USE_3LSS_ERR_INJECTION := 1
NVGPU_COMMON_CFLAGS                 += -DCONFIG_NVGPU_USE_3LSS_ERR_INJECTION

ifneq ($(NVGPU_HVRTOS),1)
# Enable nvlink support for normal build.
CONFIG_NVGPU_NVLINK             := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_NVLINK
endif

# Enable static_powergate support for normal build.
CONFIG_NVGPU_STATIC_POWERGATE      := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_STATIC_POWERGATE

# Enable mssnvlink0 reset control for normal build
CONFIG_MSSNVLINK0_RST_CONTROL   := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_MSSNVLINK0_RST_CONTROL

ifneq ($(NVGPU_HVRTOS),1)
# Enable dgpu support for normal build.
CONFIG_NVGPU_DGPU               := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_DGPU
endif

CONFIG_NVGPU_VPR                := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_VPR

CONFIG_NVGPU_REPLAYABLE_FAULT   := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_REPLAYABLE_FAULT

CONFIG_NVGPU_FALCON_DEBUG       := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FALCON_DEBUG

# Enable LS PMU support for normal build
CONFIG_NVGPU_LS_PMU             := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_LS_PMU

# Enable elpg support for normal build
CONFIG_NVGPU_POWER_PG           := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_POWER_PG

# Enable sim support for normal build
CONFIG_NVGPU_SIM                := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_SIM

# Enable non FUSA HALs for normal build
CONFIG_NVGPU_HAL_NON_FUSA       := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_HAL_NON_FUSA

# Enable non FUSA common code for normal build
CONFIG_NVGPU_NON_FUSA           := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_NON_FUSA

ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVGPU_CLK_ARB            := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_CLK_ARB
endif

NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FALCON_NON_FUSA

NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_IOCTL_NON_FUSA
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_DETERMINISTIC_CHANNELS

CONFIG_NVGPU_GR_FALCON_NON_SECURE_BOOT := 1
NVGPU_COMMON_CFLAGS                    += -DCONFIG_NVGPU_GR_FALCON_NON_SECURE_BOOT

CONFIG_NVGPU_SET_FALCON_ACCESS_MAP := 1
NVGPU_COMMON_CFLAGS                += -DCONFIG_NVGPU_SET_FALCON_ACCESS_MAP

# Enable SW Semaphore for normal build
CONFIG_NVGPU_SW_SEMAPHORE       := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_SW_SEMAPHORE

# Enable Channel WDT for safety build until we switch to user mode submits only
CONFIG_NVGPU_CHANNEL_WDT := 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVGPU_CHANNEL_WDT

# Enable Kernel Mode submit for safety build until we switch to user mode
# submits only
CONFIG_NVGPU_KERNEL_MODE_SUBMIT := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_KERNEL_MODE_SUBMIT

# Enable fences for safety build till until we switch to user mode submits only
CONFIG_NVGPU_FENCE              := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FENCE

# Enable powergate lib for normal build
CONFIG_NVGPU_USE_POWERGATE_LIB  := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_USE_POWERGATE_LIB

NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_FIFO_ENGINE_ACTIVITY

# Enable HW based error injection support
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_INJECT_HWERR

# Enable Channel/TSG Scheduling
CONFIG_NVGPU_CHANNEL_TSG_SCHEDULING  := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_CHANNEL_TSG_SCHEDULING

# Enable Channel/TSG Control
CONFIG_NVGPU_CHANNEL_TSG_CONTROL     := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_CHANNEL_TSG_CONTROL

# Enable Virtualization server for normal build
NVGPU_COMMON_CFLAGS             += -DCONFIG_TEGRA_GR_VIRTUALIZATION_SERVER

# Enable SM diversity support for normal build
CONFIG_NVGPU_SM_DIVERSITY            := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_SM_DIVERSITY

ifndef NVGPU_HVRTOS
# Enable Multi Instance GPU support for normal build
CONFIG_NVGPU_MIG                     := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_MIG
endif

# Enable gsp scheduler for normal build
ifneq ($(NVGPU_HVRTOS),1)
CONFIG_NVGPU_GSP_SCHEDULER	:= 1
NVGPU_COMMON_CFLAGS		+= -DCONFIG_NVGPU_GSP_SCHEDULER
endif

# used by sec2/gsp code
CONFIG_NVGPU_ENGINE_QUEUE       := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_ENGINE_QUEUE

# Code to encapsulate the error information into a uniform interface via
# nvgpu_err_msg is currently used, but might be needed in future by nvgpu_rm
# process. Retain this code under CONFIG_NVGPU_INTR_DEBUG which is enabled
# only in standard build for now.
CONFIG_NVGPU_INTR_DEBUG	:= 1
NVGPU_COMMON_CFLAGS	+= -DCONFIG_NVGPU_INTR_DEBUG

# Enable GSP stress test
ifeq ($(CONFIG_NVGPU_GSP_SCHEDULER),1)
CONFIG_NVGPU_GSP_STRESS_TEST    := 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_GSP_STRESS_TEST
endif
# Enable Nonstall interrupt support for normal build
CONFIG_NVGPU_NONSTALL_INTR           := 1
NVGPU_COMMON_CFLAGS                  += -DCONFIG_NVGPU_NONSTALL_INTR

endif
endif

# Enable USERD only if kernel mode submit is supported
ifeq ($(CONFIG_NVGPU_KERNEL_MODE_SUBMIT),1)
CONFIG_NVGPU_USERD		:= 1
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_USERD
endif

ifeq ($(CONFIG_NVGPU_DEBUGGER),1)
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_ENGINE_RESET
endif

ifeq ($(CONFIG_NVGPU_RECOVERY),1)
NVGPU_COMMON_CFLAGS             += -DCONFIG_NVGPU_ENGINE_RESET
endif
