Thread (20 messages) 20 messages, 4 authors, 2014-07-09

[PATCH 6/6] mailbox/omap: add a custom of_xlate function

From: Suman Anna <hidden>
Date: 2014-06-25 16:32:43
Also in: linux-devicetree, linux-omap, lkml

Hi Arnd,

On 06/25/2014 03:39 AM, Arnd Bergmann wrote:
On Tuesday 24 June 2014 20:47:58 Suman Anna wrote:
quoted
+static struct mbox_chan *omap_mbox_of_xlate(struct mbox_controller *controller,
+                                           const struct of_phandle_args *sp)
+{
+       phandle phandle = sp->args[0];
+       struct device_node *node;
+       struct omap_mbox_device *mdev;
+       struct omap_mbox *mbox;
+
+       node = of_find_node_by_phandle(phandle);
+       if (!node) {
+               pr_err("could not find node phandle 0x%x\n", phandle);
+               return NULL;
+       }
+
+       mdev = container_of(controller, struct omap_mbox_device, controller);
+       if (WARN_ON(!mdev))
+               return NULL;
+
+       mbox = omap_mbox_device_find(mdev, node->name);
+       return mbox ? mbox->chan : NULL;
Wouldn't it be easier to change the omap_mbox_device_find() function to
take a phandle argument directly? You shouldn't have to walk all
nodes in the system, or match it by name if you already have the 
device node.
The omap_mbox_device_find() function is also used on the non-DT mailbox
client path (for OMAP3) at the moment where we don't have the device
node pointers. I am merely reusing the function for the DT lookup path,
and once I remove the non-DT support, I can surely do the matching logic
just based on the device node pointer. I just chose to minimize the
changes to the omap_mbox_device_find() to do both variants now when I
know that I am gonna remove the non-DT part (name lookup) later on.

The current expected DT usage model for the OMAP mailbox client is (with
the v7 mailbox framework)
    mbox = <&controller_phandle &channel_phandle>

So, this is not walking through all the nodes in the system, only the
channel/sub-mailbox nodes present on the particular controller node.
Surely, it can done as mbox = <&channel_phandle> as the parent
controller node relationship is inherent, but this requires changes to
the mailbox framework, and I am not sure if every platform
implementation would implement the child channels as their own nodes.
Also, the xlate function is normally the place where you read out
the other arguments and set them as members in your omap_mbox
structure.
The current flow for the xlate function is during the
mailbox_request_channel. The channels themselves would have been
registered during the controller node probe, so this is merely a lookup
for the correct channel. Should we be renaming the xlate function, if
the behavior is not what one expects out of a standard xlate?

regards
Suman
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help