Skip to content

Enanle PINCTRL_SINGLE for bcm2712_defconfig#7440

Draft
Cyanoxygen wants to merge 675 commits into
raspberrypi:rpi-7.0.yfrom
Cyanoxygen:cyan/rpi-7.1.y
Draft

Enanle PINCTRL_SINGLE for bcm2712_defconfig#7440
Cyanoxygen wants to merge 675 commits into
raspberrypi:rpi-7.0.yfrom
Cyanoxygen:cyan/rpi-7.1.y

Conversation

@Cyanoxygen

Copy link
Copy Markdown

Raspberry Pi 5B will not boot from SD card without PINCTRL_SINGLE since Linux 7.0:

[ 17.888687] platform 107d50c000.serial: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/bt_shutdown_pins
[ 17.888693] platform pwr_button: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/pwr_button_pins
[ 17.888697] platform 107d004000.spi: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/spi10_cs_gpio1
[ 17.888699] platform wl-on-reg: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/wl_on_pins
[ 17.888701] platform 1000fff000.mmc: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d510700/emmc_aon_cd_pins
[ 17.888704] platform 1001100000.mmc: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/sdio2_30_pins
[ 30.688427] vcc-sd: disabling

6by9 and others added 30 commits June 9, 2026 14:49
The TC358762 bridge and panel decodes the mode differently on
DSI0 to DSI1 for no obvious reason, and results in a shift off
the screen.
Whilst it would be possible to change the compatible used for
the panel, that then messes up Pi5.

As it appears to be restricted to vc4 DSI0, fix up the mode
in vc4_dsi.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Some DSI peripheral drivers wish to send commands in the
post_disable or panel unprepare callback. These are called
after the DSI host's disable call, but before the host's
post_disable if pre_enable_prev_first is set.

Don't reset the block until post_disable to allow these
commands to be sent.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
The DSI block appears to be able to come up stuck in a condition where
it leaves the lanes in HS mode or just jabbering. This stops LP
transfers from completing as there is no LP time available. This is
signalled via the LP1 contention error.

Enabling video briefly clears that condition, so if we detect the
error condition, enable video mode and then retry.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Similar to the ch7006 and nouveau drivers, introduce a "tv_mode" module
parameter that allow setting the TV norm by specifying vc4.tv_norm= on
the kernel command line.

If that is not specified, try inferring one of the most popular norms
(PAL or NTSC) from the video mode specified on the command line. On
Raspberry Pis, this causes the most common cases of the sdtv_mode
setting in config.txt to be respected.

Signed-off-by: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>

drm/vc4: Do not reset tv mode as this is already handled by framework

In vc4_vec_connector_reset, the tv mode is already reset to the
property default by drm_atomic_helper_connector_tv_reset, so there
is no need for a local fixup to potentially some other default.

Fixes: 96922af ("drm/vc4: Allow setting the TV norm via module parameter")
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
With the command line parser now providing the information about
the tv mode, use that as the preferred choice for initialising the
default of the tv_mode property.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
See: https://forum.libreelec.tv/thread/24783-tv-avr-turns-back-on-right-after-turning-them-off

While the kernel provides a :D flag for assuming device is connected,
it doesn't stop this function from being called and generating a cec_phys_addr_invalidate
message when hotplug is deasserted.

That message provokes a flurry of CEC messages which for many users results in the TV
switching back on again and it's very hard to get it to stay switched off.

It seems to only occur with an AVR and TV connected but has been observed across a
number of manufacturers.

The issue started with raspberrypi#4371
and this provides an optional way of getting back the old behaviour

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
The intention of the vc4.force_hotplug setting is to
ignore hotplug completely.

It can be used when a display toggles hotplug when
switching AV inputs, going into standby or changing a
KVM switch, and some side effect of that is unwanted.

It turns out while vc4.force_hotplug currently makes
hotplug always read as asserted, that isn't enough to
stop drm doing lots of stuff, including re-reading
the edid.

An example of what drm does with a hotplug deasert/assert
and vc4.force_hotplug=1 currently is:

https://paste.debian.net/hidden/dc07434b/

That is unwanted. Lets ignore the hotplug interrupt
completely so drm is blissfully unaware of the hotplug change.

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
There appears to be a requirement for some devices
(I'm testing with a 8K VRROOM 40Gbps HDMI switch)
for a measable delay between removing the hdmi phy output from
the old mode, to enabling the hdmi phy output for the new mode.

Without the delay, a mode switch has a small change of getting a permanent
'no signal', which requires a subsequent mode switch or a unplug/replug
to redetect.

Switching between 4kp24/25/30 modes fails about 5% of time in my testing.

Add a delay to make it impossible to switch faster than this.

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
The body of this function was missing so we don't reset the phy
when disabling it.

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
The current reset code doesn't actually stop the hdmi output.
That makes it difficult for displays to handle a mode set.

Powering down the PLL does actually remove the hdmi signal
and makes mode sets more reliable

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
There are no MEDIA_BUS_FMT_* defines for GRB or BRG, and adding
them is a pain.

Add a DT override to allow setting the order.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Seeing as the HVS can be configured with regard the scaling filter,
and DRM now supports selecting scaling filters at a per CRTC or
per plane level, we can implement it.

Default remains as the Mitchell/Netravali filter, but nearest
neighbour is now also implemented.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
The documentation says that the TPZ filter can not upscale,
and requesting a scaling factor > 1:1 will output the original
image in the top left, and repeat the right/bottom most pixels
thereafter.
That fits perfectly with upscaling a 1x1 image which is done
a fair amount by some compositors to give solid colour, and it
saves a large amount of LBM (TPZ is based on src size, whilst
PPF is based on dest size).

Select TPZ filter for images with source rectangle <=1.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
The register to enable/disable background fill was being set
from atomic flush, however that will be applied immediately and
can be a while before the vblank. If it was required for the
current frame but not for the next one, that can result in
corruption for part of the current frame.

Store the state in vc4_hvs, and update it on vblank.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
The HVS can accept an arbitrary number of planes, provided
that the overall pixel read load is within limits, and
the display list can fit into the dlist memory.

Now that DRM will support 64 planes per device, increase
the number of overlay planes from 16 to 48 so that the
dlist complexity can be increased (eg 4x4 video wall on
each of 3 displays).

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Instead of having 48 generic overlay planes, assign 32 to the
writeback connector so that there is no ambiguity in wlroots
when trying to find a plane for composition using the writeback
connector vs display.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
The transposer/writeback connector should be running with a
lower priority, so shouldn't be factored into the load
calculations.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
As the writeback connector doesn't have the same realtime
constraints of a live display, drop the panic priority for it.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
The txp block can implement transpose as it writes out the image
data, so expose that through the new connector rotation property.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm: vc4: txp: Do not allow 24bpp formats when transposing

The hardware doesn't support transposing to 24bpp (RGB888/BGR888)
formats. There's no way to advertise this through DRM, so block
it from atomic_check instead.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Currently, booting with no hdmi connected has:
pi@pi4:~ $ vcgencmd measure_clock hdmi pixel
frequency(9)=120010256
frequency(29)=74988280

After connecting hdmi we get:
pi@pi4:~ $ vcgencmd measure_clock hdmi pixel
frequency(9)=300005856
frequency(29)=149989744

and that persists after disconnecting hdmi

I can measure this on a power supply as 10mA@5.2V (52mW).

We should always remove clk_set_min_rate requests
when we no longer need them.

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Whilst BCM2712 does fix using odd horizontal timings, it doesn't
work with interlaced modes.

Drop the workaround for interlaced modes and revert to the same
behaviour as BCM2711.

raspberrypi#6281

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
This is a squash of all firmware-kms related patches from previous
branches, up to and including
"drm/vc4: Set the possible crtcs mask correctly for planes with FKMS"
plus a couple of minor fixups for the 5.9 branch.
Please refer to earlier branches for full history.

This patch includes work by Eric Anholt, James Hughes, Phil Elwell,
Dave Stevenson, Dom Cobley, and Jonathon Bell.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: Fixup firmware-kms after "drm/atomic: Pass the full state to CRTC atomic enable/disable"

Prototype for those calls changed, so amend fkms (which isn't
upstream) to match.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: Fixup fkms for API change

Atomic flush and check changed API, so fix up the downstream-only
FKMS driver.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: Make normalize_zpos conditional on using fkms

Eric's view was that there was no point in having zpos
support on vc4 as all the planes had the same functionality.

Can be later squashed into (and fixes):
drm/vc4: Add firmware-kms mode

Signed-off-by: Dom Cobley <popcornmix@gmail.com>

drm/vc4: FKMS: Change of Broadcast RGB mode needs a mode change

The Broadcast RGB (aka HDMI limited/full range) property is only
notified to the firmware on mode change, so this needs to be
signalled when set.

raspberrypi/firmware#1580

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

vc4/drv: Only notify firmware of display done with kms

fkms driver still wants firmware display to be active

Signed-off-by: Dom Cobley <popcornmix@gmail.com>

ydrm/vc4: fkms: Fix margin calculations for the right/bottom edges

The calculations clipped the right/bottom edge of the clipped
range based on the left/top margins.

raspberrypi#4447

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: fkms: Use new devm_rpi_firmware_get api

drm/kms: Add allow_fb_modifiers

Signed-off-by: Dom Cobley <popcornmix@gmail.com>

drm/vc4: Add async update support for cursor planes

Now that cursors are implemented as regular planes, all cursor
movements result in atomic updates. As the firmware-kms driver
doesn't support asynchronous updates, these are synchronous, which
limits the update rate to the screen refresh rate. Xorg seems unaware
of this (or at least of the effect of this), because if the mouse is
configured with a higher update rate than the screen then continuous
mouse movement results in an increasing backlog of mouse events -
cue extreme lag.

Add minimal support for asynchronous updates - limited to cursor
planes - to eliminate the lag.

See: raspberrypi#4971
     raspberrypi#4988

Signed-off-by: Phil Elwell <phil@raspberrypi.com>

drivers/gpu/drm/vc4: Add missing 32-bit RGB formats

The missing 32-bit per pixel ABGR and various "RGB with an X value"
formats are added. Change sent by Dave Stevenson.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>

drm: vc4: Fixup duplicated macro definition in vc4_firmware_kms

Both vc4_drv.h and vc4_firmware_kms.c had definitions for
to_vc4_crtc.

Rename the fkms one to make it unique, and drop the magic
define vc4_crtc vc4_kms_crtc
define to_vc4_crtc to_vc4_kms_crtc
that renamed half the variable and function names in a slightly
unexpected way.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: Fix FKMS for when the YUV chroma planes are different buffers

The code was assuming that it was a single buffer with offsets,
when kmstest uses separate buffers and 0 offsets for each plane.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: fkms: Rename plane related functions

The name collide with the Full KMS functions that are going to be made
public.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>

drm/vc4_fkms: Fix up interrupt handler for both 2835/2711 and 2712

2712 has switched from using the SMI peripheral to another interrupt
source for the vsync interrupt, so handle both sources cleanly.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm/vc4: fkms: No SMI abuse needed on BCM2712

Since we don't use the (absent) SMI block to create interrupts on
BCM2712, there's no need to map any registers.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Testing whether the VideoCore generation we want to mock is vc5 or vc4
worked so far, but will be difficult to extend to support BCM2712 (VC6).

Convert to a switch.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
The DRM device pointer and the DRM encoder pointer are redundant, since
the latter is attached to the former and we can just follow the
drm_encoder->dev pointer.

Let's remove the drm_device pointer argument.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Some tests will need to retrieve the output that was just allocated by
vc4_mock_atomic_add_output().

Instead of making them look them up in the DRM device, we can simply
make vc4_mock_atomic_add_output() return an error pointer that holds the
allocated output instead of the error code.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
The BCM2712 has a simpler pipeline that can only output to a writeback
connector and two HDMI controllers.

Let's allow our kunit tests to create a mock of that pipeline.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
The BCM2712 has a simpler pipeline than the BCM2711, and thus the muxing
requirements are different. Create some tests to make sure we get proper
muxing decisions.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
The current mock planes were just using the regular drm_plane_state,
while the driver expect struct vc4_plane_state that subclasses
drm_plane_state.

Hook the proper implementations of reset, duplicate_state, destroy and
atomic_check to create vc4_plane_state.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Some tests will need to find a plane to run a test on for a given CRTC.
Let's create a small helper to do that.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
mairacanal and others added 26 commits June 9, 2026 14:49
v3d_mmu_set_page_table() ends by calling v3d_mmu_flush_all() to flush the
MMU cache and clear the TLB after reprogramming V3D_MMU_PT_PA_BASE.
v3d_mmu_flush_all() is gated by pm_runtime_get_if_active(), which returns
0 unless runtime_status == RPM_ACTIVE.

v3d_mmu_set_page_table() is called from two paths that *know* V3D is
reachable, but where the runtime PM status might be wrong:

  1. v3d_power_resume(): the runtime resume callback itself, where
     runtime_status is RPM_RESUMING.

  2. v3d_reset(): called from the DRM scheduler timeout handler with the
     hung job's pm_runtime reference held, so RPM_ACTIVE, but here we
     don't need to take an extra reference for the duration of the flush
     either.

In the first case pm_runtime_get_if_active() returns 0, the flush is
silently skipped, and V3D resumes executing with whatever MMUC/TLB state
happened to survive the last reset. On BCM2711, this leaves stale
translations live across runtime PM cycles, manifesting as random GPU
hangs.

Split the actual flush sequence into a helper that does the writes
unconditionally, and have v3d_mmu_set_page_table() call it directly.

Fixes: 17af1d14deaf ("drm/v3d: Introduce Runtime Power Management")
Signed-off-by: Maíra Canal <mcanal@igalia.com>
v3d_clean_caches() starts the cache-clean sequence by writing
V3D_L2TCACTL_TMUWCF to V3D_CTL_L2TCACTL and then polling for that bit to
clear. It does not, however, check for an L2T flush (L2TFLS) that may
still be in flight from a previous operation.

On pre-V3D 7.1 hardware, kicking off the TMU write-combiner flush while an
L2T flush is still pending can clobber bits in L2TCACTL and cause cache
inconsistencies.

Poll for L2TFLS to clear before writing L2TCACTL on V3D < 7.1, ensuring
any pending flush has completed before a new clean is issued.

Cc: stable@vger.kernel.org
Fixes: d223f98 ("drm/v3d: Add support for compute shader dispatch.")
Signed-off-by: Maíra Canal <mcanal@igalia.com>
On runtime suspend, clean the V3D caches before suspending so all dirty
lines are written back to memory before the power domain is shut down.

Fixes several system hangs reported in [1][2][3].

Closes: raspberrypi#7381 [1]
Closes: raspberrypi#7396 [2]
Closes: raspberrypi#7397 [3]
Fixes: 17af1d14deaf ("drm/v3d: Introduce Runtime Power Management")
Signed-off-by: Maíra Canal <mcanal@igalia.com>
Align with the non-arm64 code, as it's technically possible to run the
cpu in BE mode.

Fixes: d30fd12 ("nvme-pci: manually allocate Host Memory Buffer segments on arm64")
Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
In commit df289f8 ("pcie-brcmstb: move the unilateral disable of
CLKREQ# before link-up") the clkreq_cntl ending up being initialised to
zero instead of the read/reset value of the hardware register. Preserve
non-clkreq related bits by restoring the read.

Signed-off-by: Jonathan Bell <jonathan@raspberrypi.com>
With the jump to the 6.18 kernel we dropped a patch that had been
overriding #size-cells in the upstream bcm2712 dts files. The result
is cleaner, but only Pi 5 and CM5 EEPROMs since February 2025 are
compatible with it.

Apply a few hacks to the kernel's early DT parsing and to the 2712 dts
so that the EEPROM is able to update the CMA section and the kernel is
able to read the result, despite the fact that it is malformed.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Enable DSA support for Microchip KSZ switches with SPI interface. It is
for example used in the CM4S based RevPi Flat S.

Signed-off-by: Nicolai Buchwitz <nb@tipi-net.de>
The overlays had a cam0 override that changed the CSI2 and I2C
interfaces, but it didn't create unique nodes for the clocks and
mux nodes meaning that loading two instances simultaneously didn't
work.

Update them to create unique nodes, and add overrides to set the
GPIOs controlling the muxes.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Some Waveshare DSI touch panels (e.g. the 8.8-DSI-TOUCH-A) need extra rails
on the on-board display MCU enabled before the panel itself starts
powering up, and require a longer settle time for those rails to come
up cleanly. The selection is made from device tree via the new
"pre-power-on" boolean property on the regulator's I2C node (asserted
by the matching overlay override).

When "pre-power-on" is present:
  - OR BIT(4) | BIT(1) | BIT(0) into the initial poweron_state, so the
    additional MCU rails are turned on together with VCC.
  - Wait 200 ms after writing REG_TP / REG_LCD so the rails fully
    stabilise before the panel/touch are accessed.

When the property is absent the driver behaves exactly as before:
poweron_state stays at BIT(9) | BIT(8) and the post-write delay
remains 20 ms.

Documented in the overlay README alongside the 8_8_inch_a parameter.

Signed-off-by: Waveshare_Team <support@waveshare.com>
The reset, iovcc and avdd GPIOs are requested with GPIOD_OUT_LOW today,
which forces every line low at probe time before the panel sequencing
code has a chance to drive them. On boards where the regulator MCU has
already brought these rails up (notably the 8.8-DSI-TOUCH-A using the new
"pre-power-on" path) this momentarily drops power/reset on a panel that
should already be live, producing visible flicker or a failed first
modeset.

Switch the three optional GPIO requests to GPIOD_ASIS so the kernel
inherits whatever state the bootloader / pre-power-on regulator left
behind. Subsequent gpiod_set_value() calls in prepare()/unprepare()
still drive the lines explicitly, so the runtime sequencing is
unchanged.

Tested on:
  - 8.8" DSI touch (pre-power-on path): no flicker on boot, panel comes
    up first try.
  - 7.0" / 5.0" / 4.0"-c DSI touch (no pre-power-on): unchanged
    behaviour, panels still initialise correctly across suspend/resume.

Signed-off-by: Waveshare_Team <support@waveshare.com>
The 8.8-DSI-TOUCH-A (8_8_inch_a) requires the on-board
display MCU to enable additional power rails before the panel itself is
brought up. Add the "pre-power-on" property to the display_mcu node via
the 8_8_inch_a override so the regulator driver knows to assert the
extra rails (and apply the longer settle delay) at probe time.

Signed-off-by: Waveshare_Team <support@waveshare.com>
Add device tree binding documentation for Waveshare DSI touchscreen
panels. This documents all supported compatible strings from 3.4" to
12.3" sizes.

Signed-off-by: Waveshare_Team <support@waveshare.com>
Add support for two new Waveshare products:
  - 4-DSI-TOUCH-A (480x800, 2-lane)
  - 4.3-DSI-TOUCH-A (480x800, 2-lane)

Signed-off-by: Waveshare_Team <support@waveshare.com>
…SI-TOUCH-A

Add device tree overlay entries for the Waveshare 4-DSI-TOUCH-A and
4.3-DSI-TOUCH-A. Update the overlay README to
document the new parameters.

Signed-off-by: Waveshare_Team <support@waveshare.com>
Add support for two MediaTek WiFi PCIe/M.2 interfaces.

See: raspberrypi#7415

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Add support for the edatec 101c (800x1280) DSI panel. This panel uses
the ILI9881C driver IC and is compatible with the existing initialization
sequence defined in the driver.

Signed-off-by: FrankLeeEDA <Fli@edatec.cn>
This driver provides support for controlling the panel's power supply,
including the necessary voltage and current regulation for proper
backlight and LCD operation.

Signed-off-by: FrankLeeEDA <Fli@edatec.cn>
Enable the Edatec panel regulator driver as a loadable module in the
following default configurations:
- bcm2711_defconfig
- bcm2711_rt_defconfig
- bcm2712_defconfig

This allows the kernel to support edatec display panels that require
specific power sequencing controlled by this regulator driver.

Signed-off-by: FrankLeeEDA <Fli@edatec.cn>
Add overlays for edatec 10inch (101c) and 7inch (070c) DSI panels.
Update Makefile to build these new overlays and README to document their
usage.

Signed-off-by: FrankLeeEDA <Fli@edatec.cn>
The TPZ filter wants ideally 3 lines of image to give good quality
downscaling. More than that leads to excessive SDRAM bandwidth
for no gain.

If the downsample factor allows for it, reduce the programmed image
height and increase the pitch to compensate.

This currently does not handle T-format images where we need to
configure it slightly differently.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Fixes the following v4l2-compliance failure:

fail: v4l2-test-controls.cpp(871): subscribe event for control 'User Controls' failed test

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Add support for GPRS Tunneling Protocol tunnels.

Signed-off-by: Manawyrm <git@tbspace.de>
Some of the Intel IWL WiFi drivers now also need IWLMLD specifying.

See: raspberrypi#7422

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
pitch*height does not necessarily equate to buffer size if the
buffer is non-linear, so the buffer validation is invalid.

Disable it for non-linear buffers.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
[ Early port of patch sent to linux-arm-kernel, minus documentation ]

A number of CPUs developed by Arm suffer from errata whereby a broadcast
TLBI;DSB sequence may complete before the global observation of writes
which are translated by an affected TLB entry.

These errata ONLY affect the completion of memory accesses which have
been translated by an invalidated TLB entry, and these errata DO NOT
affect the actual invalidation of TLB entries. TLB entries are removed
correctly.

This issue has been assigned CVE ID CVE-2025-10263.

To mitigate this issue, Arm recommends that software follows any
affected TLBI;DSB sequence with an additional TLBI;DSB, which will
ensure that all memory write effects affected by the first TLBI have
been globally observed. The additional TLBI can use any operation that
is broadcast to affected CPUs, and the additional DSB can use any option
that is sufficient to complete the additional TLBI.

The ARM64_WORKAROUND_REPEAT_TLBI workaround is sufficient to mitigate
the issue. Enable this workaround for affected CPUs, and update the
silicon errata documentation accordingly.

Note that due to the manner in which Arm develops IP and tracks errata,
some CPUs share a common erratum number.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Raspberry Pi 5B will not boot from SD card without PINCTRL_SINGLE since
Linux 7.0:

[   17.888687] platform 107d50c000.serial: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/bt_shutdown_pins
[   17.888693] platform pwr_button: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/pwr_button_pins
[   17.888697] platform 107d004000.spi: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/spi10_cs_gpio1
[   17.888699] platform wl-on-reg: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/wl_on_pins
[   17.888701] platform 1000fff000.mmc: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d510700/emmc_aon_cd_pins
[   17.888704] platform 1001100000.mmc: deferred probe pending: platform: wait for supplier /soc@107c000000/pinctrl@7d504100/sdio2_30_pins
[   30.688427] vcc-sd: disabling
@pelwell

pelwell commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

My Raspberry Pi 5 is booting happily from SD with top-of-tree rpi-7.0.y. I can't see any way in which the presence of the pinctrl-single (pcs) driver would make any difference - it's a platform driver, and the compatible string is not mentioned in the Pi 5 dts files. To be sure I'd not missed anything, I rebuilt with CONFIG_PINCTRL_SINGLE=y and found that the driver's probe function is never called.

Please explain how you came to this diagnosis and remedy.

@Cyanoxygen

Cyanoxygen commented Jun 16, 2026

Copy link
Copy Markdown
Author

Hi,

My Raspberry Pi 5 is booting happily from SD with top-of-tree rpi-7.0.y. I can't see any way in which the presence of the pinctrl-single (pcs) driver would make any difference - it's a platform driver, and the compatible string is not mentioned in the Pi 5 dts files.

I was wondering the same thing, but I at the time I couldn't find out why it happened.

To be sure I'd not missed anything, I rebuilt with CONFIG_PINCTRL_SINGLE=y and found that the driver's probe function is never called.

Please explain how you came to this diagnosis and remedy.

I came to this conclusion by trial and error, and came to this conclusion after a few configuration changes.

I cleaned up the boot partition, reapplied the device tree, overlay files and the kernel, after then it booted fine, so now I think it is a fluke 😂 . I will dig deeply tomorrow. Thanks!

@Cyanoxygen Cyanoxygen marked this pull request as draft June 16, 2026 10:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.