firmware-utils: bump to git HEAD
[openwrt/staging/ldir.git] / target / linux / bcm27xx / patches-5.4 / 950-0778-clk-bcm-rpi-Add-an-enum-for-the-firmware-clocks.patch
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
5
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.
10
11 Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
12 Signed-off-by: Maxime Ripard <maxime@cerno.tech>
13 ---
14 drivers/clk/bcm/clk-raspberrypi.c | 30 ++++++++++++++++++++++++------
15 1 file changed, 24 insertions(+), 6 deletions(-)
16
17 --- a/drivers/clk/bcm/clk-raspberrypi.c
18 +++ b/drivers/clk/bcm/clk-raspberrypi.c
19 @@ -18,7 +18,23 @@
20
21 #include <soc/bcm2835/raspberrypi-firmware.h>
22
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,
40 +};
41
42 #define RPI_FIRMWARE_STATE_ENABLE_BIT BIT(0)
43 #define RPI_FIRMWARE_STATE_WAIT_BIT BIT(1)
44 @@ -31,8 +47,6 @@
45
46 #define A2W_PLL_FRAC_BITS 20
47
48 -#define NUM_FW_CLKS 16
49 -
50 struct raspberrypi_clk {
51 struct device *dev;
52 struct rpi_firmware *firmware;
53 @@ -350,12 +364,15 @@ static int raspberrypi_discover_clocks(s
54 struct rpi_firmware_get_clocks_response *clks;
55 int ret;
56
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,
60 + GFP_KERNEL);
61 if (!clks)
62 return -ENOMEM;
63
64 ret = rpi_firmware_property(rpi->firmware, RPI_FIRMWARE_GET_CLOCKS,
65 - clks, sizeof(*clks) * NUM_FW_CLKS);
66 + clks,
67 + sizeof(*clks) * RPI_FIRMWARE_NUM_CLK_ID);
68 if (ret)
69 return ret;
70
71 @@ -411,7 +428,8 @@ static int raspberrypi_clk_probe(struct
72 rpi->firmware = firmware;
73 platform_set_drvdata(pdev, rpi);
74
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),
78 GFP_KERNEL);
79 if (!clk_data)
80 return -ENOMEM;