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
|
@ -47,12 +47,14 @@
|
|||
#define MII_INTSRC_LINK_FAIL BIT(10)
|
||||
#define MII_INTSRC_LINK_UP BIT(9)
|
||||
#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_TEMP_ERR BIT(1)
|
||||
|
||||
#define MII_INTEN 22
|
||||
#define MII_INTEN_LINK_FAIL BIT(10)
|
||||
#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_LINK_UP BIT(15)
|
||||
|
@ -607,7 +609,8 @@ static int tja11xx_config_intr(struct phy_device *phydev)
|
|||
if (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);
|
||||
} else {
|
||||
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)
|
||||
{
|
||||
struct device *dev = &phydev->mdio.dev;
|
||||
int irq_status;
|
||||
|
||||
irq_status = phy_read(phydev, MII_INTSRC);
|
||||
|
@ -630,6 +634,11 @@ static irqreturn_t tja11xx_handle_interrupt(struct phy_device *phydev)
|
|||
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))
|
||||
return IRQ_NONE;
|
||||
|
||||
|
|
Loading…
Reference in New Issue