 inline bool decodeAndHandleSecureFrame(volatile const uint8_t * const msg)
 {
     // Create a workspace for large stack consuming items ahead of time, in order to improve stack usage visibility.
-    constexpr size_t workspaceSize = OTAESGCM::OTAES128GCMGenericWithWorkspace<>::workspaceRequiredDec + 16 + 58;
-    uint8_t workspace[workspaceSize];
-    OTV0P2BASE::ScratchSpaceL sW(workspace, sizeof(workspace));
+    OTV0P2BASE::ScratchSpaceL sW(globalWorkSpace.decode, sizeof(globalWorkSpace.decode));
     // Temporarily suspend PrimaryRadio interrupts to avoid stack collisions.
     PrimaryRadio.pauseInterrupts(true);
     const bool success = OTRadioLink::decodeAndHandleOTSecureOFrameWithWorkspace<

    OTV0P2BASE::serialPrintAndFlush(F(" prog: "));
    OTV0P2BASE::serialPrintAndFlush(progCounter, HEX);
    OTV0P2BASE::serialPrintlnAndFlush();
    if (128 > minsp) panic(F("SH"));
//    OTV0P2BASE::MemoryChecks::forceResetIfStackOverflow();  // XXX
    OTV0P2BASE::MemoryChecks::resetMinSP();
#else

    // and which should also allow some energy-saving sleep.
    if(OTV0P2BASE::CLI::isCLIActive()) {
        const uint8_t stopBy = nearOverrunThreshold - 1;
        OTV0P2BASE::ScratchSpace s(globalWorkSpace.cli, sizeof(globalWorkSpace.cli));
        pollCLI(stopBy, 0 == TIME_LSD, s);
    }
}

