* Kernel crash while initialising PCI
@ 2008-09-03 7:50 Janaka Subhawickrama
2008-09-03 17:15 ` Scott Wood
0 siblings, 1 reply; 3+ messages in thread
From: Janaka Subhawickrama @ 2008-09-03 7:50 UTC (permalink / raw)
To: 'linuxppc-dev@ozlabs.org'
[-- Attachment #1: Type: text/plain, Size: 7096 bytes --]
Hi all,
I am trying to setup the PCI on a Flattened Device Tree (DTS file) for a Microsys MPX8349 board. I have the PCI outbound windows setup as follows:
0xA0000000 of size 0x20000000, none pre-fechable PCI memory window
0xD8000000 of size 0x01000000, PCI IO window
These windows are setup on Uboot and I can see the configuration space of PCI and the PCI card installed from Uboot.
When I try to boot my linux kernel (2.6.23 stable Denx kernel) it crashes with:
[ 0.000000] Found MPC83xx PCI host bridge at 0x00000000e0008500. Firmware bus number: 0->0
[ 0.000000] Observed: pci a0000000 phys ffffffff00000000 size 20000000
[ 0.000000] phb0: MEM 0xffffffff00000000 -> 0x11ffffffe
[ 0.000000] Observed: pci d8000000 phys ffffffff00000000 size 1000000
arch: exit
[ 0.000000] Zone PFN ranges:
[ 0.000000] DMA 0 -> 65536
[ 0.000000] Normal 65536 -> 65536
[ 0.000000] Movable zone start PFN for each node
[ 0.000000] early_node_map[1] active PFN ranges
[ 0.000000] 0: 0 -> 65536
[ 0.000000] Built 1 zonelists in Zone order. Total pages: 65024
[ 0.000000] Kernel command line: root=/dev/nfs rw nfsroot=192.168.1.1:/home/OPTISCAN/janakas/nfs ip=192.168.1.15:192.168.1.1:192.168.1.1:255.255.255.0:xepm2:eth0:off console=ttyS0,9600
[ 0.000000] IPIC (128 IRQ sources) at fdffb700
[ 0.000000] PID hash table entries: 1024 (order: 10, 4096 bytes)
[ 0.001117] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
[ 0.085122] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
[ 0.194097] Memory: 255232k/262144k available (4096k kernel code, 6672k reserved, 168k data, 116k bss, 156k init)
[ 0.337215] Mount-cache hash table entries: 512
[ 0.392115] NET: Registered protocol family 16
[ 0.459868] PCI: Probing PCI hardware
[ 0.503247] Fixup res 0 (1208) of dev 0000:00:0d.0: a0000000 -> ffffffff
[ 0.583128] Fixup res 1 (200) of dev 0000:00:0d.0: ffffffffa4000000 -> 3ffffff
[ 0.669552] Fixup res 6 (7200) of dev 0000:00:0d.0: 0 -> 5fffffff
[ 0.742403] Try to map irq for 0000:00:0d.0...
[ 0.795365] pci_busdev_to_OF_node(0,0x68)
[ 0.843233] parent is /soc8349@e0000000/pci@8500
[ 0.899500] result is <NULL>
[ 0.935174] debug 1112
[ 0.962902] PCI->OF bus map:
[ 0.997267] 0 -> 0
[ 1.021159] debug 1124
[ 1.049295] PCI: bridge rsrc 0..ffffffff (100), parent c0404fe4
[ 1.120308] PCI:0000:00:0d.0: Resource 0: 00000000ffffffff-0000000003fffffe (f=1208)
[ 1.213074] PCI: Cannot allocate resource region 0 of device 0000:00:0d.0
[ 1.294229] PCI: parent is c044d05c: 00000000ffffffff-000000001ffffffe (f=200)
[ 1.381720] PCI:0000:00:0d.0: Resource 1: 0000000003ffffff-000000000403fffe (f=200)
[ 1.473369] PCI: Cannot allocate resource region 1 of device 0000:00:0d.0
[ 1.554532] PCI:0000:00:0d.0: Resource 2: 00000000d8000000-00000000d800007f (f=101)
[ 1.646210] debug 1128
[ 1.674012] debug 1134
[ 1.702129] [debug 48]Size 04000000, Algn 04000000, Min 10000000, Type 00001300
[ 1.789877] [debug 48]Size 04000000, Algn 04000000, Min 10000000, Type 00000300
[ 1.877345] PCI: Failed to allocate mem resource #0:4000000@0 for 0000:00:0d.0
[ 1.963755] ------------[ cut here ]------------
[ 2.018513] kernel BUG at arch/powerpc/kernel/pci_32.c:590!
[ 2.085155] Oops: Exception in kernel mode, sig: 5 [#1]
[ 2.147621] PREEMPT MPX8349
[ 2.180940] Modules linked in:
[ 2.217386] NIP: c03e3c48 LR: c03e3c48 CTR: c001065c
[ 2.276737] REGS: cffc3e90 TRAP: 0700 Not tainted (2.6.23MPX8349_PowerPC)
[ 2.361070] MSR: 00029032 <EE,ME,IR,DR> CR: 24004022 XER: 00000000
[ 2.437081] TASK = cffc1a20[1] 'swapper' THREAD: cffc2000
[ 2.499551] GPR00: c03e3c48 cffc3f40 cffc1a20 fffffff0 00000001 00000001 00000000 00000033
[ 2.599508] GPR08: 00000000 00000000 0000114e c0430000 42004022 08000180 0fffd000 00800000
[ 2.699464] GPR16: ffffffff 00000001 00000000 c0380000 c0400000 c0400000 00000000 c0380000
[ 2.799420] GPR24: c0430000 c04312a0 c04312a0 cffe9990 cffe9800 cffe9990 00000000 00000000
[ 2.901459] NIP [c03e3c48] pcibios_init+0x1f8/0x274
[ 2.959767] LR [c03e3c48] pcibios_init+0x1f8/0x274
[ 3.017033] Call Trace:
[ 3.046189] [cffc3f40] [c03e3c48] pcibios_init+0x1f8/0x274 (unreliable)
[ 3.125321] [cffc3f70] [c03d9898] kernel_init+0xa8/0x29c
[ 3.188835] [cffc3ff0] [c0010498] kernel_thread+0x44/0x60
[ 3.253389] Instruction dump:
[ 3.288791] 2f800000 419e0018 7c0803a6 4e800021 2f830000 409e0020 813d000c 552000c2
[ 3.381458] 7f83e378 7fe4fb78 901d000c 4bdca38d <0f030000> 2f9f0005 3bde001c 3bff0001
[ 3.476213] Kernel panic - not syncing: Attempted to kill init!
[ 3.547013] Rebooting in 180 seconds..
My DTS file entries for PCI are as follows:
pci@8500 {
interrupt-map-mask = < // Mask the child UnitIrqSpec
//ff00 0 0 7
ffff ff ff f
>;
interrupt-map = <
// Child UnitIrqSpec, Parent PIC handle, Parent UnitIrqSpec
// PCI unit address (0000 0 0), Interrupt specifier IDSEL 0x0D (CRX board hard wired to IDSEL 13),
// parent Phandle, IRQ7=0x17 (jumper based) level sensitive(8)
//0d00 0 0 1 &ipic 17 8
00006800 0 0 1 &ipic 17 8
>;
interrupt-parent = < &ipic >;
interrupts = <42 8>; //PCI1 interrupt, level sensitive
bus-range = <0 0>; //Bus number and largest bus under this
/*
struct ranges_pci {
unsigned int pci_space; //Prefechable/relocatable .... IEEE1275
u64 pci_addr;
phys_addr_t phys_addr;
u64 size;
};
*/
ranges = < 02000000 0 A0000000 A0000000 0 20000000
01000000 0 D8000000 D8000000 0 01000000 >;
clock-frequency = <1FCA055>; //33333333Hz
#interrupt-cells = <1>; //PCI aparently uses 1
#size-cells = <2>; //Max of 2 ints
#address-cells = <3>; //int size
reg = <8500 100>; //??
compatible = "fsl,mpc8349-pci";
device_type = "pci";
};
What am I doing wrong ?
Thanks in advance.
Janaka
[-- Attachment #2: Type: text/html, Size: 15658 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Kernel crash while initialising PCI
2008-09-03 7:50 Kernel crash while initialising PCI Janaka Subhawickrama
@ 2008-09-03 17:15 ` Scott Wood
2008-09-05 0:31 ` Janaka Subhawickrama
0 siblings, 1 reply; 3+ messages in thread
From: Scott Wood @ 2008-09-03 17:15 UTC (permalink / raw)
To: Janaka Subhawickrama; +Cc: 'linuxppc-dev@ozlabs.org'
On Wed, Sep 03, 2008 at 05:50:10PM +1000, Janaka Subhawickrama wrote:
> My DTS file entries for PCI are as follows:
>
> pci@8500 {
> interrupt-map-mask = < // Mask the child UnitIrqSpec
> //ff00 0 0 7
> ffff ff ff f
> >;
> interrupt-map = <
> // Child UnitIrqSpec, Parent PIC handle, Parent UnitIrqSpec
> // PCI unit address (0000 0 0), Interrupt specifier IDSEL 0x0D (CRX board hard wired to IDSEL 13),
> // parent Phandle, IRQ7=0x17 (jumper based) level sensitive(8)
> //0d00 0 0 1 &ipic 17 8
> 00006800 0 0 1 &ipic 17 8
> >;
> interrupt-parent = < &ipic >;
> interrupts = <42 8>; //PCI1 interrupt, level sensitive
> bus-range = <0 0>; //Bus number and largest bus under this
> /*
> struct ranges_pci {
> unsigned int pci_space; //Prefechable/relocatable .... IEEE1275
> u64 pci_addr;
> phys_addr_t phys_addr;
> u64 size;
> };
> */
> ranges = < 02000000 0 A0000000 A0000000 0 20000000
> 01000000 0 D8000000 D8000000 0 01000000 >;
> clock-frequency = <1FCA055>; //33333333Hz
> #interrupt-cells = <1>; //PCI aparently uses 1
> #size-cells = <2>; //Max of 2 ints
> #address-cells = <3>; //int size
> reg = <8500 100>; //??
> compatible = "fsl,mpc8349-pci";
> device_type = "pci";
> };
>
>
> What am I doing wrong ?
The PCI node needs to go under the root node, rather than under the soc
node. Otherwise, the kernel will try to translate ranges through the IMMR
window. In older kernels, there was a bug in the PCI code that let you get
away with this.
See current in-kernel device trees for examples.
-Scott
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: Kernel crash while initialising PCI
2008-09-03 17:15 ` Scott Wood
@ 2008-09-05 0:31 ` Janaka Subhawickrama
0 siblings, 0 replies; 3+ messages in thread
From: Janaka Subhawickrama @ 2008-09-05 0:31 UTC (permalink / raw)
To: 'Scott Wood'; +Cc: 'linuxppc-dev@ozlabs.org'
> -----Original Message-----
> From: Scott Wood [mailto:scottwood@freescale.com]
> Sent: Thursday, 4 September 2008 3:15 AM
> To: Janaka Subhawickrama
> Cc: 'linuxppc-dev@ozlabs.org'
> Subject: Re: Kernel crash while initialising PCI
>
> On Wed, Sep 03, 2008 at 05:50:10PM +1000, Janaka Subhawickrama wrote:
> > My DTS file entries for PCI are as follows:
> >
> > pci@8500 {
> > interrupt-map-mask =3D < // Mask the child
> UnitIrqSpec
> > //ff00 0 0 7
> > ffff ff ff f
> > >;
> > interrupt-map =3D <
> > // Child UnitIrqSpec, Parent
> PIC handle, Parent UnitIrqSpec
> > // PCI unit address (0000 0
> 0), Interrupt specifier IDSEL 0x0D (CRX board hard wired to IDSEL 13),
> > // parent Phandle,
> IRQ7=3D0x17 (jumper based) level sensitive(8)
> > //0d00 0 0 1 &ipic 17 8
> > 00006800 0 0 1 &ipic 17 8
> > >;
> > interrupt-parent =3D < &ipic >;
> > interrupts =3D <42 8>; //PCI1
> interrupt, level sensitive
> > bus-range =3D <0 0>; //Bus number
> and largest bus under this
> > /*
> > struct ranges_pci {
> > unsigned int pci_space;
> //Prefechable/relocatable .... IEEE1275
> > u64 pci_addr;
> > phys_addr_t phys_addr;
> > u64 size;
> > };
> > */
> > ranges =3D < 02000000 0 A0000000 A0000000 0
> 20000000
> > 01000000 0 D8000000 D8000000 0
> 01000000 >;
> > clock-frequency =3D <1FCA055>; //33333333Hz
> > #interrupt-cells =3D <1>; //PCI
> aparently uses 1
> > #size-cells =3D <2>; //Max of 2
> ints
> > #address-cells =3D <3>; //int size
> > reg =3D <8500 100>; //??
> > compatible =3D "fsl,mpc8349-pci";
> > device_type =3D "pci";
> > };
> >
> >
> > What am I doing wrong ?
>
> The PCI node needs to go under the root node, rather than under the soc
> node. Otherwise, the kernel will try to translate ranges through the
> IMMR
> window. In older kernels, there was a bug in the PCI code that let you
> get
> away with this.
>
> See current in-kernel device trees for examples.
>
> -Scott
Yep. That fixed my immediate problem. Thank you very much.
Kernel boots now and I can do lspci and see the basic information of the gr=
aphics card.
Now I have to trace through why I get "PCI: Calling quirk c01a9db8 for 0000=
:00:0d.0". Any pointers are greatly appreciated.
Cheers
Janaka
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-09-05 0:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-03 7:50 Kernel crash while initialising PCI Janaka Subhawickrama
2008-09-03 17:15 ` Scott Wood
2008-09-05 0:31 ` Janaka Subhawickrama
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).