From mboxrd@z Thu Jan 1 00:00:00 1970 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 4A3183955F5 for ; Tue, 7 Jul 2026 09:22:10 +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=1783416131; cv=none; b=c8SIvss83zlAODYlAMJRGUeOXczacqVxzI0cfFtsgqHyMWrpg2ASi0/3IyAA93+JYHa3ymIiCcHuxlufLKMxLRGZ+1U907kEndoPfU38voIyeBU6FwEH+IA/ewYowKyis+KdVAu4K3iiiuj0GIZvmXnXO2cw2j2em04hMZmTyHQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783416131; 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=Ut7y3znNdWwarZHgEhYhD8uipfwKkNGwaDBVW8Cvyp+zX6smuy7BDWyamNxlb3Z3+T1Gw7KUPY3klceIwm9v7L6OohOKiqQkn274tYYoAdMrlDZM2eLjmxzHIlCy2CZXS+4SK84qAzo3QsdwbO2B8V+ZREowPW7DlmAwokpRw8U= 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.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="aktum5A8"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="C4+oYQdm" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6678DqD23209186 for ; Tue, 7 Jul 2026 09:22:09 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-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f8vdj8nfg-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-f198.google.com with SMTP id d9443c01a7336-2cca5e0a0c9so40339855ad.1 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=HR1pHzsSA611fdUItjx12Wftr7b76Cka5ovbaNTdrE2NRz3OWx5XorqLDt8cob+sJN Ze8LUMtMSDrnJCbhAO5BbXYcU/JbIUooZHTT36mPtAKFcXSnTpH7oQYkyCVlRUUfcd+V PUDUchFrB5LwX7hcg6DAMh83FUfGxNKbJjbP2ZLgCNJYGpGA0vpZ5taFVysYoPBncjBV HWBCpNIw9xOWmRqQvpMIGYeR336sGWztsK2RDxGOAnWfb1SbOOM5PjiiEjV94wK2Ey3j qseyYs+BLxE8374ohp809LUxa3LB/pZuoEc9H/U1W8B0LSIzM4pNW+kXnnfeEshpBP+s iqmw== X-Forwarded-Encrypted: i=1; AHgh+Ro1fxPrYvwKhkeLtVx3OBQhPC5nazW6FTmbn4Jd0ZAF8OjhN9k5txzOKUNO9rQrKbe3oqPCwbqCAxW6xtQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwhAVN1+p8aB7Fblh8LfUi3GmpUZvX2I+Qzc3YMXOx/Z60doEdy rXmydCOlQLuWfR13s80JcuMXE4bsoU6F2CwMX6JMa/fSm9evOaCPd8s3uQbmUwXoIh6e3s4IQb0 4DWe9CblNamaIt2sUAOIu1J05H3k8/nU/3Mr11dvpgweuiTQmw0+QF2pSc+LHwirP/G0= X-Gm-Gg: AfdE7clYQhvRlbw7pr6f2HxiVD3qROgPIRAM7VDxSobWeWXBa8zQ3rztPn7aLQ7KzeS HBYWtwOPtCerTWM1D5GPz996gJc+yXQ62ak+DsHVa4SFw4C6brwHNXfxk60GURfCJSmCK31Aa+s VimxT+XCU2QBa570SHA+elcwK5SWb3OVZJQKeAU0aablbfzasRBYGJqu39Z0KkKZQu43s9tJcTt EORlzbsJ3ZxpmV6lFIHc0m1CI1b0ULsbnSqJEFXhKzO9uTglATZ7mH9UiTs9m6ymfCC8XGjPPhn DSrkbD0eJKQgPJ/RwToZwY+k0n9VoSDClY86WQ8un59ms7PUjePugnFBxPytcH84lNJjHLQinTE /dz4ELpE2oQksikjSCjdQSgBp+J4a+byJ5bNy/Mg= X-Received: by 2002:a05:6a21:69a:b0:3a0:b781:4c78 with SMTP id adf61e73a8af0-3c08ecaff36mr5511308637.15.1783416127883; 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: 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: 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-Authority-Analysis: v=2.4 cv=R7cz39RX c=1 sm=1 tr=0 ts=6a4cc540 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=VSgcN4lfnCTbbQGmJlYA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: TQqbcSX1IktG6HLLrb2iYJZHhELe66uS X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA3MDA5MCBTYWx0ZWRfX0rJ/5H+8KKUM bicaw3jI8uhAh10eaLwp8xaLoAyyCrpQs8Zug6yIprGjUI9tOqQqgkRnK4JZe72rHLdjZAjWRZR qtKalPH0iUwXdmMiINjaL6OngCDvdS3nVcfiYKSY4e6cOK4FMD4F7yLuR+a1LiF5mPdffHntkRd DiWHDGcZ34BbjCr/9i7IdUG7F5tlgMxjffjkHT6gxUd+aYCuxpyZ7DEC/bmlT95w1fnQS0n6t35 QVRF/jszrXIn+2edC1F0I+qgeIp9AQNIKzjrb8VfPEdlX2Hy17hA5ZzZXMxgRXomfTuToIzBz6F FBiR7/4dmcsEHXUDa0g6RN2P/LXcv+F8BQJexUtum7YaVX+5hJjdXhI7xeNG943gDFnrwRLdGI3 tO7G4SG5QIcbou2NWNNPUjPAW5E+WzQK+7MftW5P2yJC5yoQrrt/A7OWA/Hw4rKX63ao9C4y9ka B+nn78RE/OxnNb7yFbw== X-Proofpoint-ORIG-GUID: TQqbcSX1IktG6HLLrb2iYJZHhELe66uS X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA3MDA5MCBTYWx0ZWRfX4ljBlSXAXfoY YtwuZYDGsJjfg0KQJGwr/Uks8h6Elc6GhuVqj6299LpZp1LoK8XHf+M3WcNfIi1Ml0545ZlrZws R0o1KoY35+fBc6/jZkeAlpnGUrOlgK8= 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 adultscore=0 lowpriorityscore=0 impostorscore=0 clxscore=1015 malwarescore=0 bulkscore=0 spamscore=0 priorityscore=1501 phishscore=0 suspectscore=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