Поддержка Watchdog
В MCom-03 ввиду аппаратного ограничения сторожевой таймер WDT0 сбрасывается только от внешних сигналов NRST_PON или NRST_WRM (и не сбрасывается при срабатывании сторожевого таймера).
В MCom-03 единственным способом программной перезагрузки является срабатывание WDT0. В результате WDT0 остаётся включенным после программной перезагрузки и не может быть выключен без подачи внешних сигналов NRST_PON или NRST_WRM.
Для обхода проблемы компоненты загрузки должны сбрасывать счётчик WDT0:
SBL устанавливает таймаут WDT0 в максимальное значение (2^31 тактовых циклов опорной частоты WDT0; WDT0 тактируется на частоте APB 99 МГц, таймаут составляет ~21 с).
U-Boot и Linux загружают драйвер WDT0 mcom03-wdt для настройки и периодического сброса WDT0 с помощью SiP-запросов в TF-A.
При выполнении команды
reboot
в Linux выполняется:Linux отправляет SMC-вызов system-reset через Arm PSCI (Power State Coordination Interface) в TF-A, TF-A устанавливает таймаут WDT0 на ~2 с.
Linux-драйвер mcom03-wdt прекращает сбрасывать счётчик WDT0 и выполняется сброс микросхемы.
Примечание
ddrinit не сбрасывают счетчик сторожевого таймера.
Примечание
Отладка компонентов загрузки при включенном WDT0 может быть затруднена, в случае если отладчик приостанавливает работу MIPS RISC0, ARM CPU.
Примечание
Команда halt
приводит к перезагрузке при включенном сторожевом таймере, после
достижения установленного таймаута WDT0.