2024-06-12 17:29:04

by Raju Lakkaraju

[permalink] [raw]
Subject: [PATCH net V4 0/3] net: lan743x: Fixes for multiple WOL related issues

This patch series implement the following fixes:
1. Disable WOL upon resume in order to restore full data path operation
2. Support WOL at both the PHY and MAC appropriately
3. Remove interrupt mask clearing from config_init

Patch-3 was sent seperately earlier. Review comments in link:
https://lore.kernel.org/lkml/[email protected]/T/

Raju Lakkaraju (3):
net: lan743x: disable WOL upon resume to restore full data path
operation
net: lan743x: Support WOL at both the PHY and MAC appropriately
net: phy: mxl-gpy: Remove interrupt mask clearing from config_init

.../net/ethernet/microchip/lan743x_ethtool.c | 44 ++++++++++++--
drivers/net/ethernet/microchip/lan743x_main.c | 48 ++++++++++++---
drivers/net/ethernet/microchip/lan743x_main.h | 28 +++++++++
drivers/net/phy/mxl-gpy.c | 58 ++++++++++++-------
4 files changed, 146 insertions(+), 32 deletions(-)

--
2.34.1



2024-06-12 17:29:30

by Raju Lakkaraju

[permalink] [raw]
Subject: [PATCH net V4 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately

Prevent options not supported by the PHY from being requested to it by the MAC
Whenever a WOL option is supported by both, the PHY is given priority
since that usually leads to better power savings.

Fixes: e9e13b6adc338 ("lan743x: fix for potential NULL pointer dereference with bare card")
Signed-off-by: Raju Lakkaraju <[email protected]>
Reviewed-by: Wojciech Drewek <[email protected]>
Reported-by: kernel test robot <[email protected]>
Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
---
Change List:
------------
V3 -> V4:
- Fix the support for "CONFIG_PM=N"
V2 -> V3:
- Remove the "phy does not support WOL" debug message which is not required
- Remove WAKE_PHY support option from Ethernet MAC (LAN743x/PCI11x1x) driver
- Add "phy_wol_supported" and "phy_wolopts" variables to hold PHY's WOL config
V1 -> V2:
- Repost - No change
V0 -> V1:
- Change the "phy does not support WOL" print from netif_info() to
netif_dbg()

.../net/ethernet/microchip/lan743x_ethtool.c | 44 +++++++++++++++++--
drivers/net/ethernet/microchip/lan743x_main.c | 18 ++++++--
drivers/net/ethernet/microchip/lan743x_main.h | 4 ++
3 files changed, 58 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_ethtool.c b/drivers/net/ethernet/microchip/lan743x_ethtool.c
index d0f4ff4ee075..0d1740d64676 100644
--- a/drivers/net/ethernet/microchip/lan743x_ethtool.c
+++ b/drivers/net/ethernet/microchip/lan743x_ethtool.c
@@ -1127,8 +1127,12 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev,
if (netdev->phydev)
phy_ethtool_get_wol(netdev->phydev, wol);

- wol->supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
- WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
+ if (wol->supported != adapter->phy_wol_supported)
+ netif_warn(adapter, drv, adapter->netdev,
+ "PHY changed its supported WOL! old=%x, new=%x\n",
+ adapter->phy_wol_supported, wol->supported);
+
+ wol->supported |= MAC_SUPPORTED_WAKES;

if (adapter->is_pci11x1x)
wol->supported |= WAKE_MAGICSECURE;
@@ -1143,7 +1147,39 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
{
struct lan743x_adapter *adapter = netdev_priv(netdev);

+ /* WAKE_MAGICSEGURE is a modifier of and only valid together with
+ * WAKE_MAGIC
+ */
+ if ((wol->wolopts & WAKE_MAGICSECURE) && !(wol->wolopts & WAKE_MAGIC))
+ return -EINVAL;
+
+ if (netdev->phydev) {
+ struct ethtool_wolinfo phy_wol;
+ int ret;
+
+ phy_wol.wolopts = wol->wolopts & adapter->phy_wol_supported;
+
+ /* If WAKE_MAGICSECURE was requested, filter out WAKE_MAGIC
+ * for PHYs that do not support WAKE_MAGICSECURE
+ */
+ if (wol->wolopts & WAKE_MAGICSECURE &&
+ !(adapter->phy_wol_supported & WAKE_MAGICSECURE))
+ phy_wol.wolopts &= ~WAKE_MAGIC;
+
+ ret = phy_ethtool_set_wol(netdev->phydev, &phy_wol);
+ if (ret && (ret != -EOPNOTSUPP))
+ return ret;
+
+ if (ret == -EOPNOTSUPP)
+ adapter->phy_wolopts = 0;
+ else
+ adapter->phy_wolopts = phy_wol.wolopts;
+ } else {
+ adapter->phy_wolopts = 0;
+ }
+
adapter->wolopts = 0;
+ wol->wolopts &= ~adapter->phy_wolopts;
if (wol->wolopts & WAKE_UCAST)
adapter->wolopts |= WAKE_UCAST;
if (wol->wolopts & WAKE_MCAST)
@@ -1164,10 +1200,10 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
memset(adapter->sopass, 0, sizeof(u8) * SOPASS_MAX);
}

+ wol->wolopts = adapter->wolopts | adapter->phy_wolopts;
device_set_wakeup_enable(&adapter->pdev->dev, (bool)wol->wolopts);

- return netdev->phydev ? phy_ethtool_set_wol(netdev->phydev, wol)
- : -ENETDOWN;
+ return 0;
}
#endif /* CONFIG_PM */

diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index 6a40b961fafb..90572e780d9f 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -3118,6 +3118,17 @@ static int lan743x_netdev_open(struct net_device *netdev)
if (ret)
goto close_tx;
}
+
+#ifdef CONFIG_PM
+ if (adapter->netdev->phydev) {
+ struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
+
+ phy_ethtool_get_wol(netdev->phydev, &wol);
+ adapter->phy_wol_supported = wol.supported;
+ adapter->phy_wolopts = wol.wolopts;
+ }
+#endif
+
return 0;

close_tx:
@@ -3587,10 +3598,9 @@ static void lan743x_pm_set_wol(struct lan743x_adapter *adapter)

pmtctl |= PMT_CTL_ETH_PHY_D3_COLD_OVR_ | PMT_CTL_ETH_PHY_D3_OVR_;

- if (adapter->wolopts & WAKE_PHY) {
- pmtctl |= PMT_CTL_ETH_PHY_EDPD_PLL_CTL_;
+ if (adapter->phy_wolopts)
pmtctl |= PMT_CTL_ETH_PHY_WAKE_EN_;
- }
+
if (adapter->wolopts & WAKE_MAGIC) {
wucsr |= MAC_WUCSR_MPEN_;
macrx |= MAC_RX_RXEN_;
@@ -3686,7 +3696,7 @@ static int lan743x_pm_suspend(struct device *dev)
lan743x_csr_write(adapter, MAC_WUCSR2, 0);
lan743x_csr_write(adapter, MAC_WK_SRC, 0xFFFFFFFF);

- if (adapter->wolopts)
+ if (adapter->wolopts || adapter->phy_wolopts)
lan743x_pm_set_wol(adapter);

if (adapter->is_pci11x1x) {
diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h
index fac0f33d10b2..3b2585a384e2 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.h
+++ b/drivers/net/ethernet/microchip/lan743x_main.h
@@ -1042,6 +1042,8 @@ enum lan743x_sgmii_lsd {
LINK_2500_SLAVE
};

+#define MAC_SUPPORTED_WAKES (WAKE_BCAST | WAKE_UCAST | WAKE_MCAST | \
+ WAKE_MAGIC | WAKE_ARP)
struct lan743x_adapter {
struct net_device *netdev;
struct mii_bus *mdiobus;
@@ -1049,6 +1051,8 @@ struct lan743x_adapter {
#ifdef CONFIG_PM
u32 wolopts;
u8 sopass[SOPASS_MAX];
+ u32 phy_wolopts;
+ u32 phy_wol_supported;
#endif
struct pci_dev *pdev;
struct lan743x_csr csr;
--
2.34.1


2024-06-12 17:29:44

by Raju Lakkaraju

[permalink] [raw]
Subject: [PATCH net V4 1/3] net: lan743x: disable WOL upon resume to restore full data path operation

When Wake-on-LAN (WoL) is active and the system is in suspend mode, triggering
a system event can wake the system from sleep, which may block the data path.
To restore normal data path functionality after waking, disable all wake-up
events. Furthermore, clear all Write 1 to Clear (W1C) status bits by writing
1's to them.

Fixes: 4d94282afd95 ("lan743x: Add power management support")
Signed-off-by: Raju Lakkaraju <[email protected]>
Reviewed-by: Wojciech Drewek <[email protected]>
---
Change List:
------------
V3 -> V4:
- No change
V2 -> V3:
- No change
V1 -> V2:
- Repost - No change
V0 -> V1:
- Variable "data" change from "int" to "unsigned int"
drivers/net/ethernet/microchip/lan743x_main.c | 30 ++++++++++++++++---
drivers/net/ethernet/microchip/lan743x_main.h | 24 +++++++++++++++
2 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index 6be8a43c908a..6a40b961fafb 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -3575,7 +3575,7 @@ static void lan743x_pm_set_wol(struct lan743x_adapter *adapter)

/* clear wake settings */
pmtctl = lan743x_csr_read(adapter, PMT_CTL);
- pmtctl |= PMT_CTL_WUPS_MASK_;
+ pmtctl |= PMT_CTL_WUPS_MASK_ | PMT_CTL_RES_CLR_WKP_MASK_;
pmtctl &= ~(PMT_CTL_GPIO_WAKEUP_EN_ | PMT_CTL_EEE_WAKEUP_EN_ |
PMT_CTL_WOL_EN_ | PMT_CTL_MAC_D3_RX_CLK_OVR_ |
PMT_CTL_RX_FCT_RFE_D3_CLK_OVR_ | PMT_CTL_ETH_PHY_WAKE_EN_);
@@ -3710,6 +3710,7 @@ static int lan743x_pm_resume(struct device *dev)
struct pci_dev *pdev = to_pci_dev(dev);
struct net_device *netdev = pci_get_drvdata(pdev);
struct lan743x_adapter *adapter = netdev_priv(netdev);
+ u32 data;
int ret;

pci_set_power_state(pdev, PCI_D0);
@@ -3728,6 +3729,30 @@ static int lan743x_pm_resume(struct device *dev)
return ret;
}

+ ret = lan743x_csr_read(adapter, MAC_WK_SRC);
+ netif_info(adapter, drv, adapter->netdev,
+ "Wakeup source : 0x%08X\n", ret);
+
+ /* Clear the wol configuration and status bits. Note that
+ * the status bits are "Write One to Clear (W1C)"
+ */
+ data = MAC_WUCSR_EEE_TX_WAKE_ | MAC_WUCSR_EEE_RX_WAKE_ |
+ MAC_WUCSR_RFE_WAKE_FR_ | MAC_WUCSR_PFDA_FR_ | MAC_WUCSR_WUFR_ |
+ MAC_WUCSR_MPR_ | MAC_WUCSR_BCAST_FR_;
+ lan743x_csr_write(adapter, MAC_WUCSR, data);
+
+ data = MAC_WUCSR2_NS_RCD_ | MAC_WUCSR2_ARP_RCD_ |
+ MAC_WUCSR2_IPV6_TCPSYN_RCD_ | MAC_WUCSR2_IPV4_TCPSYN_RCD_;
+ lan743x_csr_write(adapter, MAC_WUCSR2, data);
+
+ data = MAC_WK_SRC_ETH_PHY_WK_ | MAC_WK_SRC_IPV6_TCPSYN_RCD_WK_ |
+ MAC_WK_SRC_IPV4_TCPSYN_RCD_WK_ | MAC_WK_SRC_EEE_TX_WK_ |
+ MAC_WK_SRC_EEE_RX_WK_ | MAC_WK_SRC_RFE_FR_WK_ |
+ MAC_WK_SRC_PFDA_FR_WK_ | MAC_WK_SRC_MP_FR_WK_ |
+ MAC_WK_SRC_BCAST_FR_WK_ | MAC_WK_SRC_WU_FR_WK_ |
+ MAC_WK_SRC_WK_FR_SAVED_;
+ lan743x_csr_write(adapter, MAC_WK_SRC, data);
+
/* open netdev when netdev is at running state while resume.
* For instance, it is true when system wakesup after pm-suspend
* However, it is false when system wakes up after suspend GUI menu
@@ -3736,9 +3761,6 @@ static int lan743x_pm_resume(struct device *dev)
lan743x_netdev_open(netdev);

netif_device_attach(netdev);
- ret = lan743x_csr_read(adapter, MAC_WK_SRC);
- netif_info(adapter, drv, adapter->netdev,
- "Wakeup source : 0x%08X\n", ret);

return 0;
}
diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h
index 645bc048e52e..fac0f33d10b2 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.h
+++ b/drivers/net/ethernet/microchip/lan743x_main.h
@@ -61,6 +61,7 @@
#define PMT_CTL_RX_FCT_RFE_D3_CLK_OVR_ BIT(18)
#define PMT_CTL_GPIO_WAKEUP_EN_ BIT(15)
#define PMT_CTL_EEE_WAKEUP_EN_ BIT(13)
+#define PMT_CTL_RES_CLR_WKP_MASK_ GENMASK(9, 8)
#define PMT_CTL_READY_ BIT(7)
#define PMT_CTL_ETH_PHY_RST_ BIT(4)
#define PMT_CTL_WOL_EN_ BIT(3)
@@ -227,12 +228,31 @@
#define MAC_WUCSR (0x140)
#define MAC_MP_SO_EN_ BIT(21)
#define MAC_WUCSR_RFE_WAKE_EN_ BIT(14)
+#define MAC_WUCSR_EEE_TX_WAKE_ BIT(13)
+#define MAC_WUCSR_EEE_RX_WAKE_ BIT(11)
+#define MAC_WUCSR_RFE_WAKE_FR_ BIT(9)
+#define MAC_WUCSR_PFDA_FR_ BIT(7)
+#define MAC_WUCSR_WUFR_ BIT(6)
+#define MAC_WUCSR_MPR_ BIT(5)
+#define MAC_WUCSR_BCAST_FR_ BIT(4)
#define MAC_WUCSR_PFDA_EN_ BIT(3)
#define MAC_WUCSR_WAKE_EN_ BIT(2)
#define MAC_WUCSR_MPEN_ BIT(1)
#define MAC_WUCSR_BCST_EN_ BIT(0)

#define MAC_WK_SRC (0x144)
+#define MAC_WK_SRC_ETH_PHY_WK_ BIT(17)
+#define MAC_WK_SRC_IPV6_TCPSYN_RCD_WK_ BIT(16)
+#define MAC_WK_SRC_IPV4_TCPSYN_RCD_WK_ BIT(15)
+#define MAC_WK_SRC_EEE_TX_WK_ BIT(14)
+#define MAC_WK_SRC_EEE_RX_WK_ BIT(13)
+#define MAC_WK_SRC_RFE_FR_WK_ BIT(12)
+#define MAC_WK_SRC_PFDA_FR_WK_ BIT(11)
+#define MAC_WK_SRC_MP_FR_WK_ BIT(10)
+#define MAC_WK_SRC_BCAST_FR_WK_ BIT(9)
+#define MAC_WK_SRC_WU_FR_WK_ BIT(8)
+#define MAC_WK_SRC_WK_FR_SAVED_ BIT(7)
+
#define MAC_MP_SO_HI (0x148)
#define MAC_MP_SO_LO (0x14C)

@@ -295,6 +315,10 @@
#define RFE_INDX(index) (0x580 + (index << 2))

#define MAC_WUCSR2 (0x600)
+#define MAC_WUCSR2_NS_RCD_ BIT(7)
+#define MAC_WUCSR2_ARP_RCD_ BIT(6)
+#define MAC_WUCSR2_IPV6_TCPSYN_RCD_ BIT(5)
+#define MAC_WUCSR2_IPV4_TCPSYN_RCD_ BIT(4)

#define SGMII_ACC (0x720)
#define SGMII_ACC_SGMII_BZY_ BIT(31)
--
2.34.1


2024-06-12 17:29:57

by Raju Lakkaraju

[permalink] [raw]
Subject: [PATCH net V4 3/3] net: phy: mxl-gpy: Remove interrupt mask clearing from config_init

When the system resumes from sleep, the phy_init_hw() function invokes
config_init(), which clears all interrupt masks and causes wake events to be
lost in subsequent wake sequences. Remove interrupt mask clearing from
config_init() and preserve relevant masks in config_intr().

Fixes: 7d901a1e878a ("net: phy: add Maxlinear GPY115/21x/24x driver")
Signed-off-by: Raju Lakkaraju <[email protected]>
Reviewed-by: Wojciech Drewek <[email protected]>
---
Change List:
------------
V3 -> V4:
- No change
V0 -> V3:
- Address the https://lore.kernel.org/lkml/[email protected]/T/
review comments

drivers/net/phy/mxl-gpy.c | 58 +++++++++++++++++++++++++--------------
1 file changed, 38 insertions(+), 20 deletions(-)

diff --git a/drivers/net/phy/mxl-gpy.c b/drivers/net/phy/mxl-gpy.c
index b2d36a3a96f1..e5f8ac4b4604 100644
--- a/drivers/net/phy/mxl-gpy.c
+++ b/drivers/net/phy/mxl-gpy.c
@@ -107,6 +107,7 @@ struct gpy_priv {

u8 fw_major;
u8 fw_minor;
+ u32 wolopts;

/* It takes 3 seconds to fully switch out of loopback mode before
* it can safely re-enter loopback mode. Record the time when
@@ -221,6 +222,15 @@ static int gpy_hwmon_register(struct phy_device *phydev)
}
#endif

+static int gpy_ack_interrupt(struct phy_device *phydev)
+{
+ int ret;
+
+ /* Clear all pending interrupts */
+ ret = phy_read(phydev, PHY_ISTAT);
+ return ret < 0 ? ret : 0;
+}
+
static int gpy_mbox_read(struct phy_device *phydev, u32 addr)
{
struct gpy_priv *priv = phydev->priv;
@@ -262,16 +272,8 @@ static int gpy_mbox_read(struct phy_device *phydev, u32 addr)

static int gpy_config_init(struct phy_device *phydev)
{
- int ret;
-
- /* Mask all interrupts */
- ret = phy_write(phydev, PHY_IMASK, 0);
- if (ret)
- return ret;
-
- /* Clear all pending interrupts */
- ret = phy_read(phydev, PHY_ISTAT);
- return ret < 0 ? ret : 0;
+ /* Nothing to configure. Configuration Requirement Placeholder */
+ return 0;
}

static int gpy21x_config_init(struct phy_device *phydev)
@@ -627,11 +629,23 @@ static int gpy_read_status(struct phy_device *phydev)

static int gpy_config_intr(struct phy_device *phydev)
{
+ struct gpy_priv *priv = phydev->priv;
u16 mask = 0;
+ int ret;
+
+ ret = gpy_ack_interrupt(phydev);
+ if (ret)
+ return ret;

if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
mask = PHY_IMASK_MASK;

+ if (priv->wolopts & WAKE_MAGIC)
+ mask |= PHY_IMASK_WOL;
+
+ if (priv->wolopts & WAKE_PHY)
+ mask |= PHY_IMASK_LSTC;
+
return phy_write(phydev, PHY_IMASK, mask);
}

@@ -678,6 +692,7 @@ static int gpy_set_wol(struct phy_device *phydev,
struct ethtool_wolinfo *wol)
{
struct net_device *attach_dev = phydev->attached_dev;
+ struct gpy_priv *priv = phydev->priv;
int ret;

if (wol->wolopts & WAKE_MAGIC) {
@@ -725,6 +740,8 @@ static int gpy_set_wol(struct phy_device *phydev,
ret = phy_read(phydev, PHY_ISTAT);
if (ret < 0)
return ret;
+
+ priv->wolopts |= WAKE_MAGIC;
} else {
/* Disable magic packet matching */
ret = phy_clear_bits_mmd(phydev, MDIO_MMD_VEND2,
@@ -732,6 +749,13 @@ static int gpy_set_wol(struct phy_device *phydev,
WOL_EN);
if (ret < 0)
return ret;
+
+ /* Disable the WOL interrupt */
+ ret = phy_clear_bits(phydev, PHY_IMASK, PHY_IMASK_WOL);
+ if (ret < 0)
+ return ret;
+
+ priv->wolopts &= ~WAKE_MAGIC;
}

if (wol->wolopts & WAKE_PHY) {
@@ -748,9 +772,11 @@ static int gpy_set_wol(struct phy_device *phydev,
if (ret & (PHY_IMASK_MASK & ~PHY_IMASK_LSTC))
phy_trigger_machine(phydev);

+ priv->wolopts |= WAKE_PHY;
return 0;
}

+ priv->wolopts &= ~WAKE_PHY;
/* Disable the link state change interrupt */
return phy_clear_bits(phydev, PHY_IMASK, PHY_IMASK_LSTC);
}
@@ -758,18 +784,10 @@ static int gpy_set_wol(struct phy_device *phydev,
static void gpy_get_wol(struct phy_device *phydev,
struct ethtool_wolinfo *wol)
{
- int ret;
+ struct gpy_priv *priv = phydev->priv;

wol->supported = WAKE_MAGIC | WAKE_PHY;
- wol->wolopts = 0;
-
- ret = phy_read_mmd(phydev, MDIO_MMD_VEND2, VPSPEC2_WOL_CTL);
- if (ret & WOL_EN)
- wol->wolopts |= WAKE_MAGIC;
-
- ret = phy_read(phydev, PHY_IMASK);
- if (ret & PHY_IMASK_LSTC)
- wol->wolopts |= WAKE_PHY;
+ wol->wolopts = priv->wolopts;
}

static int gpy_loopback(struct phy_device *phydev, bool enable)
--
2.34.1


2024-06-13 07:15:59

by Horatiu Vultur

[permalink] [raw]
Subject: Re: [PATCH net V4 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately

The 06/12/2024 22:55, Raju Lakkaraju wrote:

Hi Raju,

> Prevent options not supported by the PHY from being requested to it by the MAC
> Whenever a WOL option is supported by both, the PHY is given priority
> since that usually leads to better power savings.
>
> Fixes: e9e13b6adc338 ("lan743x: fix for potential NULL pointer dereference with bare card")

I am not sure if you run checkpatch.pl, but this gives you a warning.
The sha has too many chars.

> Signed-off-by: Raju Lakkaraju <[email protected]>
> Reviewed-by: Wojciech Drewek <[email protected]>
> Reported-by: kernel test robot <[email protected]>
> Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

I still don't think you should add the 'Reported-by' and 'Closes' tags
here because you introduced the issue in first V3 of this patch series.
Because the intel robot says: "If you fix the issue in a separate
patch/commit (i.e. not just a new version of the same patch/commit),
kindly add following tags".

--
/Horatiu

2024-06-13 07:44:57

by Russell King (Oracle)

[permalink] [raw]
Subject: Re: [PATCH net V4 1/3] net: lan743x: disable WOL upon resume to restore full data path operation

On Wed, Jun 12, 2024 at 10:55:37PM +0530, Raju Lakkaraju wrote:
> @@ -3728,6 +3729,30 @@ static int lan743x_pm_resume(struct device *dev)
> return ret;
> }
>
> + ret = lan743x_csr_read(adapter, MAC_WK_SRC);
> + netif_info(adapter, drv, adapter->netdev,
> + "Wakeup source : 0x%08X\n", ret);

Does this need to be printed at info level, or is it a debug message?

Thanks.

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

2024-06-14 04:30:38

by Raju Lakkaraju

[permalink] [raw]
Subject: Re: [PATCH net V4 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately

Hi Horatiu,

The 06/13/2024 09:15, Horatiu Vultur wrote:
> The 06/12/2024 22:55, Raju Lakkaraju wrote:
>
> Hi Raju,
>
> > Prevent options not supported by the PHY from being requested to it by the MAC
> > Whenever a WOL option is supported by both, the PHY is given priority
> > since that usually leads to better power savings.
> >
> > Fixes: e9e13b6adc338 ("lan743x: fix for potential NULL pointer dereference with bare card")
>
> I am not sure if you run checkpatch.pl, but this gives you a warning.

I ran the checkpatch.pl on individual files and not on patches.

> The sha has too many chars.

Yes. instead of 12 chars, paste the 13 chars. I will fix this issue in next
version of patch series.

>
> > Signed-off-by: Raju Lakkaraju <[email protected]>
> > Reviewed-by: Wojciech Drewek <[email protected]>
> > Reported-by: kernel test robot <[email protected]>
> > Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> I still don't think you should add the 'Reported-by' and 'Closes' tags
> here because you introduced the issue in first V3 of this patch series.
> Because the intel robot says: "If you fix the issue in a separate
> patch/commit (i.e. not just a new version of the same patch/commit),
> kindly add following tags".
>

Ok. I will remove.
> --
> /Horatiu

--
Thanks,
Raju

2024-06-14 04:34:29

by Raju Lakkaraju

[permalink] [raw]
Subject: Re: [PATCH net V4 1/3] net: lan743x: disable WOL upon resume to restore full data path operation

Hi Russell King,

The 06/13/2024 08:44, Russell King (Oracle) wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>
> On Wed, Jun 12, 2024 at 10:55:37PM +0530, Raju Lakkaraju wrote:
> > @@ -3728,6 +3729,30 @@ static int lan743x_pm_resume(struct device *dev)
> > return ret;
> > }
> >
> > + ret = lan743x_csr_read(adapter, MAC_WK_SRC);
> > + netif_info(adapter, drv, adapter->netdev,
> > + "Wakeup source : 0x%08X\n", ret);
>
> Does this need to be printed at info level, or is it a debug message?

Print at info level helps the tester/sqa team to identify the root cause of
the wake and confirm the test cases.
In general, tester does not enable debug level messages for testing.

Still, if we need to change from info to debug, i can change.
Please let me know.

>
> Thanks.
>
> --
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

--
Thanks,
Raju

2024-06-14 14:18:45

by Andrew Lunn

[permalink] [raw]
Subject: Re: [PATCH net V4 1/3] net: lan743x: disable WOL upon resume to restore full data path operation

On Fri, Jun 14, 2024 at 10:00:58AM +0530, Raju Lakkaraju wrote:
> Hi Russell King,
>
> The 06/13/2024 08:44, Russell King (Oracle) wrote:
> > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> >
> > On Wed, Jun 12, 2024 at 10:55:37PM +0530, Raju Lakkaraju wrote:
> > > @@ -3728,6 +3729,30 @@ static int lan743x_pm_resume(struct device *dev)
> > > return ret;
> > > }
> > >
> > > + ret = lan743x_csr_read(adapter, MAC_WK_SRC);
> > > + netif_info(adapter, drv, adapter->netdev,
> > > + "Wakeup source : 0x%08X\n", ret);
> >
> > Does this need to be printed at info level, or is it a debug message?
>
> Print at info level helps the tester/sqa team to identify the root cause of
> the wake and confirm the test cases.
> In general, tester does not enable debug level messages for testing.
>
> Still, if we need to change from info to debug, i can change.
> Please let me know.

We are not really writing a kernel for the tester/SQA team, but the
end users. Do the end users find this log message useful? Can they
decode some hex value into something meaningful?

I'm surprised the test case cares what caused the wakeup. So long as
it does wake up, does it really matter what the source was?

Andrew

2024-06-14 17:42:08

by Raju Lakkaraju

[permalink] [raw]
Subject: Re: [PATCH net V4 1/3] net: lan743x: disable WOL upon resume to restore full data path operation

Hi Andrew,

The 06/14/2024 16:17, Andrew Lunn wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>
> On Fri, Jun 14, 2024 at 10:00:58AM +0530, Raju Lakkaraju wrote:
> > Hi Russell King,
> >
> > The 06/13/2024 08:44, Russell King (Oracle) wrote:
> > > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> > >
> > > On Wed, Jun 12, 2024 at 10:55:37PM +0530, Raju Lakkaraju wrote:
> > > > @@ -3728,6 +3729,30 @@ static int lan743x_pm_resume(struct device *dev)
> > > > return ret;
> > > > }
> > > >
> > > > + ret = lan743x_csr_read(adapter, MAC_WK_SRC);
> > > > + netif_info(adapter, drv, adapter->netdev,
> > > > + "Wakeup source : 0x%08X\n", ret);
> > >
> > > Does this need to be printed at info level, or is it a debug message?
> >
> > Print at info level helps the tester/sqa team to identify the root cause of
> > the wake and confirm the test cases.
> > In general, tester does not enable debug level messages for testing.
> >
> > Still, if we need to change from info to debug, i can change.
> > Please let me know.
>
> We are not really writing a kernel for the tester/SQA team, but the
> end users. Do the end users find this log message useful? Can they
> decode some hex value into something meaningful?
>

Yes. You are correct. We are writing code for end users.

But, our chip support different wake options which are testing by SQA team to
make sure all the options should work as per specifications and the output
respective input.
This message is not new and move from bottom.

As per Linux community review comment, I will move from "info" to "debug" in my
next patch series.

> I'm surprised the test case cares what caused the wakeup. So long as
> it does wake up, does it really matter what the source was?
>
> Andrew

--
Thanks,
Raju