1
簡介
在Zynq MPSoC的器件里,PS (Processing System )集成了三個(gè)看門狗,分別是CSU SWDT,LPD SWDT和FPD SWDT。CSU SWDT用于保護(hù)CSU與PMU及其相關(guān)連接。
LPD SWDT主要用于保護(hù)RPU系統(tǒng)及其相關(guān)連接。
FPD SWDT主要用于保護(hù)APU系統(tǒng)及其相關(guān)連接。
如果你的程序跑在APU上,并且你需要使用兩個(gè)看門狗,那么除了FPD SWDT外,你是可以使用LPD SWDT。
2
對應(yīng)關(guān)系
LPD SWDT和FPD SWDT是提供給用戶的應(yīng)用程序使用的,CSU SWDT主要是由PMUFW和CSU BOOTROM使用的。所以通常情況下,用戶可以在自己的應(yīng)用程序里使用LPD SWDT和FPD SWDT。當(dāng)客戶需要使用時(shí),需要在Vivado里需要使能相關(guān)的SWDT。但Vivado里的命名是SWDT0和SWDT1:

而在UG1087的寄存器手冊里,SWDT有三個(gè)代碼段CSU_WDT, SWDT, WDT:

所以有很多用戶并不清楚這里面的對應(yīng)關(guān)系。工具命名與手冊命名的對應(yīng)關(guān)系可以在UG1085里找到:

3
在Petalinux里的使用
在Linux里,AMD Xilinx提供了SWDT的驅(qū)動(dòng),具體的介紹和測試方法可以參考下面wiki頁面:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842055/Cadence+WDT+Driver
只需要按照該頁面的方法,去使能驅(qū)動(dòng),修改dts和使能ENABLE_EM, 就能在Linux里使用LPD SWDT或FPD SWDT,這里不再詳述。
當(dāng)LPD或FPD SWDT超時(shí)后,SWDT并不會(huì)直接復(fù)位整個(gè)系統(tǒng),而是把超時(shí)錯(cuò)誤傳達(dá)給PMU,由PMU決定下一步的錯(cuò)誤處理方式(關(guān)于PMU的錯(cuò)誤處理機(jī)制,可以參考UG1085的第6章)。而ENABLE_EM就是使能PMUFW里的錯(cuò)誤處理模塊,如果不使能該模塊,當(dāng)SWDT超時(shí)后,什么操作也不會(huì)發(fā)生。
PMUFW提供了一套完整的SWDT復(fù)位方案。當(dāng)用戶使能ENABLE_RECOVERY后,如果FSBL跑在APU上,PMUFW會(huì)初始化FPD SWDT,默認(rèn)設(shè)定時(shí)間為60秒。這樣在FSBL執(zhí)行完后,用戶自動(dòng)獲取SWDT的監(jiān)控,通常60秒足夠用戶啟動(dòng)后續(xù)的u-boot或Linux。如果60秒不夠,用戶可以在u-boot階段喂一次狗(重啟SWDT),或者在PMUFW工程里添加一個(gè)定義RECOVERY_TIMEOUT,把需要的時(shí)間定義成RECOVERY_TIMEOUT。(注意,這里需要在Vivado工程里使能TTC。)
如果CPU在復(fù)位過程中出現(xiàn)掛死現(xiàn)象,建議用戶把ENABLE_ESCALATION也添加上。如果PMUFW還有空間的話,建議把CHECK_HEALTHY_BOOT也使能上。下表來自UG1137,是系統(tǒng)重啟方案的推薦設(shè)置以及空間占用情況的總結(jié)。

關(guān)于ENABLE_RECOVERY,ENABLE_ESCALATION和CHECK_HEALTHY_BOOT的更多介紹,請用戶參考 UG1137。
4
CSU WDT的使用
CSU WDT的使用比較簡單,只需要在PMUFW里使能ENABLE_WDT,就能讓CSU WDT監(jiān)測PMU的運(yùn)行。FSBL啟動(dòng)后,CSU WDT會(huì)設(shè)置為90毫秒超時(shí),而PMUFW會(huì)有一個(gè)task每50毫秒喂一次狗。
請注意,如果用戶在PMUFW里添加了自己的代碼,并且使能了CSU WDT,那需要注意CSU WDT的超時(shí)時(shí)間。因?yàn)槿绻阍谀愕拇a里添加了延遲(比如sleep),如果延時(shí)超過90毫秒,會(huì)導(dǎo)致CSU WDT觸發(fā)從而產(chǎn)生異常。
5
參考文檔
本文只是簡單的介紹了看門狗(SWDT)在Zynq MPSoC在使用上的一下簡單技巧,幫助用戶快速地使用看門狗功能。如果想了解看門狗(SWDT)的完整功能,請仔細(xì)閱讀下面的參考文檔。
UG1085 第14章:
https://www.xilinx.com/content/dam/xilinx/support/documentation/user_guides/ug1085-zynq-ultrascale-trm.pdf
UG1137 第10,12章:
https://www.xilinx.com/content/dam/xilinx/support/documentation/sw_manuals/xilinx2021_2/ug1137-zynq-ultrascale-mpsoc-swdev.pdf

