精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MPSoC Linux工程寒設計 DMA測試軟件編譯結果

454398 ? 來源:賽靈思中文社區 ? 作者:付漢杰 ? 2020-11-04 12:19 ? 次閱讀

1. 參考文檔 1.1. AR69446

AR# 69446 Zynq UltraScale+ MPSoC Example Design - Use AXI HPC port to perform coherent transfers

1.2. Zynq UltraScale MPSoC Cache Coherency

Zynq UltraScale MPSoC Cache Coherency

1.3. MPSoC HPC 連接

2. 主要更改 2.1. AxCACHE

需要把AXI上的AxCACHE,也就是ARCACHE[3:0]和AWCACHE[3:0],設置成1111, 表示Write-back Read and Write-allocate。

2.2. AxPROT[1] 2.3. Cache監聽(Snooping)

缺省情況下,MPSoC CCI (Cache Coherent Interconnect)不監聽APU cluster。為了利用CCI cache同步功能,需要設置寄存器Snoop_Control_Register_S3的最低位,使CCI監聽APU cluster。
寄存器Snoop_Control_Register_S3的地址在0xFD6E4000,最低位的含義使Enable issuing of snoop requests from slave interface S3。

2.3.1. 修改FSBL

可以在FSBL里修改Snoop_Control_Register_S3。

case XFSBL_STAGE4:
{

XFsbl_Printf(DEBUG_INFO,
"================= In Stage 4 ============ /n/r");

{
/* Modify Register Snoop_Control_Register_S3 for HPC Cache Cohenercy */
unsigned int ui_snoop_control=0;
XFsbl_Printf(DEBUG_PRINT_ALWAYS,"Check snoop control register at 0xfd6e4000./n/r");
ui_snoop_control = XFsbl_In32(0xfd6e4000);
XFsbl_Printf(DEBUG_PRINT_ALWAYS,"Snoop control register at 0xfd6e4000 original value: 0x%08x./n/r", ui_snoop_control );
XFsbl_Out32(0xfd6e4000, ui_snoop_control|0x1);

ui_snoop_control = XFsbl_In32(0xfd6e4000);
XFsbl_Printf(DEBUG_PRINT_ALWAYS,"Snoop control register at 0xfd6e4000 new value: 0x%08x./n/r", ui_snoop_control );
}

/**
* Handoff to the applications
* Handoff address
* xip
* ps7 post config
*/
FsblStatus = XFsbl_Handoff(&FsblInstance, PartitionNum, EarlyHandoff);

... ...
}

2.4. Broadcasting Shareable

為了使相關傳輸被CCI監聽,需要設置寄存器lpd_apu的最低兩位為1,而且必須在A53處于復位態時設置。我們利用MPSoC BootROM在加載時設置寄存器lpd_apu。
為了用MPSoC BootROM在加載時設置寄存器lpd_apu,需要準備寄存器初始化文件,并且使用寄存器初始化文件創建啟動文件boot.bin。

2.4.1. 寄存器初始化文件

.set. 0xFF41A040 = 0x3;

2.4.2. 修改啟動文件boot.bin的配置信息

在啟動文件boot.bin的配置信息中,以關鍵字"[init]"添加寄存器初始化文件。

//arch = zynqmp; split = false; format = BIN
the_ROM_image:
{
...
[init]
/regs.init
}

完整的boot.bin的配置信息,bootgen.bif

/* bootgen -arch zynqmp -image bootgen.bif -o BOOT.BIN -w on */

the_ROM_image:
{
[bootloader, destination_cpu=a53-0] ./zcu106_fsbl.elf
[pmufw_image] ./images/linux/pmufw.elf
[destination_device=pl] ./images/linux/system.bit
[destination_cpu=a53-0, exception_level=el-3, trustzone] ./images/linux/bl31.elf
[destination_cpu=a53-0, exception_level=el-2] ./images/linux/u-boot.elf
[init]./regs.init
}

2.4.3. 創建啟動文件boot.bin

創建啟動文件boot.bin

$ bootgen -arch zynqmp -image bootgen.bif -o BOOT.BIN -w on

****** Xilinx Bootgen v2019.1
**** Build date : May 24 2019-14:54:05
** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.

3. 測試環境 3.1. 測試工具

測試過程,使用Vivado 2019.1創建邏輯設計和編譯邏輯工程;使用PetaLinux 2019.1 創建和編譯Linux工程。

3.2. 測試工程

為了簡化設計,使用ZCU106 BSP 2019.1 作為基礎。

3.2.1. 邏輯設計

對于邏輯設計,刪除了ZCU106 BSP 2019.1中的其它邏輯設計,然后添加了相關設計。

3.2.2. Linux工程

對于Linux工程,以ZCU106 BSP 2019.1創建PetaLinux工程,再倒入新的邏輯設計HDF文件。

4. 硬件測試工程

可以添加CDMA和AXI DMA,連接到HPC端口,測試CCI cache同步功能。

4.1. DMA硬件設計 4.1.1. MPSoC頂層設計

MPSoC頂層設計

測試中,使用了HPC0端口,使用了GPIO去驅動AxCACHE,AxPROT[1]信號

4.1.2. DMA內部設計

4.1.3. MPSoC地址分配

5. 測試軟件 5.1. DMA驅動

在Linux Kernel中使能如下選項,加入DMA驅動:

1)CONFIG_DMADEVICES
2)CONFIG_XILINX_DMA

5.2. DMA測試軟件

以模塊形式在Linux Kernel中使能如下選項,加入DMA測試軟件:

1)CONFIG_XILINX_CDMATEST=m
2)CONFIG_XILINX_DMATEST=m

5.3. DMA測試軟件

如果想看軟件使用的內存屬性,比如是否cache,可以在Linux Kernel中使能如下選項。Linux會在目錄/sys/kernel/debug/kernel_page_tables下導出內存頁表信息。驅動打印使用的內存地址,再結合內存頁表信息,可以確認內存屬性。

1)CONFIG_ARM64_PTDUMP_CORE=y
2)CONFIG_ARM64_PTDUMP_DEBUGFS=y

5.4. DMA的設備樹

如下修改system-user.dtsi。

/include/ "system-conf.dtsi"
/ {
cdmatest_1: cdmatest@1 {
compatible ="xlnx,axi-cdma-test-1.00.a";
dmas = ;
dma-names = "cdma";
} ;

axidmatest_1: axidmatest@1 {
compatible ="xlnx,axi-dma-test-1.00.a";
dmas = &axi_dma_0 1>;
dma-names = "axidma0", "axidma1";
} ;
};

/* dma-coherent; */
&psu_axi_cdma_0 {
status = "okay";
dma-coherent;
};

/* dma-coherent; */
&axi_dma_0 {
status = "okay";
dma-coherent;
};

設備樹節點psu_axi_cdma_0,axi_dma_0,在Petalinux自動生成的pl.dtsi里定義。

如果不使用Petalinux,以此為模板,增加設備樹節點。

5.5. DMA測試軟件編譯結果

編譯Linux后,DMA測試軟件以內核模塊的文件存在。

/lib/modules/4.19.0/kernel/drivers/dma/xilinx/cdmatest.ko
/lib/modules/4.19.0/kernel/drivers/dma/xilinx/axidmatest.ko

6. 測試過程 6.1. 沒有使能CCI cache同步功能 6.1.1. CDMA 測試

# insmod cdmatest.ko
[ 98.016731] xilinx_cdmatest_probe()-619: Begin.
[ 98.040884] cdmatest: Started 1 threads using dma3chan0
[ 98.094364] xilinx-vdma a0001000.dma: Channel (____ptrval____) has errors 10, cdr 788c0000 tdr 788c0000
[ 98.227925] dma3chan0-copy0: dstbuf[0x8] not copied! Expected d7, got 37
[ 98.238618] dma3chan0-copy0: dstbuf[0x9] not copied! Expected d6, got 36
[ 98.245314] dma3chan0-copy0: dstbuf[0xa] not copied! Expected d5, got 35
......
[ 98.434642] dma3chan0-copy0: dstbuf[0x26] not copied! Expected d9, got 39
[ 98.441429] dma3chan0-copy0: dstbuf[0x27] not copied! Expected d8, got 38
[ 98.448210] dma3chan0-copy0: 20 errors suppressed
[ 98.452908] dma3chan0-copy0: #0: 52 errors with
[ 98.456908] src_off=0x8 dst_off=0x8 len=0x34
[ 98.523180] xilinx-vdma a0001000.dma: Channel (____ptrval____) has errors 100, cdr 788c0000 tdr 788c0000
[ 101.606407] dma3chan0-copy0: #1: test timed out

6.1.2. AXI-DMA 測試

# insmod axidmatest.ko
[ 392.529420] dmatest: Started 1 threads using dma2chan0 dma2chan1
[ 392.665889] xilinx-vdma a0010000.dma: Channel (____ptrval____) has errors 10, cdr 6fcb0000 tdr 6fcb0500
[ 393.729538] xilinx-vdma a0010000.dma: Cannot start channel (____ptrval____): 10009
[ 394.806248] dma2chan0-dma2c: #0: tx test timed out
[ 394.953756] xilinx-vdma a0010000.dma: Channel (____ptrval____) has errors 10, cdr 6fcb0580 tdr 6fcb0a80

6.2. 使能CCI cache同步功能 6.2.1. GPIO 初始化

# =====================================================
# gpio0_hpc0_awcache, 0xa0002000, AWCACHE[3:0] 1111
devmem 0xa0002004
devmem 0xa0002004 32 0x0
devmem 0xa0002004
devmem 0xa0002000 32 0xf
devmem 0xa0002000

# gpio1_hpc0_awprot, 0xa0003000, AWPROT
# AxPROT[1] ,0,secure transactions, standalone
# AxPROT[1] ,1,non-secure transactions, Linux kernel/Linux userspace.
devmem 0xa0003004
devmem 0xa0003004 32 0x0
devmem 0xa0003004
devmem 0xa0003000 32 0x2
devmem 0xa0003000

# gpio2_hpc0_arcache, 0xa0004000, ARCACHE[3:0] 1111
devmem 0xa0004004
devmem 0xa0004004 32 0x0
devmem 0xa0004004
devmem 0xa0004000 32 0xf
devmem 0xa0004000

# gpio3_hpc0_arprot, 0xa0003000, ARPROT
# AxPROT[1] ,0,secure transactions, standalone
# AxPROT[1] ,1,non-secure transactions, Linux kernel/Linux userspace.
devmem 0xa0005004
devmem 0xa0005004 32 0x0
devmem 0xa0005004
devmem 0xa0005000 32 0x2
devmem 0xa0005000

6.2.2. CDMA 測試

# insmod cdmatest.ko
[ 523.246063] cdmatest: Started 1 threads using dma3chan0
[ 539.926093] dma3chan0-copy0: terminating after 100 tests, 0 failures (status 0)

6.2.3. AXI-DMA 測試

# insmod axidmatest.ko
[ 210.871166] dmatest: Started 1 threads using dma1chan0 dma1chan1
[ 212.937889] dma1chan0-dma1c: terminating after 5 tests, 0 failures (status 0)

編輯;hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11229

    瀏覽量

    208926
  • CDMA
    +關注

    關注

    1

    文章

    584

    瀏覽量

    117937
  • dma
    dma
    +關注

    關注

    3

    文章

    559

    瀏覽量

    100429
  • MPSoC
    +關注

    關注

    0

    文章

    198

    瀏覽量

    24252
收藏 人收藏

    評論

    相關推薦

    如何編譯Linux Kernel

    整個Linux內核編譯的過程非常簡單,但是內核編譯需要花費很長的時間。因為Linux內核的代碼非常多。當然,如果你的計算機性能強勁,時間會短很多。當你準備好性能強勁的計算機后,讓小編帶
    發表于 06-07 16:26 ?1.1w次閱讀
    如何<b class='flag-5'>編譯</b><b class='flag-5'>Linux</b> Kernel

    Linux內核的編譯主要過程

    Linux內核的編譯主要過程: 配置、編譯、安裝 。
    發表于 08-08 16:02 ?709次閱讀
    <b class='flag-5'>Linux</b>內核的<b class='flag-5'>編譯</b>主要過程

    如何構建linux開發環境和編譯軟件工程、應用程序

    前文介紹了如何使用官方提供的鏡像文件啟動開發板,本文將說明如何構建linux開發環境和編譯軟件工程、應用程序。
    的頭像 發表于 01-03 12:31 ?1940次閱讀
    如何構建<b class='flag-5'>linux</b>開發環境和<b class='flag-5'>編譯</b><b class='flag-5'>軟件工程</b>、應用程序

    NVIDIA 招聘 軟件測試篇(深圳、上海)

    編譯,如Makefile, GCC, GDB等,較強的Debug能力5.熟悉C語言6.分析測試結果,找出測試失敗的解決方案7.功能測試,通用
    發表于 03-21 16:09

    Zynq UltraScale + MPSoC USB 3.0 CDC器件類設計

    Linux主機測試CDC功能履行實施細節設計類型僅PSSW類型Zynq?UltraScale+?MPSoC Linux操作系統CPU的ARM Cortex A53 Core 0以1.1
    發表于 01-03 09:59

    如何利用ZYNQ MPSoC玩DOOM?

    賽靈思和 DornerWorks 的系統軟件團隊在賽靈思的 Zynq? Ultrascale+? MPSoC 上啟動 Xen Project 管理程序時,我們發現可通過運行當年叱詫一時的流行電子游戲
    發表于 10-09 06:21

    請問Zynq Ultrascale + MPSOC本身是否存在問題?

    ZCU102演示,DP-to-HDMI適配器目前無法開箱即用,即使將來也可能只支持一部分適配器。這需要更新的芯片版本和更多測試。”我想明白為什么會這樣。1)Zynq Ultrascale + MPSOC
    發表于 10-14 09:17

    XILINX MPSOC系列FPGA視頻教程

    Vitis軟件調試50_AXI DMA之AN9767信號發生器Vivado工程51_AXI DMA之AN9767信號發生器Vitis工程七、
    發表于 07-21 10:34

    Linux內核編譯詳談

    Linux內核編譯詳談
    發表于 10-30 09:51 ?7次下載
    <b class='flag-5'>Linux</b>內核<b class='flag-5'>編譯</b>詳談

    Zynq UltraScale+ MPSoC 上的多個Linux UIO設計

    本實驗工程將介紹如何利在賽靈思異構多處理器產品系列 Zynq UtralScale+ MPSoC ZCU102 嵌入式評估板上實現多個 UIO,同時借助賽靈思的工具完成硬件工程linux
    發表于 03-21 14:55 ?3294次閱讀
    Zynq UltraScale+ <b class='flag-5'>MPSoC</b> 上的多個<b class='flag-5'>Linux</b> UIO設計

    Linux DMA Engine框架的介紹

    此會話描述如何從設備驅動程序在Linux中使用DMA。 這包括內存分配,緩存控制和DMA設備控制。 詳細介紹了Linux DMA Eng
    的頭像 發表于 11-23 06:29 ?6264次閱讀

    fireflyROC-RK3328編譯Linux固件簡介

    本 SDK 開發環境是在 Ubuntu 上開發測試的。我們推薦使用 Ubuntu 16.04 的系統進行編譯。其他的 Linux 版本可能需要對軟件包做相應調整。 除了系統要求外,還有
    的頭像 發表于 12-21 10:56 ?3839次閱讀
    fireflyROC-RK3328<b class='flag-5'>編譯</b><b class='flag-5'>Linux</b>固件簡介

    C語言條件編譯語句and單片機DMA的介紹

    C語言條件編譯語句and單片機DMA的介紹C語言條件編譯:這里面介紹的很詳細,也有歷程。DMA的介紹:介紹了單片機中為什么要使用DMA,以及
    發表于 11-29 10:36 ?3次下載
    C語言條件<b class='flag-5'>編譯</b>語句and單片機<b class='flag-5'>DMA</b>的介紹

    測試MPSoC GEM的1588功能

    MPSoC的MAC支持1588。在Linux Kernel的配置項中使能CONFIG_MACB_USE_HWSTAMP,并在Linux rootfs添加Linux ptp/ethtoo
    的頭像 發表于 08-02 09:39 ?1696次閱讀
    <b class='flag-5'>測試</b><b class='flag-5'>MPSoC</b> GEM的1588功能

    每次Vivado編譯結果都一樣嗎

    很多FPGA工程師都有這種困惑,Vivado每次編譯結果都一樣嗎? 在AMD官網上,有這樣一個帖子: Are Vivado results repeatable for identical
    的頭像 發表于 11-11 11:23 ?191次閱讀
    每次Vivado<b class='flag-5'>編譯</b>的<b class='flag-5'>結果</b>都一樣嗎