-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathdma_wr_desc.sh
More file actions
executable file
·73 lines (57 loc) · 2.49 KB
/
Copy pathdma_wr_desc.sh
File metadata and controls
executable file
·73 lines (57 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
. ./dma_param.sh
#--------------------- Configure DMA-SG descriptors ---------------------#
echo "Writing descriptors..."
write_descriptor() {
local desc_base=$1
local next_desc=$2
local buffer_addr=$3
local buffer_size=$4
local mask=$5
reg_write $((desc_base + 0x00)) $((next_desc + XDMA_BIAS))
reg_write $((desc_base + 0x08)) $buffer_addr
reg_write $((desc_base + 0x18)) $((buffer_size | mask))
reg_write $((desc_base + 0x1C)) $((0))
}
# Descriptor 0: H2C transfer to Buffer0 (S2MM)
write_descriptor $DMA_DESC0 $DMA_DESC1 $BUFFER_ADDR0 $BUFFER_SIZE $SOF_MASK
# Descriptor 1: H2C transfer to Buffer1 (S2MM)
write_descriptor $DMA_DESC1 $DMA_DESC0 $BUFFER_ADDR1 $BUFFER_SIZE $EOF_MASK
# Descriptor 2: C2H read from Buffer0 (MM2S)
write_descriptor $DMA_DESC2 $DMA_DESC3 $BUFFER_ADDR0 $BUFFER_SIZE $SOF_MASK
# Descriptor 3: C2H read from Buffer1 (MM2S)
write_descriptor $DMA_DESC3 $DMA_DESC2 $BUFFER_ADDR1 $BUFFER_SIZE $EOF_MASK
echo "Descriptors write complete."
#--------------------- Check descriptors ---------------------#
echo "Checking descriptors..."
check_descriptor() {
local desc_base=$1
local next_desc=$2
local buffer_addr=$3
local buffer_size=$4
local flags=$5
read_dec=$(reg_read $((desc_base + 0x00)))
if [ $read_dec -ne $((next_desc + XDMA_BIAS)) ]; then
echo "\033[31m[Error] Address: 0x$(printf '%08x' $((desc_base + 0x00))) Value: 0x$(printf '%08x' $read_dec)\033[0m"
exit 1
fi
read_dec=$(reg_read $((desc_base + 0x08)))
if [ $read_dec -ne $buffer_addr ]; then
echo "\033[31m[Error] Address: 0x$(printf '%08x' $((desc_base + 0x08))) Value: 0x$(printf '%08x' $read_dec)\033[0m"
exit 1
fi
read_dec=$(reg_read $((desc_base + 0x18)))
if [ $read_dec -ne $((buffer_size | flags)) ]; then
echo "\033[31m[Error] Address: 0x$(printf '%08x' $((desc_base + 0x18))) Value: 0x$(printf '%08x' $read_dec)\033[0m"
exit 1
fi
read_dec=$(reg_read $((desc_base + 0x1C)))
if [ $read_dec -ne $((0)) ]; then
echo "\033[31m[Error] Address: 0x$(printf '%08x' $((desc_base + 0x1C))) Value: 0x$(printf '%08x' $read_dec)\033[0m"
exit 1
fi
}
check_descriptor $DMA_DESC0 $DMA_DESC1 $BUFFER_ADDR0 $BUFFER_SIZE $SOF_MASK
check_descriptor $DMA_DESC1 $DMA_DESC0 $BUFFER_ADDR1 $BUFFER_SIZE $EOF_MASK
check_descriptor $DMA_DESC2 $DMA_DESC3 $BUFFER_ADDR0 $BUFFER_SIZE $SOF_MASK
check_descriptor $DMA_DESC3 $DMA_DESC2 $BUFFER_ADDR1 $BUFFER_SIZE $EOF_MASK
echo "Descriptors check complete."