Thread (1 message) 1 message, 1 author, 2016-03-18

Re: [RFC 0/8] Allow usage of independant devicetrees

From: Franck Jullien <hidden>
Date: 2016-03-18 10:06:54

2016-03-17 15:37 GMT+01:00 Rob Herring [off-list ref]:
On Fri, Mar 11, 2016 at 9:56 AM, Franck Jullien
[off-list ref] wrote:
quoted
This patch serie allow modules to register their own devicetree.
I've not looked at this thoroughly, but have some initial comments.
Some of what you are doing should already be possible. The DT unittest
essentially does this. I know we wanted it to work as a module, but it
does not currently. Fixing issues with building it as a module would
be a good first step and be contained to just one part of the problems
you face.
I was speaking about making OF base support as a module. But the more
I think about this, the more I realize this is not necessary.
Modularize the DT unittest is a good idea. I'll do that.
quoted
I started to work on this because I work on a PCIe board with
a FPGA. The FPGA acts as a bridge. Behind this bridge I use Xilinx
IPs. The problem is that Xilinx IPs support in the Kernel as been
made with Zynq or Microblaze in mind. They require devicetree
support.

The idea is that a pci module could be shipped with its own
devicetree describing whats behind the BARs.

Here is an example of what could be such a tree:
/dts-v1/;
/ {
This should all be moved down a level rather than being at the root
level. The root is somewhat special and you need to deal with things
like having 2 or more cards.
This does work with several cards. You'll just have as many trees as cards.
quoted
        compatible = "pci,pci_dev";
We already have defined way to do PCI device compatible strings[1].
quoted
        #address-cells = <1>;
        #size-cells = <1>;

        bar@0 {
                compatible = "pci,pci_bar";
Describing this in terms of BARs seems strange to me. There are
examples of ISA buses downstream of PCI buses in some powerpc DTs. I
think we want to follow something similar here in terms of structure.
You're right. If we go this direction I'd better try to follow this description.
Thanks for the link.
quoted
                #address-cells = <1>;
                #size-cells = <1>;
                reg = <0 0>;
                /* Dynamically set by module */
                ranges = <0 0 0>;

                axi_vdma_0: axivdma@10000 {
                        compatible = "xlnx,axi-vdma-1.00.a";
                        #dma-cells = <1>;
                        reg = <0x10000 0x10000>;
                        xlnx,num-fstores = <0x8>;
                        xlnx,flush-fsync = <0x1>;
                        dma-channel@0x10000 {
                                compatible = "xlnx,axi-vdma-s2mm-channel";
                                /* New flag */
                                irq_direct_mapping;
                                /* Dynamically set by module */
                                interrupts = <0>;
                                xlnx,datawidth = <0x40>;
                        } ;
                };
        };
};

Ranges an interrupts are dynamically set by the module at
probe time.

For interrupts, we could also think of a special interrupt
controller for this application. For now [7/8] looks like
a hack.

An example of module using this serie (and the associated dts) can
be found on my Github account [1].

I my example you'll see that I use a Makefile rule to compile
the devicetree and then generates a C array from the blob.
The module should use the dtb target to generate the blob but
I couldn't find the good way to do that for a module on a x86
target. Help is welcome.
obj-y += your-dts-file.dtb
This doesn't work for out-of-tree module build.
quoted
Patch [1/8] should no be part of this serie. However, it shows
that if we allow independant devicetree, every architecture should
be able to select USE_OF. The better would be to have of support
as a module.
CONFIG_OF is already user selectable.
You're right. My mistake.
quoted
Don't take this serie as a finished work. There is a lot of aspects
to improve. May be we should start to implement multi-root node
properly as a lot of functions assume of_root is the only devicetree
present in the system.
I think this should all be using overlays. I'm not sure that we
support applying overlays with no root DT ATM, but I know others are
certainly interested in doing just that and creating a default
skeleton DT root node should be trivial.
We could test if of_root == NULL && CONFIG_OF in of_core_init.
If it is NULL, unflatten a default devicetree. Then we can use overlays.
If you like the idea, I'll work on this.
The big challenge here how to describe child devices which don't have
the parent described in DT. Perhaps we need some sort of virtual
parent(s) which have all the necessary providers like interrupts.
Indeed, that's the real question. However, I think we would only need a
special interrupt controller.

Franck.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help