diff --git a/boot/zephyr/main.c b/boot/zephyr/main.c
index f037a2b..9791f26 100644
--- a/boot/zephyr/main.c
+++ b/boot/zephyr/main.c
@@ -32,25 +32,25 @@
 
 #if defined(CONFIG_ARM)
 struct arm_vector_table {
-	uint32_t msp;
-	uint32_t reset;
+    uint32_t msp;
+    uint32_t reset;
 };
 
 static void do_boot(struct boot_rsp *rsp)
 {
-	struct arm_vector_table *vt;
+    struct arm_vector_table *vt;
 
-	/* The beginning of the image is the ARM vector table, containing
-	 * the initial stack pointer address and the reset vector
-	 * consecutively. Manually set the stack pointer and jump into the
-	 * reset vector
-	 */
-	vt = (struct arm_vector_table *)(rsp->br_image_addr +
-					 rsp->br_hdr->ih_hdr_size);
-	irq_lock();
-	sys_clock_disable();
-	_MspSet(vt->msp);
-	((void (*)(void))vt->reset)();
+    /* The beginning of the image is the ARM vector table, containing
+     * the initial stack pointer address and the reset vector
+     * consecutively. Manually set the stack pointer and jump into the
+     * reset vector
+     */
+    vt = (struct arm_vector_table *)(rsp->br_image_addr +
+                                     rsp->br_hdr->ih_hdr_size);
+    irq_lock();
+    sys_clock_disable();
+    _MspSet(vt->msp);
+    ((void (*)(void))vt->reset)();
 }
 #else
 /* Default: Assume entry point is at the very beginning of the image. Simply
@@ -59,44 +59,44 @@
  */
 static void do_boot(struct boot_rsp *rsp)
 {
-	void *start;
+    void *start;
 
-	start = (void *)(rsp->br_image_addr + rsp->br_hdr->ih_hdr_size);
+    start = (void *)(rsp->br_image_addr + rsp->br_hdr->ih_hdr_size);
 
-	/* Lock interrupts and dive into the entry point */
-	irq_lock();
-	((void (*)(void))start)();
+    /* Lock interrupts and dive into the entry point */
+    irq_lock();
+    ((void (*)(void))start)();
 }
 #endif
 
 void main(void)
 {
-	struct boot_rsp rsp;
-	int rc;
+    struct boot_rsp rsp;
+    int rc;
 
-	BOOT_LOG_INF("Starting bootloader");
+    BOOT_LOG_INF("Starting bootloader");
 
-	os_heap_init();
+    os_heap_init();
 
-	boot_flash_device = device_get_binding(FLASH_DRIVER_NAME);
-	if (!boot_flash_device) {
-		BOOT_LOG_ERR("Flash device not found");
-		while (1)
-			;
-	}
+    boot_flash_device = device_get_binding(FLASH_DRIVER_NAME);
+    if (!boot_flash_device) {
+        BOOT_LOG_ERR("Flash device not found");
+        while (1)
+            ;
+    }
 
-	rc = boot_go(&rsp);
-	if (rc != 0) {
-		BOOT_LOG_ERR("Unable to find bootable image");
-		while (1)
-			;
-	}
+    rc = boot_go(&rsp);
+    if (rc != 0) {
+        BOOT_LOG_ERR("Unable to find bootable image");
+        while (1)
+            ;
+    }
 
-	BOOT_LOG_INF("Bootloader chainload address: 0x%x", rsp.br_image_addr);
-	BOOT_LOG_INF("Jumping to the first image slot");
-	do_boot(&rsp);
+    BOOT_LOG_INF("Bootloader chainload address: 0x%x", rsp.br_image_addr);
+    BOOT_LOG_INF("Jumping to the first image slot");
+    do_boot(&rsp);
 
-	BOOT_LOG_ERR("Never should get here");
-	while (1)
-		;
+    BOOT_LOG_ERR("Never should get here");
+    while (1)
+        ;
 }
