dt confusion, for_each_matching_node...

Niklas Hernaeus niklas.hernaeus at linaro.org
Wed Jul 27 06:15:56 EST 2011


Hi Grant.

I am afraid I am seriously confused about how the dt is supposed to work.
Maybe I simply lack a detail, if I am lucky... perhaps it is to late in the
day...

Problem:
I cannot get the for_each_matching_node macro to give me anything, so the I
guess the of_find_matching_node cannot find anything.
I am using the uarts in the test code. With the test code below the snowball
dies.
Anyone see my mistake?

Thanks for any and all input.
/Niklas.

Suggestion: I forgot some initialization somewhere?

In this device tree I have:

/ {
        model = "ST-Ericsson Snowball";
        compatible = "snowball";
        #address-cells = <1>;
        #size-cells = <1>;

        #chosen {
                bootargs = "root=/dev/ram0 console=ttyAMA2,115200n8 debug
earlyprintk";
        };

        #memory {
                reg = <0x90000000 0x20000000>;
        };

        #soc-u8500 {
                address-cells = <1>;
                size-cells = <1>;
                compatible = "simple-bus";
                periph1-base = <0x32000>;

                cpus {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        cpu at 0 {
                                compatible = "arm,cortex-a9";
                                reg = <0>;
                        };
                        cpu at 1 {
                                compatible = "arm,cortex-a9";
                                reg = <1>;
                        };
                };
        };

        uart at 80120000 {
                compatible = "arm,pl011";
        };
        uart at 80121000 {
                compatible = "arm,pl011";
        };
        uart at 80007000 {
                compatible = "arm,pl011";
        };
  };


Test code:

static const struct of_device_id snowball_uarts[] __initconst={
        {.compatible="arm,pl011"},
        {},
};

static void __init mop500_uart_init_dt(void)
{
        struct device_node *node;
        u32 p0;
        int ret;

        /* Get device info from device-tree */
        for_each_matching_node(node, snowball_uarts) {
                goto doit;  /* Got something, all ok */
        }
        goto die;

 doit:
        /* Standard init, no dt */
        db8500_add_uart0(&uart0_plat);
        db8500_add_uart1(&uart1_plat);
        db8500_add_uart2(&uart2_plat);
die:
        ;
};
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/devicetree-discuss/attachments/20110726/9cbe374b/attachment.html>


More information about the devicetree-discuss mailing list