mirror of
https://github.com/raspberrypi/rpi-eeprom.git
synced 2026-01-20 21:13:36 +08:00
Merge remote-tracking branch 'pitowers/master' into pios/trixie
* pitowers/master: pieeprom-2025-11-27: 2711: helpers/config_loader: Also support bootvar0 eeprom config on Pi4 (latest) pieeprom-2025-11-27: 2712: Stop partition-walk after boot-mode timeout/retries limit (latest) Fix remaining typo tools: imager: make-pi4-rpiboot-gpio-sd: Minor typos tools: imager: Add make-pi4-rpiboot-gpio-sd pieeprom-2025-11-21: 2711: recovery: Restore recovery_wait option (latest) pieeprom-2025-11-21: 2712: Allow longer overlay file paths (latest) imager: Delete temporary release-2711, release-2712 directories Fix the error message for config signing
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
|||||||
*.swp
|
*.swp
|
||||||
|
images-2711/
|
||||||
|
images-2712/
|
||||||
|
|||||||
BIN
firmware-2711/latest/pieeprom-2025-11-21.bin
Normal file
BIN
firmware-2711/latest/pieeprom-2025-11-21.bin
Normal file
Binary file not shown.
BIN
firmware-2711/latest/pieeprom-2025-11-27.bin
Normal file
BIN
firmware-2711/latest/pieeprom-2025-11-27.bin
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,33 @@
|
|||||||
# Raspberry Pi4 bootloader EEPROM release notes
|
# Raspberry Pi4 bootloader EEPROM release notes
|
||||||
|
|
||||||
|
## 2025-11-27: helpers/config_loader: Also support bootvar0 eeprom config on Pi4 (latest)
|
||||||
|
|
||||||
|
* helpers/config_loader: Also support bootvar0 eeprom config on Pi4
|
||||||
|
This allows an eeprom config setting (e.g. BOOTARG0=0x10) to be set on a board
|
||||||
|
which config.txt can use as a conditional expression (e.g. [bootarg0&0x10]).
|
||||||
|
* pi5: Write over-voltage config to the UART log
|
||||||
|
Write the high level over-voltage configuration to the UART log for
|
||||||
|
diagnostic purposes.
|
||||||
|
* Stop partition-walk after boot-mode timeout/retries limit
|
||||||
|
Fix a fatal assert with USB boot where the partition walk could be
|
||||||
|
retried after the USB timeout/retry limit had been reached.
|
||||||
|
See: https://github.com/raspberrypi/rpi-eeprom/issues/776
|
||||||
|
* rpiboot: Extend metadata to report status of operations
|
||||||
|
Report success/fail status of recovery operations based on config.txt settings
|
||||||
|
|
||||||
|
## 2025-11-21: recovery: Restore recovery_wait option (latest)
|
||||||
|
|
||||||
|
* recovery: Restore recovery_wait option
|
||||||
|
Restore the recovery_wait config.txt option. If this option is set
|
||||||
|
then recovery.bin will not rename itself or reboot. Instead flash
|
||||||
|
the activity LED on completion.
|
||||||
|
This option can be useful when creating an SD card to erase the
|
||||||
|
EEPROM or program the RPIBOOT gpio on multiple devices.
|
||||||
|
If recovery_wait=1 and recovery.bin is run from the SD card then
|
||||||
|
indicate success of erase_eeprom=1 or program_rpiboot_gpio=N was
|
||||||
|
set instead of requiring the EEPROM to be updated.
|
||||||
|
* Manufacture test updates for SDRAM.
|
||||||
|
|
||||||
## 2025-11-09: Promote 2025-11-05 to the default release (default)
|
## 2025-11-09: Promote 2025-11-05 to the default release (default)
|
||||||
|
|
||||||
## 2025-11-05: Add iommu_dma_numa_policy=interleave when needed (latest)
|
## 2025-11-05: Add iommu_dma_numa_policy=interleave when needed (latest)
|
||||||
|
|||||||
BIN
firmware-2712/latest/pieeprom-2025-11-21.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2025-11-21.bin
Normal file
Binary file not shown.
BIN
firmware-2712/latest/pieeprom-2025-11-27.bin
Normal file
BIN
firmware-2712/latest/pieeprom-2025-11-27.bin
Normal file
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,35 @@
|
|||||||
# Raspberry Pi5 bootloader EEPROM release notes
|
# Raspberry Pi5 bootloader EEPROM release notes
|
||||||
|
|
||||||
|
## 2025-11-27: Stop partition-walk after boot-mode timeout/retries limit (latest)
|
||||||
|
|
||||||
|
* pi5: Write over-voltage config to the UART log
|
||||||
|
Write the high level over-voltage configuration to the UART log for
|
||||||
|
diagnostic purposes.
|
||||||
|
* Stop partition-walk after boot-mode timeout/retries limit
|
||||||
|
Fix a fatal assert with USB boot where the partition walk could be
|
||||||
|
retried after the USB timeout/retry limit had been reached.
|
||||||
|
See: https://github.com/raspberrypi/rpi-eeprom/issues/776
|
||||||
|
* rpiboot: Extend metadata to report status of operations
|
||||||
|
Report success/fail status of recovery operations based on config.txt settings
|
||||||
|
|
||||||
|
## 2025-11-21: Allow longer overlay file paths (latest)
|
||||||
|
|
||||||
|
* recovery: Restore recovery_wait option
|
||||||
|
Restore the recovery_wait config.txt option. If this option is set
|
||||||
|
then recovery.bin will not rename itself or reboot. Instead flash
|
||||||
|
the activity LED on completion.
|
||||||
|
This option can be useful when creating an SD card to erase the
|
||||||
|
EEPROM or program the RPIBOOT gpio on multiple devices.
|
||||||
|
If recovery_wait=1 and recovery.bin is run from the SD card then
|
||||||
|
indicate success of erase_eeprom=1 or program_rpiboot_gpio=N was
|
||||||
|
set instead of requiring the EEPROM to be updated.
|
||||||
|
* Load RP1 firmware whilst DDR is initialising
|
||||||
|
* Allow longer overlay file paths
|
||||||
|
load_dtoverlay uses the variable "filename" to hold the full path to an
|
||||||
|
overlay. As such it should be declared using LDFILEPATH_MAX, not
|
||||||
|
LDFILENAME_MAX.
|
||||||
|
See: https://github.com/raspberrypi/firmware/issues/2004
|
||||||
|
|
||||||
## 2025-11-09: Promote 2025-11-05 to the default release (default)
|
## 2025-11-09: Promote 2025-11-05 to the default release (default)
|
||||||
|
|
||||||
## 2025-11-05: arm_loader: Add iommu_dma_numa_policy=interleave when needed (latest)
|
## 2025-11-05: arm_loader: Add iommu_dma_numa_policy=interleave when needed (latest)
|
||||||
|
|||||||
@@ -9,3 +9,10 @@ ${script_dir}/make-release critical 2025-11-05 000138c0 "${script_dir}/2711-conf
|
|||||||
|
|
||||||
# Pi5
|
# Pi5
|
||||||
${script_dir}/make-release critical 2025-11-05 "" "${script_dir}/2712-config" release-2712 rpi-boot-eeprom-recovery 2712
|
${script_dir}/make-release critical 2025-11-05 "" "${script_dir}/2712-config" release-2712 rpi-boot-eeprom-recovery 2712
|
||||||
|
|
||||||
|
# Convert to disk image for RPi Imager downloads
|
||||||
|
sudo ${script_dir}/make-recovery-images
|
||||||
|
|
||||||
|
# Delete the plain .zip files. These should not be uploaded as releases.
|
||||||
|
rm -rf release-2711
|
||||||
|
rm -rf release-2712
|
||||||
|
|||||||
134
imager/make-pi4-rpiboot-gpio-sd
Executable file
134
imager/make-pi4-rpiboot-gpio-sd
Executable file
@@ -0,0 +1,134 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
script_dir=$(cd "$(dirname "$0")" && pwd)
|
||||||
|
TMP_DIR=""
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "$@" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
if [ -d "${TMP_DIR}" ]; then
|
||||||
|
rm -rf "${TMP_DIR}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<EOF
|
||||||
|
Usage:
|
||||||
|
sudo $(basename $0): <gpio_num>
|
||||||
|
|
||||||
|
Creates an SD card image which programs the OTP on a Pi 4B or Pi 400
|
||||||
|
to select a GPIO on the 40-pin header for use as the rpiboot GPIO.
|
||||||
|
Once programmed, if this GPIO is pulled to ground at power on, the
|
||||||
|
SoC bootrom will boot into rpiboot provisioning mode.
|
||||||
|
|
||||||
|
This setting _permanently_ modifies the device configuration - it cannot
|
||||||
|
be undone or changed, ever.
|
||||||
|
|
||||||
|
The SD image will be written to images-2711/pi4-program-rpiboot-gpioN.zip,
|
||||||
|
where N is the number of the chosen GPIO, and can be flashed using
|
||||||
|
Raspberry Pi Imager to a spare SD card. As with programming the bootloader
|
||||||
|
EEPROM, insert the card in the Raspberry Pi, power on and wait for the
|
||||||
|
green LED to flash.
|
||||||
|
|
||||||
|
gpio_num: Select the rpiboot GPIO number from 2,4,5,6,7 or 8.
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
[ "$(id -u)" = "0" ] || die "$(basename $0) must be run as root"
|
||||||
|
[ -n "${SUDO_UID}" ] || die "SUDO_UID not defined"
|
||||||
|
[ -n "${SUDO_GID}" ] || die "SUDO_GID not defined"
|
||||||
|
|
||||||
|
build_image()
|
||||||
|
{
|
||||||
|
chip="${1}"
|
||||||
|
gpio="${2}"
|
||||||
|
img="pi4-program-rpiboot-gpio${gpio}"
|
||||||
|
zip="${img}.zip"
|
||||||
|
img="${img}.img"
|
||||||
|
|
||||||
|
TMP_DIR="$(mktemp -d)"
|
||||||
|
(
|
||||||
|
mkdir "${TMP_DIR}/files"
|
||||||
|
cd "${TMP_DIR}/files"
|
||||||
|
cp "${script_dir}/../firmware-${chip}/latest/recovery.bin" .
|
||||||
|
cat <<EOF > config.txt
|
||||||
|
uart_2ndstage=1
|
||||||
|
recovery_wait=1
|
||||||
|
program_rpiboot_gpio=${gpio}
|
||||||
|
EOF
|
||||||
|
echo "Generated config.txt file"
|
||||||
|
cat config.txt
|
||||||
|
cd "${TMP_DIR}"
|
||||||
|
dd if=/dev/zero bs=1M count=258 of=temp.img > /dev/null 2>&1
|
||||||
|
/sbin/sfdisk temp.img <<EOF
|
||||||
|
label: dos
|
||||||
|
label-id: 0x0a7b5ac5
|
||||||
|
device: temp.img
|
||||||
|
unit: sectors
|
||||||
|
|
||||||
|
./test.img1 : start= 2048, size= 524288, type=c
|
||||||
|
EOF
|
||||||
|
file temp.img
|
||||||
|
LOOP="/dev/mapper/$(kpartx -lv temp.img | head -n1 | awk '{print $1}')"
|
||||||
|
kpartx -a temp.img
|
||||||
|
/sbin/mkfs.fat -F 32 -s 1 "${LOOP}" > /dev/null
|
||||||
|
mkdir fs
|
||||||
|
mount "${LOOP}" fs
|
||||||
|
cp -v files/* fs
|
||||||
|
sync
|
||||||
|
sleep 5
|
||||||
|
umount fs
|
||||||
|
# Delay before calling kpartx otherwise it's sometimes possible to get orphaned loopback devices
|
||||||
|
sleep 5
|
||||||
|
kpartx -d temp.img
|
||||||
|
)
|
||||||
|
image_dir="images-${chip}"
|
||||||
|
mkdir -p "${image_dir}"
|
||||||
|
chown "${SUDO_UID}:${SUDO_GID}" "${image_dir}"
|
||||||
|
mv "${TMP_DIR}/temp.img" "${image_dir}/${img}"
|
||||||
|
file "${image_dir}/${img}"
|
||||||
|
cd "${image_dir}"
|
||||||
|
zip "${zip}" "${img}"
|
||||||
|
cd ..
|
||||||
|
rm "${image_dir}/${img}"
|
||||||
|
chown "${SUDO_UID}:${SUDO_GID}" "${image_dir}/${zip}"
|
||||||
|
echo "Wrote $(pwd)/${image_dir}/${zip}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ! command -v kpartx > /dev/null; then
|
||||||
|
die "kpartx not found: Try installing the kpartx package"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "${1}" ] || usage
|
||||||
|
gpio_num="$1"
|
||||||
|
|
||||||
|
case "${gpio_num}" in
|
||||||
|
2)
|
||||||
|
;;
|
||||||
|
4)
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
;;
|
||||||
|
6)
|
||||||
|
;;
|
||||||
|
7)
|
||||||
|
;;
|
||||||
|
8)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "GPIO ${gpio_num} is not supported"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
build_image 2711 "${gpio_num}"
|
||||||
@@ -260,8 +260,8 @@ class BootloaderImage(object):
|
|||||||
|
|
||||||
self._image_size = len(self._bytes)
|
self._image_size = len(self._bytes)
|
||||||
if self._image_size not in VALID_IMAGE_SIZES:
|
if self._image_size not in VALID_IMAGE_SIZES:
|
||||||
exit_error("%s: Expected size %d bytes actual size %d bytes" %
|
exit_error("%s: Expected sizes %s bytes, got actual size %d bytes" %
|
||||||
(filename, self._image_size, len(self._bytes)))
|
(filename, VALID_IMAGE_SIZES, self._image_size))
|
||||||
self.parse()
|
self.parse()
|
||||||
|
|
||||||
def parse(self):
|
def parse(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user