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

Dieter Kiermaier dk-arm-linux at gmx.de
Fri Oct 30 04:55:23 EDT 2009



> For Kirkwood, the registers physical addresses start at 0xF1000000
> (KIRKWOOD_REGS_PHYS_BASE ). so the physical address that you need to
> pass to ioremap is  0xf1020100. alternatley, you can use the existing
> virtual mapping of the register that defined by
> KIRKWOOD_REGS_VIRT_BASE, so just use: readl(KIRKWOOD_REGS_VIRT_BASE |
> 0x20100)
> 
> saeed

thanks for the help.

ok - now I'm able to read the register:
register 0x20100: 3fb8

So it looks like bit 2 isn't set. That's what Ronen wanted me to have a look for.

Hopefully someone has any further suggestions?

Dieter

> 
> 
> On Thu, Oct 29, 2009 at 5:16 PM, Russell King - ARM Linux
> <linux at arm.linux.org.uk> wrote:
> > 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);
> >
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel at lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> >
> 





More information about the linux-arm-kernel mailing list