On 16 May 2012 00:11, Grant Likely <grant.likely@xxxxxxxxxxxx> wrote:
> On Tue, 15 May 2012 17:29:14 +0900, Kukjin Kim <kgene.kim@xxxxxxxxxxx> wrote:
>> Thomas Abraham wrote:
>> >
>> > The interrupt parent lookup fails for a node that is a interrupt-controller
>> > but does not have an explict interrupt-parent property and instead inherits
>> > this property from the root node.
>> >
>> > Consider the nodes listed below.
>> >
>> > / {
>> > interrupt-parent = <&intc_level1>;
>> >
>> > intc_level1: interrupt-controller@xxx {
>> > interrupt-controller;
>> > #interrupt-cells = <3>;
>> > <rest of the properties here>;
>> > };
>> >
>> > intc_level2: interrupt-controller@yyy {
>> > interrupt-controller;
>> > #interrupt-cells = <2>;
>> > <rest of the properties here>;
>> > };
>> > };
>> >
>> > The interrupt parent lookup for interrupt-controller@yyy fails. It inherits
>> > the interrupt-parent property from the root node and the root node ('/')
>> > specifies a 'interrupt-parent' property which represents the default interrupt
>> > root controller. But, the property '#interrupt-cells' might not be specified
>> > in the root node.
>> >
>> > In case a interrupt controller node does not include a 'interrupt-parent'
>> > property but inherits that property from the root node, the check for
>> > 'interrupt-cells' property in the root node fails. Fix this removing the
>> > check for 'interrupt-cells' property.
>
> Hmmm... I dont see the bug... From your description above, I see the
> following sequence.
>
> First iteration:
> child = &ic@yyy;
> cannot find "interrupt-parent" so take 'if' clause
> p = of_get_parent(child); (root)
> iteration continues because #interrupt-cells not found in 'p'(root)
> Second iteration:
> child = root;
> found "interrupt-parent", so take 'else' clause
> p = of_find_node_by_phandle(); (ic@xxx)
> iteration stops because #interrupt-cells is found in 'p'(ic@xxx)
>
> What am I missing in my admittedly short look at the code?
Grant, sorry for the bad commit message for the patch. I got it
completely wrong. I intended to generalize a change which was need for
a using interrupt-map on Exynos5 for wakeup interrupts, and in process
I wrote down a incorrect commit message.
I will list out the problem I was trying to solve. The wakeup
interrupt controller on Exynos5 has two parents - GIC and Interrupt
Combiner. The node for the Exynos5 wakeup interrupt is listed below.
wakeup_eint: interrupt-controller@11400000 {
compatible = "samsung,exynos5210-wakeup-eint";
reg = <0x11400000 0x1000>;
interrupt-controller;
#interrupt-cells = <2>;
interrupt-parent = <&wakeup_map>;
interrupts = <0x0 0>, <0x1 0>, <0x2 0>, <0x3 0>,
<0x4 0>, <0x5 0>, <0x6 0>, <0x7 0>,
<0x8 0>, <0x9 0>, <0xa 0>, <0xb 0>,
<0xc 0>, <0xd 0>, <0xe 0>, <0xf 0>,
<0x10 0>;
wakeup_map: interrupt-map {
compatible = "samsung,exynos5210-wakeup-eint-map";
#interrupt-cells = <2>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = <0x0 0 &combiner 23 0>,
<0x1 0 &combiner 24 0>,
<0x2 0 &combiner 25 0>,
<0x3 0 &combiner 25 1>,
<0x4 0 &combiner 26 0>,
<0x5 0 &combiner 26 1>,
<0x6 0 &combiner 27 0>,
<0x7 0 &combiner 27 1>,
<0x8 0 &combiner 28 0>,
<0x9 0 &combiner 28 1>,
<0xa 0 &combiner 29 0>,
<0xb 0 &combiner 29 1>,
<0xc 0 &combiner 30 0>,
<0xd 0 &combiner 30 1>,
<0xe 0 &combiner 31 0>,
<0xf 0 &combiner 31 1>,
<0x10 0 &gic 0 32 0>;
};
};
The match table for of_irq_init() function is listed below (the third
in this list is for wakeup interrupt controller).
static const struct of_device_id exynos4_dt_irq_match[] = {
{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init, },
{ .compatible = "samsung,exynos4210-combiner",
.data = combiner_of_init, },
{ .compatible = "samsung,exynos5210-wakeup-eint-map",
.data = exynos_init_irq_eint, },
{},
};
Without this patch, of_irq_init() finds that the interrupt parent of
"interrupt-map" node is "interrupt-controller@11400000" node. Which is
not correct. The interrupt parent of "interrupt-map" node should be
itself.
I feel that the check for "#interrupt-cells" property in do..while()
loop in of_irq_find_parent() function is not required. The presence of
"#interrupt-cells" property in the parent node should not be
considered as a necessary condition for the parent node to be
considered the interrupt-parent of the child node.
Thanks for reviewing this patch. Sorry for the delay in responding to
your email.
Thanks,
Thomas.
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Home]
[Linux USB Devel]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Video Projectors]
[PDAs]
[Free Online Dating]
[Hacking TiVo]
[Linux Kernel]
[Linux SCSI]
[XFree86]
[Devices]
[Big List of Linux Books]
[16.7MP]