Florian Fainelli wrote:

     emac_sgmii: ethernet-phy@410400 {
         compatible = "qcom,qdf2432-emac-phy";
         reg = <0x0 0x00410400 0x0 0x100>;
         interrupts = <0 0x104 0>;
     };


Is this register range relative to the emac0 node here, or is this
really a separate node, within the same adress space as your emac0 node?

It's a separate node within the same address space. We can't guarantee that it's adjacent to any other EMAC register -- it could be anywhere in memory. 0x00410400 is the real physical address of those registers.

Answer largely depends on whether your device is really located outside
of the emac, if it located outside, then a platform device matching the
compatible string would get you what you want. If the emac_sgmii block
is a sub-block within the EMAC, then a few things need fixing:

- your emac_sgmii node should be a sub-node of the emac node, not a sibling
- the emac0 node should have a "ranges" property that indicates how to
translate the sub-nodes' "reg" property based on the base register
address of the emac0 block
- you would have to call of_platform_populate from the EMAC driver to
ensure that the emac_sgmii child node and therefore platform device gets
created

Even if the emac_sgmii block were a sub-block, wouldn't it conflict with the ethernet-phy@4 node? The #address-cells and #size-cells properties cannot be valid for both the emac_sgmii and ethernet-phy@4 nodes.

--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the
Code Aurora Forum, hosted by The Linux Foundation.

Reply via email to