Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp3603306pxt; Tue, 10 Aug 2021 07:18:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxy23ykIZQWeEhzsccWtyM2smrVVZ7IdM/b4dxU8zJfZWTZ5USB2+kfutwFDtZRqR904yS1 X-Received: by 2002:a05:6402:1d0d:: with SMTP id dg13mr5283737edb.312.1628605083259; Tue, 10 Aug 2021 07:18:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628605083; cv=none; d=google.com; s=arc-20160816; b=YzrBIPEltzI1ar3reyNU3Upa0/f3r9NljS2MGlnFeSiy3BuBOV37wCERAensHdwI9B hbQ5cVx80M/FLiULDOAMhgrTvgNTHEwz6BsuJ+w1WSHG+4ML9+7KlDEgw0VG2uywG8XU z2YmHIuLj408f0DiME6V6qDlVMyFh/mrUmF3lvI8/FCjURo/1vLFKr7oN869PRy9ectu dtHlgtvL25gZOa/OWtisZmWBJ3Xa/IqxaekwqeDJ+SqhTKR4nPURgt2zBwJmtkJkxcZY IDrIwOaxVd8Ayp7DkfovXf3vrlnsjvjVe9rgCchtmzlYNiHBVeilfrFcoNo2js/sensJ XH9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=Q6M28UGKmSHstHeDWpvKPz+5gDQq7Cahfn8liehTUGA=; b=vad3oeRVtcZXsJRq9BVT06N/E9hOPqX7D6U2apiE6wxGmxwi/aFjJTAV4q6XaKKKi3 zKHSkFfB5sYWnJx8/TJdsr+ykNTsmiBI88ZmjKkrJwuJvyN4U1e/TJefVX1si709XVGT E5NACM7sZE28CAvSHeYKLKGFwvYzpDCqQJ4EkXRHFPDs+spvi0lIJDIvB2wKYtmQ9L+7 3Kv1799PdgOzVkDq1q0VVSLLaVbdGIITMNM44gLeoPUsoZ8AwXVdHaT0dOuvDQfcMWZ7 9KehiJmwquKomxvffkA9ZfGtBi6OeoEE/n/kUUfKltK783eu3hLpLNHO+qBrPBsxl09V tv5g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id aq27si413528ejc.270.2021.08.10.07.17.35; Tue, 10 Aug 2021 07:18:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240972AbhHJM45 (ORCPT + 99 others); Tue, 10 Aug 2021 08:56:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41982 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240971AbhHJM44 (ORCPT ); Tue, 10 Aug 2021 08:56:56 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 587FBC0613D3 for ; Tue, 10 Aug 2021 05:56:34 -0700 (PDT) Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mDRIs-0004SR-8w; Tue, 10 Aug 2021 14:56:22 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1mDRIp-0005Hh-Qu; Tue, 10 Aug 2021 14:56:19 +0200 From: Oleksij Rempel To: Andrew Lunn , Heiner Kallweit , "David S. Miller" , Jakub Kicinski , Jean Delvare , Guenter Roeck Cc: Oleksij Rempel , Pengutronix Kernel Team , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Marek Vasut , David Jander , linux-hwmon@vger.kernel.org Subject: [PATCH net-next v1] net: phy: nxp-tja11xx: log critical health state Date: Tue, 10 Aug 2021 14:56:18 +0200 Message-Id: <20210810125618.20255-1-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. To make testing and troubleshooting more easier, other bits are exported over the ethtool phy stats interface: - level of overtemperature. There is no access to thermal sensor. - power supply line where undervoltage was detected Signed-off-by: Oleksij Rempel --- drivers/net/phy/nxp-tja11xx.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/nxp-tja11xx.c b/drivers/net/phy/nxp-tja11xx.c index afd7afa1f498..4c37b427a53b 100644 --- a/drivers/net/phy/nxp-tja11xx.c +++ b/drivers/net/phy/nxp-tja11xx.c @@ -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) @@ -89,6 +91,12 @@ static struct tja11xx_phy_stats tja11xx_hw_stats[] = { { "phy_polarity_detect", 25, 6, BIT(6) }, { "phy_open_detect", 25, 7, BIT(7) }, { "phy_short_detect", 25, 8, BIT(8) }, + { "phy_temp_warn (temp > 155C°)", 25, 9, BIT(9) }, + { "phy_temp_high (temp > 180C°)", 25, 10, BIT(10) }, + { "phy_uv_vddio", 25, 11, BIT(11) }, + { "phy_uv_vddd_1v8", 25, 13, BIT(13) }, + { "phy_uv_vdda_3v3", 25, 14, BIT(14) }, + { "phy_uv_vddd_3v3", 25, 15, BIT(15) }, { "phy_rem_rcvr_count", 26, 0, GENMASK(7, 0) }, { "phy_loc_rcvr_count", 26, 8, GENMASK(15, 8) }, }; @@ -607,7 +615,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 +631,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 +640,11 @@ static irqreturn_t tja11xx_handle_interrupt(struct phy_device *phydev) return IRQ_NONE; } + if (irq_status & MII_INTSRC_TEMP_ERR) + dev_err(dev, "Overtemperature error detected (temp > 155C°).\n"); + if (irq_status & MII_INTSRC_UV_ERR) + dev_err(dev, "Undervoltage error detected.\n"); + if (!(irq_status & MII_INTSRC_MASK)) return IRQ_NONE; -- 2.30.2