hikey960: enable Android Virtualization am: 8c352a4c5c am: 28d58e37f5

Original change: https://android-review.googlesource.com/c/device/linaro/hikey/+/2373270

Change-Id: I06e387c2ddf2b532942b57e0136946e1752b4a90
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/hikey960.mk b/hikey960.mk
index 7a35a22..1888158 100644
--- a/hikey960.mk
+++ b/hikey960.mk
@@ -18,6 +18,29 @@
   endif
 endif
 
+# only kernels after 5.10 support KVM
+ifndef HIKEY960_ENABLE_AVF
+  ifeq ($(TARGET_KERNEL_USE), mainline)
+    HIKEY960_ENABLE_AVF := true
+  else
+    KERNEL_MAJ := $(word 1, $(subst ., ,$(TARGET_KERNEL_USE)))
+    KERNEL_MIN := $(word 2, $(subst ., ,$(TARGET_KERNEL_USE)))
+    KER_GT_5 := $(shell [ $(KERNEL_MAJ) -gt 5 ] && echo true)
+    KER_GE_5_10 := $(shell [ $(KERNEL_MIN) -ge 10 ] && echo true)
+
+    ifeq ($(KER_GT_5), true)
+      HIKEY960_ENABLE_AVF := true
+    else
+      ifeq ($(KERNEL_MAJ), 5)
+        # for kernel after 5.10
+        ifeq ($(KER_GE_5_10),true)
+          HIKEY960_ENABLE_AVF := true
+        endif
+      endif # end for 5.10
+    endif # end for 5.X
+  endif # end for mainline
+endif # end for HIKEY960_ENABLE_AVF
+
 include $(LOCAL_PATH)/vendor-package-ver.mk
 
 # Inherit the common device configuration
diff --git a/hikey960/BoardConfig.mk b/hikey960/BoardConfig.mk
index f7deb4c..71a6273 100644
--- a/hikey960/BoardConfig.mk
+++ b/hikey960/BoardConfig.mk
@@ -12,6 +12,18 @@
 BOARD_KERNEL_CMDLINE += androidboot.boot_devices=soc/ff3b0000.ufs
 BOARD_KERNEL_CMDLINE += loglevel=15 androidboot.slot_suffix=_a
 
+ifeq ($(HIKEY960_ENABLE_AVF), true)
+# The GKI kernel set protected mode by default via gki_defconfig,
+# but hikey960 does not support the protected kvm mode, here overwriting
+# to make it possible to play with AVF in the non-protected mode.
+BOARD_KERNEL_CMDLINE += kvm-arm.mode=nvhe
+# hypervisor.version would be better to be the same as CROSVM_PLATFORM_VERSION in
+# packages/modules/Virtualization/virtualizationmanager/src/crosvm.rs
+BOARD_KERNEL_CMDLINE += androidboot.hypervisor.version=1.0.0
+BOARD_KERNEL_CMDLINE += androidboot.hypervisor.vm.supported=1
+BOARD_KERNEL_CMDLINE += androidboot.hypervisor.protected_vm.supported=0
+endif
+
 ifeq ($(TARGET_BUILTIN_EDID), true)
 BOARD_KERNEL_CMDLINE += drm_kms_helper.edid_firmware=edid/1920x1080.bin
 endif
diff --git a/hikey960/device-hikey960.mk b/hikey960/device-hikey960.mk
index d311865..7d17880 100644
--- a/hikey960/device-hikey960.mk
+++ b/hikey960/device-hikey960.mk
@@ -14,6 +14,13 @@
 # limitations under the License.
 #
 
+ifeq ($(HIKEY960_ENABLE_AVF), true)
+# Based on the instructions in the following link:
+#   https://android.googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/master/microdroid/README.md
+# Tested with the android13-5.10 and android-mainline kernels.
+$(call inherit-product, packages/modules/Virtualization/apex/product_packages.mk)
+endif
+
 # Enable Virtual A/B
 AB_OTA_UPDATER := true
 AB_OTA_PARTITIONS += \