大家还,我在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
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
[<c005eee0>] XPCIe_init+0x294/0x4dc
[<80046bc0>] sys_init_module+0x290/0x3b8
[<80046aa8>] sys_init_module+0x178/0x3b8
[<8000ef00>] stack_done+0x20/0x3c
[<8000ef00>] stack_done+0x20/0x3c
Code: afa5001c27a5001cafbf0010 <afa60020> 0c00a063afa700248fbf001003e0000827bd0018
ready to read from fpga!
Segmentation fault
有没有知道到底是怎么了,求高手帮忙解答 gBaseVirt = ioremap(gBaseHdwr, gBaseLen)这里的gBaseLen的值为0?
我用的arm,没用过mips,我一般会给第二个参数赋一个值,该值为4的整数倍,因为arm一个寄存器一般是4个字节大小~ 回复 2# fjlhlonng
谢谢你,虽然说得不对,真的很感谢你,这个是我一次映射的大小,gBaseLen = pci_resource_len (gDev, 0); //大小
XPCIe_init: xbmd: Init: Base hw len 2048, 2M因为配置空间的BAR0的大小,还有别的解释吗,等下我拿四个字节试试,应该是不行的。
这个是pcie,BAR0的值,2M的长度,和你说得性质上是一样的,还有没有别的解释啊 回复 2# fjlhlonng
那个字我不是gBaseLen=2048吗,为什么说是零啊
回复 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: 24844024XER: 20000000
TASK = eebb3000 '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 ioread8+0x8/0x18
LR ser_startup+0x2f4/0x368
Call Trace:
ser_startup+0x2e8/0x368 (unreliable)
ser_open+0xf4/0x420
tty_open+0x1c8/0x5a8
chrdev_open+0xac/0x18c
do_dentry_open.isra.15+0x208/0x2b0
finish_open+0x2c/0x54
do_last.isra.36+0x24c/0xad8
path_openat+0xa4/0x4a0
do_filp_open+0x30/0x8c
do_sys_open+0x100/0x1d4
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 ]---
回复 6# kucan2000
我头都大了,真的不知道为什么啊,看来我们都是同样的问题,可是就是没有人知道是为什么吗
Q
页:
[1]