2019-08-16 Aditya Basu (mitthu
)
# Mount the device bash-4.3$ mkdir -p /sys/cbdma bash-4.3$ /bin/bind \#cbdma /sys/cbdma bash-4.3$ cd /sys/cbdma/ # All files bash-4.3$ ls iommu ktest reset stats ucopy # Display information about CBDMA bash-4.3$ cat stats Intel CBDMA [8086:2021] registered at 00:03.0 Driver Information: mmio: 0xfffffff0000a0000 mmio_phy: 0xfebf0000 mmio_sz: 16384 total_channels: 1 desc_kaddr: 0xffff8001104c2000 desc_paddr: 0x00000001104c2000 desc_num: 1 ver: 0x33 status_kaddr: 0xffff80010c8d5960 status_paddr: 0x000000010c8d5960 status_value: 0x91c1420 PCIe Config Registers: PCICMD: 0x406 PCISTS: 0x10 RID: 0x4 CB_BAR: 0xfebf0004 DEVSTS: 0x0 PMCSR: 0x8 DMAUNCERRSTS: 0x0 DMAUNCERRMSK: 0x0 DMAUNCERRSEV: 0x98 DMAUNCERRPTR: 0xa DMAGLBERRPTR: 0x0 CHANERR_INT: 0x0 CHANERRMSK_INT: 0x60000 CHANERRSEV_INT: 0x10000 CHANERRPTR: 0x2 CHANNEL_0 MMIO Registers: CHANCMD: 0x0 CBVER: 0x33 major=3 minor=3 CHANCTRL: 0x10c CHANSTS: 0x3 [HALTED], desc_addr: 0x0000000000000000, raw: 0x3 CHAINADDR: 0x0000000000000000 CHANCMP: 0x0000000000000000 DMACOUNT: 0 CHANERR: 0x0 # Perform self-test (multiple runs) bash-4.3$ cat ktest cbdma: info: DMACOUNT = 1 Self-test Intel CBDMA [8086:2021] registered at 00:03.0 Channel Status: ACTIVE (raw: 0x0) Copy Size: 64 (0x40) srcfill: 2 (0x32) dstfill: 0 (0x30) src_str (after copy): 111111111111111111111111111111111111111111111111111111111111111 dst_str (after copy): 111111111111111111111111111111111111111111111111111111111111111 bash-4.3$ cat ktest cbdma: info: DMACOUNT = 1 Self-test Intel CBDMA [8086:2021] registered at 00:03.0 Channel Status: ACTIVE (raw: 0x0) Copy Size: 64 (0x40) srcfill: 3 (0x33) dstfill: 0 (0x30) src_str (after copy): 222222222222222222222222222222222222222222222222222222222222222 dst_str (after copy): 222222222222222222222222222222222222222222222222222222222222222 # Reset the CBDMA bash-4.3$ echo 1 >reset cbdma: reset performed bash-4.3$ cat reset Status: No pending reset Write '1' to perform reset! # Performing DMA with the user-space companion program (with IOMMU in front) # Note: This will not work with QEMU! Akaros should be running bare-metal. bash-4.3$ echo 1 >iommu bash-4.3$ cat iommu IOMMU enabled = yes Write '0' to disable or '1' to enable the IOMMU bash-4.3$ ucbdma 00:03.0 got device: 00:04.0 Mappings for iommu@0xffff80007bebfce8 <empty> Mappings for iommu@0xffff800009376ae8 pid = 72 device = 0:3.0 [user] page size: 4096 bytes [user] src: 1111111111111111111 [user] dst: 0000000000000000000 [user] ucbdma: 0x100000000, size: 80 (or 0x50) [user] desc->xref_size: 20 [user] desc->src_addr: 0x1000000b4 [user] desc->dest_addr: 0x1000000c8 [user] desc->next_desc_addr: 0x100000000 [user] ndesc: 1 [user] status: 0x0 [user] ucbdma ptr: 0x100000000 [kern] value from userspace: 0x0000000100000000 [kern] IOMMU = ON [kern] ucbdma: user: 0x0000000100000000 kern: 0xffff8002929a4000 ndesc: 1 cbdma: info: DMACOUNT = 1 [user] ucbdma: 0x100000000, size: 80 (or 0x50) [user] desc->xref_size: 20 [user] desc->src_addr: 0x1000000b4 [user] desc->dest_addr: 0x1000000c8 [user] desc->next_desc_addr: 0x100000000 [user] ndesc: 1 [user] status: 0x1b041003 [user] channel_status: 1b041003 [user] src: 1111111111111111111 [user] dst: 0000000000000000000