diff options
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0080-of-provide-a-binding-for-the-fixed-link-property.patch')
-rw-r--r-- | target/linux/mvebu/patches-3.10/0080-of-provide-a-binding-for-the-fixed-link-property.patch | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0080-of-provide-a-binding-for-the-fixed-link-property.patch b/target/linux/mvebu/patches-3.10/0080-of-provide-a-binding-for-the-fixed-link-property.patch new file mode 100644 index 0000000000..76105b39fc --- /dev/null +++ b/target/linux/mvebu/patches-3.10/0080-of-provide-a-binding-for-the-fixed-link-property.patch @@ -0,0 +1,132 @@ +From 5378928ebac13756fc13d0b2de8dd45ace8026aa Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +Date: Mon, 15 Jul 2013 17:34:08 +0200 +Subject: [PATCH 080/203] of: provide a binding for the 'fixed-link' property + +Some Ethernet MACs have a "fixed link", and are not connected to a +normal MDIO-managed PHY device. For those situations, a Device Tree +binding allows to describe a "fixed link", as a "fixed-link" property +of the Ethernet device Device Tree node. + +This patch adds: + + * A documentation for the Device Tree property "fixed-link". + + * A of_phy_register_fixed_link() OF helper, which provided an OF node + that contains a "fixed-link" property, registers the corresponding + fixed PHY. + + * Removes the warning on the of_phy_connect_fixed_link() that says + new drivers should not use it, since Grant Likely indicated that + this "fixed-link" property is indeed the way to go. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> +--- + .../devicetree/bindings/net/fixed-link.txt | 26 ++++++++++++++++ + drivers/of/of_mdio.c | 36 +++++++++++++++++++--- + include/linux/of_mdio.h | 10 ++++++ + 3 files changed, 68 insertions(+), 4 deletions(-) + create mode 100644 Documentation/devicetree/bindings/net/fixed-link.txt + +--- /dev/null ++++ b/Documentation/devicetree/bindings/net/fixed-link.txt +@@ -0,0 +1,26 @@ ++Fixed link Device Tree binding ++------------------------------ ++ ++Some Ethernet MACs have a "fixed link", and are not connected to a ++normal MDIO-managed PHY device. For those situations, a Device Tree ++binding allows to describe a "fixed link". ++ ++Such a fixed link situation is described within an Ethernet device ++Device Tree node using a 'fixed-link' property, composed of 5 ++elements: ++ ++ 1. A fake PHY ID, which must be unique accross all fixed-link PHYs in ++ the system. ++ 2. The duplex (1 for full-duplex, 0 for half-duplex) ++ 3. The speed (10, 100, 1000) ++ 4. The pause setting (1 for enabled, 0 for disabled) ++ 5. The asym pause setting (1 for enabled, 0 for disabled) ++ ++Example: ++ ++ethernet@0 { ++ ... ++ fixed-link = <1 1 1000 0 0>; ++ ... ++}; ++ +--- a/drivers/of/of_mdio.c ++++ b/drivers/of/of_mdio.c +@@ -14,6 +14,7 @@ + #include <linux/netdevice.h> + #include <linux/err.h> + #include <linux/phy.h> ++#include <linux/phy_fixed.h> + #include <linux/of.h> + #include <linux/of_irq.h> + #include <linux/of_mdio.h> +@@ -215,10 +216,6 @@ EXPORT_SYMBOL(of_phy_connect); + * @dev: pointer to net_device claiming the phy + * @hndlr: Link state callback for the network device + * @iface: PHY data interface type +- * +- * This function is a temporary stop-gap and will be removed soon. It is +- * only to support the fs_enet, ucc_geth and gianfar Ethernet drivers. Do +- * not call this function from new drivers. + */ + struct phy_device *of_phy_connect_fixed_link(struct net_device *dev, + void (*hndlr)(struct net_device *), +@@ -247,3 +244,34 @@ struct phy_device *of_phy_connect_fixed_ + return IS_ERR(phy) ? NULL : phy; + } + EXPORT_SYMBOL(of_phy_connect_fixed_link); ++ ++#if defined(CONFIG_FIXED_PHY) ++/** ++ * of_phy_register_fixed_link - Parse fixed-link property and register a dummy phy ++ * @np: pointer to the OF device node that contains the "fixed-link" ++ * property for which a dummy phy should be registered. ++ */ ++#define FIXED_LINK_PROPERTIES_COUNT 5 ++int of_phy_register_fixed_link(struct device_node *np) ++{ ++ struct fixed_phy_status status = {}; ++ u32 fixed_link_props[FIXED_LINK_PROPERTIES_COUNT]; ++ int ret; ++ ++ ret = of_property_read_u32_array(np, "fixed-link", ++ fixed_link_props, ++ FIXED_LINK_PROPERTIES_COUNT); ++ if (ret < 0) ++ return ret; ++ ++ status.link = 1; ++ status.duplex = fixed_link_props[1]; ++ status.speed = fixed_link_props[2]; ++ status.pause = fixed_link_props[3]; ++ status.asym_pause = fixed_link_props[4]; ++ ++ return fixed_phy_add(PHY_POLL, fixed_link_props[0], ++ &status); ++} ++EXPORT_SYMBOL(of_phy_register_fixed_link); ++#endif +--- a/include/linux/of_mdio.h ++++ b/include/linux/of_mdio.h +@@ -57,4 +57,14 @@ static inline struct mii_bus *of_mdio_fi + } + #endif /* CONFIG_OF */ + ++#if defined(CONFIG_OF) && defined(CONFIG_FIXED_PHY) ++extern int of_phy_register_fixed_link(struct device_node *np); ++#else ++static inline int of_phy_register_fixed_link(struct device_node *np) ++{ ++ return -ENOSYS; ++} ++#endif ++ ++ + #endif /* __LINUX_OF_MDIO_H */ |