#
# Copyright (C) 2016 The Android Open-Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

include build/make/target/board/BoardConfigMainlineCommon.mk
include build/make/target/board/BoardConfigPixelCommon.mk

TARGET_BOARD_PLATFORM := lito
USES_DEVICE_GOOGLE_REDBULL := true

TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-a
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 :=
TARGET_CPU_VARIANT := generic
TARGET_CPU_VARIANT_RUNTIME := cortex-a76

ifeq (,$(filter %_64,$(TARGET_PRODUCT)))
TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv8-a
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := generic
TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a76
endif

BUILD_BROKEN_DUP_RULES := true
BOARD_KERNEL_CMDLINE += console=ttyMSM0,115200n8 androidboot.console=ttyMSM0 printk.devkmsg=on
BOARD_KERNEL_CMDLINE += msm_rtb.filter=0x237
BOARD_KERNEL_CMDLINE += ehci-hcd.park=3
BOARD_KERNEL_CMDLINE += service_locator.enable=1
BOARD_KERNEL_CMDLINE += androidboot.memcg=1 cgroup.memory=nokmem
BOARD_KERNEL_CMDLINE += lpm_levels.sleep_disabled=1 # STOPSHIP b/113233473
BOARD_KERNEL_CMDLINE += usbcore.autosuspend=7
BOARD_KERNEL_CMDLINE += androidboot.usbcontroller=a600000.dwc3 swiotlb=2048
BOARD_KERNEL_CMDLINE += androidboot.boot_devices=soc/1d84000.ufshc
BOARD_KERNEL_CMDLINE += loop.max_part=7
BOARD_KERNEL_CMDLINE += loop.hw_queue_depth=31
BOARD_KERNEL_CMDLINE += snd_soc_cs35l41_i2c.async_probe=1
BOARD_KERNEL_CMDLINE += i2c_qcom_geni.async_probe=1
BOARD_KERNEL_CMDLINE += st21nfc.async_probe=1
BOARD_KERNEL_CMDLINE += spmi_pmic_arb.async_probe=1
BOARD_KERNEL_CMDLINE += ufs_qcom.async_probe=1
BOARD_KERNEL_CMDLINE += spi-geni-qcom.async_probe=1
BOARD_KERNEL_CMDLINE += cnss_utils.async_probe=1
BOARD_KERNEL_CMDLINE += cgroup_disable=pressure

BOARD_KERNEL_BASE        := 0x00000000
BOARD_KERNEL_PAGESIZE    := 4096

BOARD_INCLUDE_DTB_IN_BOOTIMG := true
BOARD_BOOT_HEADER_VERSION := 3
BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOT_HEADER_VERSION)

BOARD_DTBOIMG_PARTITION_SIZE := 16777216

TARGET_NO_KERNEL := false
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true
ifneq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),false)
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
endif

BOARD_USES_METADATA_PARTITION := true

AB_OTA_UPDATER := true

ifneq ($(PRODUCT_BUILD_SYSTEM_IMAGE),false)
AB_OTA_PARTITIONS += system
AB_OTA_PARTITIONS += vbmeta_system
endif
ifneq ($(PRODUCT_BUILD_PRODUCT_IMAGE),false)
AB_OTA_PARTITIONS += product
endif
ifneq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),false)
AB_OTA_PARTITIONS += system_ext
endif
ifneq ($(PRODUCT_BUILD_BOOT_IMAGE),false)
AB_OTA_PARTITIONS += boot
endif
ifneq ($(PRODUCT_BUILD_VENDOR_BOOT_IMAGE),false)
AB_OTA_PARTITIONS += vendor_boot
AB_OTA_PARTITIONS += dtbo
endif
ifneq ($(PRODUCT_BUILD_VBMETA_IMAGE),false)
AB_OTA_PARTITIONS += vbmeta
endif

# Partitions (listed in the file) to be wiped under recovery.
TARGET_RECOVERY_WIPE := device/google/redbull/recovery.wipe
TARGET_RECOVERY_FSTAB := device/google/redbull/fstab.hardware
TARGET_RECOVERY_PIXEL_FORMAT := RGBX_8888
TARGET_RECOVERY_UI_LIB := \
    librecovery_ui_pixel \
    libfstab

# Enable chain partition for system.
BOARD_AVB_VBMETA_SYSTEM := system system_ext product
BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048
BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1

# Enable chained vbmeta for boot images
BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2

# product.img
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := ext4

# userdata.img
TARGET_USERIMAGES_USE_F2FS := true
BOARD_USERDATAIMAGE_PARTITION_SIZE := 10737418240
BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE := f2fs

# persist.img
BOARD_PERSISTIMAGE_PARTITION_SIZE := 33554432
BOARD_PERSISTIMAGE_FILE_SYSTEM_TYPE := ext4

# boot.img
BOARD_BOOTIMAGE_PARTITION_SIZE := 0x06000000

# vendor_boot.img
BOARD_VENDOR_BOOTIMAGE_PARTITION_SIZE := 0x06000000

# Allow LZ4 compression
BOARD_RAMDISK_USE_LZ4 := true

# Specify BOOT_KERNEL_MODULES
#
# modules for first stage in vendor_boot.img, remainder goes to vendor.img.
# This list is a superset of all the possible modules required, and is
# filtered and ordered as per the supplied kernel's modules.load file.
# Any modules that do not exist will be silently dropped.  This is required
# because some kernel configurations may have extra debug or test modules,
# make sure any required to be loaded during first stage init are listed.
BOOT_KERNEL_MODULES := \
	msm_ipc_logging.ko \
	qtee_shm_bridge.ko \
	qcom_hwspinlock.ko \
	smem.ko \
	msm_minidump.ko \
	watchdog_v2.ko \
	early_random.ko \
	qcom-pdc.ko \
	cmd-db.ko \
	qcom_rpmh.ko \
	phy-qcom-ufs.ko \
	phy-qcom-ufs-qrbtc-sdm845.ko \
	phy-qcom-ufs-qmp-v4.ko \
	phy-qcom-ufs-qmp-v4-lito.ko \
	phy-qcom-ufs-qmp-v3-660.ko \
	phy-qcom-ufs-qmp-v3.ko \
	pinctrl-msm.ko \
	pinctrl-lito.ko \
	qcom-spmi-wled.ko \
	msm_bus.ko \
	clk-qcom.ko \
	clk-aop-qmp.ko \
	clk-rpmh.ko \
	gcc-lito.ko \
	clk-spmi-pmic-div.ko \
	qrtr.ko \
	qmi_helpers.ko \
	secure_buffer.ko \
	heap_mem_ext_v01.ko \
	subsystem_notif.ko \
	ramdump.ko \
	msm_memshare.ko \
	msm_bus_dbg_rpmh.ko \
	msm_bus_rpmh.ko \
	rpmh-regulator.ko \
	qcom-geni-se.ko \
	msm_geni_serial.ko \
	msm_dma_iommu_mapping.ko \
	arm-smmu-debug.ko \
	iommu-logger.ko \
	arm-smmu.ko \
	ufshcd-core.ko \
	ufshcd-pltfrm.ko \
	ufs_qcom.ko \
	spi-geni-qcom.ko \
	i2c-qcom-geni.ko \
	ion-alloc.ko \
	msm_rtb.ko \
	pinctrl-spmi-gpio.ko \
	pinctrl-spmi-mpp.ko \
	pwm-qti-lpg.ko \
	debugcc-lito.ko \
	dispcc-lito.ko \
	gpucc-lito.ko \
	npucc-lito.ko \
	videocc-lito.ko \
	virt-dma.ko \
	gpi.ko \
	msm_scm.ko \
	mdt_loader.ko \
	smem_state.ko \
	smp2p.ko \
	qcom_ipcc.ko \
	llcc-slice.ko \
	llcc-lito.ko \
	core_hang_detect.ko \
	gladiator_hang_detect.ko \
	minidump_log.ko \
	memory_dump_v2.ko \
	dcc_v2.ko \
	service-locator.ko \
	service-notifier.ko \
	subsystem-restart.ko \
	peripheral-loader.ko \
	subsys-pil-tz.ko \
	cdsp-loader.ko \
	qseecom.ko \
	smcinvoke.ko \
	microdump_collector.ko \
	eud.ko \
	qcom_socinfo.ko \
	fsa4480-i2c.ko \
	rpmsg_core.ko \
	qcom_glink_native.ko \
	qcom_glink_smem.ko \
	qcom_glink_spss.ko \
	glink_probe.ko \
	glink_pkt.ko \
	smp2p_sleepstate.ko \
	event_timer.ko \
	lpm-stats.ko \
	msm_pm.ko \
	rpmh_master_stat.ko \
	system_pm.ko \
	rpm_stats.ko \
	ddr_stats.ko \
	cdsprm.ko \
	msm_icnss.ko \
	modemsmem.ko \
	qpnp-amoled-regulator.ko \
	refgen.ko \
	slg51000-regulator.ko \
	tps-regulator.ko \
	msm_rng.ko \
	adsprpc_compat.ko \
	adsprpc.ko \
	fastcvpd.ko \
	rdbg.ko \
	qpnp-power-on.ko \
	msm-poweroff.ko \
	usb_f_diag.ko \
	diagchar.ko \
	governor_bw_vbif.ko \
	governor_gpubw_mon.ko \
	governor_msm_adreno_tz.ko \
	msm_adreno.ko \
	regmap-spmi.ko \
	google-bms.ko \
	at24.ko \
	hdcp_qseecom.ko \
	msm_hdcp.ko \
	citadel-spi.ko \
	qcom-i2c-pmic.ko \
	qcom-spmi-pmic.ko \
	st21nfc.ko \
	st54j_se.ko \
	qpnp-revid.ko \
	devfreq_qcom_fw.ko \
	adc_tm.ko \
	msm_sps.ko \
	qce50.ko \
	qcedev-module.ko \
	qcrypto.ko \
	spmi-pmic-arb.ko \
	cnss_utils.ko \
	cnss_prealloc.ko \
	cnss_nl.ko \
	msm_sharedmem.ko \
	phy-generic.ko \
	phy-msm-ssusb-qmp.ko \
	phy-msm-snps-hs.ko \
	xhci-plat-hcd.ko \
	rndis.ko \
	usb_f_cdev.ko \
	usb_f_ccid.ko \
	dwc3.ko \
	usb-dwc3-msm.ko \
	usb_f_qdss.ko \
	msm_gsi.ko \
	ipa3.ko \
	usb_f_gsi.ko \
	usb_f_mtp.ko \
	usb_f_ptp.ko \
	roles.ko \
	tcpm.ko \
	logbuffer.ko \
	pmic-voter.ko \
	qpnp_pdphy.ko \
	dwc3-haps.ko \
	dwc3-of-simple.ko \
	dwc3-qcom.ko \
	touchscreen_tbn.ko \
	vd6281_module.ko \
	fpc1020_platform_tee.ko \
	rtc-pm8xxx.ko \
	i2c-qcom-geni.ko \
	devfreq_devbw.ko \
	msm_npu.ko \
	qpnp-battery.ko \
	of_batterydata.ko \
	qpnp-smb5-charger.ko \
	qpnp-qgauge.ko \
	sm7250_bms.ko \
	google_charger.ko \
	google-battery.ko \
	overheat_mitigation.ko \
	p9221_charger.ko \
	qti_qmi_sensor.ko \
	bcl_pmic5.ko \
	bcl_soc.ko \
	qmi_cdev.ko \
	lmh_dbg.ko \
	msm_lmh_dcvs.ko \
	regulator_aop_cdev.ko \
	cpu_isolate.ko \
	lmh_cpu_vdd_cdev.ko \
	qcom-spmi-temp-alarm.ko \
	thermal-tsens.ko \
	slimbus.ko \
	bluetooth_power.ko \
	qcom_edac.ko \
	qcom-cpufreq-hw.ko \
	leds-qpnp-flash-common.ko \
	leds-qpnp-flash-v2.ko \
	of_slimbus.ko \
	tz_log.ko \
	google_wlan_mac.ko \
	msm_ext_display.ko \
	msm_qmp.ko \
	governor_bw_hwmon.ko \
	bimc-bwmon.ko \
	governor_memlat.ko \
	arm-memlat-mon.ko \
	governor_cdsp_l3.ko \
	qcom-vadc-common.ko \
	qcom-spmi-adc5.ko \
	pac193x.ko \
	qcom_llcc_pmu.ko \
	nvmem_qfprom.ko \
	qcom-spmi-sdam.ko \
	slim_msm_ngd.ko \
	rpmsg_char.ko \
	rmnet.ko \
	usb-audio-qmi.ko \
	msm-vidc.ko \
	ebtables.ko \
	ebtable_broute.ko \
	sctp.ko \
	sctp_diag.ko \
	qrtr-smd.ko \
	msm_drm.ko \
	dm-user.ko \

# system_ext.img
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := ext4

BOARD_FLASH_BLOCK_SIZE := 131072

BOARD_ROOT_EXTRA_SYMLINKS := /vendor/lib/dsp:/dsp
BOARD_ROOT_EXTRA_SYMLINKS += /mnt/vendor/persist:/persist

include device/google/redbull-sepolicy/redbull-sepolicy.mk

QCOM_BOARD_PLATFORMS += lito
QC_PROP_ROOT := vendor/qcom/sm7250/proprietary
QC_PROP_PATH := $(QC_PROP_ROOT)
BOARD_HAVE_BLUETOOTH_QCOM := true
BOARD_HAVE_QCOM_FM := false
TARGET_USE_QTI_BT_SAR := true
TARGET_USE_QTI_BT_CHANNEL_AVOIDANCE := true
BOARD_USES_COMMON_BLUETOOTH_HAL := true

# Camera
TARGET_USES_AOSP := true
BOARD_QTI_CAMERA_32BIT_ONLY := false
CAMERA_DAEMON_NOT_PRESENT := true
TARGET_USES_ION := true

# GPS
TARGET_NO_RPC := true
TARGET_USES_HARDWARE_QCOM_GPS := false
BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE := default
BOARD_VENDOR_QCOM_LOC_PDK_FEATURE_SET := true

# RenderScript
OVERRIDE_RS_DRIVER := libRSDriver_adreno.so

# Sensors
TARGET_SUPPORT_DIRECT_REPORT := true

# CHRE
CHRE_DAEMON_ENABLED := true
CHRE_DAEMON_LPMA_ENABLED := true
CHRE_DAEMON_LOAD_INTO_SENSORSPD := true

# wlan
BOARD_WLAN_DEVICE := qcwcn
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
BOARD_HOSTAPD_DRIVER := NL80211
WIFI_DRIVER_DEFAULT := qca_cld3
WPA_SUPPLICANT_VERSION := VER_0_8_X
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE)
WIFI_HIDL_FEATURE_AWARE := true
WIFI_HIDL_FEATURE_DUAL_INTERFACE:= true
WIFI_FEATURE_WIFI_EXT_HAL := true
WIFI_FEATURE_IMU_DETECTION := true
WIFI_HIDL_UNIFIED_SUPPLICANT_SERVICE_RC_ENTRY := true
BOARD_HOSTAPD_CONFIG_80211W_MFP_OPTIONAL := true
# Add WIFI_FEATURE_IMU_DETECTION to soong_config
$(call soong_config_set,wifi,feature_imu_detection,$(WIFI_FEATURE_IMU_DETECTION))

# Audio
BOARD_USES_ALSA_AUDIO := true
AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS := true
AUDIO_FEATURE_ENABLED_SND_MONITOR := true
AUDIO_FEATURE_ENABLED_USB_TUNNEL := true
BOARD_SUPPORTS_SOUND_TRIGGER := true
AUDIO_FEATURE_FLICKER_SENSOR_INPUT := true
#SOUND_TRIGGER_FEATURE_LPMA_ENABLED := true
AUDIO_FEATURE_ENABLED_MAXX_AUDIO := true
AUDIO_FEATURE_ENABLED_AUDIO_THERMAL_LISTENER := true
AUDIO_FEATURE_ENABLED_24BITS_CAMCORDER := true
AUDIO_FEATURE_ENABLED_AUDIO_ZOOM := true
AUDIO_FEATURE_ENABLED_INSTANCE_ID := true
#Cirrus cs35l41 speaker amp
AUDIO_FEATURE_ENABLED_CS35L41 := true
AUDIO_FEATURE_ENABLED_CS35L41_CALIBRATION_TOOL := true
AUDIO_FEATURE_ENABLED_SVA_MULTI_STAGE := true
AUDIO_FEATURE_QSSI_COMPLIANCE := true

# Audio hal flag
TARGET_USES_HARDWARE_QCOM_AUDIO := true
TARGET_USES_HARDWARE_QCOM_AUDIO_PLATFORM_8974 := true
TARGET_USES_HARDWARE_QCOM_AUDIO_POSTPROC := true
TARGET_USES_HARDWARE_QCOM_AUDIO_VOLUME_LISTENER := true
TARGET_USES_HARDWARE_QCOM_AUDIO_GET_MMAP_DATA_FD := true
TARGET_USES_HARDWARE_QCOM_AUDIO_APP_TYPE_CFG := true
TARGET_USES_HARDWARE_QCOM_AUDIO_ACDB_INIT_V2_CVD := true
TARGET_USES_HARDWARE_QCOM_AUDIO_MAX_TARGET_SPECIFIC_CHANNEL_CNT := "4"
TARGET_USES_HARDWARE_QCOM_AUDIO_INCALL_MUSIC_ENABLED := true
TARGET_USES_HARDWARE_QCOM_AUDIO_MULTIPLE_HW_VARIANTS_ENABLED := true
TARGET_USES_HARDWARE_QCOM_AUDIO_INCALL_STEREO_CAPTURE_ENABLED := true

# Graphics
TARGET_USES_GRALLOC1 := true
TARGET_USES_HWC2 := true

# Display
TARGET_USES_DISPLAY_RENDER_INTENTS := true
TARGET_USES_COLOR_METADATA := true
TARGET_USES_DRM_PP := true
TARGET_HAS_WIDE_COLOR_DISPLAY := true
TARGET_HAS_HDR_DISPLAY := true

# Vendor Interface Manifest
DEVICE_MANIFEST_FILE := device/google/redbull/manifest.xml
ifeq (,$(filter %_64,$(TARGET_PRODUCT)))
# Omx is 32 bit only
DEVICE_MANIFEST_FILE += device/google/redbull/manifest_omx.xml
endif
DEVICE_MATRIX_FILE := device/google/redbull/compatibility_matrix.xml

# Use mke2fs to create ext4 images
TARGET_USES_MKE2FS := true

# dynamic partition
BOARD_SUPER_PARTITION_SIZE := 9755951104
BOARD_SUPER_PARTITION_GROUPS := google_dynamic_partitions
ifneq ($(PRODUCT_BUILD_SYSTEM_IMAGE),false)
BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST += system
endif
ifneq ($(PRODUCT_BUILD_PRODUCT_IMAGE),false)
BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST += product
endif
ifneq ($(PRODUCT_BUILD_SYSTEM_EXT_IMAGE),false)
BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST += system_ext
endif
ifneq ($(PRODUCT_BUILD_VENDOR_IMAGE),false)
BOARD_GOOGLE_DYNAMIC_PARTITIONS_PARTITION_LIST += vendor
endif

#BOARD_GOOGLE_DYNAMIC_PARTITIONS_SIZE is set to (5GB - 4MB)
BOARD_GOOGLE_DYNAMIC_PARTITIONS_SIZE := 5364514816

# Set error limit to BOARD_SUPER_PARTITON_SIZE - 500MB
BOARD_SUPER_PARTITION_ERROR_LIMIT := 9231663104

BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true

-include device/google/redbull/soong/pixel_soong_config.mk

# List of modules that should not load automatically
PRODUCT_COPY_FILES += \
    device/google/redbull/modules.blocklist:$(TARGET_COPY_OUT_VENDOR)/lib/modules/modules.blocklist \
    device/google/redbull/init.insmod.charger.cfg:$(TARGET_COPY_OUT_VENDOR)/etc/init.insmod.charger.cfg \

# TARGET_BOOTLOADER_BOARD_NAME sensitive common boilerplate
# We can't use a variable as the prefix to an include statement
# because it makes it too difficult to convert to starlark
TARGET_BOARD_NAME_DIR := device/google/$(TARGET_BOOTLOADER_BOARD_NAME)
-include device/google/$(TARGET_BOOTLOADER_BOARD_NAME)-sepolicy/$(TARGET_BOOTLOADER_BOARD_NAME)-sepolicy.mk

TARGET_BOARD_INFO_FILE := $(TARGET_BOARD_NAME_DIR)/board-info.txt
TARGET_BOARD_COMMON_PATH := $(TARGET_BOARD_NAME_DIR)/sm7250

# Common kernel file handling
ifneq (,$(filter $(TARGET_DEVICE),bramble redfin barbet))
    TARGET_KERNEL_DIR := device/google/redbull-kernel
else
    TARGET_KERNEL_DIR := $(TARGET_BOARD_NAME_DIR)-kernel
endif

# DTBO partition definitions
ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
    BOARD_PREBUILT_DTBOIMAGE := $(TARGET_KERNEL_DIR)/dtbo.img
else
    BOARD_PREBUILT_DTBOIMAGE := $(TARGET_KERNEL_DIR)/vintf/dtbo.img
endif
TARGET_FS_CONFIG_GEN := $(TARGET_BOARD_NAME_DIR)/config.fs

# Kernel modules
ifeq (,$(filter-out $(TARGET_BOOTLOADER_BOARD_NAME)_kasan, $(TARGET_PRODUCT)))
    KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/kasan
else ifeq (,$(filter-out $(TARGET_BOOTLOADER_BOARD_NAME)_kernel_debug_memory, $(TARGET_PRODUCT)))
    KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/debug_memory
else ifeq (,$(filter-out $(TARGET_BOOTLOADER_BOARD_NAME)_kernel_debug_memory_accounting, $(TARGET_PRODUCT)))
    KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/debug_memory_accounting
BOARD_KERNEL_CMDLINE += page_owner=on
else ifeq (,$(filter-out $(TARGET_BOOTLOADER_BOARD_NAME)_kernel_debug_locking, $(TARGET_PRODUCT)))
    KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/debug_locking
else ifeq (,$(filter-out $(TARGET_BOOTLOADER_BOARD_NAME)_kernel_debug_hang, $(TARGET_PRODUCT)))
    KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/debug_hang
else ifeq (,$(filter-out $(TARGET_BOOTLOADER_BOARD_NAME)_kernel_debug_api, $(TARGET_PRODUCT)))
    KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/debug_api
else
    ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
        KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)
    else
        KERNEL_MODULE_DIR := $(TARGET_KERNEL_DIR)/vintf
    endif
endif

# Copy kheaders.ko to vendor/lib/modules for VTS test
BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULE_DIR)/kheaders.ko

KERNEL_MODULES := $(wildcard $(KERNEL_MODULE_DIR)/*.ko)
KERNEL_MODULES_LOAD := $(strip $(shell cat $(firstword $(wildcard \
        $(KERNEL_MODULE_DIR)/modules.load \
        $(if $(filter userdebug eng,$(TARGET_BUILD_VARIANT)), \
            $(TARGET_KERNEL_DIR)/vintf/modules.load,) \
        $(TARGET_KERNEL_DIR)/modules.load))))

# DTB
BOARD_PREBUILT_DTBIMAGE_DIR := $(KERNEL_MODULE_DIR)

ifeq (,$(BOOT_KERNEL_MODULES))
    BOARD_VENDOR_RAMDISK_KERNEL_MODULES := $(KERNEL_MODULES)
    BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := $(KERNEL_MODULES_LOAD)
else
    #
    # BEWARE: This is a tuning exercise to get right, splitting between
    # boot essential drivers, fastboot/recovery drivers, and the remainder
    # used by Android, but not the blocklist (device specific drivers not
    # common between platforms or drivers that must not be autoloaded) which
    # are loaded later.
    #
    # BOOT_KERNEL_MODULES     - Modules loaded in first stage init.
    # RECOVERY_KERNEL_MODULES - Additional modules loaded in recovery/fastbootd
    #                           or in second stage init.
    # file: modules.blocklist - Not autoloaded. loaded on demand product or HAL.
    # Remainder               - In second stage init, but after recovery set;
    #                           minus the blocklist.
    #
    BOOT_KERNEL_MODULES_FILTER := $(foreach m,$(BOOT_KERNEL_MODULES),%/$(m))
    ifneq (,$(RECOVERY_KERNEL_MODULES))
        RECOVERY_KERNEL_MODULES_FILTER := \
            $(foreach m,$(RECOVERY_KERNEL_MODULES),%/$(m))
    endif
    BOARD_VENDOR_RAMDISK_KERNEL_MODULES += \
            $(filter $(BOOT_KERNEL_MODULES_FILTER) \
                     $(RECOVERY_KERNEL_MODULES_FILTER),$(KERNEL_MODULES))

    # ALL modules land in /vendor/lib/modules so they could be rmmod/insmod'd,
    # and modules.list actually limits us to the ones we intend to load.
    BOARD_VENDOR_KERNEL_MODULES := $(KERNEL_MODULES)
    # To limit /vendor/lib/modules to just the ones loaded, use:
    #
    #   BOARD_VENDOR_KERNEL_MODULES := $(filter-out \
    #       $(BOOT_KERNEL_MODULES_FILTER),$(KERNEL_MODULES))

    # Group set of /vendor/lib/modules loading order to recovery modules first,
    # then remainder, subtracting both recovery and boot modules.
    BOARD_VENDOR_KERNEL_MODULES_LOAD := \
            $(filter-out $(BOOT_KERNEL_MODULES_FILTER), \
            $(filter $(RECOVERY_KERNEL_MODULES_FILTER),$(KERNEL_MODULES_LOAD)))
    BOARD_VENDOR_KERNEL_MODULES_LOAD += \
            $(filter-out $(BOOT_KERNEL_MODULES_FILTER) \
                 $(RECOVERY_KERNEL_MODULES_FILTER),$(KERNEL_MODULES_LOAD))

    # NB: Load order governed by modules.load and not by $(BOOT_KERNEL_MODULES)
    BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \
            $(filter $(BOOT_KERNEL_MODULES_FILTER),$(KERNEL_MODULES_LOAD))

    ifneq (,$(RECOVERY_KERNEL_MODULES_FILTER))
        # Group set of /vendor/lib/modules loading order to boot modules first,
        # then remainder of recovery modules.
        BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD := \
            $(filter $(BOOT_KERNEL_MODULES_FILTER),$(KERNEL_MODULES_LOAD))
        BOARD_VENDOR_RAMDISK_RECOVERY_KERNEL_MODULES_LOAD += \
            $(filter-out $(BOOT_KERNEL_MODULES_FILTER), \
            $(filter $(RECOVERY_KERNEL_MODULES_FILTER),$(KERNEL_MODULES_LOAD)))
    endif
endif

BOARD_BUILD_VENDOR_RAMDISK_IMAGE := true

# Testing related defines
BOARD_PERFSETUP_SCRIPT := platform_testing/scripts/perf-setup/b5r3-setup.sh
