diff options
Diffstat (limited to 'target/linux/mvebu/patches-4.4/120-phy-move-fixed_phy-MII-register-generation-to-a-libr.patch')
-rw-r--r-- | target/linux/mvebu/patches-4.4/120-phy-move-fixed_phy-MII-register-generation-to-a-libr.patch | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/target/linux/mvebu/patches-4.4/120-phy-move-fixed_phy-MII-register-generation-to-a-libr.patch b/target/linux/mvebu/patches-4.4/120-phy-move-fixed_phy-MII-register-generation-to-a-libr.patch deleted file mode 100644 index 0b5042afd0..0000000000 --- a/target/linux/mvebu/patches-4.4/120-phy-move-fixed_phy-MII-register-generation-to-a-libr.patch +++ /dev/null @@ -1,306 +0,0 @@ -From 4d5621372f6e7ddbfd5879602f82073987bcc722 Mon Sep 17 00:00:00 2001 -From: Russell King <rmk+kernel@arm.linux.org.uk> -Date: Sun, 20 Sep 2015 09:57:10 +0100 -Subject: [PATCH 709/744] phy: move fixed_phy MII register generation to a - library - -Move the fixed_phy MII register generation to a library to allow other -software phy implementations to use this code. - -Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> ---- - drivers/net/phy/Kconfig | 4 ++ - drivers/net/phy/Makefile | 3 +- - drivers/net/phy/fixed_phy.c | 95 ++------------------------------- - drivers/net/phy/swphy.c | 126 ++++++++++++++++++++++++++++++++++++++++++++ - drivers/net/phy/swphy.h | 8 +++ - 5 files changed, 143 insertions(+), 93 deletions(-) - create mode 100644 drivers/net/phy/swphy.c - create mode 100644 drivers/net/phy/swphy.h - ---- a/drivers/net/phy/Kconfig -+++ b/drivers/net/phy/Kconfig -@@ -26,6 +26,9 @@ config SWCONFIG_LEDS - bool "Switch LED trigger support" - depends on (SWCONFIG && LEDS_TRIGGERS) - -+config SWPHY -+ bool -+ - comment "MII PHY device drivers" - - config AQUANTIA_PHY -@@ -210,6 +213,7 @@ config RTL8306_PHY - config FIXED_PHY - tristate "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs" - depends on PHYLIB -+ select SWPHY - ---help--- - Adds the platform "fixed" MDIO Bus to cover the boards that use - PHYs that are not connected to the real MDIO bus. ---- a/drivers/net/phy/Makefile -+++ b/drivers/net/phy/Makefile -@@ -1,6 +1,7 @@ - # Makefile for Linux PHY drivers - --libphy-objs := phy.o phy_device.o mdio_bus.o -+libphy-y := phy.o phy_device.o mdio_bus.o -+libphy-$(CONFIG_SWPHY) += swphy.o - - obj-$(CONFIG_MDIO_BOARDINFO) += mdio-boardinfo.o - ---- a/drivers/net/phy/fixed_phy.c -+++ b/drivers/net/phy/fixed_phy.c -@@ -24,6 +24,8 @@ - #include <linux/of.h> - #include <linux/gpio.h> - -+#include "swphy.h" -+ - #define MII_REGS_NUM 29 - - struct fixed_mdio_bus { -@@ -49,101 +51,10 @@ static struct fixed_mdio_bus platform_fm - - static int fixed_phy_update_regs(struct fixed_phy *fp) - { -- u16 bmsr = BMSR_ANEGCAPABLE; -- u16 bmcr = 0; -- u16 lpagb = 0; -- u16 lpa = 0; -- - if (gpio_is_valid(fp->link_gpio)) - fp->status.link = !!gpio_get_value_cansleep(fp->link_gpio); - -- if (fp->status.duplex) { -- switch (fp->status.speed) { -- case 1000: -- bmsr |= BMSR_ESTATEN; -- break; -- case 100: -- bmsr |= BMSR_100FULL; -- break; -- case 10: -- bmsr |= BMSR_10FULL; -- break; -- default: -- break; -- } -- } else { -- switch (fp->status.speed) { -- case 1000: -- bmsr |= BMSR_ESTATEN; -- break; -- case 100: -- bmsr |= BMSR_100HALF; -- break; -- case 10: -- bmsr |= BMSR_10HALF; -- break; -- default: -- break; -- } -- } -- -- if (fp->status.link) { -- bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE; -- -- if (fp->status.duplex) { -- bmcr |= BMCR_FULLDPLX; -- -- switch (fp->status.speed) { -- case 1000: -- bmcr |= BMCR_SPEED1000; -- lpagb |= LPA_1000FULL; -- break; -- case 100: -- bmcr |= BMCR_SPEED100; -- lpa |= LPA_100FULL; -- break; -- case 10: -- lpa |= LPA_10FULL; -- break; -- default: -- pr_warn("fixed phy: unknown speed\n"); -- return -EINVAL; -- } -- } else { -- switch (fp->status.speed) { -- case 1000: -- bmcr |= BMCR_SPEED1000; -- lpagb |= LPA_1000HALF; -- break; -- case 100: -- bmcr |= BMCR_SPEED100; -- lpa |= LPA_100HALF; -- break; -- case 10: -- lpa |= LPA_10HALF; -- break; -- default: -- pr_warn("fixed phy: unknown speed\n"); -- return -EINVAL; -- } -- } -- -- if (fp->status.pause) -- lpa |= LPA_PAUSE_CAP; -- -- if (fp->status.asym_pause) -- lpa |= LPA_PAUSE_ASYM; -- } -- -- fp->regs[MII_PHYSID1] = 0; -- fp->regs[MII_PHYSID2] = 0; -- -- fp->regs[MII_BMSR] = bmsr; -- fp->regs[MII_BMCR] = bmcr; -- fp->regs[MII_LPA] = lpa; -- fp->regs[MII_STAT1000] = lpagb; -- -- return 0; -+ return swphy_update_regs(fp->regs, &fp->status); - } - - static int fixed_mdio_read(struct mii_bus *bus, int phy_addr, int reg_num) ---- /dev/null -+++ b/drivers/net/phy/swphy.c -@@ -0,0 +1,126 @@ -+/* -+ * Software PHY emulation -+ * -+ * Code taken from fixed_phy.c by Russell King <rmk+kernel@arm.linux.org.uk> -+ * -+ * Author: Vitaly Bordug <vbordug@ru.mvista.com> -+ * Anton Vorontsov <avorontsov@ru.mvista.com> -+ * -+ * Copyright (c) 2006-2007 MontaVista Software, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ */ -+#include <linux/export.h> -+#include <linux/mii.h> -+#include <linux/phy.h> -+#include <linux/phy_fixed.h> -+ -+#include "swphy.h" -+ -+/** -+ * swphy_update_regs - update MII register array with fixed phy state -+ * @regs: array of 32 registers to update -+ * @state: fixed phy status -+ * -+ * Update the array of MII registers with the fixed phy link, speed, -+ * duplex and pause mode settings. -+ */ -+int swphy_update_regs(u16 *regs, const struct fixed_phy_status *state) -+{ -+ u16 bmsr = BMSR_ANEGCAPABLE; -+ u16 bmcr = 0; -+ u16 lpagb = 0; -+ u16 lpa = 0; -+ -+ if (state->duplex) { -+ switch (state->speed) { -+ case 1000: -+ bmsr |= BMSR_ESTATEN; -+ break; -+ case 100: -+ bmsr |= BMSR_100FULL; -+ break; -+ case 10: -+ bmsr |= BMSR_10FULL; -+ break; -+ default: -+ break; -+ } -+ } else { -+ switch (state->speed) { -+ case 1000: -+ bmsr |= BMSR_ESTATEN; -+ break; -+ case 100: -+ bmsr |= BMSR_100HALF; -+ break; -+ case 10: -+ bmsr |= BMSR_10HALF; -+ break; -+ default: -+ break; -+ } -+ } -+ -+ if (state->link) { -+ bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE; -+ -+ if (state->duplex) { -+ bmcr |= BMCR_FULLDPLX; -+ -+ switch (state->speed) { -+ case 1000: -+ bmcr |= BMCR_SPEED1000; -+ lpagb |= LPA_1000FULL; -+ break; -+ case 100: -+ bmcr |= BMCR_SPEED100; -+ lpa |= LPA_100FULL; -+ break; -+ case 10: -+ lpa |= LPA_10FULL; -+ break; -+ default: -+ pr_warn("swphy: unknown speed\n"); -+ return -EINVAL; -+ } -+ } else { -+ switch (state->speed) { -+ case 1000: -+ bmcr |= BMCR_SPEED1000; -+ lpagb |= LPA_1000HALF; -+ break; -+ case 100: -+ bmcr |= BMCR_SPEED100; -+ lpa |= LPA_100HALF; -+ break; -+ case 10: -+ lpa |= LPA_10HALF; -+ break; -+ default: -+ pr_warn("swphy: unknown speed\n"); -+ return -EINVAL; -+ } -+ } -+ -+ if (state->pause) -+ lpa |= LPA_PAUSE_CAP; -+ -+ if (state->asym_pause) -+ lpa |= LPA_PAUSE_ASYM; -+ } -+ -+ regs[MII_PHYSID1] = 0; -+ regs[MII_PHYSID2] = 0; -+ -+ regs[MII_BMSR] = bmsr; -+ regs[MII_BMCR] = bmcr; -+ regs[MII_LPA] = lpa; -+ regs[MII_STAT1000] = lpagb; -+ -+ return 0; -+} -+EXPORT_SYMBOL_GPL(swphy_update_regs); ---- /dev/null -+++ b/drivers/net/phy/swphy.h -@@ -0,0 +1,8 @@ -+#ifndef SWPHY_H -+#define SWPHY_H -+ -+struct fixed_phy_status; -+ -+int swphy_update_regs(u16 *regs, const struct fixed_phy_status *state); -+ -+#endif |