2008-02-28 16:29:20

by biswa.nayak

[permalink] [raw]
Subject: Wrong IRQ assigned on MPC8349EMDS board

Hello list
I am trying to bring up MPC8349EMDS board with linux-2.6.18 kernel with
ramfs enabled.
I am passing a device tree binary (dtb) compiled from the corresponding
dts file found from the 'arch/powerpc/boot/dts' directory and compiled
with the device tree compiler.

I found that the IRQ lines assigned to different peripherals are
completely wrong.
My serial ports are connected to pin 9 and 10, but in this kernel the
IRQs assigned are 16 and 17.

On a little investigation I found that the base address assigned to the
IPIC chip is '0xFDDFB700'

If I compile the linux version with 'ARCH=ppc' and boot then my IPIC
base address
is getting assigned as 0xFE000700, which I think is the correct
behaviour.

I checked in the dts file and found that the IPIC offset is mentioned as
700 and size as 100,
which are correct as per the manual.
Even the IRQ lines mentioned for the Serial ports in the DTS are '9' and
'A'.

Does this wrong assignment is due to the wrong base address of the IPIC
chip?
With IRQs 16 and 17, how the serial console is working fine?

When I tried hard coding the IPIC base value to '0xfe000700' then the
system refuses to boot up.

I kept the IPIC base as 0xfddfb700 and hard coded the irq lines for
serial ports as 9 and 10
and in that case the 'request_irq' call fails with the error number as
'-38',
which translates to '-ENOSYS'.

The changes in the dts never gets reflected in the kernel,
no matter what lines I set for serial line in the dts, the request
always goes for line 16 and 17.

Please let me know if you need any more information regarding the same.
Any help in this will be highly appreciated.

Thanks
Biswa


2008-02-28 17:24:58

by Scott Wood

[permalink] [raw]
Subject: Re: Wrong IRQ assigned on MPC8349EMDS board

On Thu, Feb 28, 2008 at 09:38:36PM +0530, [email protected] wrote:
> I found that the IRQ lines assigned to different peripherals are
> completely wrong.
> My serial ports are connected to pin 9 and 10, but in this kernel the
> IRQs assigned are 16 and 17.

These are virtual IRQ numbers, which have nothing to do with the IPIC IRQ
numbers.

> On a little investigation I found that the base address assigned to the
> IPIC chip is '0xFDDFB700'

That's a virtual address returned from ioremap(), not the physical
address of the IPIC.

> Does this wrong assignment is due to the wrong base address of the IPIC
> chip?
> With IRQs 16 and 17, how the serial console is working fine?
>
> When I tried hard coding the IPIC base value to '0xfe000700' then the
> system refuses to boot up.

That might be a hint that things aren't as wrong as you think. :-)

> I kept the IPIC base as 0xfddfb700 and hard coded the irq lines for
> serial ports as 9 and 10
> and in that case the 'request_irq' call fails with the error number as
> '-38',
> which translates to '-ENOSYS'.

Likewise.

-Scott