[PATCH 0/9] google: Add support for Laguna CPM

From: Brian Norris

Date: Mon Oct 26 2026 - 17:45:25 EST


The Central Power Manager (CPM) is a co-processor on the Google Tensor
SoCs, as used on Pixel phones. CPM supports power-management and a
number of other features.

The Application Processor communicates with CPM over a pair of mailbox
channels. CPM provides clock, power-domain, reset, and interrupt
services.

This series adds device tree bindings, DTS, and drivers to support CPM,
and several of the basic services provided by CPM. These services are a
minimal set needed to bootstrap many other components on the SoC --
e.g., I have a working proof-of-concept PCIe driver running on top of
this series + pinctrl (not included here). CPM provides some other
components not yet included in this series (e.g., PMIC, RTC).

This series depends on the bindings and mailbox-payload-definitions from
this series:

https://lore.kernel.org/all/20261023235408.3063350-1-dianders@xxxxxxxxxxxx/
[PATCH v2 0/4] mailbox: Improve the mbox core then introduce the goog-mba driver

So this series cannot be applied as-is yet. However, v1 of that series
was under review for about 3 months, so I'd like to at least:

1) demonstrate its clients (this came up at
https://lore.kernel.org/all/CAD=FV=VW2h1zWDYWQ6LknX3O+3=EY665jde35Ly+UQzuscXy=Q@xxxxxxxxxxxxxx/,
for one); and

2) start review for anything that isn't significantly impacted by
potential changes in the above mailbox series.

With luck, the general design and DT bindings don't need to change, but
even if so, I expect any changes should not significantly affect:

(a) the CPM DT binding or DTS (apart from #mbox-cells)

(b) the CPM interface (cpm_request_client(), cpm_send_message())

(c) any of the CPM clients (irqchip, reset, clk, pmdomain)

Thus, I think this falls somewhere between "PATCH" and "RFC".

This series has been tested on a Pixel 10 Pro XL (a.k.a., Mustang) both
as-is (plus the aforementioned mailbox patches), and also with minimal
additional local patches to get other components running on top
(pinctrl, PCIe, RTC), to prove out some more realistic use cases.

- Brian


Brian Norris (9):
arm64: dts: google: Add Laguna CPM mailbox array
dt-bindings: soc: google: Add Google Tensor CPM binding
soc: google: Add CPM over MailBox Array driver
pmdomain: google: Add CPM power-domain driver
clk: google: Add CPM clock driver
reset: google: Add CPM reset driver
irqchip/google-cpm: Add CPM IRQ driver
arm64: dts: google: Add Laguna CPM node
MAINTAINERS: Add entries for CPM drivers used on Tensor SoCs

.../bindings/soc/google/google,lga-cpm.yaml | 74 ++
MAINTAINERS | 14 +-
arch/arm64/boot/dts/google/lga.dtsi | 50 +
drivers/clk/Kconfig | 1 +
drivers/clk/Makefile | 1 +
drivers/clk/google/Kconfig | 13 +
drivers/clk/google/Makefile | 3 +
drivers/clk/google/clk-cpm-internal.h | 35 +
drivers/clk/google/clk-cpm-lga.c | 271 +++++
drivers/clk/google/clk-cpm.c | 573 +++++++++++
drivers/irqchip/Kconfig | 10 +
drivers/irqchip/Makefile | 1 +
drivers/irqchip/irq-google-cpm.c | 123 +++
drivers/pmdomain/Kconfig | 1 +
drivers/pmdomain/Makefile | 1 +
drivers/pmdomain/google/Kconfig | 14 +
drivers/pmdomain/google/Makefile | 2 +
drivers/pmdomain/google/cpm-power-lga.h | 467 +++++++++
drivers/pmdomain/google/cpm-power-trace.h | 80 ++
drivers/pmdomain/google/cpm-power.c | 637 ++++++++++++
drivers/pmdomain/google/lpb_service.h | 200 ++++
drivers/reset/Kconfig | 1 +
drivers/reset/Makefile | 1 +
drivers/reset/google/Kconfig | 11 +
drivers/reset/google/Makefile | 2 +
drivers/reset/google/reset-cpm.c | 367 +++++++
drivers/soc/Kconfig | 1 +
drivers/soc/Makefile | 1 +
drivers/soc/google/Kconfig | 13 +
drivers/soc/google/Makefile | 3 +
drivers/soc/google/google-cpm-mba-trace.h | 214 ++++
drivers/soc/google/google-cpm-mba.c | 964 ++++++++++++++++++
drivers/soc/google/google-cpm-mba.h | 30 +
include/dt-bindings/clock/google,lga-cpm.h | 191 ++++
.../interrupt-controller/irq-cpm-google.h | 16 +
include/dt-bindings/power/google,lga-cpm.h | 79 ++
.../dt-bindings/reset/google,lga-cpm-reset.h | 175 ++++
include/dt-bindings/soc/google,lga-lpcm.h | 54 +
include/soc/google/goog_cpm_service_ids.h | 84 ++
include/soc/google/google-cpm-mba.h | 147 +++
40 files changed, 4923 insertions(+), 2 deletions(-)
create mode 100644 Documentation/devicetree/bindings/soc/google/google,lga-cpm.yaml
create mode 100644 drivers/clk/google/Kconfig
create mode 100644 drivers/clk/google/Makefile
create mode 100644 drivers/clk/google/clk-cpm-internal.h
create mode 100644 drivers/clk/google/clk-cpm-lga.c
create mode 100644 drivers/clk/google/clk-cpm.c
create mode 100644 drivers/irqchip/irq-google-cpm.c
create mode 100644 drivers/pmdomain/google/Kconfig
create mode 100644 drivers/pmdomain/google/Makefile
create mode 100644 drivers/pmdomain/google/cpm-power-lga.h
create mode 100644 drivers/pmdomain/google/cpm-power-trace.h
create mode 100644 drivers/pmdomain/google/cpm-power.c
create mode 100644 drivers/pmdomain/google/lpb_service.h
create mode 100644 drivers/reset/google/Kconfig
create mode 100644 drivers/reset/google/Makefile
create mode 100644 drivers/reset/google/reset-cpm.c
create mode 100644 drivers/soc/google/Kconfig
create mode 100644 drivers/soc/google/Makefile
create mode 100644 drivers/soc/google/google-cpm-mba-trace.h
create mode 100644 drivers/soc/google/google-cpm-mba.c
create mode 100644 drivers/soc/google/google-cpm-mba.h
create mode 100644 include/dt-bindings/clock/google,lga-cpm.h
create mode 100644 include/dt-bindings/interrupt-controller/irq-cpm-google.h
create mode 100644 include/dt-bindings/power/google,lga-cpm.h
create mode 100644 include/dt-bindings/reset/google,lga-cpm-reset.h
create mode 100644 include/dt-bindings/soc/google,lga-lpcm.h
create mode 100644 include/soc/google/goog_cpm_service_ids.h
create mode 100644 include/soc/google/google-cpm-mba.h

--
2.56.0.307.g5fe7bd680c-goog