diff --git a/boards/chromebook-x64.gni b/boards/chromebook-x64.gni
new file mode 100644
index 0000000000000000000000000000000000000000..0419110383fd8de73f5e372c04c3d0d77fca0dfa
--- /dev/null
+++ b/boards/chromebook-x64.gni
@@ -0,0 +1,18 @@
+# Copyright 2019 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+target_cpu = "x64"
+
+board_name = "pc"
+
+fuchsia_packages = []
+
+update_kernels = [ "zbi.signed" ]
+
+use_vboot = true
+
+board_packages = [
+  # Include all drivers for now.
+  "garnet/packages/prod/drivers",
+]
diff --git a/boards/x64.gni b/boards/x64.gni
index 19ec223d194755f3d0d016a132c4b1684438bd7c..f9fc00e5b976c987ff71c122d36a1deda3177ab0 100644
--- a/boards/x64.gni
+++ b/boards/x64.gni
@@ -8,6 +8,8 @@ board_name = "pc"
 
 fuchsia_packages = []
 
+export_x64_sdk_images = true
+
 board_packages = [
   # Include all drivers for now.
   "garnet/packages/prod/drivers",
diff --git a/build/images/BUILD.gn b/build/images/BUILD.gn
index b7de3305c372da255e7d04035b7b0bb893890807..00549f6a5c3761250d15b0103327c04fcdaa5bf6 100644
--- a/build/images/BUILD.gn
+++ b/build/images/BUILD.gn
@@ -51,6 +51,9 @@ assert(
     meta_package_labels != [],
     "Missing meta_package_labels. Are you using a supported product configuration? " + "Check your args.gn file for an import of a product configuration, and consider " + "using one of the products in the `//products` or `//vendor/*/products` directories.")
 
+assert(custom_signing_script == "" || !use_vboot,
+       "custom_signing_script and use_vboot cannot be used together!")
+
 board_name_file = "$root_build_dir/board_name"
 write_file(board_name_file, "${board_name}")
 
@@ -635,7 +638,9 @@ images += [
     ]
     sdk = "fuchsia.zbi"
     updater = "zbi"
-    installer = "fuchsia.zbi"
+    if (!use_vboot) {
+      installer = "fuchsia.zbi"
+    }
     json = {
       name = "zircon-a"
       type = "zbi"
@@ -646,7 +651,7 @@ images += [
       # rebooting in the case we do not mexec a kernel.)
       bootserver_pave = [ "--boot" ]
 
-      if (custom_signing_script == "") {
+      if (custom_signing_script == "" && !use_vboot) {
         bootserver_pave += [
           "--zircona",
           # TODO(ZX-2625): `dm reboot-recovery` boots from zircon-b instead of
@@ -714,22 +719,36 @@ if (custom_signing_script != "") {
       },
     ]
   }
-}
-
-# The updater also wants the zedboot zbi as recovery.
-images += [
-  {
+} else if (use_vboot) {
+  # ChromeOS vboot images.
+  vboot("signed") {
+    testonly = true
+    output_name = "fuchsia.zbi"
     deps = [
-      "zedboot:zbi",
-    ]
-    sources = [
-      "$root_out_dir/zedboot.zbi",
+      ":fuchsia",
     ]
-    updater = "zedboot"
-    installer = "zedboot.zbi"
-  },
-]
+  }
+  images += [
+    {
+      deps = [
+        ":signed",
+      ]
+      sdk = "zircon-a.signed"
+      updater = "zbi.signed"
+      installer = "fuchsia.zbi"
+      json = {
+        name = "zircon-a.signed"
+        type = "zbi.signed"
+        bootserver_pave = [ "--zircona" ]
+      }
+      public = [
+        "IMAGE_ZIRCONA_SIGNEDZBI",
+      ]
+    },
+  ]
+}
 
+# The updater also wants the zedboot zbi as recovery.
 if (custom_signing_script != "") {
   images += [
     {
@@ -742,6 +761,32 @@ if (custom_signing_script != "") {
       updater = "zedboot.signed"
     },
   ]
+} else if (use_vboot) {
+  images += [
+    {
+      deps = [
+        "zedboot:signed",
+      ]
+      sources = [
+        "$root_out_dir/zedboot.vboot",
+      ]
+      updater = "zedboot.signed"
+      installer = "zedboot.zbi"
+    },
+  ]
+} else {
+  images += [
+    {
+      deps = [
+        "zedboot:zbi",
+      ]
+      sources = [
+        "$root_out_dir/zedboot.zbi",
+      ]
+      updater = "zedboot"
+      installer = "zedboot.zbi"
+    },
+  ]
 }
 
 ###
@@ -933,8 +978,8 @@ images += [
   },
 ]
 
-if (target_cpu != "arm64") {
-  # ChromeOS vboot images.
+if (target_cpu != "arm64" && !use_vboot) {
+  # TODO(surajmalhotra): Remove this target once SDK no longer depends on it.
   vboot("vboot") {
     testonly = true
     output_name = "fuchsia"
@@ -947,28 +992,11 @@ if (target_cpu != "arm64") {
       json = {
         name = "zircon-vboot"
         type = "vboot"
-        bootserver_pave = [ "--kernc" ]
       }
       deps = [
         ":vboot",
       ]
-      installer = "zircon.vboot"
       sdk = "zircon.vboot"
-      updater = "kernc"
-      public = [
-        "IMAGE_ZIRCON_VBOOT",
-      ]
-    },
-  ]
-
-  images += [
-    {
-      deps = [
-        "zedboot:vboot",
-      ]
-      sources = [
-        "$root_out_dir/zedboot.vboot",
-      ]
     },
   ]
 
@@ -990,11 +1018,11 @@ if (target_cpu != "arm64") {
       json = {
         name = "efi"
         type = "blk"
-        bootserver_pave = [ "--efi" ]
+        bootserver_pave = [ "--bootloader" ]
       }
       installer = "fuchsia.esp.blk"
       sdk = "local.esp.blk"
-      updater = "efi"
+      updater = "bootloader"
       public = [
         "IMAGE_ESP_RAW",
       ]
diff --git a/build/images/boot.gni b/build/images/boot.gni
index 07c6905c9608787a4be194c42348d4c2c693c703..2898577ecb4b67e63f009e66fc70d3f20b98eee3 100644
--- a/build/images/boot.gni
+++ b/build/images/boot.gni
@@ -6,6 +6,11 @@ import("//build/compiled_action.gni")
 import("//build/config/clang/clang.gni")
 import("//build/config/fuchsia/zircon.gni")
 
+declare_args() {
+  # Use vboot images
+  use_vboot = false
+}
+
 # Build a "kernel partition" target for ChromeOS targets.
 #
 # Parameters
diff --git a/build/images/zedboot/BUILD.gn b/build/images/zedboot/BUILD.gn
index 582a688b6e96b37cecd67aa9c0b3b273c4064e04..183bc645f005946122567a46bc73ace60c3e0996 100644
--- a/build/images/zedboot/BUILD.gn
+++ b/build/images/zedboot/BUILD.gn
@@ -5,6 +5,7 @@
 import("//build/config/fuchsia/zbi.gni")
 import("//build/images/boot.gni")
 import("//build/images/custom_signing.gni")
+import("//build/images/custom_signing.gni")
 import("//build/images/json.gni")
 import("//build/images/manifest.gni")
 import("//build/images/zxcrypt.gni")
@@ -158,7 +159,7 @@ zedboot_images += [
     json = {
       name = "zircon-r"
       type = "zbi"
-      if (custom_signing_script == "") {
+      if (custom_signing_script == "" && !use_vboot) {
         bootserver_pave = [ "--zirconr" ]
       }
     }
@@ -195,10 +196,8 @@ if (custom_signing_script != "") {
       }
     },
   ]
-}
-
-if (target_cpu != "arm64") {
-  vboot("vboot") {
+} else if (use_vboot) {
+  vboot("signed") {
     output_name = "zedboot"
     deps = [
       ":zbi",
@@ -208,18 +207,21 @@ if (target_cpu != "arm64") {
   zedboot_images += [
     {
       deps = [
-        ":vboot",
+        ":signed",
       ]
       public = [
-        "IMAGE_ZEDBOOT_VBOOT",
+        "IMAGE_ZIRCONR_SIGNEDZBI",
       ]
       json = {
-        name = "zedboot"
-        type = "vboot"
+        name = "zircon-r.signed"
+        type = "zbi.signed"
+        bootserver_pave = [ "--zirconr" ]
       }
     },
   ]
+}
 
+if (target_cpu != "arm64" && !use_vboot) {
   esp("esp") {
     output_name = "zedboot"
     cmdline = "efi_cmdline.txt"
@@ -249,13 +251,10 @@ group("zedboot") {
   deps = [
     ":zbi",
   ]
-  if (target_cpu != "arm64") {
-    deps += [
-      ":esp",
-      ":vboot",
-    ]
+  if (target_cpu != "arm64" && !use_vboot) {
+    deps += [ ":esp" ]
   }
-  if (custom_signing_script != "") {
+  if (custom_signing_script != "" || use_vboot) {
     deps += [ ":signed" ]
   }
 }
diff --git a/garnet/bin/installer/install-fuchsia.sh b/garnet/bin/installer/install-fuchsia.sh
index 20830fa14caa843a9b4e3211158a838df10b39e1..00c99946cde32249ac6f3f2bbacfed8ba12aa7e5 100755
--- a/garnet/bin/installer/install-fuchsia.sh
+++ b/garnet/bin/installer/install-fuchsia.sh
@@ -8,7 +8,7 @@ INSTALL_PATH="/install"
 PAVER="/boot/bin/install-disk-image"
 
 # TODO(raggi): template this from the build instead.
-IMAGES="fvm.sparse.blk fuchsia.esp.blk fuchsia.zbi zircon.vboot"
+IMAGES="fvm.sparse.blk fuchsia.esp.blk fuchsia.zbi zedboot.zbi"
 
 if [ ! -e "${PAVER}" ]; then
   echo "Paver \"install-disk-image\" is missing!"
@@ -17,25 +17,18 @@ fi
 
 for file in $IMAGES; do
   img="${INSTALL_PATH}/${file}"
-  if [ ! -f "$img" ]; then
-    echo "Missing required image file: $img" >&2
-    exit 1
-  fi
-done
 
-for file in $IMAGES; do
-  img="${INSTALL_PATH}/${file}"
+  if [ ! -f ${img} ]; then
+    continue
+  fi
 
   typ=""
   case "$file" in
-    fvm*|*.fvm.blk|*.sparse.blk)
+    fvm.sparse.blk)
       typ="fvm"
       ;;
-    *esp.blk|*efi.blk)
-      typ="efi"
-      ;;
-    *.vboot)
-      typ="kernc"
+    fuchsia.esp.blk)
+      typ="bootloader"
       ;;
     fuchsia.zbi)
       typ="zircona"
diff --git a/garnet/go/src/amber/system_updater/images b/garnet/go/src/amber/system_updater/images
index eb68bc38ddf5a1a7c010ecc4a3105d3ade7264d4..95a81f62bf94d50498185c84f1caa7df5d614491 100644
--- a/garnet/go/src/amber/system_updater/images
+++ b/garnet/go/src/amber/system_updater/images
@@ -1,5 +1,4 @@
-efi
-kernc
+bootloader
 zbi
 zbi.signed
 zedboot
diff --git a/garnet/go/src/amber/system_updater/processor.go b/garnet/go/src/amber/system_updater/processor.go
index ede372753dc574a5775a65acb858f787d2d1547b..867d9fde0009f72d3b2f7660fa4569b9154625bb 100644
--- a/garnet/go/src/amber/system_updater/processor.go
+++ b/garnet/go/src/amber/system_updater/processor.go
@@ -165,10 +165,6 @@ func WriteImgs(imgs []string, imgsPath string) error {
 
 		var c *exec.Cmd
 		switch img {
-		case "efi":
-			c = exec.Command(diskImagerPath, "install-efi")
-		case "kernc":
-			c = exec.Command(diskImagerPath, "install-kernc")
 		case "zbi", "zbi.signed":
 			c = exec.Command(diskImagerPath, "install-zircona")
 		case "zedboot", "zedboot.signed":
diff --git a/garnet/go/src/amber/system_updater/test_images b/garnet/go/src/amber/system_updater/test_images
index 9d3492adeeef572b13f0b4e08bbffa07306b02cd..54960172d3bf2e2031de5f6ea35583a439f1d8c5 100644
--- a/garnet/go/src/amber/system_updater/test_images
+++ b/garnet/go/src/amber/system_updater/test_images
@@ -1 +1 @@
-efi
+bootloader
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 8e2e47a57518372400d928c3391cb83cae57ee7a..7cf0e75eca97bcac846bda0327ef6ad738d0413a 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -8,6 +8,10 @@ import("//build/sdk/sdk.gni")
 import("//build/sdk/sdk_documentation.gni")
 import("config.gni")
 
+declare_args() {
+  export_x64_sdk_images = false
+}
+
 # This default target is empty because there are multiple flavors of SDKs and
 # there is no "default" one. The empty target is still needed so that all the
 # other targets in this file are attached to the build graph.
@@ -104,7 +108,7 @@ sdk("images") {
   deps = [
     "//build/images:images_sdk",
   ]
-  if (target_cpu != "arm64") {
+  if (export_x64_sdk_images) {
     deps += [
       "//build/images:fvm.sparse.blk_sdk",
       "//build/images:local.esp.blk_sdk",
diff --git a/tools/devshell/mkzedboot b/tools/devshell/mkzedboot
index 2b73bc7484f80b2f60a3adb0b487d5616670e695..2bf71d1b571becf8359de378ff4e7d1f6296f70e 100755
--- a/tools/devshell/mkzedboot
+++ b/tools/devshell/mkzedboot
@@ -84,12 +84,18 @@ echo "done"
 
 echo "Create new partitions... "
 # ESP needs to be a FAT compatible size
-esp_size=$(((63*1024*1024)/512))
-vboot_size=$(((64*1024*1024)/512))
-esp_offset=2048
-vboot_offset=$(($esp_size + $esp_offset))
-"${FUCHSIA_BUILD_DIR}/tools/cgpt" add -s "${esp_size}" -t efi -b "${esp_offset}" -l esp "${USB_DEVICE}"
-"${FUCHSIA_BUILD_DIR}/tools/cgpt" add -s "${vboot_size}" -t kernel -b "${vboot_offset}" -l zedboot "${USB_DEVICE}"
+if [[ ! -z "${IMAGE_ZEDBOOT_ESP}" ]]; then
+  esp_size=$(((63*1024*1024)/512))
+  esp_offset=2048
+  "${FUCHSIA_BUILD_DIR}/tools/cgpt" add -s "${esp_size}" -t efi -b "${esp_offset}" -l esp "${USB_DEVICE}"
+else
+  reserved_size=2048
+  reserved_offset=2048
+  vboot_size=$(((64*1024*1024)/512))
+  vboot_offset=$(($reserved_offset + $reserved_size))
+  "${FUCHSIA_BUILD_DIR}/tools/cgpt" add -s "${reserved_size}" -t reserved -b "${reserved_offset}" -l reserved "${USB_DEVICE}"
+  "${FUCHSIA_BUILD_DIR}/tools/cgpt" add -s "${vboot_size}" -t kernel -b "${vboot_offset}" -l zedboot "${USB_DEVICE}"
+fi
 
 # NOTE: Ok, so here goes some stuff. I could have written a much smarter "dd"
 # (a thing that can operate on block-boundaries for seek and copy, but that
@@ -119,20 +125,29 @@ if $include_install; then
   # We need to specify the install size in 512byte lba's:
   install_size=$(($install_size * 8192))
 
-  install_min_offset=$(($esp_size + $esp_offset + $vboot_size))
+  if [[ ! -z "${IMAGE_ZEDBOOT_ESP}" ]]; then
+    install_min_offset=$(($esp_size + $esp_offset))
+  else
+    install_min_offset=$(($vboot_size + $vboot_offset))
+  fi
   # Align the partition offset to a 4mb "block size"
   install_offset=$(( (($install_min_offset * 512) + 4194303) / 4194304))
   # The lba offset of that is:
   install_lba_offset=$(($install_offset * 8192))
   "${FUCHSIA_BUILD_DIR}/tools/cgpt" add -s "${install_size}" -t "48435546-4953-2041-494E-5354414C4C52" -b "${install_lba_offset}" -l install "${USB_DEVICE}"
 fi
-"${FUCHSIA_BUILD_DIR}/tools/cgpt" add -i 2 -T 1 -S 1 -P 2 "${USB_DEVICE}"
+if [[ ! -z "${IMAGE_ZIRCONR_SIGNEDZBI}" ]]; then
+  "${FUCHSIA_BUILD_DIR}/tools/cgpt" add -i 2 -T 1 -S 1 -P 2 "${USB_DEVICE}"
+fi
 echo "done"
 
-echo "Writing zedboot for EFI"
-dd if="${FUCHSIA_BUILD_DIR}/${IMAGE_ZEDBOOT_ESP}" of="${USB_DEVICE}" seek=${esp_offset}
-echo "Writing zedboot for Cros"
-dd if="${FUCHSIA_BUILD_DIR}/${IMAGE_ZEDBOOT_VBOOT}" of="${USB_DEVICE}" seek=${vboot_offset}
+if [[ ! -z "${IMAGE_ZEDBOOT_ESP}" ]]; then
+  echo "Writing zedboot for EFI"
+  dd if="${FUCHSIA_BUILD_DIR}/${IMAGE_ZEDBOOT_ESP}" of="${USB_DEVICE}" seek=${esp_offset}
+else
+  echo "Writing zedboot for Cros"
+  dd if="${FUCHSIA_BUILD_DIR}/${IMAGE_ZIRCONR_SIGNEDZBI}" of="${USB_DEVICE}" seek=${vboot_offset}
+fi
 if $include_install; then
   echo "Writing install partition"
   dd if="${FUCHSIA_BUILD_DIR}/${IMAGE_INSTALLER_RAW}" of="${USB_DEVICE}" seek=${install_offset} bs=4194304
diff --git a/zircon/system/core/netsvc/board-name.cpp b/zircon/system/core/netsvc/board-name.cpp
index 40c0cfd266a34f75aeaedc38aae232c905eeb89d..3de5059ba79d30972cb9b45b8af5175bb144ce8f 100644
--- a/zircon/system/core/netsvc/board-name.cpp
+++ b/zircon/system/core/netsvc/board-name.cpp
@@ -134,7 +134,7 @@ bool check_board_name(const char* name, size_t length) {
 
     // Special case x64 to check if chromebook.
     if (!strcmp(real_board_name, "pc") && IsChromebook()) {
-        // strcpy(real_board_name, "chromebook-x64");
+        strcpy(real_board_name, "chromebook-x64");
     }
 
     return strncmp(real_board_name, name, length) == 0;
diff --git a/zircon/system/core/netsvc/tftp.cpp b/zircon/system/core/netsvc/tftp.cpp
index 2327c58b41855876c539ffe221aae0a47e60204a..d46a6bcb34245b52eb2c8cb3e723255401257268 100644
--- a/zircon/system/core/netsvc/tftp.cpp
+++ b/zircon/system/core/netsvc/tftp.cpp
@@ -245,12 +245,6 @@ static tftp_status paver_open_write(const char* filename, size_t size, file_info
     } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_BOOTLOADER_HOST_FILENAME)) {
         printf("netsvc: Running BOOTLOADER Paver\n");
         argv[1] = "install-bootloader";
-    } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_EFI_HOST_FILENAME)) {
-        printf("netsvc: Running EFI Paver\n");
-        argv[1] = "install-efi";
-    } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_KERNC_HOST_FILENAME)) {
-        printf("netsvc: Running KERN-C Paver\n");
-        argv[1] = "install-kernc";
     } else if (!strcmp(filename + NB_IMAGE_PREFIX_LEN, NB_ZIRCONA_HOST_FILENAME)) {
         printf("netsvc: Running ZIRCON-A Paver\n");
         argv[1] = "install-zircona";
diff --git a/zircon/system/host/bootserver/bootserver.c b/zircon/system/host/bootserver/bootserver.c
index 17383cb3d8741bf2ccf74a4215e8e2fb1596ab52..1829f222db1c3cbee544e6d5fc22bacca0c6c72c 100644
--- a/zircon/system/host/bootserver/bootserver.c
+++ b/zircon/system/host/bootserver/bootserver.c
@@ -206,12 +206,12 @@ void usage(void) {
             "  --fvm <file>             use the supplied file as a sparse FVM image (up to 4 times)\n"
             "  --bootloader <file>      use the supplied file as a BOOTLOADER image\n"
             "  --efi <file>             use the supplied file as an EFI image\n"
-            "  --kernc <file>           use the supplied file as a KERN-C CrOS image\n"
             "  --zircona <file>         use the supplied file as a ZIRCON-A ZBI\n"
             "  --zirconb <file>         use the supplied file as a ZIRCON-B ZBI\n"
             "  --zirconr <file>         use the supplied file as a ZIRCON-R ZBI\n"
             "  --vbmetaa <file>         use the supplied file as a AVB vbmeta_a image\n"
             "  --vbmetab <file>         use the supplied file as a AVB vbmeta_b image\n"
+            "  --vbmetar <file>         use the supplied file as a AVB vbmeta_r image\n"
             "  --authorized-keys <file> use the supplied file as an authorized_keys file\n"
             "  --netboot    use the netboot protocol\n"
             "  --tftp       use the tftp protocol (default)\n"
@@ -302,13 +302,12 @@ int main(int argc, char** argv) {
     const char* board_name = NULL;
     const char* board_name_file = NULL;
     const char* bootloader_image = NULL;
-    const char* efi_image = NULL;
-    const char* kernc_image = NULL;
     const char* zircona_image = NULL;
     const char* zirconb_image = NULL;
     const char* zirconr_image = NULL;
     const char* vbmetaa_image = NULL;
     const char* vbmetab_image = NULL;
+    const char* vbmetar_image = NULL;
     const char* authorized_keys = NULL;
     const char* fvm_images[MAX_FVM_IMAGES] = {NULL, NULL, NULL, NULL};
     const char* kernel_fn = NULL;
@@ -353,22 +352,6 @@ int main(int argc, char** argv) {
                 return -1;
             }
             bootloader_image = argv[1];
-        } else if (!strcmp(argv[1], "--efi")) {
-            argc--;
-            argv++;
-            if (argc <= 1) {
-                fprintf(stderr, "'--efi' option requires an argument (EFI image)\n");
-                return -1;
-            }
-            efi_image = argv[1];
-        } else if (!strcmp(argv[1], "--kernc")) {
-            argc--;
-            argv++;
-            if (argc <= 1) {
-                fprintf(stderr, "'--kernc' option requires an argument (KERN-C image)\n");
-                return -1;
-            }
-            kernc_image = argv[1];
         } else if (!strcmp(argv[1], "--zircona")) {
             argc--;
             argv++;
@@ -405,10 +388,18 @@ int main(int argc, char** argv) {
             argc--;
             argv++;
             if (argc <= 1) {
-                fprintf(stderr, "'--vbmetab' option requires an argument (vbmeta_a image)\n");
+                fprintf(stderr, "'--vbmetab' option requires an argument (vbmeta_b image)\n");
                 return -1;
             }
             vbmetab_image = argv[1];
+        } else if (!strcmp(argv[1], "--vbmetar")) {
+            argc--;
+            argv++;
+            if (argc <= 1) {
+                fprintf(stderr, "'--vbmetar' option requires an argument (vbmeta_r image)\n");
+                return -1;
+            }
+            vbmetar_image = argv[1];
         } else if (!strcmp(argv[1], "--authorized-keys")) {
             argc--;
             argv++;
@@ -528,8 +519,8 @@ int main(int argc, char** argv) {
         argc--;
         argv++;
     }
-    if (!kernel_fn && !bootloader_image && !efi_image && !kernc_image && !zircona_image &&
-        !zirconb_image && !zirconr_image && !vbmetaa_image && !vbmetab_image && !fvm_images[0]) {
+    if (!kernel_fn && !bootloader_image && !zircona_image && !zirconb_image && !zirconr_image &&
+        !vbmetaa_image && !vbmetab_image && !fvm_images[0]) {
         usage();
     }
     if (!nodename) {
@@ -672,12 +663,6 @@ int main(int argc, char** argv) {
         if (status == 0 && bootloader_image) {
             status = xfer(&ra, bootloader_image, NB_BOOTLOADER_FILENAME);
         }
-        if (status == 0 && efi_image) {
-            status = xfer(&ra, efi_image, NB_EFI_FILENAME);
-        }
-        if (status == 0 && kernc_image) {
-            status = xfer(&ra, kernc_image, NB_KERNC_FILENAME);
-        }
         if (status == 0 && zircona_image) {
             status = xfer(&ra, zircona_image, NB_ZIRCONA_FILENAME);
         }
diff --git a/zircon/system/public/zircon/boot/netboot.h b/zircon/system/public/zircon/boot/netboot.h
index 4b42f8185cb83e3096bd7b8139af90103038ff0a..35f5cb72ecf088a2f265e5816499120e7c1c3936 100644
--- a/zircon/system/public/zircon/boot/netboot.h
+++ b/zircon/system/public/zircon/boot/netboot.h
@@ -10,7 +10,7 @@
 
 // clang-format off
 
-#define BOOTLOADER_VERSION "0.7.14"
+#define BOOTLOADER_VERSION "0.7.15"
 
 #define NB_MAGIC              0xAA774217
 #define NB_DEBUGLOG_MAGIC     0xAEAE1123
@@ -63,10 +63,6 @@
 #define NB_FVM_FILENAME NB_IMAGE_PREFIX NB_FVM_HOST_FILENAME
 #define NB_BOOTLOADER_HOST_FILENAME "bootloader.img"
 #define NB_BOOTLOADER_FILENAME NB_IMAGE_PREFIX NB_BOOTLOADER_HOST_FILENAME
-#define NB_EFI_HOST_FILENAME "efi.img"
-#define NB_EFI_FILENAME NB_IMAGE_PREFIX NB_EFI_HOST_FILENAME
-#define NB_KERNC_HOST_FILENAME "kernc.img"
-#define NB_KERNC_FILENAME NB_IMAGE_PREFIX NB_KERNC_HOST_FILENAME
 #define NB_ZIRCONA_HOST_FILENAME "zircona.img"
 #define NB_ZIRCONA_FILENAME NB_IMAGE_PREFIX NB_ZIRCONA_HOST_FILENAME
 #define NB_ZIRCONB_HOST_FILENAME "zirconb.img"
@@ -77,6 +73,8 @@
 #define NB_VBMETAA_FILENAME NB_IMAGE_PREFIX NB_VBMETAA_HOST_FILENAME
 #define NB_VBMETAB_HOST_FILENAME "vbmetab.img"
 #define NB_VBMETAB_FILENAME NB_IMAGE_PREFIX NB_VBMETAB_HOST_FILENAME
+#define NB_VBMETAR_HOST_FILENAME "vbmetar.img"
+#define NB_VBMETAR_FILENAME NB_IMAGE_PREFIX NB_VBMETAR_HOST_FILENAME
 #define NB_SSHAUTH_HOST_FILENAME "authorized_keys"
 #define NB_SSHAUTH_FILENAME NB_IMAGE_PREFIX NB_SSHAUTH_HOST_FILENAME
 #define NB_BOARD_NAME_HOST_FILENAME "board_name"
diff --git a/zircon/system/public/zircon/hw/gpt.h b/zircon/system/public/zircon/hw/gpt.h
index 5d18bc24972c5ba00d2c2a2a09ccded6cfbde29f..1675f56fa07df119152dedf6ad104511e78c915a 100644
--- a/zircon/system/public/zircon/hw/gpt.h
+++ b/zircon/system/public/zircon/hw/gpt.h
@@ -191,6 +191,15 @@ typedef struct gpt_entry {
 }
 #define GUID_VBMETA_B_NAME "vbmeta_b"
 
+#define GUID_VBMETA_R_STRING "6A2460C3-CD11-4E8B-A880-12CCE268ED0A"
+#define GUID_VBMETA_R_VALUE {                      \
+    0xc3, 0x60, 0x24, 0x6a,                        \
+    0x11, 0xcd,                                    \
+    0x8b, 0x4e,                                    \
+    0x80, 0xa8, 0x12, 0xcc, 0xe2, 0x68, 0xed, 0x0a \
+}
+#define GUID_VBMETA_R_NAME "vbmeta_r"
+
 #define GUID_CROS_KERNEL_STRING "FE3A2A5D-4F32-41A7-B725-ACCC3285A309"
 #define GUID_CROS_KERNEL_VALUE {                   \
     0x5d, 0x2a, 0x3a, 0xfe,                        \
diff --git a/zircon/system/uapp/disk-pave/disk-pave.cpp b/zircon/system/uapp/disk-pave/disk-pave.cpp
index d409e004c701a05b0680ed0fa1c125a750f1b320..f6d5970f96e77b6c863df19b461585137c4aea63 100644
--- a/zircon/system/uapp/disk-pave/disk-pave.cpp
+++ b/zircon/system/uapp/disk-pave/disk-pave.cpp
@@ -19,7 +19,6 @@
 
 namespace {
 
-using paver::Arch;
 using paver::Command;
 using paver::Flags;
 
@@ -27,13 +26,12 @@ void PrintUsage() {
     ERROR("install-disk-image <command> [options...]\n");
     ERROR("Commands:\n");
     ERROR("  install-bootloader : Install a BOOTLOADER partition to the device\n");
-    ERROR("  install-efi        : Install an EFI partition to the device\n");
-    ERROR("  install-kernc      : Install a KERN-C CrOS partition to the device\n");
     ERROR("  install-zircona    : Install a ZIRCON-A partition to the device\n");
     ERROR("  install-zirconb    : Install a ZIRCON-B partition to the device\n");
     ERROR("  install-zirconr    : Install a ZIRCON-R partition to the device\n");
     ERROR("  install-vbmetaa    : Install a VBMETA-A partition to the device\n");
     ERROR("  install-vbmetab    : Install a VBMETA-B partition to the device\n");
+    ERROR("  install-vbmetar    : Install a VBMETA-R partition to the device\n");
     ERROR("  install-fvm        : Install a sparse FVM to the device\n");
     ERROR("  install-data-file  : Install a file to DATA (--path required)\n");
     ERROR("  wipe               : Remove the FVM partition\n");
@@ -60,9 +58,9 @@ bool ParseFlags(int argc, char** argv, Flags* flags) {
     if (!strcmp(argv[0], "install-bootloader")) {
         flags->cmd = Command::kInstallBootloader;
     } else if (!strcmp(argv[0], "install-efi")) {
-        flags->cmd = Command::kInstallEfi;
+        flags->cmd = Command::kInstallBootloader;
     } else if (!strcmp(argv[0], "install-kernc")) {
-        flags->cmd = Command::kInstallKernc;
+        flags->cmd = Command::kInstallZirconA;
     } else if (!strcmp(argv[0], "install-zircona")) {
         flags->cmd = Command::kInstallZirconA;
     } else if (!strcmp(argv[0], "install-zirconb")) {
@@ -73,6 +71,8 @@ bool ParseFlags(int argc, char** argv, Flags* flags) {
         flags->cmd = Command::kInstallVbMetaA;
     } else if (!strcmp(argv[0], "install-vbmetab")) {
         flags->cmd = Command::kInstallVbMetaB;
+    } else if (!strcmp(argv[0], "install-vbmetar")) {
+        flags->cmd = Command::kInstallVbMetaR;
     } else if (!strcmp(argv[0], "install-data-file")) {
         flags->cmd = Command::kInstallDataFile;
     } else if (!strcmp(argv[0], "install-fvm")) {
@@ -87,11 +87,6 @@ bool ParseFlags(int argc, char** argv, Flags* flags) {
 
     // Parse options.
     flags->force = false;
-#if defined(__x86_64__)
-    flags->arch = Arch::X64;
-#elif defined(__aarch64__)
-    flags->arch = Arch::ARM64;
-#endif
     flags->payload_fd.reset(STDIN_FILENO);
     while (argc > 0) {
         if (!strcmp(argv[0], "--file")) {
diff --git a/zircon/system/ulib/paver/device-partitioner.cpp b/zircon/system/ulib/paver/device-partitioner.cpp
index 99a5ed069f1251e3b0c6b45ddcc7d5ab5695865b..95eab4225f1b3d7841ce0c37e2cdecb4a2748d31 100644
--- a/zircon/system/ulib/paver/device-partitioner.cpp
+++ b/zircon/system/ulib/paver/device-partitioner.cpp
@@ -51,7 +51,7 @@ bool KernelFilterCallback(const gpt_partition_t& part, const uint8_t kern_type[G
            strncmp(cstring_name, partition_name.data(), partition_name.length()) == 0;
 }
 
-bool FvmFilterCallback(const gpt_partition_t& part) {
+bool IsFvmPartition(const gpt_partition_t& part) {
     const uint8_t partition_type[GPT_GUID_LEN] = GUID_FVM_VALUE;
     return memcmp(part.type, partition_type, GPT_GUID_LEN) == 0;
 }
@@ -246,10 +246,6 @@ const char* PartitionName(Partition type) {
     switch (type) {
     case Partition::kBootloader:
         return "Bootloader";
-    case Partition::kKernelC:
-        return "Kernel C";
-    case Partition::kEfi:
-        return "EFI";
     case Partition::kZirconA:
         return "Zircon A";
     case Partition::kZirconB:
@@ -260,6 +256,8 @@ const char* PartitionName(Partition type) {
         return "VBMeta A";
     case Partition::kVbMetaB:
         return "VBMeta B";
+    case Partition::kVbMetaR:
+        return "VBMeta R";
     case Partition::kFuchsiaVolumeManager:
         return "Fuchsia Volume Manager";
     default:
@@ -608,7 +606,7 @@ zx_status_t GptDevicePartitioner::WipeFvm() {
         if (!p) {
             continue;
         }
-        if (!FvmFilterCallback(*p)) {
+        if (!IsFvmPartition(*p)) {
             continue;
         }
 
@@ -664,7 +662,7 @@ zx_status_t EfiDevicePartitioner::AddPartition(Partition partition_type, fbl::un
     size_t optional_reserve_bytes = 0;
 
     switch (partition_type) {
-    case Partition::kEfi: {
+    case Partition::kBootloader: {
         const uint8_t efi_type[GPT_GUID_LEN] = GUID_EFI_VALUE;
         memcpy(type, efi_type, GPT_GUID_LEN);
         minimum_size_bytes = 20LU * (1 << 20);
@@ -711,7 +709,7 @@ zx_status_t EfiDevicePartitioner::AddPartition(Partition partition_type, fbl::un
 zx_status_t EfiDevicePartitioner::FindPartition(Partition partition_type,
                                                 fbl::unique_fd* out_fd) const {
     switch (partition_type) {
-    case Partition::kEfi: {
+    case Partition::kBootloader: {
         return gpt_->FindPartition(IsGigabootPartition, out_fd);
     }
     case Partition::kZirconA: {
@@ -736,7 +734,7 @@ zx_status_t EfiDevicePartitioner::FindPartition(Partition partition_type,
         return gpt_->FindPartition(filter, out_fd);
     }
     case Partition::kFuchsiaVolumeManager:
-        return gpt_->FindPartition(FvmFilterCallback, out_fd);
+        return gpt_->FindPartition(IsFvmPartition, out_fd);
 
     default:
         ERROR("EFI partitioner cannot find unknown partition type\n");
@@ -804,13 +802,20 @@ zx_status_t CrosDevicePartitioner::AddPartition(Partition partition_type,
     size_t optional_reserve_bytes = 0;
 
     switch (partition_type) {
-    case Partition::kKernelC: {
+    case Partition::kZirconA: {
         const uint8_t kernc_type[GPT_GUID_LEN] = GUID_CROS_KERNEL_VALUE;
         memcpy(type, kernc_type, GPT_GUID_LEN);
         minimum_size_bytes = 64LU * (1 << 20);
         name = kZirconAName;
         break;
     }
+    case Partition::kZirconR: {
+        const uint8_t zircon_r_type[GPT_GUID_LEN] = GUID_ZIRCON_R_VALUE;
+        memcpy(type, zircon_r_type, GPT_GUID_LEN);
+        minimum_size_bytes = 24LU * (1 << 20);
+        name = kZirconRName;
+        break;
+    }
     case Partition::kFuchsiaVolumeManager: {
         const uint8_t fvm_type[GPT_GUID_LEN] = GUID_FVM_VALUE;
         memcpy(type, fvm_type, GPT_GUID_LEN);
@@ -829,15 +834,22 @@ zx_status_t CrosDevicePartitioner::AddPartition(Partition partition_type,
 zx_status_t CrosDevicePartitioner::FindPartition(Partition partition_type,
                                                  fbl::unique_fd* out_fd) const {
     switch (partition_type) {
-    case Partition::kKernelC: {
+    case Partition::kZirconA: {
         const auto filter = [](const gpt_partition_t& part) {
             const uint8_t guid[GPT_GUID_LEN] = GUID_CROS_KERNEL_VALUE;
             return KernelFilterCallback(part, guid, kZirconAName);
         };
         return gpt_->FindPartition(filter, out_fd);
     }
+    case Partition::kZirconR: {
+        const auto filter = [](const gpt_partition_t& part) {
+            const uint8_t guid[GPT_GUID_LEN] = GUID_ZIRCON_R_VALUE;
+            return KernelFilterCallback(part, guid, kZirconRName);
+        };
+        return gpt_->FindPartition(filter, out_fd);
+    }
     case Partition::kFuchsiaVolumeManager:
-        return gpt_->FindPartition(FvmFilterCallback, out_fd);
+        return gpt_->FindPartition(IsFvmPartition, out_fd);
 
     default:
         ERROR("Cros partitioner cannot find unknown partition type\n");
@@ -847,7 +859,7 @@ zx_status_t CrosDevicePartitioner::FindPartition(Partition partition_type,
 
 zx_status_t CrosDevicePartitioner::FinalizePartition(Partition partition_type) {
     // Special partition finalization is only necessary for Zircon partitions.
-    if (partition_type != Partition::kKernelC) {
+    if (partition_type != Partition::kZirconA) {
         return ZX_OK;
     }
 
@@ -978,6 +990,11 @@ zx_status_t FixedDevicePartitioner::FindPartition(Partition partition_type,
         memcpy(type, vbmeta_b_type, GPT_GUID_LEN);
         break;
     }
+    case Partition::kVbMetaR: {
+        const uint8_t vbmeta_r_type[GPT_GUID_LEN] = GUID_VBMETA_R_VALUE;
+        memcpy(type, vbmeta_r_type, GPT_GUID_LEN);
+        break;
+    }
     case Partition::kFuchsiaVolumeManager: {
         const uint8_t fvm_type[GPT_GUID_LEN] = GUID_FVM_VALUE;
         memcpy(type, fvm_type, GPT_GUID_LEN);
@@ -1082,6 +1099,11 @@ zx_status_t SkipBlockDevicePartitioner::FindPartition(Partition partition_type,
         memcpy(type, vbmeta_b_type, GPT_GUID_LEN);
         break;
     }
+    case Partition::kVbMetaR: {
+        const uint8_t vbmeta_r_type[GPT_GUID_LEN] = GUID_VBMETA_R_VALUE;
+        memcpy(type, vbmeta_r_type, GPT_GUID_LEN);
+        break;
+    }
     case Partition::kFuchsiaVolumeManager: {
         const uint8_t fvm_type[GPT_GUID_LEN] = GUID_FVM_VALUE;
         memcpy(type, fvm_type, GPT_GUID_LEN);
diff --git a/zircon/system/ulib/paver/device-partitioner.h b/zircon/system/ulib/paver/device-partitioner.h
index 25894a7b7a9c12d8907c398bb6895aef1ed11cc1..62feec0dc2db0ae710b9145a3e06cf43600d6f49 100644
--- a/zircon/system/ulib/paver/device-partitioner.h
+++ b/zircon/system/ulib/paver/device-partitioner.h
@@ -32,6 +32,7 @@ enum class Partition {
     kZirconR,
     kVbMetaA,
     kVbMetaB,
+    kVbMetaR,
     kFuchsiaVolumeManager,
 };
 
@@ -51,8 +52,6 @@ public:
 
     virtual ~DevicePartitioner() = default;
 
-    virtual bool IsCros() const = 0;
-
     // Whether to use skip block interface or block interface for non-FVM
     // partitions.
     virtual bool UseSkipBlockInterface() const = 0;
@@ -142,8 +141,6 @@ public:
     static zx_status_t Initialize(fbl::unique_fd devfs_root,
                                   fbl::unique_ptr<DevicePartitioner>* partitioner);
 
-    bool IsCros() const override { return false; }
-
     bool UseSkipBlockInterface() const override { return false; }
 
     zx_status_t AddPartition(Partition partition_type, fbl::unique_fd* out_fd) override;
@@ -169,8 +166,6 @@ public:
     static zx_status_t Initialize(fbl::unique_fd devfs_root,
                                   fbl::unique_ptr<DevicePartitioner>* partitioner);
 
-    bool IsCros() const override { return true; }
-
     bool UseSkipBlockInterface() const override { return false; }
 
     zx_status_t AddPartition(Partition partition_type, fbl::unique_fd* out_fd) override;
@@ -199,8 +194,6 @@ public:
     static zx_status_t Initialize(fbl::unique_fd devfs_root,
                                   fbl::unique_ptr<DevicePartitioner>* partitioner);
 
-    bool IsCros() const override { return false; }
-
     bool UseSkipBlockInterface() const override { return false; }
 
     zx_status_t AddPartition(Partition partition_type, fbl::unique_fd* out_fd) override;
@@ -230,8 +223,6 @@ public:
     static zx_status_t Initialize(fbl::unique_fd devfs_root,
                                   fbl::unique_ptr<DevicePartitioner>* partitioner);
 
-    bool IsCros() const override { return false; }
-
     bool UseSkipBlockInterface() const override { return true; }
 
     zx_status_t AddPartition(Partition partition_type, fbl::unique_fd* out_fd) override;
diff --git a/zircon/system/ulib/paver/include/lib/paver/paver.h b/zircon/system/ulib/paver/include/lib/paver/paver.h
index 7eb80fc656668f672aa2dc8c1ec5f9ddd43fc478..4f8de9af19b5c8a88aa3da221f487f05bd4696bc 100644
--- a/zircon/system/ulib/paver/include/lib/paver/paver.h
+++ b/zircon/system/ulib/paver/include/lib/paver/paver.h
@@ -13,27 +13,19 @@ namespace paver {
 enum class Command {
     kUnknown,
     kInstallBootloader,
-    kInstallEfi,
-    kInstallKernc,
     kInstallZirconA,
     kInstallZirconB,
     kInstallZirconR,
     kInstallVbMetaA,
     kInstallVbMetaB,
+    kInstallVbMetaR,
     kInstallDataFile,
     kInstallFvm,
     kWipeFvm,
 };
 
-// Architecture of device being paved. Used for payload validation.
-enum class Arch {
-    X64,
-    ARM64,
-};
-
 struct Flags {
     Command cmd = Command::kUnknown;
-    Arch arch = Arch::X64;
     bool force = false;
     fbl::unique_fd payload_fd;
     char* path = nullptr;
diff --git a/zircon/system/ulib/paver/paver.cpp b/zircon/system/ulib/paver/paver.cpp
index 1a34d1f5e3da576f1126f6c65bde7344ee1cc827..aecbfaf536c137098c9ce673f492c1806cc7ddf2 100644
--- a/zircon/system/ulib/paver/paver.cpp
+++ b/zircon/system/ulib/paver/paver.cpp
@@ -59,10 +59,6 @@ static Partition PartitionType(const Command command) {
     switch (command) {
     case Command::kInstallBootloader:
         return Partition::kBootloader;
-    case Command::kInstallEfi:
-        return Partition::kEfi;
-    case Command::kInstallKernc:
-        return Partition::kKernelC;
     case Command::kInstallZirconA:
         return Partition::kZirconA;
     case Command::kInstallZirconB:
@@ -73,6 +69,8 @@ static Partition PartitionType(const Command command) {
         return Partition::kVbMetaA;
     case Command::kInstallVbMetaB:
         return Partition::kVbMetaB;
+    case Command::kInstallVbMetaR:
+        return Partition::kVbMetaR;
     case Command::kInstallFvm:
         return Partition::kFuchsiaVolumeManager;
     default:
@@ -352,6 +350,7 @@ zx_status_t WriteVmoToSkipBlock(const zx::vmo& vmo, size_t vmo_size, const fzl::
     return ZX_OK;
 }
 
+#if 0
 // Checks first few bytes of buffer to ensure it is a ZBI.
 // Also validates architecture in kernel header matches the target.
 bool ValidateKernelZbi(const uint8_t* buffer, size_t size, Arch arch) {
@@ -409,6 +408,7 @@ zx_status_t ValidateKernelPayload(const fzl::ResizeableVmoMapper& mapper, size_t
 
     return ZX_OK;
 }
+#endif
 
 // Attempt to bind an FVM driver to a partition fd.
 fbl::unique_fd TryBindToFvmDriver(const fbl::unique_fd& partition_fd, zx::duration timeout) {
@@ -948,8 +948,8 @@ zx_status_t FvmStreamPartitions(fbl::unique_fd partition_fd, fbl::unique_fd src_
 }
 
 // Paves an image onto the disk.
-zx_status_t PartitionPave(fbl::unique_ptr<DevicePartitioner> partitioner, fbl::unique_fd payload_fd,
-                          Partition partition_type, Arch arch) {
+zx_status_t PartitionPave(fbl::unique_ptr<DevicePartitioner> partitioner,
+                          fbl::unique_fd payload_fd, Partition partition_type) {
     LOG("Paving partition.\n");
 
     zx_status_t status;
@@ -1010,10 +1010,6 @@ zx_status_t PartitionPave(fbl::unique_ptr<DevicePartitioner> partitioner, fbl::u
         ERROR("Failed to stream partition to VMO\n");
         return status;
     }
-    if ((status = ValidateKernelPayload(mapper, payload_size, partition_type, arch)) != ZX_OK) {
-        ERROR("Failed to validate partition\n");
-        return status;
-    }
     if (partitioner->UseSkipBlockInterface()) {
         fzl::FdioCaller caller(std::move(partition_fd));
         status = WriteVmoToSkipBlock(mapper.vmo(), payload_size, caller, block_size_bytes);
@@ -1185,45 +1181,19 @@ zx_status_t RealMain(Flags flags) {
         ERROR("Unable to initialize a partitioner.");
         return ZX_ERR_BAD_STATE;
     }
-    const bool is_cros_device = device_partitioner->IsCros();
-
     switch (flags.cmd) {
     case Command::kWipeFvm:
         return device_partitioner->WipeFvm();
     case Command::kInstallFvm:
     case Command::kInstallVbMetaA:
     case Command::kInstallVbMetaB:
-        break;
-    case Command::kInstallBootloader:
-        if (flags.arch == Arch::X64 && !flags.force) {
-            LOG("SKIPPING BOOTLOADER install on x64 device, pass --force if desired.\n");
-            Drain(std::move(flags.payload_fd));
-            return ZX_OK;
-        }
-        break;
-    case Command::kInstallEfi:
-        if ((is_cros_device || flags.arch == Arch::ARM64) && !flags.force) {
-            LOG("SKIPPING EFI install on ARM64/CROS device, pass --force if desired.\n");
-            Drain(std::move(flags.payload_fd));
-            return ZX_OK;
-        }
-        break;
-    case Command::kInstallKernc:
-        if (!is_cros_device && !flags.force) {
-            LOG("SKIPPING KERNC install on non-CROS device, pass --force if desired.\n");
-            Drain(std::move(flags.payload_fd));
-            return ZX_OK;
-        }
-        break;
+    case Command::kInstallVbMetaR:
     case Command::kInstallZirconA:
     case Command::kInstallZirconB:
     case Command::kInstallZirconR:
-        if (is_cros_device && !flags.force) {
-            LOG("SKIPPING Zircon-{A/B/R} install on CROS device, pass --force if desired.\n");
-            Drain(std::move(flags.payload_fd));
-            return ZX_OK;
-        }
-        break;
+    case Command::kInstallBootloader:
+      return PartitionPave(std::move(device_partitioner), std::move(flags.payload_fd),
+                           PartitionType(flags.cmd));
     case Command::kInstallDataFile:
         return DataFilePave(std::move(device_partitioner), std::move(flags.payload_fd), flags.path);
 
@@ -1231,8 +1201,6 @@ zx_status_t RealMain(Flags flags) {
         ERROR("Unsupported command.");
         return ZX_ERR_NOT_SUPPORTED;
     }
-    return PartitionPave(std::move(device_partitioner), std::move(flags.payload_fd),
-                         PartitionType(flags.cmd), flags.arch);
 }
 
 } //  namespace paver
diff --git a/zircon/system/ulib/paver/test/device-partitioner-test.cpp b/zircon/system/ulib/paver/test/device-partitioner-test.cpp
index ca8826586ba7a9303a5e1769d5a37de0b70feb49..6a4bfaa3a9aa04ac3c3d01df7a2f3737a7fed9be 100644
--- a/zircon/system/ulib/paver/test/device-partitioner-test.cpp
+++ b/zircon/system/ulib/paver/test/device-partitioner-test.cpp
@@ -325,17 +325,6 @@ END_TEST_CASE(CrosDevicePartitionerTests)
 namespace fixed {
 namespace {
 
-bool IsCrosTest() {
-    BEGIN_TEST;
-
-    fbl::unique_fd dev_fs(open("/dev", O_RDWR));
-    fbl::unique_ptr<paver::DevicePartitioner> partitioner;
-    ASSERT_EQ(paver::FixedDevicePartitioner::Initialize(std::move(dev_fs), &partitioner), ZX_OK);
-    ASSERT_FALSE(partitioner->IsCros());
-
-    END_TEST;
-}
-
 bool UseBlockInterfaceTest() {
     BEGIN_TEST;
 
@@ -457,7 +446,6 @@ bool GetBlockSizeTest() {
 } // namespace fixed
 
 BEGIN_TEST_CASE(FixedDevicePartitionerTests)
-RUN_TEST(fixed::IsCrosTest)
 RUN_TEST(fixed::UseBlockInterfaceTest)
 RUN_TEST(fixed::AddPartitionTest)
 RUN_TEST(fixed::WipeFvmTest)
@@ -469,21 +457,6 @@ END_TEST_CASE(FixedDevicePartitionerTests)
 namespace skipblock {
 namespace {
 
-bool IsCrosTest() {
-    BEGIN_TEST;
-
-    ASSERT_TRUE(Initialize());
-    fbl::unique_ptr<SkipBlockDevice> device;
-    ASSERT_TRUE(SkipBlockDevice::Create(&device));
-
-    fbl::unique_ptr<paver::DevicePartitioner> partitioner;
-    ASSERT_EQ(paver::SkipBlockDevicePartitioner::Initialize(device->devfs_root(), &partitioner),
-              ZX_OK);
-    ASSERT_FALSE(partitioner->IsCros());
-
-    END_TEST;
-}
-
 bool UseSkipBlockInterfaceTest() {
     BEGIN_TEST;
 
@@ -621,7 +594,6 @@ bool GetBlockSizeTest() {
 } // namespace skipblock
 
 BEGIN_TEST_CASE(SkipBlockDevicePartitionerTests)
-RUN_TEST(skipblock::IsCrosTest)
 RUN_TEST(skipblock::UseSkipBlockInterfaceTest)
 RUN_TEST(skipblock::AddPartitionTest)
 RUN_TEST(skipblock::WipeFvmTest)