Message ID | c56fb0a912fe254416ed5a247e6fb6d79fb604bc.1590594293.git-series.maxime@cerno.tech (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | clk: bcm: rpi: Add support for BCM2711 firmware clocks | expand |
On Wed, 2020-05-27 at 17:45 +0200, Maxime Ripard wrote: > While the firmware allows us to discover the available clocks, we need to > discriminate those clocks to only register the ones meaningful to Linux. > The firmware also doesn't provide a clock name, so having a list of the ID > will help us to give clocks a proper name later on. > > Signed-off-by: Maxime Ripard <maxime@cerno.tech> > --- > drivers/clk/bcm/clk-raspberrypi.c | 23 +++++++++++++++++++---- > 1 file changed, 19 insertions(+), 4 deletions(-) > > diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk- > raspberrypi.c > index 5f4e2d49432f..eebd16040f8a 100644 > --- a/drivers/clk/bcm/clk-raspberrypi.c > +++ b/drivers/clk/bcm/clk-raspberrypi.c > @@ -18,7 +18,23 @@ > > #include <soc/bcm2835/raspberrypi-firmware.h> > > -#define RPI_FIRMWARE_ARM_CLK_ID 0x00000003 > +enum rpi_firmware_clk_id { > + RPI_FIRMWARE_EMMC_CLK_ID = 1, > + RPI_FIRMWARE_UART_CLK_ID, > + RPI_FIRMWARE_ARM_CLK_ID, > + RPI_FIRMWARE_CORE_CLK_ID, > + RPI_FIRMWARE_V3D_CLK_ID, > + RPI_FIRMWARE_H264_CLK_ID, > + RPI_FIRMWARE_ISP_CLK_ID, > + RPI_FIRMWARE_SDRAM_CLK_ID, > + RPI_FIRMWARE_PIXEL_CLK_ID, > + RPI_FIRMWARE_PWM_CLK_ID, > + RPI_FIRMWARE_HEVC_CLK_ID, > + RPI_FIRMWARE_EMMC2_CLK_ID, > + RPI_FIRMWARE_M2MC_CLK_ID, > + RPI_FIRMWARE_PIXEL_BVB_CLK_ID, > + RPI_FIRMWARE_NUM_CLK_ID, > +}; > > #define RPI_FIRMWARE_STATE_ENABLE_BIT BIT(0) > #define RPI_FIRMWARE_STATE_WAIT_BIT BIT(1) > @@ -31,8 +47,6 @@ > > #define A2W_PLL_FRAC_BITS 20 > > -#define NUM_FW_CLKS 16 > - > struct raspberrypi_clk { > struct device *dev; > struct rpi_firmware *firmware; > @@ -320,7 +334,8 @@ static int raspberrypi_clk_probe(struct platform_device > *pdev) > rpi->firmware = firmware; > platform_set_drvdata(pdev, rpi); > > - clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, NUM_FW_CLKS), > + clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, > + RPI_FIRMWARE_NUM_CLK_ID), nit: you're allocating one structure too many right? Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Regards, Nicolas
Hi Maxime, On Fri, 2020-06-05 at 14:04 +0200, Nicolas Saenz Julienne wrote: > On Wed, 2020-05-27 at 17:45 +0200, Maxime Ripard wrote: > > While the firmware allows us to discover the available clocks, we need to > > discriminate those clocks to only register the ones meaningful to Linux. > > The firmware also doesn't provide a clock name, so having a list of the ID > > will help us to give clocks a proper name later on. > > > > Signed-off-by: Maxime Ripard <maxime@cerno.tech> > > --- > > drivers/clk/bcm/clk-raspberrypi.c | 23 +++++++++++++++++++---- > > 1 file changed, 19 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk- > > raspberrypi.c > > index 5f4e2d49432f..eebd16040f8a 100644 > > --- a/drivers/clk/bcm/clk-raspberrypi.c > > +++ b/drivers/clk/bcm/clk-raspberrypi.c > > @@ -18,7 +18,23 @@ > > > > #include <soc/bcm2835/raspberrypi-firmware.h> > > > > -#define RPI_FIRMWARE_ARM_CLK_ID 0x00000003 > > +enum rpi_firmware_clk_id { > > + RPI_FIRMWARE_EMMC_CLK_ID = 1, > > + RPI_FIRMWARE_UART_CLK_ID, > > + RPI_FIRMWARE_ARM_CLK_ID, > > + RPI_FIRMWARE_CORE_CLK_ID, > > + RPI_FIRMWARE_V3D_CLK_ID, > > + RPI_FIRMWARE_H264_CLK_ID, > > + RPI_FIRMWARE_ISP_CLK_ID, > > + RPI_FIRMWARE_SDRAM_CLK_ID, > > + RPI_FIRMWARE_PIXEL_CLK_ID, > > + RPI_FIRMWARE_PWM_CLK_ID, > > + RPI_FIRMWARE_HEVC_CLK_ID, > > + RPI_FIRMWARE_EMMC2_CLK_ID, > > + RPI_FIRMWARE_M2MC_CLK_ID, > > + RPI_FIRMWARE_PIXEL_BVB_CLK_ID, > > + RPI_FIRMWARE_NUM_CLK_ID, > > +}; > > > > #define RPI_FIRMWARE_STATE_ENABLE_BIT BIT(0) > > #define RPI_FIRMWARE_STATE_WAIT_BIT BIT(1) > > @@ -31,8 +47,6 @@ > > > > #define A2W_PLL_FRAC_BITS 20 > > > > -#define NUM_FW_CLKS 16 > > - > > struct raspberrypi_clk { > > struct device *dev; > > struct rpi_firmware *firmware; > > @@ -320,7 +334,8 @@ static int raspberrypi_clk_probe(struct platform_device > > *pdev) > > rpi->firmware = firmware; > > platform_set_drvdata(pdev, rpi); > > > > - clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, NUM_FW_CLKS), > > + clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, > > + RPI_FIRMWARE_NUM_CLK_ID), > > nit: you're allocating one structure too many right? Nevermind this comment, as pointed out privately by Phil Elwell, I forgot the firmware clk description structure starts at 0. So we need to make space for that. It would maybe make sense to add RPI_FIRMWARE_RESERVED_CLK_ID above the EMMC clk entry. Although it's just a suggestion. > Acked-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> > > Regards, > Nicolas >
diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c index 5f4e2d49432f..eebd16040f8a 100644 --- a/drivers/clk/bcm/clk-raspberrypi.c +++ b/drivers/clk/bcm/clk-raspberrypi.c @@ -18,7 +18,23 @@ #include <soc/bcm2835/raspberrypi-firmware.h> -#define RPI_FIRMWARE_ARM_CLK_ID 0x00000003 +enum rpi_firmware_clk_id { + RPI_FIRMWARE_EMMC_CLK_ID = 1, + RPI_FIRMWARE_UART_CLK_ID, + RPI_FIRMWARE_ARM_CLK_ID, + RPI_FIRMWARE_CORE_CLK_ID, + RPI_FIRMWARE_V3D_CLK_ID, + RPI_FIRMWARE_H264_CLK_ID, + RPI_FIRMWARE_ISP_CLK_ID, + RPI_FIRMWARE_SDRAM_CLK_ID, + RPI_FIRMWARE_PIXEL_CLK_ID, + RPI_FIRMWARE_PWM_CLK_ID, + RPI_FIRMWARE_HEVC_CLK_ID, + RPI_FIRMWARE_EMMC2_CLK_ID, + RPI_FIRMWARE_M2MC_CLK_ID, + RPI_FIRMWARE_PIXEL_BVB_CLK_ID, + RPI_FIRMWARE_NUM_CLK_ID, +}; #define RPI_FIRMWARE_STATE_ENABLE_BIT BIT(0) #define RPI_FIRMWARE_STATE_WAIT_BIT BIT(1) @@ -31,8 +47,6 @@ #define A2W_PLL_FRAC_BITS 20 -#define NUM_FW_CLKS 16 - struct raspberrypi_clk { struct device *dev; struct rpi_firmware *firmware; @@ -320,7 +334,8 @@ static int raspberrypi_clk_probe(struct platform_device *pdev) rpi->firmware = firmware; platform_set_drvdata(pdev, rpi); - clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, NUM_FW_CLKS), + clk_data = devm_kzalloc(dev, struct_size(clk_data, hws, + RPI_FIRMWARE_NUM_CLK_ID), GFP_KERNEL); if (!clk_data) return -ENOMEM;
While the firmware allows us to discover the available clocks, we need to discriminate those clocks to only register the ones meaningful to Linux. The firmware also doesn't provide a clock name, so having a list of the ID will help us to give clocks a proper name later on. Signed-off-by: Maxime Ripard <maxime@cerno.tech> --- drivers/clk/bcm/clk-raspberrypi.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)