Hi, Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx> writes: > @@ -197,7 +196,7 @@ static int xhci_plat_probe(struct platform_device *pdev) > } > > xhci = hcd_to_xhci(hcd); > - match = of_match_node(usb_xhci_of_match, node); > + match = of_match_node(usb_xhci_of_match, pdev->dev.of_node); Rob, it's weird that OF-based drivers have to redo the same matching which was already done by drivers/base/platform.c::platform_match() just to get match->data. If we know we matched, couldn't we just cache a pointer to match->data in struct device_node.data ? Something like below? (completely untested) diff --git a/drivers/of/base.c b/drivers/of/base.c index b299de2b3afa..9b44caa38f7c 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -981,6 +981,8 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches, raw_spin_lock_irqsave(&devtree_lock, flags); match = __of_match_node(matches, node); + if (match) + node->data = match->data; raw_spin_unlock_irqrestore(&devtree_lock, flags); return match; } I tried to find users of device_node.data but couldn't find any. If this patch is acceptable, we can remove 160 occurences of of_match_node with some variance of node->data. -- balbi
Attachment:
signature.asc
Description: PGP signature