1 From d9b492679a107e535cfd39ee00bd2ce6f12089e0 Mon Sep 17 00:00:00 2001
2 From: Maxime Ripard <maxime@cerno.tech>
3 Date: Tue, 26 May 2020 14:23:04 +0200
4 Subject: [PATCH] clk: bcm: rpi: Add an enum for the firmware clocks
6 While the firmware allows us to discover the available clocks, we need to
7 discriminate those clocks to only register the ones meaningful to Linux.
8 The firmware also doesn't provide a clock name, so having a list of the ID
9 will help us to give clocks a proper name later on.
11 Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
12 Signed-off-by: Maxime Ripard <maxime@cerno.tech>
14 drivers/clk/bcm/clk-raspberrypi.c | 30 ++++++++++++++++++++++++------
15 1 file changed, 24 insertions(+), 6 deletions(-)
17 --- a/drivers/clk/bcm/clk-raspberrypi.c
18 +++ b/drivers/clk/bcm/clk-raspberrypi.c
21 #include <soc/bcm2835/raspberrypi-firmware.h>
23 -#define RPI_FIRMWARE_ARM_CLK_ID 0x00000003
24 +enum rpi_firmware_clk_id {
25 + RPI_FIRMWARE_EMMC_CLK_ID = 1,
26 + RPI_FIRMWARE_UART_CLK_ID,
27 + RPI_FIRMWARE_ARM_CLK_ID,
28 + RPI_FIRMWARE_CORE_CLK_ID,
29 + RPI_FIRMWARE_V3D_CLK_ID,
30 + RPI_FIRMWARE_H264_CLK_ID,
31 + RPI_FIRMWARE_ISP_CLK_ID,
32 + RPI_FIRMWARE_SDRAM_CLK_ID,
33 + RPI_FIRMWARE_PIXEL_CLK_ID,
34 + RPI_FIRMWARE_PWM_CLK_ID,
35 + RPI_FIRMWARE_HEVC_CLK_ID,
36 + RPI_FIRMWARE_EMMC2_CLK_ID,
37 + RPI_FIRMWARE_M2MC_CLK_ID,
38 + RPI_FIRMWARE_PIXEL_BVB_CLK_ID,
39 + RPI_FIRMWARE_NUM_CLK_ID,
42 #define RPI_FIRMWARE_STATE_ENABLE_BIT BIT(0)
43 #define RPI_FIRMWARE_STATE_WAIT_BIT BIT(1)
46 #define A2W_PLL_FRAC_BITS 20
48 -#define NUM_FW_CLKS 16
50 struct raspberrypi_clk {
52 struct rpi_firmware *firmware;
53 @@ -350,12 +364,15 @@ static int raspberrypi_discover_clocks(s
54 struct rpi_firmware_get_clocks_response *clks;
57 - clks = devm_kcalloc(rpi->dev, sizeof(*clks), NUM_FW_CLKS, GFP_KERNEL);
58 + clks = devm_kcalloc(rpi->dev,
59 + sizeof(*clks), RPI_FIRMWARE_NUM_CLK_ID,
64 ret = rpi_firmware_property(rpi->firmware, RPI_FIRMWARE_GET_CLOCKS,
65 - clks, sizeof(*clks) * NUM_FW_CLKS);
67 + sizeof(*clks) * RPI_FIRMWARE_NUM_CLK_ID);
71 @@ -411,7 +428,8 @@ static int raspberrypi_clk_probe(struct
72 rpi->firmware = firmware;
73 platform_set_drvdata(pdev, rpi);
75 - clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, NUM_FW_CLKS),
76 + clk_data = devm_kzalloc(dev, struct_size(clk_data, hws,
77 + RPI_FIRMWARE_NUM_CLK_ID),