1# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
2#
3# (C) COPYRIGHT 2010-2021 ARM Limited. All rights reserved.
4#
5# This program is free software and is provided to you under the terms of the
6# GNU General Public License version 2 as published by the Free Software
7# Foundation, and any use by you of this program is subject to the terms
8# of such GNU license.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, you can access it online at
17# http://www.gnu.org/licenses/gpl-2.0.html.
18#
19#
20
21KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build
22KDIR ?= $(KERNEL_SRC)
23
24ifeq ($(KDIR),)
25    $(error Must specify KDIR to point to the kernel to target))
26endif
27
28#
29# Default configuration values
30#
31# Dependency resolution is done through statements as Kconfig
32# is not supported for out-of-tree builds.
33#
34
35CONFIG_MALI_BIFROST ?= m
36ifeq ($(CONFIG_MALI_BIFROST),m)
37    CONFIG_MALI_PLATFORM_NAME ?= "devicetree"
38    CONFIG_MALI_BIFROST_GATOR_SUPPORT ?= y
39    CONFIG_MALI_ARBITRATION ?= n
40    CONFIG_MALI_PARTITION_MANAGER ?= n
41
42    ifeq ($(origin CONFIG_MALI_ABITER_MODULES), undefined)
43        CONFIG_MALI_ARBITER_MODULES := $(CONFIG_MALI_ARBITRATION)
44    endif
45
46    ifeq ($(origin CONFIG_MALI_GPU_POWER_MODULES), undefined)
47        CONFIG_MALI_GPU_POWER_MODULES := $(CONFIG_MALI_ARBITRATION)
48    endif
49
50    ifneq ($(CONFIG_MALI_BIFROST_NO_MALI),y)
51        # Prevent misuse when CONFIG_MALI_BIFROST_NO_MALI
52        CONFIG_MALI_REAL_HW ?= y
53    endif
54
55    ifeq ($(CONFIG_MALI_BIFROST_DVFS),y)
56        # Prevent misuse when CONFIG_MALI_BIFROST_DVFS=y
57        CONFIG_MALI_BIFROST_DEVFREQ ?= n
58    else
59        CONFIG_MALI_BIFROST_DEVFREQ ?= y
60    endif
61
62    ifeq ($(CONFIG_MALI_DMA_BUF_MAP_ON_DEMAND), y)
63        # Prevent misuse when CONFIG_MALI_DMA_BUF_MAP_ON_DEMAND=y
64        CONFIG_MALI_DMA_BUF_LEGACY_COMPAT = n
65    endif
66
67    ifeq ($(CONFIG_XEN),y)
68        ifneq ($(CONFIG_MALI_ARBITRATION), n)
69            CONFIG_MALI_XEN ?= m
70        endif
71    endif
72
73    #
74    # Expert/Debug/Test released configurations
75    #
76    ifeq ($(CONFIG_MALI_BIFROST_EXPERT), y)
77        ifeq ($(CONFIG_MALI_BIFROST_NO_MALI), y)
78            CONFIG_MALI_REAL_HW = n
79        else
80            # Prevent misuse when CONFIG_MALI_BIFROST_NO_MALI=n
81            CONFIG_MALI_REAL_HW = y
82            CONFIG_MALI_BIFROST_ERROR_INJECT = n
83        endif
84
85        ifeq ($(CONFIG_MALI_HW_ERRATA_1485982_NOT_AFFECTED), y)
86            # Prevent misuse when CONFIG_MALI_HW_ERRATA_1485982_NOT_AFFECTED=y
87            CONFIG_MALI_HW_ERRATA_1485982_USE_CLOCK_ALTERNATIVE = n
88        endif
89
90        ifeq ($(CONFIG_MALI_BIFROST_DEBUG), y)
91            CONFIG_MALI_BIFROST_ENABLE_TRACE ?= y
92            CONFIG_MALI_BIFROST_SYSTEM_TRACE ?= y
93
94            ifeq ($(CONFIG_SYNC), y)
95                CONFIG_MALI_BIFROST_FENCE_DEBUG ?= y
96            else
97                ifeq ($(CONFIG_SYNC_FILE), y)
98                    CONFIG_MALI_BIFROST_FENCE_DEBUG ?= y
99                else
100                    CONFIG_MALI_BIFROST_FENCE_DEBUG = n
101                endif
102            endif
103        else
104            # Prevent misuse when CONFIG_MALI_BIFROST_DEBUG=n
105            CONFIG_MALI_BIFROST_ENABLE_TRACE = n
106            CONFIG_MALI_BIFROST_SYSTEM_TRACE = n
107            CONFIG_MALI_BIFROST_FENCE_DEBUG = n
108        endif
109    else
110        # Prevent misuse when CONFIG_MALI_BIFROST_EXPERT=n
111        CONFIG_MALI_CORESTACK = n
112        CONFIG_MALI_2MB_ALLOC = n
113        CONFIG_MALI_PWRSOFT_765 = n
114        CONFIG_MALI_MEMORY_FULLY_BACKED = n
115        CONFIG_MALI_JOB_DUMP = n
116        CONFIG_MALI_BIFROST_NO_MALI = n
117        CONFIG_MALI_REAL_HW = y
118        CONFIG_MALI_BIFROST_ERROR_INJECT = n
119        CONFIG_MALI_HW_ERRATA_1485982_NOT_AFFECTED = n
120        CONFIG_MALI_HW_ERRATA_1485982_USE_CLOCK_ALTERNATIVE = n
121        CONFIG_MALI_PRFCNT_SET_SELECT_VIA_DEBUG_FS = n
122        CONFIG_MALI_BIFROST_DEBUG = n
123        CONFIG_MALI_BIFROST_ENABLE_TRACE = n
124        CONFIG_MALI_BIFROST_SYSTEM_TRACE = n
125        CONFIG_MALI_BIFROST_FENCE_DEBUG = n
126    endif
127
128    ifeq ($(CONFIG_MALI_BIFROST_DEBUG), y)
129        CONFIG_MALI_KUTF ?= y
130        ifeq ($(CONFIG_MALI_KUTF), y)
131            CONFIG_MALI_KUTF_IRQ_TEST ?= y
132            CONFIG_MALI_KUTF_CLK_RATE_TRACE ?= y
133        else
134            # Prevent misuse when CONFIG_MALI_KUTF=n
135            CONFIG_MALI_KUTF_IRQ_TEST = n
136            CONFIG_MALI_KUTF_CLK_RATE_TRACE = n
137        endif
138    else
139        # Prevent misuse when CONFIG_MALI_BIFROST_DEBUG=n
140        CONFIG_MALI_KUTF = n
141        CONFIG_MALI_KUTF_IRQ_TEST = n
142        CONFIG_MALI_KUTF_CLK_RATE_TRACE = n
143    endif
144else
145    # Prevent misuse when CONFIG_MALI_BIFROST=n
146    CONFIG_MALI_ARBITRATION = n
147    CONFIG_MALI_ARBITER_MODULES = n
148    CONFIG_MALI_GPU_POWER_MODULES = n
149    CONFIG_MALI_KUTF = n
150    CONFIG_MALI_KUTF_IRQ_TEST = n
151    CONFIG_MALI_KUTF_CLK_RATE_TRACE = n
152endif
153
154# All Mali CONFIG should be listed here
155CONFIGS := \
156    CONFIG_MALI_BIFROST \
157    CONFIG_MALI_CSF_SUPPORT \
158    CONFIG_MALI_BIFROST_GATOR_SUPPORT \
159    CONFIG_MALI_BIFROST_DMA_FENCE \
160    CONFIG_MALI_ARBITER_SUPPORT \
161    CONFIG_MALI_ARBITRATION \
162    CONFIG_MALI_ARBITER_MODULES \
163    CONFIG_MALI_GPU_POWER_MODULES \
164    CONFIG_MALI_PARTITION_MANAGER \
165    CONFIG_MALI_REAL_HW \
166    CONFIG_MALI_GEM5_BUILD \
167    CONFIG_MALI_BIFROST_DEVFREQ \
168    CONFIG_MALI_BIFROST_DVFS \
169    CONFIG_MALI_DMA_BUF_MAP_ON_DEMAND \
170    CONFIG_MALI_DMA_BUF_LEGACY_COMPAT \
171    CONFIG_MALI_BIFROST_EXPERT \
172    CONFIG_MALI_CORESTACK \
173    CONFIG_MALI_2MB_ALLOC \
174    CONFIG_MALI_PWRSOFT_765 \
175    CONFIG_MALI_MEMORY_FULLY_BACKED \
176    CONFIG_MALI_JOB_DUMP \
177    CONFIG_MALI_BIFROST_NO_MALI \
178    CONFIG_MALI_BIFROST_ERROR_INJECT \
179    CONFIG_MALI_HW_ERRATA_1485982_NOT_AFFECTED \
180    CONFIG_MALI_HW_ERRATA_1485982_USE_CLOCK_ALTERNATIVE \
181    CONFIG_MALI_PRFCNT_SET_PRIMARY \
182    CONFIG_MALI_BIFROST_PRFCNT_SET_SECONDARY \
183    CONFIG_MALI_PRFCNT_SET_TERTIARY \
184    CONFIG_MALI_PRFCNT_SET_SELECT_VIA_DEBUG_FS \
185    CONFIG_MALI_BIFROST_DEBUG \
186    CONFIG_MALI_BIFROST_ENABLE_TRACE \
187    CONFIG_MALI_BIFROST_SYSTEM_TRACE \
188    CONFIG_MALI_BIFROST_FENCE_DEBUG \
189    CONFIG_MALI_KUTF \
190    CONFIG_MALI_KUTF_IRQ_TEST \
191    CONFIG_MALI_KUTF_CLK_RATE_TRACE \
192    CONFIG_MALI_XEN
193
194
195#
196# MAKE_ARGS to pass the custom CONFIGs on out-of-tree build
197#
198# Generate the list of CONFIGs and values.
199# $(value config) is the name of the CONFIG option.
200# $(value $(value config)) is its value (y, m).
201# When the CONFIG is not set to y or m, it defaults to n.
202MAKE_ARGS := $(foreach config,$(CONFIGS), \
203                    $(if $(filter y m,$(value $(value config))), \
204                        $(value config)=$(value $(value config)), \
205                        $(value config)=n))
206
207MAKE_ARGS += CONFIG_MALI_PLATFORM_NAME=$(CONFIG_MALI_PLATFORM_NAME)
208
209#
210# EXTRA_CFLAGS to define the custom CONFIGs on out-of-tree build
211#
212# Generate the list of CONFIGs defines with values from CONFIGS.
213# $(value config) is the name of the CONFIG option.
214# When set to y or m, the CONFIG gets defined to 1.
215EXTRA_CFLAGS := $(foreach config,$(CONFIGS), \
216                    $(if $(filter y m,$(value $(value config))), \
217                        -D$(value config)=1))
218
219EXTRA_CFLAGS += -DCONFIG_MALI_PLATFORM_NAME=$(CONFIG_MALI_PLATFORM_NAME)
220
221#
222# KBUILD_EXTRA_SYMBOLS to prevent warnings about unknown functions
223#
224
225all:
226	$(MAKE) -C $(KDIR) M=$(CURDIR) $(MAKE_ARGS) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" KBUILD_EXTRA_SYMBOLS="$(EXTRA_SYMBOLS)" modules
227
228modules_install:
229	$(MAKE) -C $(KDIR) M=$(CURDIR) $(MAKE_ARGS) modules_install
230
231clean:
232	$(MAKE) -C $(KDIR) M=$(CURDIR) $(MAKE_ARGS) clean
233