From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 32C2F3955C6 for ; Tue, 7 Jul 2026 09:22:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783416130; cv=none; b=ZkS+yqhTpDEH0dq1yeAgPzwPudgDhLRQ/mq09P4+V9y6KBIu+vMJVL4svFPGtmopS34jRyGp4ZL+e6na7HtNaAPabvNfvrstufszeuJozEGiTrHEs4lLR8cjmZqLEEkJRk5Ivo2Y3yj4IjcuyUYjq2inj7RqG7OkjXRD0BZStmY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783416130; c=relaxed/simple; bh=iIypVGyuS304ik55LC/+1+p4PpbCAO8l2ge6+Qt/0Oo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rNNJdB3Xp6H032xmpbrwUGhKD8lhJ8eB842zhLbenhmRSE3l7i0jrgjdHxxWO/hBraHje4/Ox3jmSsgRewPKObp8ZDgrkilUbhyUjdgduE3Z2/DqZi3AJej0+nJ9qUb7pCSAUiX9sJkRJM//iJ3caMleVgj+5/xefziGimXc7mA= 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=aktum5A8; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=C4+oYQdm; arc=none smtp.client-ip=205.220.168.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="aktum5A8"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="C4+oYQdm" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6678Dw4Z3070376 for ; Tue, 7 Jul 2026 09:22:08 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= FDlAkrCqT9NozHhkbpvjYoApBdb1EPmLolFbdYGcZHI=; b=aktum5A8CXa2eEzt sN1AhgFA4xp6GfyrRpIDdwTSdh+iaFXNcEzfEQHr4oDhnGrbq91rKs52BfXfNk3G 0elW2PwYBw/Y7Wbf3WOIn3R/7uY9Lm74Kmy4p4MNT5itis54ANw2wrnr9Km1vnpz bd98eI7oLjpQnzXnsj2izI8ghwKQ+XnplTghkTZaz9zZqDK5NKO8O97NirY7AmwP xvdC5fY6QV4gHPgQwvoMlPuc/reJxQ7XC/6pqzKVWpLiQGbSqAWozFMUF3GGR6NM qX4O1jBCHxHnFxZ8aPZVdCqPLjXIWugBQnY8uNC3kyRRQ+MTOPlHG5vjEMvl7vI0 KKi4UA== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f8sm8h8rf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 07 Jul 2026 09:22:08 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-2c7f385887bso62791105ad.0 for ; Tue, 07 Jul 2026 02:22:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783416128; x=1784020928; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=FDlAkrCqT9NozHhkbpvjYoApBdb1EPmLolFbdYGcZHI=; b=C4+oYQdmqDrZBDe3KhttfM6NX89a+37mF2U4nGH8mS1+Axm0H29YHRLFQKUaAYznPu Q+oI1/XMOyTwjmntvG1rwLf+hldO/4xlAF1ssPMPDpQxDB5highRn3sZkbGdnWIcUwrn cfMMBcaxpXU5jjnFL2pNLWigMKrGpBvYuefvHMeBcRx7wQ8HCw5Pws74ekNfyUYFw00L 10IUV8I8xn7Dzpj7MvbBkUHmDdzZ3u6YzfYd2LI3iX3AOCbm/FhGU8BC5Ha76cWiCAO0 eJbnfzOTgl1FYzXdaQbjjETMpj2vc81qMAufaWay4Ueunp3pS3HXPPpzp/Q5Ad923fjP 6hSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783416128; x=1784020928; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=FDlAkrCqT9NozHhkbpvjYoApBdb1EPmLolFbdYGcZHI=; b=ONbIv6cSg6ZezXrfIxNC34sk5YZtCpflbfm5ON4jEfdQiaCpp6hUeS0llXt9PJ8S8t Q5cko+N++9hbbelNT/4uIYeUsOdbjqFJfcZStvr79LTYI0Q5c93FIAGsf9TJ2BuaJ3o5 6d27UuRa9uJSqZyCVHWRtPPB0F1ZS4uG7d62U/XyBLmQHsw3sO/lT2QMXYD/jfmxf5Ws WQn+jjDpbY/Sd71neQNziYdUHiWEF/J1pyUU3C0iZfZ2uKVjzBJJ+2C8ZOQaLKP7lq82 7kqtjCnrV8TZAjPZ9A0F9qyKK6yQ1McY4GyKl4KsZayjcvm6/8vYGNatLXwXLh1gw/Vl GcrQ== X-Forwarded-Encrypted: i=1; AHgh+RoflGQ0W57qBRqkJHb4O8GGJzTXSFSqQJGBd14kpw5e2XdF+2PN0BGHyKu2NOuJQj68ykLLfr61/LRe@vger.kernel.org X-Gm-Message-State: AOJu0YxRHPoXBPXExwZgnVyhnVtRfNO23XAF+UK0wMKgpHLdL3Gxal0k /kpl4F/xc3up1zoUs7tPtHv5esM3HuXbJfqIfYs0umMbCQWFvNw45TNPTau/zL6BJjIncHBBVCk eECtif1MBSfappXTr4ySvaFjW1vS6WR+QRpSui7bQ6YTxaTfeh+Yc8wu2LLzBCZgZ X-Gm-Gg: AfdE7ckXs0KNKxs4q2YRoxdBmOBJyHISjSvR6CFT1bFboYBTgaRYzFnfzo36SdF+l9m 1RqtUqCVPfH+F0/jGwOt8Uu/obWGbAZzctAiHLVklN8OFbUEC4kRmJBLBUUs/UI4Ap7nFjJCt5y cme9fK2r0jSGaJPTrPMPi801j6OSRAxnc/Qbm1ICP68S2MoxJziC4C4KfU5kk6fsbnrYlqxMLHz iaffz+bJP5cc/M+Zbg3kXrkqcq0WGeU7u03ab8X8L+CGA4ZYunazSDSULUGJa/eW9kVOWFPMzk+ 7UiOnZNc1h3bDKAJr236qjKJjqe1EuqNLiJoOLVJVSdlX1VY9LoQtoti+Uzijur9o85g2PTEB7P eigxyfvGYfWHZQH2a3ksTcVItAfbt0/YGOk4Gf0c= X-Received: by 2002:a05:6a21:69a:b0:3a0:b781:4c78 with SMTP id adf61e73a8af0-3c08ecaff36mr5511312637.15.1783416127886; Tue, 07 Jul 2026 02:22:07 -0700 (PDT) X-Received: by 2002:a05:6a21:69a:b0:3a0:b781:4c78 with SMTP id adf61e73a8af0-3c08ecaff36mr5511268637.15.1783416127374; Tue, 07 Jul 2026 02:22:07 -0700 (PDT) Received: from hu-mkshah-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-ca5afdb7534sm658864a12.12.2026.07.07.02.22.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jul 2026 02:22:07 -0700 (PDT) From: Maulik Shah Date: Tue, 07 Jul 2026 14:51:34 +0530 Subject: [PATCH v4 2/7] irqchip/qcom-pdc: Move all statics to struct pdc_desc Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260707-hamoa_pdc_v3-v4-2-dfd1f4a3ae89@oss.qualcomm.com> References: <20260707-hamoa_pdc_v3-v4-0-dfd1f4a3ae89@oss.qualcomm.com> In-Reply-To: <20260707-hamoa_pdc_v3-v4-0-dfd1f4a3ae89@oss.qualcomm.com> To: Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thomas Gleixner , Linus Walleij , Bartosz Golaszewski Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, Sneh Mankad , Maulik Shah X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783416112; l=6947; i=maulik.shah@oss.qualcomm.com; s=20240109; h=from:subject:message-id; bh=iIypVGyuS304ik55LC/+1+p4PpbCAO8l2ge6+Qt/0Oo=; b=Duti58sKIKBLcJgTZzIo+9dlwZ4chpw+7PO5YKQrrxBkl8sdmIEPe2kzra3hmhPM82rnFhkPS UShW35X/+u+BXNTJRpXa/O79LPIA8XwDY6I/vcdTRT/gdDPI3ojqcXt X-Developer-Key: i=maulik.shah@oss.qualcomm.com; a=ed25519; pk=bd9h5FIIliUddIk8p3BlQWBlzKEQ/YW5V+fe759hTWQ= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDA5MCBTYWx0ZWRfX1kBIZhpKZyTO Ba4g81aKyTO9/H1d2DIp0NKudNO+4qeZZtQI/ITKcPWzQIy5A5EgiakY68oB6RRImKu9LrLqcV5 Gr4O/iBhk2ucaX0A33F6D+qDsY3v8V1fnHH5Y1Xt9NOMTT2s2TCeUNgIhJYhSHlvg9Kx877B8e0 DVSFIBQDL+q1Zk6dGmrdCwtQUC6K038ZljA80m96OyrlezhQJV4XQ3wJvL0JR4WjCE4cUwloB/a gFr72dyNY2VSBzTn19DE7NIioHalBxklAxG0FFtoynOuXG6so5yX82usYK826iVB0hOfjy4f3fc 4wAHsahWBpJDEXD5yhqEkQ4w55ibmFNZqPAwG3cEgPnF16jpZd6i85Lky+txS3tCoJelwyxRscQ E+yQ6uMK2YE3swl+OydyJM96gk0yzY7lr4QaCYywGQ1+xi9NNyETqAWyBoKsjosT8xyefZnVzhC s8JdgluDtCdlk482lBw== X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDA5MCBTYWx0ZWRfX34d+syVYHswi NVfKkHYyRVExTBw1gB5e46hF730rHE6nS4BjwZK/5uqBsN8td0aZKtcAetLtaalD4zNfkK9HpMa 2idbnbKV7LBRRL+1qf+g5Z0kgndw4wg= X-Proofpoint-GUID: e0KtXT5Rq4q6lGhfPyIbMbjPAICYkJwu X-Authority-Analysis: v=2.4 cv=UvdT8ewB c=1 sm=1 tr=0 ts=6a4cc540 cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=VSgcN4lfnCTbbQGmJlYA:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-ORIG-GUID: e0KtXT5Rq4q6lGhfPyIbMbjPAICYkJwu X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-07_02,2026-07-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 malwarescore=0 bulkscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607070090 There are multiple statics used. Move all to struct pdc_desc to better align with versioning support. Document them. Add pdc->enable_intr() function to point to respective version specific enable function. Remove pdc_enable_intr() and __pdc_enable_intr() and invoke pdc->enable_intr() from caller. Locking in pdc_enable_intr() applies lock to all version specific pdc->enable_intr() however lock is needed only for pdc_enable_intr_bank() which uses a shared bank across on PDC v2.7 and PDC v3.0. pdc_enable_intr_cfg() do not require locking as IRQ_CFG registers are one per interrupt. Move the locking to only pdc_enable_intr_bank(). No functional impact. Signed-off-by: Maulik Shah --- drivers/irqchip/qcom-pdc.c | 84 ++++++++++++++++++++++------------------------ 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c index a77d1d334062..764f7965cfb8 100644 --- a/drivers/irqchip/qcom-pdc.c +++ b/drivers/irqchip/qcom-pdc.c @@ -92,15 +92,30 @@ struct pdc_irq_cfg { * @base: PDC base register for DRV2 / HLOS * @prev_base: PDC DRV1 base, applicable only for x1e RTL bug. * @version: PDC version + * @region: PDC interrupt continuous range + * @region_cnt: Total PDC ranges + * @x1e_quirk: x1e H/W Bug handling + * @lock: lock for IRQ_ENABLE_BANK protection * @regs: PDC regs (IRQ_ENABLE_BANK and IRQ_CFG) * @cfg_fields: Fields of IRQ_CFG reg + * @enable_intr: pointer to enable function based on PDC version */ struct pdc_desc { void __iomem *base; void __iomem *prev_base; u32 version; + + struct pdc_pin_region *region; + int region_cnt; + + bool x1e_quirk; + + raw_spinlock_t lock; + const struct pdc_regs *regs; const struct pdc_irq_cfg *cfg_fields; + + void (*enable_intr)(int pin_out, bool on); }; static const struct pdc_regs pdc_v3_2 = { @@ -138,11 +153,6 @@ struct pdc_pin_region { #define pin_to_hwirq(r, p) ((r)->parent_base + (p) - (r)->pin_base) -static DEFINE_RAW_SPINLOCK(pdc_lock); -static struct pdc_pin_region *pdc_region; -static int pdc_region_cnt; -static unsigned int pdc_version; -static bool pdc_x1e_quirk; static struct pdc_desc *pdc; static void pdc_base_reg_write(void __iomem *base, int reg, u32 i, u32 val) @@ -196,10 +206,12 @@ static void pdc_enable_intr_bank(int pin_out, bool on) index = FIELD_GET(IRQ_ENABLE_BANK_INDEX_MASK, pin_out); mask = FIELD_GET(IRQ_ENABLE_BANK_BIT_MASK, pin_out); + guard(raw_spinlock_irqsave)(&pdc->lock); + enable = pdc_reg_read(pdc->regs->irq_en_reg, index); __assign_bit(mask, &enable, on); - if (pdc_x1e_quirk) + if (pdc->x1e_quirk) pdc_x1e_irq_enable_write(index, enable); else pdc_reg_write(pdc->regs->irq_en_reg, index, enable); @@ -213,32 +225,15 @@ static void pdc_enable_intr_cfg(int pin_out, bool on) pdc_reg_write(pdc->regs->irq_cfg_reg, pin_out, enable); } -static void __pdc_enable_intr(int pin_out, bool on) -{ - if (pdc_version < PDC_VERSION_3_2) - pdc_enable_intr_bank(pin_out, on); - else - pdc_enable_intr_cfg(pin_out, on); -} - -static void pdc_enable_intr(struct irq_data *d, bool on) -{ - unsigned long flags; - - raw_spin_lock_irqsave(&pdc_lock, flags); - __pdc_enable_intr(d->hwirq, on); - raw_spin_unlock_irqrestore(&pdc_lock, flags); -} - static void qcom_pdc_gic_disable(struct irq_data *d) { - pdc_enable_intr(d, false); + pdc->enable_intr(d->hwirq, false); irq_chip_disable_parent(d); } static void qcom_pdc_gic_enable(struct irq_data *d) { - pdc_enable_intr(d, true); + pdc->enable_intr(d->hwirq, true); irq_chip_enable_parent(d); } @@ -350,12 +345,10 @@ static struct irq_chip qcom_pdc_gic_chip = { static struct pdc_pin_region *get_pin_region(int pin) { - int i; - - for (i = 0; i < pdc_region_cnt; i++) { - if (pin >= pdc_region[i].pin_base && - pin < pdc_region[i].pin_base + pdc_region[i].cnt) - return &pdc_region[i]; + for (int i = 0; i < pdc->region_cnt; i++) { + if (pin >= pdc->region[i].pin_base && + pin < pdc->region[i].pin_base + pdc->region[i].cnt) + return &pdc->region[i]; } return NULL; @@ -411,35 +404,35 @@ static const struct irq_domain_ops qcom_pdc_ops = { static int pdc_setup_pin_mapping(struct device *dev) { struct device_node *np = dev->of_node; - int ret, n, i; + int ret, n; n = of_property_count_elems_of_size(np, "qcom,pdc-ranges", sizeof(u32)); if (n <= 0 || n % 3) return -EINVAL; - pdc_region_cnt = n / 3; - pdc_region = devm_kcalloc(dev, pdc_region_cnt, sizeof(*pdc_region), GFP_KERNEL); - if (!pdc_region) { - pdc_region_cnt = 0; + pdc->region_cnt = n / 3; + pdc->region = devm_kcalloc(dev, pdc->region_cnt, sizeof(*pdc->region), GFP_KERNEL); + if (!pdc->region) { + pdc->region_cnt = 0; return -ENOMEM; } - for (n = 0; n < pdc_region_cnt; n++) { + for (n = 0; n < pdc->region_cnt; n++) { ret = of_property_read_u32_index(np, "qcom,pdc-ranges", n * 3 + 0, - &pdc_region[n].pin_base); + &pdc->region[n].pin_base); if (ret) return ret; ret = of_property_read_u32_index(np, "qcom,pdc-ranges", n * 3 + 1, - &pdc_region[n].parent_base); + &pdc->region[n].parent_base); if (ret) return ret; ret = of_property_read_u32_index(np, "qcom,pdc-ranges", n * 3 + 2, - &pdc_region[n].cnt); + &pdc->region[n].cnt); if (ret) return ret; - for (i = 0; i < pdc_region[n].cnt; i++) - __pdc_enable_intr(i + pdc_region[n].pin_base, 0); + for (int i = 0; i < pdc->region[n].cnt; i++) + pdc->enable_intr(i + pdc->region[n].pin_base, 0); } return 0; @@ -477,13 +470,16 @@ static int qcom_pdc_probe(struct platform_device *pdev, struct device_node *pare if (pdc->version >= PDC_VERSION_3_2) { pdc->cfg_fields = &pdc_cfg_v3_2; pdc->regs = &pdc_v3_2; + pdc->enable_intr = pdc_enable_intr_cfg; } else if (pdc->version < PDC_VERSION_3_2 && pdc->version >= PDC_VERSION_3_0) { pdc->cfg_fields = &pdc_cfg_v3_0; pdc->regs = &pdc_v3_0; + pdc->enable_intr = pdc_enable_intr_bank; } else { pdc->cfg_fields = &pdc_cfg_v2_7; pdc->regs = &pdc_v2_7; + pdc->enable_intr = pdc_enable_intr_bank; } /* @@ -502,7 +498,7 @@ static int qcom_pdc_probe(struct platform_device *pdev, struct device_node *pare return -ENXIO; } - pdc_x1e_quirk = true; + pdc->x1e_quirk = true; } parent_domain = irq_find_host(parent); @@ -511,6 +507,8 @@ static int qcom_pdc_probe(struct platform_device *pdev, struct device_node *pare return -ENXIO; } + raw_spin_lock_init(&pdc->lock); + ret = pdc_setup_pin_mapping(dev); if (ret) { pr_err("%pOF: failed to init PDC pin-hwirq mapping\n", node); -- 2.43.0