Skip to content
Snippets Groups Projects
  1. Sep 14, 2021
  2. Jul 25, 2021
  3. Jul 16, 2021
  4. Jul 04, 2021
    • rahix's avatar
      feat(api-caller): Hard-disable all IRQs during API calls · 92741109
      rahix authored
      Disable all maskable interrupts on core 1 during API calls.  This brings
      two main advantages:
      
      1. It means API calls are now always ISR-safe and can be used everywhere
         in core 1 code.  This is mostly interesting to l0dables as Pycardium
         should not need to do this.
      
      2. It allows Epicardium to halt the clock for core 1 without fear as we
         have observed problems with doing this when core 1 is currently
         executing instructions that touch memory.  Now a synchronous call
         from core 1 will guarantee that it is currently waiting in a WFE and
         no other ISRs could be potentially running.
      92741109
    • rahix's avatar
      feat(lifecycle): Allow core 1 to disable interrupts during API calls · 7fb48178
      rahix authored
      When interrupts are disabled during API calls on core 1, we can only
      trigger a core 1 reset when there is no API call ongoing.  This means
      that the lifecycle machinery needs to allow any running API calls to
      complete before it has a chance to see its reset interrupt delivered.
      
      This is complicated because we cannot synchronize on core 1 triggering
      an API call - the best we can do is stop the dispatcher, check whether
      our reset interrupt was delivered, and if not, give it another chance to
      process an API call.
      
      Additionally, "give it another chance to process an API call" means that
      the IDLE task must run, because this is currently a prerequisite to
      scheduling the dispatcher (see [1]).  The only way to facilitate this is
      with a sleep that is long enough that it will eventually let core 0 go
      idle.  It seems that an 8 tick delay does the job quite fine.
      
      Thus, implement a busy loop which provides the above requirements and
      with that makes Epicardium prepared for payloads which perform API calls
      with interrupts disabled.
      
      [1]: https://firmware.card10.badge.events.ccc.de/epicardium/overview.html#internals
      7fb48178
    • rahix's avatar
      chore(core1-control): Split out core1_is_ready() · f26b9987
      rahix authored
      This function is useful on its own for more complex lifecycle management
      in Epicardium.  Split it out of core1_wait_ready() so it can be used.
      f26b9987
  5. Apr 11, 2021
  6. Apr 09, 2021
  7. Apr 08, 2021
  8. Apr 07, 2021
  9. Apr 04, 2021
  10. Apr 03, 2021
  11. Apr 02, 2021
Loading