mbox series

[v2,0/4] Apple SoC cpufreq driver

Message ID 20220504075153.185208-1-marcan@marcan.st (mailing list archive)
Headers show
Series Apple SoC cpufreq driver | expand

Message

Hector Martin May 4, 2022, 7:51 a.m. UTC
Hi folks,

Here's a second take on the cpufreq driver for Apple SoCs. This is a
complete rewrite using a stand-alone cpufreq driver instead of using the
cpufreq-dt infrastructure.

Since v1 we ran some experiments on the memory controller performance
switching and it turns out it doesn't make a huge difference, so it
makes sense to punt that feature to the future (perhaps once a proper
memory controller driver exists for other reasons, e.g. for error
handling).

One advantage of having a standalone cpufreq driver is that we can
support fast switching. This also means any future interaction with
the memory controller will probably use some bespoke mechanism instead
of the genpd infrastructure, so we can keep the fast path without
allowing sleeps/etc.

The driver is based on scpi-cpufreq.c, with some bits (e.g. the
apple,freq-domain stuff) inspired by how cpufreq-qcom-hw does it.
I'm not sure if that particular property should be described
in a binding, since it goes in the cpu nodes (qcom doesn't have it
anywhere...).

Changes since v1:
- Complete rewrite
- Reports current frequency to userspace properly (incl. if different
  from requested due to hardware constraints)
- Supports fast switching
- MCC latency control stuff no longer included, punted for later
- Supports exposing higher states as turbo states

Hector Martin (4):
  MAINTAINERS: Add entries for Apple SoC cpufreq driver
  dt-bindings: cpufreq: apple,soc-cpufreq: Add binding for Apple SoC
    cpufreq
  cpufreq: apple-soc: Add new driver to control Apple SoC CPU P-states
  arm64: dts: apple: Add CPU topology & cpufreq nodes for t8103

 .../bindings/cpufreq/apple,soc-cpufreq.yaml   | 121 +++++++
 MAINTAINERS                                   |   2 +
 arch/arm64/boot/dts/apple/t8103.dtsi          | 203 ++++++++++-
 drivers/cpufreq/Kconfig.arm                   |   9 +
 drivers/cpufreq/Makefile                      |   1 +
 drivers/cpufreq/apple-soc-cpufreq.c           | 330 ++++++++++++++++++
 drivers/cpufreq/cpufreq-dt-platdev.c          |   2 +
 7 files changed, 658 insertions(+), 10 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/cpufreq/apple,soc-cpufreq.yaml
 create mode 100644 drivers/cpufreq/apple-soc-cpufreq.c

Comments

Viresh Kumar May 4, 2022, 10:27 a.m. UTC | #1
On 04-05-22, 16:51, Hector Martin wrote:
> Hi folks,
> 
> Here's a second take on the cpufreq driver for Apple SoCs. This is a
> complete rewrite using a stand-alone cpufreq driver instead of using the
> cpufreq-dt infrastructure.
> 
> Since v1 we ran some experiments on the memory controller performance
> switching and it turns out it doesn't make a huge difference, so it
> makes sense to punt that feature to the future (perhaps once a proper
> memory controller driver exists for other reasons, e.g. for error
> handling).
> 
> One advantage of having a standalone cpufreq driver is that we can
> support fast switching. This also means any future interaction with
> the memory controller will probably use some bespoke mechanism instead
> of the genpd infrastructure, so we can keep the fast path without
> allowing sleeps/etc.
> 
> The driver is based on scpi-cpufreq.c, with some bits (e.g. the
> apple,freq-domain stuff) inspired by how cpufreq-qcom-hw does it.
> I'm not sure if that particular property should be described
> in a binding, since it goes in the cpu nodes (qcom doesn't have it
> anywhere...).

Hi Mani,

I can see that Rob asked you to add this somewhere, maybe in arm/cpu
stuff, but I don't think you ever sent a patch with that. What
happened ?

https://lore.kernel.org/lkml/20201013171800.GA3716411@bogus/
Manivannan Sadhasivam May 4, 2022, 4 p.m. UTC | #2
Hi Viresh,

On Wed, May 04, 2022 at 03:57:45PM +0530, Viresh Kumar wrote:
> On 04-05-22, 16:51, Hector Martin wrote:
> > Hi folks,
> > 
> > Here's a second take on the cpufreq driver for Apple SoCs. This is a
> > complete rewrite using a stand-alone cpufreq driver instead of using the
> > cpufreq-dt infrastructure.
> > 
> > Since v1 we ran some experiments on the memory controller performance
> > switching and it turns out it doesn't make a huge difference, so it
> > makes sense to punt that feature to the future (perhaps once a proper
> > memory controller driver exists for other reasons, e.g. for error
> > handling).
> > 
> > One advantage of having a standalone cpufreq driver is that we can
> > support fast switching. This also means any future interaction with
> > the memory controller will probably use some bespoke mechanism instead
> > of the genpd infrastructure, so we can keep the fast path without
> > allowing sleeps/etc.
> > 
> > The driver is based on scpi-cpufreq.c, with some bits (e.g. the
> > apple,freq-domain stuff) inspired by how cpufreq-qcom-hw does it.
> > I'm not sure if that particular property should be described
> > in a binding, since it goes in the cpu nodes (qcom doesn't have it
> > anywhere...).
> 
> Hi Mani,
> 
> I can see that Rob asked you to add this somewhere, maybe in arm/cpu
> stuff, but I don't think you ever sent a patch with that. What
> happened ?
> 
> https://lore.kernel.org/lkml/20201013171800.GA3716411@bogus/
> 

Oops. Looks like that one slipped through the cracks. I did add it to my todo
list for qcom-cpufreq but missed it completely.

I will look into it.

Thanks,
Mani

> -- 
> viresh
Manivannan Sadhasivam May 8, 2022, 7:16 a.m. UTC | #3
On Wed, May 04, 2022 at 09:30:26PM +0530, Manivannan Sadhasivam wrote:
> Hi Viresh,
> 
> On Wed, May 04, 2022 at 03:57:45PM +0530, Viresh Kumar wrote:
> > On 04-05-22, 16:51, Hector Martin wrote:
> > > Hi folks,
> > > 
> > > Here's a second take on the cpufreq driver for Apple SoCs. This is a
> > > complete rewrite using a stand-alone cpufreq driver instead of using the
> > > cpufreq-dt infrastructure.
> > > 
> > > Since v1 we ran some experiments on the memory controller performance
> > > switching and it turns out it doesn't make a huge difference, so it
> > > makes sense to punt that feature to the future (perhaps once a proper
> > > memory controller driver exists for other reasons, e.g. for error
> > > handling).
> > > 
> > > One advantage of having a standalone cpufreq driver is that we can
> > > support fast switching. This also means any future interaction with
> > > the memory controller will probably use some bespoke mechanism instead
> > > of the genpd infrastructure, so we can keep the fast path without
> > > allowing sleeps/etc.
> > > 
> > > The driver is based on scpi-cpufreq.c, with some bits (e.g. the
> > > apple,freq-domain stuff) inspired by how cpufreq-qcom-hw does it.
> > > I'm not sure if that particular property should be described
> > > in a binding, since it goes in the cpu nodes (qcom doesn't have it
> > > anywhere...).
> > 
> > Hi Mani,
> > 
> > I can see that Rob asked you to add this somewhere, maybe in arm/cpu
> > stuff, but I don't think you ever sent a patch with that. What
> > happened ?
> > 
> > https://lore.kernel.org/lkml/20201013171800.GA3716411@bogus/
> > 
> 
> Oops. Looks like that one slipped through the cracks. I did add it to my todo
> list for qcom-cpufreq but missed it completely.
> 
> I will look into it.
> 

So I did send a patch for adding the qcom specific property [1], but Rob asked
for a common one and that's where it got lost.

But in the last revision [2], you've asked for converting the qcom cpufreq
driver to support the generic performance domains instead. For maintaining
compatibility with the old dts files, we need to support the qcom specific
property as well.

I will send a series for that.

Thanks,
Mani

[1] https://patchwork.kernel.org/project/linux-pm/patch/20201020153944.18047-1-manivannan.sadhasivam@linaro.org/#23718065
[2] https://patchwork.kernel.org/project/linux-pm/patch/20210701105730.322718-4-angelogioacchino.delregno@somainline.org/ 
> Thanks,
> Mani
> 
> > -- 
> > viresh