diff --git a/neuralnetworks/V1_2/benchmark/java/Android.bp b/neuralnetworks/V1_2/benchmark/java/Android.bp
new file mode 100644
index 0000000..0f3ce9f
--- /dev/null
+++ b/neuralnetworks/V1_2/benchmark/java/Android.bp
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 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.
+
+package {
+    // See: http://go/android-license-faq
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_test {
+    name: "VtsHalNeuralnetworksV1_2BenchmarkTestCases",
+    defaults: ["cts_defaults"],
+    compile_multilib: "both",
+    test_suites: [
+        "vts",
+        "vts10",
+    ],
+    static_libs: [
+        "androidx.test.rules",
+        "android.hidl.manager-V1.2-java",
+        "compatibility-device-util-axt",
+        "ctstestrunner-axt",
+        "junit",
+        "NeuralNetworksApiBenchmark_Lib",
+        // Assets settings: test/mlts/models/assets
+        "test_mlts_models_assets",
+    ],
+    jni_libs: ["libnnbenchmark_jni"],
+    enforce_uses_libs: false,
+    dex_preopt: {
+        enabled: false,
+    },
+    srcs: ["src/**/*.java"],
+    sdk_version: "system_current",
+}
diff --git a/neuralnetworks/V1_2/benchmark/java/Android.mk b/neuralnetworks/V1_2/benchmark/java/Android.mk
deleted file mode 100644
index 082779a..0000000
--- a/neuralnetworks/V1_2/benchmark/java/Android.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2019 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := VtsHalNeuralnetworksV1_2BenchmarkTestCases
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-
-# Don't include this package in any target
-LOCAL_MODULE_TAGS := optional
-# And when built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-# Include both the 32 and 64 bit versions
-LOCAL_MULTILIB := both
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := vts vts10
-
-LOCAL_STATIC_JAVA_LIBRARIES := androidx.test.rules android.hidl.manager-V1.2-java \
-    compatibility-device-util-axt ctstestrunner-axt junit NeuralNetworksApiBenchmark_Lib
-LOCAL_JNI_SHARED_LIBRARIES := libnnbenchmark_jni
-
-# Disable dexpreopt and <uses-library> check for test.
-LOCAL_ENFORCE_USES_LIBRARIES := false
-LOCAL_DEX_PREOPT := false
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_ASSET_DIR := test/mlts/models/assets
-
-LOCAL_SDK_VERSION := system_current
-
-include $(BUILD_CTS_PACKAGE)
diff --git a/neuralnetworks/V1_3/benchmark/java/Android.bp b/neuralnetworks/V1_3/benchmark/java/Android.bp
new file mode 100644
index 0000000..bbc8200
--- /dev/null
+++ b/neuralnetworks/V1_3/benchmark/java/Android.bp
@@ -0,0 +1,47 @@
+// Copyright (C) 2019 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.
+
+package {
+    // See: http://go/android-license-faq
+    default_applicable_licenses: [
+        "Android-Apache-2.0",
+    ],
+}
+
+android_test {
+    name: "VtsHalNeuralnetworksV1_3BenchmarkTestCases",
+    defaults: ["cts_defaults"],
+    compile_multilib: "both",
+    test_suites: [
+        "vts",
+        "vts10",
+    ],
+    static_libs: [
+        "androidx.test.rules",
+        "android.hidl.manager-V1.2-java",
+        "compatibility-device-util-axt",
+        "ctstestrunner-axt",
+        "junit",
+        "NeuralNetworksApiBenchmark_Lib",
+        // Assets settings: test/mlts/models/assets
+        "test_mlts_models_assets",
+    ],
+    jni_libs: ["libnnbenchmark_jni"],
+    enforce_uses_libs: false,
+    dex_preopt: {
+        enabled: false,
+    },
+    srcs: ["src/**/*.java"],
+    sdk_version: "system_current",
+}
diff --git a/neuralnetworks/V1_3/benchmark/java/Android.mk b/neuralnetworks/V1_3/benchmark/java/Android.mk
deleted file mode 100644
index 6850fa0..0000000
--- a/neuralnetworks/V1_3/benchmark/java/Android.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2019 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_PACKAGE_NAME := VtsHalNeuralnetworksV1_3BenchmarkTestCases
-LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
-LOCAL_LICENSE_CONDITIONS := notice
-
-# Don't include this package in any target
-LOCAL_MODULE_TAGS := optional
-# And when built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-# Include both the 32 and 64 bit versions
-LOCAL_MULTILIB := both
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := vts vts10
-
-LOCAL_STATIC_JAVA_LIBRARIES := androidx.test.rules android.hidl.manager-V1.2-java \
-    compatibility-device-util-axt ctstestrunner-axt junit NeuralNetworksApiBenchmark_Lib
-LOCAL_JNI_SHARED_LIBRARIES := libnnbenchmark_jni
-
-# Disable dexpreopt and <uses-library> check for test.
-LOCAL_ENFORCE_USES_LIBRARIES := false
-LOCAL_DEX_PREOPT := false
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_ASSET_DIR := test/mlts/models/assets
-
-LOCAL_SDK_VERSION := system_current
-
-include $(BUILD_CTS_PACKAGE)
diff --git a/treble/vintf/DeviceManifestTest.cpp b/treble/vintf/DeviceManifestTest.cpp
index f0dd8bb..7d398a6 100644
--- a/treble/vintf/DeviceManifestTest.cpp
+++ b/treble/vintf/DeviceManifestTest.cpp
@@ -41,6 +41,7 @@
 
 // Tests that Shipping FCM Version in the device manifest is at least the
 // minimum Shipping FCM Version as required by Board API level.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, ShippingFcmVersion) {
   uint64_t board_api_level = GetBoardApiLevel();
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
@@ -50,6 +51,7 @@
 
 // Tests that deprecated HALs are not in the manifest, unless a higher,
 // non-deprecated minor version is in the manifest.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, NoDeprecatedHalsOnManifest) {
   string error;
   EXPECT_EQ(android::vintf::NO_DEPRECATED_HALS,
@@ -61,21 +63,52 @@
 // Tests that devices launching R support mapper@4.0.  Go devices are exempt
 // from this requirement, so we use this test to enforce instead of the
 // compatibility matrix.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, GraphicsMapperHalVersionCompatibility) {
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
   bool is_go_device =
       android::base::GetBoolProperty("ro.config.low_ram", false);
   if (shipping_fcm_version == Level::UNSPECIFIED ||
-      shipping_fcm_version < Level::R || is_go_device) {
+      shipping_fcm_version < Level::R ||
+      (is_go_device && shipping_fcm_version < Level::V)) {
     GTEST_SKIP() << "Graphics mapper 4 is only required on launching R devices";
   }
 
-  ASSERT_TRUE(vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.mapper", {4, 0}, "IMapper", "default"));
-  ASSERT_FALSE(vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.mapper", {2, 0}, "IMapper", "default"));
-  ASSERT_FALSE(vendor_manifest_->hasHidlInstance(
-      "android.hardware.graphics.mapper", {2, 1}, "IMapper", "default"));
+  if (shipping_fcm_version >= Level::V) {
+    bool exists = false;
+    ASSERT_TRUE(vendor_manifest_->forEachInstance(
+        [&](const ManifestHal::InstanceType& instance) -> bool {
+          if (instance.package() == "mapper" &&
+              instance.format() == HalFormat::NATIVE &&
+              instance.version().majorVer == 5 &&
+              instance.version().minorVer == 0)
+            exists = true;
+          return true;
+        }));
+    ASSERT_TRUE(exists)
+        << "Graphics mapper 5 is required on launching V+ devices";
+  } else {
+    bool exists = false;
+    bool ret = vendor_manifest_->forEachInstance(
+        [&](const ManifestHal::InstanceType& instance) -> bool {
+          if (instance.package() == "mapper" &&
+              instance.format() == HalFormat::NATIVE &&
+              instance.version().majorVer == 5 &&
+              instance.version().minorVer == 0)
+            exists = true;
+          return true;
+        });
+    // If native implementation doesn't exist, then the HIDL implementation must
+    // exist on this device.
+    if (!ret || !exists) {
+      ASSERT_TRUE(vendor_manifest_->hasHidlInstance(
+          "android.hardware.graphics.mapper", {4, 0}, "IMapper", "default"));
+      ASSERT_FALSE(vendor_manifest_->hasHidlInstance(
+          "android.hardware.graphics.mapper", {2, 0}, "IMapper", "default"));
+      ASSERT_FALSE(vendor_manifest_->hasHidlInstance(
+          "android.hardware.graphics.mapper", {2, 1}, "IMapper", "default"));
+    }
+  }
 }
 
 // Devices with Shipping FCM version 3~6 must have either the HIDL or the
@@ -84,6 +117,7 @@
 //
 // There's no need to enforce minimum HAL versions because
 // NoDeprecatedHalsOnManifest already checks it.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, HealthHal) {
   bool has_hidl = vendor_manifest_->hasHidlInstance(
       "android.hardware.health", {2, 0}, "IHealth", "default");
@@ -97,6 +131,7 @@
 // AIDL power HAL.
 //
 // The specific versions are handled by the framework compatibility matrix.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, PowerHal) {
   Level fcm_version = VintfObject::GetDeviceHalManifest()->level();
   if (fcm_version == Level::UNSPECIFIED || fcm_version < Level::R) {
@@ -113,6 +148,7 @@
 //
 // There's no need to enforce minimum HAL versions because
 // NoDeprecatedHalsOnManifest already checks it.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, GatekeeperHal) {
   bool has_hidl = vendor_manifest_->hasHidlInstance(
       "android.hardware.gatekeeper", {1, 0}, "IGatekeeper", "default");
@@ -128,6 +164,7 @@
 //
 // There's no need to enforce minimum HAL versions because
 // NoDeprecatedHalsOnManifest already checks it.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, ComposerHal) {
   bool has_hidl = vendor_manifest_->hasHidlInstance(
       "android.hardware.graphics.composer", {2, 1}, "IComposer", "default");
@@ -143,6 +180,7 @@
 //
 // There's no need to enforce minimum HAL versions because
 // NoDeprecatedHalsOnManifest already checks it.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, GrallocHal) {
   bool has_hidl = false;
   for (size_t hidl_major = 2; hidl_major <= 4; hidl_major++)
@@ -151,7 +189,7 @@
                                {hidl_major, 0}, "IAllocator", "default");
 
   bool has_aidl = vendor_manifest_->hasAidlInstance(
-      "android.hardware.graphics.allocator", 1, "IAllocator", "default");
+      "android.hardware.graphics.allocator", "IAllocator", "default");
 
   ASSERT_TRUE(has_hidl || has_aidl)
       << "Device must have either graphics allocator HIDL HAL or AIDL HAL";
@@ -160,6 +198,7 @@
 // Devices after Android T must have either the HIDL or the
 // AIDL thermal HAL. Because compatibility matrices cannot express OR condition
 // between <hal>'s, add a test here.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, ThermalHal) {
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
   if (shipping_fcm_version == Level::UNSPECIFIED ||
@@ -179,12 +218,14 @@
 // Go devices are exempt
 // from this requirement, so we use this test to enforce instead of the
 // compatibility matrix.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, GrallocHalVersionCompatibility) {
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
   bool is_go_device =
       android::base::GetBoolProperty("ro.config.low_ram", false);
   if (shipping_fcm_version == Level::UNSPECIFIED ||
-      shipping_fcm_version < Level::T || is_go_device) {
+      shipping_fcm_version < Level::T ||
+      (is_go_device && shipping_fcm_version < Level::V)) {
     GTEST_SKIP() << "Gralloc 4.0/AIDL is only required on launching T devices";
   }
 
@@ -203,6 +244,7 @@
 // Devices must have either the HIDL or the AIDL audio HAL, both "core" and
 // "effect" parts must be of the same type. Checked by a test because
 // compatibility matrices cannot express these conditions.
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceManifestTest, AudioHal) {
   Level shipping_fcm_version = VintfObject::GetDeviceHalManifest()->level();
   if (shipping_fcm_version == Level::UNSPECIFIED ||
diff --git a/treble/vintf/DeviceMatrixTest.cpp b/treble/vintf/DeviceMatrixTest.cpp
index 1e2ddc4..1f9b712 100644
--- a/treble/vintf/DeviceMatrixTest.cpp
+++ b/treble/vintf/DeviceMatrixTest.cpp
@@ -37,6 +37,7 @@
       << "Failed to get device compatibility matrix." << endl;
 }
 
+// @VsrTest = VSR-3.2-014
 TEST_F(DeviceMatrixTest, VndkVersion) {
   if (GetBoardApiLevel() < __ANDROID_API_P__) {
     GTEST_SKIP()
diff --git a/treble/vintf/SingleManifestTest.cpp b/treble/vintf/SingleManifestTest.cpp
index 2cc21b9..c6e8fbd 100644
--- a/treble/vintf/SingleManifestTest.cpp
+++ b/treble/vintf/SingleManifestTest.cpp
@@ -154,6 +154,9 @@
   return nullptr;
 }
 
+GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(SingleHwbinderHalTest);
+GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(SingleHidlTest);
+
 // Given vendor.foo.bar@x.y::IFoo/default, also look up all declared passthrough
 // HAL implementations on the device that implements this interface.
 sp<IBase> SingleHidlTest::GetPassthroughService(const FqInstance &fq_instance) {
@@ -252,6 +255,7 @@
 
 // Tests that no HAL outside of the allowed set is specified as passthrough in
 // VINTF.
+// @VsrTest = VSR-3.2-014
 TEST_P(SingleHidlTest, HalIsBinderized) {
   const auto &[hidl_instance, manifest] = GetParam();
   const FQName &fq_name = hidl_instance.fq_name();
@@ -315,6 +319,7 @@
 // Tests that all HALs specified in the VINTF are available through service
 // manager.
 // This tests (HAL in manifest) => (HAL is served)
+// @VsrTest = VSR-3.2-014
 TEST_P(SingleHidlTest, HalIsServed) {
   // Verifies that HAL is available through service manager and is served from a
   // specific set of partitions.
@@ -382,6 +387,7 @@
 
 // Tests that all HALs which are served are specified in the VINTF
 // This tests (HAL is served) => (HAL in manifest)
+// @VsrTest = VSR-3.2-014
 TEST_P(SingleHwbinderHalTest, ServedHwbinderHalIsInManifest) {
   const auto &[fq_instance_name, manifest] = GetParam();
 
@@ -437,6 +443,7 @@
 
 // Tests that all HALs which are served are specified in the VINTF
 // This tests (HAL is served) => (HAL in manifest) for passthrough HALs
+// @VsrTest = VSR-3.2-014
 TEST_P(SingleHidlTest, ServedPassthroughHalIsInManifest) {
   const auto &[hidl_instance, manifest] = GetParam();
   const FQName &fq_name = hidl_instance.fq_name();
@@ -480,6 +487,7 @@
 }
 
 // Tests that HAL interfaces are officially released.
+// @VsrTest = VSR-3.2-014
 TEST_P(SingleHidlTest, InterfaceIsReleased) {
   const auto &[hidl_instance, manifest] = GetParam();
 
@@ -633,19 +641,10 @@
   return false;
 }
 
-static bool IsAndroidTvVertical() {
-  return DeviceSupportsFeature("android.software.leanback");
-}
-
-// For Android TV devices that have ThreadNetwork HAL backported, exempt the AIDL
-// frozen requirement.
-static bool IsHalPackageFreezeExempt(const string& package) {
-  return IsAndroidTvVertical() && package == "android.hardware.threadnetwork";
-}
-
 // An AIDL HAL with VINTF stability can only be registered if it is in the
 // manifest. However, we still must manually check that every declared HAL is
 // actually present on the device.
+// @VsrTest = VSR-3.2-014
 TEST_P(SingleAidlTest, HalIsServed) {
   const auto &[aidl_instance, manifest] = GetParam();
   const string &package = aidl_instance.package();
@@ -691,11 +690,7 @@
 
   if (is_aosp) {
     if (!found_hash) {
-      if (IsHalPackageFreezeExempt(package)) {
-        std::cout << "Warning: Interface " << name << " has an unrecognized hash: '"
-                  << hash << "' but the package '" << package
-                  << "' has been exempted from the test.";
-      } else if (is_release || (reliable_version && is_existing)) {
+      if (is_release || (reliable_version && is_existing)) {
         ADD_FAILURE() << "Interface " << name << " has an unrecognized hash: '"
                       << hash << "'. The following hashes are known:\n"
                       << base::Join(hashes, '\n')
@@ -710,7 +705,7 @@
     //
     // we only require that these are frozen, but we cannot check them for
     // accuracy
-    if (hash.empty()) {
+    if (hash.empty() || hash == "notfrozen") {
       if (is_release) {
         ADD_FAILURE() << "Interface " << name
                       << " is used but not frozen (cannot find hash for it).";
diff --git a/treble/vintf/VtsNoHidl.cpp b/treble/vintf/VtsNoHidl.cpp
index 9341642..d684977 100644
--- a/treble/vintf/VtsNoHidl.cpp
+++ b/treble/vintf/VtsNoHidl.cpp
@@ -20,11 +20,16 @@
 #include <gmock/gmock.h>
 #include <hidl/ServiceManagement.h>
 
+#define __ANDROID_VENDOR_API_24Q2__ 202404
+
 namespace android {
 namespace vintf {
 namespace testing {
 
-static constexpr int kMaxNumberOfHidlHals = 100;
+static constexpr int kMaxNumberOfHidlHalsU = 100;
+// TODO(b/232439834) This number will be 0 for Android V. There is still some
+// cleanup left to do.
+static constexpr int kMaxNumberOfHidlHalsV = 4;
 
 // Tests that the device is not registering any HIDL interfaces.
 // HIDL is being deprecated. Only applicable to devices launching with Android
@@ -33,15 +38,27 @@
 
 // @VsrTest = VSR-3.2-001.001|VSR-3.2-001.002
 TEST_F(VintfNoHidlTest, NoHidl) {
-  if (std::stoi(android::base::GetProperty("ro.vendor.api_level", "0")) <
-      __ANDROID_API_U__) {
+  int apiLevel = android::base::GetIntProperty("ro.vendor.api_level", 0);
+  if (apiLevel < __ANDROID_API_U__) {
     GTEST_SKIP() << "Not applicable to this device";
     return;
   }
+  int maxNumberOfHidlHals = 0;
+  if (apiLevel == __ANDROID_API_U__) {
+    maxNumberOfHidlHals = kMaxNumberOfHidlHalsU;
+  } else if (apiLevel == __ANDROID_VENDOR_API_24Q2__) {
+    maxNumberOfHidlHals = kMaxNumberOfHidlHalsV;
+  } else {
+    // TODO(232439834) We can remove this once kMaxNumberOfHidlHalsV is 0.
+    GTEST_FAIL() << "Unexpected Android vendor API level (" << apiLevel
+                 << "). Must be either " << __ANDROID_API_U__ << " or "
+                 << __ANDROID_VENDOR_API_24Q2__;
+  }
   sp<hidl::manager::V1_0::IServiceManager> sm =
       ::android::hardware::defaultServiceManager();
   ASSERT_NE(sm, nullptr);
-  hardware::Return<void> ret = sm->list([](const auto& interfaces) {
+  hardware::Return<void> ret = sm->list([&maxNumberOfHidlHals](
+                                            const auto& interfaces) {
     std::set<std::string> packages;
     for (const auto& interface : interfaces) {
       std::vector<std::string> splitInterface =
@@ -52,7 +69,7 @@
       // are implementing
       packages.insert(splitInterface[0]);
     }
-    if (packages.size() > kMaxNumberOfHidlHals) {
+    if (packages.size() > maxNumberOfHidlHals) {
       ADD_FAILURE() << "There are " << packages.size()
                     << " HIDL interfaces served on the device. "
                     << "These must be converted to AIDL as part of HIDL's "
diff --git a/treble/vintf/libvts_vintf_test_common/common.cpp b/treble/vintf/libvts_vintf_test_common/common.cpp
index 86caec5..3c3fd19 100644
--- a/treble/vintf/libvts_vintf_test_common/common.cpp
+++ b/treble/vintf/libvts_vintf_test_common/common.cpp
@@ -15,6 +15,7 @@
  */
 
 #include <libvts_vintf_test_common/common.h>
+#include <vintf/parse_string.h>
 
 namespace android::vintf::testing {
 
@@ -47,7 +48,9 @@
         {31, Level::S},
         {32, Level::S},
         {33, Level::T},
-        {34, Level::U},  // subject to change, placeholder value
+        {34, Level::U},
+        // Starting from 2024Q2, vendor api level has YYYYMM format.
+        {202404, Level::V},
     }};
 
 android::base::Result<Level> GetFcmVersionFromApiLevel(uint64_t api_level) {
diff --git a/treble/vintf/utils.cpp b/treble/vintf/utils.cpp
index 2548759..c749539 100644
--- a/treble/vintf/utils.cpp
+++ b/treble/vintf/utils.cpp
@@ -167,26 +167,6 @@
   return Partition::UNKNOWN;
 }
 
-bool DeviceSupportsFeature(const char *feature) {
-  bool device_supports_feature = false;
-  FILE *p = popen("pm list features", "re");
-  if (!p) {
-    return false;
-  }
-
-  char *line = NULL;
-  size_t len = 0;
-  while (getline(&line, &len, p) > 0) {
-    if (strstr(line, feature)) {
-      device_supports_feature = true;
-      break;
-    }
-  }
-  pclose(p);
-
-  return device_supports_feature;
-}
-
 }  // namespace testing
 }  // namespace vintf
 }  // namespace android
diff --git a/treble/vintf/utils.h b/treble/vintf/utils.h
index fad1b87..cd89e16 100644
--- a/treble/vintf/utils.h
+++ b/treble/vintf/utils.h
@@ -174,9 +174,6 @@
 // Returns SYSTEM for FRAMEWORK, VENDOR for DEVICE.
 Partition PartitionOfType(SchemaType type);
 
-// Returns true iff the device has the specified feature.
-bool DeviceSupportsFeature(const char* feature);
-
 }  // namespace testing
 }  // namespace vintf
 
diff --git a/usb/OWNERS b/usb/OWNERS
new file mode 100644
index 0000000..21aef71
--- /dev/null
+++ b/usb/OWNERS
@@ -0,0 +1,10 @@
+# Bug component: 175220
+
+aprasath@google.com
+kumarashishg@google.com
+sarup@google.com
+anothermark@google.com
+badhri@google.com
+albertccwang@google.com
+rickyniu@google.com
+khoahong@google.com
