diff options
Diffstat (limited to 'target/linux/generic/backport-4.19/742-v5.5-net-sfp-add-support-for-module-quirks.patch')
-rw-r--r-- | target/linux/generic/backport-4.19/742-v5.5-net-sfp-add-support-for-module-quirks.patch | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/target/linux/generic/backport-4.19/742-v5.5-net-sfp-add-support-for-module-quirks.patch b/target/linux/generic/backport-4.19/742-v5.5-net-sfp-add-support-for-module-quirks.patch deleted file mode 100644 index 5068bd468c..0000000000 --- a/target/linux/generic/backport-4.19/742-v5.5-net-sfp-add-support-for-module-quirks.patch +++ /dev/null @@ -1,111 +0,0 @@ -From 8df5dd55cef48c0769379e04dbc085a899b106d4 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@armlinux.org.uk> -Date: Fri, 8 Mar 2019 14:02:25 +0000 -Subject: [PATCH 640/660] net: sfp: add support for module quirks - -Add support for applying module quirks to the list of supported -ethtool link modes. - -Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> ---- - drivers/net/phy/sfp-bus.c | 54 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 54 insertions(+) - ---- a/drivers/net/phy/sfp-bus.c -+++ b/drivers/net/phy/sfp-bus.c -@@ -9,6 +9,12 @@ - - #include "sfp.h" - -+struct sfp_quirk { -+ const char *vendor; -+ const char *part; -+ void (*modes)(const struct sfp_eeprom_id *id, unsigned long *modes); -+}; -+ - /** - * struct sfp_bus - internal representation of a sfp bus - */ -@@ -21,6 +27,7 @@ struct sfp_bus { - const struct sfp_socket_ops *socket_ops; - struct device *sfp_dev; - struct sfp *sfp; -+ const struct sfp_quirk *sfp_quirk; - - const struct sfp_upstream_ops *upstream_ops; - void *upstream; -@@ -30,6 +37,46 @@ struct sfp_bus { - bool started; - }; - -+static const struct sfp_quirk sfp_quirks[] = { -+}; -+ -+static size_t sfp_strlen(const char *str, size_t maxlen) -+{ -+ size_t size, i; -+ -+ /* Trailing characters should be filled with space chars */ -+ for (i = 0, size = 0; i < maxlen; i++) -+ if (str[i] != ' ') -+ size = i + 1; -+ -+ return size; -+} -+ -+static bool sfp_match(const char *qs, const char *str, size_t len) -+{ -+ if (!qs) -+ return true; -+ if (strlen(qs) != len) -+ return false; -+ return !strncmp(qs, str, len); -+} -+ -+static const struct sfp_quirk *sfp_lookup_quirk(const struct sfp_eeprom_id *id) -+{ -+ const struct sfp_quirk *q; -+ unsigned int i; -+ size_t vs, ps; -+ -+ vs = sfp_strlen(id->base.vendor_name, ARRAY_SIZE(id->base.vendor_name)); -+ ps = sfp_strlen(id->base.vendor_pn, ARRAY_SIZE(id->base.vendor_pn)); -+ -+ for (i = 0, q = sfp_quirks; i < ARRAY_SIZE(sfp_quirks); i++, q++) -+ if (sfp_match(q->vendor, id->base.vendor_name, vs) && -+ sfp_match(q->part, id->base.vendor_pn, ps)) -+ return q; -+ -+ return NULL; -+} - /** - * sfp_parse_port() - Parse the EEPROM base ID, setting the port type - * @bus: a pointer to the &struct sfp_bus structure for the sfp module -@@ -233,6 +280,9 @@ void sfp_parse_support(struct sfp_bus *b - phylink_set(modes, 1000baseX_Full); - } - -+ if (bus->sfp_quirk) -+ bus->sfp_quirk->modes(id, modes); -+ - bitmap_or(support, support, modes, __ETHTOOL_LINK_MODE_MASK_NBITS); - - phylink_set(support, Autoneg); -@@ -609,6 +659,8 @@ int sfp_module_insert(struct sfp_bus *bu - const struct sfp_upstream_ops *ops = sfp_get_upstream_ops(bus); - int ret = 0; - -+ bus->sfp_quirk = sfp_lookup_quirk(id); -+ - if (ops && ops->module_insert) - ret = ops->module_insert(bus->upstream, id); - -@@ -622,6 +674,8 @@ void sfp_module_remove(struct sfp_bus *b - - if (ops && ops->module_remove) - ops->module_remove(bus->upstream); -+ -+ bus->sfp_quirk = NULL; - } - EXPORT_SYMBOL_GPL(sfp_module_remove); - |