Chinaunix

标题: 大家还,我在mini,pcie中的mips架构中ioremap时出现了问题,求高手帮忙解答 [打印本页]

作者: niu_deng110    时间: 2013-05-20 13:46
标题: 大家还,我在mini,pcie中的mips架构中ioremap时出现了问题,求高手帮忙解答
在做pic驱动时ioremap映射过来的地址我没有办法访问writel没反映,readl就会报错,
具体错误如下
# insmod xbmd.ko                                                                                
//代码
gBaseHdwr = pci_resource_start (gDev, 0); //物理地址
                                                  
XPCIe_init: xbmd: Init: Base hw val 10100000

//代码
gBaseLen = pci_resource_len (gDev, 0); //大小
XPCIe_init: xbmd: Init: Base hw len 2048
//代码
gBaseVirt = ioremap(gBaseHdwr, gBaseLen);  //映射的后的地址                                                      
XPCIe_init: xbmd: Init: Virt HW address B0100000  
                                                
XPCIe_init: xbmd: Init: Initialize Hardware Done..                                                
XPCIe_init: xbmd driver is loaded

//在这里我对映射过来的地址进行操作
writel(1,  gBaseVirt);
printk("%x\n" ,readl(gBaseVirt));

编译后就出现这问题了                                                               
ar7240 data bus error: cause 0x80001c                                                            
Data bus error, epc == 800285a4, ra == c005ef24                                                   
Oops[#1]:                                                                                         
Cpu 0                                                                                             
$ 0   : 00000000 80220000 c0061b94 00000001                                                      
$ 4   : c005fd7c 81149ebc deadbeef b0100000                                                      
$ 8   : 8128c3f8 0000f400 00000000 81078000                                                      
$12   : 00000000 00000000 00000000 00000000                                                      
$16   : c0060000 80028594 c0060000 c0060000                                                      
$20   : 80015100 c0060000 c0060000 c0060000                                                      
$24   : 00000000 00000000                                                                        
$28   : 81148000 81149ea0 00400340 c005ef24                                                      
Hi    : 00000240                                                                                 
Lo    : 000001f8                                                                                 
epc   : 800285a4 printk+0x10/0x28     Tainted: GF                                                
ra    : c005ef24 XPCIe_init+0x2d8/0x4dc [xbmd]                                                   
Status: 1000f403    KERNEL EXL IE                                                                 
Cause : 0080001c                                                                                 
PrId  : 00019374                                                                                 
Modules linked in: xbmd ag7240_mod flowmac_mod                                                   
Process insmod (pid: 277, threadinfo=81148000, task=8128c000)                                    
Stack : 00000001 00000000 c0060000 80028594 c005ef24 c005eee0 000000a2 00000000                  
        c0061970 8021d964 01c00000 00000048 0000004c 00000028 801c0000 801c0000                  
        c00619c0 801c0000 801c5794 801c5788 004000cc 00000002 80046bc0 80046aa8                  
        00000000 000054f9 00000001 00000000 00000003 1001e008 000054f9 00000002                  
        7fa43f5b 7fa43ea4 8000ef00 8000ef00 10007fcc 10007f9c 10007fac 1001f17a                  
        ...                                                                                       
Call Trace:                                                                                       
[<80028594>] printk+0x0/0x28                                                                     
[<c005ef24>] XPCIe_init+0x2d8/0x4dc [xbmd]                                                      
[<c005eee0>] XPCIe_init+0x294/0x4dc [xbmd]                                                      
[<80046bc0>] sys_init_module+0x290/0x3b8                                                         
[<80046aa8>] sys_init_module+0x178/0x3b8                                                         
[<8000ef00>] stack_done+0x20/0x3c                                                               
[<8000ef00>] stack_done+0x20/0x3c                                                               
                                                                                                  
                                                                                                  
Code: afa5001c  27a5001c  afbf0010 <afa60020> 0c00a063  afa70024  8fbf0010  03e00008  27bd0018   
ready to read from fpga!                                                                          
Segmentation fault                                                                                


有没有知道到底是怎么了,求高手帮忙解答
作者: fjlhlonng    时间: 2013-05-20 16:33
gBaseVirt = ioremap(gBaseHdwr, gBaseLen)这里的gBaseLen的值为0?

我用的arm,没用过mips,我一般会给第二个参数赋一个值,该值为4的整数倍,因为arm一个寄存器一般是4个字节大小~
作者: niu_deng110    时间: 2013-05-21 15:07
回复 2# fjlhlonng
谢谢你,虽然说得不对,真的很感谢你,这个是我一次映射的大小,gBaseLen = pci_resource_len (gDev, 0); //大小
XPCIe_init: xbmd: Init: Base hw len 2048, 2M  因为配置空间的BAR0的大小,还有别的解释吗,等下我拿四个字节试试,应该是不行的。



   
作者: niu_deng110    时间: 2013-05-21 15:10
这个是pcie,BAR0的值,2M的长度,和你说得性质上是一样的,还有没有别的解释啊
作者: niu_deng110    时间: 2013-05-21 16:15
回复 2# fjlhlonng
那个字我不是gBaseLen=2048吗,为什么说是零啊


   
作者: kucan2000    时间: 2013-05-22 14:31
回复 1# niu_deng110
我也碰到类似的问题,不过是在powerpc下,ioremap后,用iowrite8写没问题,但读的时候ioread8会报下面的错:
有明白的给指点一下:
    Machine check in kernel mode.
Caused by (from SRR1=141030): Transfer error ack signal
Oops: Machine check, sig: 7 [#1]
SMP NR_CPUS=2 MPC86xx HPCN
Modules linked in: wch
NIP: c0013520 LR: f10e6750 CTR: c0013518
REGS: eed11be0 TRAP: 0200   Not tainted  (3.6.10)
MSR: 00141030 <ME,IR,DR>  CR: 24844024  XER: 20000000
TASK = eebb3000[2245] 'rcv05' THREAD: eed10000 CPU: 1
GPR00: f10e6744 eed11c90 eebb3000 00000007 00001032 0000000d c0225434 00000001
GPR08: 00001032 c05911e4 00a7a000 00000243 c0013518 10018ab8 100f0000 100f0000
GPR16: 100cf170 100f0000 40000000 eeabfc00 c05b554c 0f500000 eeb1c728 00000102
GPR24: c0432d34 c0432c20 00009032 00000000 eed3d000 eeb05720 f10ee2b0 00000000
NIP [c0013520] ioread8+0x8/0x18
LR [f10e6750] ser_startup+0x2f4/0x368 [wch]
Call Trace:
[eed11c90] [f10e6744] ser_startup+0x2e8/0x368 [wch] (unreliable)
[eed11cb0] [f10e723c] ser_open+0xf4/0x420 [wch]
[eed11d00] [c0209148] tty_open+0x1c8/0x5a8
[eed11d60] [c00bb580] chrdev_open+0xac/0x18c
[eed11d90] [c00b50f8] do_dentry_open.isra.15+0x208/0x2b0
[eed11db0] [c00b51cc] finish_open+0x2c/0x54
[eed11dc0] [c00c5ad4] do_last.isra.36+0x24c/0xad8
[eed11e30] [c00c6404] path_openat+0xa4/0x4a0
[eed11e90] [c00c6b60] do_filp_open+0x30/0x8c
[eed11f10] [c00b6158] do_sys_open+0x100/0x1d4
[eed11f40] [c0010448] ret_from_syscall+0x0/0x38
--- Exception: c01 at 0xff05c94
    LR = 0x10000660
Instruction dump:
38600003 4d9e0020 38600000 4e800020 2f840005 38600002 419e000c 38600000
4e800020 4e800020 7c0004ac 88630000 <0c030000> 4c00012c 5463063e 4e800020
---[ end trace 6f3aa9ac8769925f ]---

作者: niu_deng110    时间: 2013-05-22 19:11
回复 6# kucan2000
我头都大了,真的不知道为什么啊,看来我们都是同样的问题,可是就是没有人知道是为什么吗
  Q




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2