# Firmware Update

<p style="color: red; text-align: right;">
  Status: Pre-RFC
</p>

# Overview

The purpose of this document is to capture the process by which Tock will
perform a complete in-place B-slot update of the running firmware and request
that the `ROM/ROM_EXT` code boot into it.

*Note*: For certification reasons this document does not discuss detailed
guidance for encrypted updates. Additional implementation details on both
regular and encrypted updates to follow when possible.

# Update Process

1. A firmware update is initiated by a process external to the device.
    1. The system negotiates the parameters of the update:
        1. The system's availability for an update.
        2. Which slot the update must be built for, if the update requires a
           specific memory location (such as non relocatable monoliths).
        3. Which signature the update must be signed with in order to boot.
        4. The size of the update blocks. These should ideally be the same size
          as native flash pages.
        5. The total size of the update payload, in order to set boundaries on
           which the update can be performed.
2. The system unlocks the flash protection for the bounds of the B-slot.
3. For each block of the pending firmware update:
    1. The system erases the flash page at the destination address for the
       block.
    2. The system receives the block and writes it immediately to its
       destination address in flash. Blocks will need to be buffered given the
       speed of a flash write.
    3. Once written, the block is hashed and compared against the hash of the
       buffered block. This ensures that every flash write is complete and
       successful.
        1. If the hash doesn't match the hash of the buffered block, repeat the
           flash erase and write cycle.
        2. If the erase/flash cycle fails three times declare complete failure.
4. Issue a warning to the running applications that the system will be
   resetting.
5. Write a Boot Services request block into persistent RAM:
    1. Indicate the new firmware version slot to be booted.
    2. Indicate the retry policy to use when booting it.
6. Restart the system with a Boot Services cause set.
7. System follows the normal Secure Boot path into the new firmware image.
