Re: [PATCH v3 3/3] spmi: spmi-pmic-arb: add support for PMIC arbiter v8
From: Jishnu Prakash
Date: Mon Oct 27 2025 - 05:25:07 EST
Hi Neil,
On 10/24/2025 3:48 PM, Neil Armstrong wrote:
> Hi,
>
> On 10/24/25 11:33, Jishnu Prakash wrote:
>> From: David Collins <david.collins@xxxxxxxxxxxxxxxx>
>>
>> PMIC arbiter v8 supports up to 4 SPMI buses and up to 8192 PMIC
>> peripherals. Its register map differs from v7 as several fields
>> increased in size. Add support for PMIC arbiter version 8.
>>
>> Signed-off-by: David Collins <david.collins@xxxxxxxxxxxxxxxx>
>> Signed-off-by: Kamal Wadhwa <kamal.wadhwa@xxxxxxxxxxxxxxxx>
>> Signed-off-by: Jishnu Prakash <jishnu.prakash@xxxxxxxxxxxxxxxx>
>> ---
>> drivers/spmi/spmi-pmic-arb.c | 324 +++++++++++++++++++++++++++++++++++++++----
>> 1 file changed, 294 insertions(+), 30 deletions(-)
>>
>> diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
>> index 91581974ef84..612736973e4b 100644
>> --- a/drivers/spmi/spmi-pmic-arb.c
>> +++ b/drivers/spmi/spmi-pmic-arb.c
>> @@ -3,6 +3,7 @@
>> * Copyright (c) 2012-2015, 2017, 2021, The Linux Foundation. All rights reserved.
>> */
>> #include <linux/bitmap.h>
>> +#include <linux/bitfield.h>
>> #include <linux/delay.h>
>> #include <linux/err.h>
>> #include <linux/interrupt.h>
>> @@ -25,10 +26,12 @@
>> #define PMIC_ARB_VERSION_V3_MIN 0x30000000
>> #define PMIC_ARB_VERSION_V5_MIN 0x50000000
>> #define PMIC_ARB_VERSION_V7_MIN 0x70000000
>> +#define PMIC_ARB_VERSION_V8_MIN 0x80000000
>> #define PMIC_ARB_INT_EN 0x0004
>> #define PMIC_ARB_FEATURES 0x0004
>> #define PMIC_ARB_FEATURES_PERIPH_MASK GENMASK(10, 0)
>> +#define PMIC_ARB_FEATURES_V8_PERIPH_MASK GENMASK(12, 0)
>> #define PMIC_ARB_FEATURES1 0x0008
>> @@ -50,9 +53,10 @@
>> #define SPMI_MAPPING_BIT_IS_1_RESULT(X) (((X) >> 0) & 0xFF)
>> #define SPMI_MAPPING_TABLE_TREE_DEPTH 16 /* Maximum of 16-bits */
>> -#define PMIC_ARB_MAX_PPID BIT(12) /* PPID is 12bit */
>> +#define PMIC_ARB_MAX_PPID BIT(13)
>> #define PMIC_ARB_APID_VALID BIT(15)
>> #define PMIC_ARB_CHAN_IS_IRQ_OWNER(reg) ((reg) & BIT(24))
>> +#define PMIC_ARB_V8_CHAN_IS_IRQ_OWNER(reg) ((reg) & BIT(31))
>> #define INVALID_EE 0xFF
>> /* Ownership Table */
>> @@ -96,30 +100,33 @@ enum pmic_arb_channel {
>> PMIC_ARB_CHANNEL_OBS,
>> };
>> -#define PMIC_ARB_MAX_BUSES 2
>> +#define PMIC_ARB_MAX_BUSES 4
>
> Why PMIC_ARB_MAX_BUSES is changed to 4 ?
PMIC_ARB_MAX_BUSES is used only in the definition of
struct spmi_pmic_arb, for this member:
struct spmi_pmic_arb_bus *buses[PMIC_ARB_MAX_BUSES];
The PMIC Arbiter v8 is capable of supporting up to 4
SPMI buses, so this change is needed to support it.
Thanks,
Jishnu
>
> Neil
>
> <snip>
>