Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix lockups and IRQ jitter on multicore RasPis #3703

Merged
merged 1 commit into from
Jul 3, 2020

Conversation

l1k
Copy link
Contributor

@l1k l1k commented Jul 3, 2020

Backport v5.7 commit bd59b34 to rpi-4.19.y to fix random lockups as well as jittery IRQ latency on multicore Raspberry Pis.

These issues are caused by the bootloader erroneously leaving the USB IRQ enabled. Once the FIQ-enabled USB driver probes, both the regular USB IRQ (on cpu0) as well as the USB FIQ (on cpu1) are enabled. Because no handler is registered for the regular USB IRQ, cpu0 spins upon a USB interrupt until cpu1 has handled it. This provokes a deadlock when cpu1 has temporarily disabled the FIQ and is trying to acquire a global lock which happens to be held by cpu0, which in turn is spinning in the IRQ handler waiting for cpu1 to handle the USB interrupt.

The bootloader still leaves the USB IRQ enabled in the latest version of raspberrypi-bootloader, which is 2020-06-01.

Please consider cherry-picking to rpi-5.4.y if/when merging. Thanks.

Cc: @naruxde

[ Upstream commit bd59b34 ]

Per the spec, the BCM2835's IRQs are all disabled when coming out of
power-on reset.  Its IRQ driver assumes that's still the case when the
kernel boots and does not perform any initialization of the registers.
However the Raspberry Pi Foundation's bootloader leaves the USB
interrupt enabled when handing over control to the kernel.

Quiesce IRQs and the FIQ if they were left enabled and log a message to
let users know that they should update the bootloader once a fixed
version is released.

If the USB interrupt is not quiesced and the USB driver later on claims
the FIQ (as it does on the Raspberry Pi Foundation's downstream kernel),
interrupt latency for all other peripherals increases and occasional
lockups occur.  That's because both the FIQ and the normal USB interrupt
fire simultaneously:

On a multicore Raspberry Pi, if normal interrupts are routed to CPU 0
and the FIQ to CPU 1 (hardcoded in the Foundation's kernel), then a USB
interrupt causes CPU 0 to spin in bcm2836_chained_handle_irq() until the
FIQ on CPU 1 has cleared it.  Other peripherals' interrupts are starved
as long.  I've seen CPU 0 blocked for up to 2.9 msec.  eMMC throughput
on a Compute Module 3 irregularly dips to 23.0 MB/s without this commit
but remains relatively constant at 23.5 MB/s with this commit.

The lockups occur when CPU 0 receives a USB interrupt while holding a
lock which CPU 1 is trying to acquire while the FIQ is temporarily
disabled on CPU 1.  At best users get RCU CPU stall warnings, but most
of the time the system just freezes.

Fixes: 89214f0 ("ARM: bcm2835: add interrupt controller driver")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Link: https://lore.kernel.org/r/f97868ba4e9b86ddad71f44ec9d8b3b7d8daa1ea.1582618537.git.lukas@wunner.de
@pelwell
Copy link
Contributor

pelwell commented Jul 3, 2020

That looks plausible - anything that prevents random stalls and lockup is a good thing.

Any thoughts or concerns, @P33M?

@P33M
Copy link
Contributor

P33M commented Jul 3, 2020

I'm slightly confused by the rationale - Linux is the first thing to run on the ARM complex, there is no "bootloader". The only things I can think of that would touch the ARM interrupt control registers before Linux booted are something like u-boot, a prior kernel before calling kexec or NOOBS. Alternatively if these registers are not reset by a watchdog reset, then a reboot would leave them in the bad state.

@i1k do you have evidence that FIQ and IRQ are simultaneously enabled for USB (e.g. by an error message from your patch)?

@popcornmix
Copy link
Collaborator

@P33M I think the arm stubs are considered the bootloader in linux kernel terms.
It does configure the GIC.

@pelwell
Copy link
Contributor

pelwell commented Jul 3, 2020

I can attest that running rpi-5.7.y on an 3B+ you get:

[    0.000000] [Firmware Bug]: Bootloader left irq enabled: bank 1 irq 9

@pelwell
Copy link
Contributor

pelwell commented Jul 3, 2020

And that was running from a cold power-on.

@popcornmix
Copy link
Collaborator

It may also be firmware doing stuff. What is bank 1 irq 9?

@P33M
Copy link
Contributor

P33M commented Jul 3, 2020

Firmware is indeed bugged - start.elf is fiddling with the ARM interrupt control block and unmasking the USB interrupt. We should probably stop it doing that.

@popcornmix
Copy link
Collaborator

Agreed - while this commit is worth having to tell us something's wrong, fixing the firmware to leave interrupts in expected state should be done as the real fix.

@pelwell
Copy link
Contributor

pelwell commented Jul 3, 2020

@l1k Did you not think to create an issue in the firmware repo when you discovered this bug?

@pelwell pelwell merged commit 5f72203 into raspberrypi:rpi-4.19.y Jul 3, 2020
@l1k
Copy link
Contributor Author

l1k commented Jul 3, 2020

Thanks a lot guys for looking into this.

@pelwell: Sorry, no, I assume by firmware repo you mean https://github.com/RPi-Distro/firmware? The thought of creating an issue there didn't occur to me I'm afraid. I did cc you and @XECDesign however when submitting v1 of the patch to the mailing list back in February.

That initial version of the patch contains a more detailed rationale. I had to trim it in a later version to address an objection by @ffainelli of Broadcom. I apologize if the initial commit message comes across as snarky. The issue was nontrivial to debug due in part to the closed-source nature of the firmware. Though I suppose that may be a necessity caused by whatever agreements exist with Broadcom.

More background info is in the announcement in our forum.

Although the patch went into v5.7, it wasn't picked up by stable maintainers despite my explicit request, hence didn't automatically percolate down into rpi-4.19.y. Which necessitated the present pull. Thanks again.

@pelwell
Copy link
Contributor

pelwell commented Jul 3, 2020

I was thinking of https://github.com/raspberrypi/firmware:

This repository contains pre-compiled binaries of the current Raspberry Pi kernel and modules, userspace libraries, and bootloader/GPU firmware.

Anyway, the patch is now in rpi-5.4.y and rpi-5.6.y as well.

@P33M
Copy link
Contributor

P33M commented Jul 3, 2020

I'm quite interested in the use-case that causes the deadlock. This has never to my knowledge been seen on downstream kernels, and we've got about 6 years worth of units in the field that were exposed to this bug.

@l1k
Copy link
Contributor Author

l1k commented Jul 9, 2020

Sorry for the delay @P33M.

One of our customers came up with a test script that repeated each of the following two commands 10 times:

stress --io 24 -t 2700
stress --cpu 4 --io 4 --vm 2 --vm-bytes 128M -t 2700

This exposed the deadlock on a portion of our devices, seemingly at random. I used the same commands when trying to reproduce the issue in our lab and additionally generated traffic to an attached USB flash stick. I was able to reproduce the issue within 2 or 3 days that way.

We apply the RT patch set on top of the Foundation's downstream kernel and it's possible that the deadlock occurs only or more easily on an RT kernel, but I doubt it.

I only reproduced the issue twice because that was already sufficient to root-cause it.

The first time I reproduced it, cpu2 and cpu3 were busy with the stress program. cpu0 was busy in ktimersoftd/0 with the following stack trace: kthread do_current_softirqs() -> process_timeout() -> wake_up_process(). And the task that it woke was rcu_preempt() with task_struct->cpu=1. Right at the end of try_to_wake_up() there's a call to raw_spin_unlock_irqrestore(), so that re-enabled interrupts and the cpu then got an irq exception and was in bcm2836_arm_irqchip_handle_irq() -> __handle_domain_irq() -> generic_handle_irq() -> bcm2836_chained_handle_irq() -> generic_handle_irq(). cpu1 was in task rcu_preempt(just woken by cpu0) and was stuck in rcu_gp_kthread() -> schedule_timeout() -> del_timer_sync() -> rt_spin_lock(&base->expiry_lock). That lock was apparently held by cpu0.

The second time I reproduced it, both cpu0 and cpu1 showed the same stacktrace, namely rcu_cpu_kthread() -> rcu_process_callbacks() -> __rcu_process_callbacks() -> invoke_rcu_callbacks() -> rcu_do_batch() -> __put_task_struct_cb() -> free_task() -> release_task_stack() -> __free_pages() -> __free_pages_ok() -> __my_cpu_offset() -> free_one_page(). cpu0 had apparently won the race for a spinlock in that latter function, then got an irq exception and was spinning in bcm2836_chained_handle_irq(), while cpu1 was waiting for the same spinlock and the CPSR register showed that the FIQ was temporarily disabled on cpu1 (0x20000153).

Stopping and re-starting via JTAG showed that cpu0 was spinning suspiciously long in bcm2836_chained_handle_irq(), so I instrumented that function to show which interrupts had fired and required multiple loop iterations and most of the time it was the USB interrupt. I knew that the USB interrupt isn't used at all by dwc_otg if FIQ is enabled, so the question was what had enabled it in the first place. A few years back I had a case where Apple's EFI firmware left the BCM4331 WiFi interrupt enabled (see abb2baf), so I checked if the USB interrupt was left enabled by the bootloader and sure enough, that turned out to be the case.

popcornmix added a commit to raspberrypi/firmware that referenced this pull request Jul 13, 2020
kernel: vc4_hdmi: Support HBR audio
See: raspberrypi/linux#3717

kernel: OV7251 overlay and defconfig
See: raspberrypi/linux#3714

kernel: Imx290 & unicam v4l2-compliance fixes
See: raspberrypi/linux#3712

kernel: Enhances the DAC+ driver to control the optional headphone amplifier
See: raspberrypi/linux#3711

kernel: OV9281 driver and overlay
See: raspberrypi/linux#3709

kernel: dtoverlays: Fixup imx219 and imx477 overlays due to parsing failures
See: raspberrypi/linux#3706

kernel: FKMS: max refresh rate and blocking 1366x768
See: raspberrypi/linux#3704

kernel: Fix lockups and IRQ jitter on multicore RasPis
See: raspberrypi/linux#3703

kernel: dts: Further simplify firmware clocks
See: raspberrypi/linux#3609

kernel: configs: Add CAN_EMS_USB=m
See: raspberrypi/linux#3716

kernel: configs: Enable CONFIG_BLK_DEV_NVME=m

kernel: ARM: dts: Make bcm2711 dts more like 5.7

firmware: arm_loader: Don't enable the ARM USB IRQ
See: raspberrypi/linux#3703

firmware: hdmi: Remove M2MC/BVB min turbo clock request
popcornmix added a commit to Hexxeh/rpi-firmware that referenced this pull request Jul 13, 2020
kernel: vc4_hdmi: Support HBR audio
See: raspberrypi/linux#3717

kernel: OV7251 overlay and defconfig
See: raspberrypi/linux#3714

kernel: Imx290 & unicam v4l2-compliance fixes
See: raspberrypi/linux#3712

kernel: Enhances the DAC+ driver to control the optional headphone amplifier
See: raspberrypi/linux#3711

kernel: OV9281 driver and overlay
See: raspberrypi/linux#3709

kernel: dtoverlays: Fixup imx219 and imx477 overlays due to parsing failures
See: raspberrypi/linux#3706

kernel: FKMS: max refresh rate and blocking 1366x768
See: raspberrypi/linux#3704

kernel: Fix lockups and IRQ jitter on multicore RasPis
See: raspberrypi/linux#3703

kernel: dts: Further simplify firmware clocks
See: raspberrypi/linux#3609

kernel: configs: Add CAN_EMS_USB=m
See: raspberrypi/linux#3716

kernel: configs: Enable CONFIG_BLK_DEV_NVME=m

kernel: ARM: dts: Make bcm2711 dts more like 5.7

firmware: arm_loader: Don't enable the ARM USB IRQ
See: raspberrypi/linux#3703

firmware: hdmi: Remove M2MC/BVB min turbo clock request
@mtausk
Copy link

mtausk commented Sep 3, 2020

Hi. What's the solution for this?
I see [Firmware Bug]: Bootloader left irq enabled: bank 1 irq 9. .. and the system is not moving anywhere. It's the newest Hifiberry OS.
Doing rpi-update should fix this?

@popcornmix
Copy link
Collaborator

popcornmix commented Sep 3, 2020

What does vcgencmd version report? 13th July or newer should have the fix in.

@gr4viton
Copy link

gr4viton commented Oct 31, 2020

I have exactly the same error on bootup with a freeze
[Firmware Bug]: Bootloader left irq enabled: bank 1 irq 9

freshly flashed Ubuntu Mint for raspberry pi

running on Raspberry Pi 3B vol2

will try 20.10 version.

(I just want to play with ROS on Rpi and then buy rpi 4 if i'll enjoy :) )

@pelwell
Copy link
Contributor

pelwell commented Oct 31, 2020

It sounds like you are running an older firmware - this was fixed in early July.

@gr4viton
Copy link

Yes I probably had.
When I installed the the Ubuntu MATE 20.10 version it worked flawlessly. So the firmware version was probably bumped :).

Problem solved for me. Would it work also with MATE 20.04 if I just copied the firmware files somehow? Is it only about the rpi-4.19.y file?

mkreisl added a commit to xbianonpi/xbian-package-firmware that referenced this pull request Jan 12, 2021
- firmware: Unicam: Request frequency of 250MHz when running camera use cases

- firmware: arm_loader: Fix UART unmapping

- firmware: uart1: Revert to the old core-frequency-locking method
  See: #1267

- firmware: arm_loader: Provide a sensible device_tree_end default
  See: #1259

- firmware: mmal_ril: Fix size reported on ENOSPC error
  See: #1269

- firmware: hvs: Trigger the EOLn timer at the field rate when interlaced
  See: #1227

- firmware: bootloader_state: Add support for a custom TFTP prefix parameter

- firmware: arm_loader: GIC stub => 2711 stu
- See: #1255

- firmware: arm_loader: Add os_prefix option
  See: raspberrypi/linux#3237

- firmware: Add support for arbitrary memory specification

- firmware: arm_loader: Fix explicit kernel name handling
  See: #1277

- firmware: Added a new display power mailbox call

- firmware: Update display_power gencmd with optional display id
  See: raspberrypi/linux#3050

- firmware: Remove legacy pkgconfig to avoid Mesa conflicts
  See: raspberrypi/userland#585

- firmware: Update display_power gencmd with optional display id

- firmware: sysman: Fix unsafe check for h264 being enabled
  See: popcornmix/omxplayer#749

- firmware: platform: Reduce absolute microvolts threshold to 500000

- firmware: tv_server: Also initialise ts queue on composite
  See: https://forum.kodi.tv/showthread.php?tid=348205

- firmware: Loop to init hotplug

- firmware: hdmi: Change HDMI state machine and BVB clocks as turbo clocks

- firmware: hdmi: Add EOF timeout to unjam failed mode changes

- firmware: platform: Differentiate between boostable and turbo clocks

- firmware: arm_dt: Set WL_ON and BT_ON from .dtb

- firmware: Fixup chosing of bit depth in legacy graphics
  See: raspberrypi/linux#3331

- firmware: vec: Setup WideScreen Signalling outside of copy protection
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=256489

- firmware: Add global reset mailbox

- firmware: 2711: De-couple start.elf clock setup from the bootloader

- firmware: scaler: Correct defines for SCALER_POS0_START_Y_[MASK|SHIFT] (HVS4)

- firmware: platform: Fix missing HDMI PHY power down bit

- firmware: Reduce voltage as part of DVFS

- firmware: arm-loader: Inherit 2711 mac-address from the bootloader
  See: http://git/vc4/vc4/merge_requests/687

- firmware: arm_loader: Respect all required frequencies when throttling

- firmware: Fixup vcgencmd display_power return values

- firmware: platform: Allow fixed voltage with avs_disable=1

- firmware: EMMC: Use PLLD for EMMC for 250MHz host-clock
  See: #1289

- firmware: platform: Round down effective frequencies when they exceed max
  See: #1290

- firmware: arm_loader: Pass video mode via kernel command for composite
  See: #1285

- firmware: Fix lens shading table generation buglet
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=190586&start=75#p1534672

- firmware: hdmi: Use RB2 timing for 2560x1440@60 if pixel clock is 241.5 MHz

- firmware: arm_dt: Look for ethernet0 before ethernet

- firmware: arm_dt: Set PCIe dma-ranges from memory size

- firmware: hdmi: HDMI SM clock must not run slower than audio MAI clock
  See: #1295

- firmware: arm_loader: Pass video mode via kernel command for composite (master)
  See: #1285

- firmware: power: Use Pi4 PMIC values on Pi3+

- firmware: Fix filtered handling of array variables
  See: #1296

- firmware: Update libfdt to v1.5.1+
  See: raspberrypi/userland#582

- firmware: dtoverlay: Extend DT parameter syntax

- firmware: memorymap: Include FW revision in start.elf

- firmware: Fixup for vcgencmd display_power
  See: #1224

- firmware: Add hdmi_wifi_pixel_freq_adj config option

- firmware: Revert mmal: Support 64 bit clients
  See: raspberrypi/userland#586

- firmware: arm_dt/dtoverlay fixes for ARM side camera driver power control

- firmware: arm_ldconfig: Support multiple initramfs files
  See: #1318

- firmware: Add support for backlight enable

- firmware: master: arm_ldconfig: Support multiple initramfs files
  See: #1318

- firmware: power: Make pmicrd/pmicwr available to all

- firmware: platform: Only throttle down from arm_freq

- firmware: platform: Bump desired ring osc to 3.7 on Pi3/CM3

- firmware: arm_loader: Add 2ms delay before resetting SD_IO

- firmware: isp/tuner: Resetting to a lamp mode cancels manual_gains_used_

- firmware: board_info: Fix uninitialised phy_addr handling in network boot

- firmware: IL video_decode: Default to H264 as MPEG4 isn't supported

- firmware: IL egl_render: Fail the create on Pi4

- firmware: arm_dispmanx: Column pitch for YUV10COL is in lines not bytes

- firmware: platform: 2711: Also add chicken bits to dvfs voltage

- firmware: MMAL / video_render: Allow column stride to be set on column formats

- firmware: vc_image/video_decode: Move +16 lines for di_adv from vc_image to decoder

- firmware: platform: 2711: Support overclocking gpu frequencies
  See: #1290

- firmware: gencmd: Fix measure_clock name for CLOCK_OUTPUT_108

- firmware: mmal isp: Remote alignment requirements for RGB24 formats

- firmware: Add missing flags for VC_IMAGE_PROP_YUVUV_4K_CHROMA_ALIGN

- firmware: platform: Compromise on gpu overclock settings
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=262649&start=100#p1610362

- firmware: Add the ability to export labels from overlays

- firmware: loader: 4-byte align initramfs blocks
  See: #1318

- firmware: vd3/video_decode: Do not add 16 lines of context when video is 1920 tall
  See: #1334

- firmware: Allow use of 24 bit framebuffers
  See: #1338

- firmware: arm_loader: Add non-os_prefix cmdline.txt fallback

- firmware: board_info: Set board-info memory size according to SDRAM mode registers

- firmware: arm_loader: Treat min frequencies as optional
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=264786

- firmware: arm_loader: Add overvoltage_delta for manufacture tests

- firmware: Support Isp stats and params

- firmware: arm_loader: Make EMMC2 dma-ranges patch more tolerant

- firmware: bootromfs: Delete unwanted assert

- firmware: usb_eth: Increase timeouts for TFTP requests and retransmit ACK

- firmware: isp component: rtos_common_mem: Fix handle acquire usage with wrap handles

- firmware: il: video_render: Require 4k chroma alignment on YUVUV transpose
  See: #1334

- firmware: vc_image: Don't align the YUVUV pitch to SDRAM pages if not aligning to 4k
  See: raspberrypi/linux#3492

- firmware: isp component: rtos_common_mem: Fix smallalloc test in mem_handle_acquire_if_valid

- firmware: platform: 2711: Make chicken-bit pip size vary with pmic quantum

- firmware: USB device boot for CM4

- firmware: arm_loader: Add SET_LAUNCH_VPU1 mailbox message

- firmware: il: camera: Add config.txt param awb_auto_is_greyworld for NoIR camera
  See: #1167

- firmware: arm_loader: Provisional support for high peris

- firmware: arm_loader: Only add margins to cmdline if non-zero

- firmware: clock: Support clock_measure_pll on pi0-3

- firmware: platform: Back to CLOCK_PLL_CHAN_CPER for emmc on pi0-3

-  firmware: gpu_server: Fixup after LAUNCH_VPU1 commit

- firmware: power: Add a notch to compensate for trim on 2835

- firmware: isp/tuner: Resetting to a lamp mode cancels manual_gains_used_ (master)

- firmware: armstubs: Rebuild with latest source

- firmware: arm_loader: Avoid resetting the GPIO expander

- firmware: vcos_genversion: Fix up legacy variant names

- firmware: dtoverlay: Add overlay_map functionality
  See: raspberrypi/linux#3520

-  firmware: isp_tuner: Add in the slave AWB tuner handling

- firmware: arm_dt: Apply os_prefix to device_tree= files

- firmware: clock_2711: Fix PLL analog setup

- firmware: board_info: Also include CM3+ for pmic trait
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=267576&start=25#p1643032

- firmware: Switch to building from common firmware branch

- firmware: isp: make AGC metering respect the (digital zoom) crop region

- firmware: Avoid linking in khronos on Pi4

- firmware: clock: Reset PLLC after switching VPU to OSC

- firmware: arm_loader: Make 4GB available if arm_peri_high

- firmware: arm_loader: Complete arm_peri_high support
  See: #1374

- firmware: board_info: Split Model B into rev1 and rev2
  See: raspberrypi/linux#3537

- firmware: power: Clamp voltage to platform limits for all power supplies

- firmware: isp: Ensure lens shading (LS) is enabled when a valid LS table is received

- firmware: otp: Fix advanced boot row definition

- firmware: bootcode: Fix issue booting with webcams

- firmware: isp: fix ISP component to return non-zero focus FoMs

- firmware: Fix for IMX477 focal length, f_number and aperture

- firmware: Update firmware for USB MSD boot

- firmware: platform: Fix overflow on high arm overclocks

- firmware: video_encode: Add option to include header bytes with frame

- firmware: DSI display: Close I2C handle if the display doesn't probe

- firmware: mmal/vc: Add mapping for OMX_IndexConfigBufferStall / MMAL_PARAMETER_VIDEO_STALL_THRESHOLD
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=70&t=273123&p=1655481

- firmware: hdmi: Request an I2C interrupt for EDID reading

- firmware: i2c: Move using_interrupt flag into periph_setup

- firmware: camera: Latency reduction for captures

- firmware: IL camera fixes for reduced startup time

- firmware: mmal_ril: Correct a use of portdef.video to portdef.image

- firmware: vc_image: SDRAM page alignment is optional for YUV10_COL
  See: https://forum.libreelec.tv/thread/21985-noise-artefacts-when-playing-back-4k-hevc-video-on-rpi4-le-9-2-1-no-problems-on/

- firmware: imx477: Correct the logic for extending hblank on long exposures

- firmware: il: isp: Ensure HR output is active and ISP is open before starting a frame

- firmware: isp_ctrl: Fail in start_[raw|yuv]_frame if ISP is not idle
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=275489

- firmware: vcfw: Fix PMIC max voltage
  See: https://forum.libreelec.tv/thread/22097-libreelec-leia-9-2-3

- firmware: ISP raw14 and mono input, 16bpc YUV output. Camera subsystem not messing with GPIO0

- firmware: isp: fix assert from initial setting of ISP denoise parameters

- firmware: arm_ldconfig: Don't pad initramfs files
  See: #1395

- firmware: board_info: Add and use BT_FLOWCONTROL trait

- firmware: logging: Add missing checks for uart_output_enabled

- firmware: host_applications: Install debug_sym.h

- firmware: logging: Inherit uart_2ndstage config from the bootloader

- firmware: Fix Pi4 regression in previous build

- firmware: platform: Resolve BT flow control contention
  See: Hexxeh/rpi-firmware#227

- firmware: hdmi: Limit the valid CEA modes to those defined in the table
  See: https://forum.libreelec.tv/thread/22135-regression-raspberry-pi-3-hdmi-output-broken-after-upgrade-to-9-2-x

- firmware: imx477: Add switch to allow switching of on-sensor DPC

- firmware: hdmi: Set HD_CTL_WHOLSMP and HD_CTL_CHALIGN_SET
  See: https://forum.kodi.tv/showthread.php?tid=354589

- firmware: arm_ldconfig: Honour the kernel8 text offset
  See: #1415

- firmware: jpeghw: Skip repeated 0xFF padding bytes between markers
  See: RPi-Distro/vlc#8

- firmware: arm_loader: Allow interlaced HDMI modes from FKMS
  See: raspberrypi/linux#3698

- firmware: arm_loader: Limit rather than reject boosts with disable_auto_turbo

- firmware: i2c: Clearing the TA bit may time out
  See: #1422

- firmware: arm_loader: Add an accelerated memmove

- firmware: arm_loader: memmove kernel to preferred text_offset
  See: #1421

- firmware: filesystem: Fix GPT regression on USB after SD fix
  See: #1420

- firmware: arm_loader: Don't enable the ARM USB IRQ
  See: raspberrypi/linux#3703

- firmware: hdmi: Remove M2MC/BVB min turbo clock request

- firmware: IL: camera: Fix stereoscopic pool allocations

- firmware: arm_loader: Add support for double clock/pixel_rep for FKMS
  See: raspberrypi/linux#3725

- firmware: scalerlib: Set the default chroma location for YUV10 to match 8bit

- firmware: scalerlib: Set chroma_vrep correctly for YUV10COL

- firmware: isp: check the hi-res resize filter mode when the input crop changes

- firmware: arm_loader: Knock 1.7 seconds off boot time
  See: #1375

- firmware: Imx477 external sync signals

- firmware: bootloader: Some tweaks for LED, UART, USB timeouts

- firmware: platform: Avoid vco issue with low arm_freq_min on Pi0-3
  See: #1431

- firmware: arm_loader: Don't try to load to 0 a.k.a. NULL
  See: #1445

- firmware: armstub7: Configure the top 32 STB interrupts

- firmware: dispmanx: Remove elements cleanly that are totally offscreen negatively
  See: raspberrypi/linux#3735

- firmware: hdmi: Set the altered mode, not the caller's mode
  See: #1446

- firmware: dt-blob: Declare CM4 GPIO expander pins

- firmware: clocks: Make frequency_t 64-bit

- firmware: Revert frequency_t: Make 64-bit

- firmware: ISP/tuner: Increase max exposure time for fixed ISO modes on IMX219 and 477
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=281603

- firmware: sdhost_arasan: Ignore DCRC after CMD12
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=282928

- firmware: firmware: frequency_t: Make 64-bit

- firmware: pi4: allow pllb changes while running
  See: #1431

- firmware: board_info: Give the CUSTOM boards the PMIC_NCP6343 trait

- firmware: dispmanx/displays: Allow both DPI and DSI displays simultaneously

- firmware: imx477: Release the I2C semaphore once finished, not before

- firmware: clock: Allow overclocking pllb
  See: raspberrypi/linux#3823

- firmware: hdmi/edid: Reduce the bias to all but the first detailed timing

- firmware: hdmi/edid: Add option to ignore any odd horizontal timings on Pi4

- firmware: sdcard: Hybrid MBR - only select GPT if it is the first primary partition
  See: #1465

- firmware: audioplus: Avoid broken audio when requesting hdmi audio device when using composite display
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=283639

- firmware: platform: Add support for SCB clock and set to 250MHz

- firmware: Revert arm_loader: Move first call to set_turbo after arm->start

- firmware: arm_ldconfig: GZIP-compressed ARMv8 kernel support

- firmware: arm_ldconfig: Restore the fallback load address
  See: #1467

- firmware: ilcamera: Disable timeouts on trigger sink devices

- firmware: genet: Flush RBUF/TBUF and clear mac-address on stop
  See: raspberrypi/linux#3850

- firmware: dmalib: Add support for 40-bit 2d memcpy

- firmware: sdcard: Reduce SD read overhead

- firmware: sdhost_arasan: Increase time threshold before suspend

- firmware: video_decode: Only shutdown codec on both ports being disabled

- firmware: vc_image_helper: Avoid misaligned exception due to uninitialised pointer

- firmware: arm_loader: Make arm clock accesses only see their own boosts
  See: #1469

- firmware: arm_loader: enable simple_fb iff there is a display
  See: raspberrypi/linux#3878

- firmware: arm_loader: Mark V3D early boost as for the ARM
  See: #1469

- firmware: arm_loader: Update armstubs with those from PR 117
  See: raspberrypi/tools#117

- firmware: Revert sdcard: Reduce SD read overhead

- firmware: arm_loader: Add GET/SET_VPU_VECTOR mailbox calls

- firmware: arm_ldconfig: Don't invalidate the dcache for most of memory
  See: #1445

- firmware: arm_loader: Allow arm to see force_turbo and uart boosts

- firmware: hdmi: Timeout HDMI EDID reads

- firmware: pwm_sdm: move modulator to VPU0
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=195178&p=1723639

- firmware: Add tryboot mechanism to provide a fallback if an OS upgrade fails

- firmware: camplus: stills_denoise: Release the VRF between iterations

- firmware: vc_image: Further fixup of fix_alignment
  See: #1334

- firmware: arm_loader: Support large PCIe window with <8GB RAM
  See: https://www.raspberrypi.org/forums/viewtopic.php?p=1759627#p1759627

- firmware: filesys: Close the brfs from filesys_power(..., 0)

- firmware: platform: Avoid vco issue with low arm_freq_min on Pi0-3
  See: #1431

- firmware: video_encode: Allow level 5.0 and 5.1
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=291447

- firmware: xhci: Don't reset BCM2711 XHCI from filesys in start.elf

- firmware: bootcode.bin: Add support for tryboot

- firmware: Switch DA9121 PMIC to PWM mode when ARM > 600 MHz

- firmware: arm_dt: Handle parent interrupt controllers when masking

- firmware: config: Add cm4 and pi400 config section filters

- firmware: MMAL/IL/ISP component: Set the ISP boost frequency once on open

- firmware: sdcard: Remove legacy NOOBS support to support booting from primary partition 4

- firmware: arm_loader: Move 2711 RAM to PCIe address 16GB

- firmware: video_decode: Add parameter to disable timestamp validation

- firmware: Imx477 camera tuning fixes
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=291032#p1770287
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=291032&start=25#p1771066

- firmware: Use DMA40 for PWM audio

- firmware: imx477: Replace existing 720p120 mode with a new 1332x990 120fps mode

- firmware: arm_loader: Allow max_framebuffers=0 to disable framebuffers
  See: #1507

- firmware: dmalib: Allow sdcard to borrow channel 6
  See: #1511
  See: Hexxeh/rpi-firmware#251
  See: https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=294932

- firmware: DSI interrupt fixes, and HDMI SM clock for deep colour

- firmware: dmalib: Keep 40-bit DMA clear of L2 alias

- firmware: audioplus: Fix hang when switching destination
  See: #1516

- firmware: HAT/I2C updates

- firmware: MMAL/IL: Add support for the 16bpp Bayer/Grey raw 10/12/14 formats

- firmware: Revert firmware: HAT/I2C updates

- firmware: firmware: MMAL/IL: Add support for the 16bpp Bayer/Grey raw 10/12/14 formats

- Firmware: undo previous reverts
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.

None yet

6 participants