Re: [PATCH v2 3/3] soc: qcom: rpmhpd: add sc8280xp & sa8540p rpmh power-domains

From: Bjorn Andersson
Date: Thu Apr 28 2022 - 11:46:29 EST


On Wed 27 Apr 05:38 PDT 2022, Andrew Halaney wrote:

> On Tue, Apr 26, 2022 at 04:35:08PM -0700, Bjorn Andersson wrote:
> > The Qualcomm sc8280xp platform has 13 and the sa8540p platform has 11
> > power-domains. Add compatibles, the typically used ones power-domains
> > and their relevant active-only variants, to the RPMh power-domain
> > driver.
> >
> > Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx>
> > ---
> >
> > Changes since v1:
> > - Added QPHY
> > - Split out sa8540
> > - Sorted the entries alphabetically
> >
> > drivers/soc/qcom/rpmhpd.c | 53 +++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 53 insertions(+)
> >
> > diff --git a/drivers/soc/qcom/rpmhpd.c b/drivers/soc/qcom/rpmhpd.c
> > index f8d28e902942..05fff8691ee3 100644
> > --- a/drivers/soc/qcom/rpmhpd.c
> > +++ b/drivers/soc/qcom/rpmhpd.c
> > @@ -180,6 +180,36 @@ static struct rpmhpd mxc_ao = {
> > .res_name = "mxc.lvl",
> > };
> >
> > +static struct rpmhpd nsp = {
> > + .pd = { .name = "nsp", },
> > + .res_name = "nsp.lvl",
> > +};
> > +
> > +static struct rpmhpd qphy = {
> > + .pd = { .name = "qphy", },
> > + .res_name = "qphy.lvl",
> > +};
> > +
> > +/* SA8540P RPMH powerdomains */
> > +static struct rpmhpd *sa8540p_rpmhpds[] = {
> > + [SC8280XP_CX] = &cx,
> > + [SC8280XP_CX_AO] = &cx_ao,
> > + [SC8280XP_EBI] = &ebi,
> > + [SC8280XP_GFX] = &gfx,
> > + [SC8280XP_LCX] = &lcx,
> > + [SC8280XP_LMX] = &lmx,
> > + [SC8280XP_MMCX] = &mmcx,
> > + [SC8280XP_MMCX_AO] = &mmcx_ao,
> > + [SC8280XP_MX] = &mx,
> > + [SC8280XP_MX_AO] = &mx_ao,
> > + [SC8280XP_NSP] = &nsp,
> > +};
> > +
> > +static const struct rpmhpd_desc sa8540p_desc = {
> > + .rpmhpds = sa8540p_rpmhpds,
> > + .num_pds = ARRAY_SIZE(sa8540p_rpmhpds),
> > +};
> > +
> > /* SDM845 RPMH powerdomains */
> > static struct rpmhpd *sdm845_rpmhpds[] = {
> > [SDM845_CX] = &cx_w_mx_parent,
> > @@ -378,10 +408,33 @@ static const struct rpmhpd_desc sc8180x_desc = {
> > .num_pds = ARRAY_SIZE(sc8180x_rpmhpds),
> > };
> >
> > +/* SC8280xp RPMH powerdomains */
> > +static struct rpmhpd *sc8280xp_rpmhpds[] = {
> > + [SC8280XP_CX] = &cx,
> > + [SC8280XP_CX_AO] = &cx_ao,
> > + [SC8280XP_EBI] = &ebi,
> > + [SC8280XP_GFX] = &gfx,
> > + [SC8280XP_LCX] = &lcx,
> > + [SC8280XP_LMX] = &lmx,
> > + [SC8280XP_MMCX] = &mmcx,
> > + [SC8280XP_MMCX_AO] = &mmcx_ao,
> > + [SC8280XP_MX] = &mx,
> > + [SC8280XP_MX_AO] = &mx_ao,
> > + [SC8280XP_NSP] = &nsp,
> > + [SC8280XP_QPHY] = &qphy,
> > +};
>
> The commit messages mention sc8280xp having 13 power domains, but here I
> only count 12. Good chance I'm just missing something obvious (not
> familiar with using power domains or rpmh) but I thought I should
> highlight it in case that was an error.
>

The "typically used ones" in the commit message "captures" that. Further
more _AO is just a variant of the non-_AO resources, referring to votes
that should only apply when the CPU subsystem is not power collapsed.

So what you have in this list is 10 power domains.

I added defines for all 13 in the DT binding, so comparing with that
you'll see that the missing ones are DDR, MSS and XO. I don't see how we
would use these from Linux today. So let's postpone adding them until we
have a use case.

> I attempted to find where this sort of thing is defined downstream, but
> failed :(
>

In direwolf-regulators.dtsi you'll find entries with qcom,resource-name
of "*.lvl". These resource names are matches against the Command DB
registry, which you can dump using the cmd-db file in debugfs.

Regards,
Bjorn

> Thanks,
> Andrew
>
> > +
> > +static const struct rpmhpd_desc sc8280xp_desc = {
> > + .rpmhpds = sc8280xp_rpmhpds,
> > + .num_pds = ARRAY_SIZE(sc8280xp_rpmhpds),
> > +};
> > +
> > static const struct of_device_id rpmhpd_match_table[] = {
> > + { .compatible = "qcom,sa8540p-rpmhpd", .data = &sa8540p_desc },
> > { .compatible = "qcom,sc7180-rpmhpd", .data = &sc7180_desc },
> > { .compatible = "qcom,sc7280-rpmhpd", .data = &sc7280_desc },
> > { .compatible = "qcom,sc8180x-rpmhpd", .data = &sc8180x_desc },
> > + { .compatible = "qcom,sc8280xp-rpmhpd", .data = &sc8280xp_desc },
> > { .compatible = "qcom,sdm845-rpmhpd", .data = &sdm845_desc },
> > { .compatible = "qcom,sdx55-rpmhpd", .data = &sdx55_desc},
> > { .compatible = "qcom,sdx65-rpmhpd", .data = &sdx65_desc},
> > --
> > 2.35.1
> >
>