From 3946b863ffc40a35f35e89a823ab995dd71616bb Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Tue, 25 Nov 2025 15:12:58 +0000 Subject: [PATCH] Revert "clk: bcm: rpi: Turn firmware clock on/off when preparing/unpreparing" See: https://github.com/raspberrypi/linux/issues/715 This reverts commit 919d6924ae9b4bcc9cb1d5ce4b78d5b92665d630. --- drivers/clk/bcm/clk-raspberrypi.c | 56 +------------------------------ 1 file changed, 1 insertion(+), 55 deletions(-) diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c index 70acfa68827d..166d0bec3803 100644 --- a/drivers/clk/bcm/clk-raspberrypi.c +++ b/drivers/clk/bcm/clk-raspberrypi.c @@ -68,7 +68,6 @@ struct raspberrypi_clk_variant { char *clkdev; unsigned long min_rate; bool minimize; - u32 flags; }; static struct raspberrypi_clk_variant @@ -76,7 +75,6 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = { [RPI_FIRMWARE_ARM_CLK_ID] = { .export = true, .clkdev = "cpu0", - .flags = CLK_IS_CRITICAL, }, [RPI_FIRMWARE_CORE_CLK_ID] = { .export = true, @@ -92,12 +90,6 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = { * always use the minimum the drivers will let us. */ .minimize = true, - - /* - * It should never be disabled as it drives the bus for - * everything else. - */ - .flags = CLK_IS_CRITICAL, }, [RPI_FIRMWARE_M2MC_CLK_ID] = { .export = true, @@ -123,15 +115,6 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = { * drivers will let us. */ .minimize = true, - - /* - * As mentioned above, this clock is disabled during boot, - * the firmware will skip the HSM initialization, resulting - * in a bus lockup. Therefore, make sure it's enabled - * during boot, but after it, it can be enabled/disabled - * by the driver. - */ - .flags = CLK_IGNORE_UNUSED, }, [RPI_FIRMWARE_V3D_CLK_ID] = { .export = true, @@ -140,12 +123,10 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = { [RPI_FIRMWARE_PIXEL_CLK_ID] = { .export = true, .minimize = true, - .flags = CLK_IS_CRITICAL, }, [RPI_FIRMWARE_HEVC_CLK_ID] = { .export = true, .minimize = true, - .flags = CLK_IS_CRITICAL, }, [RPI_FIRMWARE_ISP_CLK_ID] = { .export = true, @@ -154,7 +135,6 @@ raspberrypi_clk_variants[RPI_FIRMWARE_NUM_CLK_ID] = { [RPI_FIRMWARE_PIXEL_BVB_CLK_ID] = { .export = true, .minimize = true, - .flags = CLK_IS_CRITICAL, }, [RPI_FIRMWARE_VEC_CLK_ID] = { .export = true, @@ -285,41 +265,7 @@ static int raspberrypi_fw_dumb_determine_rate(struct clk_hw *hw, return 0; } -static int raspberrypi_fw_prepare(struct clk_hw *hw) -{ - const struct raspberrypi_clk_data *data = clk_hw_to_data(hw); - struct raspberrypi_clk *rpi = data->rpi; - u32 state = RPI_FIRMWARE_STATE_ENABLE_BIT; - int ret; - - ret = raspberrypi_clock_property(rpi->firmware, data, - RPI_FIRMWARE_SET_CLOCK_STATE, &state); - if (ret) - dev_err_ratelimited(rpi->dev, - "Failed to set clock %s state to on: %d\n", - clk_hw_get_name(hw), ret); - - return ret; -} - -static void raspberrypi_fw_unprepare(struct clk_hw *hw) -{ - const struct raspberrypi_clk_data *data = clk_hw_to_data(hw); - struct raspberrypi_clk *rpi = data->rpi; - u32 state = 0; - int ret; - - ret = raspberrypi_clock_property(rpi->firmware, data, - RPI_FIRMWARE_SET_CLOCK_STATE, &state); - if (ret) - dev_err_ratelimited(rpi->dev, - "Failed to set clock %s state to off: %d\n", - clk_hw_get_name(hw), ret); -} - static const struct clk_ops raspberrypi_firmware_clk_ops = { - .prepare = raspberrypi_fw_prepare, - .unprepare = raspberrypi_fw_unprepare, .is_prepared = raspberrypi_fw_is_prepared, .recalc_rate = raspberrypi_fw_get_rate, .determine_rate = raspberrypi_fw_dumb_determine_rate, @@ -349,7 +295,7 @@ static struct clk_hw *raspberrypi_clk_register(struct raspberrypi_clk *rpi, if (!init.name) return ERR_PTR(-ENOMEM); init.ops = &raspberrypi_firmware_clk_ops; - init.flags = variant->flags | CLK_GET_RATE_NOCACHE; + init.flags = CLK_GET_RATE_NOCACHE; data->hw.init = &init;