stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: phy: nxp-c45-tja11xx: fix the PTP interrupt enabling/disabling
@ 2023-04-10 12:48 Radu Pirea (OSS)
  2023-04-13  3:44 ` Jakub Kicinski
  0 siblings, 1 reply; 4+ messages in thread
From: Radu Pirea (OSS) @ 2023-04-10 12:48 UTC (permalink / raw)
  To: andrew, hkallweit1, linux, davem, edumazet, kuba, pabeni
  Cc: netdev, linux-kernel, Radu Pirea (OSS), stable

.config_intr() handles only the link event interrupt and should also
disable/enable the PTP interrupt.

Even if the PTP irqs bit is toggled unconditionally, it is safe. This
interrupt acts as a global switch for all PTP irqs. By default, this bit
is set.

Fixes: 514def5dd339 ("phy: nxp-c45-tja11xx: add timestamping support")
CC: stable@vger.kernel.org # 5.15+
Signed-off-by: Radu Pirea (OSS) <radu-nicolae.pirea@oss.nxp.com>
---
 drivers/net/phy/nxp-c45-tja11xx.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/net/phy/nxp-c45-tja11xx.c b/drivers/net/phy/nxp-c45-tja11xx.c
index 5813b07242ce..4d7f4cb05f89 100644
--- a/drivers/net/phy/nxp-c45-tja11xx.c
+++ b/drivers/net/phy/nxp-c45-tja11xx.c
@@ -63,6 +63,9 @@
 #define VEND1_PORT_ABILITIES		0x8046
 #define PTP_ABILITY			BIT(3)
 
+#define VEND1_PORT_FUNC_IRQ_EN		0x807A
+#define PTP_IRQS			BIT(3)
+
 #define VEND1_PORT_INFRA_CONTROL	0xAC00
 #define PORT_INFRA_CONTROL_EN		BIT(14)
 
@@ -890,12 +893,15 @@ static int nxp_c45_start_op(struct phy_device *phydev)
 
 static int nxp_c45_config_intr(struct phy_device *phydev)
 {
-	if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
+	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
+		phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, PTP_IRQS, PTP_IRQS);
 		return phy_set_bits_mmd(phydev, MDIO_MMD_VEND1,
 					VEND1_PHY_IRQ_EN, PHY_IRQ_LINK_EVENT);
-	else
+	} else {
+		phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, PTP_IRQS, PTP_IRQS);
 		return phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1,
 					  VEND1_PHY_IRQ_EN, PHY_IRQ_LINK_EVENT);
+	}
 }
 
 static irqreturn_t nxp_c45_handle_interrupt(struct phy_device *phydev)
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net] net: phy: nxp-c45-tja11xx: fix the PTP interrupt enabling/disabling
  2023-04-10 12:48 [PATCH net] net: phy: nxp-c45-tja11xx: fix the PTP interrupt enabling/disabling Radu Pirea (OSS)
@ 2023-04-13  3:44 ` Jakub Kicinski
  2023-04-24  9:08   ` Radu Pirea (OSS)
  0 siblings, 1 reply; 4+ messages in thread
From: Jakub Kicinski @ 2023-04-13  3:44 UTC (permalink / raw)
  To: Radu Pirea (OSS)
  Cc: andrew, hkallweit1, linux, davem, edumazet, pabeni, netdev,
	linux-kernel, stable

On Mon, 10 Apr 2023 15:48:56 +0300 Radu Pirea (OSS) wrote:
> -	if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
> +	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
> +		phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, PTP_IRQS, PTP_IRQS);

Isn't the third argument supposed to be the address?
Am I missing something or this patch was no tested properly?

Also why ignore the return value?

>  		return phy_set_bits_mmd(phydev, MDIO_MMD_VEND1,
>  					VEND1_PHY_IRQ_EN, PHY_IRQ_LINK_EVENT);
> -	else
> +	} else {
> +		phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1, PTP_IRQS, PTP_IRQS);
>  		return phy_clear_bits_mmd(phydev, MDIO_MMD_VEND1,
>  					  VEND1_PHY_IRQ_EN, PHY_IRQ_LINK_EVENT);
> +	}

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net] net: phy: nxp-c45-tja11xx: fix the PTP interrupt enabling/disabling
  2023-04-13  3:44 ` Jakub Kicinski
@ 2023-04-24  9:08   ` Radu Pirea (OSS)
  2023-04-24 11:56     ` Andrew Lunn
  0 siblings, 1 reply; 4+ messages in thread
From: Radu Pirea (OSS) @ 2023-04-24  9:08 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: andrew, hkallweit1, linux, davem, edumazet, pabeni, netdev,
	linux-kernel, stable

On 13.04.2023 06:44, Jakub Kicinski wrote:
> On Mon, 10 Apr 2023 15:48:56 +0300 Radu Pirea (OSS) wrote:
>> -	if (phydev->interrupts == PHY_INTERRUPT_ENABLED)
>> +	if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
>> +		phy_set_bits_mmd(phydev, MDIO_MMD_VEND1, PTP_IRQS, PTP_IRQS);
> 
> Isn't the third argument supposed to be the address?
> Am I missing something or this patch was no tested properly?
Yes, you are right. Thank you for this catch. I discovered this fix 
based on a driver code review and it did not trigger any issues. I just 
wanted to be sure if the PTP irqs are left in an inconsistent state, 
they are disabled from the kill switch.

I will send a v2.

> 
> Also why ignore the return value?
This register might not be present on every PHY, that's why the return 
value is ignored.

Radu P.

[...]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH net] net: phy: nxp-c45-tja11xx: fix the PTP interrupt enabling/disabling
  2023-04-24  9:08   ` Radu Pirea (OSS)
@ 2023-04-24 11:56     ` Andrew Lunn
  0 siblings, 0 replies; 4+ messages in thread
From: Andrew Lunn @ 2023-04-24 11:56 UTC (permalink / raw)
  To: Radu Pirea (OSS)
  Cc: Jakub Kicinski, hkallweit1, linux, davem, edumazet, pabeni,
	netdev, linux-kernel, stable

> > Also why ignore the return value?
> This register might not be present on every PHY, that's why the return value
> is ignored.

Please document that, otherwise you might see people add code to check
the return value. Or better, still, differentiate between the
different versions, and only touch it when it does exist.

	  Andtrew

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-04-24 11:56 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-10 12:48 [PATCH net] net: phy: nxp-c45-tja11xx: fix the PTP interrupt enabling/disabling Radu Pirea (OSS)
2023-04-13  3:44 ` Jakub Kicinski
2023-04-24  9:08   ` Radu Pirea (OSS)
2023-04-24 11:56     ` Andrew Lunn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).