2018.x Zynq UltraScale + MPSoC:如何在Linux中实现SATA性能-Xilinx-AMD社区-FPGA CPLD-ChipDebug

2018.x Zynq UltraScale + MPSoC:如何在Linux中实现SATA性能

问题描述

在Zynq UltraScale + MPSoC器件上,如何在Linux中实现SATA读写性能?

解决/修复方法

要在Linux中实现SATA读写性能,您需要按照以下说明操作。

1)在Vivado设计中为SATA控制器启用CCI(Coherency)并生成HDF,如下所示:

2)使用上述设计HDF创建PetaLinux项目。

有关详细信息,请参阅(UG1144)。

3)在system-user.dtsi中为SATA控制器节点添加器件树节点,如下所示。

请注意,您可以为每个端口的SATA控制器应用一致性。

&sata {
DMA相干;
};

4)在<plnx-proj-root> /porject-spec/hw-description/psu_init.c中的函数psu_apply_master_tz中启用SLCR_SATA TZ寄存器。

unsigned long psu_apply_master_tz(void)
{
/ *
* RPU
* /
/ *
* DP TZ
* /
/ *
*注册:slcr_dpdma @ 0XFD690040
* DisplayPort DMA的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_DPDMA_TZ 1
* DPDMA TrustZone设置
*(OFFSET,MASK,VALUE)(0XFD690040,0x00000001U,0x00000001U)
* /
PSU_Mask_Write(FPD_SLCR_SECURE_SLCR_DPDMA_OFFSET,
0x00000001U,0x00000001U);
/ * ################################################ ##################### * /
/ *
* SATA TZ
* /
/ *
*注册:slcr_sata @ 0XFD690020 1
* SATA TrustZone设置
*(OFFSET,MASK,VALUE)(0XFD690020,0x0000000FU,0x0000000FU)
* /
PSU_Mask_Write(0xFD690020,0x0000000FU,0x0000000FU);
/ *
* PCIE TZ
* /
/ *
*注册:slcr_pcie @ 0XFD690030
* DMA通道0的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_0 1
* DMA通道1的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_1 1
* DMA通道2的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_2 1
* DMA Channel 3的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_3 1
* Ingress地址转换的TrustZone分类0
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_0 1
* Ingress地址转换的TrustZone分类1
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_1 1
* Ingress地址转换的TrustZone分类2
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_2 1
* Ingress地址转换的TrustZone分类3
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_3 1
* Ingress地址转换的TrustZone分类4
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_4 1
* Ingress地址转换的TrustZone分类5
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_5 1
* Ingress地址转换的TrustZone分类6
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_6 1
* Ingress地址转换的TrustZone分类7
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_INGR_7 1
* Egress地址转换的TrustZone分类0
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_0 1
*出口地址转换1的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_1 1
* Egress地址转换的TrustZone分类2
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_2 1
*出口地址转换的TrustZone分类3
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_3 1
*出口地址转换的TrustZone分类4
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_4 1
*出口地址转换的TrustZone分类5
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_5 1
*出口地址转换的TrustZone分类6
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_6 1
*出口地址转换的TrustZone分类7
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_AT_EGR_7 1
* DMA寄存器的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_DMA_REGS 1
* MSIx表的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_MSIX_TABLE 1
* MSIx PBA的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_MSIX_PBA 1
* ECAM的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_ECAM 1
* Bridge Common寄存器的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_PCIE_TZ_BRIDGE_REGS 1
* PCIe TrustZone设置。该寄存器只能在bootu期间修改
* p(禁用PCIe块时)
*(OFFSET,MASK,VALUE)(0XFD690030,0x01FFFFFFU,0x01FFFFFFU)
* /
PSU_Mask_Write(FPD_SLCR_SECURE_SLCR_PCIE_OFFSET,
0x01FFFFFFU,0x01FFFFFFU);
/ * ################################################ ##################### * /
/ *
* USB TZ
* /
/ *
*注册:slcr_usb @ 0XFF4B0034
* USB3_0的TrustZone分类
* PSU_LPD_SLCR_SECURE_SLCR_USB_TZ_USB3_0 1
* USB3_1的TrustZone分类
* PSU_LPD_SLCR_SECURE_SLCR_USB_TZ_USB3_1 1
* USB3 TrustZone设置
*(OFFSET,MASK,VALUE)(0XFF4B0034,0x00000003U,0x00000003U)
* /
PSU_Mask_Write(LPD_SLCR_SECURE_SLCR_USB_OFFSET,
0x00000003U,0x00000003U);
/ * ################################################ ##################### * /
/ *
* SD TZ
* /
/ *
*注册:IOU_AXI_RPRTCN @ 0XFF240004
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_SD0_AXI_ARPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_SD1_AXI_ARPROT 2
* AXI读保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240004,0x003F0000U,0x00120000U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_RPRTCN_OFFSET,
0x003F0000U,0x00120000U);
/ * ################################################ ##################### * /
/ *
*注册:IOU_AXI_WPRTCN @ 0XFF240000
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_SD0_AXI_AWPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_SD1_AXI_AWPROT 2
* AXI写保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240000,0x003F0000U,0x00120000U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
0x003F0000U,0x00120000U);
/ * ################################################ ##################### * /
/ *
* GEM TZ
* /
/ *
*注册:IOU_AXI_RPRTCN @ 0XFF240004
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM0_AXI_ARPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM1_AXI_ARPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM2_AXI_ARPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_GEM3_AXI_ARPROT 2
* AXI读保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240004,0x00000FFFU,0x00000492U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_RPRTCN_OFFSET,
0x00000FFFU,0x00000492U);
/ * ################################################ ##################### * /
/ *
*注册:IOU_AXI_WPRTCN @ 0XFF240000
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM0_AXI_AWPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM1_AXI_AWPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM2_AXI_AWPROT 2
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_GEM3_AXI_AWPROT 2
* AXI写保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240000,0x00000FFFU,0x00000492U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
0x00000FFFU,0x00000492U);
/ * ################################################ ##################### * /
/ *
* QSPI TZ
* /
/ *
*注册:IOU_AXI_WPRTCN @ 0XFF240000
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_QSPI_AXI_AWPROT 2
* AXI写保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240000,0x0E000000U,0x04000000U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
0x0E000000U,0x04000000U);
/ * ################################################ ##################### * /
/ *
* NAND TZ
* /
/ *
*注册:IOU_AXI_RPRTCN @ 0XFF240004
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_RPRTCN_NAND_AXI_ARPROT 2
* AXI读保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240004,0x01C00000U,0x00800000U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_RPRTCN_OFFSET,
0x01C00000U,0x00800000U);
/ * ################################################ ##################### * /
/ *
*注册:IOU_AXI_WPRTCN @ 0XFF240000
* AXI保护[0] =’0’:正常访问[0] =’1’:Previleged access [
* 1] =’0’:安全访问[1] =’1’:无安全访问[2] =’0’:数据a
* ccess [2] =’1”:指令访问
* PSU_IOU_SECURE_SLCR_IOU_AXI_WPRTCN_NAND_AXI_AWPROT 2
* AXI写保护类型选择
*(OFFSET,MASK,VALUE)(0XFF240000,0x01C00000U,0x00800000U)
* /
PSU_Mask_Write(IOU_SECURE_SLCR_IOU_AXI_WPRTCN_OFFSET,
0x01C00000U,0x00800000U);
/ * ################################################ ##################### * /
/ *
* DMA TZ
* /
/ *
*注册:slcr_adma @ 0XFF4B0024
* ADMA的TrustZone分类
* PSU_LPD_SLCR_SECURE_SLCR_ADMA_TZ 0xFF
* RPU TrustZone设置
*(OFFSET,MASK,VALUE)(0XFF4B0024,0x000000FFU,0x000000FFU)
* /
PSU_Mask_Write(LPD_SLCR_SECURE_SLCR_ADMA_OFFSET,
0x000000FFU,0x000000FFU);
/ * ################################################ ##################### * /
/ *
*注册:slcr_gdma @ 0XFD690050
* GDMA的TrustZone分类
* PSU_FPD_SLCR_SECURE_SLCR_GDMA_TZ 0xFF
* GDMA Trustzone设置
*(OFFSET,MASK,VALUE)(0XFD690050,0x000000FFU,0x000000FFU)
* /
PSU_Mask_Write(FPD_SLCR_SECURE_SLCR_GDMA_OFFSET,
0x000000FFU,0x000000FFU);
/ * ################################################ ##################### * /
返回1;
}

5)在<plnx-proj-root> / project-spec / meta-user / recipes-bsp / fsbl / fsbl _%.bbappend下创建一个FSBL bbappend文件,并添加以下内容以更新对FSBL的psu_init.c更改:

do_compile_prepend(){
install -m 0644 $ {TOPDIR} /../ project-spec / hw-description / psu_init.c $ {TOPDIR} /../ components / plnx_workspace / fsbl / fsbl_hwproj / psu_init.c
}

6)将附加的配方添加到目录<plnx-proj-root> / project-spec / meta-user / recipes-apps中,并在<plnx-proj-root> / project-spec / meta-user / conf中启用此包/petalinuxbsp.conf如下图所示:

IMAGE_INSTALL + =“\
hdparm-xlnx \
7)构建映像并引导目标板。
8)连接JTAG电缆并使用XSDK启动XSCT控制台。
9)停止U-boot并验证SLCR_SATA寄存器,如下所示:
xsct%连接
xsct%ta
1 PS TAP
2 PMU
3 PL
4 PSU
5 RPU
6 Cortex-R5#0(暂停)
7 Cortex-R5#1(锁步模式)
8 APU
9 * Cortex-A53#0(正在运行)
10 Cortex-A53#1(上电复位)
11 Cortex-A53#2(上电复位)
12 Cortex-A53#3(上电复位)
xsct%ta 4
xsct%mrd 0xFD690020
FD690020:0000000F
xsct%
10)一旦验证了SLCR_SATA寄存器,继续启动Linux。
11)一旦Linux启动并在目标板上运行,运行以下命令,您应该能够看到性能:
PetaLinux 2018.2 zcu102-sata-perf / dev / ttyPS0
zcu102-sata-perf登录:root
密码:
根@ zcu102-SATA-PERF:〜#
root @ zcu102-sata-perf:〜#fdisk -l
磁盘/ dev / mmcblk0:15.9 GB,15931539456字节
255个头,63个扇区/轨道,1936个气缸
单位= 16065 * 512 = 8225280字节的柱面
器件启动开始结束块ID系统
/ dev / mmcblk0p1 1 1937 15556608 c Win95 FAT32(LBA)
磁盘/ dev / sda:250.0 GB,250059350016字节
255个头,63个扇区/轨道,30401个气缸
单位= 16065 * 512 = 8225280字节的柱面
磁盘/ dev / sda不包含有效的分区表
根@ zcu102-SATA-PERF:〜#
root @ zcu102-sata-perf:〜#hdparm-xlnx -e / dev / sda
/ dev / sda上:
定时O_DIRECT磁盘写入:10.01秒内3086 MB = 308.42 MB /秒
[221.054179] ata2.00:启用discard_zeroes_data
根@ zcu102-SATA-PERF:〜#

附件

相关附件

名称 文件大小 文件类型
hdparm-xlnx.zip 45 KB 压缩
请登录后发表评论

    没有回复内容