From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> To: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Cc: mbrugger@suse.de, viresh.kumar@linaro.org, rjw@rjwysocki.net, sboyd@kernel.org, eric@anholt.net, f.fainelli@gmail.com, bcm-kernel-feedback-list@broadcom.com, ptesarik@suse.com, ssuloev@orpaltech.com, linux-clk@vger.kernel.org, mturquette@baylibre.com, Nicolas Saenz Julienne <nsaenzjulienne@suse.de>, linux-kernel@vger.kernel.org Subject: [RFC v2 0/5] cpufreq support for the Raspberry Pi Date: Mon, 20 May 2019 12:47:02 +0200 [thread overview] Message-ID: <20190520104708.11980-1-nsaenzjulienne@suse.de> (raw) Hi all, as some of you may recall I've been spending some time looking into providing 'cpufreq' support for the Raspberry Pi platform[1]. I think I'm close to something workable, so I'd love for you to comment on it. There has been some design changes since the last version. Namely the fact that I now make sure *only* the CPU frequency is updated. The firmware API we use has two modes, with or without turbo. Enabling turbo implies not only scaling the CPU clock but also the VPU and other peripheral related clocks. This is problematic as some of them are not prepared for this kind frequency changes. I spent some time adapting the peripheral drivers, but the result was disappointing as they poorly support live frequency changes (which most other chips accept, think for instance I2C and clock stretching) but also turned out hard to integrate into the kernel. As we were planning to use 'clk_notifiers' which turns out not to be such a good idea as it's prone to deadlocks and not recommended by the clock maintainers[2]. It's also worth mentioning that the foundation kernel doesn't support VPU frequency scaling either. With this in mind, and as suggested by clock maintainers[2], I've decided to integrate the firmware clock interface into the bcm2835 clock driver. This, in my opinion, provides the least friction with the firmware and lets us write very simple and portable higher level drivers. As I did with the 'cpufreq' driver which simply queries the max and min frequencies available, which are configurable in the firmware, to then trigger the generic 'cpufreq-dt'. In the future we could further integrate other firmware dependent clocks into the main driver. For instance to be able to scale the VPU clock, which should be operated through a 'devfreq' driver. This was tested on a RPi3b+ and if the series is well received I'll test it further on all platforms I own. That's all, kind regards, Nicolas [1] https://lists.infradead.org/pipermail/linux-rpi-kernel/2019-April/008634.html [2] https://www.spinics.net/lists/linux-clk/msg36937.html --- Changes since v1: - Addressed Viresh's comments in cpufreq driver - Resend with (hopefully) proper CCs Nicolas Saenz Julienne (5): clk: bcm2835: set CLK_GET_RATE_NOCACHE on CPU clocks clk: bcm2835: set pllb_arm divisor as readonly clk: bcm2835: use firmware interface to update pllb dts: bcm2837: add per-cpu clock devices cpufreq: add driver for Raspbery Pi arch/arm/boot/dts/bcm2837.dtsi | 8 + drivers/clk/bcm/clk-bcm2835.c | 284 ++++++++++++++++++++++++-- drivers/cpufreq/Kconfig.arm | 8 + drivers/cpufreq/Makefile | 1 + drivers/cpufreq/raspberrypi-cpufreq.c | 83 ++++++++ 5 files changed, 366 insertions(+), 18 deletions(-) create mode 100644 drivers/cpufreq/raspberrypi-cpufreq.c -- 2.21.0
WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> To: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux-rpi-kernel@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Cc: f.fainelli@gmail.com, ptesarik@suse.com, sboyd@kernel.org, viresh.kumar@linaro.org, mturquette@baylibre.com, rjw@rjwysocki.net, linux-kernel@vger.kernel.org, eric@anholt.net, bcm-kernel-feedback-list@broadcom.com, Nicolas Saenz Julienne <nsaenzjulienne@suse.de>, linux-clk@vger.kernel.org, mbrugger@suse.de, ssuloev@orpaltech.com Subject: [RFC v2 0/5] cpufreq support for the Raspberry Pi Date: Mon, 20 May 2019 12:47:02 +0200 [thread overview] Message-ID: <20190520104708.11980-1-nsaenzjulienne@suse.de> (raw) Hi all, as some of you may recall I've been spending some time looking into providing 'cpufreq' support for the Raspberry Pi platform[1]. I think I'm close to something workable, so I'd love for you to comment on it. There has been some design changes since the last version. Namely the fact that I now make sure *only* the CPU frequency is updated. The firmware API we use has two modes, with or without turbo. Enabling turbo implies not only scaling the CPU clock but also the VPU and other peripheral related clocks. This is problematic as some of them are not prepared for this kind frequency changes. I spent some time adapting the peripheral drivers, but the result was disappointing as they poorly support live frequency changes (which most other chips accept, think for instance I2C and clock stretching) but also turned out hard to integrate into the kernel. As we were planning to use 'clk_notifiers' which turns out not to be such a good idea as it's prone to deadlocks and not recommended by the clock maintainers[2]. It's also worth mentioning that the foundation kernel doesn't support VPU frequency scaling either. With this in mind, and as suggested by clock maintainers[2], I've decided to integrate the firmware clock interface into the bcm2835 clock driver. This, in my opinion, provides the least friction with the firmware and lets us write very simple and portable higher level drivers. As I did with the 'cpufreq' driver which simply queries the max and min frequencies available, which are configurable in the firmware, to then trigger the generic 'cpufreq-dt'. In the future we could further integrate other firmware dependent clocks into the main driver. For instance to be able to scale the VPU clock, which should be operated through a 'devfreq' driver. This was tested on a RPi3b+ and if the series is well received I'll test it further on all platforms I own. That's all, kind regards, Nicolas [1] https://lists.infradead.org/pipermail/linux-rpi-kernel/2019-April/008634.html [2] https://www.spinics.net/lists/linux-clk/msg36937.html --- Changes since v1: - Addressed Viresh's comments in cpufreq driver - Resend with (hopefully) proper CCs Nicolas Saenz Julienne (5): clk: bcm2835: set CLK_GET_RATE_NOCACHE on CPU clocks clk: bcm2835: set pllb_arm divisor as readonly clk: bcm2835: use firmware interface to update pllb dts: bcm2837: add per-cpu clock devices cpufreq: add driver for Raspbery Pi arch/arm/boot/dts/bcm2837.dtsi | 8 + drivers/clk/bcm/clk-bcm2835.c | 284 ++++++++++++++++++++++++-- drivers/cpufreq/Kconfig.arm | 8 + drivers/cpufreq/Makefile | 1 + drivers/cpufreq/raspberrypi-cpufreq.c | 83 ++++++++ 5 files changed, 366 insertions(+), 18 deletions(-) create mode 100644 drivers/cpufreq/raspberrypi-cpufreq.c -- 2.21.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2019-05-20 10:47 UTC|newest] Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-20 10:47 Nicolas Saenz Julienne [this message] 2019-05-20 10:47 ` [RFC v2 0/5] cpufreq support for the Raspberry Pi Nicolas Saenz Julienne 2019-05-20 10:47 ` [RFC v2 1/5] clk: bcm2835: set CLK_GET_RATE_NOCACHE on CPU clocks Nicolas Saenz Julienne 2019-05-20 10:47 ` Nicolas Saenz Julienne 2019-05-20 11:42 ` Stefan Wahren 2019-05-20 11:42 ` Stefan Wahren 2019-05-20 10:47 ` [RFC v2 2/5] clk: bcm2835: set pllb_arm divisor as readonly Nicolas Saenz Julienne 2019-05-20 10:47 ` Nicolas Saenz Julienne 2019-05-20 11:43 ` Stefan Wahren 2019-05-20 11:43 ` Stefan Wahren 2019-05-20 10:47 ` [RFC v2 3/5] clk: bcm2835: use firmware interface to update pllb Nicolas Saenz Julienne 2019-05-20 10:47 ` Nicolas Saenz Julienne 2019-05-20 12:11 ` Stefan Wahren 2019-05-20 12:11 ` Stefan Wahren 2019-05-20 12:14 ` Stefan Wahren 2019-05-20 12:14 ` Stefan Wahren 2019-05-21 12:40 ` Stefan Wahren 2019-05-21 12:40 ` Stefan Wahren 2019-05-21 15:47 ` Nicolas Saenz Julienne 2019-05-21 15:47 ` Nicolas Saenz Julienne 2019-05-21 21:43 ` Stefan Wahren 2019-05-21 21:43 ` Stefan Wahren 2019-05-23 8:51 ` Nicolas Saenz Julienne 2019-05-23 8:51 ` Nicolas Saenz Julienne 2019-05-20 12:43 ` Oliver Neukum 2019-05-20 12:43 ` Oliver Neukum 2019-05-21 11:39 ` Nicolas Saenz Julienne 2019-05-21 11:39 ` Nicolas Saenz Julienne 2019-05-21 12:14 ` Petr Tesarik 2019-05-21 12:14 ` Petr Tesarik 2019-05-21 12:18 ` Nicolas Saenz Julienne 2019-05-21 12:18 ` Nicolas Saenz Julienne 2019-05-20 10:47 ` [RFC v2 4/5] dts: bcm2837: add per-cpu clock devices Nicolas Saenz Julienne 2019-05-20 10:47 ` Nicolas Saenz Julienne 2019-05-20 12:19 ` Stefan Wahren 2019-05-20 12:19 ` Stefan Wahren 2019-05-20 12:19 ` Stefan Wahren 2019-05-21 11:40 ` Nicolas Saenz Julienne 2019-05-21 11:40 ` Nicolas Saenz Julienne 2019-05-20 10:47 ` [RFC v2 5/5] cpufreq: add driver for Raspbery Pi Nicolas Saenz Julienne 2019-05-20 10:47 ` Nicolas Saenz Julienne 2019-05-20 10:51 ` Viresh Kumar 2019-05-20 10:51 ` Viresh Kumar 2019-05-20 12:30 ` Stefan Wahren 2019-05-20 12:30 ` Stefan Wahren 2019-05-20 10:51 ` [RFC v2 0/5] cpufreq support for the Raspberry Pi Viresh Kumar 2019-05-20 10:51 ` Viresh Kumar 2019-05-21 12:02 ` Nicolas Saenz Julienne 2019-05-21 12:02 ` Nicolas Saenz Julienne
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190520104708.11980-1-nsaenzjulienne@suse.de \ --to=nsaenzjulienne@suse.de \ --cc=bcm-kernel-feedback-list@broadcom.com \ --cc=devicetree@vger.kernel.org \ --cc=eric@anholt.net \ --cc=f.fainelli@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-clk@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-rpi-kernel@lists.infradead.org \ --cc=mbrugger@suse.de \ --cc=mturquette@baylibre.com \ --cc=ptesarik@suse.com \ --cc=rjw@rjwysocki.net \ --cc=sboyd@kernel.org \ --cc=ssuloev@orpaltech.com \ --cc=stefan.wahren@i2se.com \ --cc=viresh.kumar@linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.