diff --git a/PRESUBMIT.cfg b/PRESUBMIT.cfg
deleted file mode 100644
index 9e173e4..0000000
--- a/PRESUBMIT.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-[Hook Overrides]
-tab_check: false
-
-[Hook Scripts]
-cros format = cros format --check --exclude "*.xml" --exclude "extra/usb_updater/*.json" --exclude "third_party/*" --commit ${PRESUBMIT_COMMIT}
diff --git a/README.md b/README.md
index a45898d..9225586 100644
--- a/README.md
+++ b/README.md
@@ -1,167 +1,3 @@
 # EC AIC Tester
 
-## Firmware build, flash and debug
-
-The firmware can be built and flashed both with or without the chroot, though
-it's recommended reusing the checkout that is part of a ChromiumOS SDK as that
-includes the necessary configuration to upload changes to Gerrit.
-
-### Chroot build
-
-TODO
-
-### Out of chroot build
-
-This setup reuses the repository that is part of the normal chroot setup, just
-adds a west workspace on top of it, which can coexist with the normal one
-managed with repo.
-
-Venv setup (only needed once)
-
-```
-sudo apt install python3-venv
-python3 -m venv ~/chromiumos/src/platform/ec-aic-tester/.venv
-```
-
-Enter the venv (once before either setting up or building):
-```
-source ~/chromiumos/src/platform/ec-aic-tester/.venv/bin/activate
-```
-
-Initialize the project modules and install dependencies (only needed once):
-
-```
-cd ~/chromiumos/src/platform/ec-aic-tester
-pip install west
-unset ZEPHYR_BASE # only needed if there's other Zephyr checkouts in the system
-west init -l firmware
-west update -o=--depth=1 -n
-pip install -U -r zephyr/scripts/requirements.txt
-west sdk install -t arm-zephyr-eabi
-sudo apt install cmake ninja-build ccache dfu-util
-```
-
-Build and flash:
-
-```
-cd ~/chromiumos/src/platform/ec-aic-tester
-west update # only needed if there was a breaking change in the modules
-west build firmware
-west flash
-```
-
-### Build without a ChromiumOS SDK
-
-It's possible to build, flash and debug the firmware without the whole
-chromiumos checkout, in that case just pick an arbitrary directory as a
-workspace instead of `~/chromiumos/src/platform/ec-aic-tester` and initialize
-it with `west init --mf firmware/west.yml -m
-https://chromium.googlesource.com/chromiumos/platform/ec-aic-tester`, the rest
-of the process it the same.
-
-This setup takes less disk space, but results in a checkout with no tools to
-upload changelists.
-
-### Using the usptream repositories instead of chromium mirrored ones
-
-The project is setup to use the chromium mirror of Zephyr and modules, but can
-also be built against the upstream repositories directly. To do that use the
-`west-upstream.yml` manifest when initializing the west workspace, for example
-
-```
-west init -l firmware --mf west-upstream.yml
-```
-
-### Build with a standalone full Zephyr checkout
-
-The firmware can be built against an existing Zephyr project checkout, in that
-case follow the project [Getting Started
-Guide](https://docs.zephyrproject.org/latest/getting_started/index.html), make
-sure that the `ZEPHYR_BASE` variable is set and run `west build` from the
-project `firwmare` directory.
-
-### Available runners
-
-There's multiple options for flashing and debugging the board firmware,
-depending on what's hardware is available.
-
-#### USB-DFU
-
-Just for flashing, uses the embedded USB DFU bootloader, requires no additional
-hardware. Put the board in DFU mode (press NRST while holding the BOOT0 button)
-and then run:
-
-```
-west flash -r dfu-util
-```
-
-NOTE: flashing with dfu-util normally fails in an error and requires a manual
-reset of the board
-
-#### JLink
-
-JLink can be used for both flahing and debugging, requires the [J-Link Software](https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack) installed.
-
-Flash with:
-
-```
-west flash -r jlink
-```
-
-or start a debugging session with
-
-```
-west debug -r jlink
-```
-
-#### ST-LINK
-
-ST-LINK requires the [STM32CubeProgrammer host
-tools](https://docs.zephyrproject.org/latest/develop/flash_debug/host-tools.html#stm32cubeprogrammer-flash-host-tools).
-
-Flash with:
-
-```
-west flash -r stm32cubeprogrammer
-```
-
-or
-
-```
-west flash -r openocd
-```
-
-or start a debugging session with
-
-```
-west debug -r stm32cubeprogrammer
-```
-
-or
-
-```
-west debug -r openocd
-```
-
-## Flashing the AIC board
-
-### ITE
-
-```
-zmake build ite-aic
-itecomdbgr -f build/zephyr/ite-aic/output/ec.bin -d /dev/ttyACM1
-# reset the ec (ec reset)
-```
-
-### NPCX
-
-Assuming the tester shell is on /dev/ttyACM0 and the EC on /dev/ttyACM1, from
-the chroot in the EC directory:
-
-```
-zmake build npcx-aic
-# power on the ec (ec power on) enter bootloader mode (npcx_boot) on the tester shell
-uartupdatetool --port=ttyACM1 --baudrate=115200 --opr=wr --addr=0x200C3020 --file build/zephyr/npcx-aic/output/npcx_monitor.bin
-uartupdatetool --port=ttyACM1 --baudrate=115200 --opr=wr --auto --offset=0 --file build/zephyr/npcx-aic/output/ec.bin
-# reset the ec (ec reset)
-```
+Moved to https://chromium.googlesource.com/chromiumos/platform/dagwood
diff --git a/firmware/CMakeLists.txt b/firmware/CMakeLists.txt
deleted file mode 100644
index cd6e142..0000000
--- a/firmware/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-cmake_minimum_required(VERSION 3.20.0)
-
-set(BOARD_ROOT ${CMAKE_CURRENT_LIST_DIR})
-set(BOARD ec_aic_tester)
-
-find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
-project(ec-aic-tester)
-
-zephyr_include_directories(include)
-
-target_sources(app PRIVATE
-	src/ec.c
-	src/main.c
-	src/usbd.c
-)
-
-target_sources_ifdef(CONFIG_DT_HAS_ZEPHYR_UART_BRIDGE_ENABLED app PRIVATE src/uart-bridge.c)
-target_sources_ifdef(CONFIG_DT_HAS_CROS_NPCX_BOOT_ENABLED app PRIVATE src/npcx_boot.c)
-target_sources_ifdef(CONFIG_I2C_EEPROM_TARGET app PRIVATE src/i2c_target.c)
-target_sources_ifdef(CONFIG_DT_HAS_CROS_I2C_MUX_ENABLED app PRIVATE src/i2c_mux.c)
-
-zephyr_linker_sources(ROM_SECTIONS src/usb_request.ld)
diff --git a/firmware/boards/google/ec_aic_tester/Kconfig.ec_aic_tester b/firmware/boards/google/ec_aic_tester/Kconfig.ec_aic_tester
deleted file mode 100644
index 81eb913..0000000
--- a/firmware/boards/google/ec_aic_tester/Kconfig.ec_aic_tester
+++ /dev/null
@@ -1,6 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-config BOARD_EC_AIC_TESTER
-	select SOC_STM32H743XX
diff --git a/firmware/boards/google/ec_aic_tester/board.cmake b/firmware/boards/google/ec_aic_tester/board.cmake
deleted file mode 100644
index 77e4628..0000000
--- a/firmware/boards/google/ec_aic_tester/board.cmake
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-board_runner_args(jlink "--device=STM32H743ZG" "--speed=4000")
-board_runner_args(pyocd "--target=stm32h743zgtx")
-board_runner_args(openocd --cmd-post-verify "reset halt")
-board_runner_args(openocd --target-handle=_CHIPNAME.cpu0)
-board_runner_args(stm32cubeprogrammer "--port=swd" "--reset-mode=hw")
-board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
-
-include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
-include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
-include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
-include(${ZEPHYR_BASE}/boards/common/stm32cubeprogrammer.board.cmake)
-include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
diff --git a/firmware/boards/google/ec_aic_tester/board.yml b/firmware/boards/google/ec_aic_tester/board.yml
deleted file mode 100644
index 665d5d9..0000000
--- a/firmware/boards/google/ec_aic_tester/board.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-board:
-  name: ec_aic_tester
-  full_name: EC AIC Tester
-  vendor: google
-  socs:
-    - name: stm32h743xx
diff --git a/firmware/boards/google/ec_aic_tester/ec_aic_tester.dts b/firmware/boards/google/ec_aic_tester/ec_aic_tester.dts
deleted file mode 100644
index a5e247b..0000000
--- a/firmware/boards/google/ec_aic_tester/ec_aic_tester.dts
+++ /dev/null
@@ -1,331 +0,0 @@
-/* Copyright 2024 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/dts-v1/;
-#include <st/h7/stm32h743Xg.dtsi>
-#include <st/h7/stm32h743bgtx-pinctrl.dtsi>
-#include <zephyr/dt-bindings/input/input-event-codes.h>
-
-/ {
-	model = "Google EC AIC Tester";
-	compatible = "google,ec-aic-tester";
-
-	chosen {
-		/* change to &usart1 to move the shell to J3/J4 */
-		zephyr,console = &cdc_acm_uart_shell;
-		zephyr,shell-uart = &cdc_acm_uart_shell;
-		zephyr,sram = &sram0;
-		zephyr,flash = &flash0;
-		zephyr,dtcm = &dtcm;
-	};
-
-	leds {
-		compatible = "gpio-leds";
-		status_led: mcu_pb02 {
-			gpios = <&gpiob 2 GPIO_ACTIVE_HIGH>;
-		};
-	};
-
-	gpio_keys: gpio-keys {
-		compatible = "gpio-keys";
-		user_button: mcu_pb01 {
-			gpios = <&gpiob 1 GPIO_ACTIVE_LOW>;
-			zephyr,code = <INPUT_KEY_0>;
-		};
-	};
-
-	aliases {
-		led0 = &status_led;
-		sw0 = &user_button;
-		watchdog0 = &iwdg;
-		die-temp0 = &die_temp;
-	};
-
-	uart_bridge: uart-bridge {
-		compatible = "zephyr,uart-bridge";
-		usb {
-			device = <&cdc_acm_uart_ec>;
-			transfer-size = <64>;
-		};
-		uart {
-			device = <&uart4>;
-			transfer-size = <1>;
-		};
-	};
-
-	pp3300_mecc_core: pp3300_mecc_core {
-		compatible = "regulator-fixed";
-		regulator-name = "pp3300_mecc_core";
-		enable-gpios = <&gpiob 8 GPIO_ACTIVE_HIGH>;
-	};
-
-	pp3300_mecc_z: pp3300_mecc_z {
-		compatible = "regulator-fixed";
-		regulator-name = "pp3300_mecc_z";
-		enable-gpios = <&gpiob 9 GPIO_ACTIVE_HIGH>;
-	};
-
-	pp3300_mecc_s: pp3300_mecc_s {
-		compatible = "regulator-fixed";
-		regulator-name = "pp3300_mecc_s";
-		enable-gpios = <&gpiob 10 GPIO_ACTIVE_HIGH>;
-	};
-
-	ppvar_mecc_vref: ppvar_mecc_vref {
-		compatible = "regulator-fixed";
-		regulator-name = "ppvar_mecc_vref";
-		enable-gpios = <&gpiob 11 GPIO_ACTIVE_HIGH>;
-	};
-
-	pp1800_mecc_z: pp1800_mecc_z {
-		compatible = "regulator-fixed";
-		regulator-name = "pp1800_mecc_z";
-		enable-gpios = <&gpiob 12 GPIO_ACTIVE_HIGH>;
-	};
-
-	pp1800_mecc_s: pp1800_mecc_s {
-		compatible = "regulator-fixed";
-		regulator-name = "pp1800_mecc_s";
-		enable-gpios = <&gpiob 13 GPIO_ACTIVE_HIGH>;
-	};
-
-	pp5000_mecc_z: pp5000_mecc_z {
-		compatible = "regulator-fixed";
-		regulator-name = "pp5000_mecc_z";
-		enable-gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>;
-	};
-
-	ppvar_mecc_rtc: ppvar_mecc_rtc {
-		compatible = "regulator-fixed";
-		regulator-name = "ppvar_mecc_rtc";
-		enable-gpios = <&gpiob 15 GPIO_ACTIVE_HIGH>;
-	};
-
-	aic-pins {
-		compatible = "cros,aic-pins";
-		ec-rst-gpios = <&gpioe 3 GPIO_ACTIVE_LOW>;
-		io-gpios = <&gpioc 2 GPIO_ACTIVE_HIGH>, /* CCD_MODE_L */
-			   <&gpioc 4 GPIO_ACTIVE_HIGH>, /* EN_PP5000_FAN */
-			   <&gpioe 13 GPIO_ACTIVE_HIGH>, /* I2C_MECC_PDC4_INT_L */
-
-			   /* TODO: figure out why some signals are not getting
-			    * through on the NPCX AIC board
-			    */
-
-			   /* KSI */
-			   /* <&gpiok 0 GPIO_ACTIVE_HIGH>, */ /* MCU_OUT_KBD_SCANIN_A_ODL */
-			   <&gpiok 1 GPIO_ACTIVE_HIGH>, /* MCU_OUT_KBD_SCANIN_B_ODL */
-			   <&gpiok 2 GPIO_ACTIVE_HIGH>, /* MCU_OUT_KBD_SCANIN_C_ODL */
-			   /* <&gpiok 3 GPIO_ACTIVE_HIGH>, */ /* MCU_OUT_KBD_SCANIN_D_ODL */
-			   <&gpiok 4 GPIO_ACTIVE_HIGH>, /* MCU_OUT_KBD_SCANIN_E_ODL */
-			   <&gpiok 5 GPIO_ACTIVE_HIGH>, /* MCU_OUT_KBD_SCANIN_F_ODL */
-			   <&gpiok 6 GPIO_ACTIVE_HIGH>, /* MCU_OUT_KBD_SCANIN_G_ODL */
-			   <&gpiok 7 GPIO_ACTIVE_HIGH>, /* MCU_OUT_KBD_SCANIN_H_ODL */
-
-			   /* KSO */
-			   /* <&gpioj 0 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_A */
-			   /* <&gpioj 1 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_B */
-			   <&gpioj 2 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_C */
-			   <&gpioj 3 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_D */
-			   <&gpioj 4 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_E */
-			   <&gpioj 5 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_F */
-			   /* <&gpioj 6 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_G */
-			   /* <&gpioj 7 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_H */
-			   /* <&gpioj 8 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_J */
-			   /* <&gpioj 9 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_K */
-			   <&gpioj 10 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_L */
-			   <&gpioj 11 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_M */
-			   <&gpioj 12 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_N */
-			   <&gpioj 13 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_P */
-			   <&gpioj 14 GPIO_ACTIVE_HIGH>, /* MCU_IN_KBD_SCANOUT_Q */
-			   <&gpioj 15 GPIO_ACTIVE_HIGH>; /* MCU_IN_KBD_SCANOUT_R */
-			   /* <&gpioh 3 GPIO_ACTIVE_HIGH>, */ /* MCU_IN_KBD_SCANOUT_S */
-			   /* <&gpioj 4 GPIO_ACTIVE_HIGH>; */ /* MCU_IN_KBD_SCANOUT_T */
-	};
-
-	npcx-boot {
-		compatible = "cros,npcx-boot";
-		npcx-boot-gpios = <&gpioa 1 GPIO_ACTIVE_LOW>;
-		pinctrl-0 = <&pa1_gpio>;
-		pinctrl-1 = <&uart4_rx_pa1>;
-		pinctrl-names = "gpio", "default";
-	};
-
-	i2c-mux-a {
-		compatible = "cros,i2c-mux";
-		en-gpios = <&gpioi 14 GPIO_ACTIVE_HIGH>;
-		a-gpios = <&gpioi 12 GPIO_ACTIVE_HIGH>,
-			  <&gpioi 13 GPIO_ACTIVE_HIGH>;
-		port-count = <4>;
-	};
-
-	i2c-mux-b {
-		compatible = "cros,i2c-mux";
-		en-gpios = <&gpiof 13 GPIO_ACTIVE_HIGH>;
-		a-gpios = <&gpiof 12 GPIO_ACTIVE_HIGH>;
-		port-count = <2>;
-	};
-};
-
-&pinctrl {
-	pa1_gpio: pa1_gpio {
-		pinmux = <STM32_PINMUX('A', 1, GPIO)>;
-	};
-};
-
-&clk_lsi {
-	status = "okay";
-};
-
-&clk_hsi48 {
-	status = "okay";
-};
-
-&clk_hse {
-	clock-frequency = <DT_FREQ_M(48)>;
-	status = "okay";
-};
-
-&pll {
-	div-m = <12>;
-	mul-n = <240>;
-	div-p = <2>;
-	div-q = <2>;
-	div-r = <2>;
-	clocks = <&clk_hse>;
-	status = "okay";
-};
-
-&pll2 {
-	div-m = <24>;
-	mul-n = <120>;
-	div-p = <2>;
-	div-q = <3>;
-	div-r = <2>;
-	clocks = <&clk_hse>;
-	status = "okay";
-};
-
-&rcc {
-	clocks = <&pll>;
-	clock-frequency = <DT_FREQ_M(480)>;
-	d1cpre = <1>;
-	hpre = <2>;
-	d1ppre = <2>;
-	d2ppre1 = <2>;
-	d2ppre2 = <2>;
-	d3ppre = <2>;
-};
-
-/* Debug UART, J3/J4 */
-&usart1 {
-	pinctrl-0 = <&usart1_rx_pb7 &usart1_tx_pb6>;
-	pinctrl-names = "default";
-	current-speed = <115200>;
-	status = "okay";
-};
-
-/* EC UART */
-&uart4 {
-	pinctrl-0 = <&uart4_rx_pa1 &uart4_tx_pa0>;
-	pinctrl-names = "default";
-	current-speed = <115200>;
-	status = "okay";
-};
-
-zephyr_udc0: &usbotg_fs {
-	pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>;
-	pinctrl-names = "default";
-	status = "okay";
-
-	cdc_acm_uart_shell: cdc_acm_uart_shell {
-		compatible = "zephyr,cdc-acm-uart";
-	};
-	cdc_acm_uart_ec: cdc_acm_uart_ec {
-		compatible = "zephyr,cdc-acm-uart";
-	};
-};
-
-&rtc {
-	clocks = <&rcc STM32_CLOCK_BUS_APB4 0x00010000>,
-		 <&rcc STM32_SRC_LSI RTC_SEL(2)>;
-	status = "okay";
-};
-
-/* target interface, connected to the U9 mux */
-&i2c2 {
-	pinctrl-0 = <&i2c2_scl_pf1 &i2c2_sda_pf0>;
-	pinctrl-names = "default";
-	status = "okay";
-	clock-frequency = <I2C_BITRATE_STANDARD>;
-
-	eeprom0: eeprom@50 {
-		reg = <0x50>;
-		size = <256>;
-		compatible = "zephyr,i2c-target-eeprom";
-		status = "okay";
-	};
-};
-
-/* target interface, connected to the U11 mux */
-&i2c4 {
-	pinctrl-0 = <&i2c4_scl_pf14 &i2c4_sda_pf15>;
-	pinctrl-names = "default";
-	status = "okay";
-	clock-frequency = <I2C_BITRATE_STANDARD>;
-
-	eeprom1: eeprom@51 {
-		reg = <0x51>;
-		size = <256>;
-		compatible = "zephyr,i2c-target-eeprom";
-		status = "okay";
-	};
-};
-
-/* connected to J5, QWIIC port */
-&i2c3 {
-	pinctrl-0 = <&i2c3_scl_ph7 &i2c3_sda_ph8>;
-	pinctrl-names = "default";
-	status = "okay";
-	clock-frequency = <I2C_BITRATE_FAST>;
-};
-
-&adc1 {
-	pinctrl-0 = <&adc1_inp15_pa3>;
-	pinctrl-names = "default";
-	st,adc-clock-source = "SYNC";
-	st,adc-prescaler = <4>;
-	status = "okay";
-};
-
-&die_temp {
-	status = "okay";
-};
-
-&adc3 {
-	pinctrl-0 = <&adc3_inp5_pf3>;
-	pinctrl-names = "default";
-	st,adc-clock-source = "SYNC";
-	st,adc-prescaler = <4>;
-	status = "okay";
-};
-
-&dac1 {
-	status = "okay";
-	pinctrl-0 = <&dac1_out1_pa4 &dac1_out2_pa5>;
-	pinctrl-names = "default";
-};
-
-&rng {
-	status = "okay";
-};
-
-&backup_sram {
-	status = "okay";
-};
-
-&iwdg1 {
-	status = "okay";
-};
diff --git a/firmware/boards/google/ec_aic_tester/ec_aic_tester_defconfig b/firmware/boards/google/ec_aic_tester/ec_aic_tester_defconfig
deleted file mode 100644
index 50e8c05..0000000
--- a/firmware/boards/google/ec_aic_tester/ec_aic_tester_defconfig
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-CONFIG_ARM_MPU=y
-CONFIG_HW_STACK_PROTECTION=y
-CONFIG_SERIAL=y
-CONFIG_CONSOLE=y
-CONFIG_UART_CONSOLE=y
-CONFIG_GPIO=y
diff --git a/firmware/boards/google/ec_aic_tester/support/openocd.cfg b/firmware/boards/google/ec_aic_tester/support/openocd.cfg
deleted file mode 100644
index 8f350be..0000000
--- a/firmware/boards/google/ec_aic_tester/support/openocd.cfg
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2023 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-source [find board/st_nucleo_h743zi.cfg]
-
-reset_config srst_only srst_nogate connect_assert_srst
-
-$_CHIPNAME.cpu0 configure -event gdb-attach {
-        echo "Debugger attaching: halting execution"
-        gdb_breakpoint_override hard
-}
-
-$_CHIPNAME.cpu0 configure -event gdb-detach {
-        echo "Debugger detaching: resuming execution"
-        resume
-}
-
-# Due to the use of connect_assert_srst, running gdb requires
-# to reset halt just after openocd init.
-rename init old_init
-proc init {} {
-	old_init
-	reset halt
-}
diff --git a/firmware/dts/bindings/cros,aic-pins.yaml b/firmware/dts/bindings/cros,aic-pins.yaml
deleted file mode 100644
index ab14aa4..0000000
--- a/firmware/dts/bindings/cros,aic-pins.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2025 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-description: |
-  Various pin definitions for the AIC tester board.
-
-compatible: "cros,aic-pins"
-
-properties:
-  ec-rst-gpios:
-    type: phandle-array
-    required: true
-
-  io-gpios:
-    type: phandle-array
-    required: true
diff --git a/firmware/dts/bindings/cros,i2c-mux.yaml b/firmware/dts/bindings/cros,i2c-mux.yaml
deleted file mode 100644
index 06c077c..0000000
--- a/firmware/dts/bindings/cros,i2c-mux.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2025 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-description: |
-  I2C multiplexer device
-
-compatible: "cros,i2c-mux"
-
-properties:
-  en-gpios:
-    type: phandle-array
-    required: true
-    description: GPIO connected to the enable pin
-
-  a-gpios:
-    type: phandle-array
-    required: true
-    description: GPIOs connected to the A* pins
-
-  port-count:
-    type: int
-    required: true
-    description: Number of ports used in the multiplexer
diff --git a/firmware/dts/bindings/cros,npcx-boot.yaml b/firmware/dts/bindings/cros,npcx-boot.yaml
deleted file mode 100644
index 5f5eef1..0000000
--- a/firmware/dts/bindings/cros,npcx-boot.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2025 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-description: |
-  Support data to reset an NPCX chip in bootloader mode.
-
-compatible: "cros,npcx-boot"
-
-include: pinctrl-device.yaml
-
-properties:
-  pinctrl-0:
-    required: true
-
-  pinctrl-1:
-    required: true
-
-  pinctrl-names:
-    required: true
-
-  npcx-boot-gpios:
-    type: phandle-array
-    required: true
diff --git a/firmware/dts/bindings/zephyr,uart-bridge.yaml b/firmware/dts/bindings/zephyr,uart-bridge.yaml
deleted file mode 100644
index 22a58e1..0000000
--- a/firmware/dts/bindings/zephyr,uart-bridge.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-description: |
-  UART bridge
-
-  Bridges data from two serial devices, for example a USB CDC-ACM serial port
-  and an hardware UART.
-
-  The device node must have exactly two child nodes for the two devices to be
-  bridged together. Example configuration:
-
-  uart-bridge {
-           compatible = "zephyr,uart-bridge";
-           usb {
-                   device = <&cdc_acm_uart_ec>;
-                   transfer-size = <64>;
-           };
-           uart {
-                   device = <&uart4>;
-                   transfer-size = <1>;
-           };
-   };
-
-compatible: "zephyr,uart-bridge"
-
-child-binding:
-  description: Peer device node
-  properties:
-    device:
-      type: phandle
-      description: |
-        Phandle of a serial device.
-
-    transfer-size:
-      type: int
-      description: |
-        The maximum number of bytes to try and transfer to the device in one
-        go.
diff --git a/firmware/prj.conf b/firmware/prj.conf
deleted file mode 100644
index b420901..0000000
--- a/firmware/prj.conf
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-CONFIG_GPIO=y
-CONFIG_LOG=y
-CONFIG_LOG_PROCESS_THREAD_SLEEP_MS=100
-CONFIG_DEBUG_THREAD_INFO=y
-CONFIG_COMPILER_TRACK_MACRO_EXPANSION=n
-CONFIG_APPLICATION_DEFINED_SYSCALL=y
-
-# USB
-CONFIG_USB_DEVICE_STACK=n
-CONFIG_USB_DEVICE_STACK_NEXT=y
-CONFIG_USBD_CDC_ACM_CLASS=y
-CONFIG_UART_LINE_CTRL=y
-CONFIG_UDC_DRIVER_LOG_LEVEL_WRN=y
-CONFIG_USBD_CDC_ACM_LOG_LEVEL_OFF=y
-CONFIG_USBD_LOG_LEVEL_WRN=y
-
-# I2C
-CONFIG_I2C_TARGET=y
-CONFIG_I2C_EEPROM_TARGET=y
-
-# Subsystems
-CONFIG_SHELL=y
-CONFIG_I2C=y
-CONFIG_LED=y
-CONFIG_INPUT=y
-CONFIG_REGULATOR=y
-CONFIG_DAC=y
-
-# Shell commands
-CONFIG_GPIO_SHELL=y
-CONFIG_I2C_SHELL=y
-CONFIG_LED_SHELL=y
-CONFIG_REGULATOR_SHELL=y
-CONFIG_DAC_SHELL=y
-CONFIG_INPUT_SHELL=y
-CONFIG_INPUT_EVENT_DUMP=y
-
-CONFIG_SHELL_PROMPT_UART="ec-aic-tester:~$ "
diff --git a/firmware/src/ec.c b/firmware/src/ec.c
deleted file mode 100644
index 07285e4..0000000
--- a/firmware/src/ec.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#define DT_DRV_COMPAT cros_aic_pins
-
-#include "ec.h"
-#include "usb_request.h"
-
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/regulator.h>
-#include <zephyr/input/input.h>
-#include <zephyr/kernel.h>
-#include <zephyr/logging/log.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/sys/util.h>
-
-LOG_MODULE_REGISTER(ec, LOG_LEVEL_INF);
-
-BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
-	     "only one 'cros,aic-pins' compatible node may be present");
-
-static const struct gpio_dt_spec ec_rst_gpio =
-	GPIO_DT_SPEC_INST_GET(0, ec_rst_gpios);
-
-static const struct gpio_dt_spec ec_io_gpio[] = { DT_INST_FOREACH_PROP_ELEM_SEP(
-	0, io_gpios, GPIO_DT_SPEC_GET_BY_IDX, (, )) };
-
-static const struct device *reg_pp3300_mecc_core =
-	DEVICE_DT_GET(DT_NODELABEL(pp3300_mecc_core));
-static const struct device *reg_pp3300_mecc_z =
-	DEVICE_DT_GET(DT_NODELABEL(pp3300_mecc_z));
-static const struct device *reg_pp3300_mecc_s =
-	DEVICE_DT_GET(DT_NODELABEL(pp3300_mecc_s));
-static const struct device *reg_ppvar_mecc_vref =
-	DEVICE_DT_GET(DT_NODELABEL(ppvar_mecc_vref));
-static const struct device *reg_pp1800_mecc_z =
-	DEVICE_DT_GET(DT_NODELABEL(pp1800_mecc_z));
-static const struct device *reg_pp1800_mecc_s =
-	DEVICE_DT_GET(DT_NODELABEL(pp1800_mecc_s));
-static const struct device *reg_pp5000_mecc_z =
-	DEVICE_DT_GET(DT_NODELABEL(pp5000_mecc_z));
-static const struct device *reg_ppvar_mecc_rtc =
-	DEVICE_DT_GET(DT_NODELABEL(ppvar_mecc_rtc));
-
-static bool ec_power_enabled;
-
-static void ec_power(bool enable)
-{
-	if (enable) {
-		regulator_enable(reg_pp3300_mecc_core);
-		regulator_enable(reg_pp3300_mecc_z);
-		regulator_enable(reg_pp3300_mecc_s);
-		regulator_enable(reg_ppvar_mecc_vref);
-		regulator_enable(reg_pp1800_mecc_z);
-		regulator_enable(reg_pp1800_mecc_s);
-		regulator_enable(reg_pp5000_mecc_z);
-		regulator_enable(reg_ppvar_mecc_rtc);
-	} else {
-		regulator_disable(reg_ppvar_mecc_rtc);
-		regulator_disable(reg_pp5000_mecc_z);
-		regulator_disable(reg_pp1800_mecc_s);
-		regulator_disable(reg_pp1800_mecc_z);
-		regulator_disable(reg_ppvar_mecc_vref);
-		regulator_disable(reg_pp3300_mecc_s);
-		regulator_disable(reg_pp3300_mecc_z);
-		regulator_disable(reg_pp3300_mecc_core);
-	}
-
-	ec_power_enabled = enable;
-}
-
-static void button_input_cb(struct input_event *evt, void *user_data)
-{
-	if (evt->type != INPUT_EV_KEY) {
-		return;
-	}
-
-	if (!evt->value) {
-		return;
-	}
-
-	switch (evt->code) {
-	case INPUT_KEY_0:
-		ec_power(!ec_power_enabled);
-		break;
-	default:
-		LOG_WRN("unknown code: %d", evt->code);
-	}
-}
-
-INPUT_CALLBACK_DEFINE(DEVICE_DT_GET(DT_NODELABEL(gpio_keys)), button_input_cb,
-		      NULL);
-
-static int expect_pin(const struct shell *sh, uint8_t i)
-{
-	/* TODO: make it work with more than 32 pins */
-	uint32_t state = 0;
-	uint32_t expect = BIT(i);
-
-	for (uint8_t j = 0; j < ARRAY_SIZE(ec_io_gpio); j++) {
-		const struct gpio_dt_spec *gpio = &ec_io_gpio[j];
-		int val;
-
-		val = gpio_pin_get_dt(gpio);
-		if (val) {
-			state |= BIT(j);
-		}
-	}
-
-	if (state != expect) {
-		shell_print(sh, "unexpected state (%d) %08x != %08x", i, state,
-			    expect);
-		return -1;
-	}
-
-	shell_info(sh, "match state (%d) %08x", i, state);
-	return 0;
-}
-
-#define IO_SWEEP_TIMEOUT_MS 5000
-
-static int cmd_io_sweep(const struct shell *sh, size_t argc, char **argv)
-{
-	uint64_t start_time;
-	int ret;
-
-	for (uint8_t i = 0; i < ARRAY_SIZE(ec_io_gpio); i++) {
-		const struct gpio_dt_spec *gpio = &ec_io_gpio[i];
-
-		ret = gpio_pin_configure_dt(gpio, GPIO_INPUT);
-		if (ret < 0) {
-			LOG_ERR("gpio configuration failed: %d", ret);
-			return ret;
-		}
-	}
-
-	start_time = k_uptime_get();
-	for (uint8_t i = 0; i < ARRAY_SIZE(ec_io_gpio); i++) {
-		while (true) {
-			if (k_uptime_get() - start_time > IO_SWEEP_TIMEOUT_MS) {
-				goto timeout;
-			}
-
-			ret = expect_pin(sh, i);
-			if (ret < 0) {
-				k_sleep(K_MSEC(100));
-				continue;
-			}
-			break;
-		}
-	}
-
-	shell_info(sh, "sweep matched all pins successfully");
-
-	return 0;
-
-timeout:
-	shell_error(sh, "timeout");
-
-	return -ETIME;
-}
-
-void ec_reset(void)
-{
-	gpio_pin_set_dt(&ec_rst_gpio, 1);
-
-	k_sleep(K_MSEC(100));
-
-	gpio_pin_set_dt(&ec_rst_gpio, 0);
-}
-
-static int cmd_ec_reset(const struct shell *sh, size_t argc, char **argv)
-{
-	ec_reset();
-
-	return 0;
-}
-
-static int cmd_ec_power(const struct shell *sh, size_t argc, char **argv)
-{
-	int err = 0;
-	bool on;
-
-	on = shell_strtobool(argv[1], 0, &err);
-	if (err) {
-		shell_error(sh, "Invalid argument: %s", argv[2]);
-		return err;
-	}
-
-	ec_power(on);
-
-	return 0;
-}
-
-/* clang-format off */
-SHELL_STATIC_SUBCMD_SET_CREATE(ec_cmds,
-	SHELL_CMD_ARG(io_sweep, NULL, "io_sweep", cmd_io_sweep, 1, 0),
-	SHELL_CMD_ARG(power, NULL, "power on|off", cmd_ec_power, 2, 0),
-	SHELL_CMD_ARG(reset, NULL, "reset", cmd_ec_reset, 1, 0),
-	SHELL_SUBCMD_SET_END);
-/* clang-format on */
-
-SHELL_CMD_REGISTER(ec, &ec_cmds, "EC control commands", NULL);
-
-static void ec_cb(uint16_t index, uint16_t value)
-{
-	switch (index) {
-	case USB_REQ_EC_RESET:
-		LOG_INF("usb ec reset");
-		ec_reset();
-		break;
-	case USB_REQ_POWER:
-		LOG_INF("usb ec power %d", value);
-		ec_power(value);
-		break;
-	}
-}
-
-USB_REQUEST_CALLBACK_DEFINE(ec_cb);
-
-static int ec_init(void)
-{
-	int ret;
-
-	ret = gpio_pin_configure_dt(&ec_rst_gpio, GPIO_OUTPUT_INACTIVE);
-	if (ret < 0) {
-		LOG_ERR("gpio configuration failed: %d", ret);
-		return ret;
-	}
-
-	return 0;
-}
-
-SYS_INIT(ec_init, APPLICATION, 99);
diff --git a/firmware/src/ec.h b/firmware/src/ec.h
deleted file mode 100644
index dd1a3ec..0000000
--- a/firmware/src/ec.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Send a reset pulse to the EC board */
-void ec_reset(void);
diff --git a/firmware/src/i2c_mux.c b/firmware/src/i2c_mux.c
deleted file mode 100644
index 5e2a3df..0000000
--- a/firmware/src/i2c_mux.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/device.h>
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/kernel.h>
-#include <zephyr/logging/log.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/sys/util.h>
-
-#define DT_DRV_COMPAT cros_i2c_mux
-
-LOG_MODULE_REGISTER(i2c_mux, LOG_LEVEL_INF);
-
-struct i2c_mux_config {
-	const struct gpio_dt_spec en_gpio;
-	const struct gpio_dt_spec *a_gpio;
-	uint8_t a_gpio_count;
-	uint8_t port_count;
-};
-
-static int i2c_mux_select(const struct device *dev, uint8_t port)
-{
-	const struct i2c_mux_config *cfg = dev->config;
-	int ret;
-
-	if (port >= cfg->port_count) {
-		return -EINVAL;
-	}
-
-	for (uint8_t i = 0; i < cfg->a_gpio_count; i++) {
-		const struct gpio_dt_spec *gpio = &cfg->a_gpio[i];
-		uint8_t val = IS_BIT_SET(port, i) != 0 ? 1 : 0;
-
-		ret = gpio_pin_set_dt(gpio, val);
-		if (ret < 0) {
-			LOG_ERR("gpio set failed: %d", ret);
-			return ret;
-		}
-	}
-
-	return 0;
-}
-
-static const struct i2c_mux_api {
-	/* empty, just for use in shell_device_filter */
-} i2c_mux_api;
-
-static bool i2c_mux_device_filter(const struct device *dev)
-{
-	return dev->api == &i2c_mux_api;
-}
-
-static void device_name_get(size_t idx, struct shell_static_entry *entry)
-{
-	const struct device *dev =
-		shell_device_filter(idx, i2c_mux_device_filter);
-
-	entry->syntax = (dev != NULL) ? dev->name : NULL;
-	entry->handler = NULL;
-	entry->help = NULL;
-	entry->subcmd = NULL;
-}
-
-SHELL_DYNAMIC_CMD_CREATE(dsub_device_name, device_name_get);
-
-static int cmd_i2c_mux(const struct shell *sh, size_t argc, char **argv)
-{
-	const struct device *dev;
-	int err = 0;
-	int port;
-
-	dev = device_get_binding(argv[1]);
-	if (dev == NULL) {
-		shell_error(sh, "Device %s not available", argv[1]);
-		return -ENODEV;
-	}
-
-	port = shell_strtol(argv[2], 0, &err);
-	if (err) {
-		shell_error(sh, "Invalid argument: %s", argv[2]);
-		return err;
-	}
-
-	err = i2c_mux_select(dev, port);
-	if (err < 0) {
-		shell_error(sh, "i2c_mux_select error: %d", err);
-		return err;
-	}
-
-	return 0;
-}
-
-SHELL_CMD_ARG_REGISTER(i2c_mux, &dsub_device_name, "I2C multiplexer control",
-		       cmd_i2c_mux, 3, 0);
-
-static int i2c_mux_init(const struct device *dev)
-{
-	const struct i2c_mux_config *cfg = dev->config;
-	int ret;
-
-	ret = gpio_pin_configure_dt(&cfg->en_gpio, GPIO_OUTPUT_ACTIVE);
-	if (ret < 0) {
-		LOG_ERR("gpio configuration failed: %d", ret);
-		return ret;
-	}
-
-	for (uint8_t i = 0; i < cfg->a_gpio_count; i++) {
-		const struct gpio_dt_spec *gpio = &cfg->a_gpio[i];
-
-		ret = gpio_pin_configure_dt(gpio, GPIO_OUTPUT_INACTIVE);
-		if (ret < 0) {
-			LOG_ERR("gpio configuration failed: %d", ret);
-			return ret;
-		}
-	}
-
-	return 0;
-}
-
-#define I2C_MUX_INIT(n)                                                      \
-	const struct gpio_dt_spec i2c_mux_a_gpio_##n[] = {                   \
-		DT_INST_FOREACH_PROP_ELEM_SEP(n, a_gpios,                    \
-					      GPIO_DT_SPEC_GET_BY_IDX, (, )) \
-	};                                                                   \
-                                                                             \
-	static const struct i2c_mux_config i2c_mux_cfg_##n = {               \
-		.en_gpio = GPIO_DT_SPEC_INST_GET(n, en_gpios),               \
-		.a_gpio = i2c_mux_a_gpio_##n,                                \
-		.a_gpio_count = ARRAY_SIZE(i2c_mux_a_gpio_##n),              \
-		.port_count = DT_INST_PROP(n, port_count),                   \
-	};                                                                   \
-                                                                             \
-	DEVICE_DT_INST_DEFINE(n, i2c_mux_init, NULL(n), NULL,                \
-			      &i2c_mux_cfg_##n, POST_KERNEL,                 \
-			      CONFIG_I2C_INIT_PRIORITY, &i2c_mux_api);
-
-DT_INST_FOREACH_STATUS_OKAY(I2C_MUX_INIT)
diff --git a/firmware/src/i2c_target.c b/firmware/src/i2c_target.c
deleted file mode 100644
index ec7d51d..0000000
--- a/firmware/src/i2c_target.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/drivers/i2c.h>
-#include <zephyr/kernel.h>
-#include <zephyr/logging/log.h>
-
-LOG_MODULE_REGISTER(i2c_traget, LOG_LEVEL_INF);
-
-static int i2c_target_device_init(const struct device *dev)
-{
-	int ret;
-
-	if (!device_is_ready(dev)) {
-		LOG_ERR("device %s not ready", dev->name);
-		return -ENODEV;
-	}
-
-	ret = i2c_target_driver_register(dev);
-	if (ret < 0) {
-		LOG_ERR("i2c target device %s register failed: %d", dev->name,
-			ret);
-		return ret;
-	}
-
-	return 0;
-}
-
-static int i2c_target_init(void)
-{
-	int ret;
-
-	ret = i2c_target_device_init(DEVICE_DT_GET(DT_NODELABEL(eeprom0)));
-	if (ret < 0) {
-		return ret;
-	}
-
-	ret = i2c_target_device_init(DEVICE_DT_GET(DT_NODELABEL(eeprom1)));
-	if (ret < 0) {
-		return ret;
-	}
-
-	return 0;
-}
-
-SYS_INIT(i2c_target_init, APPLICATION, 99);
diff --git a/firmware/src/main.c b/firmware/src/main.c
deleted file mode 100644
index 8bc0a40..0000000
--- a/firmware/src/main.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2024 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/drivers/led.h>
-#include <zephyr/kernel.h>
-#include <zephyr/logging/log.h>
-#include <zephyr/shell/shell.h>
-
-LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);
-
-const struct led_dt_spec status_led = LED_DT_SPEC_GET(DT_NODELABEL(status_led));
-
-int main(void)
-{
-	LOG_INF("started");
-
-	while (true) {
-		led_on_dt(&status_led);
-		k_sleep(K_MSEC(1000));
-		led_off_dt(&status_led);
-		k_sleep(K_MSEC(1000));
-	}
-}
diff --git a/firmware/src/npcx_boot.c b/firmware/src/npcx_boot.c
deleted file mode 100644
index c65b952..0000000
--- a/firmware/src/npcx_boot.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#define DT_DRV_COMPAT cros_npcx_boot
-
-#include "ec.h"
-#include "usb_request.h"
-
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/drivers/pinctrl.h>
-#include <zephyr/kernel.h>
-#include <zephyr/logging/log.h>
-#include <zephyr/shell/shell.h>
-#include <zephyr/shell/shell_uart.h>
-
-LOG_MODULE_REGISTER(npcx_boot, LOG_LEVEL_INF);
-
-BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
-	     "only one 'cros,npcx-boot' compatible node may be present");
-
-#define PINCTRL_STATE_GPIO 2
-
-PINCTRL_DT_INST_DEFINE(0);
-const struct pinctrl_dev_config *npcx_boot_pcfg =
-	PINCTRL_DT_INST_DEV_CONFIG_GET(0);
-const struct gpio_dt_spec npcx_boot_gpio =
-	GPIO_DT_SPEC_INST_GET(0, npcx_boot_gpios);
-
-static int cmd_npcx_boot(const struct shell *sh, size_t argc, char **argv)
-{
-	int ret;
-
-	ret = pinctrl_apply_state(npcx_boot_pcfg, PINCTRL_STATE_GPIO);
-	if (ret < 0) {
-		shell_error(sh, "1 pinctrl configuration failed: %d", ret);
-		return ret;
-	}
-
-	ret = gpio_pin_configure_dt(&npcx_boot_gpio, GPIO_OUTPUT_ACTIVE);
-	if (ret < 0) {
-		shell_error(sh, "gpio configuration failed: %d", ret);
-		return ret;
-	}
-
-	ec_reset();
-
-	k_sleep(K_MSEC(100));
-
-	ret = gpio_pin_configure_dt(&npcx_boot_gpio, GPIO_INPUT);
-	if (ret < 0) {
-		shell_error(sh, "gpio configuration failed: %d", ret);
-		return ret;
-	}
-
-	ret = pinctrl_apply_state(npcx_boot_pcfg, PINCTRL_STATE_DEFAULT);
-	if (ret < 0) {
-		shell_error(sh, "2 pinctrl configuration failed: %d", ret);
-		return ret;
-	}
-
-	return 0;
-}
-
-SHELL_CMD_REGISTER(npcx_boot, NULL, "Enter NPCX bootloader", cmd_npcx_boot);
-
-static void npcx_boot_cb(uint16_t index, uint16_t value)
-{
-	const struct shell *sh = shell_backend_uart_get_ptr();
-
-	if (index != USB_REQ_NPCX_BOOT) {
-		return;
-	}
-
-	LOG_INF("npcx boot");
-
-	cmd_npcx_boot(sh, 0, NULL);
-}
-
-USB_REQUEST_CALLBACK_DEFINE(npcx_boot_cb);
diff --git a/firmware/src/uart-bridge.c b/firmware/src/uart-bridge.c
deleted file mode 100644
index 6c6c8af..0000000
--- a/firmware/src/uart-bridge.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/device.h>
-#include <zephyr/drivers/uart.h>
-#include <zephyr/kernel.h>
-#include <zephyr/logging/log.h>
-#include <zephyr/sys/ring_buffer.h>
-#include <zephyr/usb/usb_device.h>
-
-#define DT_DRV_COMPAT zephyr_uart_bridge
-
-LOG_MODULE_REGISTER(uart_bridge, LOG_LEVEL_INF);
-
-#define RING_BUF_SIZE 256
-#define RING_BUF_FULL_THRESHOLD (RING_BUF_SIZE / 3)
-
-struct uart_bridge_peer_config {
-	const struct device *dev;
-	size_t transfer_size;
-};
-
-struct uart_bridge_config {
-	struct uart_bridge_peer_config peer[2];
-};
-
-struct uart_bridge_peer_data {
-	uint8_t buf[RING_BUF_SIZE];
-	struct ring_buf rb;
-	bool paused;
-};
-
-struct uart_bridge_data {
-	struct uart_bridge_peer_data peer[2];
-};
-
-static const struct device *
-uart_bridge_get_peer(const struct device *dev, const struct device *bridge_dev)
-{
-	const struct uart_bridge_config *cfg = bridge_dev->config;
-
-	if (dev == cfg->peer[0].dev) {
-		return cfg->peer[1].dev;
-	} else if (dev == cfg->peer[1].dev) {
-		return cfg->peer[0].dev;
-	} else {
-		return NULL;
-	}
-}
-
-void uart_bridge_settings_update(const struct device *dev,
-				 const struct device *bridge_dev)
-{
-	struct uart_config cfg;
-	const struct device *peer_dev = uart_bridge_get_peer(dev, bridge_dev);
-	int ret;
-
-	if (peer_dev == NULL) {
-		LOG_DBG("%s: not a bridge dev", dev->name);
-		return;
-	}
-
-	LOG_DBG("update settings: dev=%s bridge=%s peer=%s", dev->name,
-		bridge_dev->name, peer_dev->name);
-
-	ret = uart_config_get(dev, &cfg);
-	if (ret) {
-		LOG_WRN("%s: failed to get the uart config: %d", dev->name,
-			ret);
-		return;
-	}
-
-	ret = uart_configure(peer_dev, &cfg);
-	if (ret) {
-		LOG_WRN("%s: failed to set the uart config: %d", peer_dev->name,
-			ret);
-		return;
-	}
-
-	LOG_INF("uart settings: baudrate=%d parity=%d", cfg.baudrate,
-		cfg.parity);
-}
-
-static uint8_t uart_bridge_get_idx(const struct device *dev,
-				   const struct device *bridge_dev, bool own)
-{
-	const struct uart_bridge_config *cfg = bridge_dev->config;
-
-	if (dev == cfg->peer[0].dev) {
-		return own ? 0 : 1;
-	} else {
-		return own ? 1 : 0;
-	}
-}
-
-static void uart_bridge_handle_rx(const struct device *dev,
-				  const struct device *bridge_dev)
-{
-	const struct uart_bridge_config *cfg = bridge_dev->config;
-	struct uart_bridge_data *data = bridge_dev->data;
-
-	const struct uart_bridge_peer_config *own_cfg =
-		&cfg->peer[uart_bridge_get_idx(dev, bridge_dev, true)];
-	const struct uart_bridge_peer_config *peer_cfg =
-		&cfg->peer[uart_bridge_get_idx(dev, bridge_dev, false)];
-	struct uart_bridge_peer_data *own_data =
-		&data->peer[uart_bridge_get_idx(dev, bridge_dev, true)];
-
-	uint8_t buffer[own_cfg->transfer_size];
-	int rb_len, recv_len;
-
-	if (ring_buf_space_get(&own_data->rb) < RING_BUF_FULL_THRESHOLD) {
-		LOG_DBG("%s: buffer full: pause", dev->name);
-		uart_irq_rx_disable(dev);
-		own_data->paused = true;
-		return;
-	}
-
-	recv_len = uart_fifo_read(dev, buffer, sizeof(buffer));
-	if (!recv_len)
-		return;
-
-	rb_len = ring_buf_put(&own_data->rb, buffer, recv_len);
-	if (rb_len < recv_len) {
-		LOG_WRN("%s: rx drop %u bytes", dev->name, recv_len - rb_len);
-	}
-
-	uart_irq_tx_enable(peer_cfg->dev);
-}
-
-static void uart_bridge_handle_tx(const struct device *dev,
-				  const struct device *bridge_dev)
-{
-	const struct uart_bridge_config *cfg = bridge_dev->config;
-	struct uart_bridge_data *data = bridge_dev->data;
-
-	const struct uart_bridge_peer_config *own_cfg =
-		&cfg->peer[uart_bridge_get_idx(dev, bridge_dev, true)];
-	const struct uart_bridge_peer_config *peer_cfg =
-		&cfg->peer[uart_bridge_get_idx(dev, bridge_dev, false)];
-	struct uart_bridge_peer_data *peer_data =
-		&data->peer[uart_bridge_get_idx(dev, bridge_dev, false)];
-
-	uint8_t buffer[own_cfg->transfer_size];
-	int rb_len, send_len;
-
-	rb_len = ring_buf_get(&peer_data->rb, buffer, sizeof(buffer));
-	if (!rb_len) {
-		LOG_DBG("%s: buffer empty, disable tx irq", dev->name);
-		uart_irq_tx_disable(dev);
-		return;
-	}
-
-	send_len = uart_fifo_fill(dev, buffer, rb_len);
-	if (send_len < rb_len) {
-		LOG_WRN("%s: tx dropped %d bytes", dev->name,
-			rb_len - send_len);
-	}
-
-	if (peer_data->paused &&
-	    ring_buf_space_get(&peer_data->rb) > RING_BUF_FULL_THRESHOLD) {
-		LOG_DBG("%s: buffer free: resume", dev->name);
-		uart_irq_rx_enable(peer_cfg->dev);
-		peer_data->paused = false;
-		return;
-	}
-}
-
-static void interrupt_handler(const struct device *dev, void *user_data)
-{
-	const struct device *bridge_dev = user_data;
-
-	while (uart_irq_update(dev) && uart_irq_is_pending(dev)) {
-		if (uart_irq_rx_ready(dev)) {
-			uart_bridge_handle_rx(dev, bridge_dev);
-		}
-		if (uart_irq_tx_ready(dev)) {
-			uart_bridge_handle_tx(dev, bridge_dev);
-		}
-	}
-}
-
-static int uart_bridge_init(const struct device *dev)
-{
-	const struct uart_bridge_config *cfg = dev->config;
-	struct uart_bridge_data *data = dev->data;
-
-	ring_buf_init(&data->peer[0].rb, RING_BUF_SIZE, data->peer[0].buf);
-	ring_buf_init(&data->peer[1].rb, RING_BUF_SIZE, data->peer[1].buf);
-
-	/* Wait 100ms for the host to do all settings */
-	k_msleep(100);
-
-	uart_irq_callback_user_data_set(cfg->peer[0].dev, interrupt_handler,
-					(void *)dev);
-	uart_irq_callback_user_data_set(cfg->peer[1].dev, interrupt_handler,
-					(void *)dev);
-	uart_irq_rx_enable(cfg->peer[0].dev);
-	uart_irq_rx_enable(cfg->peer[1].dev);
-
-	return 0;
-}
-
-#define UART_BRIDGE_PEER_DEFINE(node_id)                           \
-	{                                                          \
-		.dev = DEVICE_DT_GET(DT_PHANDLE(node_id, device)), \
-		.transfer_size = DT_PROP(node_id, transfer_size),  \
-	}
-
-#define UART_BRIDGE_INIT(n)                                                \
-	BUILD_ASSERT(DT_INST_CHILD_NUM(n) == 2,                            \
-		     "uart-bridge must have exactly 2 child nodes");       \
-                                                                           \
-	static const struct uart_bridge_config uart_bridge_cfg_##n = {     \
-		.peer = { DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(           \
-			n, UART_BRIDGE_PEER_DEFINE, (, )) },               \
-	};                                                                 \
-                                                                           \
-	static struct uart_bridge_data uart_bridge_data_##n;               \
-                                                                           \
-	DEVICE_DT_INST_DEFINE(n, uart_bridge_init, NULL(n),                \
-			      &uart_bridge_data_##n, &uart_bridge_cfg_##n, \
-			      POST_KERNEL, CONFIG_SERIAL_INIT_PRIORITY, NULL);
-
-DT_INST_FOREACH_STATUS_OKAY(UART_BRIDGE_INIT)
diff --git a/firmware/src/uart-bridge.h b/firmware/src/uart-bridge.h
deleted file mode 100644
index a766090..0000000
--- a/firmware/src/uart-bridge.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/device.h>
-
-/**
- * @brief Update the hardware port settings on an uart bridge
- *
- * If dev is part bridge_dev, then the dev uart configuration are applied to
- * the other device in the uart bridge. This allows propagating the settings
- * from a USB CDC-ACM port to a hardware UART.
- *
- * If dev is not part of bridge_dev then the function is a no-op.
- */
-void uart_bridge_settings_update(const struct device *dev,
-				 const struct device *bridge_dev);
diff --git a/firmware/src/usb_request.h b/firmware/src/usb_request.h
deleted file mode 100644
index f281fea..0000000
--- a/firmware/src/usb_request.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <stdint.h>
-
-#define USB_REQ_EC_RESET 0
-#define USB_REQ_POWER 1
-#define USB_REQ_NPCX_BOOT 2
-
-struct usb_request_callback {
-	void (*callback)(uint16_t index, uint16_t value);
-};
-
-#define USB_REQUEST_CALLBACK_DEFINE(_callback)                                \
-	static const STRUCT_SECTION_ITERABLE(                                 \
-		usb_request_callback, _usb_request_callback__##_callback) = { \
-		.callback = _callback,                                        \
-	}
diff --git a/firmware/src/usb_request.ld b/firmware/src/usb_request.ld
deleted file mode 100644
index d99a755..0000000
--- a/firmware/src/usb_request.ld
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Copyright 2025 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <zephyr/linker/iterable_sections.h>
-
-ITERABLE_SECTION_ROM(usb_request_callback, Z_LINK_ITERABLE_SUBALIGN)
diff --git a/firmware/src/usbd.c b/firmware/src/usbd.c
deleted file mode 100644
index 4a486de..0000000
--- a/firmware/src/usbd.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* Copyright 2024 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "uart-bridge.h"
-#include "usb_request.h"
-
-#include <zephyr/device.h>
-#include <zephyr/input/input.h>
-#include <zephyr/kernel.h>
-#include <zephyr/usb/usbd.h>
-
-LOG_MODULE_REGISTER(usbd_app, LOG_LEVEL_INF);
-
-#define USB_VID 0x18d1
-#define USB_PID 0x5214
-#define USB_MANUFACTURER_NAME "Google"
-#define USB_DEVICE_NAME "EC AIC Tester"
-#define USB_MAX_POWER 250
-
-USBD_DEVICE_DEFINE(app_usbd, DEVICE_DT_GET(DT_NODELABEL(zephyr_udc0)), USB_VID,
-		   USB_PID);
-
-USBD_DESC_LANG_DEFINE(app_usb_lang);
-USBD_DESC_MANUFACTURER_DEFINE(app_usb_mfr, USB_MANUFACTURER_NAME);
-USBD_DESC_PRODUCT_DEFINE(app_usb_product, USB_DEVICE_NAME);
-USBD_DESC_SERIAL_NUMBER_DEFINE(app_usb_sn);
-
-static const uint8_t attributes = 0;
-
-USBD_DESC_CONFIG_DEFINE(fs_cfg_desc, "FS Configuration");
-USBD_DESC_CONFIG_DEFINE(hs_cfg_desc, "HS Configuration");
-USBD_CONFIGURATION_DEFINE(app_usb_fs_config, attributes, USB_MAX_POWER,
-			  &fs_cfg_desc);
-USBD_CONFIGURATION_DEFINE(app_usb_hs_config, attributes, USB_MAX_POWER,
-			  &hs_cfg_desc);
-
-static int to_host_cb(const struct usbd_context *const ctx,
-		      const struct usb_setup_packet *const setup,
-		      struct net_buf *const buf)
-{
-	LOG_INF("%d: %d %d %d %d", setup->RequestType.type, setup->bRequest,
-		setup->wLength, setup->wIndex, setup->wValue);
-
-	return 0;
-}
-
-static int to_dev_cb(const struct usbd_context *const ctx,
-		     const struct usb_setup_packet *const setup,
-		     const struct net_buf *const buf)
-{
-	STRUCT_SECTION_FOREACH(usb_request_callback, callback)
-	{
-		callback->callback(setup->wIndex, setup->wValue);
-	}
-
-	return 0;
-}
-
-USBD_VREQUEST_DEFINE(vnd_vreq, 0, to_host_cb, to_dev_cb);
-
-static void usbd_msg_cb(struct usbd_context *const usbd_ctx,
-			const struct usbd_msg *const msg)
-{
-	int ret;
-
-	LOG_DBG("USBD message: %s", usbd_msg_type_string(msg->type));
-
-	if (msg->type == USBD_MSG_CDC_ACM_LINE_CODING ||
-	    msg->type == USBD_MSG_CDC_ACM_CONTROL_LINE_STATE) {
-		uart_bridge_settings_update(
-			msg->dev, DEVICE_DT_GET(DT_NODELABEL(uart_bridge)));
-	}
-
-	if (!usbd_can_detect_vbus(usbd_ctx)) {
-		return;
-	}
-
-	switch (msg->type) {
-	case USBD_MSG_VBUS_READY:
-		ret = usbd_enable(usbd_ctx);
-		if (ret) {
-			LOG_ERR("Failed to enable device support");
-		}
-
-		break;
-	case USBD_MSG_VBUS_REMOVED:
-		ret = usbd_disable(usbd_ctx);
-		if (ret) {
-			LOG_ERR("Failed to disable device support");
-		}
-
-		break;
-	case USBD_MSG_RESUME:
-		break;
-	case USBD_MSG_SUSPEND:
-		break;
-	default:
-		break;
-	}
-}
-
-static struct usbd_context *usbd_init_device(void)
-{
-	int err;
-
-	err = usbd_add_descriptor(&app_usbd, &app_usb_lang);
-	if (err) {
-		LOG_ERR("Failed to initialize language descriptor (%d)", err);
-		return NULL;
-	}
-
-	err = usbd_add_descriptor(&app_usbd, &app_usb_mfr);
-	if (err) {
-		LOG_ERR("Failed to initialize manufacturer descriptor (%d)",
-			err);
-		return NULL;
-	}
-
-	err = usbd_add_descriptor(&app_usbd, &app_usb_product);
-	if (err) {
-		LOG_ERR("Failed to initialize product descriptor (%d)", err);
-		return NULL;
-	}
-
-	err = usbd_add_descriptor(&app_usbd, &app_usb_sn);
-	if (err) {
-		LOG_ERR("Failed to initialize SN descriptor (%d)", err);
-		return NULL;
-	}
-
-	if (usbd_caps_speed(&app_usbd) == USBD_SPEED_HS) {
-		err = usbd_add_configuration(&app_usbd, USBD_SPEED_HS,
-					     &app_usb_hs_config);
-		if (err) {
-			LOG_ERR("Failed to add High-Speed configuration");
-			return NULL;
-		}
-
-		err = usbd_register_all_classes(&app_usbd, USBD_SPEED_HS, 1);
-		if (err) {
-			LOG_ERR("Failed to add register classes");
-			return NULL;
-		}
-
-		usbd_device_set_code_triple(&app_usbd, USBD_SPEED_HS, 0, 0, 0);
-	}
-
-	err = usbd_add_configuration(&app_usbd, USBD_SPEED_FS,
-				     &app_usb_fs_config);
-	if (err) {
-		LOG_ERR("Failed to add Full-Speed configuration");
-		return NULL;
-	}
-
-	err = usbd_register_all_classes(&app_usbd, USBD_SPEED_FS, 1);
-	if (err) {
-		LOG_ERR("Failed to add register classes");
-		return NULL;
-	}
-
-	usbd_device_set_code_triple(&app_usbd, USBD_SPEED_FS, 0, 0, 0);
-
-	err = usbd_msg_register_cb(&app_usbd, usbd_msg_cb);
-	if (err) {
-		LOG_ERR("Failed to register message callback");
-		return NULL;
-	}
-
-	err = usbd_device_register_vreq(&app_usbd, &vnd_vreq);
-	if (err) {
-		LOG_ERR("Failed to register vreq");
-		return NULL;
-	}
-
-	err = usbd_init(&app_usbd);
-	if (err) {
-		LOG_ERR("Failed to initialize device support");
-		return NULL;
-	}
-
-	return &app_usbd;
-}
-
-static int app_usbd_enable(void)
-{
-	struct usbd_context *usbd;
-	int ret;
-
-	usbd = usbd_init_device();
-	if (usbd == NULL) {
-		LOG_ERR("Failed to initialize USB device");
-		return -ENODEV;
-	}
-
-	if (usbd_can_detect_vbus(usbd)) {
-		return 0;
-	}
-
-	ret = usbd_enable(usbd);
-	if (ret != 0) {
-		LOG_ERR("Failed to enable USB");
-		return 0;
-	}
-
-	return 0;
-}
-SYS_INIT(app_usbd_enable, APPLICATION, 0);
diff --git a/firmware/west-upstream.yml b/firmware/west-upstream.yml
deleted file mode 100644
index c00005e..0000000
--- a/firmware/west-upstream.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-manifest:
-  remotes:
-    - name: zephyrproject-rtos
-      url-base: https://github.com/zephyrproject-rtos
-
-  projects:
-    - name: zephyr
-      remote: zephyrproject-rtos
-      revision: main
-      import:
-        name-allowlist:
-          - cmsis
-          - hal_stm32
diff --git a/firmware/west.yml b/firmware/west.yml
deleted file mode 100644
index b38d2d9..0000000
--- a/firmware/west.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2024 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-manifest:
-  remotes:
-    - name: chromium
-      url-base: https://chromium.googlesource.com/chromiumos
-
-  projects:
-    - name: zephyr
-      remote: chromium
-      repo-path: third_party/zephyr
-      revision: main
-      west-commands: scripts/west-commands.yml
-
-    - name: cmsis
-      remote: chromium
-      repo-path: third_party/zephyr/cmsis
-      revision: chromeos-main
-      path: modules/hal/cmsis
-
-    - name: hal_stm32
-      remote: chromium
-      repo-path: third_party/zephyr/hal_stm32
-      revision: chromeos-main
-      path: modules/hal/stm32
diff --git a/flash_npcx.py b/flash_npcx.py
deleted file mode 100755
index c2af335..0000000
--- a/flash_npcx.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2025 The ChromiumOS Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import os
-import sys
-import time
-
-import usb
-
-
-args = None
-target = None
-
-
-def find_usb_device():
-    dev = usb.core.find(manufacturer="Google", product="EC AIC Tester")
-    if dev is None:
-        raise ValueError("Device not found")
-
-    return dev
-
-
-# bRequest values:
-# bit 7 = 0: host to device
-# bit 6..5 = vendor
-# bit 4..0 = device
-TO_DEV_REQ_TYPE = 0x40
-# bit 7 = 0: device to host
-# bit 6..5 = vendor
-# bit 4..0 = device
-TO_HOST_REQ_TYPE = 0xC0
-
-# Must match the definitions in firmware/src/usb_request.h
-USB_REQ_EC_RESET = 0
-USB_REQ_POWER = 1
-USB_REQ_NPCX_BOOT = 2
-
-
-def main(argv):
-    global args
-    global target
-
-    parser = argparse.ArgumentParser()
-    parser.add_argument("-p", "--port", type=str, default="ttyACM2")
-    args = parser.parse_args(argv)
-
-    dev = find_usb_device()
-
-    dev.ctrl_transfer(TO_DEV_REQ_TYPE, 0, 1, USB_REQ_POWER, 0)
-
-    dev.ctrl_transfer(TO_DEV_REQ_TYPE, 0, 0, USB_REQ_NPCX_BOOT, 0)
-
-    os.system(
-        f"uartupdatetool --port={args.port} --baudrate=115200 --opr=wr --addr=0x200C3020 --file build/zephyr/npcx-aic/output/npcx_monitor.bin"
-    )
-    os.system(
-        f"uartupdatetool --port={args.port} --baudrate=115200 --opr=wr --auto --offset=0 --file build/zephyr/npcx-aic/output/ec.bin"
-    )
-
-    dev.ctrl_transfer(TO_DEV_REQ_TYPE, 0, 0, USB_REQ_EC_RESET, 0)
-
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv[1:]))
