diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
index f6051a3e9fda0f7ddfa9208c89d51fa5b9309886..6df27d94ac810deee88791310b9038584f22e625 100644
--- a/.github/workflows/python.yml
+++ b/.github/workflows/python.yml
@@ -22,7 +22,7 @@ jobs:
       - name: Install dependencies
         run: |
           python -m pip install --upgrade pip setuptools wheel
-          pip install tockloader pylint
+          pip install 'tockloader~=1.4' pylint
       - name: Register matcher
         run: echo ::add-matcher::./.github/python_matcher.json
       - name: Test code with pylint
@@ -39,8 +39,8 @@ jobs:
       - name: Install dependencies
         run: |
           python -m pip install --upgrade pip setuptools wheel
-          pip install yapf tockloader
+          pip install 'yapf>=0.30.0' tockloader
       - name: Test code formatting with yapf
         run: |
           echo ::add-matcher::./.github/python_matcher.json
-          yapf --style=chromium --recursive --exclude third_party --diff .
+          yapf --style=yapf --recursive --exclude third_party --diff .
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 16666833b87006eea09cefb03bbb9a602a18b45e..138097a22a8cc2816c4ce20f07e79766ea0be980 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -15,7 +15,7 @@
   // Try to make VSCode formating as close as possible to the Google style.
   "python.formatting.provider": "yapf",
   "python.formatting.yapfArgs": [
-    "--style=chromium"
+    "--style=yapf"
   ],
   "python.linting.enabled": true,
   "python.linting.lintOnSave": true,
diff --git a/deploy.py b/deploy.py
index e9e599d967286bb319a7cc4acbe727fd770ef472..89921ca41cbff888f5f562e57a1a8ba0312d80c5 100755
--- a/deploy.py
+++ b/deploy.py
@@ -29,6 +29,7 @@ import sys
 
 import colorama
 from six.moves import input
+import tockloader
 from tockloader import tab
 from tockloader import tbfh
 from tockloader import tockloader as loader
@@ -252,12 +253,16 @@ class OpenSKInstaller:
         board=self.args.board,
         debug=False,
         force=False,
+        jlink_cmd="JLinkExe",
         jlink=self.args.programmer == "jlink",
         jlink_device=board.jlink_device,
         jlink_if=board.jlink_if,
         jlink_speed=1200,
         openocd=self.args.programmer == "openocd",
         openocd_board=board.openocd_board,
+        openocd_cmd="openocd",
+        openocd_commands=copy.copy(board.openocd_commands),
+        openocd_options=copy.copy(board.openocd_options),
         jtag=False,
         no_bootloader_entry=False,
         page_size=board.page_size,
@@ -291,8 +296,8 @@ class OpenSKInstaller:
       # empty value.
       target_toolchain.append("")
     current_version = self.checked_command_output(["rustc", "--version"])
-    if not all((target_toolchain[0] in current_version,
-                target_toolchain[1] in current_version)):
+    if not (target_toolchain[0] in current_version and
+            target_toolchain[1] in current_version):
       info("Updating rust toolchain to {}".format("-".join(target_toolchain)))
       # Need to update
       self.checked_command_output(
@@ -399,7 +404,7 @@ class OpenSKInstaller:
     setattr(args, "make", False)
     setattr(args, "no_replace", False)
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     tabs = [tab.TAB(tab_filename)]
     try:
       tock.install(tabs, replace="yes", erase=args.erase)
@@ -428,7 +433,7 @@ class OpenSKInstaller:
     args = copy.copy(self.tockloader_default_args)
     setattr(args, "address", board_props.app_address)
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     try:
       tock.flash_binary(kernel, board_props.kernel_address)
     except TockLoaderException as e:
@@ -441,7 +446,7 @@ class OpenSKInstaller:
     args = copy.copy(self.tockloader_default_args)
     setattr(args, "address", board_props.padding_address)
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     try:
       tock.flash_binary(padding, args.address)
     except TockLoaderException as e:
@@ -451,11 +456,14 @@ class OpenSKInstaller:
     args = copy.copy(self.tockloader_default_args)
     board_props = SUPPORTED_BOARDS[self.args.board]
     setattr(args, "app_address", board_props.app_address)
+    # Ensure we don't force erase all apps but only the apps starting
+    # at `board.app_address`. This makes sure we don't erase the padding.
+    setattr(args, "force", False)
     info("Erasing all installed applications")
     tock = loader.TockLoader(args)
-    tock.open(args)
+    tock.open()
     try:
-      tock.erase_apps(False)
+      tock.erase_apps()
     except TockLoaderException as e:
       # Erasing apps is not critical
       info(("A non-critical error occurred while erasing "
@@ -467,6 +475,7 @@ class OpenSKInstaller:
       return False
     args = copy.copy(self.tockloader_default_args)
     tock = loader.TockLoader(args)
+    tock.open()
     app_found = False
     with tock._start_communication_with_board():
       apps = [app.name for app in tock._extract_all_app_headers()]
@@ -515,6 +524,10 @@ class OpenSKInstaller:
     final_hex.tofile(dest_file, format="hex")
 
   def check_prerequisites(self):
+    if not tockloader.__version__.startswith("1.4."):
+      fatal(("Your version of tockloader seems incompatible: found {}, "
+             "expected 1.4.x.".format(tockloader.__version__)))
+
     if self.args.programmer == "jlink":
       assert_mandatory_binary("JLinkExe")
 
diff --git a/setup.sh b/setup.sh
index c4297adc9ccae692ed06aa5e588285e7a1046129..439003b05d72e42d7f1ef4cd92fce609c665d07e 100755
--- a/setup.sh
+++ b/setup.sh
@@ -86,7 +86,7 @@ source tools/gen_key_materials.sh
 generate_crypto_materials N
 
 rustup install $(head -n 1 rust-toolchain)
-pip3 install --user --upgrade tockloader six intelhex
+pip3 install --user --upgrade 'tockloader~=1.4' six intelhex
 rustup target add thumbv7em-none-eabi
 
 # Install dependency to create applications.
diff --git a/third_party/tock b/third_party/tock
index ba44dd690f2db52ab9c928975f85c34c1c6f5bea..f1f9d717a4d9b5ae934a3b50ce6a18e6dff3e7c7 160000
--- a/third_party/tock
+++ b/third_party/tock
@@ -1 +1 @@
-Subproject commit ba44dd690f2db52ab9c928975f85c34c1c6f5bea
+Subproject commit f1f9d717a4d9b5ae934a3b50ce6a18e6dff3e7c7