Changes between Version 1 and Version 2 of FlattenedDeviceTree


Ignore:
Timestamp:
Oct 28, 2009, 11:10:50 AM (15 years ago)
Author:
Nicolas Pouillon
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • FlattenedDeviceTree

    v1 v2  
    1111Using FDT is mainstream, andis also used by Linux  and BSD, supported is U-Boot and other bootloaders.
    1212
    13 = Implementation =
     13= References =
     14
     15 * You may learn many things [http://www.google.com/search?q=flattened%20device%20tree googling] for "flattened device tree".
     16 * The `dtc` utility used to compile `.dts` files in MutekH is mainteained at http://git.jdl.com/. You may:
     17  * Browse the git there http://git.jdl.com/gitweb/
     18  * Download a snapshot http://git.jdl.com/software/
     19   This repository also includes some documentation and a reference library for handling FDTs.
     20 * The Linux kernel documentation tree contains [http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=blob;f=Documentation/powerpc/booting-without-of.txt;h=79f533f38c6112d64bed9398c44d31cf3b552f6b;hb=HEAD an useful document] about device trees (`Documentation/powerpc/booting-without-of.txt`)
     21
     22= Implementation and example =
    1423
    1524In MutekH, FDT is handled through an hardware enumerator device driver, it behaves like the other enumerators (PCI, ISAPnP).
     
    5059
    5160This will make the FDT enumerator use the correct driver, matching `"soclib:tty"`
     61
     62= MutekH-Specific Node syntax quick reference =
     63
     64== Processors ==
     65
     66Processor nodes look like:
     67{{{
     68Mips,32@0 {
     69        name = "Mips,32";
     70        device_type = "cpu";
     71        reg = <0>;
     72};
     73}}}
     74
     75 `reg`::
     76   This is the CPU identification number
     77 `device_type`::
     78   must be `"cpu"`
     79
     80== Memories ==
     81
     82Memory nodes look like:
     83{{{
     84memory@0 {
     85        device_type = "memory";
     86        cached;
     87        reg = <0x61100000 0x00100000>;
     88};
     89}}}
     90
     91 `device_type`::
     92   must be "memory"
     93 `reg`::
     94   must be a couple of <address size> with both the values respecting `#address-cells` and `#size-cells`.
     95
     96There are two optional attributes:
     97
     98 `cached`::
     99   The memory is cacheable
     100 `coherent`::
     101   The memory is cached and coherent (`cached` is implied, setting it is optional)
     102
     103== References to interrupt controllers ==
     104
     105Interrupts controller are referenced from one node to another in order to describe the interrupt tree. References are handled through the following properties:
     106 `icudev`::
     107   Must be a path to an existing ICU device, enclosing in `&{}` is syntactic
     108 `irq`::
     109   Is the irq number in `icudev`.
     110
     111== Parameter structure construction for calling `_init` functions ==
     112
     113Some devices require a structure containing parameters in order to correctly initialize them. This case is handled in the FDT description. Let's see the example of the `soclib:xicu` component. It needs a structure containing:
     114
     115{{{
     116struct soclib_xicu_param_s
     117{
     118        size_t output_line_no;
     119};
     120}}}
     121
     122In the driver, the id definition is:
     123{{{
     124static const struct driver_param_binder_s xicu_param_binder[] =
     125{
     126        PARAM_BIND(struct soclib_xicu_param_s, output_line_no, PARAM_DATATYPE_INT),
     127        { 0 }
     128};
     129
     130static const struct devenum_ident_s     xicu_soclib_ids[] =
     131{
     132        DEVENUM_FDTNAME_ENTRY("soclib:xicu", sizeof(struct soclib_xicu_param_s), xicu_param_binder),
     133        { 0 }
     134};
     135}}}
     136
     137This informs the FDT parser this device will need a parameter structure, with the parameters described in the `xicu_param_binder` correctly filled-in.
     138
     139In this table, there is one entry telling the `output_line_no` parameter is an integer.
     140
     141Available data types are:
     142 `PARAM_DATATYPE_INT`::
     143   a simple integer
     144 `PARAM_DATATYPE_DEVICE_PTR`::
     145   a device reference (`&{/node/path}` in the device tree source), which will be transparently translated to a `struct device_s *` before filling the structure. Device must exist in the tree.
     146 `PARAM_DATATYPE_ADDR`::
     147   an address, `#address-cells` will be honored
     148 `PARAM_DATATYPE_BOOL`::
     149   a simple boolean, i.e. a property with no value, if present it is true, if absent it is false (like the `cached` attribute in memory nodes)