From nobody Mon Apr 6 09:13:14 2026 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B7C9733D6D8; Thu, 19 Mar 2026 23:51:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.143.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773964306; cv=fail; b=TW8CsERCwEsCV06F8n/0V3/mNK0K8u87Pqt1Xy/fY2t9mZJgeFgRaxYE3Q8YyrSSs3D4Ibbnq8cv/IX/7S6CzZfxAq+KehvGHkTgRqYWdrn/JvENvfw2/XSta+9mPGTafwZAUCItB6+5/0dRcONPC+7mEnd727yI7Fe1uGuTtZA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773964306; c=relaxed/simple; bh=IeBiX6nQqqIvoti7jyfGaqxy22v8411osF9yPd1cCFM=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=Z5d7s9ckUbKgP+b3mMqJYaXrKMtmAnn3ZrN8UcAfWqR/mm5nTf2dXk/wp2HNxEYNU/O3mCqC45CtzW5RLwbDBwvgxdPdO++clptIPgClGbqfLnKyZeITw/YtbNOwWCL4T3jI4AcpvaaHUacIOyya5+T/GXF7U/2h5Cd5PZYYHSk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com; spf=pass smtp.mailfrom=hpe.com; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b=I5vIipif; arc=fail smtp.client-ip=148.163.143.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hpe.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b="I5vIipif" Received: from pps.filterd (m0134424.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62JH8Aot1647432; Thu, 19 Mar 2026 23:51:23 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps0720; bh=Br pvXfHt8ATt/RjplPWYhWHkgSgqPEQHHGcev6n7twI=; b=I5vIipif2J/8fcS7Bq AMPjeZ8dfWeyPQvOvMxeMjYIH2j6U0eDPj5TCuxDRzqz2ezIiiMP7fNDIo6Zw/dX qFn9huesNRwyc15Ufp0Ifu4XqPoEC7cHCbLkaaV3Khh24wTmdrKIekjdaPXt/kN5 G0dkmb54aB1gKV1AI/P4D5GlkMboML1pZ1vc0Wjr4n/5zekiN2mTBfIwLGyCsIat vBoW16DPjKyGC5lR2pNPVl4p08ATUMQjFIu1b6+9c6u75TG1dbhgGDWoexQi8bbU 0bVZhNqajnjASYEvW6UfBptoHV10pA0cahKGLTzTIo8Pn3AXsGEsH5hOAts/oR/t u2bw== Received: from p1lg14879.it.hpe.com (p1lg14879.it.hpe.com [16.230.97.200]) by mx0b-002e3701.pphosted.com (PPS) with ESMTPS id 4d0n9c3n5k-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 19 Mar 2026 23:51:22 +0000 (GMT) Received: from p1wg14926.americas.hpqcorp.net (unknown [10.119.18.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14879.it.hpe.com (Postfix) with ESMTPS id 20A2DD1DF; Thu, 19 Mar 2026 23:51:17 +0000 (UTC) Received: from p1wg14928.americas.hpqcorp.net (10.119.18.116) by p1wg14926.americas.hpqcorp.net (10.119.18.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:50:52 -1200 Received: from p1wg14926.americas.hpqcorp.net (10.119.18.115) by p1wg14928.americas.hpqcorp.net (10.119.18.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:50:52 -1200 Received: from p1wg14920.americas.hpqcorp.net (16.230.19.123) by p1wg14926.americas.hpqcorp.net (10.119.18.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17 via Frontend Transport; Thu, 19 Mar 2026 11:50:52 -1200 Received: from CO1PR07CU001.outbound.protection.outlook.com (192.58.206.35) by edge.it.hpe.com (16.230.19.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:50:51 -1200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H6B4g77Pi0QFG9JhmQKkrVDXXlW57zUYNeS4Rt4J8K7aBk5JhMeXTR4/Zx8lbR4vBsJ1L2usiVBn2kUfxqimCso220MJupIkwy1uGuXqR9A+U4IEu4CSJTPlk5DvC35Zs/EqD0uYhzZnoddPtvTNn6z40tnn+o21+jIo8MuVZf28abIc/DISfv2UXtuprS16ai6Z/o5sClm6r365pKZ0MRQndy0uxiynSCOy6+VoT7q4JxNMY0j4ko3w1rPqPsIb4Y2d/PwFvoki5ACSrYoB4JVTX8SFf9UhhTEzaShBOCe/cGjqdOpXvSzzZFQyzz2bUl+bNJn5KMg5/9g+YOX0YQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=BrpvXfHt8ATt/RjplPWYhWHkgSgqPEQHHGcev6n7twI=; b=RBE9iN+fME4/AdFvQXfD8oC21uA5ZdkqUs7sObvBMMaTVRHiUMLTyrKLwmAYSiauDSEjJDVC7ap3hyvM73BuFhesZX7ZcGHhn0JofTxBUlmwTT1jNPVXD1Mq7moJQmMxqBXksmNaoevSqhBpB4wqw/Cs9P/BT7BGzRphz6dJXiSzNXiVADDkFJiLJ9oHkIS1WFfvyJBLg8ctc4cM2PMjLOJh5d7ryWbSIJyPptBgS2AUIRfTFP7eXUEfsr4710K4sowFBa5PQPPiHR2oxgVriuj4wdIuegCqXsNy0aATVpH0Skm1cMEWimdq2MXozENo5q4+eI7106vnglwfeoA3YA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:610:1cc::7) by LV3PR84MB3459.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:408:21c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.27; Thu, 19 Mar 2026 23:50:50 +0000 Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f]) by CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f%4]) with mapi id 15.20.9723.019; Thu, 19 Mar 2026 23:50:50 +0000 From: "Pradhan, Sanman" To: "linux-hwmon@vger.kernel.org" CC: "linux@roeck-us.net" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v4 1/3] hwmon: (pmbus) add spinlock to protect 64-bit timestamp Thread-Topic: [PATCH v4 1/3] hwmon: (pmbus) add spinlock to protect 64-bit timestamp Thread-Index: AQHct/s2QEwwKjFFzk+mQ6d6LFxNCA== Date: Thu, 19 Mar 2026 23:50:50 +0000 Message-ID: <20260319234945.151487-2-sanman.pradhan@hpe.com> References: <20260319234945.151487-1-sanman.pradhan@hpe.com> In-Reply-To: <20260319234945.151487-1-sanman.pradhan@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR84MB3523:EE_|LV3PR84MB3459:EE_ x-ms-office365-filtering-correlation-id: 9ba37dd7-8c59-4103-fdf7-08de86125962 x-ld-processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|56012099003|22082099003|38070700021; x-microsoft-antispam-message-info: /I0VtoCUHhnqwl8GkvXPdSFlKx/porMVZB6lx4xn11/jQDuuywaZyrovM6Kpwqw5DOuEqKM39gxC5qX6qAGWaCwfNsleULCBBjjiyYWZSliM102wU4SlC92Ri0ZDFFW3NAZGv3cMBtdsMdYb3PKEVqHo1MISTRrEeeQ8beWsMxAHz1kP/XL9/SvujlK2Znt1m6ROnycHU/Re8U6ITRlak8ap9+J6P9JpmLdXCxgPlHOLnhHMtU4Cr2PcFjGxLw0FJfZ+qZE2FwhyubvuooNlUCDpbibNiBFoHZARBckw3KOGyT9Xwa/FbpqjHTXp0IkOK0Zkb7egWt2eW4AKsz7BG2oYFGARYg+dAb6RpkbAQBXnRcEolqccaRE9jj7rZ7MZNzAVsZ6ql1++CxHrGqNe7ellTni8OmBSTjcTnJkxj1/kIXBpdGrmbTYWztOHPgw8TEeib4oCgm3+zbfiEqNJSg4f4t5+oEkjglO4f20iqztoiM1IA0+sVmNsLKw5Qqpi5mo0DfMUbG7+PV4fBoIyZhKlS/rDWlZWZw7rLKFA222kKF5yLFx4IGfMy0/SH/zXbaXaLJHb3yE0nIpbVMva0ow3U8uNUuYwU9r4JTv8qL/z+MHnXZjWi1mp0FFB5dTpZcNcml81CftrYhMKN7twHrQR044DS64gNfyzIpk6mwMwJkyYtD1v1LHX8CNJA3je2u7yPtQ2Xo1jpRGb251mB3o8eI/7fbigNPGCdQ4aD/e0oNS7KPKgC/g6e8JaA/EugVKWkV7YwNsr8dxfdU0nPnH+dPB3EXBoETRByyNUfdg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(56012099003)(22082099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?UlmtM4u+kQxYfgjLDACtHV4MZJtWcmvn2sdBPwXK9kZHpprAXfPYq5mJxu?= =?iso-8859-1?Q?kF6f9OEVpMctRqvMO8GHAov3ZgCzKAE67SqC+IRC+YEztehr1c/W4LuFFU?= =?iso-8859-1?Q?nbk/rZbpvffQm+lXQyyZTpoDUJ8YDTSc2BiWVehRJC/ktD2BAXmgZggM2E?= =?iso-8859-1?Q?liRuIFN7+pgT/xKwJM62h6dm80ikrEq9aW5GM4aiS+TeJLPy+rvrZ/7NeM?= =?iso-8859-1?Q?d5NQV2cOg5FKR15+GxYMQUYyBpPDwFx5mjiAlR0O9jkTX2q4x5Dst6d6NO?= =?iso-8859-1?Q?YuWMmoBAkbJQa8um8zALizvzFD50DZ/RukwdFf1Z0yZBxgE9JYUPveU6xb?= =?iso-8859-1?Q?E7r9mss8y/bn/ZtH4pzBOSnd9j95KKAO/c6eRUlMQWohHMq6TCwZosrPuh?= =?iso-8859-1?Q?u2YX4U0g0L90fSSYpFZ0wmJ8v7IEEkgD04/zxXjkAK6GCd+0CocqjCoGrw?= =?iso-8859-1?Q?70dftNlm7dOO4j0hz44t4x9km/sv6ZBJNiEhbTWSa13YvoqXSOyvyriHrT?= =?iso-8859-1?Q?WKl0vR7p8rI8tFDJW4ummF4aY8CgQTXI9HMW+2tH5BCZQ4x97H+9nosM+b?= =?iso-8859-1?Q?Su5mGTTrFFB2XOZLRiX1CdB/DUSC01BgIk0FdxdUSPRhMf13p/YBneQcDf?= =?iso-8859-1?Q?AJUPou41GzLSfq0VPGuxPiBF9Uh2chM2GmZf/Wh7uwIuwxPTp4u7kMcuMf?= =?iso-8859-1?Q?pxJL92h5uqRw9m6ZbjWpqZspJZ1kCj7M/S9n4/y2IY/dLVrWN0RgQs7ZlD?= =?iso-8859-1?Q?kEVmytYeMdabCpHHy2YllWsZpjy9djr/eTLkGztpUdfYZFXmgmFRJkfVbq?= =?iso-8859-1?Q?Ye6e79+4kgsXWKxUj0bo57VmQj3K43H3If076nhWsMQkq7GuYq5UkpeGP0?= =?iso-8859-1?Q?DZBmQP4O3XfRTtkcnsmkpMWLFU1o4ZLzszbC0hR9ZTkiqOkOIRg+S6hswL?= =?iso-8859-1?Q?aHO+7jJTD/26/qdswBqM2JMeEbRxtXrDrngkJr4j/vbdf3X/+C5vJ6mhKw?= =?iso-8859-1?Q?siGmBCZGfGcADrTPp2bDXzOQEwvlnHkxlFY7/7LLR3eTyrGuNccJsfUl3m?= =?iso-8859-1?Q?vXR9iHDXtIWdEwiygJserD8u8A2u5QoCn4m92ALPbzAflh7oOzMe6xsXu5?= =?iso-8859-1?Q?WoMnec+qW2CDSpRuGH6soCRnCwbyDvR2TX2GUwxWA8Zq91StV8M0fX01FY?= =?iso-8859-1?Q?72LvRoQK2Bt3RR5e+z4ne0cNnKHR+vWZzG/pOluPQEIV5qNp0+rh8lOQ4k?= =?iso-8859-1?Q?xczkryNtCTjUqXdRe92sSgMwLOsUH092avACRs9VxFETAhX2aCOE4Vi34h?= =?iso-8859-1?Q?5C56S5whKw5cDdENxsBvkYRaf1wQsqQAKjeDdKxZkp2+RxaQTNwb7btnge?= =?iso-8859-1?Q?jvXsTq55hCeqYpPawl5wDxVthn4MGjjDcSwcBKGJ8GQiA2YfYa3oQlCcov?= =?iso-8859-1?Q?PTIEFLx7praUeQvgKph3PISJaKhYxAqEpptQTOyfxvL+npxPY6CdvSJ1BI?= =?iso-8859-1?Q?shtdlRVF/6JSybkGTliVJCp/5I5IOJn0y0fjq0H63JIqgOewH9djddha6g?= =?iso-8859-1?Q?rzU/a/sR5kqXhIGMX9iiQMaHu8lN/UuJkWuA+eIG+19lfFB8wy8TljdcxL?= =?iso-8859-1?Q?mZWgHc44fLlXfNGTaRsie0bhsa0QeOnnLHzZh6MYAlFojrcwEHXE5PuWOF?= =?iso-8859-1?Q?NnRkX4a1W14uSnarcyH7bKCcC8K/QZ1O90BtLMqFpI2pP+rNX4szU+WbVz?= =?iso-8859-1?Q?t6bjwjttJWjeHZ4LqXxgCsq2HOJHodkuLzoOrPxFXAol9S8jcwSv8u4Umb?= =?iso-8859-1?Q?qD8WEynGSg=3D=3D?= Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: XBr+aslFPqr3zmJQ2PpbQHVzDx5qEsklRMTO4y+EeI1/sILDKW+5xCa9nBZt72ijV0uxY5n5y9QINOo64c7O105gKooW++cDkcjHDcoBNY7W5PbYdUPjiBB0BQjSHu2xu+TKOkdOEcQ5kHp38u4CNfg68p7QELgMtn7aizf1M5+mND9mN3IS8pB/lrl+OHokK6/reav3n0aHMi0uemC69T1P34hFI9pXhEJh8WcC0IoXSSkBnqO2DhbNxoCcOp1LHNoXL3kCK0rYyWQzIs9brGgBYnHi17TbW7zt6MgPOSMN8ZCG2vcYQA4nGJt/5O97gMo18bkR8cnAzsS8Q1d56Q== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 9ba37dd7-8c59-4103-fdf7-08de86125962 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2026 23:50:50.0257 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: SNUwZxGUhm/fFT6LAo4F2DZriVRnNkXpDZeicD3l6GapW9QzF+25Nt9YkY4LOWLVpg6MLz2DmElOEHFSIFJ/Gw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR84MB3459 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: flMH9BYGJGCECOO8m2RJxQ7ZJeRuHgn- X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE5MDE5MiBTYWx0ZWRfX7Yi2LOdT2qUr uLRnblRh/AgJ6UMJvjWyOfy9QC+tDG8Q6nyajTDg/hULSxS3UxfAdiEsSuQqXgeRLg8EdJbmExm qCtAbs4Kz+z8sJAMqT7be+KybaC5vwrzYln+hQpaIvIQ5Oy0YsRpI0czj91Do9GSm+COEuVC1UH sFj9nKZ3KhnH2BgkMcL5pqNN2WnYTRh2SpNKN3fSw2BFbVDNTLlUwWTzG6TA/+GcLIDiaJpV+EP Sdem3YaceQ6mwx6+vuOS84o+gDcsKk3zSOMoBYIjQvoIyG0jktUW7KUjTgjPq5JGRcg9fX9sECe Pis5tawms1Jo2wLCiPjP3evtJgsysbboXImZHHhLx0ELVjlOrld2a7p6JhfgBPwBfa4qJq1m0Ar BxJkfGzsXZ/+oxTH2izgQF+ZMtEtx68UxEC9K4zyfXhWb751JCyUVxsCpAfLo6rqvJwrMP2HWmN 2YDiXgRTPmPyi9wUf+Q== X-Authority-Analysis: v=2.4 cv=P8Y3RyAu c=1 sm=1 tr=0 ts=69bc8bfa cx=c_pps a=5jkVtQsCUlC8zk5UhkBgHg==:117 a=5jkVtQsCUlC8zk5UhkBgHg==:17 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gQcMVamqm3wCPoSYhaRC:22 a=3haJ9R1Aw3gUfsUHDaCR:22 a=OUXY8nFuAAAA:8 a=Aahk2nAXIxB2i9gVCqYA:9 a=wPNLvfGTeEIA:10 a=cAcMbU7R10T-QSRYIcO_:22 X-Proofpoint-GUID: flMH9BYGJGCECOO8m2RJxQ7ZJeRuHgn- X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-19_04,2026-03-19_05,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 priorityscore=1501 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603190192 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan The next_access_backoff variable is a 64-bit ktime_t. On 32-bit architectures, accesses to 64-bit variables are not atomic, which can result in "torn" reads or writes if accessed concurrently from different subsystems (e.g., hwmon sysfs reads vs. regulator updates). Introduce a spinlock in struct pmbus_data to protect accesses to next_access_backoff and prevent torn reads/writes on 32-bit systems. This change addresses atomicity of the timestamp field itself as the timing helpers become callable from more paths, including PMBus chip drivers using the exported helpers. This does not attempt to serialize the full wait/transfer/update sequence across concurrent callers; it only protects the timestamp field from torn access. Signed-off-by: Sanman Pradhan --- v4: - New patch in the series. Introduces a spinlock to protect the 64-bit=20 next_access_backoff timestamp from torn reads/writes on 32-bit=20 architectures. --- drivers/hwmon/pmbus/pmbus_core.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_c= ore.c index 4d7634ee61484..42bd62f1e2e40 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -122,6 +123,7 @@ struct pmbus_data { int vout_high[PMBUS_PAGES]; /* voltage high margin */ =20 ktime_t next_access_backoff; /* Wait until at least this time */ + spinlock_t timestamp_lock; /* Protects next_access_backoff */ }; =20 struct pmbus_debugfs_entry { @@ -176,8 +178,14 @@ EXPORT_SYMBOL_NS_GPL(pmbus_set_update, "PMBUS"); static void pmbus_wait(struct i2c_client *client) { struct pmbus_data *data =3D i2c_get_clientdata(client); - s64 delay =3D ktime_us_delta(data->next_access_backoff, ktime_get()); + ktime_t backoff; + s64 delay; =20 + spin_lock(&data->timestamp_lock); + backoff =3D data->next_access_backoff; + spin_unlock(&data->timestamp_lock); + + delay =3D ktime_us_delta(backoff, ktime_get()); if (delay > 0) fsleep(delay); } @@ -194,8 +202,11 @@ static void pmbus_update_ts(struct i2c_client *client,= int op) if (op & PMBUS_OP_PAGE_CHANGE) delay =3D max(delay, info->page_change_delay); =20 - if (delay > 0) + if (delay > 0) { + spin_lock(&data->timestamp_lock); data->next_access_backoff =3D ktime_add_us(ktime_get(), delay); + spin_unlock(&data->timestamp_lock); + } } =20 int pmbus_set_page(struct i2c_client *client, int page, int phase) @@ -3687,6 +3698,7 @@ int pmbus_do_probe(struct i2c_client *client, struct = pmbus_driver_info *info) =20 i2c_set_clientdata(client, data); mutex_init(&data->update_lock); + spin_lock_init(&data->timestamp_lock); data->dev =3D dev; =20 if (pdata) --=20 2.34.1 From nobody Mon Apr 6 09:13:14 2026 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DCF237B3F5; Thu, 19 Mar 2026 23:51:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.147.86 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773964318; cv=fail; b=mz5PBjBmO8WRYv/l60Sr0gp04JsSDy86KcZ6XhHVAb9La8OAvSik2t80pIDhiEzFbzD5gpG+UrBJsSSFsISEIwEw+vf4hIzlryGFjENcqCZUhHVVzVUAIT3tMYJQdQcT2SNFkUGn/V9ayeC+tqpJ8Ibulnf/G6PIlgCLiaBn/pk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773964318; c=relaxed/simple; bh=XGCovpdQUnlldDenh+pHltgMGFxTy6X+EXSv0JCViAA=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=oC7jggBUBi0B38mTTF4X+p85Xmeeu/mxeypuDQwWlPOupO54YvyLafUL3yFcbFtPG+jb2LoEdZ2T/s7NLEFAFJr4cZuUTnY+jqDEXO/y/Gh+Whbttx5yEM1YSipgjfvcX0BlcYBBOcgAmlmShvE3wcvegHUGTqNj5HzYLvU9VpE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com; spf=pass smtp.mailfrom=hpe.com; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b=HSel+kKZ; arc=fail smtp.client-ip=148.163.147.86 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hpe.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b="HSel+kKZ" Received: from pps.filterd (m0148663.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62JN34XK3679067; Thu, 19 Mar 2026 23:51:39 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps0720; bh=XE IS1e2iBAZyRO6BrDvlhj5kVa4w1QV21CK5Z8a4FME=; b=HSel+kKZitNsTpbfV8 VnfX0K2jJsmO7LXC25aG931wH1QWQahVNxuWMoTd8Woz5J/T5FT3/19ORkmrHTi1 2TSLECBFT/oQTSD/a92FOYthjesWzNU2JEajgOTxBJ8LA3j5mX1oVROdyf/VhjVs fPmToiDv0q5l1MDYPS1kIZNMB+gEMzeOsBbCDaqeypR+vU5mCIudr2qfGT5T4AMS FDYpqHKroCqQC2nPakRRLosFj94RHgq7G9PQS7frVeVRpyxRTBGhePfmC3list7o 1QGORf18XAxHk/o4Bp79uBeEV0Gna7+WdL+cpvpKlSrvzDC0I9/+zyWU4pSz78xU 4yfA== Received: from p1lg14881.it.hpe.com (p1lg14881.it.hpe.com [16.230.97.202]) by mx0a-002e3701.pphosted.com (PPS) with ESMTPS id 4d0k8y5kg5-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 19 Mar 2026 23:51:38 +0000 (GMT) Received: from p1wg14926.americas.hpqcorp.net (unknown [10.119.18.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14881.it.hpe.com (Postfix) with ESMTPS id 5F288802BAF; Thu, 19 Mar 2026 23:51:38 +0000 (UTC) Received: from p1wg14927.americas.hpqcorp.net (10.119.18.117) by p1wg14926.americas.hpqcorp.net (10.119.18.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:51:12 -1200 Received: from p1wg14923.americas.hpqcorp.net (10.119.18.111) by p1wg14927.americas.hpqcorp.net (10.119.18.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:51:12 -1200 Received: from p1wg14920.americas.hpqcorp.net (16.230.19.123) by p1wg14923.americas.hpqcorp.net (10.119.18.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17 via Frontend Transport; Thu, 19 Mar 2026 11:51:12 -1200 Received: from CO1PR07CU001.outbound.protection.outlook.com (192.58.206.38) by edge.it.hpe.com (16.230.19.123) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:51:12 -1200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wV1MiZR5lKOD03L9Xpsl164LMfWRZYfbbX/2GqzXXB2o2CT2IsTTKaC1X72IwLUILKOJ68z2g+Ex7PjEIyv/EBi0s2eGpxoeWZNOoYbvpkePKGXJ7YWK+lYi8+Glx6cfRvn6wa2ex6kQUQK01Yky7lMMrbTyLPLFuKcMvGKw0UpvzrmSxsIyayH8F4H/XGZWh1xXKGm2szyds4hC3nzXXwage0jRlD8vqkpkz/nrwROLywZD5OMu6Hz5ckxrOCrJej0rWWv0j75uFZUpVO6mNfaKCiLIKd5njo8PaRg/n3o4mmJ3sWU6R3b9XiNyjIjslnv84vi+BQJjXnE2X7VAlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=XEIS1e2iBAZyRO6BrDvlhj5kVa4w1QV21CK5Z8a4FME=; b=gAUv9yT5tn8cnq+WzNZnZTAlhmacCWp+1ghKQofURBW/MGwLBed+Si6catB09ZJ1F9eDH04ZoEvA3oG/SUDENwIGxR9lD3/p+nG4sm4m7nCdRogbvRv20L5kJF9MzCEu5Y7yPQskTqzaCZr2HkTeDRb4LVulPqLlCSJRQzJMT1NF5rkJqIZdVfCWMcY2ca9jV0dn2CULD4pFDSguQXysDi1NYWJxWlw8kUhsDvz+OFduWxmQwzKerzJ0KC/VPRnW3XCRp+s44AtQ/nx9OmGOsEbTgwjUW5NLyt+Q0iHOQy3Tk4YyUc0i9wWcnDm7JAUNtzx2HMUCq9r0MkKkJURaDg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:610:1cc::7) by LV3PR84MB3459.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:408:21c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.27; Thu, 19 Mar 2026 23:51:10 +0000 Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f]) by CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f%4]) with mapi id 15.20.9723.019; Thu, 19 Mar 2026 23:51:10 +0000 From: "Pradhan, Sanman" To: "linux-hwmon@vger.kernel.org" CC: "linux@roeck-us.net" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v4 2/3] hwmon: (pmbus) export pmbus_wait and pmbus_update_ts Thread-Topic: [PATCH v4 2/3] hwmon: (pmbus) export pmbus_wait and pmbus_update_ts Thread-Index: AQHct/tCaGT+elJL/Uq8a+EVVzKaJw== Date: Thu, 19 Mar 2026 23:51:10 +0000 Message-ID: <20260319234945.151487-3-sanman.pradhan@hpe.com> References: <20260319234945.151487-1-sanman.pradhan@hpe.com> In-Reply-To: <20260319234945.151487-1-sanman.pradhan@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR84MB3523:EE_|LV3PR84MB3459:EE_ x-ms-office365-filtering-correlation-id: 1c1508ca-f668-4345-0404-08de86126566 x-ld-processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|18002099003|56012099003|22082099003|38070700021; x-microsoft-antispam-message-info: 6Bj/eCEvN46WU4mr738DXC7stmm7dF6uGObnlnoMCPAJ5F1P71bianCboDwiDMzrUlq1zY2/sHUPE6AZ31ZPhnPLSph4xed9cuAabFt+Lkf86QoilL46Z4+jQzek+4jdKp47FPxs2OiONpjUr49ABGlpsUNF8kYrDN4Id7sDhtz5DtMXy8N125xD+LjXdRhQDO2jUiARu8W2iyGUf+1OmhzpDbKwnX3MxThq6XPWWghQtxaZaisyYtCkM/zdZoBsBW3hTu8V+T2o9GtYDWjFPVcrvnZK/gsRO1XG6StQeVRQpNarU0Zln/seug+SR29o8Ldf0yc10NFvqRXx6MrA4ZROZQGuvwubLTckKKE2TsTVINVweiDdCcSQLjPI2KowTgQCQqzfEzQWNw3k/ssybxc4u8Z8as/zsCLqBrT4GMATwgElaYjjeL2VIxAVdi4BZSKKbjZUZYTp5N80UcL3JSah2WBgVurANshpDR8uCYTqzdZE7ULMw0QeRxsDrTv8Ex83TnDqFIMVI7gIivPDwMK7V4uljw5e1M6Q4ttQr7FWmLXeV8sMh9RgTb/Csp9wwoYITmVFFNanqRYuuaufG7LhNDl9jvGsIDRHhxLeLu8Yt+6UU+SMm94DY7sMGBtPYgQmZRZ4v1Q97+BzQR593K9uXLGMgcC3mVPodHcFdYxGCFB9VsV55ZK1pE3NAA/XsNPh4h8TvRGcwiJ/hQwQabfoYOH0KijcM2XNdUVDr3987+vlAeTArNX/fLGXOvWO/Jbk8pf9ghLE3TL2Bfu4lfORN/WFvBQdG/CcQ7qHa+I= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(56012099003)(22082099003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?tYw7O/2r6alEYZ0sxUy9lrsJcSULyjjAE3jfD1KuO7vbO3fIGVlVITWHRK?= =?iso-8859-1?Q?la2iLSF3SINoWAspyB0/MAfiQzM+YeNN0UIZVnHpFxg3DMnuTnyCASV2iV?= =?iso-8859-1?Q?+G4/I5Ke09D/E4/kRgrjv4fAzNbjsvqWgBoWgX66kysZOvbbb8QPTEKJXp?= =?iso-8859-1?Q?vGXGtUfHOHoXEYJfiA+AJHy2WZm0AOo9F93i+NoRwhFZTb8FXY6Cw5VQ91?= =?iso-8859-1?Q?47Wfm1e+novAL0T2mpTbQDWvw5WA5dDvtwvC4ojouFebKfhzQ9Lv+8LKay?= =?iso-8859-1?Q?eX8Tv+uaCYDsIxMIYynaVLryiZajDqAluwHmYzAtYosIiNtNP1MH8Z5WHA?= =?iso-8859-1?Q?2DU1vQJYOZG4nJR6fKQDJSms3YH5jo/AYPOUxPDwdem8DiMBW2YRamG4Z8?= =?iso-8859-1?Q?SiQg3ediuNNzp0HXvDRa6mFWwPnNN/06kRtQgZ878gAJ61WMY/KRvRECA+?= =?iso-8859-1?Q?wujA17d/e3bb8SAcYwma03JUWu6EUMcokDIAPF3BOZqdncRvNr1qY0LEI9?= =?iso-8859-1?Q?7FxGPiHOWxbeRk4NSMwT5rbQACw9gCk4YX7I0Ap8RfXSHpzcipO938FZL/?= =?iso-8859-1?Q?YrXj+OHIbwzT/+5ABJt5ZZE8aFVqkul4x07EkcneSbRgRbcXjiVY84QRdz?= =?iso-8859-1?Q?Q2dsw04V60qlXsRbViWLPpQTWEmAw3/6RfLj+JFpvT6cJSt5EFZyV772hi?= =?iso-8859-1?Q?dilzP+UR3KPh5hniTA3rtju2qjrcjK2XbkqOhZMJDMWfxBGbKwaCzDUypU?= =?iso-8859-1?Q?khCU2X3DG4NmE62yS3PmQV+zC66jnIFxwZW52joYUW/+MpOKUaTH/IEtth?= =?iso-8859-1?Q?E5ZXdZ/zGmdziOM11EpIgTqJmDrIAyGJOPEyYpZFe4XK/EYnOyeAV4keeR?= =?iso-8859-1?Q?XzZ9A94BybDrmKhA49jOzoCLOttxTmVK4lxrUkRp5006AEWNnOqXk/hxup?= =?iso-8859-1?Q?M+X7ay7LoxjIYz3CLj84oPcqFBg86zcQXUuWJWJpCXkfSnrmJuZ+6+Qosh?= =?iso-8859-1?Q?/TYqICs6g/ROOEd4zUcYov5/CYMrPQ1bNk8VGhB6ar1cuu05dkzdcV5bga?= =?iso-8859-1?Q?muivsxS0ggixNBvFhtbP+vUXafAnOM0Q5fGOK15TfPpd10Dvi52mxfwHWR?= =?iso-8859-1?Q?IiplbY0OyJzzX+g+hPKmiCYu0fUV/s2aZOiw0oVSWo1lh1z0f8COf9gKsg?= =?iso-8859-1?Q?YW3hwc65tWMWgwnUrwI68kbnqLNP+K1kRGkjtpqzw0uVQ4B7HGjTF01cYv?= =?iso-8859-1?Q?xwKWnha76fFstxR1PrX7/oRZf3+UZWdfxQd9G7b+hdzdTwY3GkSm27rVGT?= =?iso-8859-1?Q?sZIkz/HRqCqzY3wG0OGjEGLC4WG4SSa4ezz5XCvjM1SJSlvnelPWmLpBLP?= =?iso-8859-1?Q?6CLykCtt5289wg5g9yP2e44v1euAzYBK7+E1y2Q0FjOKq0DHACq/Q6Kkai?= =?iso-8859-1?Q?fYTYqlKTI5WI7G+2DzyZibXw7qo7R227FJk8z4RwGDa4MT6UHzzsqs+d4b?= =?iso-8859-1?Q?m7oX1wcwARWC3AWb/HXLGybJ1g7FvUcTWmJjTUCXY9CXGxnBQTtjrI8fOD?= =?iso-8859-1?Q?7SW+vIpPc+JtNbdnq4EnOKAwRRPSRzeRsH1l2dpvpiPYnq42VlaX/Vobgb?= =?iso-8859-1?Q?HlCv2b4yzwmO4+lCrMhl3yew8jqvbHWWJt51YE8HeD9WoXu0JXYP6M478L?= =?iso-8859-1?Q?cmgfIsKFedo2RAbSJvuxC+Cnxcb/5u9cj6OjcqYBpPMjPOFjDdbOaopjxs?= =?iso-8859-1?Q?Up101oZWCcPHnkMI/pyxXILiBTYnIUwH3D1t+EPzUBRj5Q1aOnTp/fn0vg?= =?iso-8859-1?Q?5RRjlSuDtg=3D=3D?= Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: ixCYwYG3lg6iTt0KtDOH0dJv4VIx0YVIQFmwqTX8eHE3heOczZLZxmSrJ9upG8Qc6XFT1im8XfgjnM/kERNpI4lACVVW97jIpTyg76+nZjVMJrP0+kMsKea5y8qxHs7mn5wI9DGHp8F4muc1UK/x85G12OvfxrSpjMtlSH+S2P2qRvTvQF+k9T7eKZFyLxD3zk1DT9ZCFnk/Hx/cj3zQ/0DWWZun4ygt+kLFGHLoLCJkJyYR67YNgN/jiPGq5BUbEtZhya4onO05HYpambyqruTj2nC0iHZJJYOHkfXRq1aiFsaXpTvfR5UuqxrgcbEWDi3Kni0ScixMzc8yTXv8CA== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 1c1508ca-f668-4345-0404-08de86126566 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2026 23:51:10.0868 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: sfpve3JFSVWtsguMscK3uooCRXm/vORkqqGnG0kTOb+4wH7+PszKQN24tipzRYjJe+JCDGMPicSm0qqsgitBFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR84MB3459 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: 5V86JwboIo27F4X8V5t4neFy9LNj0tFp X-Authority-Analysis: v=2.4 cv=NprcssdJ c=1 sm=1 tr=0 ts=69bc8c0a cx=c_pps a=FAnPgvRYq/vnBSvlTDCQOQ==:117 a=FAnPgvRYq/vnBSvlTDCQOQ==:17 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gQcMVamqm3wCPoSYhaRC:22 a=6_mrDcixewTG61oOsKN3:22 a=OUXY8nFuAAAA:8 a=Z96ikUa0YlxGFgyCJhEA:9 a=wPNLvfGTeEIA:10 a=cAcMbU7R10T-QSRYIcO_:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE5MDE5MiBTYWx0ZWRfX4MuzxRDzgPqq QjnOL1W9pBeO/J4UwAyo4pvDbJgevfJPbzkTqx0dXJ5VRkeMLjzzghaHko/YzAsHENqaGWnF9zO Hl8nHucO5LAUDnv6K3S2gSZF5Ae2OyIdqoVmP1eSgkmvd1usQ9ZuX6H2FId4h9EtdCfnQ/OwtyV S7pJb2sImBJHoGWQ1iG8qUxK1EY6LuPaFDu5XHpO5KLs9hb4ad6C5zpYB5BUV18Yrm88/q/acLo Z8TD1QKDsaQeoS8STfVQ03jqN6xdg5+kGfhJR53BGWBbD9MklwSGeNlbNoRtdRjeIsdffAOqiba QQ248e8ukyTGoGsXorlrcYuG4q9rm32pSYqr0+J3xPrAf+twzDoxI5hqdM8533vfxTgaIlPzFrM O6RjnXVM7Pr36AvwY69k+1bVB1RQCNqQWmCud27AUfRcs7ES/KXdzYh+IurceigEgilUc84BJLD 0LF7OQFIGjI/b2IFVzg== X-Proofpoint-GUID: 5V86JwboIo27F4X8V5t4neFy9LNj0tFp X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-19_04,2026-03-19_05,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603190192 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan Some PMBus devices require strict inter-transaction delays to avoid NACKs or communication faults. The PMBus core manages this automatically for standard PMBus accesses via pmbus_wait() and pmbus_update_ts(). However, when a device driver performs raw I2C/SMBus transfers (e.g., for long reads or custom commands) that bypass the PMBus core, the core's timing state machine is unaware of the transaction. This can cause the next core-mediated PMBus access to violate the device's required delay. Export pmbus_wait() and pmbus_update_ts() to the PMBUS namespace so device-specific drivers can explicitly synchronize their raw transfers with the core's delay management. These helpers rely on the caller to bracket raw transfers correctly: pmbus_wait() before the transfer and pmbus_update_ts() after it. Additionally, move the PMBUS_OP_WRITE and PMBUS_OP_PAGE_CHANGE bitmasks into the drivers/hwmon/pmbus/pmbus.h header so callers can accurately report the nature of their raw transactions. Signed-off-by: Sanman Pradhan --- v4: - No changes to logic; standardized on the Juniper email address to=20 resolve the From/SOB mismatch. v3: - No changes to this patch in this version. v2: - New patch in the series. - Export pmbus_wait() and pmbus_update_ts() to the PMBUS namespace. - Relocate PMBUS_OP_* bitmasks to the subsystem header. --- drivers/hwmon/pmbus/pmbus.h | 9 +++++++++ drivers/hwmon/pmbus/pmbus_core.c | 13 ++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index 3ddcb742d289e..56620ed4ac9cf 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h @@ -424,6 +424,13 @@ enum vrm_version { vr11 =3D 0, vr12, vr13, imvp9, amd6= 25mv, nvidia195mv }; #define PMBUS_REV_12 0x22 /* PMBus revision 1.2 */ #define PMBUS_REV_13 0x33 /* PMBus revision 1.3 */ =20 +/* + * The type of operation used for picking the delay between + * successive pmbus operations. + */ +#define PMBUS_OP_WRITE BIT(0) +#define PMBUS_OP_PAGE_CHANGE BIT(1) + struct pmbus_driver_info { int pages; /* Total number of pages */ u8 phases[PMBUS_PAGES]; /* Number of phases per page */ @@ -555,6 +562,8 @@ int pmbus_update_byte_data(struct i2c_client *client, i= nt page, u8 reg, void pmbus_clear_faults(struct i2c_client *client); bool pmbus_check_byte_register(struct i2c_client *client, int page, int re= g); bool pmbus_check_word_register(struct i2c_client *client, int page, int re= g); +void pmbus_wait(struct i2c_client *client); +void pmbus_update_ts(struct i2c_client *client, int op); int pmbus_do_probe(struct i2c_client *client, struct pmbus_driver_info *in= fo); const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client *client); diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_c= ore.c index 42bd62f1e2e40..8043bd1730db4 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c @@ -33,13 +33,6 @@ #define PMBUS_ATTR_ALLOC_SIZE 32 #define PMBUS_NAME_SIZE 24 =20 -/* - * The type of operation used for picking the delay between - * successive pmbus operations. - */ -#define PMBUS_OP_WRITE BIT(0) -#define PMBUS_OP_PAGE_CHANGE BIT(1) - static int wp =3D -1; module_param(wp, int, 0444); =20 @@ -175,7 +168,7 @@ void pmbus_set_update(struct i2c_client *client, u8 reg= , bool update) EXPORT_SYMBOL_NS_GPL(pmbus_set_update, "PMBUS"); =20 /* Some chips need a delay between accesses. */ -static void pmbus_wait(struct i2c_client *client) +void pmbus_wait(struct i2c_client *client) { struct pmbus_data *data =3D i2c_get_clientdata(client); ktime_t backoff; @@ -189,9 +182,10 @@ static void pmbus_wait(struct i2c_client *client) if (delay > 0) fsleep(delay); } +EXPORT_SYMBOL_NS_GPL(pmbus_wait, "PMBUS"); =20 /* Sets the last operation timestamp for pmbus_wait */ -static void pmbus_update_ts(struct i2c_client *client, int op) +void pmbus_update_ts(struct i2c_client *client, int op) { struct pmbus_data *data =3D i2c_get_clientdata(client); const struct pmbus_driver_info *info =3D data->info; @@ -208,6 +202,7 @@ static void pmbus_update_ts(struct i2c_client *client, = int op) spin_unlock(&data->timestamp_lock); } } +EXPORT_SYMBOL_NS_GPL(pmbus_update_ts, "PMBUS"); =20 int pmbus_set_page(struct i2c_client *client, int page, int phase) { --=20 2.34.1 From nobody Mon Apr 6 09:13:14 2026 Received: from mx0b-002e3701.pphosted.com (mx0b-002e3701.pphosted.com [148.163.143.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C94D238654C; Thu, 19 Mar 2026 23:51:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.143.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773964319; cv=fail; b=ITMK5y/8YANB28wJBojyiASi9EfrCbs+J2mxbYBcjThd/5zEHsnWqmSbHZMnko7cLU+iQmWr4hDz27cuha695VnxFH0nnNIBRmPYvAnpts10Xym2sa+vGf5P7pdduVxnrWOVhY6Rg1uE06t1JY5d/PegQj1D9StLuy8RA8wkqM8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773964319; c=relaxed/simple; bh=bd6Gcg8ZvqgwhjVm+IhMLRF7gb1j95Up/aUBB0hPPvw=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=Tj2ilMCWOf7iis9IOpKp19QOrrkT2XrA16cNyBjax8EABmOZK7AZz5C9zpTcRR9eCq6NOuspIN2ka5dfCHsQtnSVOvUdJIFePAtWkpHd0jqCqVf4czYDogB0v4u9qpqKzErfH5Kvj6jacNBj6WkdPg1I/Xq4yz/bDLnpnF05xYI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com; spf=pass smtp.mailfrom=hpe.com; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b=Nx2xr6rt; arc=fail smtp.client-ip=148.163.143.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=hpe.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hpe.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hpe.com header.i=@hpe.com header.b="Nx2xr6rt" Received: from pps.filterd (m0134425.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62JKrSlX1856988; Thu, 19 Mar 2026 23:51:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps0720; bh=3F zEbD17Zx3w46g9Bpji7121w1zcUR1gHsg0EX+IZIc=; b=Nx2xr6rtJMwDyhKU/Y pZBB08BvXRpv4Pjee8vdqQ66LjZWvOM/pLwzsOSBhHbo/TVBm40eQ5kk87BThmD4 EwqO+D+cvp+t/5mvLjR51U1HeEknfTFO40wsC7w+OFacyvj9E6bqGjsiRDBFetwx YN2hCkGIKuW3WYtx/v3X0gbFu1fUfAs3bcJClS+iAnZYmogzX8ScfK6oPt+9j+uz 80hCZsCthtNYPYBnAVKgiRafHPEns1AWHRcuQ8IQj/mQRRyLgpFlU5irmIqV07Z8 Xnob8l0at6jefQvFNbUn5SP9MwaHZQ+bHRW41aHskPINjbUG2F7NwvuaNSnN2869 TOsw== Received: from p1lg14879.it.hpe.com (p1lg14879.it.hpe.com [16.230.97.200]) by mx0b-002e3701.pphosted.com (PPS) with ESMTPS id 4d0rk11hmj-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 19 Mar 2026 23:51:42 +0000 (GMT) Received: from p1wg14924.americas.hpqcorp.net (unknown [10.119.18.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14879.it.hpe.com (Postfix) with ESMTPS id 62A98D272; Thu, 19 Mar 2026 23:51:41 +0000 (UTC) Received: from p1wg14923.americas.hpqcorp.net (10.119.18.111) by p1wg14924.americas.hpqcorp.net (10.119.18.113) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 11:51:39 -1200 Received: from P1WG14918.americas.hpqcorp.net (16.230.19.121) by p1wg14923.americas.hpqcorp.net (10.119.18.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17 via Frontend Transport; Thu, 19 Mar 2026 11:51:39 -1200 Received: from BYAPR08CU003.outbound.protection.outlook.com (192.58.206.35) by edge.it.hpe.com (16.230.19.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 19 Mar 2026 23:51:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QbKnJ6scu0637XTKEVIP4oJF1lQwIyhNRCq+Gj1IV6NkULU8jTeApEboasI8/1KPd2Fxnv0OyO8aA4cVIZm7zC/go3uUvHuqhhdt2FktXyD8WrkezYfgmek2JosyJF9g3NoZWrNAzV7codWhlsLi3xk2sXJV2ZFo4oJpWkuy+8L87wjZ+8YtuZLtm1ZxULqlQ/w9rXCx1Hf9CPxbINsJBTtr3fKvvNqNxScAOHkOWIl13q2QHxUFjrqUReu8J2W4TOfjyKMZ6elbDY8Gz7kTXQCwF3aAWcgmTePJzB8BfH+9nr8c4ROjn00VFzQzXLBc2r3Agl21toQhuwl6SO1Nvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=3FzEbD17Zx3w46g9Bpji7121w1zcUR1gHsg0EX+IZIc=; b=Sl1pq53dxDayLKpJwj/CWX6pbDbeKRmJ5jO23/779hOv5JEmomWwb/ofYhMzcK+EnA8JB5Q7mLmH8/xj6HDu6Q7ldSaRES/UaJPu10h0UyVehUGYyHvUtnzXOVb1FdiExXH5v1JF97qNGO8O5Mzf+TNz5jwNpMa3qAy+jTWKeSzhFx9OJN6VBoRk+2UqlF+Zy7lKTF1OWpt7Ef92PptP6QrPUgMQ1mM7MvRvvpej2ULcYMZTnouBlzLhEgs0ZkR1VbnoeIrZAr1+gRA/LdUrSrDF4Ou/jonG6DiuvGmCtGxxlv4F+Gqm5cf4pu4DSm+JpRDTsDBOH9hlfNm5pi0etw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:610:1cc::7) by DS7PR84MB3085.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:8:9e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Thu, 19 Mar 2026 23:51:34 +0000 Received: from CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f]) by CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2c54:3534:122f:e74f%4]) with mapi id 15.20.9723.019; Thu, 19 Mar 2026 23:51:34 +0000 From: "Pradhan, Sanman" To: "linux-hwmon@vger.kernel.org" CC: "linux@roeck-us.net" , "linux-kernel@vger.kernel.org" , Sanman Pradhan Subject: [PATCH v4 3/3] hwmon: (pmbus/max31785) use access_delay for PMBus-mediated accesses Thread-Topic: [PATCH v4 3/3] hwmon: (pmbus/max31785) use access_delay for PMBus-mediated accesses Thread-Index: AQHct/tRTFU6eQdWTkekbhGPzitG6Q== Date: Thu, 19 Mar 2026 23:51:34 +0000 Message-ID: <20260319234945.151487-4-sanman.pradhan@hpe.com> References: <20260319234945.151487-1-sanman.pradhan@hpe.com> In-Reply-To: <20260319234945.151487-1-sanman.pradhan@hpe.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR84MB3523:EE_|DS7PR84MB3085:EE_ x-ms-office365-filtering-correlation-id: ef31f928-a881-4c50-f338-08de861273c4 x-ld-processed: 105b2061-b669-4b31-92ac-24d304d195dc,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|1800799024|376014|38070700021|18002099003|56012099003|22082099003; x-microsoft-antispam-message-info: 20wLwHKe11RnSgBMT9b0tpWQ4S/pn5A1V3HW3TpiFNoEuja01mB0rT0+ZtWaJM2Q069jf1r1qayOAMQa3S1YTfTP2KqCJKGgoQF6G8pmumYenTZldrfcoiHvB6kYaQic/xLvgel08L/RameJwXl9fEKv3Hlb//ozH6QbHNJ0Xo8NBu1Cepuj46pnNTrC0B2ZIkdie/c2mzLs964fBcwBe4B5DWjMQC26aUHi4AcdUGb+XV+ZKt9a+L6K/gjD2kYfeGXidYuYDT7JBc7B4gmQgnjTV8cYbad7P3tV0JeGQE7LNtVIUcLlFvPy0941aRdnHpZ3QaFdr8ZGCevkrr9KghY0mKXvJYvP18B3SjZyEYjtbo3+1cdAGhT5sSIDxfHTvgbk5h1JY+6K78f2ayZ6LHNvvo/RDhUTugEPMgpeuRuXGpxrVwbSntLP1vQFqgDpLLXSwhuUDfx+DeeJjBXI3ZyTUipF4fdAE3LvpUZphIc3t82W3bTeUpDXkwyi29ereDf3kbUWX/vr2VqB3GuthDr1jyOr3cxfGLKYVqRqSWZqhFZVzb1KxBzN6329wzV0z04P/fCP70hqaVMWdIkkImVJqh+gMMZ+jiQMGkPXVHWojjqXVbbRUxTLK0fNomlfEHuH1bNBQM7aIII3l5GsIMso2tX071CLVzhobRN4Xqr6NRFa6sE5fnNMcwIVf3w/V5JfG4BYfQzfaXSNJ0/SNjaWehIKdxsM2wMMbT9EKBxD4UuXP+cfWb3bJ86kD2aZ4COmPSG/OvJt6yb7G9m8AZ7S1DYOii//rMyrmX/XnJg= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(38070700021)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?iVUGO03nW7MFcDJAx/Zam9qaVXVrVatgJVsK6s5kTGW5C+dvioFyUkD9o4?= =?iso-8859-1?Q?ZTVHl5IgIL3GJyKd23McZDEPctPRRE5ds4kWg1ZriLnE7nG2NCEvZTDrjs?= =?iso-8859-1?Q?gie2L4ItwnV/R9hUAv0Ua6y2jQeRN1S8HjZ1I4LfnpLkp6epxFQroDzldF?= =?iso-8859-1?Q?3MNet9LVyRxOGcPSgpd5V2JSjitgoI6u7+vYeSod087wh9sJGWWOlStWYf?= =?iso-8859-1?Q?upHwJiz/Wg1zGqvF9JK6g67TlM2pnX5bFk95bPX2Hi6lY+UGP7kmKnQ2KT?= =?iso-8859-1?Q?X6pVCyl23mSuqKc3Xsi+SsjOuAE/F2Dhu9YYegYJDRGwXT7Up/BbdK4stz?= =?iso-8859-1?Q?JuleBIQiiRVobXZt0LHmZCPE1fw7GLsQ67FhVqcf3IJ/x1aHUBqu/v36Ma?= =?iso-8859-1?Q?Doj6Ghb+9gTG0WPklA6ilj70Ilqq/YjkPxvhL60Wc/7Fo/qbQElwj1a95I?= =?iso-8859-1?Q?HjsC+RgPM4VJYR5jbnwGycAPcRxGXg0b6LWDjDOFY6NKzc1l+0DWRBrOv3?= =?iso-8859-1?Q?YN+8HPq9L6V/hMGK0T/lSdGHjN81bEn0zqJp1WHZ1kvx+q4wt7GXGKqr8h?= =?iso-8859-1?Q?bFnVMV3h02RROT1vusAb/cj43m+W2idFu/MOnrR6UDeodhvR5ni9L+HVWX?= =?iso-8859-1?Q?KFnCKjfUpLA9tCZ7rKz+SI6eeQ9OF5LPxLaiAlGAsxEEbpQvcSABf/GbT5?= =?iso-8859-1?Q?fPlN+Bhzr0UMziLYnoninVGBspvQcR3l5T0OGI3IZUg02zUV+crq00sE03?= =?iso-8859-1?Q?9xcvAU/mAoPEDP+pa5q+KpgNxncRzcAgaoRj4UZaQbnhQMzIodMNk2wa2X?= =?iso-8859-1?Q?6VjVl+MENjtUPVwcHzTo1TetutTP2dNVLxsnbsz0S5tm3ati728/FjHQU7?= =?iso-8859-1?Q?EQwWAouCwTH0edAhZbxIKlXV6GyuGiz7uKRWSseWGoJ7rExMYbE3VRAvMT?= =?iso-8859-1?Q?8hO1nbcTMK1k60xj2Fvuqj/v20LSOno9gs45wxyUQFuG/sW9EVfVEPpuKV?= =?iso-8859-1?Q?XHdo3dhQFB8K6DquWH+r0Vk4s0DAypCr75Lc3bVefSQTz0aapnrM0D3gGv?= =?iso-8859-1?Q?g2U7Ay6Uy/3Kibq16L8YUxiYm8HV5zQ7ur9s3qNgEh0kSTpM5wp4McCjXG?= =?iso-8859-1?Q?Y50K9wuyyHtI1XrHmnAjUY1YfvJagVgf/z33mIWYQSbcZRWoqBV9UWB6K1?= =?iso-8859-1?Q?/5UOYc49zo5NrfimY5+IQPrrPxGpkuPlXDhO74bKyMZcK9MQhEDaVR0/H2?= =?iso-8859-1?Q?Yvo8l2YnETv393ncmKc3mrZMOjodLyDN3jg5xeBeMI/L4tQoNTjh5aWZSy?= =?iso-8859-1?Q?r9BEkWbDCQl3yOm2uq2IdkbpgG0hgVEhXkuLk8/0CCR0/ARb1r+oKbWkxn?= =?iso-8859-1?Q?LgMNHd4bYx7XNanXpEWAZpgNU4ldrBO7LjjkWaKxV7zvM3FyzbUAHRcfPz?= =?iso-8859-1?Q?S30ImHPjZQnKAC8oj9agxUoM1THQxJKLlsn5ttA4EKc+DFg/hvuijyg2MX?= =?iso-8859-1?Q?CfeY9k5s1lSXAT1Y4iSSXcb8wKk4oIQpTnr2Im0zAeJFIIeSp4cDLdI8p2?= =?iso-8859-1?Q?L/t07Ay/ti4Wd2aH2G5Ru2D+dl1FM9rA6SeNz4A7mxMMTSXNC2eFgGePyp?= =?iso-8859-1?Q?NLyI8GrBSTG+Bf1/DwfBB6ifEdPLm2isjhpMbjnA7L0qt0SYJ0grmg/E2p?= =?iso-8859-1?Q?LWDsZyMNScKENjOx8UeLSMgwMfRZjBG0a/PcnOsZ1pLrXVIdxyYKkTn81H?= =?iso-8859-1?Q?EBbPyTtTVkCmOUI6NS+2d/Nu5w9ZgfvxWiAFVndQBqqQemM0QcFvq6VEmC?= =?iso-8859-1?Q?vjPFjzVKxA=3D=3D?= Content-Transfer-Encoding: quoted-printable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: Wp/zFLATuNx9oOeAnKCuOkPry5tU88I6D8399gyq7/i5wRu5l1YSqtPN+LVRyi/DiClEL1O6tQKTk9fe+YTsEKGVwOUL3pP5goW4VN04zsnanIlt1DRF41/rbdjffmKa0MyxJ2YXLg+5kC1ljqWFo6hNBSGYQnQqsAaqmCd5qJE66MsENS8DKlmZtIlWB5Sh4Uyfw0BcaF+tpq2rfiBon7bA3wxP7D+hQ2QqFJOEsK42dzNhy+iU508oSywO+DsYrF1pmVwW351xq0uOUy6VyeB5mkttEBkAc/rWnQRsrmR8OzDHd+GsGR8m1HW4Hu71Q7rn/jpy1pDBvV3AROv+YA== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR84MB3523.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: ef31f928-a881-4c50-f338-08de861273c4 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2026 23:51:34.2729 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +qmgmWItJNQvJ8smsc/Hwa7zqxivDOtEgwzoRZ7bWplVrQVecGa3TqV/Ovz6P+kN5nJnyfUsYOqsT6QMa3DMlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR84MB3085 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: PlrGs33QT03UHK3zLxN7Mx_-DL5sfMh5 X-Authority-Analysis: v=2.4 cv=S5fUAYsP c=1 sm=1 tr=0 ts=69bc8c0e cx=c_pps a=5jkVtQsCUlC8zk5UhkBgHg==:117 a=5jkVtQsCUlC8zk5UhkBgHg==:17 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=8nJEP1OIZ-IA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=gQcMVamqm3wCPoSYhaRC:22 a=ZSrvDirOKP4VPF05hnFf:22 a=OUXY8nFuAAAA:8 a=1dJJvSGK75pZe7GnG3sA:9 a=wPNLvfGTeEIA:10 a=cAcMbU7R10T-QSRYIcO_:22 X-Proofpoint-GUID: PlrGs33QT03UHK3zLxN7Mx_-DL5sfMh5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzE5MDE5MiBTYWx0ZWRfX1eKfvDkrBMOJ 2b8t0lG4Pis88Ubm5YFC7aTCMnNiVdiYA5HUqYJGymdwLIn/pfqE8knfsfLt8dyoRYl8bMpAHuV iQr5CA0i7RY5ae6VSDQim3P4GWt6u+SpvLQoSoyN9SymoH1dxMW8M6+qPbmlyztBLFD5kS5THoG IrBnTkq+cQZ3jjeimvIPini6LSXJGvBGXRos0igTIeGMM6ikvqBrvxh09eMH2WYZGUv58wiP0bP xOrnyXGBSy+v2xs7P2V9kYYUNmPB9sfLPzyiZWBx2jyipC5LyJibtMyKL4NpLhTKyjYvf33Rov5 cbeY9FdDG0c6b98+x4HxxxMYOZnXwfF3m0rVfzDPncqCj9np0HxSNh4WvKmHGPkJbhFEfxoIjDU 3x+0q9WWGrQjEtG/ql1AMnQSUmeuETrqGz8RAqb8MLQxHDscNeCmK8NM+x8aKnZ7tAUoM6bIa7/ Gf+bebobbJjX3NbuUrw== X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-19_04,2026-03-19_05,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603190192 Content-Type: text/plain; charset="utf-8" From: Sanman Pradhan The MAX31785 fan controller occasionally NACKs master transactions if accesses are too tightly spaced. To avoid this, the driver currently enforces a 250us inter-access delay with a private timestamp and wrapper functions around both raw SMBus accesses and PMBus helper paths. Simplify the driver by using pmbus_driver_info.access_delay for normal PMBus-mediated accesses instead, and remove the driver-local PMBus read/write wrappers. Keep local delay handling for raw SMBus accesses used before pmbus_do_probe(). For the raw i2c_transfer() long-read path, which bypasses PMBus core timing, use pmbus_wait() and pmbus_update_ts() so the PMBus core also tracks the raw transfer timing. Update the PMBus core timestamp before checking the transfer result so failed transfers do not skip the required delay before the next PMBus access. Also update max31785_read_byte_data() so PMBUS_FAN_CONFIG_12 accesses are only remapped for virtual pages, allowing physical-page accesses to fall back to the PMBus core. With that change, use pmbus_update_fan() for fan configuration updates. Finally, use the delayed raw read helper for MFR_REVISION during probe, rename the local variable "virtual" to "vpage", drop the unused to_max31785_data() macro, and add an explicit delay before pmbus_do_probe() so the first PMBus core access is properly spaced from the last pre-probe raw access. Signed-off-by: Sanman Pradhan --- v4: - Standardized on the Juniper email address to resolve the=20 From/SOB mismatch. v3: - Added an explicit max31785_wait() before pmbus_do_probe() to ensure proper timing spacing during the handover to the PMBus core. v2: - Replaced local usleep_range() with core pmbus_wait() and pmbus_update_ts() in the raw long-read path. - Updated read_byte_data() to allow core fallback for physical pages. --- drivers/hwmon/pmbus/max31785.c | 191 +++++++++++---------------------- 1 file changed, 60 insertions(+), 131 deletions(-) diff --git a/drivers/hwmon/pmbus/max31785.c b/drivers/hwmon/pmbus/max31785.c index 50073fe0c5e88..260aa8fb50f13 100644 --- a/drivers/hwmon/pmbus/max31785.c +++ b/drivers/hwmon/pmbus/max31785.c @@ -31,8 +31,6 @@ struct max31785_data { struct pmbus_driver_info info; }; =20 -#define to_max31785_data(x) container_of(x, struct max31785_data, info) - /* * MAX31785 Driver Workaround * @@ -40,9 +38,8 @@ struct max31785_data { * These issues are not indicated by the device itself, except for occasio= nal * NACK responses during master transactions. No error bits are set in STA= TUS_BYTE. * - * To address this, we introduce a delay of 250us between consecutive acce= sses - * to the fan controller. This delay helps mitigate communication problems= by - * allowing sufficient time between accesses. + * Keep minimal local delay handling for raw pre-probe SMBus accesses. + * Normal PMBus-mediated accesses use pmbus_driver_info.access_delay inste= ad. */ static inline void max31785_wait(const struct max31785_data *data) { @@ -54,89 +51,40 @@ static inline void max31785_wait(const struct max31785_= data *data) } =20 static int max31785_i2c_write_byte_data(struct i2c_client *client, - struct max31785_data *driver_data, - int command, u8 data) + struct max31785_data *data, + int command, u8 value) { int rc; =20 - max31785_wait(driver_data); - rc =3D i2c_smbus_write_byte_data(client, command, data); - driver_data->access =3D ktime_get(); + max31785_wait(data); + rc =3D i2c_smbus_write_byte_data(client, command, value); + data->access =3D ktime_get(); return rc; } =20 static int max31785_i2c_read_word_data(struct i2c_client *client, - struct max31785_data *driver_data, + struct max31785_data *data, int command) { int rc; =20 - max31785_wait(driver_data); + max31785_wait(data); rc =3D i2c_smbus_read_word_data(client, command); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_read_byte_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int command) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_read_byte_data(client, page, command); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_write_byte_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int command, u16 data) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_write_byte_data(client, page, command, data); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_read_word_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int phase, int command) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_read_word_data(client, page, phase, command); - driver_data->access =3D ktime_get(); - return rc; -} - -static int _max31785_write_word_data(struct i2c_client *client, - struct max31785_data *driver_data, - int page, int command, u16 data) -{ - int rc; - - max31785_wait(driver_data); - rc =3D pmbus_write_word_data(client, page, command, data); - driver_data->access =3D ktime_get(); + data->access =3D ktime_get(); return rc; } =20 static int max31785_read_byte_data(struct i2c_client *client, int page, in= t reg) { - const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); - struct max31785_data *driver_data =3D to_max31785_data(info); - switch (reg) { case PMBUS_VOUT_MODE: return -ENOTSUPP; case PMBUS_FAN_CONFIG_12: - return _max31785_read_byte_data(client, driver_data, - page - MAX31785_NR_PAGES, - reg); + if (page < MAX31785_NR_PAGES) + return -ENODATA; + return pmbus_read_byte_data(client, + page - MAX31785_NR_PAGES, + reg); } =20 return -ENODATA; @@ -178,7 +126,21 @@ static int max31785_read_long_data(struct i2c_client *= client, int page, if (rc < 0) return rc; =20 + /* + * Ensure the raw transfer is properly spaced from the + * preceding PMBus transaction. + */ + pmbus_wait(client); + rc =3D i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); + + /* + * Update PMBus core timing state for the raw transfer, even on error. + * Pass 0 as the operation mask since this is a raw read, intentionally + * neither PMBUS_OP_WRITE nor PMBUS_OP_PAGE_CHANGE. + */ + pmbus_update_ts(client, 0); + if (rc < 0) return rc; =20 @@ -203,19 +165,16 @@ static int max31785_get_pwm(struct i2c_client *client= , int page) return rv; } =20 -static int max31785_get_pwm_mode(struct i2c_client *client, - struct max31785_data *driver_data, int page) +static int max31785_get_pwm_mode(struct i2c_client *client, int page) { int config; int command; =20 - config =3D _max31785_read_byte_data(client, driver_data, page, - PMBUS_FAN_CONFIG_12); + config =3D pmbus_read_byte_data(client, page, PMBUS_FAN_CONFIG_12); if (config < 0) return config; =20 - command =3D _max31785_read_word_data(client, driver_data, page, 0xff, - PMBUS_FAN_COMMAND_1); + command =3D pmbus_read_word_data(client, page, 0xff, PMBUS_FAN_COMMAND_1); if (command < 0) return command; =20 @@ -233,8 +192,6 @@ static int max31785_get_pwm_mode(struct i2c_client *cli= ent, static int max31785_read_word_data(struct i2c_client *client, int page, int phase, int reg) { - const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); - struct max31785_data *driver_data =3D to_max31785_data(info); u32 val; int rv; =20 @@ -263,7 +220,7 @@ static int max31785_read_word_data(struct i2c_client *c= lient, int page, rv =3D max31785_get_pwm(client, page); break; case PMBUS_VIRT_PWM_ENABLE_1: - rv =3D max31785_get_pwm_mode(client, driver_data, page); + rv =3D max31785_get_pwm_mode(client, page); break; default: rv =3D -ENODATA; @@ -294,35 +251,7 @@ static inline u32 max31785_scale_pwm(u32 sensor_val) return (sensor_val * 100) / 255; } =20 -static int max31785_update_fan(struct i2c_client *client, - struct max31785_data *driver_data, int page, - u8 config, u8 mask, u16 command) -{ - int from, rv; - u8 to; - - from =3D _max31785_read_byte_data(client, driver_data, page, - PMBUS_FAN_CONFIG_12); - if (from < 0) - return from; - - to =3D (from & ~mask) | (config & mask); - - if (to !=3D from) { - rv =3D _max31785_write_byte_data(client, driver_data, page, - PMBUS_FAN_CONFIG_12, to); - if (rv < 0) - return rv; - } - - rv =3D _max31785_write_word_data(client, driver_data, page, - PMBUS_FAN_COMMAND_1, command); - - return rv; -} - -static int max31785_pwm_enable(struct i2c_client *client, - struct max31785_data *driver_data, int page, +static int max31785_pwm_enable(struct i2c_client *client, int page, u16 word) { int config =3D 0; @@ -351,23 +280,20 @@ static int max31785_pwm_enable(struct i2c_client *cli= ent, return -EINVAL; } =20 - return max31785_update_fan(client, driver_data, page, config, - PB_FAN_1_RPM, rate); + return pmbus_update_fan(client, page, 0, config, + PB_FAN_1_RPM, rate); } =20 static int max31785_write_word_data(struct i2c_client *client, int page, int reg, u16 word) { - const struct pmbus_driver_info *info =3D pmbus_get_driver_info(client); - struct max31785_data *driver_data =3D to_max31785_data(info); - switch (reg) { case PMBUS_VIRT_PWM_1: - return max31785_update_fan(client, driver_data, page, 0, - PB_FAN_1_RPM, - max31785_scale_pwm(word)); + return pmbus_update_fan(client, page, 0, 0, + PB_FAN_1_RPM, + max31785_scale_pwm(word)); case PMBUS_VIRT_PWM_ENABLE_1: - return max31785_pwm_enable(client, driver_data, page, word); + return max31785_pwm_enable(client, page, word); default: break; } @@ -391,6 +317,7 @@ static const struct pmbus_driver_info max31785_info =3D= { .read_byte_data =3D max31785_read_byte_data, .read_word_data =3D max31785_read_word_data, .write_byte =3D max31785_write_byte, + .access_delay =3D MAX31785_WAIT_DELAY_US, =20 /* RPM */ .format[PSC_FAN] =3D direct, @@ -438,29 +365,29 @@ static const struct pmbus_driver_info max31785_info = =3D { }; =20 static int max31785_configure_dual_tach(struct i2c_client *client, - struct pmbus_driver_info *info) + struct max31785_data *data) { + struct pmbus_driver_info *info =3D &data->info; int ret; int i; - struct max31785_data *driver_data =3D to_max31785_data(info); =20 for (i =3D 0; i < MAX31785_NR_FAN_PAGES; i++) { - ret =3D max31785_i2c_write_byte_data(client, driver_data, + ret =3D max31785_i2c_write_byte_data(client, data, PMBUS_PAGE, i); if (ret < 0) return ret; =20 - ret =3D max31785_i2c_read_word_data(client, driver_data, + ret =3D max31785_i2c_read_word_data(client, data, MFR_FAN_CONFIG); if (ret < 0) return ret; =20 if (ret & MFR_FAN_CONFIG_DUAL_TACH) { - int virtual =3D MAX31785_NR_PAGES + i; + int vpage =3D MAX31785_NR_PAGES + i; =20 - info->pages =3D virtual + 1; - info->func[virtual] |=3D PMBUS_HAVE_FAN12; - info->func[virtual] |=3D PMBUS_PAGE_VIRTUAL; + info->pages =3D vpage + 1; + info->func[vpage] |=3D PMBUS_HAVE_FAN12; + info->func[vpage] |=3D PMBUS_PAGE_VIRTUAL; } } =20 @@ -471,7 +398,7 @@ static int max31785_probe(struct i2c_client *client) { struct device *dev =3D &client->dev; struct pmbus_driver_info *info; - struct max31785_data *driver_data; + struct max31785_data *data; bool dual_tach =3D false; int ret; =20 @@ -480,20 +407,20 @@ static int max31785_probe(struct i2c_client *client) I2C_FUNC_SMBUS_WORD_DATA)) return -ENODEV; =20 - driver_data =3D devm_kzalloc(dev, sizeof(struct max31785_data), GFP_KERNE= L); - if (!driver_data) + data =3D devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); + if (!data) return -ENOMEM; =20 - info =3D &driver_data->info; - driver_data->access =3D ktime_get(); + data->access =3D ktime_get(); + info =3D &data->info; *info =3D max31785_info; =20 - ret =3D max31785_i2c_write_byte_data(client, driver_data, - PMBUS_PAGE, 255); + ret =3D max31785_i2c_write_byte_data(client, data, + PMBUS_PAGE, 0xff); if (ret < 0) return ret; =20 - ret =3D i2c_smbus_read_word_data(client, MFR_REVISION); + ret =3D max31785_i2c_read_word_data(client, data, MFR_REVISION); if (ret < 0) return ret; =20 @@ -509,11 +436,13 @@ static int max31785_probe(struct i2c_client *client) } =20 if (dual_tach) { - ret =3D max31785_configure_dual_tach(client, info); + ret =3D max31785_configure_dual_tach(client, data); if (ret < 0) return ret; } =20 + max31785_wait(data); + return pmbus_do_probe(client, info); } =20 --=20 2.34.1