在功耗敏感的系統里,我們通常會在系統空閑的時候將系統休眠,然后可以通過一些外設的輸入來喚醒系統,比如 Uart、USB 和 GPIO。AMD VersalAdaptive SoC 系統的休眠喚醒指導頁面和 MPSoC 系統在同一個 Wiki 網頁。本文將通過 PMC_GPIO 作為例子來描述如何喚醒 Versal 系統。
Wiki 網頁:
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842232/Zynq+UltraScale+MPSoC+Power+Management+-+Linux+Kernel
我們這里采用 VPK120 板卡作為平臺,這個板卡上面沒有通過 PMC MIO 連接 GPIO 器件,所以我們需要使用 PMC EMIO 來實現 GPIO。我們可以在 VPK120 Petalinux BSP 里的 AMD VivadoDesign Suite 工程基礎上增加 PMC_GPIO_EMIO。
1. 首先打開 Vivado 工程進入 CIPS core 配置界面并使能 PMC_GPIO_EMIO,板卡上有兩個 Button 器件連接到了兩個 PL 管腳,所以位寬選擇為 2。這兩個 Button 在板卡上分為名為 SW4 和 SW5。
2. 這時 CIPS core 的界面上會多出 PMC_GPIO 端口,右鍵點擊這個端口,菜單中選擇 Make External Pins 可以把這個接口的兩個 GPIO 信號連接到 PL 管腳,我們需要在 XDC 約束文件里增加這兩個管腳的約束。
3. 最后完成 Implementation 并導出 XSA。附件里有預先做好的 Block design tcl 腳本、頂層 Wrapper 和約束文件。可以用它們直接創建 Vivado 工程。
4. 導出 XSA 后,可以用下面命令將 XSA 導入 VPK120 petalinux BSP 里的 Petalinux 工程。
5. 按照上面提到的 Wiki 頁面里對 GPIO 的要求配置 Kernel,并在“project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi“里增加 gpio-keys節點。
6. 在 2023.2 版本里,ATF 和 PLM 需要兩個 Patch 來支持 GPIO 喚醒。使用下面方法將兩個 Patch 應用到 Petalinux 工程,最后執行 petalinux-build 命令。
將ATF patch "0001-fix-xilinx-map-PMC_GPIO-device-node-to-interrupt-for 1.patch"拷貝到“project-spec/meta-user/recipes-bsp/arm-trusted-firmware/files/”,如果沒有這個路徑就手動創建。
執行下面命令創建“arm-trusted-firmware_%.bbappend”文件。
將下面內容拷貝到“arm-trusted-firmware_%.bbappend”并保存。
執行下面命令。
參考 Wiki 頁面,將 PLM patch 文件“0001-xilpm-versal-server-Add-entry-for-PMC_GPIO-in-Wakeup.patch” 應用到 Petalinux 工程。
7. 使用下面命令使系統休眠。使用下面命令使能 gpio 為 Wakeup source。
8. 使用下面命令使系統休眠。
9. 按動板卡上的 SW4 button,Linux 系統就會喚醒。
-
soc
+關注
關注
38文章
4165瀏覽量
218244 -
Linux
+關注
關注
87文章
11304瀏覽量
209483 -
GPIO
+關注
關注
16文章
1204瀏覽量
52092 -
Versal
+關注
關注
1文章
158瀏覽量
7665
原文標題:開發者分享|如何通過 PMC_GPIO 喚醒 AMD Versal? Adaptive SoC Linux 系統
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論