pvmfw: Handle dependent nodes in VM DTBO
Test: atest libpvmfw.device_assignment.test
Bug: 317830919
Change-Id: I961519f5d89c043e3085853dda61046e0ad90848
diff --git a/pvmfw/Android.bp b/pvmfw/Android.bp
index cce0e73..4ee02c1 100644
--- a/pvmfw/Android.bp
+++ b/pvmfw/Android.bp
@@ -74,16 +74,19 @@
srcs: ["src/device_assignment.rs"],
defaults: ["libpvmfw.test.defaults"],
rustlibs: [
+ "libdts",
"libhyp",
"liblibfdt",
"liblog_rust",
"libpvmfw_fdt_template",
+ "libzerocopy",
],
data: [
":test_pvmfw_devices_vm_dtbo",
":test_pvmfw_devices_vm_dtbo_without_symbols",
":test_pvmfw_devices_vm_dtbo_with_duplicated_iommus",
":test_pvmfw_devices_overlapping_pvmfw",
+ ":test_pvmfw_devices_vm_dtbo_with_dependencies",
":test_pvmfw_devices_with_rng",
":test_pvmfw_devices_with_multiple_devices_iommus",
":test_pvmfw_devices_with_iommu_sharing",
@@ -92,7 +95,13 @@
":test_pvmfw_devices_without_iommus",
":test_pvmfw_devices_with_duplicated_pviommus",
":test_pvmfw_devices_with_multiple_reg_iommus",
+ ":test_pvmfw_devices_with_dependency",
+ ":test_pvmfw_devices_with_dependency_loop",
+ ":test_pvmfw_devices_with_multiple_dependencies",
+ ":test_pvmfw_devices_expected_dt",
],
+ data_bins: ["dtc_static"],
+ compile_multilib: "first",
// To use libpvmfw_fdt_template for testing
enabled: false,
target: {
@@ -136,6 +145,14 @@
out: ["test_pvmfw_devices_vm_dtbo_with_duplicated_iommus.dtbo"],
}
+genrule {
+ name: "test_pvmfw_devices_vm_dtbo_with_dependencies",
+ tools: ["dtc"],
+ cmd: "$(location dtc) -@ -I dts -O dtb $(in) -o $(out)",
+ srcs: ["testdata/test_pvmfw_devices_vm_dtbo_with_dependencies.dts"],
+ out: ["test_pvmfw_devices_vm_dtbo_with_dependencies.dtbo"],
+}
+
genrule_defaults {
name: "test_device_assignment_dts_to_dtb",
defaults: ["dts_to_dtb"],
@@ -205,6 +222,53 @@
out: ["test_pvmfw_devices_with_multiple_reg_iommus.dtb"],
}
+genrule {
+ name: "test_pvmfw_devices_with_dependency",
+ defaults: ["test_device_assignment_dts_to_dtb"],
+ srcs: ["testdata/test_pvmfw_devices_with_dependency.dts"],
+ out: ["test_pvmfw_devices_with_dependency.dtb"],
+}
+
+genrule {
+ name: "test_pvmfw_devices_with_multiple_dependencies",
+ defaults: ["test_device_assignment_dts_to_dtb"],
+ srcs: ["testdata/test_pvmfw_devices_with_multiple_dependencies.dts"],
+ out: ["test_pvmfw_devices_with_multiple_dependencies.dtb"],
+}
+
+genrule {
+ name: "test_pvmfw_devices_with_dependency_loop",
+ defaults: ["test_device_assignment_dts_to_dtb"],
+ srcs: ["testdata/test_pvmfw_devices_with_dependency_loop.dts"],
+ out: ["test_pvmfw_devices_with_dependency_loop.dtb"],
+}
+
+// We can't use genrule because preprocessed platform DT is built with cc_object.
+// cc_genrule doesn't support default, so we'll build all expected DTs in
+// a single build rule.
+cc_genrule {
+ name: "test_pvmfw_devices_expected_dt",
+ srcs: [
+ ":pvmfw_platform.dts.preprocessed",
+ "testdata/expected_dt_with_dependency.dts",
+ "testdata/expected_dt_with_multiple_dependencies.dts",
+ "testdata/expected_dt_with_dependency_loop.dts",
+ ],
+ out: [
+ "expected_dt_with_dependency.dtb",
+ "expected_dt_with_multiple_dependencies.dtb",
+ "expected_dt_with_dependency_loop.dtb",
+ ],
+ tools: ["dtc"],
+ cmd: "FILES=($(in));" +
+ "cp $${FILES[0]} $(genDir)/platform_preprocessed.dts;" +
+ "for DTS in $${FILES[@]:1}; do" +
+ " DTB=$$(basename -s .dts $${DTS}).dtb;" +
+ " $(location dtc) -@ -i $(genDir) -I dts -O dtb $${DTS} -o $(genDir)/$${DTB};" +
+ "done",
+ visibility: ["//visibility:private"],
+}
+
cc_binary {
name: "pvmfw",
defaults: ["vmbase_elf_defaults"],