Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304269
  • 博文数量: 65
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 609
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-06 21:41
个人简介

好好学习,天天向上

文章分类

全部博文(65)

文章存档

2022年(3)

2021年(25)

2020年(1)

2019年(3)

2016年(2)

2015年(3)

2014年(14)

2013年(7)

2012年(7)

我的朋友

分类: 嵌入式

2022-03-07 20:13:24



/ # 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) |
给主人留下些什么吧!~~