From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 96955C282CA for ; Wed, 13 Feb 2019 11:28:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 473FD2070D for ; Wed, 13 Feb 2019 11:28:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="UZyR3Tny" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403915AbfBML2z (ORCPT ); Wed, 13 Feb 2019 06:28:55 -0500 Received: from mail-eopbgr150041.outbound.protection.outlook.com ([40.107.15.41]:45056 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727977AbfBML2w (ORCPT ); Wed, 13 Feb 2019 06:28:52 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6fmqHGcOlo2G71vDAPwhET6Qc1YyS9n/0Ub7qL3aprg=; b=UZyR3TnyAHTmVY3Afgvz/LzzkEBwRd1+70Xsi22YcldemFqudB9xYUwYZooFw4zJPuXDBOamKj6WXvvJQpvTcBpX9YfK+It37SvXj4KBtMD7WjG1mQ/wYLN0vlTn+GxqQ70IhyMoCG2Q5nX5ePoYtDiMAzZ5qG3pTLfrV1S0XR8= Received: from AM6PR05MB5240.eurprd05.prod.outlook.com (20.177.196.214) by AM6PR05MB6230.eurprd05.prod.outlook.com (20.178.95.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1622.16; Wed, 13 Feb 2019 11:28:48 +0000 Received: from AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::3542:889c:3a85:3866]) by AM6PR05MB5240.eurprd05.prod.outlook.com ([fe80::3542:889c:3a85:3866%5]) with mapi id 15.20.1601.023; Wed, 13 Feb 2019 11:28:48 +0000 From: Ido Schimmel To: "netdev@vger.kernel.org" CC: "davem@davemloft.net" , Jiri Pirko , "andrew@lunn.ch" , mlxsw , Vadim Pasternak , Ido Schimmel Subject: [PATCH net-next 04/12] mlxsw: core: Add API for QSFP module temperature thresholds reading Thread-Topic: [PATCH net-next 04/12] mlxsw: core: Add API for QSFP module temperature thresholds reading Thread-Index: AQHUw49JaRl4raEC00OQgpcjYZHIuQ== Date: Wed, 13 Feb 2019 11:28:47 +0000 Message-ID: <20190213112814.32334-5-idosch@mellanox.com> References: <20190213112814.32334-1-idosch@mellanox.com> In-Reply-To: <20190213112814.32334-1-idosch@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: LNXP265CA0090.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:76::30) To AM6PR05MB5240.eurprd05.prod.outlook.com (2603:10a6:20b:64::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=idosch@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.20.1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 827c8948-baf3-4ab7-3e1e-08d691a66b99 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR05MB6230; x-ms-traffictypediagnostic: AM6PR05MB6230: x-microsoft-exchange-diagnostics: =?iso-8859-1?Q?1;AM6PR05MB6230;23:btonjkHRljLxwOLl2pOX1+FcPC2fgxiRqvCrH17?= =?iso-8859-1?Q?qAWAwazS7igNj8DKx3b5SVqPjUhrMpE/GxAZKFKFH9GuRcbE1erEIf1uaJ?= =?iso-8859-1?Q?Hni7+hI23QtEGSUxE3y1GnVdb80kH3mWxfPwMo1jPhIOdoe2YilEWU2TYF?= =?iso-8859-1?Q?EWuH/disP2ohznCzI8r0Gt59lX9B5sikfO91Xo8kuMVRzsS6Ere5KQEvN1?= =?iso-8859-1?Q?kpKKgaz/JXllHuyNYSBZqCZA2VeO4RVGin2OhUXcgsUMfX59ndLSZ7H8Jl?= =?iso-8859-1?Q?9eGWM9RtyvkDSYKc68/vEjnliA/LBAaK7igZoyg11m8AP6eowWmyP4NnMZ?= =?iso-8859-1?Q?zuKCkqXCyQcL9aYzxA3t34mJOLkF+LJsv8chEf3SIY9X6N8paIQSeY23Bi?= =?iso-8859-1?Q?IEqRVoyEBSW+UlnZhAr57bFbBV9iKTtm6HY/P+UZYIAszULVmlOPn+uv5x?= =?iso-8859-1?Q?MaagBRM86735X6cg/mbQjP1uqM8B1xez7aUZV/Vm+aPQ/g5nBvzyI/kMyE?= =?iso-8859-1?Q?sxhqYJB6N5XvXSBojrqOCrYXL0kM8gSn0dpkr8LyVBZxMEb9cUv3whmkBq?= =?iso-8859-1?Q?Ez59sNtu8Ggya73o0yQ8SmvNLAkUeMom0gw0UPPvKViLfB4JBKsHGa/ibx?= =?iso-8859-1?Q?mYtUyeYvPq8gXqKlbu5BI80k/xM6PUXlWjaRNmT/0J4moSNsOTINfrL74q?= =?iso-8859-1?Q?GRjJaAS5hx1LfORtkWeMQVcQr1m2gbVniYfNtMQC97oz4hw+rLYiQbbQe7?= =?iso-8859-1?Q?fWXEHjiSU2fzH/SC9KsbcgQfPWuD172NqG6iP6onIsn5mIoaPAVZ/YO0cI?= =?iso-8859-1?Q?SavXrq+Rg0mwZIMZAJLlnDQcWECnYg+IubI5CkrgufYfevk5iVgV7bOxrx?= =?iso-8859-1?Q?CUeKdaH+6kO91uu0MBzCEafpcJK0Sb5ZTPqJnxVJMf8WYlUku4W6C2npQD?= =?iso-8859-1?Q?5vO3Bs3AVCCUGRW0jRGDE1kDkYvnYVYHfVZQQKw5a4MwnnXaMqD7fjQ9Ol?= =?iso-8859-1?Q?MtUkYAGKlQfODphbX7r66WamR1zit7uY2wdql5cfWj1LTwyhEZ+WdwoAOx?= =?iso-8859-1?Q?RyPKXRZbafmrBBFx+hJy2L3yrk6EQpfxsAKUdhbDJHdo2Js0cGEbWSvvLB?= =?iso-8859-1?Q?up4zEYwVsH/Qq/xnmtsWtAZiFM5I0VsoscdYuWSx0OjyywLW0fwCJ66XGq?= =?iso-8859-1?Q?TBD4Edc6WsbcnRj/ph8YQmVnQJeELhItBv10YREQVvEk3+xD4QySG0Mnvm?= =?iso-8859-1?Q?FM2nH4On1D0s5BzJ7SdNSZ1gVqKuIJv5OVNlEknUjiwdOnY9+6pX61dp07?= =?iso-8859-1?Q?US6cW8FzXSc0KvphFqw3oQkuG0t5ARJI9xSV9XtoifclLwOlg/uhqA7h6F?= =?iso-8859-1?Q?PuKZtcig=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 094700CA91 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(366004)(396003)(346002)(136003)(39860400002)(189003)(199004)(26005)(186003)(386003)(6506007)(2616005)(476003)(446003)(11346002)(102836004)(486006)(2906002)(8936002)(106356001)(105586002)(71200400001)(2351001)(71190400001)(50226002)(97736004)(81166006)(8676002)(1730700003)(81156014)(6916009)(305945005)(7736002)(14454004)(478600001)(6116002)(3846002)(86362001)(2501003)(66066001)(14444005)(256004)(68736007)(107886003)(53936002)(6436002)(6512007)(1076003)(36756003)(25786009)(54906003)(316002)(6486002)(4326008)(5640700003)(99286004)(76176011)(52116002);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR05MB6230;H:AM6PR05MB5240.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 5FEkqaP79n05KcjzaO2qi3gcTMfizWx+JB68NrV+q4fsVa12SB0O3p84AJhT74ko5FV0zP6d61v55fnmI3RPVidEwVHS3SzXHjD8tW5d0/qXZ9Uyxw3ZFU3RjHPVHXPUo7wSEfzptFw3R2B9kSwFKvZ9QfvQTfsxzjSZ7hEeXrR+syZxEtNVPmRD6JQs7Ku92oqXnsoUx1ez9UdCcwSVawtSNCrfsP6btyNFSDqHokas0UEgwBqBYovzHDUC2C+XAXs3wCsAyX6UxuhMrQZx8oom1GNLN7b/b1Urun1f58NMOIOHr3EOWrba0y5qKFlI8ziiS5DQnd1Ihbzs9kq0adLVOtYND9e/uflBbOm5AC/T94Gcraul0k395zGMPiPOgNtVJ4nLPVyat9oPDdHDdADbpJlFOMxX3qkjpQMYF4w= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 827c8948-baf3-4ab7-3e1e-08d691a66b99 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Feb 2019 11:28:46.8893 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB6230 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vadim Pasternak Add new API to read QSFP module's temperature thresholds - warning and critical. New internal API reads the temperature thresholds from the modules, which are equipped with the thermal sensor. These thresholds will be exposed via hwmon subsystem. Signed-off-by: Vadim Pasternak Reviewed-by: Jiri Pirko Signed-off-by: Ido Schimmel --- drivers/net/ethernet/mellanox/mlxsw/Makefile | 2 +- .../net/ethernet/mellanox/mlxsw/core_env.c | 117 ++++++++++++++++++ .../net/ethernet/mellanox/mlxsw/core_env.h | 10 ++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/mellanox/mlxsw/core_env.c create mode 100644 drivers/net/ethernet/mellanox/mlxsw/core_env.h diff --git a/drivers/net/ethernet/mellanox/mlxsw/Makefile b/drivers/net/eth= ernet/mellanox/mlxsw/Makefile index bbf45f10c208..a01d15546e37 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/Makefile +++ b/drivers/net/ethernet/mellanox/mlxsw/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_MLXSW_CORE) +=3D mlxsw_core.o mlxsw_core-objs :=3D core.o core_acl_flex_keys.o \ - core_acl_flex_actions.o + core_acl_flex_actions.o core_env.o mlxsw_core-$(CONFIG_MLXSW_CORE_HWMON) +=3D core_hwmon.o mlxsw_core-$(CONFIG_MLXSW_CORE_THERMAL) +=3D core_thermal.o obj-$(CONFIG_MLXSW_PCI) +=3D mlxsw_pci.o diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.c b/drivers/net/e= thernet/mellanox/mlxsw/core_env.c new file mode 100644 index 000000000000..160d6cd164f4 --- /dev/null +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.c @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 +/* Copyright (c) 2018 Mellanox Technologies. All rights reserved */ + +#include +#include + +#include "core.h" +#include "core_env.h" +#include "item.h" +#include "reg.h" + +static int mlxsw_env_validate_cable_ident(struct mlxsw_core *core, int id, + bool *qsfp) +{ + char eeprom_tmp[MLXSW_REG_MCIA_EEPROM_SIZE]; + char mcia_pl[MLXSW_REG_MCIA_LEN]; + u8 ident; + int err; + + mlxsw_reg_mcia_pack(mcia_pl, id, 0, MLXSW_REG_MCIA_PAGE0_LO_OFF, 0, 1, + MLXSW_REG_MCIA_I2C_ADDR_LOW); + err =3D mlxsw_reg_query(core, MLXSW_REG(mcia), mcia_pl); + if (err) + return err; + mlxsw_reg_mcia_eeprom_memcpy_from(mcia_pl, eeprom_tmp); + ident =3D eeprom_tmp[0]; + switch (ident) { + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_SFP: + *qsfp =3D false; + break; + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP: /* fall-through */ + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP_PLUS: /* fall-through */ + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP28: /* fall-through */ + case MLXSW_REG_MCIA_EEPROM_MODULE_INFO_ID_QSFP_DD: + *qsfp =3D true; + break; + default: + return -EINVAL; + } + + return 0; +} + +int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int modu= le, + int off, int *temp) +{ + char eeprom_tmp[MLXSW_REG_MCIA_EEPROM_SIZE]; + union { + u8 buf[MLXSW_REG_MCIA_TH_ITEM_SIZE]; + u16 temp; + } temp_thresh; + char mcia_pl[MLXSW_REG_MCIA_LEN] =3D {0}; + char mtbr_pl[MLXSW_REG_MTBR_LEN] =3D {0}; + u16 module_temp; + bool qsfp; + int err; + + mlxsw_reg_mtbr_pack(mtbr_pl, MLXSW_REG_MTBR_BASE_MODULE_INDEX + module, + 1); + err =3D mlxsw_reg_query(core, MLXSW_REG(mtbr), mtbr_pl); + if (err) + return err; + + /* Don't read temperature thresholds for module with no valid info. */ + mlxsw_reg_mtbr_temp_unpack(mtbr_pl, 0, &module_temp, NULL); + switch (module_temp) { + case MLXSW_REG_MTBR_BAD_SENS_INFO: /* fall-through */ + case MLXSW_REG_MTBR_NO_CONN: /* fall-through */ + case MLXSW_REG_MTBR_NO_TEMP_SENS: /* fall-through */ + case MLXSW_REG_MTBR_INDEX_NA: + *temp =3D 0; + return 0; + default: + /* Do not consider thresholds for zero temperature. */ + if (!MLXSW_REG_MTMP_TEMP_TO_MC(module_temp)) { + *temp =3D 0; + return 0; + } + break; + } + + /* Read Free Side Device Temperature Thresholds from page 03h + * (MSB at lower byte address). + * Bytes: + * 128-129 - Temp High Alarm (SFP_TEMP_HIGH_ALARM); + * 130-131 - Temp Low Alarm (SFP_TEMP_LOW_ALARM); + * 132-133 - Temp High Warning (SFP_TEMP_HIGH_WARN); + * 134-135 - Temp Low Warning (SFP_TEMP_LOW_WARN); + */ + + /* Validate module identifier value. */ + err =3D mlxsw_env_validate_cable_ident(core, module, &qsfp); + if (err) + return err; + + if (qsfp) + mlxsw_reg_mcia_pack(mcia_pl, module, 0, + MLXSW_REG_MCIA_TH_PAGE_NUM, + MLXSW_REG_MCIA_TH_PAGE_OFF + off, + MLXSW_REG_MCIA_TH_ITEM_SIZE, + MLXSW_REG_MCIA_I2C_ADDR_LOW); + else + mlxsw_reg_mcia_pack(mcia_pl, module, 0, + MLXSW_REG_MCIA_PAGE0_LO, + off, MLXSW_REG_MCIA_TH_ITEM_SIZE, + MLXSW_REG_MCIA_I2C_ADDR_HIGH); + + err =3D mlxsw_reg_query(core, MLXSW_REG(mcia), mcia_pl); + if (err) + return err; + + mlxsw_reg_mcia_eeprom_memcpy_from(mcia_pl, eeprom_tmp); + memcpy(temp_thresh.buf, eeprom_tmp, MLXSW_REG_MCIA_TH_ITEM_SIZE); + *temp =3D temp_thresh.temp * 1000; + + return 0; +} diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_env.h b/drivers/net/e= thernet/mellanox/mlxsw/core_env.h new file mode 100644 index 000000000000..6dbdf63f3ee1 --- /dev/null +++ b/drivers/net/ethernet/mellanox/mlxsw/core_env.h @@ -0,0 +1,10 @@ +/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ +/* Copyright (c) 2018 Mellanox Technologies. All rights reserved */ + +#ifndef _MLXSW_CORE_ENV_H +#define _MLXSW_CORE_ENV_H + +int mlxsw_env_module_temp_thresholds_get(struct mlxsw_core *core, int modu= le, + int off, int *temp); + +#endif --=20 2.20.1