#ifeq ($(KBUILD_EXTMOD),)
FULL_XDX_PATH := $(srctree)/$(src)
#else
#FULL_XDX_PATH := $(src)
#endif

DISPLAY_FOLDER_NAME := display
AUDIO_FOLDER_NAME := audio
VPU_FOLDER_NAME := vpu
GFX_FOLDER_NAME := gfx
DMA_FOLDER_NAME := dma
ACPU_FOLDER_NAME := acpu
PM_FOLDER_NAME := pm
FULL_XDX_DISPLAY_PATH := $(FULL_XDX_PATH)/$(DISPLAY_FOLDER_NAME)
FULL_XDX_AUDIO_PATH := $(FULL_XDX_PATH)/$(AUDIO_FOLDER_NAME)
FULL_XDX_VPU_PATH := $(FULL_XDX_PATH)/$(VPU_FOLDER_NAME)
FULL_XDX_GFX_PATH := $(FULL_XDX_PATH)/$(GFX_FOLDER_NAME)
FULL_XDX_DMA_PATH := $(FULL_XDX_PATH)/$(DMA_FOLDER_NAME)
FULL_XDX_ACPU_PATH := $(FULL_XDX_PATH)/$(ACPU_FOLDER_NAME)
FULL_XDX_PM_PATH := $(FULL_XDX_PATH)/$(PM_FOLDER_NAME)
FULL_XDX_PLATEFORM_PATH := $(FULL_XDX_PATH)/plateform
FULL_XDX_VKMS_PATH := $(FULL_XDX_PATH)/vkms
FULL_XDX_MMU_PATH := $(FULL_XDX_PATH)/mmu

# PVR GFX Config
XDX_WA_ARM_POWEROFF := 1
SUPPORT_SYNC_HOST_DDR := 0
SUPPORT_CCB_HOST_DDR := 0
SUPPORT_NATIVE_FENCE_SYNC := 1
SUPPORT_DMA_FENCE := 1
SUPPORT_DMA_TRANSFER := 1
SUPPORT_ACPU_TRANSFER_KCCB := 1
SUPPORT_PANGU_ACPU := 1
SUPPORT_AUDIO := 0
SUPPORT_VPU := 1
SUPPORT_BUFFER_SYNC := 1
SUPPORT_RGX := 1
PVR_ARCH := volcanic
SUPPORT_PDVFS :=
SUPPORT_WORKLOAD_ESTIMATION :=
SUPPORT_DI_BRG_IMPL := 1
PVR_HANDLE_BACKEND := idr
SUPPORT_PHYSMEM_TEST := 1
CONFIG_FW_MAIN_ON_SYSMEM := 0
CONFIG_FORCE_WC_TO_UNCACHED := 0

ccflags-y := -I$(FULL_XDX_PATH) \
	-I$(FULL_XDX_PATH)/include \
	-I$(FULL_XDX_DISPLAY_PATH) \
	-I$(FULL_XDX_AUDIO_PATH) \
	-I$(FULL_XDX_PLATEFORM_PATH) \
	-I$(FULL_XDX_GFX_PATH) \
	-I$(FULL_XDX_VPU_PATH) \
	-I$(FULL_XDX_DMA_PATH) \
	-I$(FULL_XDX_VKMS_PATH) \
	-I$(FULL_XDX_DMA_PATH)/hal \
	-I$(FULL_XDX_MMU_PATH) \
	-I$(FULL_XDX_ACPU_PATH)

#ifndef RGX_BVNC
#$(error "XDXGPU -- RGX_BVNC is not defined")
#endif

#ifndef RGX_BNC
#$(error "XDXGPU -- RGX_BNC is not defined")
#endif

ccflags-y += -DXDXGPU
ccflags-y += -DRGX_BVNC_CORE_KM_HEADER=\"cores/rgxcore_km_$(RGX_BVNC).h\"
ccflags-y += -DRGX_BNC_CONFIG_KM_HEADER=\"configs/rgxconfig_km_$(RGX_BNC).h\"
#$(info "XDXGPU -- RGX_BVNC: $(RGX_BVNC), RGX_BNC: $(RGX_BNC)")

ifeq ($(NO_HARDWARE), 1)
ccflags-y += -DNO_HARDWARE
endif

ifeq ($(PDUMP), 1)
ccflags-y += -DPDUMP_PARAM_INIT_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_PARAM_MAIN_STREAM_SIZE=0x1000000
ccflags-y += -DPDUMP_PARAM_DEINIT_STREAM_SIZE=0x10000
ccflags-y += -DPDUMP_PARAM_BLOCK_STREAM_SIZE=0
ccflags-y += -DPDUMP_SCRIPT_INIT_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_SCRIPT_MAIN_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_SCRIPT_DEINIT_STREAM_SIZE=0x10000
ccflags-y += -DPDUMP_SCRIPT_BLOCK_STREAM_SIZE=0x800000
ccflags-y += -DPDUMP_SPLIT_64BIT_REGISTER_ACCESS
endif

ifeq ($(CONFIG_FW_MAIN_ON_SYSMEM), 1)
ccflags-y += -DCONFIG_FW_MAIN_ON_SYSMEM
endif

ifeq ($(CONFIG_FORCE_WC_TO_UNCACHED), 1)
ccflags-y += -DCONFIG_FORCE_WC_TO_UNCACHED
endif

ifeq ($(SUPPORT_NATIVE_FENCE_SYNC), 1)
ccflags-y += -DSUPPORT_NATIVE_FENCE_SYNC
endif

ifeq ($(SUPPORT_DMA_TRANSFER), 1)
ccflags-y += -DSUPPORT_DMA_TRANSFER
endif

ifeq ($(SUPPORT_SYNC_HOST_DDR), 1)
ccflags-y += -DSUPPORT_SYNC_HOST_DDR
endif

ifeq ($(SUPPORT_CCB_HOST_DDR), 1)
ccflags-y += -DSUPPORT_CCB_HOST_DDR
endif

ifeq ($(SUPPORT_PANGU_ACPU), 1)
ccflags-y += -DSUPPORT_PANGU_ACPU
endif

ifeq ($(SUPPORT_ACPU_TRANSFER_KCCB), 1)
ccflags-y += -DSUPPORT_ACPU_TRANSFER_KCCB
endif

ifeq ($(SUPPORT_AUDIO), 1)
ccflags-y += -DSUPPORT_AUDIO
endif

ifeq ($(XDX_WA_ARM_POWEROFF), 1)
ccflags-y += -DXDX_WA_ARM_POWEROFF
endif

ifeq ($(SUPPORT_VPU), 1)
ccflags-y += -DSUPPORT_VPU
endif

ifeq ($(SUPPORT_DI_BRG_IMPL), 1)
ccflags-y += -DSUPPORT_DI_BRG_IMPL
endif

ifeq ($(PVR_BUILD_TYPE), debug)
ccflags-y += -g -DDEBUG -DPVR_BUILD_TYPE=\"debug\"
else
ccflags-y += -DPVR_BUILD_TYPE=\"release\"
endif

ifeq ($(SUPPORT_PHYSMEM_TEST), 1)
ccflags-y += -DSUPPORT_PHYSMEM_TEST
endif

xdxgpu-y :=

# add gfx driver
include $(FULL_XDX_GFX_PATH)/Makefile
xdxgpu-y += $(XDX_GFX_FILES)

# add bridge
include $(FULL_XDX_PLATEFORM_PATH)/Makefile
xdxgpu-y += $(XDX_BR_FILES)

# add dc driver
include $(FULL_XDX_DISPLAY_PATH)/Makefile
xdxgpu-y += $(XDX_DC_FILES)

include $(FULL_XDX_VKMS_PATH)/Makefile
xdxgpu-y += $(XDX_VKMS_FILES)

# add vpu driver
ifeq ($(SUPPORT_VPU), 1)
include $(FULL_XDX_VPU_PATH)/Makefile
xdxgpu-y += $(XDX_VPU_FILES)
endif

# add audio driver
ifeq ($(SUPPORT_AUDIO), 1)
include $(FULL_XDX_AUDIO_PATH)/Makefile
xdxgpu-y += $(XDX_AUDIO_FILES)
endif

# add dma driver
ifeq ($(SUPPORT_DMA_TRANSFER), 1)
include $(FULL_XDX_DMA_PATH)/Makefile
xdxgpu-y += $(XDX_DMA_FILES)
endif

# add acpu driver
ifeq ($(SUPPORT_PANGU_ACPU), 1)
include $(FULL_XDX_ACPU_PATH)/Makefile
xdxgpu-y += $(XDX_ACPU_FILES)
endif

# add pm function
# pm features heavily depend on acpu/cmcu
ifeq ($(SUPPORT_PANGU_ACPU), 1)
include $(FULL_XDX_PM_PATH)/Makefile
xdxgpu-y += $(XDX_PM_FILES)
endif

include $(FULL_XDX_MMU_PATH)/Makefile
xdxgpu-y += $(XDX_MMU_FILES)

# add pci driver
xdxgpu-y += xdx_drv.o

# add drm driver
xdxgpu-y += xdx_device.o xdx_fdinfo.o xdx_gem.o xdx_debugfs.o xdx_irq.o xdx_sysfs.o \
	    pangu.o xdx_vmm.o

ifeq ($(SUPPORT_VPU), 1)
xdxgpu-y += xdx_vpu.o
endif

ifeq ($(SUPPORT_PANGU_ACPU), 1)
xdxgpu-y += xdx_acpu.o
endif
ifeq ($(SUPPORT_AUDIO), 1)
xdxgpu-y += xdx_audio.o
endif

#$(warning $(xdxgpu-y))
obj-$(CONFIG_GPU_XDX_XDXGPU) += xdxgpu.o
