mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
net: phy: nxp-tja11xx: log critical health state
TJA1102 provides interrupt notification for the critical health states like overtemperature and undervoltage. The overtemperature bit is set if package temperature is beyond 155C°. This functionality was tested by heating the package up to 200C° The undervoltage bit is set if supply voltage drops beyond some critical threshold. Currently not tested. In a typical use case, both of this events should be logged and stored (or send to some remote system) for further investigations. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
445af0d259
commit
e0ba60509d
1 changed files with 11 additions and 2 deletions
|
@ -47,12 +47,14 @@
|
||||||
#define MII_INTSRC_LINK_FAIL BIT(10)
|
#define MII_INTSRC_LINK_FAIL BIT(10)
|
||||||
#define MII_INTSRC_LINK_UP BIT(9)
|
#define MII_INTSRC_LINK_UP BIT(9)
|
||||||
#define MII_INTSRC_MASK (MII_INTSRC_LINK_FAIL | MII_INTSRC_LINK_UP)
|
#define MII_INTSRC_MASK (MII_INTSRC_LINK_FAIL | MII_INTSRC_LINK_UP)
|
||||||
#define MII_INTSRC_TEMP_ERR BIT(1)
|
|
||||||
#define MII_INTSRC_UV_ERR BIT(3)
|
#define MII_INTSRC_UV_ERR BIT(3)
|
||||||
|
#define MII_INTSRC_TEMP_ERR BIT(1)
|
||||||
|
|
||||||
#define MII_INTEN 22
|
#define MII_INTEN 22
|
||||||
#define MII_INTEN_LINK_FAIL BIT(10)
|
#define MII_INTEN_LINK_FAIL BIT(10)
|
||||||
#define MII_INTEN_LINK_UP BIT(9)
|
#define MII_INTEN_LINK_UP BIT(9)
|
||||||
|
#define MII_INTEN_UV_ERR BIT(3)
|
||||||
|
#define MII_INTEN_TEMP_ERR BIT(1)
|
||||||
|
|
||||||
#define MII_COMMSTAT 23
|
#define MII_COMMSTAT 23
|
||||||
#define MII_COMMSTAT_LINK_UP BIT(15)
|
#define MII_COMMSTAT_LINK_UP BIT(15)
|
||||||
|
@ -607,7 +609,8 @@ static int tja11xx_config_intr(struct phy_device *phydev)
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
value = MII_INTEN_LINK_FAIL | MII_INTEN_LINK_UP;
|
value = MII_INTEN_LINK_FAIL | MII_INTEN_LINK_UP |
|
||||||
|
MII_INTEN_UV_ERR | MII_INTEN_TEMP_ERR;
|
||||||
err = phy_write(phydev, MII_INTEN, value);
|
err = phy_write(phydev, MII_INTEN, value);
|
||||||
} else {
|
} else {
|
||||||
err = phy_write(phydev, MII_INTEN, value);
|
err = phy_write(phydev, MII_INTEN, value);
|
||||||
|
@ -622,6 +625,7 @@ static int tja11xx_config_intr(struct phy_device *phydev)
|
||||||
|
|
||||||
static irqreturn_t tja11xx_handle_interrupt(struct phy_device *phydev)
|
static irqreturn_t tja11xx_handle_interrupt(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
|
struct device *dev = &phydev->mdio.dev;
|
||||||
int irq_status;
|
int irq_status;
|
||||||
|
|
||||||
irq_status = phy_read(phydev, MII_INTSRC);
|
irq_status = phy_read(phydev, MII_INTSRC);
|
||||||
|
@ -630,6 +634,11 @@ static irqreturn_t tja11xx_handle_interrupt(struct phy_device *phydev)
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (irq_status & MII_INTSRC_TEMP_ERR)
|
||||||
|
dev_warn(dev, "Overtemperature error detected (temp > 155C°).\n");
|
||||||
|
if (irq_status & MII_INTSRC_UV_ERR)
|
||||||
|
dev_warn(dev, "Undervoltage error detected.\n");
|
||||||
|
|
||||||
if (!(irq_status & MII_INTSRC_MASK))
|
if (!(irq_status & MII_INTSRC_MASK))
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue