1*4882a593Smuzhiyun# 2*4882a593Smuzhiyun# (C) COPYRIGHT 2012-2016, 2017 ARM Limited. All rights reserved. 3*4882a593Smuzhiyun# 4*4882a593Smuzhiyun# This program is free software and is provided to you under the terms of the 5*4882a593Smuzhiyun# GNU General Public License version 2 as published by the Free Software 6*4882a593Smuzhiyun# Foundation, and any use by you of this program is subject to the terms 7*4882a593Smuzhiyun# of such GNU licence. 8*4882a593Smuzhiyun# 9*4882a593Smuzhiyun# A copy of the licence is included with the program, and can also be obtained 10*4882a593Smuzhiyun# from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 11*4882a593Smuzhiyun# Boston, MA 02110-1301, USA. 12*4882a593Smuzhiyun# 13*4882a593Smuzhiyun# 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunKBUILD_CFLAGS += -include rename.h 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun# Driver version string which is returned to userspace via an ioctl 18*4882a593SmuzhiyunMALI_RELEASE_NAME ?= "r18p0-01rel0" 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun# Paths required for build 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun# make $(src) as absolute path if it isn't already, by prefixing $(srctree) 23*4882a593Smuzhiyunsrc:=$(if $(patsubst /%,,$(src)),$(srctree)/$(src),$(src)) 24*4882a593SmuzhiyunKBASE_PATH = $(src) 25*4882a593SmuzhiyunKBASE_PLATFORM_PATH = $(KBASE_PATH)/platform_dummy 26*4882a593SmuzhiyunUMP_PATH = $(src)/../../../base 27*4882a593Smuzhiyun 28*4882a593Smuzhiyunifeq ($(CONFIG_MALI_ERROR_INJECTION),y) 29*4882a593SmuzhiyunMALI_ERROR_INJECT_ON = 1 30*4882a593Smuzhiyunendif 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun# Set up defaults if not defined by build system 33*4882a593SmuzhiyunMALI_CUSTOMER_RELEASE ?= 1 34*4882a593SmuzhiyunMALI_UNIT_TEST ?= 0 35*4882a593SmuzhiyunMALI_KERNEL_TEST_API ?= 0 36*4882a593SmuzhiyunMALI_ERROR_INJECT_ON ?= 0 37*4882a593SmuzhiyunMALI_MOCK_TEST ?= 0 38*4882a593SmuzhiyunMALI_COVERAGE ?= 0 39*4882a593SmuzhiyunMALI_INSTRUMENTATION_LEVEL ?= 0 40*4882a593Smuzhiyun# This workaround is for what seems to be a compiler bug we observed in 41*4882a593Smuzhiyun# GCC 4.7 on AOSP 4.3. The bug caused an intermittent failure compiling 42*4882a593Smuzhiyun# the "_Pragma" syntax, where an error message is returned: 43*4882a593Smuzhiyun# 44*4882a593Smuzhiyun# "internal compiler error: unspellable token PRAGMA" 45*4882a593Smuzhiyun# 46*4882a593Smuzhiyun# This regression has thus far only been seen on the GCC 4.7 compiler bundled 47*4882a593Smuzhiyun# with AOSP 4.3.0. So this makefile, intended for in-tree kernel builds 48*4882a593Smuzhiyun# which are not known to be used with AOSP, is hardcoded to disable the 49*4882a593Smuzhiyun# workaround, i.e. set the define to 0. 50*4882a593SmuzhiyunMALI_GCC_WORKAROUND_MIDCOM_4598 ?= 0 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun# Set up our defines, which will be passed to gcc 53*4882a593SmuzhiyunDEFINES = \ 54*4882a593Smuzhiyun -DMALI_CUSTOMER_RELEASE=$(MALI_CUSTOMER_RELEASE) \ 55*4882a593Smuzhiyun -DMALI_KERNEL_TEST_API=$(MALI_KERNEL_TEST_API) \ 56*4882a593Smuzhiyun -DMALI_UNIT_TEST=$(MALI_UNIT_TEST) \ 57*4882a593Smuzhiyun -DMALI_ERROR_INJECT_ON=$(MALI_ERROR_INJECT_ON) \ 58*4882a593Smuzhiyun -DMALI_MOCK_TEST=$(MALI_MOCK_TEST) \ 59*4882a593Smuzhiyun -DMALI_COVERAGE=$(MALI_COVERAGE) \ 60*4882a593Smuzhiyun -DMALI_INSTRUMENTATION_LEVEL=$(MALI_INSTRUMENTATION_LEVEL) \ 61*4882a593Smuzhiyun -DMALI_RELEASE_NAME=\"$(MALI_RELEASE_NAME)\" \ 62*4882a593Smuzhiyun -DMALI_GCC_WORKAROUND_MIDCOM_4598=$(MALI_GCC_WORKAROUND_MIDCOM_4598) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyunifeq ($(KBUILD_EXTMOD),) 65*4882a593Smuzhiyun# in-tree 66*4882a593SmuzhiyunDEFINES +=-DMALI_KBASE_THIRDPARTY_PATH=../../$(src)/platform/$(CONFIG_MALI_PLATFORM_THIRDPARTY_NAME) 67*4882a593Smuzhiyunelse 68*4882a593Smuzhiyun# out-of-tree 69*4882a593SmuzhiyunDEFINES +=-DMALI_KBASE_THIRDPARTY_PATH=$(src)/platform/$(CONFIG_MALI_PLATFORM_THIRDPARTY_NAME) 70*4882a593Smuzhiyunendif 71*4882a593Smuzhiyun 72*4882a593SmuzhiyunDEFINES += -I$(srctree)/drivers/staging/android 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun# Use our defines when compiling 75*4882a593Smuzhiyunccflags-y += $(DEFINES) -I$(KBASE_PATH) -I$(KBASE_PLATFORM_PATH) -I$(UMP_PATH) -I$(srctree)/include/linux 76*4882a593Smuzhiyunsubdir-ccflags-y += $(DEFINES) -I$(KBASE_PATH) -I$(KBASE_PLATFORM_PATH) -I$(OSK_PATH) -I$(UMP_PATH) -I$(srctree)/include/linux 77*4882a593Smuzhiyun 78*4882a593SmuzhiyunSRC := \ 79*4882a593Smuzhiyun mali_kbase_device.c \ 80*4882a593Smuzhiyun mali_kbase_cache_policy.c \ 81*4882a593Smuzhiyun mali_kbase_mem.c \ 82*4882a593Smuzhiyun mali_kbase_mmu.c \ 83*4882a593Smuzhiyun mali_kbase_ctx_sched.c \ 84*4882a593Smuzhiyun mali_kbase_jd.c \ 85*4882a593Smuzhiyun mali_kbase_jd_debugfs.c \ 86*4882a593Smuzhiyun mali_kbase_jm.c \ 87*4882a593Smuzhiyun mali_kbase_gpuprops.c \ 88*4882a593Smuzhiyun mali_kbase_js.c \ 89*4882a593Smuzhiyun mali_kbase_js_ctx_attr.c \ 90*4882a593Smuzhiyun mali_kbase_event.c \ 91*4882a593Smuzhiyun mali_kbase_context.c \ 92*4882a593Smuzhiyun mali_kbase_pm.c \ 93*4882a593Smuzhiyun mali_kbase_config.c \ 94*4882a593Smuzhiyun mali_kbase_vinstr.c \ 95*4882a593Smuzhiyun mali_kbase_softjobs.c \ 96*4882a593Smuzhiyun mali_kbase_10969_workaround.c \ 97*4882a593Smuzhiyun mali_kbase_hw.c \ 98*4882a593Smuzhiyun mali_kbase_utility.c \ 99*4882a593Smuzhiyun mali_kbase_debug.c \ 100*4882a593Smuzhiyun mali_kbase_trace_timeline.c \ 101*4882a593Smuzhiyun mali_kbase_gpu_memory_debugfs.c \ 102*4882a593Smuzhiyun mali_kbase_mem_linux.c \ 103*4882a593Smuzhiyun mali_kbase_core_linux.c \ 104*4882a593Smuzhiyun mali_kbase_replay.c \ 105*4882a593Smuzhiyun mali_kbase_mem_profile_debugfs.c \ 106*4882a593Smuzhiyun mali_kbase_mmu_mode_lpae.c \ 107*4882a593Smuzhiyun mali_kbase_mmu_mode_aarch64.c \ 108*4882a593Smuzhiyun mali_kbase_disjoint_events.c \ 109*4882a593Smuzhiyun mali_kbase_gator_api.c \ 110*4882a593Smuzhiyun mali_kbase_debug_mem_view.c \ 111*4882a593Smuzhiyun mali_kbase_debug_job_fault.c \ 112*4882a593Smuzhiyun mali_kbase_smc.c \ 113*4882a593Smuzhiyun mali_kbase_mem_pool.c \ 114*4882a593Smuzhiyun mali_kbase_mem_pool_debugfs.c \ 115*4882a593Smuzhiyun mali_kbase_tlstream.c \ 116*4882a593Smuzhiyun mali_kbase_strings.c \ 117*4882a593Smuzhiyun mali_kbase_as_fault_debugfs.c \ 118*4882a593Smuzhiyun mali_kbase_regs_history_debugfs.c 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun 123*4882a593Smuzhiyunifeq ($(MALI_UNIT_TEST),1) 124*4882a593Smuzhiyun SRC += mali_kbase_tlstream_test.c 125*4882a593Smuzhiyunendif 126*4882a593Smuzhiyun 127*4882a593Smuzhiyunifeq ($(MALI_CUSTOMER_RELEASE),0) 128*4882a593Smuzhiyun SRC += mali_kbase_regs_dump_debugfs.c 129*4882a593Smuzhiyunendif 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun 132*4882a593Smuzhiyunccflags-y += -I$(KBASE_PATH) 133*4882a593Smuzhiyun 134*4882a593Smuzhiyunifeq ($(CONFIG_MALI_PLATFORM_FAKE),y) 135*4882a593Smuzhiyun SRC += mali_kbase_platform_fake.c 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun ifeq ($(CONFIG_MALI_PLATFORM_VEXPRESS),y) 138*4882a593Smuzhiyun SRC += platform/vexpress/mali_kbase_config_vexpress.c \ 139*4882a593Smuzhiyun platform/vexpress/mali_kbase_cpu_vexpress.c 140*4882a593Smuzhiyun ccflags-y += -I$(src)/platform/vexpress 141*4882a593Smuzhiyun endif 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun ifeq ($(CONFIG_MALI_PLATFORM_RTSM_VE),y) 144*4882a593Smuzhiyun SRC += platform/rtsm_ve/mali_kbase_config_vexpress.c 145*4882a593Smuzhiyun ccflags-y += -I$(src)/platform/rtsm_ve 146*4882a593Smuzhiyun endif 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun ifeq ($(CONFIG_MALI_PLATFORM_VEXPRESS_1XV7_A57),y) 149*4882a593Smuzhiyun SRC += platform/vexpress_1xv7_a57/mali_kbase_config_vexpress.c 150*4882a593Smuzhiyun ccflags-y += -I$(src)/platform/vexpress_1xv7_a57 151*4882a593Smuzhiyun endif 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun ifeq ($(CONFIG_MALI_PLATFORM_VEXPRESS_6XVIRTEX7_10MHZ),y) 154*4882a593Smuzhiyun SRC += platform/vexpress_6xvirtex7_10mhz/mali_kbase_config_vexpress.c \ 155*4882a593Smuzhiyun platform/vexpress_6xvirtex7_10mhz/mali_kbase_cpu_vexpress.c 156*4882a593Smuzhiyun ccflags-y += -I$(src)/platform/vexpress_6xvirtex7_10mhz 157*4882a593Smuzhiyun endif 158*4882a593Smuzhiyunendif # CONFIG_MALI_PLATFORM_FAKE=y 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun# Tell the Linux build system from which .o file to create the kernel module 161*4882a593Smuzhiyunobj-$(CONFIG_MALI_MIDGARD) += midgard_kbase.o 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun# Tell the Linux build system to enable building of our .c files 164*4882a593Smuzhiyunmidgard_kbase-y := $(SRC:.c=.o) 165*4882a593Smuzhiyun 166*4882a593Smuzhiyunifeq ($(CONFIG_MALI_PLATFORM_THIRDPARTY),y) 167*4882a593Smuzhiyun # Kconfig passes in the name with quotes for in-tree builds - remove them. 168*4882a593Smuzhiyun platform_name := $(shell echo $(CONFIG_MALI_PLATFORM_THIRDPARTY_NAME)) 169*4882a593Smuzhiyun MALI_PLATFORM_THIRDPARTY_DIR := platform/$(platform_name) 170*4882a593Smuzhiyun ccflags-y += -I$(src)/$(MALI_PLATFORM_THIRDPARTY_DIR) 171*4882a593Smuzhiyun include $(src)/$(MALI_PLATFORM_THIRDPARTY_DIR)/Kbuild 172*4882a593Smuzhiyunendif 173*4882a593Smuzhiyun 174*4882a593Smuzhiyunifeq ($(CONFIG_MALI_DEVFREQ),y) 175*4882a593Smuzhiyun ifeq ($(CONFIG_DEVFREQ_THERMAL),y) 176*4882a593Smuzhiyun include $(src)/ipa/Kbuild 177*4882a593Smuzhiyun endif 178*4882a593Smuzhiyunendif 179*4882a593Smuzhiyun 180*4882a593Smuzhiyunmidgard_kbase-$(CONFIG_MALI_DMA_FENCE) += \ 181*4882a593Smuzhiyun mali_kbase_dma_fence.o \ 182*4882a593Smuzhiyun mali_kbase_fence.o 183*4882a593Smuzhiyunmidgard_kbase-$(CONFIG_SYNC) += \ 184*4882a593Smuzhiyun mali_kbase_sync_android.o \ 185*4882a593Smuzhiyun mali_kbase_sync_common.o 186*4882a593Smuzhiyunmidgard_kbase-$(CONFIG_SYNC_FILE) += \ 187*4882a593Smuzhiyun mali_kbase_sync_file.o \ 188*4882a593Smuzhiyun mali_kbase_sync_common.o \ 189*4882a593Smuzhiyun mali_kbase_fence.o 190*4882a593Smuzhiyun 191*4882a593SmuzhiyunMALI_BACKEND_PATH ?= backend 192*4882a593SmuzhiyunCONFIG_MALI_BACKEND ?= gpu 193*4882a593SmuzhiyunCONFIG_MALI_BACKEND_REAL ?= $(CONFIG_MALI_BACKEND) 194*4882a593Smuzhiyun 195*4882a593Smuzhiyunifeq ($(MALI_MOCK_TEST),1) 196*4882a593Smuzhiyunifeq ($(CONFIG_MALI_BACKEND_REAL),gpu) 197*4882a593Smuzhiyun# Test functionality 198*4882a593Smuzhiyunmidgard_kbase-y += tests/internal/src/mock/mali_kbase_pm_driver_mock.o 199*4882a593Smuzhiyunendif 200*4882a593Smuzhiyunendif 201*4882a593Smuzhiyun 202*4882a593Smuzhiyuninclude $(src)/$(MALI_BACKEND_PATH)/$(CONFIG_MALI_BACKEND_REAL)/Kbuild 203*4882a593Smuzhiyunmidgard_kbase-y += $(BACKEND:.c=.o) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun 206*4882a593Smuzhiyunccflags-y += -I$(src)/$(MALI_BACKEND_PATH)/$(CONFIG_MALI_BACKEND_REAL) 207*4882a593Smuzhiyunsubdir-ccflags-y += -I$(src)/$(MALI_BACKEND_PATH)/$(CONFIG_MALI_BACKEND_REAL) 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun# Default to devicetree platform if neither a fake platform or a thirdparty 210*4882a593Smuzhiyun# platform is configured. 211*4882a593Smuzhiyunifeq ($(CONFIG_MALI_PLATFORM_THIRDPARTY)$(CONFIG_MALI_PLATFORM_FAKE),) 212*4882a593SmuzhiyunCONFIG_MALI_PLATFORM_DEVICETREE := y 213*4882a593Smuzhiyunendif 214*4882a593Smuzhiyun 215*4882a593Smuzhiyunmidgard_kbase-$(CONFIG_MALI_PLATFORM_DEVICETREE) += \ 216*4882a593Smuzhiyun platform/devicetree/mali_kbase_runtime_pm.o \ 217*4882a593Smuzhiyun platform/devicetree/mali_kbase_config_devicetree.o 218*4882a593Smuzhiyunccflags-$(CONFIG_MALI_PLATFORM_DEVICETREE) += -I$(src)/platform/devicetree 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun# For kutf and mali_kutf_irq_latency_test 221*4882a593Smuzhiyunobj-$(CONFIG_MALI_KUTF) += tests/ 222