Findings

Pico problems in the Tock tree, worked through far enough to be useful to whoever fixes them — some reported by other people, some our own changes written up so a reviewer can check them. Each page separates what was measured from what was inferred, and ends with what it does not establish. That last section is doing real work here: the RP2040 half of all of this has no board behind it. #5153 is untested outright; #5157 and #5160 ran on an RP2350, not on the chip they name. Only #4770 was confirmed on an RP2040, and that was the reporter doing it on his own board.

1Open

build tooling #4770 — make program builds an ELF that no UF2 tool will take

Splicing an application into the kernel makes objcopy lay the segments out again, and the (NOLOAD) stack segment comes back claiming 5,376 bytes of file content for RAM. Both converters are right to refuse it. The reported cause — that elf2uf2-rs cannot handle RAM — is not what is happening, and the workaround in the issue strips a section that is only safe to strip by accident. Six candidate fixes measured; the one that works is a single objcopy line, verified by running the real make target on all four RP2 boards, with it and without it.

build tooling #5160 — a flashing route with no ELF to get wrong

The reviewer who approved the four-line fix for #4770 asked for something else in the same sentence: that these boards stop splicing an application into the kernel ELF and use tockloader local-board instead. That route was run end to end — assembled by tockloader, loaded three ways (SWD, the bootloader, probe-rs), with two applications co-resident and live in the kernel's own process list. It cannot hit the defect, because it never opens an ELF. Four costs come with it, and the tool swap on three RP2040 boards is the one a reviewer would stop on.

board #5165 — a pending interrupt survives the reset that silenced it

A Raspberry Pi Pico 2 could panic at boot with unhandled interrupt 14, and the trigger looked random for most of a day: twice in nine resets, from two different debuggers. If the bootrom is still talking to a USB host when the chip is reset, the kernel clears the interrupt controller at a moment when clearing it cannot work, then resets the peripheral, leaving a pending bit whose cause is no longer anywhere to be seen. Read in the panic handler: the pending bit is set while the USB block is byte-for-byte identical to a boot that did not panic.

chip driver #5157 — a PIO interrupt flag delivered to the wrong client

A PIO block raises eight IRQ flags that belong to the block, and the driver delivered flag n to state machine n's client — an association the hardware does not have, and one the datasheet invites by naming those bits SM0SM3. A flag whose state machine has no client is never cleared, so the peripheral keeps asserting and the kernel spins. Invisible in the tree because the only user sits on the diagonal. Both the misrouting and the fix were run on a Pico 2 W.

chip driver #5153 — EP0 IN is armed at bus reset and never taken back

The RP2040 USB driver hands EP0's IN buffer to the USB controller during bus reset, with a length of 64 and a PID of DATA0 and nothing queued to send. A SETUP packet does not take it back, so the first control read can be answered out of a buffer nobody filled. Two of the three claims in the issue's AI analysis hold up; the third points at a delay that is already in the code.

2How these are written