From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70CFCC43217 for ; Thu, 29 Sep 2022 09:44:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235465AbiI2JoB (ORCPT ); Thu, 29 Sep 2022 05:44:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230133AbiI2Jnz (ORCPT ); Thu, 29 Sep 2022 05:43:55 -0400 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2129.outbound.protection.outlook.com [40.107.95.129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9B3FB7392C; Thu, 29 Sep 2022 02:43:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ykjy3UkyuYMLIlPmFj0gUHyPu58FSLzmiihViGX0gMxwlV++aWjJZ/tB9gDLlaRD8Hc8Q734mnI/a0xTeGhpX4aByJvyNDv7LjvI2i4itYYrK6PTZA4X90xMyUbR8WeYRNq6YjUwTyLBJkFw5J0hI5P/btHAYC4o2W1PQRy4Rdab1utGfftLffDGX5IQkldKtTiZl0L6Zr32Nfp8rrW+wUvZJP6pcrhZ03GODuej/76ajeCQXkkkQG1guH6fZavm+ozM+vaZ+CcdszIomtc8EVyHdUqd2JmVfevXKzTRzUUzl/bdlNpxD2uknowmNbPR1Imrx09ddBU/uhB5nr2IAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QZTN6I8nwhhpRYiGWF6W/BCptuQk22D4zJA/Pk2wrdU=; b=AwYQlpzAg3uKrlsZAA2jYtQB0W3gxcsOELh/CNenJlxnqjJBM0LsCZcSOuWaLUZWcxnqzsrEpKWfB7TSDIW/5Xv4G98uNByDO+pqwdhfVaH5UxTVvVSUebo53PbnsLlk4IiTSE8LIZN/1a1LhBBoRI62/JcH2FTbjhSZpeacLfPSDO9aNlCMlceSRvKQp5QH3PdRKbd+9Uc1MqAPO9rpqkov32ZWJyIzkOnMlULv/g3uMpK/oy4H2O5kxXrVMBzx+3YpshDPCfyQ4XtugkoyPQ0QmVKaxXx5QxOabUwbx+9kVvjSBnB/iJqFnzmgSXvO62DacnCPNNP2c+MVEzAN4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QZTN6I8nwhhpRYiGWF6W/BCptuQk22D4zJA/Pk2wrdU=; b=eHn6AisCQyYkg8cNPsuPfRHUPfopBuim97WqRWnhxTtxilI2GL7XCyLVh8WkAPraTeyB8GUDdSXL3paMFPDoUZC+Z90cH53mXSIV6DFXL1I3Q3eC5Uvz6XvJcN1X1C6ZtbY37AFIeaCX3qOKXrrO/5lovesSy4qaKb+JpGyrUOs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by BN8PR01MB5682.prod.exchangelabs.com (2603:10b6:408:be::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.26; Thu, 29 Sep 2022 09:43:50 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:43:50 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 1/9] hwmon: smpro: Add Ampere's Altra smpro-hwmon driver Date: Thu, 29 Sep 2022 16:43:13 +0700 Message-Id: <20220929094321.770125-2-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|BN8PR01MB5682:EE_ X-MS-Office365-Filtering-Correlation-Id: f6cab5ac-88cf-4ea7-96aa-08daa1ff1cae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Y4hMdXrUK126Zg/XL0uE/+CsFa1QIotnC26tpPhbRkiFHtnMeFLUBycTJa3a1UBneEtzqvv4Wr878+7jwXxfTTcp7tRmk8pXVgDVg5ttpXWXUvvzHrKLiE7N+uhASioIt10dUQDtZYkbyPWsCaJx2KOPtbJZZYW7kQCMBj6b5ca849nnFnvGvzt+tg3NJYp0gPj8rYDRVhSwPjZ7xRbm1EZJBNDcEGGVZP6DIt5AtKgkLRhDTP1Um+C8aoAQ42T4b4OQKePCV72fLvrCvRon4I91M8FaaE+BWlNgWoaFTeZL84PN9NRPpp8iuik2zNm7i7yY6FhU/ZW1CNFWqia3jrfS7DNDXqzALlvToIHChKBo09BNSUuOC8QdwehiDl/wSobhlUbScpjwg4yPsMxLPzTSc72B5+MW4NAq3P1i+sAMa2LLqcUU8vsf6t4KUm2l/GXhaxmM7WT8oImdSNUhu4rE33wHBJiPe66dFSEu62Ua7WiOZQHXmBfGBGpfUMfp5GKVw+QhuIIIpUyG1Z9BI9aGJHUrBKhs+Pvy9GwzFm2kelxsJd5kzpWZXcPkQCn6eLMp6Anu19NtmMKO/WC5OMHtEqZZsLjJQvao39/q83vSSwbchgFLcEF91isXtgVsSdMNh5LyLE3/4BOJtEmThg9Is1KJRMsVJglRH7K/DqTt1HAlB4kuhbORdrwZyJ8r55SIj0UudUs7hSp6gRlaSwnBGoe/4lQgbTbQuqBdc27XPbrB1qc7ZFkKvybMTMNd2zWmd9hQCLpDjs5LrPy99SmxN/ytIeDZoTLexhhR2pofDgZrEY9iz/rje5lu1IUVvtAaZ1oh3pquiiUhl1tS8w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39850400004)(366004)(396003)(376002)(346002)(136003)(451199015)(7416002)(30864003)(26005)(86362001)(6512007)(107886003)(110136005)(5660300002)(8936002)(66476007)(66556008)(8676002)(6666004)(41300700001)(83380400001)(4326008)(316002)(66946007)(2906002)(186003)(52116002)(1076003)(6506007)(2616005)(38350700002)(6486002)(38100700002)(921005)(478600001);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OKiml1iH+Lpk/5YKGs6KLyx3GKCbDB38GtFci1ApkU6HwyeYdDBhVaVfZ55t?= =?us-ascii?Q?t0lO2/nA0qrENEOK4wl7yGa4V+dC9DgosYxpqXhgi4aeaePf/6fIJV1z1ygE?= =?us-ascii?Q?Ccae0pWmiWVUJHbC53kIiFixkw++8k5b4D16b8wVu6LjoUnDxt2Tu7hyWovO?= =?us-ascii?Q?dzGkfeQlJhFpPLL0YMdykA+fdNibNaxkVL9grcPbbn8a1zMj4DNmxZxLEalx?= =?us-ascii?Q?mggpwzluN26n9TPt1C9OjhUQ2J+aI+izL150HajajLOPRQaRcB1sZop1+QG0?= =?us-ascii?Q?DhZBbzI1LKYs6psG3mR2vWztppLWndJvkWvYMgrxHXM8m5L/wgmPGq+/L3Tc?= =?us-ascii?Q?La6IIiC+VtsaA7j9wmxoGY6uD0kG5EucvqOhsxwPC5vkewfg71cUGeBYPQ84?= =?us-ascii?Q?R0zVXAWrmLEhRT/SGKMgGWScF0HLAdcw5KYmdMpGGmum0pQLMNF2mO+/D6i6?= =?us-ascii?Q?/YXSCDRM2G120torAGjDS59LJQ0kLsljl6IgCzXOLJR8zO+w63gtckqDWcUo?= =?us-ascii?Q?ezrhBLjWO/99AL/ryhfrr/IIlv0HXdACN5g5BbZEFl5xjkn3la9azMQOAwRe?= =?us-ascii?Q?D25EkeiZ7Dwdha4gQi7WEiF6gV9/i9lJ7Ejr799Im6igY4KFzwdLN9/8uLOQ?= =?us-ascii?Q?seHLedlgKRvWKFWc3kxlrv691LwK8o2qH5gW904DZLgorYvQGmLYWqvKlZys?= =?us-ascii?Q?Em6LACORs58z2HQZtVKiNqCStZjqV+/ikgYCXFLKQbZCqvxQ46B1Rldc+MrG?= =?us-ascii?Q?hyVrZBl8STRnaTvTSx1g7Nz6miHL7WsRyplc7FNNvNlZwyF4tzUfZT6FT1sT?= =?us-ascii?Q?ToLgGk4DwLBoUapk5z14/aj2UnKWbXvDR0YWuqgw8rJoF+tnv89GhwFqHEtZ?= =?us-ascii?Q?XPjNYCvbcsb8qcJWrHiUebsGwHRXe326hgslzsE4pHOVyaNNy7zoHRqZQC8V?= =?us-ascii?Q?dBGZwN0TCIz+9YIadnkJeEN42psP5B33yukBQwE60djWqOA6BKXBx89xdMwP?= =?us-ascii?Q?gvh6fPDnCbDPxbl+0u0r3Lm+h5jdVRJQuditSjgpxKB4F4tKWRcCQREHoB9F?= =?us-ascii?Q?798a/2/wkrS5PeAka2lXnXNsnMHpuB22MI+irqUJQiZmuzpMIHMA4VJGoJMs?= =?us-ascii?Q?zWpedUm/atdHEQfNjwq6VCfe/6Kr6rfeyxW8UYnWZBpVdU2zpFbvWrOYtTgc?= =?us-ascii?Q?QTW1CLQ4MTHj2UE5q4gu2r9cK1XrBFRzCciigWUJrnsOpT9c3dG1OfCo209p?= =?us-ascii?Q?nxz+QzgFsHdk3ucERQ6e/N/ym+KMmEUgvdh0mKhZwF+ypQVY9J6vxccijufU?= =?us-ascii?Q?ZVejQqBnlJk+malIljXMmlPK66dPwhCJ+N9sW5q3MODuvJMzbbC9JI0yY843?= =?us-ascii?Q?tuIQ3+1Qo0pp4yXqakeK67ma5459/MudfFCodmiPkBi29bFcVFplWPs3hfpO?= =?us-ascii?Q?Vrqy4cTkOw1sGSD5Oh+9Ee42yi596KtU3zzpn0ZZBNyXolPPWps0wVv68vTN?= =?us-ascii?Q?UNMEZUkPZ5CamZ0rmp1xxHDIRGnZMLOmRhPPH+UnR0mE2yAPDus0LYtzZ/Nt?= =?us-ascii?Q?hX19NlQG1OH4kMVcAg3/pR0HOAfUJiGZFkg4SoHhB5jpDdl8YiMeDCOaNH0H?= =?us-ascii?Q?sJaawVvLhQMzwpIwPPjy53U=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6cab5ac-88cf-4ea7-96aa-08daa1ff1cae X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:43:50.0344 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 7/8bkRGjOQi86ax6JZAOKSwrUc7dqRb/gNebZiV2NlSH9nkfK6/1NGxTvUJf8FN8OlE1pU1LeXA5YsDAFmN3F1aY2ZsnJOJvIED8NQof/o8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR01MB5682 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This commit adds support for Ampere SMpro hwmon driver. This driver supports accessing various CPU sensors provided by the SMpro co-processor including temperature, power, voltages, and current. Signed-off-by: Quan Nguyen Reviewed-by: Guenter Roeck --- Changes in v9: + Insert 'break;' to avoid fall-through [kernel test robot] + Update SPDX license [Greg] Changes in v8: + Masks reserved bit when read 10-bit power value [Quan] + Insert 'break;' to avoid fall-through [kernel test robot] Changes in v7: + Update GPL version [Quan] Changes in v6: + None Changes in v5: + Drop ManufacturerID checking when probe as it was checked during smpro-mfd probing [Quan] + Drop the use of register offset [Quan] + Removed the use of compatible string as it is instantiated by smpro-mfd driver [Quan] Changes in v4: + Returned regmap_read() error code [Guenter] Changes in v3: + Handled negative temperature value [Guenter] + Returned -ENODEV if Manufacturer ID is wrong [Guenter] + Refactored smpro_read_string() and smpro_temp_read() [Guenter] + Removed smpro_write() function [Guenter] + Added minor refactor changes [Quan] Changes in v2: + Removed "virtual" sensors [Guenter] + Reported SOC_TDP as "Socket TDP" using max attributes [Guenter] + Corrected return error code when host is turn off [Guenter] + Reported MEM HOT Threshold for all DIMMs as temp*_crit [Guenter] + Removed license info as SPDX-License-Identifier existed [Guenter] + Added is_visible() support [Guenter] + Used HWMON_CHANNEL_INFO() macro and LABEL attributes [Guenter] + Made is_valid_id() return boolean [Guenter] + Returned -EPROBE_DEFER when smpro reg inaccessible [Guenter] + Removed unnecessary error message when dev register fail [Guenter] + Removed Socket TDP sensor [Quan] + Included sensor type and channel in labels [Quan] + Refactorized code to fix checkpatch.pl --strict complaint [Quan] drivers/hwmon/Kconfig | 8 + drivers/hwmon/Makefile | 1 + drivers/hwmon/smpro-hwmon.c | 463 ++++++++++++++++++++++++++++++++++++ 3 files changed, 472 insertions(+) create mode 100644 drivers/hwmon/smpro-hwmon.c diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig index 7ac3daaf59ce..e7ec6af309c7 100644 --- a/drivers/hwmon/Kconfig +++ b/drivers/hwmon/Kconfig @@ -67,6 +67,14 @@ config SENSORS_ABITUGURU3 This driver can also be built as a module. If so, the module will be called abituguru3. =20 +config SENSORS_SMPRO + tristate "Ampere's Altra SMpro hardware monitoring driver" + depends on MFD_SMPRO + help + If you say yes here you get support for the thermal, voltage, + current and power sensors of Ampere's Altra processor family SoC + with SMpro co-processor. + config SENSORS_AD7314 tristate "Analog Devices AD7314 and compatibles" depends on SPI diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile index 11d076cad8a2..c5cd7e3a67ff 100644 --- a/drivers/hwmon/Makefile +++ b/drivers/hwmon/Makefile @@ -187,6 +187,7 @@ obj-$(CONFIG_SENSORS_SHT4x) +=3D sht4x.o obj-$(CONFIG_SENSORS_SHTC1) +=3D shtc1.o obj-$(CONFIG_SENSORS_SIS5595) +=3D sis5595.o obj-$(CONFIG_SENSORS_SMM665) +=3D smm665.o +obj-$(CONFIG_SENSORS_SMPRO) +=3D smpro-hwmon.o obj-$(CONFIG_SENSORS_SMSC47B397)+=3D smsc47b397.o obj-$(CONFIG_SENSORS_SMSC47M1) +=3D smsc47m1.o obj-$(CONFIG_SENSORS_SMSC47M192)+=3D smsc47m192.o diff --git a/drivers/hwmon/smpro-hwmon.c b/drivers/hwmon/smpro-hwmon.c new file mode 100644 index 000000000000..ee54e21c2c12 --- /dev/null +++ b/drivers/hwmon/smpro-hwmon.c @@ -0,0 +1,463 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Ampere Computing SoC's SMPro Hardware Monitoring Driver + * + * Copyright (c) 2022, Ampere Computing LLC + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Logical Power Sensor Registers */ +#define SOC_TEMP 0x10 +#define SOC_VRD_TEMP 0x11 +#define DIMM_VRD_TEMP 0x12 +#define CORE_VRD_TEMP 0x13 +#define CH0_DIMM_TEMP 0x14 +#define CH1_DIMM_TEMP 0x15 +#define CH2_DIMM_TEMP 0x16 +#define CH3_DIMM_TEMP 0x17 +#define CH4_DIMM_TEMP 0x18 +#define CH5_DIMM_TEMP 0x19 +#define CH6_DIMM_TEMP 0x1A +#define CH7_DIMM_TEMP 0x1B +#define RCA_VRD_TEMP 0x1C + +#define CORE_VRD_PWR 0x20 +#define SOC_PWR 0x21 +#define DIMM_VRD1_PWR 0x22 +#define DIMM_VRD2_PWR 0x23 +#define CORE_VRD_PWR_MW 0x26 +#define SOC_PWR_MW 0x27 +#define DIMM_VRD1_PWR_MW 0x28 +#define DIMM_VRD2_PWR_MW 0x29 +#define RCA_VRD_PWR 0x2A +#define RCA_VRD_PWR_MW 0x2B + +#define MEM_HOT_THRESHOLD 0x32 +#define SOC_VR_HOT_THRESHOLD 0x33 +#define CORE_VRD_VOLT 0x34 +#define SOC_VRD_VOLT 0x35 +#define DIMM_VRD1_VOLT 0x36 +#define DIMM_VRD2_VOLT 0x37 +#define RCA_VRD_VOLT 0x38 + +#define CORE_VRD_CURR 0x39 +#define SOC_VRD_CURR 0x3A +#define DIMM_VRD1_CURR 0x3B +#define DIMM_VRD2_CURR 0x3C +#define RCA_VRD_CURR 0x3D + +struct smpro_hwmon { + struct regmap *regmap; +}; + +struct smpro_sensor { + const u8 reg; + const u8 reg_ext; + const char *label; +}; + +static const struct smpro_sensor temperature[] =3D { + { + .reg =3D SOC_TEMP, + .label =3D "temp1 SoC" + }, + { + .reg =3D SOC_VRD_TEMP, + .reg_ext =3D SOC_VR_HOT_THRESHOLD, + .label =3D "temp2 SoC VRD" + }, + { + .reg =3D DIMM_VRD_TEMP, + .label =3D "temp3 DIMM VRD" + }, + { + .reg =3D CORE_VRD_TEMP, + .label =3D "temp4 CORE VRD" + }, + { + .reg =3D CH0_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp5 CH0 DIMM" + }, + { + .reg =3D CH1_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp6 CH1 DIMM" + }, + { + .reg =3D CH2_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp7 CH2 DIMM" + }, + { + .reg =3D CH3_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp8 CH3 DIMM" + }, + { + .reg =3D CH4_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp9 CH4 DIMM" + }, + { + .reg =3D CH5_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp10 CH5 DIMM" + }, + { + .reg =3D CH6_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp11 CH6 DIMM" + }, + { + .reg =3D CH7_DIMM_TEMP, + .reg_ext =3D MEM_HOT_THRESHOLD, + .label =3D "temp12 CH7 DIMM" + }, + { + .reg =3D RCA_VRD_TEMP, + .label =3D "temp13 RCA VRD" + }, +}; + +static const struct smpro_sensor voltage[] =3D { + { + .reg =3D CORE_VRD_VOLT, + .label =3D "vout0 CORE VRD" + }, + { + .reg =3D SOC_VRD_VOLT, + .label =3D "vout1 SoC VRD" + }, + { + .reg =3D DIMM_VRD1_VOLT, + .label =3D "vout2 DIMM VRD1" + }, + { + .reg =3D DIMM_VRD2_VOLT, + .label =3D "vout3 DIMM VRD2" + }, + { + .reg =3D RCA_VRD_VOLT, + .label =3D "vout4 RCA VRD" + }, +}; + +static const struct smpro_sensor curr_sensor[] =3D { + { + .reg =3D CORE_VRD_CURR, + .label =3D "iout1 CORE VRD" + }, + { + .reg =3D SOC_VRD_CURR, + .label =3D "iout2 SoC VRD" + }, + { + .reg =3D DIMM_VRD1_CURR, + .label =3D "iout3 DIMM VRD1" + }, + { + .reg =3D DIMM_VRD2_CURR, + .label =3D "iout4 DIMM VRD2" + }, + { + .reg =3D RCA_VRD_CURR, + .label =3D "iout5 RCA VRD" + }, +}; + +static const struct smpro_sensor power[] =3D { + { + .reg =3D CORE_VRD_PWR, + .reg_ext =3D CORE_VRD_PWR_MW, + .label =3D "power1 CORE VRD" + }, + { + .reg =3D SOC_PWR, + .reg_ext =3D SOC_PWR_MW, + .label =3D "power2 SoC" + }, + { + .reg =3D DIMM_VRD1_PWR, + .reg_ext =3D DIMM_VRD1_PWR_MW, + .label =3D "power3 DIMM VRD1" + }, + { + .reg =3D DIMM_VRD2_PWR, + .reg_ext =3D DIMM_VRD2_PWR_MW, + .label =3D "power4 DIMM VRD2" + }, + { + .reg =3D RCA_VRD_PWR, + .reg_ext =3D RCA_VRD_PWR_MW, + .label =3D "power5 RCA VRD" + }, +}; + +static int smpro_read_temp(struct device *dev, u32 attr, int channel, long= *val) +{ + struct smpro_hwmon *hwmon =3D dev_get_drvdata(dev); + unsigned int value; + int ret; + + switch (attr) { + case hwmon_temp_input: + ret =3D regmap_read(hwmon->regmap, temperature[channel].reg, &value); + if (ret) + return ret; + break; + case hwmon_temp_crit: + ret =3D regmap_read(hwmon->regmap, temperature[channel].reg_ext, &value); + if (ret) + return ret; + break; + default: + return -EOPNOTSUPP; + } + + *val =3D sign_extend32(value, 8) * 1000; + return 0; +} + +static int smpro_read_in(struct device *dev, u32 attr, int channel, long *= val) +{ + struct smpro_hwmon *hwmon =3D dev_get_drvdata(dev); + unsigned int value; + int ret; + + switch (attr) { + case hwmon_in_input: + ret =3D regmap_read(hwmon->regmap, voltage[channel].reg, &value); + if (ret < 0) + return ret; + /* 15-bit value in 1mV */ + *val =3D value & 0x7fff; + return 0; + default: + return -EOPNOTSUPP; + } +} + +static int smpro_read_curr(struct device *dev, u32 attr, int channel, long= *val) +{ + struct smpro_hwmon *hwmon =3D dev_get_drvdata(dev); + unsigned int value; + int ret; + + switch (attr) { + case hwmon_curr_input: + ret =3D regmap_read(hwmon->regmap, curr_sensor[channel].reg, &value); + if (ret < 0) + return ret; + /* Scale reported by the hardware is 1mA */ + *val =3D value & 0x7fff; + return 0; + default: + return -EOPNOTSUPP; + } +} + +static int smpro_read_power(struct device *dev, u32 attr, int channel, lon= g *val_pwr) +{ + struct smpro_hwmon *hwmon =3D dev_get_drvdata(dev); + unsigned int val =3D 0, val_mw =3D 0; + int ret; + + switch (attr) { + case hwmon_power_input: + ret =3D regmap_read(hwmon->regmap, power[channel].reg, &val); + if (ret) + return ret; + + ret =3D regmap_read(hwmon->regmap, power[channel].reg_ext, &val_mw); + if (ret) + return ret; + /* 10-bit value */ + *val_pwr =3D (val & 0x3ff) * 1000000 + (val_mw & 0x3ff) * 1000; + return 0; + + default: + return -EOPNOTSUPP; + } +} + +static int smpro_read(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long *val) +{ + switch (type) { + case hwmon_temp: + return smpro_read_temp(dev, attr, channel, val); + case hwmon_in: + return smpro_read_in(dev, attr, channel, val); + case hwmon_power: + return smpro_read_power(dev, attr, channel, val); + case hwmon_curr: + return smpro_read_curr(dev, attr, channel, val); + default: + return -EOPNOTSUPP; + } +} + +static int smpro_read_string(struct device *dev, enum hwmon_sensor_types t= ype, + u32 attr, int channel, const char **str) +{ + switch (type) { + case hwmon_temp: + switch (attr) { + case hwmon_temp_label: + *str =3D temperature[channel].label; + return 0; + default: + break; + } + break; + + case hwmon_in: + switch (attr) { + case hwmon_in_label: + *str =3D voltage[channel].label; + return 0; + default: + break; + } + break; + + case hwmon_curr: + switch (attr) { + case hwmon_curr_label: + *str =3D curr_sensor[channel].label; + return 0; + default: + break; + } + break; + + case hwmon_power: + switch (attr) { + case hwmon_power_label: + *str =3D power[channel].label; + return 0; + default: + break; + } + break; + default: + break; + } + + return -EOPNOTSUPP; +} + +static umode_t smpro_is_visible(const void *data, enum hwmon_sensor_types = type, + u32 attr, int channel) +{ + const struct smpro_hwmon *hwmon =3D data; + unsigned int value; + int ret; + + switch (type) { + case hwmon_temp: + switch (attr) { + case hwmon_temp_input: + case hwmon_temp_label: + case hwmon_temp_crit: + ret =3D regmap_read(hwmon->regmap, temperature[channel].reg, &value); + if (ret || value =3D=3D 0xFFFF) + return 0; + break; + } + default: + break; + } + + return 0444; +} + +static const struct hwmon_channel_info *smpro_info[] =3D { + HWMON_CHANNEL_INFO(temp, + HWMON_T_INPUT | HWMON_T_LABEL, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL, + HWMON_T_INPUT | HWMON_T_LABEL, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL | HWMON_T_CRIT, + HWMON_T_INPUT | HWMON_T_LABEL), + HWMON_CHANNEL_INFO(in, + HWMON_I_INPUT | HWMON_I_LABEL, + HWMON_I_INPUT | HWMON_I_LABEL, + HWMON_I_INPUT | HWMON_I_LABEL, + HWMON_I_INPUT | HWMON_I_LABEL, + HWMON_I_INPUT | HWMON_I_LABEL), + HWMON_CHANNEL_INFO(power, + HWMON_P_INPUT | HWMON_P_LABEL, + HWMON_P_INPUT | HWMON_P_LABEL, + HWMON_P_INPUT | HWMON_P_LABEL, + HWMON_P_INPUT | HWMON_P_LABEL, + HWMON_P_INPUT | HWMON_P_LABEL), + HWMON_CHANNEL_INFO(curr, + HWMON_C_INPUT | HWMON_C_LABEL, + HWMON_C_INPUT | HWMON_C_LABEL, + HWMON_C_INPUT | HWMON_C_LABEL, + HWMON_C_INPUT | HWMON_C_LABEL, + HWMON_C_INPUT | HWMON_C_LABEL), + NULL +}; + +static const struct hwmon_ops smpro_hwmon_ops =3D { + .is_visible =3D smpro_is_visible, + .read =3D smpro_read, + .read_string =3D smpro_read_string, +}; + +static const struct hwmon_chip_info smpro_chip_info =3D { + .ops =3D &smpro_hwmon_ops, + .info =3D smpro_info, +}; + +static int smpro_hwmon_probe(struct platform_device *pdev) +{ + struct smpro_hwmon *hwmon; + struct device *hwmon_dev; + + hwmon =3D devm_kzalloc(&pdev->dev, sizeof(struct smpro_hwmon), GFP_KERNEL= ); + if (!hwmon) + return -ENOMEM; + + hwmon->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); + if (!hwmon->regmap) + return -ENODEV; + + hwmon_dev =3D devm_hwmon_device_register_with_info(&pdev->dev, "smpro_hwm= on", + hwmon, &smpro_chip_info, NULL); + + return PTR_ERR_OR_ZERO(hwmon_dev); +} + +static struct platform_driver smpro_hwmon_driver =3D { + .probe =3D smpro_hwmon_probe, + .driver =3D { + .name =3D "smpro-hwmon", + }, +}; + +module_platform_driver(smpro_hwmon_driver); + +MODULE_AUTHOR("Thu Nguyen "); +MODULE_AUTHOR("Quan Nguyen "); +MODULE_DESCRIPTION("Ampere Altra SMPro hwmon driver"); +MODULE_LICENSE("GPL"); --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7266AC4332F for ; Thu, 29 Sep 2022 09:44:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233335AbiI2JoQ (ORCPT ); Thu, 29 Sep 2022 05:44:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235119AbiI2JoD (ORCPT ); Thu, 29 Sep 2022 05:44:03 -0400 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2111.outbound.protection.outlook.com [40.107.244.111]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A865147CF2; Thu, 29 Sep 2022 02:44:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y17u73f7W7LjM0ODSTCaD/H2nr4hC/9UgV9d+eTv+25fqGMOGdX59DeSw93iXKtobq44Kc/mLIIPJQZqv8JFoLtXqEXZs1DKXoJJ1H14r5O3L91mJGd7lpbaBc72DpGrXswAeeLACKVud+QqXQP3OjYeFhdk2NE+PM55tBoa89feSprKxvNnei4Kp6cfU3qY/J5AaFZg7HsTtqldo/mU/Cf0UoQljpJ1GYsOoH010eva2sTHhq+90vjqzX8khLqziKFYCPjHSM7yRPdTH0vUp+IK5D3ircvTcQJevlCbv6MB2k/0fhHBvEljDHiv+BDv9aeLRErL4SYT0QOuUpWd5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=l1qC682PG7wbJhuLtv5pwxZ9Ny/IOkEVJuRpOL7lHZE=; b=Gzm0JJTV+lSgN2MBfe2USDOqOS5rrMKt1syXBpL96DEjaPy9Kj1zfNi7nmKvYr/jiiS8+Asv9AF1nOzHQi9ZPR1pB96DxHvyvt1tQeCNygA3NiYQWayfcNG1Mw0Zdb5JnBCgNrzsaOm+qb9KolXAWMqCbr0RKQyqXTT6NHcWjypSco4Nz+03DVCGB8fz+1dX3hgbNMer2E9BYblo2KnBxzGtNb+kkKbmCNYVikk378AqnxnU9PbnyjWJoTHn3Oi5h2j0VtFiLhz4vsjljzEFQ+PbQKNx5NZBGGRcZuctkIV0Tq4QPTImkb63l6PpMC19Hgqi/6vppvywnFoM7bmUKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=l1qC682PG7wbJhuLtv5pwxZ9Ny/IOkEVJuRpOL7lHZE=; b=Q+fvEDpJ1c7Pze5pwtccTaO4S0jW7zzszqsoVSOmt26gyWPmqqKfQ1UNshP/j/ln1OPSvsm3A26hClaH4JG5/5Fw11Y+q7pDKwGRBOyCnuSLPIokcKpnRVUaOtH0UDEVefMzvsJgZ4ziaz2JYOfBucQHcPxprT9jW8lIWzR1AOE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by MN2PR01MB5503.prod.exchangelabs.com (2603:10b6:208:11b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:43:56 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:43:56 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 2/9] docs: hwmon: (smpro-hwmon) Add documentation Date: Thu, 29 Sep 2022 16:43:14 +0700 Message-Id: <20220929094321.770125-3-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|MN2PR01MB5503:EE_ X-MS-Office365-Filtering-Correlation-Id: 3f1e272d-10e0-40db-9156-08daa1ff2010 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5rHRUaKPZ0piORGClHPSrE8kFnZ8D04CaUTn7R8xAooHGjgucngBVxD+F8TUT22lSrINijs76S5j+LtZ2urbXEra1qEAkfDkBFLCVcPzIVOYp+XbEwrkSK9gAsMWp6kKCzDL0Bm060xjPWC3PQ4RCP0DB6ytZO8cEcuYjb3RqORfqajHKb3hL0XuhrhQ8CSTAiKMB1NadBO4kc4av2kt70DbOP1t4uMmod+H+u2QtRrihFbJDWNtBF2JxnKTM6voWsXWr/8hUslS2+zmwAa5pCR446BbpGHDaJdbR/0wRy5hRA8JLXn36T8Px5N5JZlsLmWAB2Qx0K3Y3GXKIZqn8GVmOrenv3yclM62Ma3HvgxqPARTKiRTum+P7bRjjX8xAjRbiEJbrwMl3xbU4LbVcm6K8Fo5wLVC3ZtuKK1RQJILE99hxqlw6kjGZo3XYsaArh4ILMY06LF0Fqz1QR6JebPIRfN5kxc91YN5rVO7f419Mu8xh07VGH417Jak6RIJry4Due7CcaqJ3WzdrBjF5hcIZ/9H3KgHK7KeGlKK3HEHlbckD34nyEXNsl88SVKQ152O6PmB443A6PKsfaU2Xg+pp3vURN+JhEEQPIV2F8gAQVsYmRYuQ5xW/Pj/24m6tvBfaqGutN+q2rKeyuvvyfjdGKtjuk4wfDFKVGZ79LnjdjCctUC7ht9IqlOWog9vl6wPOMLr+3ZwYXEFPOlKx7O5P2U4ZgBJA/uVMjcQqf8ddcppHTYINk6dezBy6jjLEZ89nE0Ep7IUb3N+SlnBb/EIhMDdTLskCBqVlRKjlZc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(136003)(346002)(366004)(376002)(39850400004)(451199015)(6486002)(478600001)(186003)(1076003)(110136005)(5660300002)(6506007)(7416002)(2906002)(2616005)(921005)(6666004)(107886003)(66946007)(66476007)(8676002)(66556008)(4326008)(316002)(26005)(6512007)(52116002)(8936002)(41300700001)(83380400001)(86362001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7XIjIfqp30VcRWAL5EfHOSFbigqRqX4m4f9FL0eJ8qiWIWeT6k3Bu/i/7SCF?= =?us-ascii?Q?huHlrv1oJ1xzWTCN9jN3jbghcNdxBuQcqzI6bkfjvUbrzckHWXOMEu0gIXFl?= =?us-ascii?Q?9FSyPrlZdhZwqDWoGE+enAMnMioAa4MgjpIfXyerJfuccK4ML7ol+BSgHFUJ?= =?us-ascii?Q?At8iQu0+75qTohIsBPzspJOjlpjy2XYrEYInOK+GQ9Q6UKRAC0+imdVa/2P1?= =?us-ascii?Q?wbmfbYW2UAyyT3aM3k3zkuTSCtDxOsNpf7w09Q92m94pc9xMzAz8aU84oQcG?= =?us-ascii?Q?apsFR5F3HsJ668iIot9aEJozgObScKhofWU3aHLxQE98DkfiOa7ykSlvoyDT?= =?us-ascii?Q?hRrx1rQBlUd2WN5eHN9SGtGDUVnGAt8jHJZijgnQV+cJMLjjQucBhJy+79nb?= =?us-ascii?Q?vhLvuqmhN3wdSI0HmfwP1R2zvpKHXIFl7NefQ5sQ8Qn2hkSyrQhO1mtQNptN?= =?us-ascii?Q?aRt849RCOFVz5LObeM0tVMDkclmkaXH4WZgVIK6F/4Cr5PSIHKU9rpRVXyaC?= =?us-ascii?Q?G3l5FWMH0YUxhPvx5zJMF5r0nMQgPqorY5SzwBhtMHkkfz+YQrGKdTtx6YY/?= =?us-ascii?Q?8KO8Fuw4WyCfSp5aC3yNT9zJOwDjR2nDl72+NlH+bZqfU8rFDCCbmdixdoZi?= =?us-ascii?Q?byPO5z4cyl87694o9u45/lEa4zGrnLPS1PWZ3Y4sHkoDVItJHEgU/N4DbyD0?= =?us-ascii?Q?jah4C/jv0ZPC7o2Yqce0bL0GP5V+sagWyRNhRlXB3HOWcqCtxDE7tzpaWQre?= =?us-ascii?Q?65SXnG2BYanfRWBQPjy3OFO6IuYNuExEObgOBSboRpUkUtjrCGctaqD/yAus?= =?us-ascii?Q?9ywEfToueZUrwrOVXBbUsYw8yNPREJp7UNcNOsVBpoadLBCn/yZqVXUsA30Y?= =?us-ascii?Q?EYeI1f0uOorQhUkBknwp1RFRTHRP56Oi88VzVmzzgcpzoLKmzKb9SU6TEN0H?= =?us-ascii?Q?K77CpAcjGjnGB853I+U4AIeLmPCAzt/yn1GgZJgPSyXGd2tXyQO5L+148zsz?= =?us-ascii?Q?fczAqSSu3az6/qMLqzw9fUdjmPkwsBEWzpYuGBVdrSjsCSL6+S33smJ9eN2S?= =?us-ascii?Q?NaVAJVI95PtnaN+0ZoSArxTPKEf9gKTxp5sf5GbabTQ/r1URasHsVo7gUiWj?= =?us-ascii?Q?foryLFC3nuGVAldtgh9RJxKo8XTsjjXgusW3KutxoqZ/4V9tSKNhwTkbXQI1?= =?us-ascii?Q?l7oK/rJUmQk9kHNG5o9UbpDkiTZz6GE5IM4fmvRtJDxTSl4/D4TnV9LtXZMJ?= =?us-ascii?Q?l0KrlBSmi9BcrLqGOGrphKGLy3zBGNJPXGxgBmyYp0/d5V18Nr16Z9lZzC03?= =?us-ascii?Q?deA/fdptdtrAanACj/bRIgygt1wac3Yd7Mxv0C6lfXIJhX+1LaYESNyAoCUO?= =?us-ascii?Q?XRq14w7jpKEMwxU10z0npqJgsBpRx4A1zNp+/vIH7d6P0VmGdPdamXIRuGpO?= =?us-ascii?Q?HJI7lrYOz9f4PXBx5IR/baZKycw4tkSiTrjjghyFDQqLLSGkOUB+sg8u2dCe?= =?us-ascii?Q?sGlymi5jI3k11hbLqSagFHq5lxg18oVEU5B4Pda9cIksn8A23+8jtNfTbLq5?= =?us-ascii?Q?FY/ml47Es+GldpDepjm9p76lRr3g1JvVZzISEVuUXnRqbdF4s1ONMfo1na7n?= =?us-ascii?Q?ZAODBuULNnrl7Mf+hAF3Rog=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3f1e272d-10e0-40db-9156-08daa1ff2010 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:43:55.8828 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6O+wfA6iVvzIKlj7KxQJf6f8y9r5WXH5GLyyf2Q/JawOfT8++Ujgyk4uGFpWyM3AwSOZk5TX2XcurYLcLrERmz/N4g+gxaRT6EapjFOA6ZI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR01MB5503 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add documentation for the Ampere(R)'s Altra(R) SMpro hwmon driver. Signed-off-by: Thu Nguyen Signed-off-by: Quan Nguyen Reviewed-by: Guenter Roeck --- Changes in v9: + Update SPDX license [Greg] Changes from v3=3D>v8: + None Changes in v2: + Removed "virtual" sensors [Guenter] + Fixed typo "mili" to "milli", "nanoWatt" to "microWatt" [Guenter] + Reported SOC_TDP as "Socket TDP" using max attributes [Guenter] + Clarified "highest" meaning in documentation [Guenter] + Reported MEM HOT Threshold for all DIMMs as temp*_crit [Guenter] + Removed Socket TDP sensor [Quan] + Included sensor type and channel in labels [Quan] Documentation/hwmon/index.rst | 1 + Documentation/hwmon/smpro-hwmon.rst | 101 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 Documentation/hwmon/smpro-hwmon.rst diff --git a/Documentation/hwmon/index.rst b/Documentation/hwmon/index.rst index c1d11cf13eef..ddff3c5713d7 100644 --- a/Documentation/hwmon/index.rst +++ b/Documentation/hwmon/index.rst @@ -187,6 +187,7 @@ Hardware Monitoring Kernel Drivers sis5595 sl28cpld smm665 + smpro-hwmon smsc47b397 smsc47m192 smsc47m1 diff --git a/Documentation/hwmon/smpro-hwmon.rst b/Documentation/hwmon/smpr= o-hwmon.rst new file mode 100644 index 000000000000..3a9b14dacf89 --- /dev/null +++ b/Documentation/hwmon/smpro-hwmon.rst @@ -0,0 +1,101 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +Kernel driver Ampere(R)'s Altra(R) SMpro hwmon +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Supported chips: + + * Ampere(R) Altra(R) + + Prefix: 'smpro' + + Reference: Altra SoC BMC Interface Specification + +Author: Thu Nguyen + +Description +----------- +This driver supports hardware monitoring for Ampere(R) Altra(R) SoC's base= d on the +SMpro co-processor (SMpro). +The following sensor types are supported by the driver: + + * temperature + * voltage + * current + * power + +The SMpro interface provides the registers to query the various sensors and +their values which are then exported to userspace by this driver. + +Usage Notes +----------- + +SMpro hwmon driver creates at least two sysfs files for each sensor. + +* File ``_label`` reports the sensor label. +* File ``_input`` returns the sensor value. + +The sysfs files are allocated in the SMpro root fs folder. +There is one root folder for each SMpro instance. + +When the SoC is turned off, the driver will fail to read registers +and return -ENXIO. + +Sysfs entries +------------- + +The following sysfs files are supported: + +* Ampere(R) Altra(R): + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D +Name Unit Perm Description +temp1_input milli Celsius RO SoC temperature +temp2_input milli Celsius RO Max temperature reported among SoC= VRDs +temp2_crit milli Celsius RO SoC VRD HOT Threshold temperature +temp3_input milli Celsius RO Max temperature reported among DIM= M VRDs +temp4_input milli Celsius RO Max temperature reported among Cor= e VRDs +temp5_input milli Celsius RO Temperature of DIMM0 on CH0 +temp5_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp6_input milli Celsius RO Temperature of DIMM0 on CH1 +temp6_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp7_input milli Celsius RO Temperature of DIMM0 on CH2 +temp7_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp8_input milli Celsius RO Temperature of DIMM0 on CH3 +temp8_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp9_input milli Celsius RO Temperature of DIMM0 on CH4 +temp9_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp10_input milli Celsius RO Temperature of DIMM0 on CH5 +temp10_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp11_input milli Celsius RO Temperature of DIMM0 on CH6 +temp11_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp12_input milli Celsius RO Temperature of DIMM0 on CH7 +temp12_crit milli Celsius RO MEM HOT Threshold for all DIMMs +temp13_input milli Celsius RO Max temperature reported among RCA= VRDs +in0_input milli Volts RO Core voltage +in1_input milli Volts RO SoC voltage +in2_input milli Volts RO DIMM VRD1 voltage +in3_input milli Volts RO DIMM VRD2 voltage +in4_input milli Volts RO RCA VRD voltage +cur1_input milli Amperes RO Core VRD current +cur2_input milli Amperes RO SoC VRD current +cur3_input milli Amperes RO DIMM VRD1 current +cur4_input milli Amperes RO DIMM VRD2 current +cur5_input milli Amperes RO RCA VRD current +power1_input micro Watts RO Core VRD power +power2_input micro Watts RO SoC VRD power +power3_input micro Watts RO DIMM VRD1 power +power4_input micro Watts RO DIMM VRD2 power +power5_input micro Watts RO RCA VRD power +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D + +Example:: + + # cat in0_input + 830 + # cat temp1_input + 37000 + # cat curr1_input + 9000 + # cat power5_input + 19500000 --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 155E3C4321E for ; Thu, 29 Sep 2022 09:44:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235602AbiI2Joa (ORCPT ); Thu, 29 Sep 2022 05:44:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39956 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235530AbiI2JoO (ORCPT ); Thu, 29 Sep 2022 05:44:14 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2119.outbound.protection.outlook.com [40.107.94.119]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 707B4148A03; Thu, 29 Sep 2022 02:44:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VGQ7/cOF9S3Ztgaoow9XRldW3JEqVrs/4k3gnJ3Vg04al+k8c95wRkvQBtc/grJN+scp3r0bE8TE+Ic/uU4f3KKYKNA05+VAOGY3P+gMvATpvTLbTT0BUA32l6UNMMfDOrvGN+1822u7u6FY3Ac2xE3eodPJ5E0VEw0ZH9lHC0/pIut7rKC1yBk9+zkVasm8Y7LrnaMlzTl60n/eYyDAXRLQ4bgyDjBaHINwv2yMMymS12OH7vUOn56zUumHUAr/HhfT6x4WZ4TtkEpFSMf+hLs3FtqG6H2ScSmqL2qDjQY5VSH5xJyUmSlw24/CcfN/LsXbrfKDWaEGyjBGL3N97w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iqwBPGST1eUBTatAkSSveHiCnMq5XsMYpp0k0AmKZqc=; b=COw1aAN4V3X7iABXbefDXdX41ZtN0oGC9KkfJKgiO67LU9H95lDgpA9aIuYEpdOr4/pf+ERNMNmLcCRiZpK79DnwEk7YR1POAZUGpfH8Kpyl1H588L0doJf/8CUqOG4dD2+FBu8EWuICgrcHv7Ea6LkxqfoFNvIfKTtwg0shzChyRzmYZzARdC9rxDcSj4ZRvMyZNOkexlPohtQqlnQcaaME2V0Qt7VjV6CrXKGHI9N1uhZp0H8rruFQ13aFFxCaydm3JqvGkN9r8l4aB4OppmRm1irS+sSBLDuXeoW3wZKG3mlF2GIZYWh1ln6pZQAqkV/5OnP4K8sO3KwB/my3qQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iqwBPGST1eUBTatAkSSveHiCnMq5XsMYpp0k0AmKZqc=; b=BqIfWdjd3MRYzxBOFU3I25P2tzB33VCYh9N07/W1YigvhXAxT1zIdhCNpp0wfHDK1dPFivkjko/zUA5QucGkpZeEmokLV2Sdk93Ub6YC0afzQvQ68CvcX39OKbfb8OIgKXnEii83c31JGKjh1piBIb+ikMpW/hqpzUq1kt4qX70= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by SN6PR01MB4798.prod.exchangelabs.com (2603:10b6:805:d5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:01 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:01 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 3/9] misc: smpro-errmon: Add Ampere's SMpro error monitor driver Date: Thu, 29 Sep 2022 16:43:15 +0700 Message-Id: <20220929094321.770125-4-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|SN6PR01MB4798:EE_ X-MS-Office365-Filtering-Correlation-Id: 7a6c9943-51c2-4055-6fd5-08daa1ff2398 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8I6oRcDLKtxVICYfLy369lpCnYt1y4g7rbXc8i/XphCBFDjgVofjM41tl8Vncs1ZfMHv9N7BG2SOofLRwFo0kkem7qAZa2hACfZlLHRyvxy+0PP8cURmVjJNoffmA1X2+6Ytg6LEqLDz1b3UznkOkGecX/wLkwuZRuIa5+LER03Bmw2xMNRp5JYcv9+l/Bw4Xk5np3SHlmPfyCvBJ6PoWzIQw9HNSNB4exFg/0aCqhnuzySCTeaSiTAEN8iuPrKkARUxWQlRRornEbxlsS03Ic4HF0Oyr3/5BZ7yl/ddK8A3M1n5oMXAi250dK1Z4pAf0SXFKLgTcDWDfJps8Gvif0vMXBEpHwMp/Wbmw/w8qORPRZrdj4gNIBkGHOjd1l1Ik3fRgUrx8blLYwsqfgMp8CF/ESDwbxL6MBAglKu1ogWwqd7qD8pM7fP7T9Jo5nUrWXyIphK6ujNZMT5L8JgqEYXtwfdwKtRs85IlXKYV45Pl6TtHm3ZtZ+8Uh+Tn0zkHyWsxNwevRjorvZCn+nFcjF1yo1b/eBkzZPtzVOLkDE7l1vJTnEw2DAkTCGsxVj81Gm6vcdKfYOoA//IHvigsG7qmy6leRu/65jq7awoiUvgJNr8MQdGuEaz1zRuvxvekg7JMApQ+WcH+8a4eZsOiT0jiIzo8z+d5oYmW7gOBYLRDU1jf+OSMOcfvbc7GyMIFAoIepMI+C5GRq3JtQRgdxJm7NHr+2Pwg9M94DPW/upCsrm9lkMD10Cl+9RzL2Xzg6IbL+vsxQyq6sqi2Tgm2ExoZ2RYyuRwla9wCxz+x/Gc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(451199015)(921005)(66476007)(66946007)(66556008)(8676002)(4326008)(83380400001)(110136005)(478600001)(6666004)(6512007)(6506007)(2906002)(26005)(52116002)(41300700001)(316002)(38350700002)(38100700002)(86362001)(30864003)(8936002)(6486002)(1076003)(107886003)(5660300002)(2616005)(7416002)(186003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zEGxH4JT7i0KVE+pVZkTbBJe+i6Aw/z1W4MeDi/KkWB0SQTf+q5DLWHqrTkH?= =?us-ascii?Q?qtFE9k/gCpSW0hxjbtOASDkn8mxdV74p88x2QxnL7FlDR5r/1ITjfXYfHjjm?= =?us-ascii?Q?YSTZlmWZzqUFM3QzHmDU1YZ6I+PRqj8RC4WElcq9lp84oDSPY0jP/HRmhZ75?= =?us-ascii?Q?cUXsEzMDIsT+eOjL3j3OLjVB9Bh3Jh56pJhsvHlhgwsEjioV0ngJ1SpNXQjL?= =?us-ascii?Q?1I3pyOek+DRvK0CQNvGb9hKZXhOIOuqKWMQXI3kHpKzQsBWxPpQz5uJFYEIp?= =?us-ascii?Q?BmM/34WVCjxemHIhqWZ5fl7PKt6iv5G6TTnFvsyY+2JZxL/mCjg3z+N/WMsC?= =?us-ascii?Q?B3RIbLdr931H316e40h6C0CzkoVjR7XIcxTVAVfjH40yRU4ZZWmn7gM3oHIx?= =?us-ascii?Q?BAdG4k6d1UvTcZ/SADFHLrohaINuqUM+6J3RS2+uU138XPcHRva+K8A8h7KM?= =?us-ascii?Q?ut5RS+3IoBcBMf9pC/DRclS0pj2TmrjZuPwV4+S5S3tUuZGSm7tVQ2bIVSGg?= =?us-ascii?Q?vI+iQra6GeiGVgOEyhK+K/qN6uxVVjKcOnqeDl6tRLSSqITWcZuFGhR3VaCC?= =?us-ascii?Q?b5ZPE/lmYzrPO6na578SI7BaeKLaP/HPd98fQiavbavmmfHhchVISvq4mEFH?= =?us-ascii?Q?y2lMPW4FdMryOPqrRMN8NFLIvgy4LuH9CYbXUQdXKNLUSju6poSNpOsyGDFQ?= =?us-ascii?Q?cjrl1iBDFZ5GCxzwm5Z3KaQo+oZXJSayNM8w9M0e7BU9Mnz7C98GzVlAj/E5?= =?us-ascii?Q?wPpRqyzuMRCZN8lYJNipmty3yyitVFH0WR1n14WxYv6crfRW+UoK74ms3Dyw?= =?us-ascii?Q?A5MRurLJc0VPD7imiHckOt+1dfCtu9GHjNTVUonh8SinqyXdGYC4jAP0Jq0o?= =?us-ascii?Q?ShK6oVGUikFdkN6MqP8g9VDGxY/L+2Psym3GKNgF5skarQ/ztsRnQCmfNqM4?= =?us-ascii?Q?8fJ325GZ5oXbtDktBfrg8h9GJOk71DRjXGCfMC7JReYl6oMANdUvjmMyvpFZ?= =?us-ascii?Q?h7UXUEhIWfb6SO6GqBfY85hP32x7jUMc2ZlHLuX2D5AeYE9IHXHyukO3zZLH?= =?us-ascii?Q?Euueu98+4o5Tpi8sNIlZQgcoeSOQdvp/5yD0EAEPWsRhbfc60+B7gWAak0/N?= =?us-ascii?Q?WFdFpQjtBVvCU6Mup2nOGLe3NdfTMz2W0ldBF0e2Q+U3esKKXmkhbd6Udxnb?= =?us-ascii?Q?7stexsYd6fh0i/heiXQI6k3Umk3xqcrZPjjbcHvK3dJ09BHqhgL3WyxU3ZCK?= =?us-ascii?Q?Z6UVp29kATFVM24EVuGmqaWsErxSBEzM626Z5c45fKp1Jn5s/gyYrNdjkldv?= =?us-ascii?Q?pB+UJkyIEm3lhVLz1i9l54JyPTTUQFXHowyo/+bhknKps3z7svidtl/OW4lE?= =?us-ascii?Q?FM7Pwjq0m60I1GCwynwr5NkLXBY5y4s63f7+Qr0C0tRerHx6tSIetRjCZtUf?= =?us-ascii?Q?VdBsujzxDETSmki8w6gaaIgHn66hE8lLmfEIzX1lIOLaE8RleH1NFciQx4If?= =?us-ascii?Q?dVz0xhOla8R7MjaTLXv4TTTDfZvm5V6MQsva2sUTXdF7V9p9Yqyk5lc98QLA?= =?us-ascii?Q?fKw3yugnID5QqpfGrSXlELAViONCeOsJetbX44pNzFC5GSJsIT/wGR88r6FB?= =?us-ascii?Q?UXZMzqG0R7UvGHJOGjMCHxI=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a6c9943-51c2-4055-6fd5-08daa1ff2398 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:01.7283 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: S4DbzV42eTdx1iKk1PDiXW6oXy+KOVHz3oEN75JErcYgdtHn3QYwygmojUM82fVQYzdwEE2Dbi3NKub78Nq/oRIxLn7mWB3VTgBHqyFg868= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR01MB4798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This commit adds Ampere's SMpro error monitor driver for monitoring and reporting RAS-related errors as reported by SMpro co-processor found on Ampere's Altra processor family. Signed-off-by: Quan Nguyen --- Changes in v9: + Fix ugly static struct define [Greg] + Remove unused defines and update documentation [Quan] + Add minor refactor code [Quan] + Fix messy goto [Greg] + Update SPDX licence [Greg] + Use ATTRIBUTE_GROUPS() [Greg] + Use dev_groups instead of sysfs_create_group() to avoid racing issue with user space [Greg] + Refactor code to fix unnecessary initialization issue [Quan] + Refactor code to avoid clever encoding issue [Quan] + Separate error_[smpro|pmpro] to error_* and warn_* [Quan] + Add minor code refactor [Quan] Changes in v8: + Update wording for SMPRO_ERRMON on Kconfig file [Quan] + Avoid uninitialized variable use [kernel test robot] + Switch to use sysfs_emit() [Greg] + Make sysfs to return single value [Greg] + Change errors_* sysfs to error_* [Quan] + Add overflow_[core|mem|pcie|other]_[ce|ue] sysfs to report overflow status of each type of HW errors [Quan] + Add some minor refactor [Quan] Changes in v7: + Remove regmap_acquire/release_lock(), read_i2c_block_data() [Quan] + Use regmap_noinc_read() instead of errmon_read_block() [Quan] + Validate number of errors before read [Quan] + Fix wrong return type of *_show() function [kernel test robot] + Adjust patch order to avoid dependence with smpro-mfd [Lee Jones] + Use pointer instead of stack memory [Quan] Changes in v6: + First introduced in v6 [Quan] drivers/misc/Kconfig | 12 + drivers/misc/Makefile | 1 + drivers/misc/smpro-errmon.c | 529 ++++++++++++++++++++++++++++++++++++ 3 files changed, 542 insertions(+) create mode 100644 drivers/misc/smpro-errmon.c diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 358ad56f6524..b9ceee949dab 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -176,6 +176,18 @@ config SGI_XP this feature will allow for direct communication between SSIs based on a network adapter and DMA messaging. =20 +config SMPRO_ERRMON + tristate "Ampere Computing SMPro error monitor driver" + depends on MFD_SMPRO || COMPILE_TEST + help + Say Y here to get support for the SMpro error monitor function + provided by Ampere Computing's Altra and Altra Max SoCs. Upon + loading, the driver creates sysfs files which can be use to gather + multiple HW error data reported via read and write system calls. + + To compile this driver as a module, say M here. The driver will be + called smpro-errmon. + config CS5535_MFGPT tristate "CS5535/CS5536 Geode Multi-Function General Purpose Timer (MFGPT= ) support" depends on MFD_CS5535 diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index ac9b3e757ba1..bbe24d4511a3 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -23,6 +23,7 @@ obj-$(CONFIG_ENCLOSURE_SERVICES) +=3D enclosure.o obj-$(CONFIG_KGDB_TESTS) +=3D kgdbts.o obj-$(CONFIG_SGI_XP) +=3D sgi-xp/ obj-$(CONFIG_SGI_GRU) +=3D sgi-gru/ +obj-$(CONFIG_SMPRO_ERRMON) +=3D smpro-errmon.o obj-$(CONFIG_CS5535_MFGPT) +=3D cs5535-mfgpt.o obj-$(CONFIG_GEHC_ACHC) +=3D gehc-achc.o obj-$(CONFIG_HP_ILO) +=3D hpilo.o diff --git a/drivers/misc/smpro-errmon.c b/drivers/misc/smpro-errmon.c new file mode 100644 index 000000000000..d1431d419aa4 --- /dev/null +++ b/drivers/misc/smpro-errmon.c @@ -0,0 +1,529 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Ampere Computing SoC's SMpro Error Monitoring Driver + * + * Copyright (c) 2022, Ampere Computing LLC + * + */ + +#include +#include +#include +#include +#include + +/* GPI RAS Error Registers */ +#define GPI_RAS_ERR 0x7E + +/* Core and L2C Error Registers */ +#define CORE_CE_ERR_CNT 0x80 +#define CORE_CE_ERR_LEN 0x81 +#define CORE_CE_ERR_DATA 0x82 +#define CORE_UE_ERR_CNT 0x83 +#define CORE_UE_ERR_LEN 0x84 +#define CORE_UE_ERR_DATA 0x85 + +/* Memory Error Registers */ +#define MEM_CE_ERR_CNT 0x90 +#define MEM_CE_ERR_LEN 0x91 +#define MEM_CE_ERR_DATA 0x92 +#define MEM_UE_ERR_CNT 0x93 +#define MEM_UE_ERR_LEN 0x94 +#define MEM_UE_ERR_DATA 0x95 + +/* RAS Error/Warning Registers */ +#define ERR_SMPRO_TYPE 0xA0 +#define ERR_PMPRO_TYPE 0xA1 +#define ERR_SMPRO_INFO_LO 0xA2 +#define ERR_SMPRO_INFO_HI 0xA3 +#define ERR_SMPRO_DATA_LO 0xA4 +#define ERR_SMPRO_DATA_HI 0xA5 +#define WARN_SMPRO_INFO_LO 0xAA +#define WARN_SMPRO_INFO_HI 0xAB +#define ERR_PMPRO_INFO_LO 0xA6 +#define ERR_PMPRO_INFO_HI 0xA7 +#define ERR_PMPRO_DATA_LO 0xA8 +#define ERR_PMPRO_DATA_HI 0xA9 +#define WARN_PMPRO_INFO_LO 0xAC +#define WARN_PMPRO_INFO_HI 0xAD + +/* PCIE Error Registers */ +#define PCIE_CE_ERR_CNT 0xC0 +#define PCIE_CE_ERR_LEN 0xC1 +#define PCIE_CE_ERR_DATA 0xC2 +#define PCIE_UE_ERR_CNT 0xC3 +#define PCIE_UE_ERR_LEN 0xC4 +#define PCIE_UE_ERR_DATA 0xC5 + +/* Other Error Registers */ +#define OTHER_CE_ERR_CNT 0xD0 +#define OTHER_CE_ERR_LEN 0xD1 +#define OTHER_CE_ERR_DATA 0xD2 +#define OTHER_UE_ERR_CNT 0xD8 +#define OTHER_UE_ERR_LEN 0xD9 +#define OTHER_UE_ERR_DATA 0xDA + +/* Event Data Registers */ +#define VRD_WARN_FAULT_EVENT_DATA 0x78 +#define VRD_HOT_EVENT_DATA 0x79 +#define DIMM_HOT_EVENT_DATA 0x7A + +#define MAX_READ_BLOCK_LENGTH 48 + +#define RAS_SMPRO_ERR 0 +#define RAS_PMPRO_ERR 1 + +enum RAS_48BYTES_ERR_TYPES { + CORE_CE_ERR, + CORE_UE_ERR, + MEM_CE_ERR, + MEM_UE_ERR, + PCIE_CE_ERR, + PCIE_UE_ERR, + OTHER_CE_ERR, + OTHER_UE_ERR, + NUM_48BYTES_ERR_TYPE, +}; + +struct smpro_error_hdr { + u8 count; /* Number of the RAS errors */ + u8 len; /* Number of data bytes */ + u8 data; /* Start of 48-byte data */ + u8 max_cnt; /* Max num of errors */ +}; + +/* + * Included Address of registers to get Count, Length of data and Data + * of the 48 bytes error data + */ +static struct smpro_error_hdr smpro_error_table[] =3D { + [CORE_CE_ERR] =3D { + .count =3D CORE_CE_ERR_CNT, + .len =3D CORE_CE_ERR_LEN, + .data =3D CORE_CE_ERR_DATA, + .max_cnt =3D 32 + }, + [CORE_UE_ERR] =3D { + .count =3D CORE_UE_ERR_CNT, + .len =3D CORE_UE_ERR_LEN, + .data =3D CORE_UE_ERR_DATA, + .max_cnt =3D 32 + }, + [MEM_CE_ERR] =3D { + .count =3D MEM_CE_ERR_CNT, + .len =3D MEM_CE_ERR_LEN, + .data =3D MEM_CE_ERR_DATA, + .max_cnt =3D 16 + }, + [MEM_UE_ERR] =3D { + .count =3D MEM_UE_ERR_CNT, + .len =3D MEM_UE_ERR_LEN, + .data =3D MEM_UE_ERR_DATA, + .max_cnt =3D 16 + }, + [PCIE_CE_ERR] =3D { + .count =3D PCIE_CE_ERR_CNT, + .len =3D PCIE_CE_ERR_LEN, + .data =3D PCIE_CE_ERR_DATA, + .max_cnt =3D 96 + }, + [PCIE_UE_ERR] =3D { + .count =3D PCIE_UE_ERR_CNT, + .len =3D PCIE_UE_ERR_LEN, + .data =3D PCIE_UE_ERR_DATA, + .max_cnt =3D 96 + }, + [OTHER_CE_ERR] =3D { + .count =3D OTHER_CE_ERR_CNT, + .len =3D OTHER_CE_ERR_LEN, + .data =3D OTHER_CE_ERR_DATA, + .max_cnt =3D 8 + }, + [OTHER_UE_ERR] =3D { + .count =3D OTHER_UE_ERR_CNT, + .len =3D OTHER_UE_ERR_LEN, + .data =3D OTHER_UE_ERR_DATA, + .max_cnt =3D 8 + }, +}; + +/* + * List of SCP registers which are used to get + * one type of RAS Internal errors. + */ +struct smpro_int_error_hdr { + u8 type; + u8 info_l; + u8 info_h; + u8 data_l; + u8 data_h; + u8 warn_l; + u8 warn_h; +}; + +static struct smpro_int_error_hdr list_smpro_int_error_hdr[] =3D { + [RAS_SMPRO_ERR] =3D { + .type =3D ERR_SMPRO_TYPE, + .info_l =3D ERR_SMPRO_INFO_LO, + .info_h =3D ERR_SMPRO_INFO_HI, + .data_l =3D ERR_SMPRO_DATA_LO, + .data_h =3D ERR_SMPRO_DATA_HI, + .warn_l =3D WARN_SMPRO_INFO_LO, + .warn_h =3D WARN_SMPRO_INFO_HI, + }, + [RAS_PMPRO_ERR] =3D { + .type =3D ERR_PMPRO_TYPE, + .info_l =3D ERR_PMPRO_INFO_LO, + .info_h =3D ERR_PMPRO_INFO_HI, + .data_l =3D ERR_PMPRO_DATA_LO, + .data_h =3D ERR_PMPRO_DATA_HI, + .warn_l =3D WARN_PMPRO_INFO_LO, + .warn_h =3D WARN_PMPRO_INFO_HI, + }, +}; + +struct smpro_errmon { + struct regmap *regmap; +}; + +enum EVENT_TYPES { + VRD_WARN_FAULT_EVENT, + VRD_HOT_EVENT, + DIMM_HOT_EVENT, + NUM_EVENTS_TYPE, +}; + +/* Included Address of event source and data registers */ +static u8 smpro_event_table[NUM_EVENTS_TYPE] =3D { + VRD_WARN_FAULT_EVENT_DATA, + VRD_HOT_EVENT_DATA, + DIMM_HOT_EVENT_DATA, +}; + +static ssize_t smpro_event_data_read(struct device *dev, + struct device_attribute *da, char *buf, + int channel) +{ + struct smpro_errmon *errmon =3D dev_get_drvdata(dev); + s32 event_data; + int ret; + + ret =3D regmap_read(errmon->regmap, smpro_event_table[channel], &event_da= ta); + if (ret) + return ret; + /* Clear event after read */ + if (event_data !=3D 0) + regmap_write(errmon->regmap, smpro_event_table[channel], event_data); + + return sysfs_emit(buf, "%04x\n", event_data); +} + +static ssize_t smpro_overflow_data_read(struct device *dev, struct device_= attribute *da, + char *buf, int channel) +{ + struct smpro_errmon *errmon =3D dev_get_drvdata(dev); + struct smpro_error_hdr *err_info; + s32 err_count; + int ret; + + err_info =3D &smpro_error_table[channel]; + + ret =3D regmap_read(errmon->regmap, err_info->count, &err_count); + if (ret) + return ret; + + /* Bit 8 indicates the overflow status */ + return sysfs_emit(buf, "%d\n", (err_count & BIT(8)) ? 1 : 0); +} + +static ssize_t smpro_error_data_read(struct device *dev, struct device_att= ribute *da, + char *buf, int channel) +{ + struct smpro_errmon *errmon =3D dev_get_drvdata(dev); + unsigned char err_data[MAX_READ_BLOCK_LENGTH]; + struct smpro_error_hdr *err_info; + s32 err_count, err_length; + int ret; + + err_info =3D &smpro_error_table[channel]; + + ret =3D regmap_read(errmon->regmap, err_info->count, &err_count); + /* Error count is the low byte */ + err_count &=3D 0xff; + if (ret || !err_count || err_count > err_info->max_cnt) + return ret; + + ret =3D regmap_read(errmon->regmap, err_info->len, &err_length); + if (ret || err_length <=3D 0) + return ret; + + if (err_length > MAX_READ_BLOCK_LENGTH) + err_length =3D MAX_READ_BLOCK_LENGTH; + + memset(err_data, 0x00, MAX_READ_BLOCK_LENGTH); + ret =3D regmap_noinc_read(errmon->regmap, err_info->data, err_data, err_l= ength); + if (ret < 0) + return ret; + + /* clear the error */ + ret =3D regmap_write(errmon->regmap, err_info->count, 0x100); + if (ret) + return ret; + /* + * The output of Core/Memory/PCIe/Others UE/CE errors follows the format + * specified in section 5.8.1 CE/UE Error Data record in + * Altra SOC BMC Interface specification. + */ + return sysfs_emit(buf, "%*phN\n", MAX_READ_BLOCK_LENGTH, err_data); +} + +/* + * Output format: + * <4-byte hex value of error info><4-byte hex value of error extensive da= ta> + * Where: + * + error info : The error information + * + error data : Extensive data (32 bits) + * Reference to section 5.10 RAS Internal Error Register Definition in + * Altra SOC BMC Interface specification + */ +static ssize_t smpro_internal_err_read(struct device *dev, struct device_a= ttribute *da, + char *buf, int channel) +{ + struct smpro_errmon *errmon =3D dev_get_drvdata(dev); + struct smpro_int_error_hdr *err_info; + unsigned int err[4] =3D { 0 }; + unsigned int err_type; + unsigned int val; + int ret; + + /* read error status */ + ret =3D regmap_read(errmon->regmap, GPI_RAS_ERR, &val); + if (ret) + return ret; + + if ((channel =3D=3D RAS_SMPRO_ERR && !(val & BIT(0))) || + (channel =3D=3D RAS_PMPRO_ERR && !(val & BIT(1)))) + return 0; + + err_info =3D &list_smpro_int_error_hdr[channel]; + ret =3D regmap_read(errmon->regmap, err_info->type, &val); + if (ret) + return ret; + + err_type =3D (val & BIT(1)) ? BIT(1) : + (val & BIT(2)) ? BIT(2) : 0; + + if (!err_type) + return 0; + + ret =3D regmap_read(errmon->regmap, err_info->info_l, err + 1); + if (ret) + return ret; + + ret =3D regmap_read(errmon->regmap, err_info->info_h, err); + if (ret) + return ret; + + if (err_type & BIT(2)) { + /* Error with data type */ + ret =3D regmap_read(errmon->regmap, err_info->data_l, err + 3); + if (ret) + return ret; + + ret =3D regmap_read(errmon->regmap, err_info->data_h, err + 2); + if (ret) + return ret; + } + + /* clear the read errors */ + ret =3D regmap_write(errmon->regmap, err_info->type, err_type); + if (ret) + return ret; + + return sysfs_emit(buf, "%*phN\n", (int)sizeof(err), err); +} + +/* + * Output format: + * <4-byte hex value of warining info> + * Reference to section 5.10 RAS Internal Error Register Definition in + * Altra SOC BMC Interface specification + */ +static ssize_t smpro_internal_warn_read(struct device *dev, struct device_= attribute *da, + char *buf, int channel) +{ + struct smpro_errmon *errmon =3D dev_get_drvdata(dev); + struct smpro_int_error_hdr *err_info; + unsigned int warn[2] =3D { 0 }; + unsigned int val; + int ret; + + /* read error status */ + ret =3D regmap_read(errmon->regmap, GPI_RAS_ERR, &val); + if (ret) + return ret; + + if ((channel =3D=3D RAS_SMPRO_ERR && !(val & BIT(0))) || + (channel =3D=3D RAS_PMPRO_ERR && !(val & BIT(1)))) + return 0; + + err_info =3D &list_smpro_int_error_hdr[channel]; + ret =3D regmap_read(errmon->regmap, err_info->type, &val); + if (ret) + return ret; + + if (!(val & BIT(0))) + return 0; + + ret =3D regmap_read(errmon->regmap, err_info->warn_l, warn + 1); + if (ret) + return ret; + + ret =3D regmap_read(errmon->regmap, err_info->warn_h, warn); + if (ret) + return ret; + + /* clear the warning */ + ret =3D regmap_write(errmon->regmap, err_info->type, BIT(0)); + if (ret) + return ret; + + return sysfs_emit(buf, "%*phN\n", (int)sizeof(warn), warn); +} + +#define ERROR_OVERFLOW_RO(_error, _index) \ + static ssize_t overflow_##_error##_show(struct device *dev, \ + struct device_attribute *da, \ + char *buf) \ + { \ + return smpro_overflow_data_read(dev, da, buf, _index); \ + } \ + static DEVICE_ATTR_RO(overflow_##_error) + +ERROR_OVERFLOW_RO(core_ce, CORE_CE_ERR); +ERROR_OVERFLOW_RO(core_ue, CORE_UE_ERR); +ERROR_OVERFLOW_RO(mem_ce, MEM_CE_ERR); +ERROR_OVERFLOW_RO(mem_ue, MEM_UE_ERR); +ERROR_OVERFLOW_RO(pcie_ce, PCIE_CE_ERR); +ERROR_OVERFLOW_RO(pcie_ue, PCIE_UE_ERR); +ERROR_OVERFLOW_RO(other_ce, OTHER_CE_ERR); +ERROR_OVERFLOW_RO(other_ue, OTHER_UE_ERR); + +#define ERROR_RO(_error, _index) \ + static ssize_t error_##_error##_show(struct device *dev, \ + struct device_attribute *da, \ + char *buf) \ + { \ + return smpro_error_data_read(dev, da, buf, _index); \ + } \ + static DEVICE_ATTR_RO(error_##_error) + +ERROR_RO(core_ce, CORE_CE_ERR); +ERROR_RO(core_ue, CORE_UE_ERR); +ERROR_RO(mem_ce, MEM_CE_ERR); +ERROR_RO(mem_ue, MEM_UE_ERR); +ERROR_RO(pcie_ce, PCIE_CE_ERR); +ERROR_RO(pcie_ue, PCIE_UE_ERR); +ERROR_RO(other_ce, OTHER_CE_ERR); +ERROR_RO(other_ue, OTHER_UE_ERR); + +static ssize_t error_smpro_show(struct device *dev, struct device_attribut= e *da, char *buf) +{ + return smpro_internal_err_read(dev, da, buf, RAS_SMPRO_ERR); +} +static DEVICE_ATTR_RO(error_smpro); + +static ssize_t error_pmpro_show(struct device *dev, struct device_attribut= e *da, char *buf) +{ + return smpro_internal_err_read(dev, da, buf, RAS_PMPRO_ERR); +} +static DEVICE_ATTR_RO(error_pmpro); + +static ssize_t warn_smpro_show(struct device *dev, struct device_attribute= *da, char *buf) +{ + return smpro_internal_warn_read(dev, da, buf, RAS_SMPRO_ERR); +} +static DEVICE_ATTR_RO(warn_smpro); + +static ssize_t warn_pmpro_show(struct device *dev, struct device_attribute= *da, char *buf) +{ + return smpro_internal_warn_read(dev, da, buf, RAS_PMPRO_ERR); +} +static DEVICE_ATTR_RO(warn_pmpro); + +#define EVENT_RO(_event, _index) \ + static ssize_t event_##_event##_show(struct device *dev, \ + struct device_attribute *da, \ + char *buf) \ + { \ + return smpro_event_data_read(dev, da, buf, _index); \ + } \ + static DEVICE_ATTR_RO(event_##_event) + +EVENT_RO(vrd_warn_fault, VRD_WARN_FAULT_EVENT); +EVENT_RO(vrd_hot, VRD_HOT_EVENT); +EVENT_RO(dimm_hot, DIMM_HOT_EVENT); + +static struct attribute *smpro_errmon_attrs[] =3D { + &dev_attr_overflow_core_ce.attr, + &dev_attr_overflow_core_ue.attr, + &dev_attr_overflow_mem_ce.attr, + &dev_attr_overflow_mem_ue.attr, + &dev_attr_overflow_pcie_ce.attr, + &dev_attr_overflow_pcie_ue.attr, + &dev_attr_overflow_other_ce.attr, + &dev_attr_overflow_other_ue.attr, + &dev_attr_error_core_ce.attr, + &dev_attr_error_core_ue.attr, + &dev_attr_error_mem_ce.attr, + &dev_attr_error_mem_ue.attr, + &dev_attr_error_pcie_ce.attr, + &dev_attr_error_pcie_ue.attr, + &dev_attr_error_other_ce.attr, + &dev_attr_error_other_ue.attr, + &dev_attr_error_smpro.attr, + &dev_attr_error_pmpro.attr, + &dev_attr_warn_smpro.attr, + &dev_attr_warn_pmpro.attr, + &dev_attr_event_vrd_warn_fault.attr, + &dev_attr_event_vrd_hot.attr, + &dev_attr_event_dimm_hot.attr, + NULL +}; + +ATTRIBUTE_GROUPS(smpro_errmon); + +static int smpro_errmon_probe(struct platform_device *pdev) +{ + struct smpro_errmon *errmon; + + errmon =3D devm_kzalloc(&pdev->dev, sizeof(struct smpro_errmon), GFP_KERN= EL); + if (!errmon) + return -ENOMEM; + + platform_set_drvdata(pdev, errmon); + + errmon->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); + if (!errmon->regmap) + return -ENODEV; + + return 0; +} + +static struct platform_driver smpro_errmon_driver =3D { + .probe =3D smpro_errmon_probe, + .driver =3D { + .name =3D "smpro-errmon", + .dev_groups =3D smpro_errmon_groups, + }, +}; + +module_platform_driver(smpro_errmon_driver); + +MODULE_AUTHOR("Tung Nguyen "); +MODULE_AUTHOR("Thinh Pham "); +MODULE_AUTHOR("Hoang Nguyen "); +MODULE_AUTHOR("Thu Nguyen "); +MODULE_AUTHOR("Quan Nguyen "); +MODULE_DESCRIPTION("Ampere Altra SMpro driver"); +MODULE_LICENSE("GPL"); --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DE6E4C433F5 for ; Thu, 29 Sep 2022 09:44:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235536AbiI2Jod (ORCPT ); Thu, 29 Sep 2022 05:44:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40282 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234956AbiI2JoP (ORCPT ); Thu, 29 Sep 2022 05:44:15 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2119.outbound.protection.outlook.com [40.107.94.119]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E93A7146F84; Thu, 29 Sep 2022 02:44:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WgXMp1+MybFphg8qQ7cJg3CTQoS3ILEEhMFhfZhZlwfaKfaT/TRGUQC5aWzv4Hjlcj+/Y4mFsNr94ayiRQVL6Qic1uzm/qVpXEQu/Nbf5EBd3B8YXO0qXKkYVChoFJBWrfgFB3wK1griBcGk1HVjKjQP2kx1muCw28r/fgAX24KzFXm50ZUNcKsraMQsUyKHglxbdINOtQdf639ywNFP5CYKVpeDbFPmPjZ/WZXrCUCf3OBjYYBlsBY1WoRzGXT31uqjALgKjYG/EluxJxEh2GHSwMdUD6+VaDWRyxl+LqDsY/iS6L1n8F9mrdcBRkeAtJhP5FZacQo6DO5dWwh55w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xkBW859ZdBZmAWyKy90wABvS2LCe5tg5KiF9REzsHD8=; b=XxJqbT1M2UDxG8JeB/3GXUdnm8w10a+znEPn207mzBg5wbpQlveHtKRWWpsaliCQ8gA+PgHdWyhMp7DvEeRFp93SZnLZ8qmqfNTH7O4KMZQd/fdOh9GNfUI6ReQhnxhLRB9lYe8LVsl9pJ/u3Yqq9+/Q6amXB1gtTW2kOZTb/emFB/bEBeGSE0W5rTegh1ovxePZ3HeQJGpGQAum+/lpelc1pXKhBe8bYH4SK25Nn4cgJRQ232e14PIurE2c0NGrZM3bFos1lko/rkIQIVc/eNpnQYsPKgffdxz6drKBxYzaYyuQgmycHskpgaYSeLu7QrOcJPL5IFnhaGu1FnOWtQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xkBW859ZdBZmAWyKy90wABvS2LCe5tg5KiF9REzsHD8=; b=VaIDce9oYpHD8JEtwwRQv0KJOXU9ZUIna+UkB1f7wkHbaSgxoB7C2ubl96mm/5zE1XMpledIlkeYgsOGUU9FTtNpYkHUYlOki4hx1NVZ5DoHfl4S941k2EJ+cGj9CqWl3S3ozcebjMyom148nW03OxGhVYRbrY/083CcU785JtQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by SN6PR01MB4798.prod.exchangelabs.com (2603:10b6:805:d5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:07 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:07 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 4/9] docs: misc-devices: (smpro-errmon) Add documentation Date: Thu, 29 Sep 2022 16:43:16 +0700 Message-Id: <20220929094321.770125-5-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|SN6PR01MB4798:EE_ X-MS-Office365-Filtering-Correlation-Id: fcbbaaea-ff49-473b-5717-08daa1ff2706 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5AR7Gdhj/Pql8uuspKbSYR0sH8ayNMysOiKj1luTQ+3Un4IY25LivzO7+oo7ZYTx7CfP5hXcrTv/FxLENbP/Dn/Zd8hIzsoZDPOj5c+rkPd/OiGZdsb//nbdhx6y742PfQYRa0Ec5ta8+66CvYniShhnPX8pwjGDmF1Dla3rLFIGxY26zwmnouvSms3ir2XMNFlmg+mvmBwWo2TlxwM5RZ5Hq42obXOGsNUiMNhehK/AOquA7B0XoQC/CiqI2kEj8/Iihfyi5AC/XaPxnu4AbHg9n7ZsRRR5xT6W2kDdXWtEx7C45DDFlyLew9e+bRBzttEjGcxp3i2sz5ykloAOdV34hsDR2wY5Pg1hXqpf/SotTtQ0kn+pyyyNBnT84c+gUYjbjqo7wyaGd+YUBxI3b9wg5FZolX4P2ZrHOf60Y/dpdVipf2AYThU+EPG9UmeYF81CnHzY5FD7eQvhGJQmh/HVDzAsMF4S0bUSrSYNvHtVZXBCsLt8hVxqrjMMjXr22vR1zqObkaOjwTrNwBTRsZ4TUQEFEUafCWCX4zRplAB55AUveflwtHF2p0soBpw17e4mZtIrT+HiXqUtr7srAgv6ZpJXcz/C3oJYa0TwEeqhf7MHs4w/KAWqytP5NwabxoczpE0Q8PuXTnGWe9+IZzGkcvd5WdwELkU49xjDEqMrfRwbLax/beTcBxZTY5XhxlfYRBkaZ7gV9OV8FwtB6oIEu9UzWrfkQF74+xYhn6TIjjeiPp8+6eA9POP+q4ymhyfJi+ml5lO1EGofT0x5OxtIF53jcpu5l/QRhkexTDs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(451199015)(921005)(66476007)(66946007)(66556008)(8676002)(4326008)(83380400001)(110136005)(478600001)(6666004)(6512007)(6506007)(2906002)(26005)(52116002)(41300700001)(316002)(38350700002)(38100700002)(86362001)(8936002)(6486002)(1076003)(107886003)(5660300002)(2616005)(7416002)(186003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/evpUTrKDHh7KoIZ4CV3yr6qurmIvgf/OnfvIY9Rc7itFPNNzdPsHKVi3aSP?= =?us-ascii?Q?NEEgX8VImroXLNeav5cGaquBpZGLQj0JRAk+27fL3LofzD04EiPaXLdYt/s2?= =?us-ascii?Q?Z+6rCCVd0Nnv6dNX7Rka1rDa5QrJeRdLY1pxxpcwgNodcqffyrmzQtoUh4YM?= =?us-ascii?Q?9+xkuOaGRdkKGwzfJe9DAjxgmK61M1WQ6RlgdFXBI75eWefoPenaA77ReTMQ?= =?us-ascii?Q?scnB13L32RisCsttg8RdqSeMDi1gaBEZ6k0ppHxDQYN0I4wCRt3QWXcCqbsd?= =?us-ascii?Q?8q8g/X49tCJCyCsOdLCQVYOvm9M4dXr6rLMHMs7hQvUrA4WRy7+rMKGjiQCb?= =?us-ascii?Q?n4VCX+UcWhTpKrlpKw8pdnLbc8rY2A16AZkcOXn8FZtBjN+zqQricqj2ghHY?= =?us-ascii?Q?rFYVsPXK/HwJ/SdMUw9cfW9+NZ0o4hQUaMqxbvbWvI2GoxCyn6epe9/waUz3?= =?us-ascii?Q?9T+xidCj/maHPlK4LqNeHfUPIRv814AB2usfM3XBCbLlq/yBA4mvC54hbIXk?= =?us-ascii?Q?MpcfEjImWAkNG28Mhp/JZGoh1keSZY8c1PNtHRtSbJoNXp8KYGMIhUfVMTdP?= =?us-ascii?Q?/cHER6zs5fMU2F2e1nCy4D+cfJARsUhgZCvGCleuGUInmifsUy3Ay5mqySZi?= =?us-ascii?Q?DvieZ4/PGmpySqoks4QnDWoW66naMtDsknr+apfkCGT4Onh5YvjYpCkl3RmM?= =?us-ascii?Q?drzvwISowWgW8XNk83W5IWTL8eIgalaeqc+Le0HTvPe9kAwU2Bqqt2H7biyP?= =?us-ascii?Q?/Tv+3d94mUAGVRqyTqOk6DCw6Nqu1dmboyPoSar+gsW63Jx/v7L0dKQuZluv?= =?us-ascii?Q?udXCaZMoiu6Fu+0n9ec7I+mOYazzjPKFWPwvwLBgrkPSNwLauaU+BHGgVwIF?= =?us-ascii?Q?ITfymPaubUAFIlx7hyD5uVsfnVCFZLHLPKcN2h4Wcxf36JEE1Du7L9QPoddT?= =?us-ascii?Q?huq1fBT0nTMMwRI8nuq2xmaK+IcPR7N1n8Q7Jr0L/7Ai+Yh9vXUnxtAL2kc2?= =?us-ascii?Q?Er4r2ogX0iwOG+pfmkqETJ+Zb1E2D3vLjkrTTFRoYBGaTM5szz9CFByqDUXg?= =?us-ascii?Q?HeZmY+qmidMvgID6I6IB7B/AknhcJzr20pfU15kWAw46bEVbqnVL3ygLn91O?= =?us-ascii?Q?nP02D2Z9xgk9OCNsMsw8x3dFO6ufhmx1Ab5UUtJkkKnNokEZu8wIzw7YroUX?= =?us-ascii?Q?IHS6ogAboqjkZG0GFRPOBljIBPRlAmbXrWkzUD4XCiVUU4OfP4oRP4E7b1+t?= =?us-ascii?Q?Fg6hyn3JMvNit+LCn50rKCm6mGFrJ1kFOiv0nkGahD3dkCwQ+jUXkhHX3CG5?= =?us-ascii?Q?AQ/287MniVrQ2funGWtq70DKu6IF0HstnEUFl155ChAB9T0X5eeaM5V5ttfN?= =?us-ascii?Q?SOIdU6x9Z3w+dydjl5aeslYAtru5VVJgtBb8Qb7B3WeM6J23s4n9jdGr9kcu?= =?us-ascii?Q?r5kEkIGDUL5/8/A0eBanhRtdwzMJAJezM8HCxWtY4Cm7C3NvnL2lAKOYPJFd?= =?us-ascii?Q?GDbneaMlY0sub6gfFs2rfG5uMrQ2T/C4nkjJL+xbAccSdRP90xm7G+d1fz7w?= =?us-ascii?Q?5baN05RELMYuUpW/MhPnVxIO53gFCBimGn5eEGOoS6lgrFhBXRovRPOQxBkP?= =?us-ascii?Q?rJavaA2qnT9ftmlxLFLHxEQ=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: fcbbaaea-ff49-473b-5717-08daa1ff2706 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:07.4804 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JUZ39OEEXMO1CljaHOrHgtoOeXtOcDsTbj8B2KjmgbnnSpnZaUeuzK0LBdl38yRTSPtHEzxEQHgKZ3JnF/YMcte1qx9N8i8oU1sg0Axb2/k= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR01MB4798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Adds documentation for Ampere(R)'s Altra(R) SMpro errmon driver. Signed-off-by: Thu Nguyen Signed-off-by: Quan Nguyen --- Changes in v9: + Fix issue when building htmldocs [Bagas] + Remove unnecessary channel info for VRD and DIMM event [Quan] + Update SPDX license info [Greg] + Update document to align with new changes in sysfs [Quan] Changes in v8: + Update to reflect single value per sysfs [Quan] Changes in v7: + None Changes in v6: + First introduced in v6 [Quan] Documentation/misc-devices/index.rst | 1 + Documentation/misc-devices/smpro-errmon.rst | 193 ++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 Documentation/misc-devices/smpro-errmon.rst diff --git a/Documentation/misc-devices/index.rst b/Documentation/misc-devi= ces/index.rst index 756be15a49a4..b74b3b34a235 100644 --- a/Documentation/misc-devices/index.rst +++ b/Documentation/misc-devices/index.rst @@ -27,6 +27,7 @@ fit into other categories. max6875 oxsemi-tornado pci-endpoint-test + smpro-errmon spear-pcie-gadget uacce xilinx_sdfec diff --git a/Documentation/misc-devices/smpro-errmon.rst b/Documentation/mi= sc-devices/smpro-errmon.rst new file mode 100644 index 000000000000..b17f30a6cafd --- /dev/null +++ b/Documentation/misc-devices/smpro-errmon.rst @@ -0,0 +1,193 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +Kernel driver Ampere(R)'s Altra(R) SMpro errmon +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Supported chips: + + * Ampere(R) Altra(R) + + Prefix: 'smpro' + + Preference: Altra SoC BMC Interface Specification + +Author: Thu Nguyen + +Description +----------- + +This driver supports hardware monitoring for Ampere(R) Altra(R) SoC's base= d on the +SMpro co-processor (SMpro). +The following SoC alert/event types are supported by the errmon driver: + +* Core CE/UE error +* Memory CE/UE error +* PCIe CE/UE error +* Other CE/UE error +* Internal SMpro/PMpro error +* VRD hot +* VRD warn/fault +* DIMM Hot + +The SMpro interface provides the registers to query the status of the SoC = alerts/events +and their data and export to userspace by this driver. + +The SoC alerts/events will be referenced as error below. + +Usage Notes +----------- + +SMpro errmon driver creates the sysfs files for each error type. +Example: ``error_core_ce`` to get Core CE error type. + +* If the error is absented, the sysfs file returns empty. +* If the errors are presented, one each read to the sysfs, the oldest erro= r will be returned and clear, the next read will be returned with the next = error until all the errors are read out. + +For each host error type, SMpro keeps a latest max number of errors. All t= he oldest errors that were not read out will be dropped. In that case, the = read to the corresponding overflow sysfs will return 1, otherwise, return 0. +Example: ``overflow_core_ce`` to report the overflow status of Core CE err= or type. + +The format of the error is depended on the error type. + +1) For Core/Memory/PCIe/Other CE/UE error types:: + +The return 48-byte in hex format in table below: + + =3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D + OFFSET FIELD SIZE (BYTE) DESCRIPTION + =3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D + 00 Error Type 1 See Table below for details + 01 Subtype 1 See Table below for details + 02 Instance 2 See Table below for details + 04 Error status 4 See ARM RAS specification for = details + 08 Error Address 8 See ARM RAS specification for = details + 16 Error Misc 0 8 See ARM RAS specification for = details + 24 Error Misc 1 8 See ARM RAS specification for = details + 32 Error Misc 2 8 See ARM RAS specification for = details + 40 Error Misc 3 8 See ARM RAS specification for = details + =3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D + +Below table defines the value of Error types, Sub Types, Sub component and= instance: + + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + Error Group Error Type Sub type Sub component Instance + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + CPM (core) 0 0 Snoop-Logic CPM # + CPM (core) 0 2 Armv8 Core 1 CPM # + MCU (mem) 1 1 ERR1 MCU # | SLO= T << 11 + MCU (mem) 1 2 ERR2 MCU # | SLO= T << 11 + MCU (mem) 1 3 ERR3 MCU # + MCU (mem) 1 4 ERR4 MCU # + MCU (mem) 1 5 ERR5 MCU # + MCU (mem) 1 6 ERR6 MCU # + MCU (mem) 1 7 Link Error MCU # + Mesh (other) 2 0 Cross Point X | (Y << 5= ) | NS <<11 + Mesh (other) 2 1 Home Node(IO) X | (Y << 5= ) | NS <<11 + Mesh (other) 2 2 Home Node(Mem) X | (Y << 5= ) | NS <<11 | device<<12 + Mesh (other) 2 4 CCIX Node X | (Y << 5= ) | NS <<11 + 2P Link (other) 3 0 N/A Altra 2P Li= nk # + GIC (other) 5 0 ERR0 0 + GIC (other) 5 1 ERR1 0 + GIC (other) 5 2 ERR2 0 + GIC (other) 5 3 ERR3 0 + GIC (other) 5 4 ERR4 0 + GIC (other) 5 5 ERR5 0 + GIC (other) 5 6 ERR6 0 + GIC (other) 5 7 ERR7 0 + GIC (other) 5 8 ERR8 0 + GIC (other) 5 9 ERR9 0 + GIC (other) 5 10 ERR10 0 + GIC (other) 5 11 ERR11 0 + GIC (other) 5 12 ERR12 0 + GIC (other) 5 13-21 ERR13 RC# + 1 + SMMU (other) 6 TCU 100 RC # + SMMU (other) 6 TBU0 0 RC # + SMMU (other) 6 TBU1 1 RC # + SMMU (other) 6 TBU2 2 RC # + SMMU (other) 6 TBU3 3 RC # + SMMU (other) 6 TBU4 4 RC # + SMMU (other) 6 TBU5 5 RC # + SMMU (other) 6 TBU6 6 RC # + SMMU (other) 6 TBU7 7 RC # + SMMU (other) 6 TBU8 8 RC # + SMMU (other) 6 TBU9 9 RC # + PCIe AER (pcie) 7 Root 0 RC # + PCIe AER (pcie) 7 Device 1 RC # + PCIe RC (pcie) 8 RCA HB 0 RC # + PCIe RC (pcie) 8 RCB HB 1 RC # + PCIe RC (pcie) 8 RASDP 8 RC # + OCM (other) 9 ERR0 0 0 + OCM (other) 9 ERR1 1 0 + OCM (other) 9 ERR2 2 0 + SMpro (other) 10 ERR0 0 0 + SMpro (other) 10 ERR1 1 0 + SMpro (other) 10 MPA_ERR 2 0 + PMpro (other) 11 ERR0 0 0 + PMpro (other) 11 ERR1 1 0 + PMpro (other) 11 MPA_ERR 2 0 + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + + For example: + # cat error_other_ue + 880807001e004010401040101500000001004010401040100c00000000000000000000= 00000000000000000000000000 + +2) For the Internal SMpro/PMpro error types:: + +The error_[smpro|pmro] sysfs returns string of 8-byte hex value: + <4-byte hex value of Error info><4-byte hex value of Error extensive d= ata> + +The warn_[smpro|pmro] sysfs returns string of 4-byte hex value: + <4-byte hex value of Warning info> + +Reference to Altra SoC BMC Interface Specification for the details. + +3) For the VRD hot, VRD /warn/fault, DIMM Hot event:: + +The return string is 2-byte hex string value. Reference to section 5.7 GPI= status register in Altra SoC BMC Interface Specification for the details. + + Example: + #cat event_vrd_hot + 0000 + +Sysfs entries +------------- + +The following sysfs files are supported: + +* Ampere(R) Altra(R): + +Alert Types: + + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + Alert Type Sysfs name Description + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + Core CE Error error_core_ce Trigger when Core has CE = error + Core CE Error overflow overflow_core_ce Trigger when Core CE erro= r overflow + Core UE Error error_core_ue Trigger when Core has UE = error + Core UE Error overflow overflow_core_ue Trigger when Core UE erro= r overflow + Memory CE Error error_mem_ce Trigger when Memory has C= E error + Memory CE Error overflow overflow_mem_ce Trigger when Memory CE er= ror overflow + Memory UE Error error_mem_ue Trigger when Memory has U= E error + Memory UE Error overflow overflow_mem_ue Trigger when Memory UE er= ror overflow + PCIe CE Error error_pcie_ce Trigger when any PCIe con= troller has CE error + PCIe CE Error overflow overflow_pcie_ce Trigger when any PCIe con= troller CE error overflow + PCIe UE Error error_pcie_ue Trigger when any PCIe con= troller has UE error + PCIe UE Error overflow overflow_pcie_ue Trigger when any PCIe con= troller UE error overflow + Other CE Error error_other_ce Trigger when any Others C= E error + Other CE Error overflow overflow_other_ce Trigger when any Others C= E error overflow + Other UE Error error_other_ue Trigger when any Others U= E error + Other UE Error overflow overflow_other_ue Trigger when Others UE er= ror overflow + SMpro Error error_smpro Trigger when system have = SMpro error + SMpro Warning warn_smpro Trigger when system have = SMpro warning + PMpro Error error_pmpro Trigger when system have = PMpro error + PMpro Warning warn_pmpro Trigger when system have = PMpro warning + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Event Type: + + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D + Event Type Sysfs name + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D + VRD HOT event_vrd_hot + VR Warn/Fault event_vrd_warn_fault + DIMM Hot event_dimm_hot + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 79227C433F5 for ; Thu, 29 Sep 2022 09:44:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235433AbiI2Jos (ORCPT ); Thu, 29 Sep 2022 05:44:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235119AbiI2JoU (ORCPT ); Thu, 29 Sep 2022 05:44:20 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2126.outbound.protection.outlook.com [40.107.94.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88E64147F16; Thu, 29 Sep 2022 02:44:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mn5KUbN6XlPM+uA/H74F0ipabFAaT5HMYcZsrvyiXqSiOZ/5JEaVhH0939hrc/Avh3Qu0BCz2Nxmlpg23lTjdo97aX+T5VvE6A2B84B+J4Yl9rOvA0zAkOnS6MTgRliFaVVB6DwRLUxDrcilVwNhXnPkliJy8/oFtm9E+scug4ZfOVjAlVMGTpzGSBi4wq0oX7y85CMWOvK0ADBgcqjOc5kVT9p6d9TKWDcMIG6Qb5RD8eZH/VvrxJQfQZKKKWomEaJJwWZXtptT6K7rVEf4IOvGqdcIYlsdAldOqOyyNPfNqNXsoUSYcZrHJtPXV8FnMBRYIWfP672WpR9xPq6oqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qaav1Tk4ZmXRvJWChsyR395QKuSnIUzzdqfP7igEtx4=; b=lums15Z0CBj89oUjXQt1xQ8kKhKJJUkyY0PAl/adyRe2phPhSuSCzSNTlqZyCsBxk2qktMD7ZXC2EWiRlmlXYWYFh5LbmA5F4I2ckf9QX+Z+JuHQs1A0Z2KzYLohwM5PI1Nmfr8xjqa1YbcGM8JC7Rt17Jx4r++Smd6UwxJZrmSVr+vAySKP7XLN6MWw5JP/d6zLZgjqb0DVPWkCI+UqNnv06nVeoBSA9A9S+mY1pQefCQ1nnLcU0sc0U1gY3Ov0n+oGqW4GB/l+5T+S35/wfwoCesdxQyQEdhNkkvFEmXPJEgm0NGla35LokMSFeu33G2p/Z4gQJ0bE6nCBYo+x5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qaav1Tk4ZmXRvJWChsyR395QKuSnIUzzdqfP7igEtx4=; b=AGpqcrSoG1W9v77tbbgEARveiWmn/JUghjJsJP+8GoPWB4itwj2ZTLIctbT05yHhSbgtf+Q377UnN+yfgIizK6j20uSD5kVKty5fTO7hdH+YgUAgiCT7jUtT0UX+y0nfKcZu0oOXSl65FMkqUgPsZGIfxSK1ccsU454rZvrcpfU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by SN6PR01MB4798.prod.exchangelabs.com (2603:10b6:805:d5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:13 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:13 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 5/9] misc: smpro-misc: Add Ampere's Altra SMpro misc driver Date: Thu, 29 Sep 2022 16:43:17 +0700 Message-Id: <20220929094321.770125-6-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|SN6PR01MB4798:EE_ X-MS-Office365-Filtering-Correlation-Id: c57f180d-2bed-40f8-0d8d-08daa1ff2a74 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PaVvqs9xrWqWzbLFvzvAffi9rTqL5YA+mY5RMMgZUz3Dtv5pGMHIAAymwT8yMSfALkwAk+oVuCi7fTvk7l58rtqrHXnWGnN5rGuCfpnOCwNQE1CCUlNeKN23pTLNh16KDEMAbwSDe+HiWF27f96lH1qp9uUnkiuPx6JGSsc1vaurRUegKoyojQa4ri8QBR5OALw+J2lEBOW4YL5SS2qe5ERUzaMIDnPWYLGkc71NpBaBhtWcpnG8WYu8TmHOs/ENARZyiBN9Q38mE6pXOH/Uy8XFNt11kBrTRZ6J5GD6fuoHGIeqqUSYWIBegMr098ZBwNtAj+jD+eEjZcB7pPjJz/ORQdD8dp97AdAjJr4+YG5/tmp+OdqLlDljHpOr53ajag2iIgbJKKv5G0oH/v5fgWF06e1gRSez/g+6o7jEf+kuz9veG30YTwxKm1qbBBxCfkLrms9k73s5nyeyN7fv0MjxfVuZESoI60b61tVs62vhofmQMq+9erSSr5ltj2wvrT9y0o7jMHvhM/ek/sjXdS6nAxAWBOkOP/wuwXHptP7cvDPwwoZFm8lzqCRaIxSM8vDHStoZIxhobS01YXCJl+Elop4zjI/Uom6wGK8hHR7hNEcCMvt28LqxU/QT0WqKOetMqSmkn4OkNHCawntmxukTR4m9y6cIdesdVr/MZoIGUeTWp9rQtsYjwubkHnIo757F3GNT4XjjS8KeCtz4W2q+qY0NDljsOiGcLTBre3gcYGHSL2uM33LNMxBzZK2RPH+SMWfFF9N7j6zZt60KtW60Xy+8+DmgHpnw4TENGJw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(451199015)(921005)(66476007)(66946007)(66556008)(8676002)(4326008)(83380400001)(110136005)(478600001)(6512007)(6506007)(2906002)(26005)(52116002)(41300700001)(316002)(38350700002)(38100700002)(86362001)(8936002)(6486002)(1076003)(107886003)(5660300002)(2616005)(7416002)(186003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7mubyrgxTFJLTO3XbdjUNJJ2DhQ0JUxHmGCSHmfcuUcn4pwVIgqlOY9jdX4n?= =?us-ascii?Q?AheTFGXG9awWWNhcq600zXPSe/Cc7GmAXAadNnKHCiww/XfqVis9NIt0ks/W?= =?us-ascii?Q?N54AxYp9kCABr0QeUh5JPye4fc9gTLhyzPHrvwJradDJIWx17rSDQHpMHVOU?= =?us-ascii?Q?RhDhcvU/Y/aVqbFDZXd+EqkudJzlbU2tjSCrs55XdVboi2/GNx+Or21+vhBo?= =?us-ascii?Q?jXP94Z7VcRvR7vCUsVZrrbwTByk1qjdBxG415tHJzd4MpK8Lo2ZTQss4+LBw?= =?us-ascii?Q?bmm93wU/TwB5jenMOSs7VIIuV3v8/36+m5006QXQpj2MRNEeRSdfIxsQDkYI?= =?us-ascii?Q?XJ+DWD9NWF8xfmYR5F7ewXbwjsvdJPLbyIrVR8Fsd5cuvGChgK3pQ77baSI0?= =?us-ascii?Q?WRBehiZSNeekpWsgrlSOsHGkxmgN6KglvNFfuI2nrN165vuy2lyQngTYFuSC?= =?us-ascii?Q?uOWsZOCh75PzmwzJGoSTGdf4ShPyOrMdlUYYcSa8+EN4P+zs6XVbsPZDss2w?= =?us-ascii?Q?jJVxagT2R2GW90zQ9JYgm0Wum6y+cG9AhJh6iTYd8yIOLKBGUm37oIB6Vfo4?= =?us-ascii?Q?QS38Da9rik6cS8Ci/kfBkd0YSSnLV5BRMo7llUNQw9icK8f1YkJQHiC89WoG?= =?us-ascii?Q?0bN8mSmo3TnkzsycR91BQWGzQKAsX+hlyXKW1LsSSsw5kE8QLbAhAbeREZQj?= =?us-ascii?Q?bkOn/XyNvvWnJ7Tgw9BRahCbsFkUu6koOWx9d1bxJr8pWghCy3zWAWwmx+34?= =?us-ascii?Q?yWq4FtAlHk5WFz1/CSIKtZMToOiVUv5YRU0m3UQyr0XHILC3K+EJREbXCwqT?= =?us-ascii?Q?t4ZcL22fOLAIopO4UcHjX2HMRF8eOIjF/SjYLN/jNe2cMPFcN7K9Cuvgmkpu?= =?us-ascii?Q?j2qU0ki1g+QnbBVwYTYMwntIUt0j4mNo1qb2nvuQRV45rBxZ3dc90pnEE74p?= =?us-ascii?Q?TNZTsuwO43IjFD7ZQPBZaWkGN0JQRhkgqVvPVruAAnnMmMPHn9MFgD31g8W3?= =?us-ascii?Q?Rbqa/TcGHVdQ0UU8XIpOKPv2EFL//5ET1IbziWxH1ehHoVba17iDSJZik0+I?= =?us-ascii?Q?Bn0ztYFzTYtOkNBV0QjU/scLZxB8Kv2pwFgaAYp3lCbfIRXpsJZpTO/Fctil?= =?us-ascii?Q?XO2rCy5CbdPWw6gDi8F9jDukL7INP2az4MsJwddxsCHdJtd3UcYNjCOylqlw?= =?us-ascii?Q?dO4FEWGhBwXjcxSaFXSG1shnzgLBFNipr8yk55YgFE4SsfwiCGqY8dKhBvhn?= =?us-ascii?Q?WobmfTw+Sp3IS+co9foBhGiwwlj0rBnXanj+yLnQs8GSMCcdXHegcqZX1X/Q?= =?us-ascii?Q?Nq5xO3oyTnfGwTVy4quVKcsyuOcS66w2zQj7WtKAIcRY5cG30qSJkYyAi6rb?= =?us-ascii?Q?C88OEZk3FQ1HiyrfkbsxQX0ZTHFMifDGv7vYt/W0yvBlXzimBsowslNjzQGn?= =?us-ascii?Q?3D5NTQUQileNp9OreyM4DBtr1sKUHXfvHXRkMpOUdZfyKYIRl9UbKhLPqFyQ?= =?us-ascii?Q?JVIpXu9dBJsAdl/3681VMbdSp64K6rc5VLB08Xeuc9qVvc41WAtGMLyTkrhN?= =?us-ascii?Q?nFHySSEcRDBR5oOaAkQTRx9Fh2ZbRgHKPi55Oq+39g4NNPnIiMnEENVQbb+C?= =?us-ascii?Q?ZvFGDTvkWU7xWu1wZauAKso=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: c57f180d-2bed-40f8-0d8d-08daa1ff2a74 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:13.0920 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0A+DJuvhUWjcCblaSstOs+vNGntKicBtrXiF/UrpOlKEjKbvKjZX1JtJYSnMH0v9sqrKs+8gBDQkudsiAHtkdnQaiUntiYpu2P6+pLfStPo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR01MB4798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This commit adds driver support for accessing various information reported by Ampere's SMpro co-processor such as Boot Progress and other miscellaneous data. Signed-off-by: Quan Nguyen --- Changes in v9: + Update SPDX licence [Greg] + Use ATTRIBUTE_GROUPS() [Greg] + Use dev_groups instead of sysfs_create_group() to avoid racing issue with user space [Greg] + Refactor code to avoid clever encoding issue [Quan] Changes in v8: + Update wording for SMPRO_MISC in Kconfig file [Quan] + Switch to use sysfs_emit() [Quan] Changes in v7: + Fix wrong return type of *_show/store() functions [kernel robot test] + Adjust patch order to remove dependence with smpro-mfd [Lee Jones] Changes in v6: + First introduced in v6 [Quan] drivers/misc/Kconfig | 10 +++ drivers/misc/Makefile | 1 + drivers/misc/smpro-misc.c | 145 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 drivers/misc/smpro-misc.c diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index b9ceee949dab..9947b7892bd5 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -188,6 +188,16 @@ config SMPRO_ERRMON To compile this driver as a module, say M here. The driver will be called smpro-errmon. =20 +config SMPRO_MISC + tristate "Ampere Computing SMPro miscellaneous driver" + depends on MFD_SMPRO || COMPILE_TEST + help + Say Y here to get support for the SMpro error miscellalenous function + provided by Ampere Computing's Altra and Altra Max SoCs. + + To compile this driver as a module, say M here. The driver will be + called smpro-misc. + config CS5535_MFGPT tristate "CS5535/CS5536 Geode Multi-Function General Purpose Timer (MFGPT= ) support" depends on MFD_CS5535 diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index bbe24d4511a3..87b54a4a4422 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -24,6 +24,7 @@ obj-$(CONFIG_KGDB_TESTS) +=3D kgdbts.o obj-$(CONFIG_SGI_XP) +=3D sgi-xp/ obj-$(CONFIG_SGI_GRU) +=3D sgi-gru/ obj-$(CONFIG_SMPRO_ERRMON) +=3D smpro-errmon.o +obj-$(CONFIG_SMPRO_MISC) +=3D smpro-misc.o obj-$(CONFIG_CS5535_MFGPT) +=3D cs5535-mfgpt.o obj-$(CONFIG_GEHC_ACHC) +=3D gehc-achc.o obj-$(CONFIG_HP_ILO) +=3D hpilo.o diff --git a/drivers/misc/smpro-misc.c b/drivers/misc/smpro-misc.c new file mode 100644 index 000000000000..6c427141e51b --- /dev/null +++ b/drivers/misc/smpro-misc.c @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Ampere Computing SoC's SMpro Misc Driver + * + * Copyright (c) 2022, Ampere Computing LLC + */ +#include +#include +#include +#include + +/* Boot Stage/Progress Registers */ +#define BOOTSTAGE 0xB0 +#define BOOTSTAGE_LO 0xB1 +#define CUR_BOOTSTAGE 0xB2 +#define BOOTSTAGE_HI 0xB3 + +/* SOC State Registers */ +#define SOC_POWER_LIMIT 0xE5 + +struct smpro_misc { + struct regmap *regmap; +}; + +static ssize_t boot_progress_show(struct device *dev, struct device_attrib= ute *da, char *buf) +{ + struct smpro_misc *misc =3D dev_get_drvdata(dev); + u16 boot_progress[3] =3D { 0 }; + u32 bootstage; + u8 boot_stage; + u8 cur_stage; + u32 reg_lo; + u32 reg; + int ret; + + /* Read current boot stage */ + ret =3D regmap_read(misc->regmap, CUR_BOOTSTAGE, ®); + if (ret) + return ret; + + cur_stage =3D reg & 0xff; + + ret =3D regmap_read(misc->regmap, BOOTSTAGE, &bootstage); + if (ret) + return ret; + + boot_stage =3D (bootstage >> 8) & 0xff; + + if (boot_stage > cur_stage) + return -EINVAL; + + ret =3D regmap_read(misc->regmap, BOOTSTAGE_LO, ®_lo); + if (!ret) + ret =3D regmap_read(misc->regmap, BOOTSTAGE_HI, ®); + if (ret) + return ret; + + /* Firmware to report new boot stage next time */ + if (boot_stage < cur_stage) { + ret =3D regmap_write(misc->regmap, BOOTSTAGE, ((bootstage & 0xff00) | 0x= 1)); + if (ret) + return ret; + } + + boot_progress[0] =3D bootstage; + boot_progress[1] =3D swab16(reg); + boot_progress[2] =3D swab16(reg_lo); + + return sysfs_emit(buf, "%*phN\n", (int)sizeof(boot_progress), boot_progre= ss); +} + +static DEVICE_ATTR_RO(boot_progress); + +static ssize_t soc_power_limit_show(struct device *dev, struct device_attr= ibute *da, char *buf) +{ + struct smpro_misc *misc =3D dev_get_drvdata(dev); + unsigned int value; + int ret; + + ret =3D regmap_read(misc->regmap, SOC_POWER_LIMIT, &value); + if (ret) + return ret; + + return sysfs_emit(buf, "%d\n", value); +} + +static ssize_t soc_power_limit_store(struct device *dev, struct device_att= ribute *da, + const char *buf, size_t count) +{ + struct smpro_misc *misc =3D dev_get_drvdata(dev); + unsigned long val; + s32 ret; + + ret =3D kstrtoul(buf, 0, &val); + if (ret) + return ret; + + ret =3D regmap_write(misc->regmap, SOC_POWER_LIMIT, (unsigned int)val); + if (ret) + return -EPROTO; + + return count; +} + +static DEVICE_ATTR_RW(soc_power_limit); + +static struct attribute *smpro_misc_attrs[] =3D { + &dev_attr_boot_progress.attr, + &dev_attr_soc_power_limit.attr, + NULL +}; + +ATTRIBUTE_GROUPS(smpro_misc); + +static int smpro_misc_probe(struct platform_device *pdev) +{ + struct smpro_misc *misc; + + misc =3D devm_kzalloc(&pdev->dev, sizeof(struct smpro_misc), GFP_KERNEL); + if (!misc) + return -ENOMEM; + + platform_set_drvdata(pdev, misc); + + misc->regmap =3D dev_get_regmap(pdev->dev.parent, NULL); + if (!misc->regmap) + return -ENODEV; + + return 0; +} + +static struct platform_driver smpro_misc_driver =3D { + .probe =3D smpro_misc_probe, + .driver =3D { + .name =3D "smpro-misc", + .dev_groups =3D smpro_misc_groups, + }, +}; + +module_platform_driver(smpro_misc_driver); + +MODULE_AUTHOR("Tung Nguyen "); +MODULE_AUTHOR("Quan Nguyen "); +MODULE_DESCRIPTION("Ampere Altra SMpro Misc driver"); +MODULE_LICENSE("GPL"); --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 254CDC433FE for ; Thu, 29 Sep 2022 09:45:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235026AbiI2JpX (ORCPT ); Thu, 29 Sep 2022 05:45:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234972AbiI2Joc (ORCPT ); Thu, 29 Sep 2022 05:44:32 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2121.outbound.protection.outlook.com [40.107.94.121]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 071B3147F33; Thu, 29 Sep 2022 02:44:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=V9xDSoZXcKoE8Q6W71d4RoYRsuYK89FLyy3iJEJjzXcntH1ncw2DQ4+7pty/0k0tXvJm7yZqcPvZo+Xhtpud/PI3YGxI6njuFRDHE1o+C5zjeYTGq7iai/aB3HdrF5U30sgk2RVMbBIJ7C0gbkikymCLS7Wg1sYD8XEvFjXKWICJwtaX0bAJ2hKodF6jx+4ETk+bXi22qjCibha83kKTFa8Yb0/lgicuBvpYvnkqXqzRojT6GUmn0dM1vyUtrtgya3LdN98U7IrsWl29oZT+XF0r/lC9uvMeVOrXxZ+BB5rAGuBdrXO23XJ7AaczjvY/4Y8HJjEAWL0cQ/aJLMY1wg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CvER1QptHrDi9CZrnYx+sa9GYAX7FsotnibH1e/FLbA=; b=VQ4Jf4QWsHniQ/LQBvkQHLjl7LdHLAj+Ok70GkV95xhxIcmiw1++qaeFhDZFrLYN9i7eym9lmTEw8WoCMH0Yf3rylNwEZzLqCR6tUy0TkbKiN5imZeZBuGChK5+IJtLfshHqiQhMJ2lcbl6r+Te/FmXPBzL5QfEX0vCqlpOuD6rfXHbdP+p2wH3/r4P/lRgn2FaVBRDd1FxLAm2k4UTU6/FsMPBaTYyUd3I8STM74BF0tlppzFsfDMa/P/MRc2Ej9ioluhq5vwucaXyOwB7VVUScaxnvLDSgH0ZE1ZXekNfgjeF/vSkXuJ/+8foJX0qK8njm7UwmgjYMkID1EnvMgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CvER1QptHrDi9CZrnYx+sa9GYAX7FsotnibH1e/FLbA=; b=k2si6vyK5USLz3HzYrdtEsgtWTgXKXovt4K+MUBbYmxvgrsQldw/a5n/yEE/eoFAmt5sjNzIif904KvD6oedb3NLeQJ7QroyN1LrdssaMik4xcBvKpPTnT8Abr43VZirDYwM3Pk/AgoRPLoRE5+mtI5N5VSSHOZZWm7OwJOIhm4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by SN6PR01MB4798.prod.exchangelabs.com (2603:10b6:805:d5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:18 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:18 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 6/9] docs: misc-devices: (smpro-misc) Add documentation Date: Thu, 29 Sep 2022 16:43:18 +0700 Message-Id: <20220929094321.770125-7-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|SN6PR01MB4798:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ac40aac-b81d-433e-274b-08daa1ff2ddd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Tm1VM2VftdKoMbYtFWIa6kfKd0k9CU4cRfFpZD3DLDxXkCSW04H4ePbCCgp34r751TB+hevpWPbGsnb/UxUCjwo0T1+IXZGsE/5qbiT/Y9thMsndXbtTmLTzS1w1t5X64xOgncaBA6+p3xVT0UkvW6oUchVSM54uyuqik/JxrPAdGMP9Ci9Xn58xfERC7NegwGR6ktugyTkROkyg4yrFis84V7pNYUlaaO422JOKkc/u4LeniQ8RXEVGweAJ13tkypilGbFNA+JioNiPBSj+7tRcZM5SiwAqF1uBC2wo9+vjSHHoYgQEGQFECalL7UQcRLVZuxAsAfKhe1nvkZ1+9QQPlGuJ8Ih6VxcIUBFnAXqJy1ZZfSRZlgoBiQh7ToXZUrjAFvZbe+VFgPW3YZhRWnC/VESPk7Azm1Gq0API//Shl8XokRiBfawxA0vFCv4dDbfvAxf6CysioJdYPBeZfJnD1MUAjetuX30U/1oklQ0OdJQuYRfB7IWkIVygVzEwHV6nCl813fT0oM9Prkfb4CAzeDAQCfWPeFivMZrhivQovtpgaoD1gZT+CNYdg8bzuQGzlFfcmoOWmyXpUXYWoaAzQG0V8nAP2AtFJdbLdx/QmsgLVzHbZdo2sAZkJO70kSIiIMU9nfibd63sh1/3z+8KUdilKx87OaVjo7I1tEyMFc1NCQ6NwsBfZtUui1123Hh0uLrmyVmUolg8l7Th92VQe3Xu2LlTmAKjLsRch8AYpLxZgkiUVvKbGVwuvYKj4f+TwzS+QHVuN1xJLF47W2qR2zhW4YciJ1zjbW93Hec= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(451199015)(921005)(66476007)(66946007)(66556008)(8676002)(4326008)(83380400001)(110136005)(478600001)(6512007)(6506007)(2906002)(26005)(52116002)(41300700001)(316002)(38350700002)(38100700002)(86362001)(8936002)(6486002)(1076003)(107886003)(5660300002)(2616005)(7416002)(186003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1VPApfgMHe/81+8JrDCcNuOfDBT+gdCDBt4SRZK4e2OEBQ+YeY9YXaMxbMtE?= =?us-ascii?Q?5yjTsQqI1hImngwkBjmk11Ljuq6eCxbp/ZZuqsKoGviI2Tfgl3sHywE3AWr3?= =?us-ascii?Q?rIcydKng7e2TRWZBFGj0W5SgPsgALXP4ToEds++AAhxv7UFGlbL9d20EnTRC?= =?us-ascii?Q?lWsNKmeDPEVUmWesGvBe1yHvMBXgNe/As9Oo+c4P4xJtzpWancZB0nAw3A78?= =?us-ascii?Q?2Jo22ih4Hd6inB+khcOgn2+xZYm5E4QqWPWTbABrUQ5L0SG0RXG2LbRNxUfO?= =?us-ascii?Q?bC0q7lRoMQmX6PGrHGRzD15oN5asbla/tgDA8YtoKkYpRJEN8darTN/BwO3x?= =?us-ascii?Q?XGKWrAY1SGNKmrGaXnBf/002maT+6dOA7OqTo/YNq1lMXWvTJP+NUsNPKLaX?= =?us-ascii?Q?vHTIwuPqSw6qxpuTFBohADPYyi8RwaDkyPi3BJIQsYmNLIuj6n7mcFkk2PSJ?= =?us-ascii?Q?uQ8nCSyqi9xGC90x7GT1U39OqBnzQAJeIfj8vZfYFOnnzZ8ZfvBwRSbHbYVe?= =?us-ascii?Q?gVld/ZMcgo0dh6VdYVWgklSAjtQls/R632w+taGkIc/d3jMIOBzsMHxu9uiG?= =?us-ascii?Q?Ykvh9YWEm+FwgQy7XgtIwu5KiqxmRJvZekQAsdMT/CzFsLm/RKmlrCpeMJq8?= =?us-ascii?Q?XR/vIKCAvr2qYewA7+oQ/CVATqwZND7WoLJJcrRlHN+LVoh8tTaSl3coCvAA?= =?us-ascii?Q?Is1ZaLr0jdGXNrn67HOdqwOO73QWaJPue4dhn913adGPMmb12hYtUiIB7fIt?= =?us-ascii?Q?5UhKBaZLTgOas1I6Y8G5/sB3fviGK4tvRPbGZE941nu64iPYASCLa6Cm0UMr?= =?us-ascii?Q?j8Pr4266sejf+/liOqeiYWu5MWyLbHqnvbSKsC0TxWZeB8GHk9KOAcNasLq0?= =?us-ascii?Q?a7gCWINJkZEVeRfjj8kASbWtSTbRKYD08UW232yNTZ500C+talTjGDxk3QWc?= =?us-ascii?Q?StxrLq6BU9/Q+/GUhqiBxXln/fU0L5E/skcVj4oIT6UmmmyFmnxg+27jqmL0?= =?us-ascii?Q?fsTFhTRV6bnRaky6hzLnTZ2uYVRWs4Tltb2zRGx2dq/4uG/rV3fTE9gGQ/k/?= =?us-ascii?Q?glJ61YNnGHqfl49mfD7Ysvt3gKHP59MRNZPYIPUFmnStJeSdvNnPG8dtFDfp?= =?us-ascii?Q?p911+5FsY9QHsTNxR5E0rtrkdlMoGsAg4kmUwWdYSrHbQmioFsu/8YgbU9J7?= =?us-ascii?Q?PFMnKZDr+dxD5CvnQPNLIqttImLJ2c/kjg4cC5sS7pO74XyvMNx7z/iQwuSo?= =?us-ascii?Q?VZLOU0LcLgsl5yFNSJf5LszPB6YIy3mf0FziQldWY0s3WCJAExW1b6FIIMfz?= =?us-ascii?Q?yZJh8ADwD+QhMb05Ytoox40IkmnzKbwgwLl+FxHLXB+sKOZgyhulNV3OZuJ7?= =?us-ascii?Q?tlwzo2m4w9hX3e2MqD7joU5h7JtintvRtt1PqJe8ocpKRY2JN5P4GWKjzfQN?= =?us-ascii?Q?CwdMDVL3/sTDTshybbErLd8WY4B70UX7TluhVy9YnId0ElZyPDgChOry4xyS?= =?us-ascii?Q?78wYgs/dtdq2rFQnC1UNEQJGZlvjECFoY/pBwkv89bNIAhpOm2hfnX+hDljH?= =?us-ascii?Q?lz7C9HIp4GxSEt/IlBJRP7GKR/JZ6XL5h/AYi7GzuTZfLFqBB9V1WWl1mYsq?= =?us-ascii?Q?H2StBgijd5ZlZud/AHAsexc=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ac40aac-b81d-433e-274b-08daa1ff2ddd X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:18.7983 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 72HQDg9hEVgf8Ba9SmKSyR6ht0GfMAmnRcHMr4N3kN13YYvD9fPnmOzVd7effT08l8Np8JnFFlcQ+Xc2IVyB8UT8LShonTcI0AXo5nGpWWo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR01MB4798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Adds documentation for the Ampere(R)'s Altra(R) SMpro misc driver. Signed-off-by: Thu Nguyen Signed-off-by: Quan Nguyen --- Changes in v9: + Update SPDX licence [Greg] Changes in v8: + Update to reflect single value per sysfs [Quan] Changes in v7: + None Changes in v6: + First introduced in v6 [Quan] Documentation/misc-devices/index.rst | 1 + Documentation/misc-devices/smpro-misc.rst | 82 +++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 Documentation/misc-devices/smpro-misc.rst diff --git a/Documentation/misc-devices/index.rst b/Documentation/misc-devi= ces/index.rst index b74b3b34a235..b40cd1b402f7 100644 --- a/Documentation/misc-devices/index.rst +++ b/Documentation/misc-devices/index.rst @@ -28,6 +28,7 @@ fit into other categories. oxsemi-tornado pci-endpoint-test smpro-errmon + smpro-misc spear-pcie-gadget uacce xilinx_sdfec diff --git a/Documentation/misc-devices/smpro-misc.rst b/Documentation/misc= -devices/smpro-misc.rst new file mode 100644 index 000000000000..d21be4a09e69 --- /dev/null +++ b/Documentation/misc-devices/smpro-misc.rst @@ -0,0 +1,82 @@ +.. SPDX-License-Identifier: GPL-2.0-only + +Kernel driver Ampere(R) Altra(R) SMpro miscellaneous +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D + +Supported chips: + + * Ampere(R) Altra(R) + + Prefix: 'smpro' + + Reference: Altra SoC BMC Interface Specification + +Author: Thu Nguyen + +Description +----------- + +This driver support the monitoring and configuration of various miscellane= ous +data provided by Ampere(R) Altra(R) SMpro processor. +At this time, these include: + + * Reading Boot Progress information + * Configuring SoC Power Limit + +Sysfs entries +------------- + +1) Boot progress + +SMpro misc driver creates the sysfs files ``boot_progress``. +The format of ``boot_progress`` file is as below:: + + + +Where: + +* Boot stage:: + + 0: SMpro firmware booting. + 1: PMpro firmware booting. + 2: ATF BL1 firmware booting. + 3: DDR initialization. + 4: DDR training report status. + 5: ATF BL2 firmware booting. + 6: ATF BL31 firmware booting. + 7: ATF BL32 firmware booting. + 8: UEFI firmware booting. + 9: OS booting. + +* Boot status:: + + 0: Not started. + 1: Started. + 2: Complete without error. + 3: Failure. + +* boot progress: 32 bits boot progress code + +The sysfs ``boot_progress`` only reports the boot state when the host is b= ooting. +If the host is already booted, it returns latest state. + +Example:: + + #cat boot_progress + 0102808454A8 + +2) SoC Power Limit + +SMpro misc driver creates the sysfs file ``soc_power_limit`` to get/set th= e SoC Power Limit. + +Reading this sysfs return the current setting of SoC Power Limit (W) in de= cimal string. +Writing the desired value in decimal string to set the SoC Power Limit in = Watt (W). +The range of SoC Power Limit is 90-500(W) and will be ignored if out of ra= nge. + +Example:: + + #cat soc_power_limit + 90 + #echo 95 > soc_power_limit + #cat soc_power_limit + 95 --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FF92C4321E for ; Thu, 29 Sep 2022 09:45:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235552AbiI2Jpk (ORCPT ); Thu, 29 Sep 2022 05:45:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235499AbiI2Jou (ORCPT ); Thu, 29 Sep 2022 05:44:50 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2121.outbound.protection.outlook.com [40.107.94.121]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 926EFCEB; Thu, 29 Sep 2022 02:44:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XRwbIYXgZcO/6yKoeJksfAY7eHHN4z+8foJxcfLeUH/O1cIaNME+SRutBkxltYyGM67eWKdnT+e68UrDmjwZX/JQvpOsazTDfecIYQcD/rpAYP3DwlprbUP+EArtAlM6iXgOqM97lGdOau12tK/7AjAwSlpuU17NxHFHZYhE0RkEYEHHJ2TFDYc3IA+/d/LkfcY+T1W5QV9jelfrN0afaUZH0lPI02RlhO3cLaGiFWLTC5pIjvoXJIT8yyw/3Rzklz8h7OvjkA27AVHucLnih/E8cDUY1WWdScvgQeTXbunHV/ATsXucFIgINgImRqoMLMmERdS7m28/6dz8USgpdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=M2pKKBbAFeSWafqjLWF1Kgy+yNGfTi9YzV/7SyfIs1A=; b=ZgFJ+po8rsXhuLxBD9gnF7kEYtHMGU/RsNQynTu1nHrNnfNGD9iDESRuxeUde46WBHVn0rqJ0jvaw87ewvnqz5MqoF6EGsQFXFzH7VWUp0X11gRNhN2/dIyFmFGgtu3VVFqNTcq9AMZqNZ5Wxvw6yuO0T6yAz8GO4tcPxDaETtAJz9c6Z66iEwWZindBKPnV312YOS/PNa1cahmRHFUazbtyWqbQzCkuLcdN0hw73xwDin3QBAlanluFmfVO5kkJxDXFcgxFm95gg85fECykEEDKleY6tXY2e2du5hYxrRqPZwJa0kBxcEAyPQXauv7RgB2HfpVzYZly4qKn8T8Aig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=M2pKKBbAFeSWafqjLWF1Kgy+yNGfTi9YzV/7SyfIs1A=; b=iQhGllRcIgOD7mLH5+vekoxYJSbnRHQ8oCC24E8MuPalRW0egsLM/ZXQnRBrWKJDcdiYCpZejvr26ANFg+OwapAlMfXGfq9OM98ssVSaaPQ37ZjkG/neM9OhfyPum3O2Y2O3n2dEf6qiePZJ0vNUU2R3RwoOBGtN/pgbfIT/B1M= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by SN6PR01MB4798.prod.exchangelabs.com (2603:10b6:805:d5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:24 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:24 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com, Rob Herring Subject: [PATCH v9 7/9] dt-bindings: mfd: Add bindings for Ampere Altra SMPro MFD driver Date: Thu, 29 Sep 2022 16:43:19 +0700 Message-Id: <20220929094321.770125-8-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|SN6PR01MB4798:EE_ X-MS-Office365-Filtering-Correlation-Id: c46a8a0b-2565-4f5e-b3cb-08daa1ff3156 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1/O2wCV9vu97mAfWpnWRl+78PT083596ScFjg3yQ1/XFoNY4id66zyEHRkbaLDhFAm4rEWB6v4CppMqB2MV7ICk9nvoL0C2WlkS1O3jwB7QwJyPzmkv9miVl/l3KasgWfoOETHbBk1AY93eREwzozc/Knt1Bf+WRzL8g5cnwrkawK0pWOnsf4mq85O7ZHYgkQPAcjDjSg99sc9cVmqRSimJ9n1Kz41ndA3EpvK453fbB27HqM9k01rfdsLhze1VnYBpNByfYbVo4J6CPUFREYMFBmUy+h9WMm3tMYJL2liMgmwJUOaO74MCJNTNufxHYwxQ3pRNKe2kqcRvaDf9hhNqJuce0WGzFGHMIQkQw9SWTAYSrSh7bhERjVIqSJgtVOzFyk1SC+D9HOnenVaHRKMULRX6xGJVOijPrWHb5isdskRH3qS/MY66KUVQy1dCBvHTqrtM9q1paroBNCjcqb2y/TkOfHVqMOiq+j10uaOVRsEAdnjudKGsj3h0Y1On+5ChcaVSQIzqJfrjCrJnfj9+Ir/CS/La3tG0+Z2HGruKYizzInumi8JJa/+6pjnrLCzZlYavn5qhXdfvy58Njco/DSYI44gd43uZnRXPu1zv0H2jKL9rAqJIZjYWDdOUfYHxyKZSS1vcQT1chZ1JE9QAjdj8Y7LW+yPGie3r8XEwBCViJnyR0wKEf5ODZY+29YfWH0C/kudTjNkmjecbM5RXQDB2vztzGW/6pt5/ikhfDIeb6YD3Uyr3JURcHJBdiguYQmUxxUH5b9xKLoz3m8U08wa5uiOrO+aHkoUyiIkDWE4+VeYGZuw153cwzhI8YDTaZSefEIJO6zCVRs+7pPZZr+FWN0eTDkLt1Lqx7JVQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(396003)(376002)(346002)(366004)(39850400004)(451199015)(921005)(66476007)(66946007)(66556008)(8676002)(4326008)(83380400001)(110136005)(478600001)(6666004)(6512007)(6506007)(2906002)(26005)(52116002)(41300700001)(316002)(54906003)(38350700002)(38100700002)(86362001)(8936002)(6486002)(966005)(1076003)(5660300002)(2616005)(7416002)(186003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?k2Qk7Bwj2+32YT7SiXZB3tbqnRWRrM6gVDxVoeuJ58kG0lD6pOkYmuk8P/Fo?= =?us-ascii?Q?oxfRDpUl4obyOqYVIH7uE8MEjHQMOqF3bZsXL7QVQjuuRIwLb6uah0lmfeeO?= =?us-ascii?Q?q1qB6NA26KMPE3YTclUSx2dowG5f/fmM9xzEJ+aR9pRJuhKrjiewmNfSXG/5?= =?us-ascii?Q?vV1ET/jfKTctW92rAqvyQ9D9hlWw88Q2OS7D0PO5SI5Dd3TRITgkmnwQoHeq?= =?us-ascii?Q?/5nKBCtsFhdwLNRisy5l6kGGAurFkjCII6MM9Vc6m8h3AGqohUBkB9syiso0?= =?us-ascii?Q?Nvlezuv7WfhxFzCykeYE5TYpk+HSCrUYTfI1UVesyQFOxuJjJePgH9R0xTlz?= =?us-ascii?Q?7lHrJjWvH5utvtopA1Je7xUyqLM2KWR6nW0DGOe2SSUCl8mH8whT8WWvnzVT?= =?us-ascii?Q?8BIrxLdwOf1Ep8C/uyXgA7yPDg6V7c8EVJJHkxlaGY/uYsCiorfVu0HNGkhh?= =?us-ascii?Q?e2SjTIFTMmh/RChbIYSoZTTrMN9QDBPoHEBu2XvxQ4BnGWJYzOIawHg87kEd?= =?us-ascii?Q?/y2nGpsw1vAJ/Bd5cxVuU983U6WFsfkbrrOG0jz4ujnsROyFm4nxrM7JAvOU?= =?us-ascii?Q?6ZbLCz0BpXKcIxTmLqtw3ElgrhLTawDlFIJl8Aokl2Y+iWvEqnSm5Gt9xK4C?= =?us-ascii?Q?jD3Rk5JgRUNcp2PSUSFOMZAeDTy/TF8DrwmoKpma1b2X3gYkBjX9bHi0EdSW?= =?us-ascii?Q?pV4kfVfqlPqXANs57qX3kU497BA9E6fT1Ach7ofpyHTl44UBeScY3cn36Hz+?= =?us-ascii?Q?FRsCMGERWBMm9y7u28iPAZia5/pqbbq/Pbq6yLgO+0E+oWssOGkMkmBHc7Hd?= =?us-ascii?Q?VTWyEdeBGUqg1VrhMYmUg5xP/BH3syIXj87cJBFkqiRlufui6pseuO8Z48GM?= =?us-ascii?Q?x/Pp7lSByNnGpvo2s113uS0fM+AMAjDrR8CDU2HC92+EyNK735w2YHqEYEgA?= =?us-ascii?Q?fPSXAWBY3qtZkgnhyXKRgGElPHEFNXwOfb3412RGHHVk2IpBSXWwzjPXQzHB?= =?us-ascii?Q?u5HmomnWQd8NrDvq/qF9bSrPK2iAs+YtNs0fRtyr8pLiUitZuKZqFpYcdaVM?= =?us-ascii?Q?l6DjfG35L+FmywURqLFCZw/jE/vGM3GezyuhhWWrHpiC/WcQGRFSOPgCKwBa?= =?us-ascii?Q?gG82qb97qjikPJdDavfpd1oPFiMqzwYlRAKG2GexBbu3tUnaTPxMXUZVedH7?= =?us-ascii?Q?2XvHWxiO6tzebUh5vfE8qTxjOU51H3wuyWoMMRMRxVqOztAAPS4SGQ9kkomx?= =?us-ascii?Q?7qm7CkfJ2ad25UV3MYzHL24fx3lbftMKLGbGvqTltHt1D27Ec83rfbzIRFUM?= =?us-ascii?Q?TUzCTKgA4P04qE1E78zeijhH4tbUEIWpLHC5p1vRCGHk0ZWBB1HPs5ILGsqY?= =?us-ascii?Q?eAtWzwgUezUBZhrAl9DMlDb6Y+jLPTJRYJRA39gaaRmF5Vbk9AVNcyP+k0/V?= =?us-ascii?Q?S0UXcxC+agoYEjpnWzMno5G8ZXv+Vs3zc+oaRyccb3d9QTYP9b1SDaas5FwC?= =?us-ascii?Q?MqsMpmRWfmEFTjkKTCl1zn+jC7rdS3eMGDGTFx4rrHWLnS66xlGzRULMw5Uh?= =?us-ascii?Q?sdtd1oJW9Tv9jsbxa/NdytbvmcdKL24OrHdSwKiVncU88/UYQypUnZpfpRN6?= =?us-ascii?Q?AkVwTKEl6pn8wM2tTK6jZxo=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: c46a8a0b-2565-4f5e-b3cb-08daa1ff3156 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:24.6597 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: t25muwaw4YLhZ9XlfgjPFc0zOwMimotY+gFkfeMgsAjdtD3+9MhnuIrn/6Ds9awWRoF4hAcEecjEUOr/m9YuFNXrkGsFILlmGXsmiu9mk9Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR01MB4798 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Adds device tree bindings for SMPro MFD driver found on the Mt.Jade hardware reference platform with Ampere's Altra Processor family. The SMpro co-processor on Ampere Altra processor family is to monitor and report various data included hwmon-related info, RAS errors, and other miscellaneous information. Signed-off-by: Quan Nguyen Reviewed-by: Rob Herring --- Changes in v9: + Update SPDX license [Greg] Changes in v8: + Removed unused #*_cells [Krzysztof] Changes in v7: + None Changes in v6: + None .../devicetree/bindings/mfd/ampere,smpro.yaml | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/ampere,smpro.yaml diff --git a/Documentation/devicetree/bindings/mfd/ampere,smpro.yaml b/Docu= mentation/devicetree/bindings/mfd/ampere,smpro.yaml new file mode 100644 index 000000000000..c442c3cdffed --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/ampere,smpro.yaml @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/ampere,smpro.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Ampere Altra SMPro firmware driver + +maintainers: + - Quan Nguyen + +description: | + Ampere Altra SMPro firmware may contain different blocks like hardware + monitoring, error monitoring and other miscellaneous features. + +properties: + compatible: + enum: + - ampere,smpro + + reg: + description: + I2C device address. + maxItems: 1 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + smpro@4f { + compatible =3D "ampere,smpro"; + reg =3D <0x4f>; + }; + }; --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4911C433FE for ; Thu, 29 Sep 2022 09:45:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235418AbiI2Jpo (ORCPT ); Thu, 29 Sep 2022 05:45:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234594AbiI2Jo5 (ORCPT ); Thu, 29 Sep 2022 05:44:57 -0400 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2108.outbound.protection.outlook.com [40.107.220.108]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 02E7DCF7; Thu, 29 Sep 2022 02:44:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=McGz46XMYec8odkmrOVHqwnNS9rwN1KvTfuH8rMhE2mUs6kKVLFarHbcZcHi+yLA5ZQZKEEa3n5cBS5NLy7cyZJugeWl09/D6rpdJeXjhiaLIEs7KEd1CKvdakZNOx1aBgiujDBC+Dz7S6dzxph94GjJzrLOH0Chj1kTo/IJdpXitllan6rkYfBVZEAE8CYGvWz11eZoLdybEbWEMC3H2VYbZ0VhixWbMXW6jkQe5k3+OFCaDpCcE+si77M3CLnQJrfc+xBguzuDxogoj+i4ojBxyqmieRCRlI5PtSWh2XVKA25uitiGc3YKX/KmK6C6WEsueRkuJS9wsR6BgU60/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ob5rrouwYluwRSkcEf/1rWXKuCEjUn/B+x1vO3AMhpU=; b=mORdykbRBvpUR93OpB+7dgnsOp6rV7Ve4V/qBMr7u4kkGRFjAoIpX5FOFTRH7v86wFdRE8SsVseY29aQFsFMvH4XklwoFzIAo01wUvjG3cDKT8XqdFdyHSgFvm5X/2gPBcnS2aa/mmrigUiB9scF4yEr1RBje/pOKlSJM2KPcV13IqJoHFRX6dZu1o6zfhhsYu70RNs8RfygrAnOz0VZwZcwIY/JgUqbMxaAqriuyk6QV4uQ2tRUmXrsKPS0fJwQukMn5UxXWR31vPv+DeSEEJZMrCL4x0Q5A7QRglrS1HZt6EZNKrTJCUeSe6W3iCZDRpyEPQ7ZzP+YwjjOlWBuig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ob5rrouwYluwRSkcEf/1rWXKuCEjUn/B+x1vO3AMhpU=; b=biuXb/2/xa1brtFrkV0bSZw5RAfpRNsM8PwkrOG4YXzmo2Q2bloUsNMSNE+sSKOYSLa0IH16YEVr6T07O4zx9segN5MYxSvY3pc0f0+yej9oxBsy0OlJu/9Zh+wj0GCJh6eLeYX/kNlLB2DPOfBod6rBwBy3YfFEfb+fVzSGYS4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by MN2PR01MB5503.prod.exchangelabs.com (2603:10b6:208:11b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:30 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:30 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 8/9] mfd: Add Ampere's Altra SMpro MFD driver Date: Thu, 29 Sep 2022 16:43:20 +0700 Message-Id: <20220929094321.770125-9-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|MN2PR01MB5503:EE_ X-MS-Office365-Filtering-Correlation-Id: 13fcc3d7-07cc-4ac5-09fc-08daa1ff34ce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SXC1go2keEVsCD9yxIpTUKGFcXFsoPjKh/NQchefiSvJI16nbT4rJxb7JW7s0228M06SnE1ZIALN5Q0IMgb1W6G5H8f7JdPMBko6fKm/mLbguCCZJWILeJYwFojEbIHb0iAgijnlRMMcSkauDvtwWDEoYioeUZnSWP+2fAbC6Xh6x4DePvpN35X099ud7P0xwzaazS1PIGGcnkGkMt8R4mrbV2jWPJEuUvfhnqtRTfLIn7Y68DZr4exBWVqdC43HgvLzpuPqAuxYJTgwANR4PWG19oGvzLSXPW2Vng4WxCwqD/Lr2uOa7VNzbkDCwsv4OwirBqZUlyrbl8jIaJj3EpBcRlapL7ZCYVh2akMmOuWPAxC40lh6c5LET/kUJ9hMxhmVhbVisnxl7dB1oSYjv4HeR1QjWBbz2Ngqkj9rDV0mYRJ/wG0V5aSU1BXlXc7Upr6OjnGE7jE1Sh3nJ59RrHy9f5boHA2mhIyhj7mbzKNhFLSelT/ey+m1twfH+TeftoRsvku6IkLpXTDuY1JGngmBcasH1jVDrZwnrITF9pH3/r1ycpyYiIplt5flTaChvT8d0r/Upsc2EfyWPE/yaGB2DkZyhK2h5ELMwVEsovBLSg8tHeL62RQPXdrcS3O12IHA56fZ8JOQuVkLJLNoED363gLCVIuFE+QdoezDQf8zssEa6acnOTQTk5/UvFY083w/NshQkgKWaE1yeIKDZM2+dEaMTNOu7VltkkMowhwYbhjNKt8uV9epZCevLFsksT2fyDEnABquSTMuybzF935ibYzL4AdJakxP0AdpAS4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(136003)(346002)(366004)(376002)(39850400004)(451199015)(6486002)(478600001)(186003)(1076003)(110136005)(5660300002)(6506007)(7416002)(2906002)(2616005)(921005)(6666004)(107886003)(66946007)(66476007)(8676002)(66556008)(4326008)(316002)(26005)(6512007)(52116002)(8936002)(41300700001)(83380400001)(86362001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ix2OBWpIgav3BC1V7j0jlx7qwDjnZT3PZhe8n6fQotkP7Olzp1CljZa5mXqb?= =?us-ascii?Q?pQaMw3KwRywt6UfJIRA3+Z4qVDvNXv4XwuhZ8HSPPEZbKNzhJkFOHiv3V5VO?= =?us-ascii?Q?jAef+Yhm1ssCY3srZ42PLlctGWr+p3winFgkE1ho3h/nEUyECmqSqPwmyMTO?= =?us-ascii?Q?N6z1hbKO9gNginG/kg2jLDtFyV8iDlZlkKOf154bGpq569Zbpi0PG/H/oJe7?= =?us-ascii?Q?nBeIMvUysklkhYL5CuUDEPosMf1wV5LZgoCfxDGpa7e/PkHlR48YsSF9+Dom?= =?us-ascii?Q?Ij1LHcly2RSJVZl8OASYOC6KwcRU1BQp1kYLy9NXq0I4EMnDaOdX9R3o5h6Y?= =?us-ascii?Q?fCeRhS4XS8InJ+p0pUiflpYPovP367FDU4l9347UDkMDTwdUBT5MfDlazd8J?= =?us-ascii?Q?oqvc1H+k65gq4mrPTr1uTeU5haqz4ySFbqNMP8r9Yd5s2Vs05Xcmj/Fmbux+?= =?us-ascii?Q?MnM46BBfeDp3i2Y+MqHS/jZLfasMDtK+f3rpmjI881AVrehnjkNa9wAPKzex?= =?us-ascii?Q?qtbeE1ta/a7r9K53nHbyaULKVAwE1jplBw2Hsgu+38T44tNXa333UEmp2Ph9?= =?us-ascii?Q?Emb+ihe0GP0MGG7PGQSYS4bjlJupw7n6/PcD5iPpSU+2Goks3PeW6pj8XxaG?= =?us-ascii?Q?hBtZdw77Av2oe9uK3Oe7NQRoTFvwLCNuMf5o2RVHZnYFcrFXqR7MEJJVvOOc?= =?us-ascii?Q?aTOs8uOQiNBTzwlp1wC7KancRC0iMU+UlDj7Nlhu+TZI/A45hAUzSZS6Ka0I?= =?us-ascii?Q?pa68w5oZbvpdx78WhgLlxk+dIPtrPfAO/XGXg6OAhhEwonctiTz5GC/1o9m+?= =?us-ascii?Q?5r0eyg48z6J3JODKc9FafPYxDLvYJE+c4zQZhB4DT3Cn9lcTx4Y2zNkJ1j0s?= =?us-ascii?Q?JOsfFrAjzNEjZWl54SGHZa/69ROVuZGCz53iUPkBA2hy49+LVYwUbed7ghVt?= =?us-ascii?Q?+Akh6CLh+oE/1evu1ro6Ert8ANXv0KYiIYdBgtw8NazWn0oCV0twHrtBHMp4?= =?us-ascii?Q?Qm9KbS73jUslp4NcLfDf9e0S/WrhGnM58p1ahQ8NkqNDKuI8pkUp9c7he74S?= =?us-ascii?Q?kajxiMLybQk7XJ+pRZSwwr8bH9+qFWrGk2A0z1lb2TqRilcMtKdBK/cpvxHv?= =?us-ascii?Q?AomRSkYEDWZV5ln8Mn0ffH6mMtkAiMVsVIS+y2z5SWA+Wh491RVd0GP2PxUb?= =?us-ascii?Q?/zxRY+B6fXxXMuaGRtXWaeaiaq+ELWf6tmRJgiEsPf8XS0Y6ZdLCKNqA2w7a?= =?us-ascii?Q?NaN2c3Txv0QS6BP8M/Vg81DLZGo/3nZMwlSuSViHGf0kYkw/tPfawy7yaqcT?= =?us-ascii?Q?uEqWsuhb7xMGnzRZlsJlj1BveKCuJVnLyarS/8hGT4TGQmbI6og92PJKR8IS?= =?us-ascii?Q?VIvc8zexM4wMpCvyEuVFXComXcuggxCNX24I8n6gOl4gYlGwZyFKNqAlPxoO?= =?us-ascii?Q?tS2mO2Yu/v/H6VFj7XPEyHd/7huGPLT5bMOx3RrtjQV/e1OaY7AnfMs32AEV?= =?us-ascii?Q?GyDrsYq7jDmQl/hlLuvyiDoKo57iUr4m8VJ3nL7tpbBO9cYCWF+pnXRaEEfE?= =?us-ascii?Q?vmhlwXHVbJgMBI5I0NG+0fUpp+N//pYYL2EevzQKoF6Rqa/T+biAC8hyOrO3?= =?us-ascii?Q?RYyu1KoszdhKGJqEvf1WGBY=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13fcc3d7-07cc-4ac5-09fc-08daa1ff34ce X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:30.4746 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NqSrCJKlu8nDS7yB9ML7SJMRj3CsNrb4N8yERxLdxjXYo7SC6I4adoDbYG/XBOEAYV7m4O2Q5am9qgGf41eFGCLmMKFXZNvCAabCi9tdhtI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR01MB5503 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Adds Multi-function devices driver for SMpro co-processor found on the Mt.Jade hardware reference platform with Ampere's Altra processor family. Signed-off-by: Quan Nguyen --- Changes in v9: + Rename smpro-mfd.c to smpro-core.c [Lee Jones] + Fix include files in alphabetical order [Lee Jones] + Add defines to avoid using magic numbers [Lee Jones] + Return -EINVAL if device does not match [Lee Jones] + Remove unneccessary comment [Lee Jones] + Refactor error path handling in smpro_core_read/write() [Quan] Changes in v8: + None Changes in v7: + Smpro-mfd now significant changes in compare with simple-mfd-i2c driver, remove the copyright note about simple-mfd-i2c [Quan] + Install bus->read/write() to handle multiple types of bus access. [Quan] + Update license to MODULE_LICENSE("GPL") [Quan] + Add others minor refactor the code [Quan] Changes in v6: + Update license part to reflect that this driver is clone from simple-mfd-i2c driver [Quan] Changes in v5: + Dropped the use of simple-mfd-i2c driver [Quan] + Introduced drivers/mfd/smpro-mfd.c driver to instantiate sub-devices. This is to avoid DT nodes without resource issue [Quan] + Revised commit message [Quan] Changes in v4: + Add "depends on I2C" to fix build issue found by kernel test robot [Guenter] Changes in v3: + None Changes in v2: + Used 'struct of_device_id's .data attribute [Lee Jones] drivers/mfd/Kconfig | 12 ++++ drivers/mfd/Makefile | 1 + drivers/mfd/smpro-core.c | 138 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 drivers/mfd/smpro-core.c diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 8b93856de432..9e77f4762999 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -77,6 +77,18 @@ config MFD_AS3711 help Support for the AS3711 PMIC from AMS =20 +config MFD_SMPRO + tristate "Ampere Computing SMpro core driver" + depends on I2C + select MFD_CORE + select REGMAP_I2C + help + Say yes here to enable SMpro driver support for Ampere's Altra + processor family. + + Ampere's Altra SMpro exposes an I2C regmap interface that can + be accessed by child devices. + config MFD_AS3722 tristate "ams AS3722 Power Management IC" select MFD_CORE diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 7ed3ef4a698c..9387c3ddab4e 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -271,6 +271,7 @@ obj-$(CONFIG_MFD_QCOM_PM8008) +=3D qcom-pm8008.o =20 obj-$(CONFIG_SGI_MFD_IOC3) +=3D ioc3.o obj-$(CONFIG_MFD_SIMPLE_MFD_I2C) +=3D simple-mfd-i2c.o +obj-$(CONFIG_MFD_SMPRO) +=3D smpro-core.o obj-$(CONFIG_MFD_INTEL_M10_BMC) +=3D intel-m10-bmc.o =20 obj-$(CONFIG_MFD_ATC260X) +=3D atc260x-core.o diff --git a/drivers/mfd/smpro-core.c b/drivers/mfd/smpro-core.c new file mode 100644 index 000000000000..d7729cf70378 --- /dev/null +++ b/drivers/mfd/smpro-core.c @@ -0,0 +1,138 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Ampere Altra Family SMPro core driver + * Copyright (c) 2022, Ampere Computing LLC + */ + +#include +#include +#include +#include +#include +#include + +/* Identification Registers */ +#define MANUFACTURER_ID_REG 0x02 +#define AMPERE_MANUFACTURER_ID 0xCD3A + +#define CORE_CE_ERR_DATA 0x82 +#define CORE_UE_ERR_DATA 0x85 +#define MEM_CE_ERR_DATA 0x92 +#define MEM_UE_ERR_DATA 0x95 +#define PCIE_CE_ERR_DATA 0xC2 +#define PCIE_UE_ERR_DATA 0xC5 +#define OTHER_CE_ERR_DATA 0xD2 +#define OTHER_UE_ERR_DATA 0xDA + +static int smpro_core_write(void *context, const void *data, size_t count) +{ + struct device *dev =3D context; + struct i2c_client *i2c =3D to_i2c_client(dev); + int ret; + + ret =3D i2c_master_send(i2c, data, count); + if (unlikely(ret !=3D count)) + return (ret < 0) ? ret : -EIO; + + return 0; +} + +static int smpro_core_read(void *context, const void *reg, size_t reg_size, + void *val, size_t val_size) +{ + struct device *dev =3D context; + struct i2c_client *i2c =3D to_i2c_client(dev); + struct i2c_msg xfer[2]; + unsigned char buf[2]; + int ret; + + xfer[0].addr =3D i2c->addr; + xfer[0].flags =3D 0; + + buf[0] =3D *(u8 *)reg; + buf[1] =3D val_size; + xfer[0].len =3D 2; + xfer[0].buf =3D buf; + + xfer[1].addr =3D i2c->addr; + xfer[1].flags =3D I2C_M_RD; + xfer[1].len =3D val_size; + xfer[1].buf =3D val; + + ret =3D i2c_transfer(i2c->adapter, xfer, 2); + if (unlikely(ret !=3D 2)) + return (ret < 0) ? ret : -EIO; + + return 0; +} + +static const struct regmap_bus smpro_regmap_bus =3D { + .read =3D smpro_core_read, + .write =3D smpro_core_write, + .val_format_endian_default =3D REGMAP_ENDIAN_BIG, +}; + +static bool smpro_core_readable_noinc_reg(struct device *dev, unsigned int= reg) +{ + return (reg =3D=3D CORE_CE_ERR_DATA || reg =3D=3D CORE_UE_ERR_DATA || + reg =3D=3D MEM_CE_ERR_DATA || reg =3D=3D MEM_UE_ERR_DATA || + reg =3D=3D PCIE_CE_ERR_DATA || reg =3D=3D PCIE_UE_ERR_DATA || + reg =3D=3D OTHER_CE_ERR_DATA || reg =3D=3D OTHER_UE_ERR_DATA); +} + +static const struct regmap_config smpro_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 16, + .readable_noinc_reg =3D smpro_core_readable_noinc_reg, +}; + +static const struct mfd_cell smpro_devs[] =3D { + MFD_CELL_NAME("smpro-hwmon"), + MFD_CELL_NAME("smpro-errmon"), + MFD_CELL_NAME("smpro-misc"), +}; + +static int smpro_core_probe(struct i2c_client *i2c) +{ + const struct regmap_config *config; + struct regmap *regmap; + unsigned int val; + int ret; + + config =3D device_get_match_data(&i2c->dev); + if (!config) + return -EINVAL; + + regmap =3D devm_regmap_init(&i2c->dev, &smpro_regmap_bus, &i2c->dev, conf= ig); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + ret =3D regmap_read(regmap, MANUFACTURER_ID_REG, &val); + if (ret) + return ret; + + if (val !=3D AMPERE_MANUFACTURER_ID) + return -ENODEV; + + return devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO, + smpro_devs, ARRAY_SIZE(smpro_devs), NULL, 0, NULL); +} + +static const struct of_device_id smpro_core_of_match[] =3D { + { .compatible =3D "ampere,smpro", .data =3D &smpro_regmap_config }, + {} +}; +MODULE_DEVICE_TABLE(of, smpro_core_of_match); + +static struct i2c_driver smpro_core_driver =3D { + .probe_new =3D smpro_core_probe, + .driver =3D { + .name =3D "smpro-core", + .of_match_table =3D smpro_core_of_match, + }, +}; +module_i2c_driver(smpro_core_driver); + +MODULE_AUTHOR("Quan Nguyen "); +MODULE_DESCRIPTION("SMPRO CORE - I2C driver"); +MODULE_LICENSE("GPL"); --=20 2.35.1 From nobody Mon Jun 15 23:16:57 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF6E2C433F5 for ; Thu, 29 Sep 2022 09:46:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235213AbiI2JqK (ORCPT ); Thu, 29 Sep 2022 05:46:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234921AbiI2JpR (ORCPT ); Thu, 29 Sep 2022 05:45:17 -0400 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2108.outbound.protection.outlook.com [40.107.220.108]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AF22210FF9; Thu, 29 Sep 2022 02:44:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Kn9FzMFZ1+LeD7wHSYmKNtneq+z4t3m9Yx0Bpu1RcytALIYuWv8tah1tlc3pCecPIP0Fm6VDvN4Wg+djxGarYsaCqe2Hb2c0YOYLhilPY580yVp3sz/y6LyqLoRrmYM5Yq+w9EZWzV+0ekxEsxJD45Z4fyYp0elyXmOe3UxwsB6cgw8JnbfTJyhUDNHcNuJCn45GBOWW1Nm8BzCv4486d1M7/UffyeJ0XGo7JAw6QcQ91SOJ9f1CS/LrufVjqbvq8ymhHQio0JTIPDrf9BjHilLzfnGUePxc16/EnbFTfs5+O+8tLNLZwK49mbXXuCeDHOW7gR4xaqMwsk/It9BmSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fYHtBRlBTl2f/CuzjE06GSUC8C9hxa+md5Hl4+EAqIQ=; b=J2Op/l1DrH8xgGt+efwi1Y94KQZe9ilG3eowPk97zsOrHSAruBbGqmUpTPgDwYQdeQmCaNlXoK7veNDS+JXwgMuj7qQQskfu0itigRwv+H0SnBfMrb13epCvRGI97Pu57HLcwYNPXiY0nfYdkQQbxeFdUW4R3QbnnSVvK2MNm/7kGg17hErG8KIALfdnraZuXcjEoWuxAuXYiPiFYfBU8yonABQr9IvaIHR5iZoMZEEROKOkTg42ZehXVM1kVSwYt/RCPf/Xo/keWPZLNmG5Kh2p9NxRPFynR8KWdDVTSqZliI5ztMfKG0KSu4ZzM3DH3VJ41cZnUoAdOWzO11D1eA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fYHtBRlBTl2f/CuzjE06GSUC8C9hxa+md5Hl4+EAqIQ=; b=GY1yA5TlzIr4LenQUdi1OlgeBSjlspjNau+fBojUP9ROgKbhsQvDrwsxC4JKMftLayGdiuXdEH5Ega14pUb7CPO/p6mHuyoCGFKGGGYseEe53NjZYz86h7Kn3+9rMQ921mR3i6eUDi8ki9QFjUHyvfIqkyN5vQccDG7FlDA6BR8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) by MN2PR01MB5503.prod.exchangelabs.com (2603:10b6:208:11b::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.19; Thu, 29 Sep 2022 09:44:36 +0000 Received: from SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0]) by SJ0PR01MB7282.prod.exchangelabs.com ([fe80::7d50:e907:8e2e:1ff0%3]) with mapi id 15.20.5676.017; Thu, 29 Sep 2022 09:44:36 +0000 From: Quan Nguyen To: macro@orcam.me.uk, Lee Jones , Bagas Sanjaya , Rob Herring , Krzysztof Kozlowski , Jean Delvare , Guenter Roeck , Jonathan Corbet , Derek Kiernan , Dragan Cvetic , Arnd Bergmann , Greg Kroah-Hartman , Quan Nguyen , Thu Nguyen , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-doc@vger.kernel.org, OpenBMC Maillist , Open Source Submission Cc: Phong Vo , thang@os.amperecomputing.com Subject: [PATCH v9 9/9] docs: ABI: testing: Document the Ampere Altra Family's SMpro sysfs interfaces Date: Thu, 29 Sep 2022 16:43:21 +0700 Message-Id: <20220929094321.770125-10-quan@os.amperecomputing.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220929094321.770125-1-quan@os.amperecomputing.com> References: <20220929094321.770125-1-quan@os.amperecomputing.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR01CA0178.apcprd01.prod.exchangelabs.com (2603:1096:4:28::34) To SJ0PR01MB7282.prod.exchangelabs.com (2603:10b6:a03:3f2::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR01MB7282:EE_|MN2PR01MB5503:EE_ X-MS-Office365-Filtering-Correlation-Id: 00dbd368-f74d-4981-6b0e-08daa1ff3832 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 82dGJQxWOwj8M2/OiWI6WhkQCJSkpmmFHFrUrLlyzwoPFPy2lSZYcPWuSVMs/I4kDkETx8xvhIIg6RzLSxUo5vtnReY37E0nQbAgjWhPxZ9XIWQKvqVWRXpHQgh5a652E84NWRv6E47yAbjfAZph+DnU9tbl8VhXXPQ+lrxW/2Rt9caolbhUI3WsY3FfM2KCMjd5e3v8qFVJAysvCMbLke8qV6y74Hm0x1cGD4QQZkhBUetojvU1DY3akC868MQkGgdIRJyVS22ZZP2L3OuMQ0Pu6Nf4ms0Q/PprlRbqR0hmJkb8GqhXR/TST++KM4KCixYRsvC8ao7RjITIpebAKJd+6jw8jjW6CizYhugbfVKqIm6V0stxDArYFt6jzbdMrIBy36U8NJkCfteKAm6Vo9OY9ZJhMz4cM5cEFkW7uzWr9D5UZeOcDLlwmi10x9L8eNsJcUdQM5oemRgeomoaPA8SZy8tqwX50WlgzVJF1OrtSGAD63wu0wO1ghWTKmwYU7ipjifjlGAdpBlumD4TxOxqBN0t6TaEH9WUruRp/OmAtcSKAV9UOe6gHVxut741ddCPbong9GbGayl6GL1TKfjT4u1e2qbNvotbjNYUhsVimGyjVTJFxmoZoEGW2zr2P3+Yfjmi4oPuT8SBN/0FlRVk0gjmikv6HNupfSScCi0eHGH1Ym6ROXKEps5aSRtKXIIJ3K1DEQKySGf6stry98lLa6ZaYAxa768RLdQEmn8bryyk3Ez5ae6eHJysfWKSrF5505L3cDa83Ioxom2WYnp/Nv0KcHXxvju87QzN4Lc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR01MB7282.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(136003)(346002)(366004)(376002)(39850400004)(451199015)(6486002)(478600001)(186003)(1076003)(110136005)(5660300002)(6506007)(7416002)(2906002)(2616005)(921005)(6666004)(107886003)(66946007)(66476007)(8676002)(66556008)(4326008)(316002)(26005)(6512007)(52116002)(8936002)(41300700001)(83380400001)(86362001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SdoqTurq34UZnNLATBE2VblyhZwHkQ7FIUB9fOTIXBNc8pZiYC+ls+yTxOIp?= =?us-ascii?Q?tufmkq/+PmyO3gcG2JaMhWapYr68LlDJxz7UIcXgcSVhpUqOpPyGZL/8ObkW?= =?us-ascii?Q?TNVEXIyYFyHtav8VBNqObWWUSrXKamDWM4Fl1+TcWAL4sKQacezGibIxa3Tn?= =?us-ascii?Q?pLfb0DkyBfXRGHU6TuhxUNN/V8r3pR092+65tbvD5oJ2CJ7JwlqldTpsT7jH?= =?us-ascii?Q?kwROp8n+m7D172R2+vzzO/xPtX4PF+Dul8aPdgQe67vcf7TEe+mXHO2tsLLr?= =?us-ascii?Q?aOIubY4jjkp7551bygkyfVzX4Cvq5hZExsMB88WwSidCd+X9+pU59Rd39KJB?= =?us-ascii?Q?LfIDg/CwM2g+dd3cyCl4H5HA+4lN9I/Z7xz71xJvhJr24Ecn60lAYJodurn7?= =?us-ascii?Q?ZD3IWCuzvWVELpX29ST4E471X2zNVG9g7Yvy4EO2Y3gCM6Xv3uVqER2G59jc?= =?us-ascii?Q?r1nbMS18PjeT+RpnTFSNel+lEXIQxKp0EAP0NARxHjsJBfiET2XSpK26o8PN?= =?us-ascii?Q?BNcbX2d2AZyiz1cRY8O37nvOzHVn0V74k/Q6QKdtHdf65c0Q2gNIggGaaMkx?= =?us-ascii?Q?Gx01QRd4DXXinEk3svdYgbelTsPFGfh8Z05f2krOqllZrCCHn//RN1zWvji7?= =?us-ascii?Q?PJgwT9phYbGdztAwzqnp24df53pymJElhBS7/h3/7SyQldTnVlLv4YDonusU?= =?us-ascii?Q?jiTUZw5P4uoS9QfoyqixEn3UONcpGM+YFMwJjnmMbuJZ8k6CM1E2wzlBWwgO?= =?us-ascii?Q?gobybNxO6KfkSuZaTo443RXwSiCA2SQx9SzED3WRuGZbcpzsNmjYTqTgiSAz?= =?us-ascii?Q?oxvk60OKOz3kAVPC8+17sRRIbYwSovbDHQ1j5yfEQAxXPbgtMHK04JVxBTnO?= =?us-ascii?Q?9hiAnhUGFcO+lDJdixJuqF7YesANgeMxRNbcxOIA35ZX6l/jmmSL1LLVHkor?= =?us-ascii?Q?hBHspQfylF0kX/FO1xfVz4OxNHRdfyFmHQFm2vwW7vb+CvDRa7BUGpDX++6u?= =?us-ascii?Q?b4bCsOVjkc8yS8K0U6hrIzvQqLB/dCdtyLA4AJ2CF4tz1Juv94YcsCJDm/yV?= =?us-ascii?Q?8z4T8Sbrom6oVkJ1WjokJ7cBroWKny7cSkIgEj6k5MAx0ZaI4egezU6K6tu0?= =?us-ascii?Q?XQSnJ+6l8pNQpBYuNBuLDTOTecISBWx4iL48g4G3wWEPiK6MImXBNm84UhBa?= =?us-ascii?Q?JVaKsftEwxtxvsIhI0wFshRcJNVLxiJApS9CKdVAHCHa97x4zB+6M4Yb2rkM?= =?us-ascii?Q?BYkvkkFDfhUgUYls2WXTq2jBed3ifI55cf2YtcEzNGVGEIbNSX1ggqmgT1+T?= =?us-ascii?Q?boLq0hIKOS58N43Eon0JdfmzAT/hK9ZGnciOSQJMVUt/JTpE2Crjd9SUink/?= =?us-ascii?Q?oVdT4zdWKYeU2oBsVqSXpZMfYwrk1N35Y6NzwpvTrDV9dSJ8ed0N5hY2KC6A?= =?us-ascii?Q?eKKN03A8ZXrhKgs3l7uTXpOz4CpUNPlE4iWVxSZAFyibXp5H0OCMXaIwlYGh?= =?us-ascii?Q?LTwGqv1U4pAVetnwBrqOFWGaF+lSfLpA+lOnFgMAdt+ygqSoL7KuQJnSd+ST?= =?us-ascii?Q?8ZnWsf6YQgCTrQI9K4uhP/XNgdKTjlgX8Uzl9hVCXh6r50eG7rlqfBHFpWEZ?= =?us-ascii?Q?alcupiw1GdDVHztd4Kc9vYk=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 00dbd368-f74d-4981-6b0e-08daa1ff3832 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR01MB7282.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2022 09:44:36.1968 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: k+oQ4dKkbwbZE/UJ5f9JSq3rxqYUEugN7b1+zSXLPru+lLDmUm53+/KZf9MbsZebmt9XaQ+xzTfHM5Bri+c+KpJBQYpVp32L1PfeGi4nmfg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR01MB5503 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add documentation for the Ampere(R)'s Altra(R) SMpro sysfs interfaces Signed-off-by: Quan Nguyen --- Changes in v9: + Remove unnecessary channel info for VRD and DIMM event [Quan] + Update to align with sysfs changes [Quan] Changes in v8: + Sysfs to return single value in hex format [Greg] + Fix KernelVersion info [Greg] + Change errors_* to error_* [Quan] + Added overflow_[core|mem|pcie|other]_[ce|ue] [Quan] Changes in v7: + First introduce in v7 [Greg] .../sysfs-bus-platform-devices-ampere-smpro | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-bus-platform-devices-am= pere-smpro diff --git a/Documentation/ABI/testing/sysfs-bus-platform-devices-ampere-sm= pro b/Documentation/ABI/testing/sysfs-bus-platform-devices-ampere-smpro new file mode 100644 index 000000000000..d8f82a06570d --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-platform-devices-ampere-smpro @@ -0,0 +1,125 @@ +What: /sys/bus/platform/devices/smpro-errmon.*/error_[core|mem|pcie|other= ]_[ce|ue] +KernelVersion: 5.18 +Contact: quan@os.amperecomputing.com +Description: + (RO) Contains the 48-byte Ampere (Vendor-Specific) Error Record printed + in hex format. + + The detail of each sysfs entries is as below: + +-------------+---------------------------------------------------------+ + | Error | Sysfs entry | + +-------------+---------------------------------------------------------+ + | Core's CE | /sys/bus/platform/devices/smpro-errmon.*/error_core_ce | + | Core's UE | /sys/bus/platform/devices/smpro-errmon.*/error_core_ue | + | Memory's CE | /sys/bus/platform/devices/smpro-errmon.*/error_mem_ce | + | Memory's UE | /sys/bus/platform/devices/smpro-errmon.*/error_mem_ue | + | PCIe's CE | /sys/bus/platform/devices/smpro-errmon.*/error_pcie_ce | + | PCIe's UE | /sys/bus/platform/devices/smpro-errmon.*/error_pcie_ue | + | Other's CE | /sys/bus/platform/devices/smpro-errmon.*/error_other_ce| + | Other's UE | /sys/bus/platform/devices/smpro-errmon.*/error_other_ue| + +-------------+---------------------------------------------------------+ + UE: Uncorrect-able Error + CE: Correct-able Error + + See section 3.3 Ampere (Vendor-Specific) Error Record Formats, + Altra Family RAS Supplement. + + +What: /sys/bus/platform/devices/smpro-errmon.*/overflow_[core|mem|pcie|ot= her]_[ce|ue] +KernelVersion: 5.18 +Contact: quan@os.amperecomputing.com +Description: + (RO) Return the overflow status of each type HW error reported: + 0 : No overflow + 1 : There is an overflow and the oldest HW errors are dropped + + The detail of each sysfs entries is as below: + +-------------+---------------------------------------------------------= --+ + | Overflow | Sysfs entry = | + +-------------+---------------------------------------------------------= --+ + | Core's CE | /sys/bus/platform/devices/smpro-errmon.*/overflow_core_c= e | + | Core's UE | /sys/bus/platform/devices/smpro-errmon.*/overflow_core_u= e | + | Memory's CE | /sys/bus/platform/devices/smpro-errmon.*/overflow_mem_ce= | + | Memory's UE | /sys/bus/platform/devices/smpro-errmon.*/overflow_mem_ue= | + | PCIe's CE | /sys/bus/platform/devices/smpro-errmon.*/overflow_pcie_c= e | + | PCIe's UE | /sys/bus/platform/devices/smpro-errmon.*/overflow_pcie_u= e | + | Other's CE | /sys/bus/platform/devices/smpro-errmon.*/overflow_other_= ce| + | Other's UE | /sys/bus/platform/devices/smpro-errmon.*/overflow_other_= ue| + +-------------+---------------------------------------------------------= --+ + UE: Uncorrect-able Error + CE: Correct-able Error + +What: /sys/bus/platform/devices/smpro-errmon.*/[error|warn]_[smp= ro|pmpro] +KernelVersion: 5.18 +Contact: quan@os.amperecomputing.com +Description: + (RO) Contains the internal firmware error/warning printed as hex format. + + The detail of each sysfs entries is as below: + +---------------+------------------------------------------------------+ + | Error | Sysfs entry | + +---------------+------------------------------------------------------+ + | SMpro error | /sys/bus/platform/devices/smpro-errmon.*/error_smpro | + | SMpro warning | /sys/bus/platform/devices/smpro-errmon.*/warn_smpro | + | PMpro error | /sys/bus/platform/devices/smpro-errmon.*/error_pmpro | + | PMpro warning | /sys/bus/platform/devices/smpro-errmon.*/warn_pmpro | + +---------------+------------------------------------------------------+ + See more details in section 5.10 RAS Internal Error Register Definitions, + Altra Family Soc BMC Interface Specification. + +What: /sys/bus/platform/devices/smpro-errmon.*/event_[vrd_warn_f= ault|vrd_hot|dimm_hot] +KernelVersion: 5.18 +Contact: quan@os.amperecomputing.com +Description: + (RO) Contains the detail information in case of VRD/DIMM warning/hot eve= nts + in hex format as below: + + AAAA + Where: + AAAA: The event detail information data + + See more details in section 5.7 GPI Status Registers, + Altra Family Soc BMC Interface Specification. + + +What: /sys/bus/platform/devices/smpro-misc.*/boot_progress +KernelVersion: 5.18 +Contact: quan@os.amperecomputing.com +Description: + (RO) Contains the boot stages information in hex as format below: + + AABBCCCCCCCC + Where: + AA : The boot stages + 00: SMpro firmware booting + 01: PMpro firmware booting + 02: ATF BL1 firmware booting + 03: DDR initialization + 04: DDR training report status + 05: ATF BL2 firmware booting + 06: ATF BL31 firmware booting + 07: ATF BL32 firmware booting + 08: UEFI firmware booting + 09: OS booting + BB : Boot status + 00: Not started + 01: Started + 02: Completed without error + 03: Failed. + CCCCCCCC: Boot status information defined for each boot stages + + See more details in section 5.11 Boot Stage Register Definitions, + and section 6. Processor Boot Progress Codes, Altra Family Soc BMC + Interface Specification. + + +What: /sys/bus/platform/devices/smpro-misc*/soc_power_limit +KernelVersion: 5.18 +Contact: quan@os.amperecomputing.com +Description: + (RW) Contains the desired SoC power limit in Watt. + Writes to this sysfs set the desired SoC power limit (W). + Reads from this register return the current SoC power limit (W). + The value ranges: + Minimum: 120 W + Maximum: Socket TDP power --=20 2.35.1