OpenCloudOS-Kernel/drivers/clk/bcm
Maxime Ripard 93d2725aff clk: bcm: rpi: Discover the firmware clocks
The RaspberryPi4 firmware actually exposes more clocks than are currently
handled by the driver and we will need to change some of them directly
based on the pixel rate for the display related clocks, or the load for the
GPU.

Since the firmware implements DVFS, this rate change can have a number of
side-effects, including adjusting the various PLL voltages or the PLL
parents. The firmware also implements thermal throttling, so even some
thermal pressure can change those parameters behind Linux back.

DVFS is currently implemented on the arm, core, h264, v3d, isp and hevc
clocks, so updating any of them using the MMIO driver (and thus behind the
firmware's back) can lead to troubles, the arm clock obviously being the
most problematic.

In order to make Linux play as nice as possible with those constraints, it
makes sense to rely on the firmware clocks as much as possible. However,
the firmware doesn't seem to provide some equivalents to their MMIO
counterparts, so we can't really replace that driver entirely.

Fortunately, the firmware has an interface to discover the clocks it
exposes.

Let's use it to discover, register the clocks in the clocks framework and
then expose them through the device tree for consumers to use them.

Cc: Michael Turquette <mturquette@baylibre.com>
Cc: Stephen Boyd <sboyd@kernel.org>
Cc: linux-clk@vger.kernel.org
Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Reviewed-by: Stephen Boyd <sboyd@kernel.org>
Tested-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/438d73962741a8c5f7c689319b7443b930a87fde.1592210452.git-series.maxime@cerno.tech
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
2020-06-19 17:21:17 -07:00
..
Kconfig clk: bcm: Add BCM2711 DVP driver 2020-06-19 17:13:53 -07:00
Makefile clk: bcm: Add BCM2711 DVP driver 2020-06-19 17:13:53 -07:00
clk-bcm63xx-gate.c clk: bcm63xx-gate: switch to dt-bindings definitions 2020-06-19 17:03:24 -07:00
clk-bcm63xx.c clk: bcm: Add BCM63138 clock support 2015-11-20 15:46:27 -08:00
clk-bcm281xx.c clk: bcm281xx: move compatible string definitions 2014-04-30 11:51:39 -07:00
clk-bcm2711-dvp.c clk: bcm: Add BCM2711 DVP driver 2020-06-19 17:13:53 -07:00
clk-bcm2835-aux.c clk: bcm2835: use devm_platform_ioremap_resource() to simplify code 2019-10-16 16:16:50 -07:00
clk-bcm2835.c clk: bcm2835: Constify struct debugfs_reg32 2020-05-27 00:08:31 -07:00
clk-bcm21664.c clk: bcm21664: use common clock framework 2014-04-30 11:51:44 -07:00
clk-bcm53573-ilp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
clk-cygnus.c clk: iproc: Allow iproc pll to runtime calculate vco parameters 2017-12-28 14:53:33 -08:00
clk-hr2.c clk: bcm: Add Broadcom Hurricane 2 clock support 2017-10-12 11:31:46 -07:00
clk-iproc-armpll.c clk: bcm: iproc: Migrate to clk_hw based registration and OF APIs 2016-06-30 12:26:45 -07:00
clk-iproc-asiu.c treewide: Use struct_size() for kmalloc()-family 2018-06-06 11:15:43 -07:00
clk-iproc-pll.c treewide: Use struct_size() for kmalloc()-family 2018-06-06 11:15:43 -07:00
clk-iproc.h clk: iproc: Allow iproc pll to runtime calculate vco parameters 2017-12-28 14:53:33 -08:00
clk-kona-setup.c clk: Convert to using %pOFn instead of device_node.name 2018-08-30 09:50:20 -07:00
clk-kona.c clk: Remove io.h from clk-provider.h 2019-05-15 13:21:37 -07:00
clk-kona.h clk: bcm: kona: Migrate to clk_hw based registration and OF APIs 2016-08-24 16:06:18 -07:00
clk-ns2.c clk: ns2: Correct SDIO bits 2017-04-19 09:50:39 -07:00
clk-nsp.c clk: iproc: Split off dig_filter 2015-10-21 17:02:57 -07:00
clk-raspberrypi.c clk: bcm: rpi: Discover the firmware clocks 2020-06-19 17:21:17 -07:00
clk-sr.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 459 2019-06-19 17:09:09 +02:00