Re: [PATCH 00/35] irqchip/qcom-pdc: Clean up register mapping and DT descriptions

From: Mukesh Ojha

Date: Sat Apr 11 2026 - 02:55:37 EST


On Fri, Apr 10, 2026 at 09:48:25PM -0500, Bjorn Andersson wrote:
> On Sat, Apr 11, 2026 at 12:10:37AM +0530, Mukesh Ojha wrote:
> > The Qualcomm PDC (Power Domain Controller) hardware exposes multiple DRV
> > (Driver) regions, each 0x10000 bytes in size, where each region serves a
> > specific client in the system . Linux only needs access to the APSS DRV
> > region.
> >
> > Despite this, the driver was mapping up to 0x30000 bytes (three DRV
> > regions) via a QCOM_PDC_SIZE clamp introduced as a workaround for old
> > sm8150 DTs that described a too-small register window. Correspondingly,
> > most platform DTS files described the PDC reg as 0x30000 in size, and
> > several also carried a second, entirely unused reg entry pointing at an
> > unrelated register region that the driver never maps.
> >
> > This series cleans all of that up in three logical steps:
> >
> > 1. (patches 2-6):
> >
>
> These patches are for the IRQ subsystem/maintainer.

It's bad on my part that I didn't expect this to be merged in the first
iteration itself, but yes, I could have put PDC register sizing and
related device tree binding and driver changes together with the device
tree as one set. Like in the current patch series, it would be patches
1, 3, and all "Fix PDC reg size..." patches or may be the removing the
2nd register space change as well in one set and pdc driver clean up as
separate ?

>
> > Split __pdc_enable_intr() into two focused per-version helpers
> > to separate the HW < 3.2 bank-based path from the HW >= 3.2 per-pin
> > path. Replace the pdc_version global with a function pointer assigned
> > once at probe time, moving the version check out of the hot path.
> > Tighten the ioremap clamp from QCOM_PDC_SIZE (0x30000) to PDC_DRV_SIZE
> > (0x10000) now that the DT fixes below make the workaround unnecessary.
> > Also add a PDC_VERSION() constructor macro and use FIELD_GET() for bank
> > index extraction to make the bit encoding self-documenting.
> >
> > 2. (patches 1, 7-28):
> >
>
> And these patches are for the Qualcomm SoC/DT tree.

Yes, As I said, I could have done better..

>
> > All 28 platform DTS files that described the PDC reg window as 0x30000
> > are corrected to 0x10000, reflecting the single APSS DRV region that
> > Linux actually maps.
> >
> > 3. (patches 29-35):
> >
>
> Same with these.
>
>
> I don't see any dependencies between the IRQ and DT patches, can they be
> merged independently? Why did you send them together?

For better context, register sizing changes can be sent together
including binding, driver, and DT's as well.

>
> Regards,
> Bjorn
>
> > Seven platform DTS files (kaanapali, lemans, milos, monaco, sc8280xp,
> > sdx75, talos) carried a second reg entry pointing at an unrelated
> > hardware block. The driver only ever calls of_address_to_resource(node,
> > 0, ...) so this second entry was never mapped or accessed. Remove it.
> >
> > The net result is that every PDC node in the tree now describes exactly
> > one register region of exactly 0x10000 bytes — the APSS DRV region that
> > the driver actually uses — and the driver's ioremap clamp matches that
> > reality.
> >
> > Mukesh Ojha (35):
> > dt-bindings: qcom,pdc: Tighten reg to single APSS DRV region
> > irqchip/qcom-pdc: Split __pdc_enable_intr() into per-version helpers
> > irqchip/qcom-pdc: Tighten ioremap clamp to single DRV region size
> > irqchip/qcom-pdc: Replace pdc_version global with a function pointer
> > irqchip/qcom-pdc: Add PDC_VERSION() macro to describe version register
> > fields
> > irqchip/qcom-pdc: Use FIELD_GET() to extract bank index and bit
> > position
> > arm64: dts: qcom: sdm845: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sdm670: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sc7180: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sc7280: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sc8180x: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm8150: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sc8280xp: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm8250: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm8350: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm8450: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm8550: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm8650: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm4450: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: x1e80100: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sm6350: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sar2130p: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: qcs615: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: qcs8300: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sa8775p: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: sdx75: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: milos: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: qdu1000: Fix PDC reg size to single APSS DRV region
> > arm64: dts: qcom: kaanapali: Drop unused second PDC reg entry
> > arm64: dts: qcom: lemans: Drop unused second PDC reg entry
> > arm64: dts: qcom: milos: Drop unused second PDC reg entry
> > arm64: dts: qcom: monaco: Drop unused second PDC reg entry
> > arm64: dts: qcom: sc8280xp: Drop unused second PDC reg entry
> > arm64: dts: qcom: sdx75: Drop unused second PDC reg entry
> > arm64: dts: qcom: talos: Drop unused second PDC reg entry
> >
> > .../interrupt-controller/qcom,pdc.yaml | 2 +-
> > arch/arm64/boot/dts/qcom/hamoa.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/kaanapali.dtsi | 3 +-
> > arch/arm64/boot/dts/qcom/kodiak.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/lemans.dtsi | 3 +-
> > arch/arm64/boot/dts/qcom/milos.dtsi | 3 +-
> > arch/arm64/boot/dts/qcom/monaco.dtsi | 3 +-
> > arch/arm64/boot/dts/qcom/qdu1000.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sar2130p.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sc7180.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sc8180x.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sc8280xp.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sdm670.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sdx75.dtsi | 3 +-
> > arch/arm64/boot/dts/qcom/sm4450.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm6350.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm8150.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm8250.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm8350.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm8450.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm8550.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/sm8650.dtsi | 2 +-
> > arch/arm64/boot/dts/qcom/talos.dtsi | 3 +-
> > drivers/irqchip/qcom-pdc.c | 56 +++++++++++--------
> > 25 files changed, 57 insertions(+), 53 deletions(-)
> >
> > --
> > 2.53.0
> >

--
-Mukesh Ojha