Using DMA interrupt on MPC8313
Ron Madrid
ron_madrid at sbcglobal.net
Tue Jun 17 04:07:10 EST 2008
I don't see a "dma" node in the mpc8377mds.dts (2.6.25). I found one in mpc8610_hpcd.dts and
modeled it after that.
dma at 82a8 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "fsl,elo-dma";
cell-index = <0>;
reg = <0x82a8 0x4>; /* DMA general status register */
ranges = <0x0 0x8100 0x200>;
dma-channel at 0 {
compatible = "fsl,elo-dma-channel";
cell-index = <0>;
reg = <0x0 0x80>;
interrupt-parent = <&ipic>;
interrupts = <71 0x8>;
};
dma-channel at 1 {
compatible = "fsl,elo-dma-channel";
cell-index = <1>;
reg = <0x80 0x80>;
interrupt-parent = <&ipic>;
interrupts = <71 0x8>;
};
dma-channel at 2 {
compatible = "fsl,elo-dma-channel";
cell-index = <2>;
reg = <0x100 0x80>;
interrupt-parent = <&ipic>;
interrupts = <71 0x8>;
};
dma-channel at 3 {
compatible = "fsl,elo-dma-channel";
cell-index = <3>;
reg = <0x180 0x80>;
interrupt-parent = <&ipic>;
interrupts = <71 0x8>;
};
};
--- Scott Wood <scottwood at freescale.com> wrote:
> Ron Madrid wrote:
> > Here's my code. There are a few other things that happen but they are inconsequential to this
> > problem. I'm sure that the request_irq call is right, especially since it works if the fsldma
> > drivers are builtin to the kernel. Also, the irq number 71 comes from the reference manual
> for
> > them MPC8313. It is the internal interrupt for the DMA. I'll do some more testing in a
> little
> > while to try to determine the cause of the error in request_irq.
>
> You cannot pass hardware IRQ numbers directly to request_irq() -- it has
> no idea which IRQ controller you're referring to (even if there happens
> to be only one on your board).
>
> You should get the IRQ from the device tree, using
> irq_of_parse_and_map() on the device node for the DMA channel (see the
> mpc8377mds device tree for an example DMA node).
>
> -Scott
>
More information about the Linuxppc-dev
mailing list