2. Поддержка Watchdog

В MCom-03 ввиду аппаратного ограничения сторожевой таймер WDT0 сбрасывается только от внешних сигналов NRST_PON или NRST_WRM (и не сбрасывается при срабатывании сторожевого таймера).

В MCom-03 единственным способом программной перезагрузки является срабатывание WDT0. В результате WDT0 остаётся включенным после программной перезагрузки и не может быть выключен без подачи внешних сигналов NRST_PON или NRST_WRM.

Для обхода проблемы компоненты загрузки должны сбрасывать счётчик WDT0:

  • SBL устанавливает таймаут WDT0 в максимальное значение (2^31 тактовых циклов опорной частоты WDT0; справочно: на частоте XTI 27 МГц таймаут составляет ~79с).

  • U-Boot и Linux загружают драйвер WDT0 для регулярного сброса счётчика WDT0.

  • При выполнении команды reboot в Linux выполняется:

    • Linux отправляет SMC-вызов system-reset в TF-A, TF-A устанавливает таймаут WDT0 в значение 2^26 тактовых циклов (справочно: на частоте 50 МГц таймаут составляет ~2с).

    • Linux прекращает сбрасывать счётчик WDT0 и выполняется сброс микросхемы.

Примечание

TF-A и ddrinit не сбрасывают счетчик сторожевого таймера.

Примечание

Отладка компонентов загрузки при включенном WDT0 может быть затруднена, в случае если отладчик приостанавливает работу MIPS RISC0, ARM CPU.