Re: [PATCH 2/2] spmi: spmi-pmic-arb: add support for PMIC arbiter v8.5

From: Fenglin Wu

Date: Thu Apr 02 2026 - 00:26:08 EST



On 4/1/2026 7:22 PM, Dmitry Baryshkov wrote:
On Wed, Apr 01, 2026 at 02:41:24AM -0700, Fenglin Wu wrote:
PMIC arbiter v8.5 is an extension of PMIC arbiter v8 that updated
the definition of the channel status register bit fields. Add support
to handle this difference.

Signed-off-by: Fenglin Wu <fenglin.wu@xxxxxxxxxxxxxxxx>
---
drivers/spmi/spmi-pmic-arb.c | 69 ++++++++++++++++++++++++++++++++++++++------
1 file changed, 60 insertions(+), 9 deletions(-)

diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
index 69f8d456324a..deeaa39bb647 100644
--- a/drivers/spmi/spmi-pmic-arb.c
+++ b/drivers/spmi/spmi-pmic-arb.c
@@ -28,6 +28,7 @@
#define PMIC_ARB_VERSION_V5_MIN 0x50000000
#define PMIC_ARB_VERSION_V7_MIN 0x70000000
#define PMIC_ARB_VERSION_V8_MIN 0x80000000
+#define PMIC_ARB_VERSION_V8P5_MIN 0x80050000
#define PMIC_ARB_INT_EN 0x0004
#define PMIC_ARB_FEATURES 0x0004
@@ -63,11 +64,34 @@
#define SPMI_OWNERSHIP_PERIPH2OWNER(X) ((X) & 0x7)
/* Channel Status fields */
-enum pmic_arb_chnl_status {
- PMIC_ARB_STATUS_DONE = BIT(0),
- PMIC_ARB_STATUS_FAILURE = BIT(1),
- PMIC_ARB_STATUS_DENIED = BIT(2),
- PMIC_ARB_STATUS_DROPPED = BIT(3),
+struct pmic_arb_chnl_status_mask {
+ u8 done;
+ u8 failure;
+ u8 crc;
+ u8 parity;
+ u8 nack;
+ u8 denied;
+ u8 dropped;
+};
+
+static const struct pmic_arb_chnl_status_mask chnl_status_mask = {
+ .done = BIT(0),
+ .failure = BIT(1),
+ .crc = 0,
+ .parity = 0,
+ .nack = 0,
+ .denied = BIT(2),
+ .dropped = BIT(3),
+};
+
+static const struct pmic_arb_chnl_status_mask chnl_status_mask_v8p5 = {
+ .done = BIT(0),
+ .failure = BIT(1),
+ .crc = BIT(2),
+ .parity = BIT(3),
+ .nack = BIT(4),
+ .denied = BIT(5),
+ .dropped = BIT(6),
Would it be better to extract generation-specific callback to decode the
error rather than defining the list of masks?

Are you proposing to add a callback in pmic_arb_ver_ops, like '*check_chnl_status', and create separate implementations for PMIC arbiter versions before and after v8.5?

This approach would add more extensive code changes with some code duplication, especially for handling common error bits shared across all versions—even if they only print error messages and return an error code. Is that a concern?

Fenglin