* [PATCH v2 2/6] pch_gbe: Add module parameter for RGMII/GMII PHY mode selection
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
@ 2014-06-05 8:53 ` Alexander Stein
2014-06-05 18:15 ` Florian Fainelli
2014-06-05 8:53 ` [PATCH v2 3/6] pch_gbe: change order of PHY address discovering Alexander Stein
` (5 subsequent siblings)
6 siblings, 1 reply; 9+ messages in thread
From: Alexander Stein @ 2014-06-05 8:53 UTC (permalink / raw)
To: David S. Miller; +Cc: Alexander Stein, netdev, Daniel Krueger
The mode register has to be set even in GMII mode. Otherwise the 125 MHz
RXCLK is not detected after MAC reset.
Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
---
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h | 1 +
.../net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c | 6 +--
.../net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 47 ++++++++++++----------
.../net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h | 1 -
4 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
index 2a55d6d..956dc68 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
@@ -390,6 +390,7 @@ struct pch_gbe_phy_info {
u32 revision;
u32 reset_delay_us;
u16 autoneg_advertised;
+ bool is_rgmii;
};
/*!
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
index 5125036..c97e738 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
@@ -77,9 +77,9 @@ static s32 pch_gbe_plat_init_hw(struct pch_gbe_hw *hw)
}
pch_gbe_phy_init_setting(hw);
/* Setup Mac interface option RGMII */
-#ifdef PCH_GBE_MAC_IFOP_RGMII
- pch_gbe_phy_set_rgmii(hw);
-#endif
+ if (hw->phy.is_rgmii)
+ pch_gbe_phy_set_rgmii(hw);
+
return ret_val;
}
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
index cf3101c..e7acbd7 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -114,6 +114,7 @@ const char pch_driver_version[] = DRV_VERSION;
#define MINNOW_PHY_RESET_GPIO 13
static unsigned int copybreak __read_mostly = PCH_GBE_COPYBREAK_DEFAULT;
+static bool is_rgmii __read_mostly = 1;
static int pch_gbe_mdio_read(struct net_device *netdev, int addr, int reg);
static void pch_gbe_mdio_write(struct net_device *netdev, int addr, int reg,
@@ -369,9 +370,7 @@ static void pch_gbe_mac_reset_hw(struct pch_gbe_hw *hw)
/* Read the MAC address. and store to the private data */
pch_gbe_mac_read_mac_addr(hw);
iowrite32(PCH_GBE_ALL_RST, &hw->reg->RESET);
-#ifdef PCH_GBE_MAC_IFOP_RGMII
iowrite32(PCH_GBE_MODE_GMII_ETHER, &hw->reg->MODE);
-#endif
pch_gbe_wait_clr_bit(&hw->reg->RESET, PCH_GBE_ALL_RST);
/* Setup the receive addresses */
pch_gbe_mac_mar_set(hw, hw->mac.addr, 0);
@@ -1039,26 +1038,26 @@ static void pch_gbe_set_rgmii_ctrl(struct pch_gbe_adapter *adapter, u16 speed,
unsigned long rgmii = 0;
/* Set the RGMII control. */
-#ifdef PCH_GBE_MAC_IFOP_RGMII
- switch (speed) {
- case SPEED_10:
- rgmii = (PCH_GBE_RGMII_RATE_2_5M |
- PCH_GBE_MAC_RGMII_CTRL_SETTING);
- break;
- case SPEED_100:
- rgmii = (PCH_GBE_RGMII_RATE_25M |
- PCH_GBE_MAC_RGMII_CTRL_SETTING);
- break;
- case SPEED_1000:
- rgmii = (PCH_GBE_RGMII_RATE_125M |
- PCH_GBE_MAC_RGMII_CTRL_SETTING);
- break;
- }
- iowrite32(rgmii, &hw->reg->RGMII_CTRL);
-#else /* GMII */
- rgmii = 0;
+ if (hw->phy.is_rgmii) {
+ switch (speed) {
+ case SPEED_10:
+ rgmii = (PCH_GBE_RGMII_RATE_2_5M |
+ PCH_GBE_MAC_RGMII_CTRL_SETTING);
+ break;
+ case SPEED_100:
+ rgmii = (PCH_GBE_RGMII_RATE_25M |
+ PCH_GBE_MAC_RGMII_CTRL_SETTING);
+ break;
+ case SPEED_1000:
+ rgmii = (PCH_GBE_RGMII_RATE_125M |
+ PCH_GBE_MAC_RGMII_CTRL_SETTING);
+ break;
+ }
+ } else
+ /* GMII */
+ rgmii = 0;
+
iowrite32(rgmii, &hw->reg->RGMII_CTRL);
-#endif
}
static void pch_gbe_set_mode(struct pch_gbe_adapter *adapter, u16 speed,
u16 duplex)
@@ -2629,6 +2628,8 @@ static int pch_gbe_probe(struct pci_dev *pdev,
if (adapter->pdata && adapter->pdata->platform_init)
adapter->pdata->platform_init(pdev);
+ adapter->hw.phy.is_rgmii = is_rgmii;
+
adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number,
PCI_DEVFN(12, 4));
@@ -2841,4 +2842,8 @@ module_param(copybreak, uint, 0644);
MODULE_PARM_DESC(copybreak,
"Maximum size of packet that is copied to a new buffer on receive");
+module_param(is_rgmii, bool, 0644);
+MODULE_PARM_DESC(is_rgmii,
+ "Selection of RGMII/GMII PHY mode. true: RGMII (default). false: GMII");
+
/* pch_gbe_main.c */
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
index 95ad015..1c1e711 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
@@ -21,7 +21,6 @@
#define PCH_GBE_PHY_REGS_LEN 32
#define PCH_GBE_PHY_RESET_DELAY_US 10
-#define PCH_GBE_MAC_IFOP_RGMII
s32 pch_gbe_phy_get_id(struct pch_gbe_hw *hw);
s32 pch_gbe_phy_read_reg_miic(struct pch_gbe_hw *hw, u32 offset, u16 *data);
--
1.8.5.5
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v2 2/6] pch_gbe: Add module parameter for RGMII/GMII PHY mode selection
2014-06-05 8:53 ` [PATCH v2 2/6] pch_gbe: Add module parameter for RGMII/GMII PHY mode selection Alexander Stein
@ 2014-06-05 18:15 ` Florian Fainelli
0 siblings, 0 replies; 9+ messages in thread
From: Florian Fainelli @ 2014-06-05 18:15 UTC (permalink / raw)
To: Alexander Stein; +Cc: David S. Miller, netdev, Daniel Krueger
2014-06-05 1:53 GMT-07:00 Alexander Stein
<alexander.stein@systec-electronic.com>:
> The mode register has to be set even in GMII mode. Otherwise the 125 MHz
> RXCLK is not detected after MAC reset.
Should not that information come from some platform or device
configuration data? Having a module to toggle between GMII and RGMII
mode does not sound like something an user should be aware of.
>
> Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
> Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
> ---
> drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h | 1 +
> .../net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c | 6 +--
> .../net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 47 ++++++++++++----------
> .../net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h | 1 -
> 4 files changed, 30 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
> index 2a55d6d..956dc68 100644
> --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
> +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
> @@ -390,6 +390,7 @@ struct pch_gbe_phy_info {
> u32 revision;
> u32 reset_delay_us;
> u16 autoneg_advertised;
> + bool is_rgmii;
> };
>
> /*!
> diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
> index 5125036..c97e738 100644
> --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
> +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
> @@ -77,9 +77,9 @@ static s32 pch_gbe_plat_init_hw(struct pch_gbe_hw *hw)
> }
> pch_gbe_phy_init_setting(hw);
> /* Setup Mac interface option RGMII */
> -#ifdef PCH_GBE_MAC_IFOP_RGMII
> - pch_gbe_phy_set_rgmii(hw);
> -#endif
> + if (hw->phy.is_rgmii)
> + pch_gbe_phy_set_rgmii(hw);
> +
> return ret_val;
> }
>
> diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
> index cf3101c..e7acbd7 100644
> --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
> +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
> @@ -114,6 +114,7 @@ const char pch_driver_version[] = DRV_VERSION;
> #define MINNOW_PHY_RESET_GPIO 13
>
> static unsigned int copybreak __read_mostly = PCH_GBE_COPYBREAK_DEFAULT;
> +static bool is_rgmii __read_mostly = 1;
>
> static int pch_gbe_mdio_read(struct net_device *netdev, int addr, int reg);
> static void pch_gbe_mdio_write(struct net_device *netdev, int addr, int reg,
> @@ -369,9 +370,7 @@ static void pch_gbe_mac_reset_hw(struct pch_gbe_hw *hw)
> /* Read the MAC address. and store to the private data */
> pch_gbe_mac_read_mac_addr(hw);
> iowrite32(PCH_GBE_ALL_RST, &hw->reg->RESET);
> -#ifdef PCH_GBE_MAC_IFOP_RGMII
> iowrite32(PCH_GBE_MODE_GMII_ETHER, &hw->reg->MODE);
> -#endif
> pch_gbe_wait_clr_bit(&hw->reg->RESET, PCH_GBE_ALL_RST);
> /* Setup the receive addresses */
> pch_gbe_mac_mar_set(hw, hw->mac.addr, 0);
> @@ -1039,26 +1038,26 @@ static void pch_gbe_set_rgmii_ctrl(struct pch_gbe_adapter *adapter, u16 speed,
> unsigned long rgmii = 0;
>
> /* Set the RGMII control. */
> -#ifdef PCH_GBE_MAC_IFOP_RGMII
> - switch (speed) {
> - case SPEED_10:
> - rgmii = (PCH_GBE_RGMII_RATE_2_5M |
> - PCH_GBE_MAC_RGMII_CTRL_SETTING);
> - break;
> - case SPEED_100:
> - rgmii = (PCH_GBE_RGMII_RATE_25M |
> - PCH_GBE_MAC_RGMII_CTRL_SETTING);
> - break;
> - case SPEED_1000:
> - rgmii = (PCH_GBE_RGMII_RATE_125M |
> - PCH_GBE_MAC_RGMII_CTRL_SETTING);
> - break;
> - }
> - iowrite32(rgmii, &hw->reg->RGMII_CTRL);
> -#else /* GMII */
> - rgmii = 0;
> + if (hw->phy.is_rgmii) {
> + switch (speed) {
> + case SPEED_10:
> + rgmii = (PCH_GBE_RGMII_RATE_2_5M |
> + PCH_GBE_MAC_RGMII_CTRL_SETTING);
> + break;
> + case SPEED_100:
> + rgmii = (PCH_GBE_RGMII_RATE_25M |
> + PCH_GBE_MAC_RGMII_CTRL_SETTING);
> + break;
> + case SPEED_1000:
> + rgmii = (PCH_GBE_RGMII_RATE_125M |
> + PCH_GBE_MAC_RGMII_CTRL_SETTING);
> + break;
> + }
> + } else
> + /* GMII */
> + rgmii = 0;
> +
> iowrite32(rgmii, &hw->reg->RGMII_CTRL);
> -#endif
> }
> static void pch_gbe_set_mode(struct pch_gbe_adapter *adapter, u16 speed,
> u16 duplex)
> @@ -2629,6 +2628,8 @@ static int pch_gbe_probe(struct pci_dev *pdev,
> if (adapter->pdata && adapter->pdata->platform_init)
> adapter->pdata->platform_init(pdev);
>
> + adapter->hw.phy.is_rgmii = is_rgmii;
> +
> adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number,
> PCI_DEVFN(12, 4));
>
> @@ -2841,4 +2842,8 @@ module_param(copybreak, uint, 0644);
> MODULE_PARM_DESC(copybreak,
> "Maximum size of packet that is copied to a new buffer on receive");
>
> +module_param(is_rgmii, bool, 0644);
> +MODULE_PARM_DESC(is_rgmii,
> + "Selection of RGMII/GMII PHY mode. true: RGMII (default). false: GMII");
> +
> /* pch_gbe_main.c */
> diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
> index 95ad015..1c1e711 100644
> --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
> +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
> @@ -21,7 +21,6 @@
>
> #define PCH_GBE_PHY_REGS_LEN 32
> #define PCH_GBE_PHY_RESET_DELAY_US 10
> -#define PCH_GBE_MAC_IFOP_RGMII
>
> s32 pch_gbe_phy_get_id(struct pch_gbe_hw *hw);
> s32 pch_gbe_phy_read_reg_miic(struct pch_gbe_hw *hw, u32 offset, u16 *data);
> --
> 1.8.5.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Florian
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 3/6] pch_gbe: change order of PHY address discovering
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
2014-06-05 8:53 ` [PATCH v2 2/6] pch_gbe: Add module parameter for RGMII/GMII PHY mode selection Alexander Stein
@ 2014-06-05 8:53 ` Alexander Stein
2014-06-05 8:53 ` [PATCH v2 4/6] pch_gbe: remove unnecessary PHY resets Alexander Stein
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Alexander Stein @ 2014-06-05 8:53 UTC (permalink / raw)
To: David S. Miller; +Cc: Daniel Krueger, netdev, Alexander Stein
From: Daniel Krueger <daniel.krueger@systec-electronic.com>
Scan PHY address 0 after all other addresses. Address 0 is a multicast
address which unfortunately does not work properly with Micrel KSZ9021.
Our board uses PHY address 2.
Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
---
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
index e7acbd7..9ac407d 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -662,9 +662,9 @@ static int pch_gbe_init_phy(struct pch_gbe_adapter *adapter)
u32 addr;
u16 bmcr, stat;
- /* Discover phy addr by searching addrs in order {1,0,2,..., 31} */
+ /* Discover phy addr by searching addrs in order {1,2,...,31,0} */
for (addr = 0; addr < PCH_GBE_PHY_REGS_LEN; addr++) {
- adapter->mii.phy_id = (addr == 0) ? 1 : (addr == 1) ? 0 : addr;
+ adapter->mii.phy_id = (addr == 31) ? 0 : (addr + 1);
bmcr = pch_gbe_mdio_read(netdev, adapter->mii.phy_id, MII_BMCR);
stat = pch_gbe_mdio_read(netdev, adapter->mii.phy_id, MII_BMSR);
stat = pch_gbe_mdio_read(netdev, adapter->mii.phy_id, MII_BMSR);
--
1.8.5.5
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v2 4/6] pch_gbe: remove unnecessary PHY resets
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
2014-06-05 8:53 ` [PATCH v2 2/6] pch_gbe: Add module parameter for RGMII/GMII PHY mode selection Alexander Stein
2014-06-05 8:53 ` [PATCH v2 3/6] pch_gbe: change order of PHY address discovering Alexander Stein
@ 2014-06-05 8:53 ` Alexander Stein
2014-06-05 8:53 ` [PATCH v2 5/6] pch_gbe: reset PHY before first configuration Alexander Stein
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Alexander Stein @ 2014-06-05 8:53 UTC (permalink / raw)
To: David S. Miller; +Cc: Daniel Krueger, netdev, Alexander Stein
From: Daniel Krueger <daniel.krueger@systec-electronic.com>
Those PHY software resets destroy the painfully made PHY settings.
Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
---
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c | 2 --
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c | 1 -
2 files changed, 3 deletions(-)
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
index 826f0cc..fbfac98 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
@@ -111,8 +111,6 @@ static int pch_gbe_set_settings(struct net_device *netdev,
u32 speed = ethtool_cmd_speed(ecmd);
int ret;
- pch_gbe_hal_write_phy_reg(hw, MII_BMCR, BMCR_RESET);
-
/* when set_settings() is called with a ethtool_cmd previously
* filled by get_settings() on a down link, speed is -1: */
if (speed == UINT_MAX) {
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
index a5cad5e..3fa9a8f 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
@@ -320,7 +320,6 @@ void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw)
cmd.duplex = hw->mac.link_duplex;
cmd.advertising = hw->phy.autoneg_advertised;
cmd.autoneg = hw->mac.autoneg;
- pch_gbe_phy_write_reg_miic(hw, MII_BMCR, BMCR_RESET);
ret = mii_ethtool_sset(&adapter->mii, &cmd);
if (ret)
netdev_err(adapter->netdev, "Error: mii_ethtool_sset\n");
--
1.8.5.5
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v2 5/6] pch_gbe: reset PHY before first configuration
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
` (2 preceding siblings ...)
2014-06-05 8:53 ` [PATCH v2 4/6] pch_gbe: remove unnecessary PHY resets Alexander Stein
@ 2014-06-05 8:53 ` Alexander Stein
2014-06-05 8:53 ` [PATCH v2 6/6] pch_gbe: remove shutdown and restart of interface after PHY settings change Alexander Stein
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Alexander Stein @ 2014-06-05 8:53 UTC (permalink / raw)
To: David S. Miller; +Cc: Daniel Krueger, netdev, Alexander Stein
From: Daniel Krueger <daniel.krueger@systec-electronic.com>
It is a good idea to perform a PHY software reset, but is should be done
before performing the first configuration.
Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
---
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
index 3fa9a8f..dc9f0d3 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
@@ -316,6 +316,8 @@ void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw)
if (ret)
netdev_err(adapter->netdev, "Error: mii_ethtool_gset\n");
+ pch_gbe_phy_sw_reset(hw);
+
ethtool_cmd_speed_set(&cmd, hw->mac.link_speed);
cmd.duplex = hw->mac.link_duplex;
cmd.advertising = hw->phy.autoneg_advertised;
@@ -324,8 +326,6 @@ void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw)
if (ret)
netdev_err(adapter->netdev, "Error: mii_ethtool_sset\n");
- pch_gbe_phy_sw_reset(hw);
-
pch_gbe_phy_read_reg_miic(hw, PHY_PHYSP_CONTROL, &mii_reg);
mii_reg |= PHYSP_CTRL_ASSERT_CRS_TX;
pch_gbe_phy_write_reg_miic(hw, PHY_PHYSP_CONTROL, mii_reg);
--
1.8.5.5
^ permalink raw reply related [flat|nested] 9+ messages in thread* [PATCH v2 6/6] pch_gbe: remove shutdown and restart of interface after PHY settings change
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
` (3 preceding siblings ...)
2014-06-05 8:53 ` [PATCH v2 5/6] pch_gbe: reset PHY before first configuration Alexander Stein
@ 2014-06-05 8:53 ` Alexander Stein
2014-06-05 18:00 ` [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Florian Fainelli
2014-06-05 22:19 ` David Miller
6 siblings, 0 replies; 9+ messages in thread
From: Alexander Stein @ 2014-06-05 8:53 UTC (permalink / raw)
To: David S. Miller; +Cc: Daniel Krueger, netdev, Alexander Stein
From: Daniel Krueger <daniel.krueger@systec-electronic.com>
This is not necessary. mii_ethtool_sset retriggers the autonegociation if
necessary automatically.
Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
---
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
index fbfac98..2284042 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
@@ -128,13 +128,6 @@ static int pch_gbe_set_settings(struct net_device *netdev,
hw->phy.autoneg_advertised = ecmd->advertising;
hw->mac.autoneg = ecmd->autoneg;
- /* reset the link */
- if (netif_running(adapter->netdev)) {
- pch_gbe_down(adapter);
- ret = pch_gbe_up(adapter);
- } else {
- pch_gbe_reset(adapter);
- }
return ret;
}
--
1.8.5.5
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
` (4 preceding siblings ...)
2014-06-05 8:53 ` [PATCH v2 6/6] pch_gbe: remove shutdown and restart of interface after PHY settings change Alexander Stein
@ 2014-06-05 18:00 ` Florian Fainelli
2014-06-05 22:19 ` David Miller
6 siblings, 0 replies; 9+ messages in thread
From: Florian Fainelli @ 2014-06-05 18:00 UTC (permalink / raw)
To: Alexander Stein; +Cc: David S. Miller, Daniel Krueger, netdev
2014-06-05 1:53 GMT-07:00 Alexander Stein
<alexander.stein@systec-electronic.com>:
> From: Daniel Krueger <daniel.krueger@systec-electronic.com>
>
> It is also neat to show the actual offending MAC address instead of just
> rejecting it
Most drivers do use a random Ethernet MAC address instead of bailing
out, which might be a more sensible option.
>
> Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
> Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
> ---
>
> Changes in v2:
> * Use just a single line
>
> drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
> index 73e6683..cf3101c 100644
> --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
> +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
> @@ -2672,8 +2672,7 @@ static int pch_gbe_probe(struct pci_dev *pdev,
> * prevent the interface from being brought up until a valid MAC
> * is set.
> */
> - dev_err(&pdev->dev, "Invalid MAC address, "
> - "interface disabled.\n");
> + dev_err(&pdev->dev, "Invalid MAC address %pM - interface disabled.\n", adapter->hw.mac.addr);
> }
> setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog,
> (unsigned long)adapter);
> --
> 1.8.5.5
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Florian
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe
2014-06-05 8:53 [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Alexander Stein
` (5 preceding siblings ...)
2014-06-05 18:00 ` [PATCH v2 1/6] pch_gbe: print invalid MAC address during probe Florian Fainelli
@ 2014-06-05 22:19 ` David Miller
6 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2014-06-05 22:19 UTC (permalink / raw)
To: alexander.stein; +Cc: daniel.krueger, netdev
From: Alexander Stein <alexander.stein@systec-electronic.com>
Date: Thu, 5 Jun 2014 10:53:02 +0200
> From: Daniel Krueger <daniel.krueger@systec-electronic.com>
>
> It is also neat to show the actual offending MAC address instead of just
> rejecting it
>
> Signed-off-by: Daniel Krueger <daniel.krueger@systec-electronic.com>
> Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
> ---
>
> Changes in v2:
> * Use just a single line
I agree with other's feedback in that this code is not legitimate.
It should generate a random MAC address via the standard interfaces we
have for doing so, rather than failing to bring up the interface.
Interface bringup failure should be the absolute last resort, and we
should recover and still bring the interface up whenever we can.
^ permalink raw reply [flat|nested] 9+ messages in thread