[Top] [All Lists]

Re: RFC: Mega rename of device tree routines from of_*() to dt_*()

Subject: Re: RFC: Mega rename of device tree routines from of_*() to dt_*()
From: Grant Likely <>
Date: Thu, 25 Nov 2010 09:17:59 -0700
Cc: LKML <>, linux-arch <>, linux-mips <>,,, linuxppc-dev list <>,, Stephen Neuendorffer <>, Andrew Morton <>, Linus Torvalds <>
In-reply-to: <1290692075.689.20.camel@concordia>
Original-recipient: rfc822;
References: <1290607413.12457.44.camel@concordia> <1290692075.689.20.camel@concordia>
On Thu, Nov 25, 2010 at 6:34 AM, Michael Ellerman
<> wrote:
> On Thu, 2010-11-25 at 01:03 +1100, Michael Ellerman wrote:
>> Hi all,
>> There were some murmurings on IRC last week about renaming the of_*()
>> routines.
> ...
>> The thinking is that on many platforms that use the of_() routines
>> OpenFirmware is not involved at all, this is true even on many powerpc
>> platforms. Also for folks who don't know the OpenFirmware connection
>> it reads as "of", as in "a can of worms".
> ...
>> So I'm hoping people with either say "YES this is a great idea", or "NO
>> this is stupid".
> I'm still hoping, but so far it seems most people have got better things
> to do, and of those that do have an opinion the balance is slightly
> positive.

I assume you'll be also publishing the script that you use for
generating the massive patch.  I expect that there will be a few
iterations of running the rename script to convert over all the
stragglers.  It should also be negotiated with Linus about when this
patch should get applied.  I do NOT want to cause massive merge pain
during the merge window.

Andrew/Linus: Before Michael proceeds too far with this rename, are
you okay with a mass rename of the device tree functions from of_* to
dt_*?  Nobody likes the ambiguous 'of_' prefix ("of?  of what?"), but
to fix it means large cross-tree patches and potential merge

> So here's a first cut of a patch to add the new names. I've not touched
> of_platform because that is supposed to go away. That will lead to some
> odd looking code in the interim, but I think is the right approach.

I would split it up into separate dt*.h files, one for each of*.h file
so that the #include lines can be changed in the C code at the same
time.  Each dt*.h file would include it's of*.h counterpart.  Then
after the code is renamed, and a release or two has passed to catch
the majority of users, the old definitions can be moved into the dt*.h

However, it may be better to move and rename the definitions
immediately, and leave "#define of_*  dt_*" macros in the old of*.h
files which can be removed with a simple patch after all the users are
converted.  That would have a smaller impact in the cleanup stage.

> Most of these are straight renames, but some have changed more
> substantially. The routines for the flat tree have all become fdt_foo().
> I'd be inclined to drop "early_init" from them too, because they're
> basically all about early init, but Grant said he'd prefer not to I
> think. I've also renamed the flat tree tag constants to match libfdt.

It is all about early init now in Linus' tree, but Stephen
Neuendorffer has patches that use the fdt code at driver probe time
for parsing device tree fragments that describe an FPGA add-in board.

> I've left for_each_child_of_node(), because I read it as "of", but maybe
> it's "OF"?

hahaha!  I never considered that it might be OF, but now I probably
won't be able to help but read it that way!  I like Geert's suggestion
of dt_for_each_child_node


> cheers
> #ifndef __DT_H
> #define __DT_H
> /* include/linux/device.h */
> #define dt_match_table                  of_match_table
> #define dt_node                         of_node

This could be very messy.  I've nervous about using #define to rename
structure members.  You'll need to check that any structure members
that use the same name as a global symbol are handled appropriately.

> /* include/linux/mod_devicetable.h */
> #define dt_device_id                    of_device_id
> /* include/linux/of.h */
> #define dt_node_to_nid                  of_node_to_nid
> #define dt_chosen                       of_chosen
> #define dt_node_is_root                 of_node_is_root
> #define dt_node_check_flag              of_node_check_flag
> #define dt_node_set_flag                of_node_set_flag
> #define dt_find_all_nodes               of_find_all_nodes
> #define dt_node_get                     of_node_get
> #define dt_node_put                     of_node_put
> #define dt_read_number                  of_read_number
> #define dt_read_ulong                   of_read_ulong
> #define dt_find_node_by_name            of_find_node_by_name
> #define dt_find_node_by_type            of_find_node_by_type
> #define dt_find_compatible_node         of_find_compatible_node
> #define dt_find_matching_node           of_find_matching_node
> #define dt_find_node_by_path            of_find_node_by_path
> #define dt_find_node_by_phandle         of_find_node_by_phandle
> #define dt_get_parent                   of_get_parent
> #define dt_get_next_parent              of_get_next_parent
> #define dt_get_next_child               of_get_next_child
> #define dt_find_node_with_property      of_find_node_with_property
> #define dt_device_is_compatible         of_device_is_compatible
> #define dt_device_is_available          of_device_is_available
> #define dt_get_property                 of_get_property
> #define dt_n_addr_cells                 of_n_addr_cells
> #define dt_n_size_cells                 of_n_size_cells
> #define dt_match_node                   of_match_node
> #define dt_modalias_node                of_modalias_node
> #define dt_parse_phandle                of_parse_phandle
> #define dt_parse_phandles_with_args     of_parse_phandles_with_args
> #define dt_machine_is_compatible        of_machine_is_compatible
> #define dt_attach_node                  of_attach_node
> #define dt_detach_node                  of_detach_node
> #define dt_find_property                of_find_property
> /* include/linux/of_fdt.h */
> #define fdt_find_string                 find_flat_dt_string
> #define fdt_scan                        of_scan_flat_dt
> #define fdt_get_prop                    of_get_flat_dt_prop
> #define fdt_is_compatible               of_flat_dt_is_compatible
> #define fdt_get_root                    of_get_flat_dt_root
> #define fdt_early_init_scan_chosen      early_init_dt_scan_chosen
> #define fdt_early_init_check_for_initrd early_init_dt_check_for_initrd
> #define fdt_early_init_scan_memory      early_init_dt_scan_memory
> #define fdt_early_init_add_memory_arch  early_init_dt_add_memory_arch
> #define fdt_early_init_alloc_memory_arch early_init_dt_alloc_memory_arch
> #define fdt_early_init_setup_initrd_arch early_init_dt_setup_initrd_arch
> #define fdt_early_init_scan_root        early_init_dt_scan_root
> #define fdt_unflatten                   unflatten_device_tree
> #define fdt_early_init                  early_init_devtree
> #define FDT_MAGIC                       OF_DT_HEADER
> #define FDT_BEGIN_NODE                  OF_DT_BEGIN_NODE
> #define FDT_END_NODE                    OF_DT_END_NODE
> #define FDT_PROP                        OF_DT_PROP
> #define FDT_NOP                         OF_DT_NOP
> #define FDT_END                         OF_DT_END
> #define FDT_VERSION                     OF_DT_VERSION
> /* include/linux/of_address.h */
> #define dt_translate_address            of_translate_address
> #define dt_address_to_resource          of_address_to_resource
> #define dt_iomap                        of_iomap
> #define dt_get_address                  of_get_address
> #define dt_get_pci_address              of_get_pci_address
> #define dt_pci_address_to_resource      of_pci_address_to_resource
> /* include/linux/of_device.h */
> #define dt_match_device                 of_match_device
> #define dt_device_make_bus_id           of_device_make_bus_id
> #define dt_driver_match_device          of_driver_match_device
> #define dt_dev_get                      of_dev_get
> #define dt_dev_put                      of_dev_put
> #define dt_device_add                   of_device_add
> #define dt_device_register              of_device_register
> #define dt_device_unregister            of_device_unregister
> #define dt_device_get_modalias          of_device_get_modalias
> #define dt_device_uevent                of_device_uevent
> #define dt_device_node_put              of_device_node_put
> /* include/linux/of_irq.h */
> #define dt_irq                          of_irq
> #define dt_irq_parse_and_map            irq_of_parse_and_map
> #define dt_irq_workarounds              of_irq_workarounds
> #define dt_irq_dflt_pic                 of_irq_dflt_pic
> #define dt_irq_map_oldworld             of_irq_map_oldworld
> #define dt_irq_map_raw                  of_irq_map_raw
> #define dt_irq_map_one                  of_irq_map_one
> #define dt_irq_create_mapping           irq_create_of_mapping
> #define dt_irq_to_resource              of_irq_to_resource
> #define dt_irq_count                    of_irq_count
> #define dt_irq_to_resource_table        of_irq_to_resource_table
> #define DT_IRQ_MAX_SPEC                 OF_MAX_IRQ_SPEC
> /* include/linux/of_mdio.h */
> #define dt_mdiobus_register             of_mdiobus_register
> #define dt_phy_find_device              of_phy_find_device
> #define dt_phy_connect                  of_phy_connect
> #define dt_phy_connect_fixed_link       of_phy_connect_fixed_link
> /* include/linux/of_spi.h */
> #define dt_register_spi_devices         of_register_spi_devices
> /* include/linux/of_gpio.h */
> #define dt_gpio_flags                   of_gpio_flags
> #define DT_GPIO_ACTIVE_LOW              OF_GPIO_ACTIVE_LOW
> #define dt_mm_gpio_chip                 of_mm_gpio_chip
> #define to_dt_mm_gpio_chip              to_of_mm_gpio_chip
> #define dt_get_gpio_flags               of_get_gpio_flags
> #define dt_gpio_count                   of_gpio_count
> #define dt_mm_gpiochip_add              of_mm_gpiochip_add
> #define dt_gpiochip_add                 of_gpiochip_add
> #define dt_gpiochip_remove              of_gpiochip_remove
> #define dt_node_to_gpiochip             of_node_to_gpiochip
> #define dt_get_gpio                     of_get_gpio
> /* include/linux/dt_i2c.h */
> #define dt_i2c_register_devices         of_i2c_register_devices
> #define dt_find_i2c_device_by_node      of_find_i2c_device_by_node
> #endif /* __DT_H */
> _______________________________________________
> devicetree-discuss mailing list

Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

<Prev in Thread] Current Thread [Next in Thread>