From nobody Thu Oct 2 06:17:56 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 68EEC27AC3D for ; Fri, 19 Sep 2025 20:00:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758312057; cv=none; b=o8EDaltMKS9xGP9Wi71GBwMPQ16CxUfxVWTNF9jhhyzQ4y9xxR0lklcBtl06cZk+U5GgqQ6gkoXhcG6ksI1ngWhnyZetLDvDtPwiyr/eRQ0V0z3erN8rbRhtXcfW4KpB+5fzK+Th93+G32VLFe5z5sb4qYkk/b0KHmZUBz8v7ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758312057; c=relaxed/simple; bh=Zq9NQ1VbB9Tj7WKEy2NXLrm6JaJEvu6MFIHyIWFCKeA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mj5XU7InSCpd5Da5Lkyt5Ak8QOustwTFnTceQ+arn6tKhr33w+frTbXGIo6CJHS/VdBciG+h2GG1d1Blp6AcNA5TVKUR+ZOY+S3Lq2KUAfjRrB4PCvmM9/x5SWmRQnK0bB5NFc/ioBv1pnfrvYlLh20GflkciX+R5/UhAtCc34c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=OZd7dPj7; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="OZd7dPj7" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58JJM4ei003360 for ; Fri, 19 Sep 2025 20:00:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Jg+deZUns2OlXgXhJM5QdhR9WQrOxfsuz9UWmQ6lhXc=; b=OZd7dPj77QM1QE9D RKNcngCO+eJX/vh/ZJgOvxWkU0s8xSrt/FtTr8l+wOEG2Hb3W4ZDPqSLB9xHLg7/ QYr9sn7pG622Aw4FRfkgoWex2cjmM02jZfDgsqhNxrk6r/MDRHPZ3vvcXYLrjcQ9 Pg5Mejz4Z9ruKMELPnFo05/4qVd32zlNAJQQGRM1r4+bTW9eAVfrfSzA59NxEpZW MKy+J+exKzch5icVFHyCUWfLlTtdZtyDXfcM1/RtRyRvD4keBPx1NAz8IAjf4AkI Ch4d9Thqk8iSbj6HbPBVP1FOxGfQw/L63i0FzHqj8/eqv7ABfTZ+znN8roYUt1UA Ez7K3w== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 497wqh18ky-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Sep 2025 20:00:53 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2697410e7f9so40808595ad.2 for ; Fri, 19 Sep 2025 13:00:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758312052; x=1758916852; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Jg+deZUns2OlXgXhJM5QdhR9WQrOxfsuz9UWmQ6lhXc=; b=bv5J83hD/qfTTovo8KEo6f5CLLwA+Oh8TN8bSGYeAxQKYQrjZKBl9rZcFHhppuWbtD jk0jo/KY4WiV7XQPDlKoDWw03SxGba1A11jXb+o7r32tYsJZrsJ9fU8BBHjLlgSBRGoF ZzA2qnioZsflsCfjyIJSsSnGaxkx7WBdn95bgpsFtpPtz/cY/tabGTttRimyDQuH7ZP3 +j0Qd9A5nP7oaFM7BnGSiujs32maZzQ4zWZCy1RyXIlyXbzoeAWSqZ5UrhIT9bg6wciI 3vfWCBgJ9ro+I2KUwmJzSDES63uBf1G1895PX2UQhiC9mXtnZUqmGvjSkFlE4g2XjpIM Hg2g== X-Gm-Message-State: AOJu0Yynlg0L3bNJeiuQYZWAdHWZ6O9VPNdlQBu4w35kJjB3l6fMPkVT u4Onq37iQ+XPruxdsw2qxuT4mzkjKv0LbcyuAzT8iZc30lXtMCxKrqRbyND3cDyiriedOTvKvwz pwtEYz6raz8+iW1rCOTs1Lomso5bDoJCWLhYWtwg55zw15UJzd4jk5m/HypQcKuFdncA= X-Gm-Gg: ASbGnctKtu9pGbA3NP7ETVAErltvm2RYHsJw7zUMqwNVypdElgCqJ11MzbAIZV07jNN 0Z8ELT1XDhCiK5RNbjVBslKEIngAwVKbd9MhvS4qMZiDrkw+uwlI5SdwLf8DnKHVzjj77USUR48 a0CxwkZntK9R7vs1aREIQh+nW3MQ6z5MGdBpIk3j84dQlIP2vXPciyZPPHPUCJhAYSFWPGBAVqQ YX8wY5vL/th+dB2n5LaARcCnlUc4uZou4WxvqAuQxS2qzcwBZTqzkkpPmed/epmBaoeVOCdBaBl oI6sG8JaRWUPN9EPnEYX1z6UPkhwYBdJnPGWweBtstDn95iQmNgbbV/REkrxWijE1x3RFnugVcV 5XYZMFeVZeX8FYooROxaYXxY9Kg== X-Received: by 2002:a17:902:ce92:b0:264:ee2:c40f with SMTP id d9443c01a7336-269ba564ed5mr74300675ad.52.1758312052045; Fri, 19 Sep 2025 13:00:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGbCwk/FFynlo9j9ursa7Ky62ZdUrITzr0YVl+oIDAk29faXDzZhSaczYJTSpkuoMfhHEH+Hw== X-Received: by 2002:a17:902:ce92:b0:264:ee2:c40f with SMTP id d9443c01a7336-269ba564ed5mr74299875ad.52.1758312051182; Fri, 19 Sep 2025 13:00:51 -0700 (PDT) Received: from hu-kamalw-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698030ee20sm63053905ad.109.2025.09.19.13.00.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Sep 2025 13:00:50 -0700 (PDT) From: Kamal Wadhwa Date: Sat, 20 Sep 2025 01:30:09 +0530 Subject: [PATCH 1/3] spmi: spmi-pmic-arb: add support for PMIC arbiter v8 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250920-glymur-spmi-v8-gpio-driver-v1-1-23df93b7818a@oss.qualcomm.com> References: <20250920-glymur-spmi-v8-gpio-driver-v1-0-23df93b7818a@oss.qualcomm.com> In-Reply-To: <20250920-glymur-spmi-v8-gpio-driver-v1-0-23df93b7818a@oss.qualcomm.com> To: Stephen Boyd , Bjorn Andersson , Linus Walleij Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-gpio@vger.kernel.org, Kamal Wadhwa , Jishnu Prakash , David Collins X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758312044; l=19082; i=kamal.wadhwa@oss.qualcomm.com; s=20241018; h=from:subject:message-id; bh=Fqxtatbk7mgYIrzc/6iUIgOGkhz3U36+T0T+kvTKHGs=; b=5MvZYV+Nfcwg8YHi5CCrreByZNJZKchtn2i5cKgQHIDue9t3sAWJq+tBBVcqfJZapUHAoQI1D c6Plea4g8wAAfJVb6hWpFsHE9Rk7ffIz4Ej8+YmDb4ylPqlkBO+tGcw X-Developer-Key: i=kamal.wadhwa@oss.qualcomm.com; a=ed25519; pk=XbPE6DM5/mJi2tsiYwMCJCZ4O5XPMqColJRlGVcM7Hs= X-Proofpoint-ORIG-GUID: RdYc8w8n1apemS2LU7rLPVagCf6TCsOD X-Authority-Analysis: v=2.4 cv=HITDFptv c=1 sm=1 tr=0 ts=68cdb675 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=yJojWOMRYYMA:10 a=EUspDBNiAAAA:8 a=Ik5BXOhrgj9YKjSFxXcA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: RdYc8w8n1apemS2LU7rLPVagCf6TCsOD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTE3MDEyOCBTYWx0ZWRfX9iJpfZ7pCrC9 ERkCnqPjuwVqTQGkYwJy5qT40/FpevsmrwOUAUsbjmPzal1wpAq0GR9IttNdXOtFSu/WjqPbkWZ ihx8xzkDp8lD5yO/ZZeXhjDgPfev5V3CfTGZOohTvSga5MqSjM34qLjQ2654B8nln7794R2R/tm NYYA22BQst5HL6wcUXFc2LTparxGuPQi8DMogmtfclnZB3Jj2F0aF7vMAZiJBY1KLkC/oIjWCV5 sm0OKwhxARULTkBYRNXDiRm3MVzFJ20VxB8B55X9Hs79aZL5PvYNQJZ7W1x99Xxrlu3vnkj3uha 4OFjN8luKGDDFW28EXhCpnPbNoZrX9yIESMdKZYa+QLDThxENvGFTSUuh0NTnDzdxOhpxYiDtxq lm7Xypp5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-19_02,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 phishscore=0 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509170128 From: David Collins 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 Signed-off-by: Jishnu Prakash Signed-off-by: Kamal Wadhwa --- drivers/spmi/spmi-pmic-arb.c | 327 +++++++++++++++++++++++++++++++++++++++= ---- 1 file changed, 297 insertions(+), 30 deletions(-) diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c index 91581974ef84ea49f2b9c64846634ee2da8df2bb..f91c767ef688fcbe39d9bbb2511= 1387ccc297f54 100644 --- a/drivers/spmi/spmi-pmic-arb.c +++ b/drivers/spmi/spmi-pmic-arb.c @@ -25,10 +25,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 =20 #define PMIC_ARB_FEATURES 0x0004 #define PMIC_ARB_FEATURES_PERIPH_MASK GENMASK(10, 0) +#define PMIC_ARB_FEATURES_V8_PERIPH_MASK GENMASK(12, 0) =20 #define PMIC_ARB_FEATURES1 0x0008 =20 @@ -50,9 +52,10 @@ #define SPMI_MAPPING_BIT_IS_1_RESULT(X) (((X) >> 0) & 0xFF) =20 #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 =20 /* Ownership Table */ @@ -96,30 +99,37 @@ enum pmic_arb_channel { PMIC_ARB_CHANNEL_OBS, }; =20 -#define PMIC_ARB_MAX_BUSES 2 +#define PMIC_ARB_MAX_BUSES 4 +#define PMIC_ARB_MAX_BUSES_V8 4 =20 /* Maximum number of support PMIC peripherals */ #define PMIC_ARB_MAX_PERIPHS 512 #define PMIC_ARB_MAX_PERIPHS_V7 1024 +#define PMIC_ARB_MAX_PERIPHS_V8 8192 #define PMIC_ARB_TIMEOUT_US 1000 #define PMIC_ARB_MAX_TRANS_BYTES (8) =20 #define PMIC_ARB_APID_MASK 0xFF #define PMIC_ARB_PPID_MASK 0xFFF +#define PMIC_ARB_V8_PPID_MASK 0x1FFF =20 /* interrupt enable bit */ #define SPMI_PIC_ACC_ENABLE_BIT BIT(0) =20 +/* + * hwirq value crosses 32 bits only for platforms with more than 16 PMICs, + * none of which happen to support booting Linux in 32-bit mode. + */ #define spec_to_hwirq(slave_id, periph_id, irq_id, apid) \ - ((((slave_id) & 0xF) << 28) | \ - (((periph_id) & 0xFF) << 20) | \ - (((irq_id) & 0x7) << 16) | \ - (((apid) & 0x3FF) << 0)) + (FIELD_PREP(GENMASK(32, 28), (slave_id)) | \ + FIELD_PREP(GENMASK(27, 20), (periph_id)) | \ + FIELD_PREP(GENMASK(18, 16), (irq_id)) | \ + FIELD_PREP(GENMASK(12, 0), (apid))) =20 -#define hwirq_to_sid(hwirq) (((hwirq) >> 28) & 0xF) -#define hwirq_to_per(hwirq) (((hwirq) >> 20) & 0xFF) -#define hwirq_to_irq(hwirq) (((hwirq) >> 16) & 0x7) -#define hwirq_to_apid(hwirq) (((hwirq) >> 0) & 0x3FF) +#define hwirq_to_sid(hwirq) FIELD_GET(GENMASK(32, 28), (hwirq)) +#define hwirq_to_per(hwirq) FIELD_GET(GENMASK(27, 20), (hwirq)) +#define hwirq_to_irq(hwirq) FIELD_GET(GENMASK(18, 16), (hwirq)) +#define hwirq_to_apid(hwirq) FIELD_GET(GENMASK(12, 0), (hwirq)) =20 struct pmic_arb_ver_ops; =20 @@ -138,11 +148,12 @@ struct spmi_pmic_arb; * @domain: irq domain object for PMIC IRQ domain * @intr: address of the SPMI interrupt control registers. * @cnfg: address of the PMIC Arbiter configuration registers. + * @apid_owner: on v8: address of APID owner mapping table registers * @spmic: spmi controller registered for this bus * @lock: lock to synchronize accesses. - * @base_apid: on v7: minimum APID associated with the particular SPMI - * bus instance - * @apid_count: on v5 and v7: number of APIDs associated with the + * @base_apid: on v7 and v8: minimum APID associated with the + particular SPMI bus instance + * @apid_count: on v5, v7 and v8: number of APIDs associated with the * particular SPMI bus instance * @mapping_table: in-memory copy of PPID -> APID mapping table. * @mapping_table_valid:bitmap containing valid-only periphs @@ -159,6 +170,7 @@ struct spmi_pmic_arb_bus { struct irq_domain *domain; void __iomem *intr; void __iomem *cnfg; + void __iomem *apid_owner; struct spmi_controller *spmic; raw_spinlock_t lock; u16 base_apid; @@ -181,6 +193,7 @@ struct spmi_pmic_arb_bus { * @wr_base: on v1 "core", on v2 "chnls" register base off DT. * @core: core register base for v2 and above only (see above) * @core_size: core register base size + * @apid_map: on v8, APID mapping table register base * @channel: execution environment channel to use for accesses. * @ee: the current Execution Environment * @ver_ops: version dependent operations. @@ -193,6 +206,7 @@ struct spmi_pmic_arb { void __iomem *wr_base; void __iomem *core; resource_size_t core_size; + void __iomem *apid_map; u8 channel; u8 ee; const struct pmic_arb_ver_ops *ver_ops; @@ -206,6 +220,7 @@ struct spmi_pmic_arb { * * @ver_str: version string. * @get_core_resources: initializes the core, observer and channels + * @get_bus_resources: requests per-SPMI bus register resources * @init_apid: finds the apid base and count * @ppid_to_apid: finds the apid for a given ppid. * @non_data_cmd: on v1 issues an spmi non-data command. @@ -227,6 +242,9 @@ struct spmi_pmic_arb { struct pmic_arb_ver_ops { const char *ver_str; int (*get_core_resources)(struct platform_device *pdev, void __iomem *cor= e); + int (*get_bus_resources)(struct platform_device *pdev, + struct device_node *node, + struct spmi_pmic_arb_bus *bus); int (*init_apid)(struct spmi_pmic_arb_bus *bus, int index); int (*ppid_to_apid)(struct spmi_pmic_arb_bus *bus, u16 ppid); /* spmi commands (read_cmd, write_cmd, cmd) functionality */ @@ -656,7 +674,7 @@ static int periph_interrupt(struct spmi_pmic_arb_bus *b= us, u16 apid) unsigned int irq; u32 status, id; int handled =3D 0; - u8 sid =3D (bus->apid_data[apid].ppid >> 8) & 0xF; + u8 sid =3D (bus->apid_data[apid].ppid >> 8) & 0x1F; u8 per =3D bus->apid_data[apid].ppid & 0xFF; =20 status =3D readl_relaxed(pmic_arb->ver_ops->irq_status(bus, apid)); @@ -686,7 +704,7 @@ static void pmic_arb_chained_irq(struct irq_desc *desc) int last =3D bus->max_apid; /* * acc_offset will be non-zero for the secondary SPMI bus instance on - * v7 controllers. + * v7 and v8 controllers. */ int acc_offset =3D bus->base_apid >> 5; u8 ee =3D pmic_arb->ee; @@ -913,7 +931,7 @@ static int qpnpint_irq_domain_translate(struct irq_doma= in *d, return -EINVAL; if (fwspec->param_count !=3D 4) return -EINVAL; - if (intspec[0] > 0xF || intspec[1] > 0xFF || intspec[2] > 0x7) + if (intspec[0] > 0x1F || intspec[1] > 0xFF || intspec[2] > 0x7) return -EINVAL; =20 ppid =3D intspec[0] << 8 | intspec[1]; @@ -1160,6 +1178,24 @@ static int pmic_arb_ppid_to_apid_v2(struct spmi_pmic= _arb_bus *bus, u16 ppid) return apid_valid & ~PMIC_ARB_APID_VALID; } =20 +static void pmic_arb_dump_apid_map(struct spmi_pmic_arb_bus *bus) +{ + struct apid_data *apidd; + u16 apid, ppid; + + /* Dump the mapping table for debug purposes. */ + dev_dbg(&bus->spmic->dev, "PPID APID Write-EE IRQ-EE\n"); + for (ppid =3D 0; ppid < PMIC_ARB_MAX_PPID; ppid++) { + apid =3D bus->ppid_to_apid[ppid]; + if (apid & PMIC_ARB_APID_VALID) { + apid &=3D ~PMIC_ARB_APID_VALID; + apidd =3D &bus->apid_data[apid]; + dev_dbg(&bus->spmic->dev, "%#03X %3u %2u %2u\n", + ppid, apid, apidd->write_ee, apidd->irq_ee); + } + } +} + static int pmic_arb_read_apid_map_v5(struct spmi_pmic_arb_bus *bus) { struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; @@ -1222,17 +1258,7 @@ static int pmic_arb_read_apid_map_v5(struct spmi_pmi= c_arb_bus *bus) bus->last_apid =3D i; } =20 - /* Dump the mapping table for debug purposes. */ - dev_dbg(&bus->spmic->dev, "PPID APID Write-EE IRQ-EE\n"); - for (ppid =3D 0; ppid < PMIC_ARB_MAX_PPID; ppid++) { - apid =3D bus->ppid_to_apid[ppid]; - if (apid & PMIC_ARB_APID_VALID) { - apid &=3D ~PMIC_ARB_APID_VALID; - apidd =3D &bus->apid_data[apid]; - dev_dbg(&bus->spmic->dev, "%#03X %3u %2u %2u\n", - ppid, apid, apidd->write_ee, apidd->irq_ee); - } - } + pmic_arb_dump_apid_map(bus); =20 return 0; } @@ -1346,7 +1372,7 @@ static int pmic_arb_get_core_resources_v7(struct plat= form_device *pdev, } =20 /* - * Only v7 supports 2 buses. Each bus will get a different apid count, read + * Arbiter v7 supports 2 buses. Each bus will get a different apid count, = read * from different registers. */ static int pmic_arb_init_apid_v7(struct spmi_pmic_arb_bus *bus, int index) @@ -1424,6 +1450,185 @@ static int pmic_arb_offset_v7(struct spmi_pmic_arb_= bus *bus, u8 sid, u16 addr, return offset; } =20 +static int pmic_arb_get_core_resources_v8(struct platform_device *pdev, + void __iomem *core) +{ + struct spmi_pmic_arb *pmic_arb =3D platform_get_drvdata(pdev); + + pmic_arb->apid_map =3D devm_platform_ioremap_resource_byname(pdev, + "chnl_map"); + if (IS_ERR(pmic_arb->apid_map)) + return PTR_ERR(pmic_arb->apid_map); + + pmic_arb->core =3D core; + + pmic_arb->max_periphs =3D PMIC_ARB_MAX_PERIPHS_V8; + + return pmic_arb_get_obsrvr_chnls_v2(pdev); +} + +static int pmic_arb_get_bus_resources_v8(struct platform_device *pdev, + struct device_node *node, + struct spmi_pmic_arb_bus *bus) +{ + int index; + + index =3D of_property_match_string(node, "reg-names", "chnl_owner"); + if (index < 0) { + dev_err(&pdev->dev, "chnl_owner reg region missing\n"); + return -EINVAL; + } + + bus->apid_owner =3D devm_of_iomap(&pdev->dev, node, index, NULL); + + return PTR_ERR_OR_ZERO(bus->apid_owner); +} + +static int pmic_arb_read_apid_map_v8(struct spmi_pmic_arb_bus *bus) +{ + struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; + struct apid_data *apidd; + struct apid_data *prev_apidd; + u16 i, apid, ppid, apid_max; + bool valid, is_irq_ee; + u32 regval, offset; + + /* + * In order to allow multiple EEs to write to a single PPID in arbiter + * version 8, there can be more than one APID mapped to each PPID. The + * owner field for each of these mappings specifies the EE which is + * allowed to write to the APID. The owner of the last (highest) APID + * which has the IRQ owner bit set for a given PPID will receive + * interrupts from the PPID. + * + * In arbiter version 8, the APID numbering space is divided between + * the SPMI buses according to this mapping: + * APID =3D 0 to N-1 --> bus 0 + * APID =3D N to N+M-1 --> bus 1 + * APID =3D N+M to N+M+P-1 --> bus 2 + * APID =3D N+M+P to N+M+P+Q-1 --> bus 3 + * where N =3D number of APIDs supported by bus 0 + * M =3D number of APIDs supported by bus 1 + * P =3D number of APIDs supported by bus 2 + * Q =3D number of APIDs supported by bus 3 + */ + apidd =3D &bus->apid_data[bus->base_apid]; + apid_max =3D bus->base_apid + bus->apid_count; + for (i =3D bus->base_apid; i < apid_max; i++, apidd++) { + offset =3D pmic_arb->ver_ops->apid_map_offset(i); + regval =3D readl_relaxed(pmic_arb->apid_map + offset); + if (!regval) + continue; + ppid =3D regval & PMIC_ARB_V8_PPID_MASK; + is_irq_ee =3D PMIC_ARB_V8_CHAN_IS_IRQ_OWNER(regval); + + regval =3D readl_relaxed(pmic_arb->ver_ops->apid_owner(bus, i)); + apidd->write_ee =3D SPMI_OWNERSHIP_PERIPH2OWNER(regval); + + apidd->irq_ee =3D is_irq_ee ? apidd->write_ee : INVALID_EE; + + valid =3D bus->ppid_to_apid[ppid] & PMIC_ARB_APID_VALID; + apid =3D bus->ppid_to_apid[ppid] & ~PMIC_ARB_APID_VALID; + prev_apidd =3D &bus->apid_data[apid]; + + if (!valid || apidd->write_ee =3D=3D pmic_arb->ee) { + /* First PPID mapping or one for this EE */ + bus->ppid_to_apid[ppid] =3D i | PMIC_ARB_APID_VALID; + } else if (valid && is_irq_ee && + prev_apidd->write_ee =3D=3D pmic_arb->ee) { + /* + * Duplicate PPID mapping after the one for this EE; + * override the irq owner + */ + prev_apidd->irq_ee =3D apidd->irq_ee; + } + + apidd->ppid =3D ppid; + bus->last_apid =3D i; + } + + pmic_arb_dump_apid_map(bus); + + return 0; +} + +static int pmic_arb_init_apid_v8(struct spmi_pmic_arb_bus *bus, int index) +{ + struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; + int ret, i; + + if (index < 0 || index >=3D PMIC_ARB_MAX_BUSES_V8) { + dev_err(&bus->spmic->dev, "Unsupported bus index %d detected\n", + index); + return -EINVAL; + } + + bus->base_apid =3D 0; + bus->apid_count =3D 0; + for (i =3D 0; i <=3D index; i++) { + bus->base_apid +=3D bus->apid_count; + bus->apid_count =3D readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURES + i= * 4) & + PMIC_ARB_FEATURES_V8_PERIPH_MASK; + } + + if (bus->apid_count =3D=3D 0) { + dev_err(&bus->spmic->dev, "Bus %d not implemented\n", index); + return -EINVAL; + } else if (bus->base_apid + bus->apid_count > pmic_arb->max_periphs) { + dev_err(&bus->spmic->dev, "Unsupported max APID %d detected\n", + bus->base_apid + bus->apid_count); + return -EINVAL; + } + + ret =3D pmic_arb_init_apid_min_max(bus); + if (ret) + return ret; + + ret =3D pmic_arb_read_apid_map_v8(bus); + if (ret) { + dev_err(&bus->spmic->dev, "could not read APID->PPID mapping table, rc= =3D %d\n", + ret); + return ret; + } + + return 0; +} + +/* + * v8 offset per ee and per apid for observer channels and per apid for + * read/write channels. + */ +static int pmic_arb_offset_v8(struct spmi_pmic_arb_bus *bus, u8 sid, u16 a= ddr, + enum pmic_arb_channel ch_type) +{ + struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; + u16 apid; + int rc; + u32 offset =3D 0; + u16 ppid =3D (sid << 8) | (addr >> 8); + + rc =3D pmic_arb->ver_ops->ppid_to_apid(bus, ppid); + if (rc < 0) + return rc; + + apid =3D rc; + switch (ch_type) { + case PMIC_ARB_CHANNEL_OBS: + offset =3D 0x40000 * pmic_arb->ee + 0x20 * apid; + break; + case PMIC_ARB_CHANNEL_RW: + if (bus->apid_data[apid].write_ee !=3D pmic_arb->ee) { + dev_err(&bus->spmic->dev, "disallowed SPMI write to sid=3D%u, addr=3D0x= %04X\n", + sid, addr); + return -EPERM; + } + offset =3D 0x200 * apid; + break; + } + + return offset; +} + static u32 pmic_arb_fmt_cmd_v1(u8 opc, u8 sid, u16 addr, u8 bc) { return (opc << 27) | ((sid & 0xf) << 20) | (addr << 4) | (bc & 0x7); @@ -1490,6 +1695,14 @@ pmic_arb_acc_enable_v7(struct spmi_pmic_arb_bus *bus= , u16 n) return pmic_arb->wr_base + 0x100 + 0x1000 * n; } =20 +static void __iomem * +pmic_arb_acc_enable_v8(struct spmi_pmic_arb_bus *bus, u16 n) +{ + struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; + + return pmic_arb->wr_base + 0x100 + 0x200 * n; +} + static void __iomem * pmic_arb_irq_status_v1(struct spmi_pmic_arb_bus *bus, u16 n) { @@ -1516,6 +1729,14 @@ pmic_arb_irq_status_v7(struct spmi_pmic_arb_bus *bus= , u16 n) return pmic_arb->wr_base + 0x104 + 0x1000 * n; } =20 +static void __iomem * +pmic_arb_irq_status_v8(struct spmi_pmic_arb_bus *bus, u16 n) +{ + struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; + + return pmic_arb->wr_base + 0x104 + 0x200 * n; +} + static void __iomem * pmic_arb_irq_clear_v1(struct spmi_pmic_arb_bus *bus, u16 n) { @@ -1542,6 +1763,14 @@ pmic_arb_irq_clear_v7(struct spmi_pmic_arb_bus *bus,= u16 n) return pmic_arb->wr_base + 0x108 + 0x1000 * n; } =20 +static void __iomem * +pmic_arb_irq_clear_v8(struct spmi_pmic_arb_bus *bus, u16 n) +{ + struct spmi_pmic_arb *pmic_arb =3D bus->pmic_arb; + + return pmic_arb->wr_base + 0x108 + 0x200 * n; +} + static u32 pmic_arb_apid_map_offset_v2(u16 n) { return 0x800 + 0x4 * n; @@ -1557,6 +1786,12 @@ static u32 pmic_arb_apid_map_offset_v7(u16 n) return 0x2000 + 0x4 * n; } =20 +static u32 pmic_arb_apid_map_offset_v8(u16 n) +{ + /* For v8, offset is from "chnl_map" base register, not "core". */ + return 0x4 * n; +} + static void __iomem * pmic_arb_apid_owner_v2(struct spmi_pmic_arb_bus *bus, u16 n) { @@ -1564,7 +1799,7 @@ pmic_arb_apid_owner_v2(struct spmi_pmic_arb_bus *bus,= u16 n) } =20 /* - * For arbiter version 7, APID ownership table registers have independent + * For arbiter version 7 and 8, APID ownership table registers have indepe= ndent * numbering space for each SPMI bus instance, so each is indexed starting= from * 0. */ @@ -1574,6 +1809,12 @@ pmic_arb_apid_owner_v7(struct spmi_pmic_arb_bus *bus= , u16 n) return bus->cnfg + 0x4 * (n - bus->base_apid); } =20 +static void __iomem * +pmic_arb_apid_owner_v8(struct spmi_pmic_arb_bus *bus, u16 n) +{ + return bus->apid_owner + 0x4 * (n - bus->base_apid); +} + static const struct pmic_arb_ver_ops pmic_arb_v1 =3D { .ver_str =3D "v1", .get_core_resources =3D pmic_arb_get_core_resources_v1, @@ -1654,6 +1895,23 @@ static const struct pmic_arb_ver_ops pmic_arb_v7 =3D= { .apid_owner =3D pmic_arb_apid_owner_v7, }; =20 +static const struct pmic_arb_ver_ops pmic_arb_v8 =3D { + .ver_str =3D "v8", + .get_core_resources =3D pmic_arb_get_core_resources_v8, + .get_bus_resources =3D pmic_arb_get_bus_resources_v8, + .init_apid =3D pmic_arb_init_apid_v8, + .ppid_to_apid =3D pmic_arb_ppid_to_apid_v5, + .non_data_cmd =3D pmic_arb_non_data_cmd_v2, + .offset =3D pmic_arb_offset_v8, + .fmt_cmd =3D pmic_arb_fmt_cmd_v2, + .owner_acc_status =3D pmic_arb_owner_acc_status_v7, + .acc_enable =3D pmic_arb_acc_enable_v8, + .irq_status =3D pmic_arb_irq_status_v8, + .irq_clear =3D pmic_arb_irq_clear_v8, + .apid_map_offset =3D pmic_arb_apid_map_offset_v8, + .apid_owner =3D pmic_arb_apid_owner_v8, +}; + static const struct irq_domain_ops pmic_arb_irq_domain_ops =3D { .activate =3D qpnpint_irq_domain_activate, .alloc =3D qpnpint_irq_domain_alloc, @@ -1731,6 +1989,12 @@ static int spmi_pmic_arb_bus_init(struct platform_de= vice *pdev, bus->spmic =3D ctrl; bus->id =3D bus_index; =20 + if (pmic_arb->ver_ops->get_bus_resources) { + ret =3D pmic_arb->ver_ops->get_bus_resources(pdev, node, bus); + if (ret) + return ret; + } + ret =3D pmic_arb->ver_ops->init_apid(bus, bus_index); if (ret) return ret; @@ -1825,8 +2089,10 @@ static int spmi_pmic_arb_probe(struct platform_devic= e *pdev) pmic_arb->ver_ops =3D &pmic_arb_v3; else if (hw_ver < PMIC_ARB_VERSION_V7_MIN) pmic_arb->ver_ops =3D &pmic_arb_v5; - else + else if (hw_ver < PMIC_ARB_VERSION_V8_MIN) pmic_arb->ver_ops =3D &pmic_arb_v7; + else + pmic_arb->ver_ops =3D &pmic_arb_v8; =20 err =3D pmic_arb->ver_ops->get_core_resources(pdev, core); if (err) @@ -1875,6 +2141,7 @@ static void spmi_pmic_arb_remove(struct platform_devi= ce *pdev) static const struct of_device_id spmi_pmic_arb_match_table[] =3D { { .compatible =3D "qcom,spmi-pmic-arb", }, { .compatible =3D "qcom,x1e80100-spmi-pmic-arb", }, + { .compatible =3D "qcom,glymur-spmi-pmic-arb", }, {}, }; MODULE_DEVICE_TABLE(of, spmi_pmic_arb_match_table); --=20 2.25.1 From nobody Thu Oct 2 06:17:56 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 BA45B2D1F68 for ; Fri, 19 Sep 2025 20:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758312059; cv=none; b=Cydu363ZXnM4RymU88nQsl451N/p3d/SFFp41elI3RJXazpJrd6y/MiYM+VbuI/okr5Z6lD3D9vQ5ceFhhoA+akpB4V4p/bzFCuuO1Cbqj2TIgahw1GWnMWvT+IW+pXYs00t+Gw09EZ5uCpV/gQB72L2GxS9kS/eaT1/GvLuD+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758312059; c=relaxed/simple; bh=R9LLcQCUiDMiN4HDFZueMIWI3JFHTF0opHifX3sulLM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mRV/vthRDDQWF1Bw2zyqD/Mk3ct7hPm3KFWYgAgO2y1W6zhHTg5pipBWohEHpZkFI/RZyvoNzTa6Zq1Iyh7p2CgvqKw7Pnb+q/OuPqbF2Jmpp8bx9k4OVDGYmye7e0taKLnn7ihTbBX6W/3mAG4gTBLj4jWV0uJnKRTpdDU771M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=S67EvqpJ; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="S67EvqpJ" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58JHV3a2012714 for ; Fri, 19 Sep 2025 20:00:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Lg2dZN4a504FxnnfleNPhZdOEAS9VuA8ArU7WHTtyuQ=; b=S67EvqpJv4RgBtBI LkqRzNe2Uhl0+ITAvZZTiykrwc2vF+8Gp15tBAdDYgFBNojEJCEy67dzi//mSFdW gd0dUuiA08unkF0BcRG+k2580Mw/3gZwhD34GTHQZzb+kecJJp2gyVKWtzil0j0H iAdzn88obYQ1+dBsVghjDeuLz9JHcXXIO4Mz/dscOhC+DbmYBKUD3GUhU5pxImf0 f5wOk68geI5X642vFfhPWcor5FCvC68ij0llOXsvEmIZenGCy6o7z2JrHVVDhSWX X0qdo1LVzHrgoyxftyMLsSDh91DoXc2YOqF3LAjRoApRnriBp8d/f/iPn+4Xf3Rf hL4/hg== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 499bmy0dt0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Sep 2025 20:00:56 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-244582bc5e4so27924905ad.2 for ; Fri, 19 Sep 2025 13:00:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758312055; x=1758916855; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lg2dZN4a504FxnnfleNPhZdOEAS9VuA8ArU7WHTtyuQ=; b=W0ctrg9laQngh9PLSq17ue6hYqZDkxmyBiSE0mlDYC076d4TBD9HzEFG0GVydbhCDm 7Or9yht1TtdL03YS5UvmyDv3SUYyWeJ0DH/Ph07JPjAwfqLFa+ZU1FNSNHXcbNpWa8/s 5SMIc82U+fj3eh3vKfW8ca44o/Fu6U77ih2fKttmNvBX73xws+Ppa6wH6M/NXbBgI6e8 n8gwNeOVQtV8TJnfQkgD1CWjO/zSMS9MQO/AfbN3YSfP8fy3Y69UzFQhD8wv3jQspSR9 wNW80m0igjJztQLf9pHINmOdBFE4178fsso8xZP6MkTCCq9NI4/GszxaxL6LXWNJsoyH xY7g== X-Gm-Message-State: AOJu0Yw+erg2NZ6mT00k9NiTGo8f9VTdVm5ci5LdiA4o5T/eofRpdz4C ZMBF7pKg0gMd0I71fRN7z9gXKzd61KkfS0BJng/3wHAK2dxGtDlIGQKtN+cXrLmUNVkBVuy/fEi Q9KoaUtSdJFvgBI2vXMEJ46UfwqhPRo4nLOIZ3FfnQAHFCnBeVdtkah9JJ3PYIColjRn4HBdzl2 0= X-Gm-Gg: ASbGncsCGG72D1OaMY0qeFn//35f4l9KAXijkRPkVzMS2Rv2WgEH26j3gSnjpyKKq+l iO+d5FflpJzS4YPyb/1NGvMNyMn8nSIgRj3CDtf7uJ61Q0tv/h7d8scpqlNTuOOhsHraDYxqsLT F7VfIqzsU0EOFg47ALYMlOsisS00F8cd8Mm27rD96ePt9wk/XCoFT7B6vIlYehBXlExefV2tOBh 6CZN59N+T+bneLwsZDj4vHmf73kO1zYim4dtipBpziqESQoaasPeQ6mH+lteC5ItPYYIndx1lzU aV/DBduxw09m4gnLmt9Bua83BG2TlFHOh3cYfetU7zTv61aNuUm9sb+T2fsbcs9WdEkkAYO3tWA utZWsSt3JGofTBzmLJFAiGq9YHg== X-Received: by 2002:a17:902:cf4c:b0:267:776b:a315 with SMTP id d9443c01a7336-269ba508205mr60032275ad.32.1758312054931; Fri, 19 Sep 2025 13:00:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEuTYvwq/wPby7Y4y7/K1/uv+U5nL9KZApekuONtplC0mHHJqgvJLkkDt+f1r0fIExybCz06Q== X-Received: by 2002:a17:902:cf4c:b0:267:776b:a315 with SMTP id d9443c01a7336-269ba508205mr60031965ad.32.1758312054315; Fri, 19 Sep 2025 13:00:54 -0700 (PDT) Received: from hu-kamalw-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698030ee20sm63053905ad.109.2025.09.19.13.00.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Sep 2025 13:00:53 -0700 (PDT) From: Kamal Wadhwa Date: Sat, 20 Sep 2025 01:30:10 +0530 Subject: [PATCH 2/3] pinctrl: qcom: spmi-gpio: Add PMCX0102, PMK8850 & PMH01XX PMICs support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250920-glymur-spmi-v8-gpio-driver-v1-2-23df93b7818a@oss.qualcomm.com> References: <20250920-glymur-spmi-v8-gpio-driver-v1-0-23df93b7818a@oss.qualcomm.com> In-Reply-To: <20250920-glymur-spmi-v8-gpio-driver-v1-0-23df93b7818a@oss.qualcomm.com> To: Stephen Boyd , Bjorn Andersson , Linus Walleij Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-gpio@vger.kernel.org, Kamal Wadhwa , Jishnu Prakash , Anjelique Melendez X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758312044; l=2001; i=kamal.wadhwa@oss.qualcomm.com; s=20241018; h=from:subject:message-id; bh=OMxkfnXwCtLZpUJ7o9Qn3c4tuFeCwxOJk11xghTOPb8=; b=t5iqFc6Jh8HL4OMjWMtXMVuq/3N2fVxA0RWwTjR4RjPpgcsghZWEWvsPpf4ka015GUSWvcOUf 1E7ypyEqA6jAaxG5Mo6dDm1usLODpDG+S500ssgxCwxLcd9smZH4zSD X-Developer-Key: i=kamal.wadhwa@oss.qualcomm.com; a=ed25519; pk=XbPE6DM5/mJi2tsiYwMCJCZ4O5XPMqColJRlGVcM7Hs= X-Proofpoint-GUID: 76pyCfimcIKdc12Rt9ZPotGdxGE9w1QX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTE5MDE2NCBTYWx0ZWRfXztqlZ7/eNv3G JVC3szelPjzOHld0gXWw7JUK05pStRaU0yr86tK5rdzthleMnYsyeVfadEP2SMVLuNmnxdK6EuL xw61T+yv8Ieo3GbQ3fwTS6kTwRItrNGk45L3rMflugqcHD60Fvx2pCcU1bGGzfMWQW1GIihUElv StgMUp65BGtILSdzIcbJhQffAcPajifmmSDv/sDboiaYJd11pGQlT2Ncsw4CxP8NMbKXfLrICeM a+lw+bq/I4r3mgS6RttUlNPbmZvD98OKp4RJbP+UA1/dfyxDRGpA12IabVIGCPD/Gu7gW8hKxIb MWYvLt2I7EejHu3Dztz8ptojtFqMqUhkzOYJUFcnQXaxuLeqpxO5xcCHgdzZzl7PTNkTVfFz/6A kLfI+QqU X-Proofpoint-ORIG-GUID: 76pyCfimcIKdc12Rt9ZPotGdxGE9w1QX X-Authority-Analysis: v=2.4 cv=ftncZE4f c=1 sm=1 tr=0 ts=68cdb678 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=yJojWOMRYYMA:10 a=EUspDBNiAAAA:8 a=Z8Dd91y0tYXrxlmI1QkA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-19_02,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 bulkscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 phishscore=0 spamscore=0 clxscore=1015 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509190164 From: Anjelique Melendez Add support for PMCX0102, PMH0101, PMH0104, PMH0110 and PMK8850 PMIC GPIOs with adding appropriate compatible strings. Signed-off-by: Anjelique Melendez Signed-off-by: Jishnu Prakash Signed-off-by: Kamal Wadhwa --- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qco= m/pinctrl-spmi-gpio.c index 485b68cc93f8edac07c15aad50ff5c9c7894d8bc..c4f7d2d7a017684cd9c0d0850cb= 8d998668b543e 100644 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c @@ -1239,7 +1239,11 @@ static const struct of_device_id pmic_gpio_of_match[= ] =3D { { .compatible =3D "qcom,pm8998-gpio", .data =3D (void *) 26 }, { .compatible =3D "qcom,pma8084-gpio", .data =3D (void *) 22 }, { .compatible =3D "qcom,pmc8380-gpio", .data =3D (void *) 10 }, + { .compatible =3D "qcom,pmcx0102-gpio", .data =3D (void *)14 }, { .compatible =3D "qcom,pmd8028-gpio", .data =3D (void *) 4 }, + { .compatible =3D "qcom,pmh0101-gpio", .data =3D (void *)18 }, + { .compatible =3D "qcom,pmh0104-gpio", .data =3D (void *)8 }, + { .compatible =3D "qcom,pmh0110-gpio", .data =3D (void *)14 }, { .compatible =3D "qcom,pmi632-gpio", .data =3D (void *) 8 }, { .compatible =3D "qcom,pmi8950-gpio", .data =3D (void *) 2 }, { .compatible =3D "qcom,pmi8994-gpio", .data =3D (void *) 10 }, @@ -1248,6 +1252,7 @@ static const struct of_device_id pmic_gpio_of_match[]= =3D { { .compatible =3D "qcom,pmiv0104-gpio", .data =3D (void *) 10 }, { .compatible =3D "qcom,pmk8350-gpio", .data =3D (void *) 4 }, { .compatible =3D "qcom,pmk8550-gpio", .data =3D (void *) 6 }, + { .compatible =3D "qcom,pmk8850-gpio", .data =3D (void *)8 }, { .compatible =3D "qcom,pmm8155au-gpio", .data =3D (void *) 10 }, { .compatible =3D "qcom,pmm8654au-gpio", .data =3D (void *) 12 }, /* pmp8074 has 12 GPIOs with holes on 1 and 12 */ --=20 2.25.1 From nobody Thu Oct 2 06:17:56 2025 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 76BF72D3217 for ; Fri, 19 Sep 2025 20:01:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758312063; cv=none; b=RZfXMm3IJ33OyT/sFtF7wxMGQQvtsKDVdCrH3DM8WSGcAgrbcvMRXXo5WJo79+wFfknTI7kDLHqwcjQBzvRdZ7C+6PJdln3lclo7ansyyLsD/Kd4Cj3aVHrb0lFZ0gPNwqK8o64BziQHsol/oreBc5FkuSlkmguPVO1SzT8W85Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758312063; c=relaxed/simple; bh=/aCT6AMn+DEBAszM+FafwAQnaRRZOfmB16zLDUBpxGk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mLmAuoySpRAZk1sL+yuP0Vfn/CScVGyHWm0K/fXFolEj71YvLpisnd/ROgbpwIWdmRzyl+5HPraiOF2u7mbQ4b0OiABflV416I2H/HYDoT9ep5ssjQi0/2R3sJ2d/wymQXAnMDJ7a+iaqk9fKeRlHE33NjSq/z2lvr4MV7pWnlY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=VaJ8arMt; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="VaJ8arMt" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58JDxXb5017023 for ; Fri, 19 Sep 2025 20:01:00 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= K94gZNJCyxLLjXcq/8C3d4M0HAtuU0U9u9rzRHmSpBg=; b=VaJ8arMt0sXK/vvc WuySYrcuoPxGJJCb1R1P0X1NmCc3yuBq49+DLeO0euViY2TQBRYRQw7k850Xy2i3 rOFs13rCv/2ZagvX0IgUtUgieuotIPAibSqEF+F9KFTNt4BPjLwK59da5mDtH5iU 8sMcAG0A6WrXS+wOJm+3WpRJ3Ehwot2dT7euNYxUXlBsTjkSzxuK+BV8MfbvXTjb uOr6QZ3+NPOVP5KiKw93SYHUy7BQPAWxW9SDFyozD9+SLWJt4Jz41XXPbSpqXWT6 RLz3wv56yjSD9k8QnuY0mjlt9beP99935OBs0YlYHGlzNAfjMQCUux0JjX9xZGsR x6j1FQ== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4982degapa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Sep 2025 20:00:59 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-24ced7cfa07so24696625ad.1 for ; Fri, 19 Sep 2025 13:00:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758312058; x=1758916858; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K94gZNJCyxLLjXcq/8C3d4M0HAtuU0U9u9rzRHmSpBg=; b=MOUnUn27c4oNB5y7PT8ESv6mmV7esnE7LlfBpdWrm3V5j+vyf0fGr/UH0lkD0+sINj vETXk8L1RYd5AbJeFQ7E5hb9xP+9SVk/yl2//5SMoqmJBnOf+jD9NQe8j9mdv9p9lfFp 7De702EHaHi/TILcEbBBGHhQzKf+VEpT+c2RLqwlvhHpjO65L1CQ0lGYfXFwn1nkZltZ mMjBnpaEvnPn/rHzc5UA9o0x3AHKSAwfiVmllx2fUlgdylV8HeNuQlGQnhuzrVJPjopU 5BgQ5GF1pMhirLEXcYdkUxxX02UgstMkdAShnNe9nzxLxaDNAk40Oc6wKV3r99sP+rkW aZPQ== X-Gm-Message-State: AOJu0YwVbWQ+XCyFi0Sgj6XwB0iB4jAiVrZxW+UDZoOSHj0WwlAFhyop D+YP27bnQl7FSXiUtStJKkdzTD+x/b7MINXfj5Ka2eXB7mpXefjSTMTNEDw4Q2jh3u5rm/i/uke lJgXZ8MTaWZJGfGUhB2yeClpxv/a4RYxT4aIleEJUUQeN4CrpiwgaKBADClQdiiYhJmsJMtqFLd k= X-Gm-Gg: ASbGnct/29CTkFUHsy8zXlDTo7A1+yBBgAJClU5s+upkROqPzz0a+W6MBRzRcZ5XByC 7hB83/7DZmp4iqhGhMGecDT0v6Z2bCGzCUGNsju3lkS7D6b/iNryfWixnxuad19qlYX5Z1hs9Hh I2OIVSwCQhZ4/FkQgWOlBqgow4JivczDx3G/3Y6l/AnweM91pUJOFeEWviI81i2TQvJeUKNIL2p zxeHOuNR58LMa7mYtdNadnInJk0hUx6Ftb3BI4YGtCQonzxlAXqrBG9zCfTLsGJi7luGl4/2iM1 qDRSuSrKnBfVRV+iYvmXh7zNP2Yav4mmwU36L7FkXU23BuBS0BhZSYeqJD+PcgNHAQgpE2qYRIy p3UQIN5ezfz/fgD4UUOzR9ZWwPQ== X-Received: by 2002:a17:903:2ace:b0:26c:bcb5:1573 with SMTP id d9443c01a7336-26cbcb51803mr27453845ad.53.1758312057967; Fri, 19 Sep 2025 13:00:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFqRMuKYms0JN+AnMSRPMr6bwLIE6pahTEbvacteRwGgkGEd+6lWHLIQ8iRIIeo2zWClmYa9Q== X-Received: by 2002:a17:903:2ace:b0:26c:bcb5:1573 with SMTP id d9443c01a7336-26cbcb51803mr27453585ad.53.1758312057420; Fri, 19 Sep 2025 13:00:57 -0700 (PDT) Received: from hu-kamalw-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2698030ee20sm63053905ad.109.2025.09.19.13.00.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Sep 2025 13:00:57 -0700 (PDT) From: Kamal Wadhwa Date: Sat, 20 Sep 2025 01:30:11 +0530 Subject: [PATCH 3/3] pinctrl: qcom: spmi-gpio: add support for {LV_VIN2, MV_VIN3}_CLK subtypes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250920-glymur-spmi-v8-gpio-driver-v1-3-23df93b7818a@oss.qualcomm.com> References: <20250920-glymur-spmi-v8-gpio-driver-v1-0-23df93b7818a@oss.qualcomm.com> In-Reply-To: <20250920-glymur-spmi-v8-gpio-driver-v1-0-23df93b7818a@oss.qualcomm.com> To: Stephen Boyd , Bjorn Andersson , Linus Walleij Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-gpio@vger.kernel.org, Kamal Wadhwa , Jishnu Prakash , Subbaraman Narayanamurthy X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1758312044; l=1502; i=kamal.wadhwa@oss.qualcomm.com; s=20241018; h=from:subject:message-id; bh=CiPyfA3fDFL/yWTIk0JCWKj4mCCnWYx7OMCyiFzL4yM=; b=vo+kuP/Xa2OvNsoMoxwqxQFsPysvdPfhVd51JJgJuNtTZukkJyMaY/f1cuqegwm6AyIdjsir8 UXFGdIxN1wQB/CjSgADfVbjao/uan0KuM/qJ2gFdrRmCMofjXkol4xT X-Developer-Key: i=kamal.wadhwa@oss.qualcomm.com; a=ed25519; pk=XbPE6DM5/mJi2tsiYwMCJCZ4O5XPMqColJRlGVcM7Hs= X-Authority-Analysis: v=2.4 cv=YfO95xRf c=1 sm=1 tr=0 ts=68cdb67b cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=yJojWOMRYYMA:10 a=EUspDBNiAAAA:8 a=_LkKalIgBaL7gH2Y5XQA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-GUID: pL-4DJ8YhOTh4W958-FSrmXeCKyPQMEs X-Proofpoint-ORIG-GUID: pL-4DJ8YhOTh4W958-FSrmXeCKyPQMEs X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTE3MDE4MiBTYWx0ZWRfX0vKOvXK9PsC2 PzVYhEemTtggTTZTktSt/WuXjYvH7JWOJMRkdqhAIXsZcMpzuAtdLcT5XPrWh98VViYxb0Ppuyv ViW5Y9Qkn1l4nlvD1BqUA3+JzDp5/dGrnXRhU67LDBp+Nz47slABmFo04E6jI9OUoq4bGMhiiTD 648xZgaDvMre4Q0oOE1SXlb8qpA4mZYcDwmS7utUxE+qv/ykwS1OoDqBZY+oFdIJWnHmHnwzGbW E9s/vSLWQbUZGB4+dI3SVskH9QCaU0zCIrGVEtHk8CBGPKUgwn/AGXdv0mHV3dedx78VQf27yU/ jujSrXk0yl2u35ufwX10hXSx0E+SULEKbtQFX6fpuRXUrl7wHsAidfik+rHSqPy+NVcycr7D0Tz Vy6l0DnG X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-19_02,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 impostorscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 spamscore=0 phishscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509170182 From: Subbaraman Narayanamurthy Add support for SPMI PMIC GPIO subtypes GPIO_LV_VIN2_CLK and GPIO_MV_VIN3_CLK. Signed-off-by: Subbaraman Narayanamurthy Signed-off-by: Jishnu Prakash Signed-off-by: Kamal Wadhwa --- drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c b/drivers/pinctrl/qco= m/pinctrl-spmi-gpio.c index c4f7d2d7a017684cd9c0d0850cb8d998668b543e..83f940fe30b26ae06373860616c= 54955c3b2253e 100644 --- a/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c +++ b/drivers/pinctrl/qcom/pinctrl-spmi-gpio.c @@ -42,6 +42,8 @@ #define PMIC_GPIO_SUBTYPE_GPIO_MV 0x11 #define PMIC_GPIO_SUBTYPE_GPIO_LV_VIN2 0x12 #define PMIC_GPIO_SUBTYPE_GPIO_MV_VIN3 0x13 +#define PMIC_GPIO_SUBTYPE_GPIO_LV_VIN2_CLK 0x14 +#define PMIC_GPIO_SUBTYPE_GPIO_MV_VIN3_CLK 0x15 =20 #define PMIC_MPP_REG_RT_STS 0x10 #define PMIC_MPP_REG_RT_STS_VAL_MASK 0x1 @@ -852,11 +854,13 @@ static int pmic_gpio_populate(struct pmic_gpio_state = *state, pad->lv_mv_type =3D true; break; case PMIC_GPIO_SUBTYPE_GPIO_LV_VIN2: + case PMIC_GPIO_SUBTYPE_GPIO_LV_VIN2_CLK: pad->num_sources =3D 2; pad->have_buffer =3D true; pad->lv_mv_type =3D true; break; case PMIC_GPIO_SUBTYPE_GPIO_MV_VIN3: + case PMIC_GPIO_SUBTYPE_GPIO_MV_VIN3_CLK: pad->num_sources =3D 3; pad->have_buffer =3D true; pad->lv_mv_type =3D true; --=20 2.25.1