在a PCIe EP测试驱动中,它调用
dma_alloc_coherent()
分配16K dma空间,并分别打印返回的虚拟地址和总线地址。
在我的 aarch64 系统上,打印如下所示:
[ 106.426075] edev 0000:01:00.0: Allocated DMA region virt 000000009ddf3f42, phys 00000000b8ade6d9
根据我的理解,第二个地址
00000000b8ade6d9
是总线地址,不一定是物理地址。但如果系统禁用了 IOMMU/SMMU,则总线地址应与物理地址相同。
为了简化问题,我已经在系统中禁用了 IOMMU/SMMU(通过在 Kconfig 中禁用
CONFIG_IOMMU_SUPPORT
,并在 dts 中禁用 smmu
设备),因此第二个地址应该是物理地址。
令人困惑的是,我的系统只有从
0
开始的2G物理内存,地址00000000b8ade6d9
不属于这个范围。怎么可能?
顺便说一句,我正在使用 PetaLinux 2023.1 为 Versal 设备的 PS 构建内核。内核版本是
6.1.5-xilinx-v2023.1
。以下是一些相关信息:
root@a72:/home/cmic# dmesg|more
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
[ 0.000000] Linux version 6.1.5-xilinx-v2023.1 (oe-user@oe-host) (aarch64-xilinx-linux-gcc (GCC) 12.
2.0, GNU ld (GNU Binutils) 2.39.0.20220819) #1 SMP Fri Apr 21 07:47:58 UTC 2023
[ 0.000000] Machine model: Xilinx Versal
[ 0.000000] earlycon: pl11 at MMIO32 0x00000000ff000000 (options '115200n8')
[ 0.000000] printk: bootconsole [pl11] enabled
[ 0.000000] efi: UEFI not found.
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000000000000-0x000000007fffffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x000000007fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000007fffffff]
[ 0.000000] cma: Reserved 256 MiB at 0x000000006be00000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: MIGRATE_INFO_TYPE not supported.
[ 0.000000] psci: SMC Calling Convention v1.2
[ 0.000000] percpu: Embedded 18 pages/cpu s35816 r8192 d29720 u73728
[ 0.000000] pcpu-alloc: s35816 r8192 d29720 u73728 alloc=18*4096
[ 0.000000] pcpu-alloc: [0] 0 [0] 1
[ 0.000000] Detected PIPT I-cache on CPU0
[ 0.000000] CPU features: detected: GIC system register CPU interface
[ 0.000000] CPU features: detected: Spectre-v2
[ 0.000000] CPU features: detected: Spectre-BHB
[ 0.000000] CPU features: detected: ARM erratum 1742098
[ 0.000000] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
[ 0.000000] alternatives: applying boot alternatives
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 516096
[ 0.000000] Kernel command line: console=ttyAMA0 earlycon=pl011,mmio32,0xFF000000,115200n8 clk_ignor
e_unused root=/dev/mmcblk0p2 rw rootwait
[ 0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[ 0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[ 0.000000] Memory: 1763520K/2097152K available (14464K kernel code, 7962K rwdata, 4080K rodata, 217
6K init, 2358K bss, 71488K reserved, 262144K cma-reserved)
...
root@a72:/home/cmic# cat /proc/iomem
00000000-7fffffff : System RAM
00210000-0143ffff : Kernel code
01440000-0165ffff : reserved
01660000-0207ffff : Kernel data
6be00000-7ddfffff : reserved
7deb6000-7debcfff : reserved
7f8a2000-7fba2fff : reserved
7fba3000-7fbc6fff : reserved
7fbc9000-7fbcbfff : reserved
7fbcc000-7fbdcfff : reserved
7fbdd000-7fffffff : reserved
f1000000-f1000fff : f1000000.i2c i2c@f1000000
f1020000-f1020fff : f1020000.gpio gpio@f1020000
f1030000-f1030fff : f1030000.spi spi@f1030000
f1050000-f105ffff : f1050000.mmc mmc@f1050000
f1270000-f1273fff : f1270000.sysmon sysmon@f1270000
f12a0000-f12a00ff : f12a0000.rtc rtc@f12a0000
f6070000-f608ffff : f6150000.memory-controller ddrmc_noc_base
f6150000-f6151fff : f6150000.memory-controller ddrmc_base
f9000000-f907ffff : GICD
f9080000-f90fffff : GICR
fd010000-fd09ffff : fd010000.pmu pmu@10000
ff000000-ff000fff : serial@ff000000
ff000000-ff000fff : ff000000.serial serial@ff000000
ff010000-ff010fff : serial@ff010000
ff010000-ff010fff : ff010000.serial serial@ff010000
ff020000-ff020fff : ff020000.i2c i2c@ff020000
ff030000-ff030fff : ff030000.i2c i2c@ff030000
ff040000-ff040fff : ff040000.spi spi@ff040000
ff0c0000-ff0c0fff : ff0c0000.ethernet ethernet@ff0c0000
ffa80000-ffa80fff : ffa80000.dma dma@ffa80000
ffa90000-ffa90fff : ffa90000.dma dma@ffa90000
ffaa0000-ffaa0fff : ffaa0000.dma dma@ffaa0000
ffab0000-ffab0fff : ffab0000.dma dma@ffab0000
ffac0000-ffac0fff : ffac0000.dma dma@ffac0000
ffad0000-ffad0fff : ffad0000.dma dma@ffad0000
ffae0000-ffae0fff : ffae0000.dma dma@ffae0000
ffaf0000-ffaf0fff : ffaf0000.dma dma@ffaf0000
20100000000-2010fffffff : axi-pcie@20100000000
20100000000-201027fffff : PCI Bus 0000:01
20100000000-20100ffffff : 0000:01:00.0
20100000000-20100ffffff : edev
20101000000-20101ffffff : 0000:01:00.0
20101000000-20101ffffff : edev
20102000000-2010200ffff : 0000:01:00.0
20102000000-2010200ffff : edev
20140000000-2014fffffff : 20140000000.axi-pcie cfg
20180000000-2018000ffff : 20140000000.axi-pcie breg