/ # dmesg | grep -i its
[ 0.000000] ITS [mem 0x06020000-0x0603ffff]
[ 0.000000] ITS@0x0000000006020000: allocated 65536 Devices @2080a00000 (flat, esz 8, psz 64K, shr 0) 【所谓flat或indirect指的是devicetable包含了一级表还是两级表,eventid的表只占用了一级】
[ 0.000000] ITS: using cache flushing for cmd queue
[ 0.000000] ITS: Allocator initialized for 57344 LPIs
[ 0.000001] sched_clock: 56 bits at 25MHz, resolution 39ns, wraps every 4398046511103ns
[ 0.120428] Platform MSI: gic-its@6020000 domain created
[ 0.125839] PCI/MSI: /interrupt-controller@6000000/gic-its@6020000 domain created
[ 0.133432] fsl-mc MSI: /interrupt-controller@6000000/gic-its@6020000 domain created
[ 3.128704] workingset: timestamp_bits=44 max_order=19 bucket_order=0
[ 10.487226] ITS: alloc 8192:256
[ 10.487236] ITT 256 entries, 8 bits
/ #
/ # devmem 0x0000000006020100 64 【打印baser寄存器】
0x8907002080A00207 【得到devicetable 第一级表的物理起始地址--》2080A00】
/ #
/ # cat do.sh 【根据起始地址遍历不为0的项】
#!/bin/sh
ADDRBASE=0x2080a00000
for i in `seq 65536`
do
usleep 100
ADDR=$ADDRBASE+$i*8
#echo $((ADDR))"-->"
val=`devmem $((ADDR)) 64`
if [ $((val)) -ne 0 ];then
echo $((ADDR))"-->"
devmem $((ADDR)) 64
fi
done
/ #
/ # devmem 0x2080a000b8 64 【得到只有b8不为0,值如下,这个值哪个是ITT的物理地址?,哪个是deviceid?】
0x80070000B2177800
第二次启动,itt 是 kmalloc 重新分配的
/ # devmem 0x2080a000b8 64 【只有0x2080a000b8不为0, b8/8=23,所以这个跟deviceid可以关联起来】
0x80070000EF64D800 【entry的值】
/ # dmesg | grep cl_added
[ 10.479627] cl_added,itt_addr=0xef64d800, size=8, device_id=0x17 【可以看到ITT_addr=0xEF64D800, 但为什么deviceid找不到deviceid的值?是因为靠entry项的b8偏移关联的,】
/ # cat /proc/interrupts | grep -i msi
127: 14 0 0 0 0 0 0 0 ITS-fMSI 230000 Edge dpio.7
128: 0 3087 0 0 0 0 0 0 ITS-fMSI 230001 Edge dpio.6
129: 0 0 18 0 0 0 0 0 ITS-fMSI 230002 Edge dpio.5
130: 0 0 0 18 0 0 0 0 ITS-fMSI 230003 Edge dpio.4
131: 0 0 0 0 0 0 0 0 ITS-fMSI 230004 Edge dpio.3
132: 0 0 0 0 0 1551 0 0 ITS-fMSI 230005 Edge dpio.2
133: 0 0 0 0 0 0 2879 0 ITS-fMSI 230006 Edge dpio.1
134: 0 0 0 0 0 0 0 802 ITS-fMSI 230007 Edge dpio.0
135: 0 0 0 0 0 0 0 0 ITS-fMSI 230008 Edge dprc.1
136: 1 0 0 0 0 0 0 0 ITS-fMSI 230009 Edge dpni.2
137: 0 0 0 0 0 0 0 0 ITS-fMSI 230010 Edge dpni.1
138: 0 0 0 0 0 0 0 0 ITS-fMSI 230011 Edge dpni.0
139: 0 0 0 0 0 0 0 0 ITS-fMSI 230012 Edge dpmac.17
140: 1 0 0 0 0 0 0 0 ITS-fMSI 230013 Edge dpmac.12
141: 0 0 0 0 0 0 0 0 ITS-fMSI 230014 Edge dpmac.5
/ # ./do.sh 【根据上面打印的ITT_addr继续打印ITE的值】
ef64d800 ---> 【cpu0 eventid==0】
0x80002000
ef64d804 ---> 【cpu1 eventid==1】
0x80012001
ef64d808 ---> 【cpu2】
0x80022002
ef64d80c ---> 【cpu3】
0x80032003
ef64d810 ---> 【cpu4】
0x80042004
ef64d814 ---> 【cpu5】
0x80052005
ef64d818 ---> 【cpu6】
0x80062006
ef64d81c ---> 【cpu7】
0x80072007
ef64d820 ---> 【cpu0 eventid==8】
0x80002008
ef64d824 --->
0x80002009
ef64d828 --->
0x8000200A
ef64d82c --->
0x8000200B
ef64d830 --->
0x8000200C
ef64d834 --->
0x8000200D
ef64d838 --->
0x8000200E
/ #
/ # cat do.sh
#!/bin/sh
ADDRBASE=0xef64d800
for i in `seq 0 20`
do
usleep 100
ADDR=$ADDRBASE+$i*4
#echo $((ADDR))"-->"
val=`devmem $((ADDR)) 32`
if [ $((val)) -ne 0 ];then
printf '%x --->\n' $((ADDR))
#echo $((ADDR))"-->"
devmem $((ADDR)) 32
fi
done
/ #
阅读(938) | 评论(0) | 转发(0) |