Re: [PATCH v3 1/2] dt-bindings: firmware: google,gs101-acpm-ipc: document Exynos850 compatible
From: Sam Protsenko
Date: Tue Oct 06 2026 - 20:28:11 EST
On Tue, Oct 6, 2026 at 6:47 PM Sam Protsenko <semen.protsenko@xxxxxxxxxx> wrote:
>
> On Mon, Sep 28, 2026 at 9:11 PM Alexey Klimov <alexey.klimov@xxxxxxxxxx> wrote:
> >
> > The Exynos850 SoC incorporates an APM co-processor. Communication with this
> > hardware block is done using the ACPM protocol, which handles IPC messages
> > for clocks, power, thermal management and PMIC control. In this
> > architecture, the ACPM firmware running on the APM acts as the central
> > supervisor or arbiter for shared system resources, handling requests from
> > clients or agents such as an OSPM. In this design, the OSPM is one of
> > several clients or agents communicating with APM.
> >
> > Dedicated compatible string is required for the Exynos850 because
> > its firmware utilizes a different initialisation data base offset
> > (0x7000) compared to the existing GS101 implementation (0xa000).
> >
> > Additionally, the ACPM firmware implementation on Exynos850 does not cover
> > all clock management operations (such as clock rate reads over ACPM IPC).
> > To allow the OSPM to resolve rates for these ACPM clock IDs or sometimes
> > called domains, add 'clocks' and 'clock-names' properties to reference the
> > underlying physical clocks.
> >
> > Add the "samsung,exynos850-acpm-ipc" compatible string, binding defines for
> > Exynos850 ACPM clock IDs, clock property constraints, and disallow GS101-
> > specific PMIC child nodes for Exynos850.
> >
> > Signed-off-by: Alexey Klimov <alexey.klimov@xxxxxxxxxx>
> > ---
>
> Reviewed-by: Sam Protsenko <semen.protsenko@xxxxxxxxxx>
>
By the way, we discussed earlier the reason for ACPM clocks:
"PMIC might be controlled by different masters (cores), e.g. when
Linux is asleep and doesn't control PMIC via CPU, audio co-processor
can still be up playing audio, thus it needs to control PMIC via ACPM,
which in turn means some clocks have to be controlled over ACPM, so
that power supervisor (APM) can decide how to handle/arbiter those
requests from different IP-cores."
FWIW, I think it may be valuable to have this explanation added either
in the bindings doc or in the commit message. Otherwise one might
question why this whole ACPM thing is needed at all, as we already can
control those clocks via the regular clock driver. It's just a
thought, and can be done in a separate patch later.
> > .../bindings/firmware/google,gs101-acpm-ipc.yaml | 56 +++++++++++++++++++++-
> > include/dt-bindings/clock/samsung,exynos850-acpm.h | 21 ++++++++
> > 2 files changed, 76 insertions(+), 1 deletion(-)
> >
> > diff --git a/Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml b/Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml
> > index e68f9c3ca5e2..0eaa9c881f6f 100644
> > --- a/Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml
> > +++ b/Documentation/devicetree/bindings/firmware/google,gs101-acpm-ipc.yaml
> > @@ -22,7 +22,9 @@ description: |
> >
> > properties:
> > compatible:
> > - const: google,gs101-acpm-ipc
> > + enum:
> > + - google,gs101-acpm-ipc
> > + - samsung,exynos850-acpm-ipc
> >
> > "#clock-cells":
> > const: 1
> > @@ -33,6 +35,20 @@ properties:
> > appropriately with the clock scaling. The argument is the ID of the
> > clock contained by the firmware messages.
> >
> > + clocks:
> > + minItems: 1
> > + maxItems: 9
> > + description:
> > + List of the underlying clocks associated with each ACPM clock domain.
> > + This property relates to ACPM firmware variants where not all clock
> > + operations are implemented.
> > +
> > + clock-names:
> > + minItems: 1
> > + maxItems: 9
> > + description:
> > + Names of the ACPM clock domains corresponding to entries in 'clocks'.
> > +
> > mboxes:
> > maxItems: 1
> >
> > @@ -77,6 +93,44 @@ required:
> > - mboxes
> > - shmem
> >
> > +allOf:
> > + - if:
> > + properties:
> > + compatible:
> > + contains:
> > + const: google,gs101-acpm-ipc
> > + then:
> > + properties:
> > + clocks: false
> > + clock-names: false
> > +
> > + - if:
> > + properties:
> > + compatible:
> > + contains:
> > + const: samsung,exynos850-acpm-ipc
> > + then:
> > + properties:
> > + clock-names:
> > + items:
> > + enum:
> > + - mif
> > + - int
> > + - cpucl0
> > + - cpucl1
> > + - g3d
> > + - aud
> > + - cam
> > + - disp
> > + - cp
> > + uniqueItems: true
> > + pmic: false
> > + pmic-1: false
> > + pmic-2: false
> > + required:
> > + - clocks
> > + - clock-names
> > +
> > additionalProperties: false
> >
> > examples:
> > diff --git a/include/dt-bindings/clock/samsung,exynos850-acpm.h b/include/dt-bindings/clock/samsung,exynos850-acpm.h
> > new file mode 100644
> > index 000000000000..87fc6ccc1d99
> > --- /dev/null
> > +++ b/include/dt-bindings/clock/samsung,exynos850-acpm.h
> > @@ -0,0 +1,21 @@
> > +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
> > +/*
> > + * Copyright 2026 Linaro Ltd.
> > + *
> > + * Device Tree binding constants for Exynos850 ACPM clock controller.
> > + */
> > +
> > +#ifndef _DT_BINDINGS_CLOCK_SAMSUNG_EXYNOS850_ACPM_H
> > +#define _DT_BINDINGS_CLOCK_SAMSUNG_EXYNOS850_ACPM_H
> > +
> > +#define EXYNOS850_CLK_ACPM_DVFS_MIF 0
> > +#define EXYNOS850_CLK_ACPM_DVFS_INT 1
> > +#define EXYNOS850_CLK_ACPM_DVFS_CPUCL0 2
> > +#define EXYNOS850_CLK_ACPM_DVFS_CPUCL1 3
> > +#define EXYNOS850_CLK_ACPM_DVFS_G3D 4
> > +#define EXYNOS850_CLK_ACPM_DVFS_AUD 5
> > +#define EXYNOS850_CLK_ACPM_DVFS_CAM 6
> > +#define EXYNOS850_CLK_ACPM_DVFS_DISP 7
> > +#define EXYNOS850_CLK_ACPM_DVFS_CP 8
> > +
> > +#endif /* _DT_BINDINGS_CLOCK_SAMSUNG_EXYNOS850_ACPM_H */
> >
> > --
> > 2.51.0
> >