marvell kirkwood / openrd-base kernel freeze on bootup with PICe->PCI bridge

Russell King - ARM Linux linux at arm.linux.org.uk
Thu Oct 29 11:16:06 EDT 2009


On Thu, Oct 29, 2009 at 05:11:02PM +0200, Dieter Kiermaier wrote:
> Am Donnerstag 29 Oktober 2009 12:33:03 schrieb Ronen Shitrit:
> > Sorry I don't have experience with the OpenOCD.
> > Any way by using the printk hack, u can simply read the register and print it...
> 
> I fear I need any further help:
> 
> I've tried to read the register you told me but now I get an oops:
> <1>Unable to handle kernel paging request at virtual address 40020100
> <1>pgd = c0004000
> <1>[40020100] *pgd=00000000
> <0>Internal error: Oops: 5 [#1] PREEMP
> 
> My code to read the register is:
> #include <asm/io.h>
> printk("register 0x20100: %x\n", readl(virt_to_phys(0x20100)))
> 
> also a 
> printk("register 0x20100: %x\n", readl(0x20100));
> fail with an Ooops :(
> 
> What am I doing wrong here?

1. virt_to_phys() is only valid for the kernel memory region in the
   virtual address space.  0x20100 is not within such a region.

2. readl() takes an offsettable cookie representing the location you
   want to access.  (you get this cookie via ioremap of a bus address
   or via a platform defined constant.)  Practially (for most existing
   implementations but not all) it is a virtual address.

Assuming 0x20100 is the physical address of the register, you should be
able to read it like this:

	void __iomem *base = ioremap(0x20100, 4);
	if (base)
		printk("register 0x20100: %x\n", readl(base));
	iounmap(base);



More information about the linux-arm-kernel mailing list