Closed haimingweili closed 3 months ago
Linux kernel 中 Cortex-A35 的中斷處理由 GIC 驅動程序處理。GIC 驅動程序支援 IRQ,但不支援 FIQ。 請問為何需要使用 FIQ ? 有甚麼特別的需求? 可以考慮 MA35D1 的 RTP M4 ,或是採用 AMP 架構 (CPU0 run Linux, CPU1 run non-os) 由單獨 CPU 專門負責執行time critical 的任務
Linux kernel 中 Cortex-A35 的中斷處理由 GIC 驅動程序處理。GIC 驅動程序支援 IRQ,但不支援 FIQ。 請問為何需要使用 FIQ ? 有甚麼特別的需求? 可以考慮 MA35D1 的 RTP M4 ,或是採用 AMP 架構 (CPU0 run Linux, CPU1 run non-os) 由單獨 CPU 專門負責執行time critical 的任務
目前我们设备主要用于电力,为应对突发状况需要快速响应,从而避免一些设备故障,在NUC980中可以使用FIQ,我们想升级芯片获取更高性能,M4我们有考虑,但是更倾向于更高性能的A35,请问如果想使用AMP架构,我需要参考那些例程或者您这边可以提供一些相关资料吗?
AMP 工作模式已經有客戶採用,您可以參考 https://github.com/wosayttn/sdk-bsp-ma35d1-evb-aarch32-heterogeneous 說明 這是 MA35D1 CPU0 跑 Linux, CPU1 跑 RT_Thread。
簡單來說 Buildroot menuconfig 勾選如下設定即可
然後把 CPU1 運行 的 RT-Thread, 或是 Non-OS code 放到 buildroot output/image 目錄下 檔名如截圖所示 AmpCore1.bin, 檔名是可以修改的。
如果 CPU1 要跑 RT-Thread,請參考上述連結
如果 CPU1 要跑 Non-OS,請使用 MA35D1 Non-OS BSP,SampleCode\AmpCore1 可以直接編譯出 AmpCore1.bin。
AMP 工作模式已經有客戶採用,您可以參考 https://github.com/wosayttn/sdk-bsp-ma35d1-evb-aarch32-heterogeneous 說明 這是 MA35D1 CPU0 跑 Linux, CPU1 跑 RT_Thread。
簡單來說 Buildroot menuconfig 勾選如下設定即可
然後把 CPU1 運行 的 RT-Thread, 或是 Non-OS code 放到 buildroot output/image 目錄下 檔名如截圖所示 AmpCore1.bin, 檔名是可以修改的。
如果 CPU1 要跑 RT-Thread,請參考上述連結
如果 CPU1 要跑 Non-OS,請使用 MA35D1 Non-OS BSP,SampleCode\AmpCore1 可以直接編譯出 AmpCore1.bin。
好的,我按照例程测试一下,非常感谢。
通过buildroot编译和烧写固件之后,可以验证多核AMP架构下,CPU0和CPU1可以独立运行操作系统,运行状态很好,我参考了 MA35D1 Non-OS BSP的例程,看到OpenAMP的例程只涉及到RTP M4和A35的交互,A35-0和A35-1之间是否也可以通过OpenAMP进行交互,目前有没有相关例程呢?
A35 與 M4 之間有 Wormhole 硬件支援交互,但是 A35 核之間並沒有。 目前我們在開發中,可能 4月底 才會有初版 release。 AMP 應用的 application note 文件也在撰寫中。
建議暫時的作法, Linux 在 device tree 設定一塊內存為 reserved memory,劃分為 CPU0->CPU1, CPU1->CPU0, 及 control 區塊,先用這種方式做簡單溝通。等到我們完成 A35 雙核之間的 repmsg 通訊支援,再做轉換。
另外提醒,Non-OS BSP AMP 範例使用 UART16 打印,但是在 TF-A 是將 UART16 設定給 RTP M4 使用,需要修改才能給 A35 用來打印訊息。
修改檔案 buildroot/output/build/arm-trusted-firmware-custom/fdts/ma35d1.dtsi
將
make arm-trusted-firmware-rebuild
A35 與 M4 之間有 Wormhole 硬件支援交互,但是 A35 核之間並沒有。 目前我們在開發中,可能 4月底 才會有初版 release。 AMP 應用的 application note 文件也在撰寫中。
建議暫時的作法, Linux 在 device tree 設定一塊內存為 reserved memory,劃分為 CPU0->CPU1, CPU1->CPU0, 及 control 區塊,先用這種方式做簡單溝通。等到我們完成 A35 雙核之間的 repmsg 通訊支援,再做轉換。
另外提醒,Non-OS BSP AMP 範例使用 UART16 打印,但是在 TF-A 是將 UART16 設定給 RTP M4 使用,需要修改才能給 A35 用來打印訊息。 修改檔案 buildroot/output/build/arm-trusted-firmware-custom/fdts/ma35d1.dtsi 將
改為 。 重新編譯 make arm-trusted-firmware-rebuild
好的,明白,多谢支持!
在使用定时器开发时,加载新塘定时器驱动,定时器可以正常产生周期中断,我们需要将定时器驱动模块引入到我们开发的模块中,我们模块对特定中断使用EXPORT_SYMBOL进行了导出操作,在使能定时器GIC中断,并使能定时器中断后,出现中断只响应一次的情况,因为64位CPU我们是第一次使用,请问关于CPU部分是否有其他特殊的设置,比如需要设置中断组或者是其他寄存器? 以下是部分关于GIC改动代码: `static void exception_irq_entry gic_handle_irq(struct pt_regs regs) { u32 irqstat, irqnr; struct gic_chip_data gic = &gic_data[0]; void iomem *cpu_base = gic_data_cpu_base(gic);
do { irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK); irqnr = irqstat & GICC_IAR_INT_ID_MASK;
} while (1); } EXPORT_SYMBOL(g_mod_handle_irq);`