Compare commits

...

4 Commits

Author SHA1 Message Date
Phil Elwell
3946b863ff Revert "clk: bcm: rpi: Turn firmware clock on/off when preparing/unpreparing"
See: https://github.com/raspberrypi/linux/issues/715

This reverts commit 919d6924ae.
2025-11-25 15:12:58 +00:00
Phil Elwell
a6e4124d55 Revert "clk: bcm: rpi: Maximize V3D clock"
See: https://github.com/raspberrypi/linux/issues/7155

This reverts commit 6526402b9b.
2025-11-25 15:08:48 +00:00
JinShil
2273e7b798 configs: Add CONFIG_INPUT_PWM_BEEPER=m
Added CONFIG_INPUT_PWM_BEEPR=m for proper integration of audible feedback devices.
2025-11-25 14:09:35 +00:00
Nick Hollinghurst
5f21287ef3 overlays: vc4-kms-v3d-pi5 parameter "composite" no longer disables HDMI
Previously, if an HDMI display was connected at boot time when composite
was enabled, the firmware FB would get "stuck" and a login console would
not appear on either HDMI or composite.

With the change, a console will now appear, typically (invariably?) on
HDMI (just as happens with HDMI + DPI). This may be helpful when booting
to CLI when composite was enabled accidentally and cannot be viewed.

The old behaviour can be reinstated by adding the "nohdmi" option.

Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
2025-11-25 13:44:44 +00:00
8 changed files with 10 additions and 69 deletions

View File

@@ -5827,8 +5827,8 @@ Params: cma-512 CMA is 512MB
audio1 Enable or disable audio over HDMI1 (default
"on")
noaudio Disable all HDMI audio (default "off")
composite Enable the composite output (disables all other
outputs)
composite Enable the composite output (default "off")
N.B. Disables all other outputs on a Pi 4.
nohdmi Disable both HDMI 0 & 1 outputs
nohdmi0 Disable HDMI 0 output
nohdmi1 Disable HDMI 1 output

View File

@@ -134,13 +134,7 @@
audio = <0>,"!14";
audio1 = <0>,"!15";
noaudio = <0>,"=14", <0>,"=15";
composite = <0>, "!3",
<0>, "!4",
<0>, "!5",
<0>, "!6",
<0>, "!10",
<0>, "!11",
<&frag13>, "status";
composite = <&frag13>, "status";
nohdmi0 = <0>, "-3-5-10";
nohdmi1 = <0>, "-4-6-11";
nohdmi = <0>, "-3-4-5-6-10-11";

View File

@@ -644,6 +644,7 @@ CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_CMA3000=m

View File

@@ -638,6 +638,7 @@ CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_CMA3000=m

View File

@@ -713,6 +713,7 @@ CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_CMA3000=m

View File

@@ -713,6 +713,7 @@ CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_CMA3000=m

View File

@@ -716,6 +716,7 @@ CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_YEALINK=m
CONFIG_INPUT_CM109=m
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_PWM_BEEPER=m
CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
CONFIG_INPUT_ADXL34X=m
CONFIG_INPUT_CMA3000=m

View File

@@ -68,8 +68,6 @@ struct raspberrypi_clk_variant {
char *clkdev;
unsigned long min_rate;
bool minimize;
bool maximize;
u32 flags;
};
static struct raspberrypi_clk_variant
@@ -77,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,
@@ -93,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,
@@ -124,29 +115,18 @@ 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,
.maximize = true,
.minimize = true,
},
[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,
@@ -155,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,
@@ -286,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,
@@ -350,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;
@@ -387,9 +332,6 @@ static struct clk_hw *raspberrypi_clk_register(struct raspberrypi_clk *rpi,
}
}
if (variant->maximize)
variant->min_rate = max_rate;
if (variant->min_rate) {
unsigned long rate;