Merge branch 'master' into debian/buster

This commit is contained in:
Serge Schneider
2020-05-28 13:33:19 +01:00
6 changed files with 84 additions and 21 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +1,23 @@
# Raspberry Pi4 bootloader EEPROM release notes # Raspberry Pi4 bootloader EEPROM release notes
## 2020-05-27 Fix DPI issue - BETA
* Resolve: DPI failure after HDMI diagnostics screen in beta bootloader #133
* Resolve: VL805 readback failure in the bootloader #134
## 2020-05-26 USB MSD updates - BETA
* Resolve: USB boot fails if the GPT contains no basic data or EFI partitions #130
* Resolve: Fix default BOOT_ORDER in mass storage beta #129
* Resolve: Add support for booting from a "superfloppy" disk #120
* Resolve: USB MSD timeout message - incorrect units #131
* Resolve: Recognize efi partition (0xef) as a valid boot #126
* The HDMI diagnostics screen now displays the most significant bytes
of the SHA-256 of the config.txt file.
## 2020-05-26 rpi-eeprom-update
* Mark USE_FLASHROM as deprecated.
* Resolve: Unnecessary check for '*.elf' in BOOTFS #92
* Update help for FIRMWARE_RELEASE_STATUS.
## 2020-05-15 Add pieeprom-2020-05-15 beta with USB boot ## 2020-05-15 Add pieeprom-2020-05-15 beta with USB boot
* USB mass storage boot will NOT work without the updated firmware * USB mass storage boot will NOT work without the updated firmware
start.elf binaries. These will probably be released via rpi-update start.elf binaries. These will probably be released via rpi-update

View File

@@ -46,7 +46,16 @@ SPI_SPEED=16000
# Timestamp for first release which doesn't have a timestamp field # Timestamp for first release which doesn't have a timestamp field
BOOTLOADER_FIRST_VERSION=1557513636 BOOTLOADER_FIRST_VERSION=1557513636
EEPROM_SIZE=524288 EEPROM_SIZE=524288
BOARD_INFO=
BOARD_REVISION= BOARD_REVISION=
BOARD_TYPE=
# Newer board revisions embed the VLI firmware in the bootloader EEPROM and
# there is no way to separately update the VLI firmware. Consequently,
# standalone vl805 update files do not trigger automatic updates.
# Recovery.bin and the the SPI bootloader ignore vl805.bin files on boards
# without a dedicate VL805 EEPROM.
HAVE_VL805_EEPROM=0
# Simple bootloader which is able to load start.elf in the event of a power # Simple bootloader which is able to load start.elf in the event of a power
# cut. This runs SDRAM at low speed and may have reduced functionality but # cut. This runs SDRAM at low speed and may have reduced functionality but
@@ -187,6 +196,7 @@ applyUpdate() {
fi fi
if [ -f "${BOOTLOADER_UPDATE_IMAGE}" ]; then if [ -f "${BOOTLOADER_UPDATE_IMAGE}" ]; then
echo "WARNING: USE_FLASHROM is deprecated."
# Bootloader EEPROM chip-select is muxed with audio pin so disable audio # Bootloader EEPROM chip-select is muxed with audio pin so disable audio
# LDO first to avoid sending noise to analog audio. # LDO first to avoid sending noise to analog audio.
"${VCMAILBOX}" 0x00030056 4 4 0 > /dev/null || true "${VCMAILBOX}" 0x00030056 4 4 0 > /dev/null || true
@@ -251,14 +261,25 @@ getBootloaderUpdateVersion() {
} }
checkDependencies() { checkDependencies() {
BOARD_REVISION="$(sed -n '/^Revision/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo)" BOARD_INFO="$(sed -n '/^Revision/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo)"
if [ $(((0x$BOARD_REVISION >> 23) & 1)) -ne 0 ] && [ $(((0x$BOARD_REVISION >> 12) & 15)) -eq 3 ]; then if [ $(((0x$BOARD_INFO >> 23) & 1)) -ne 0 ] && [ $(((0x$BOARD_INFO >> 12) & 15)) -eq 3 ]; then
echo "BCM2711 detected" echo "BCM2711 detected"
else else
# Not a BCM2711, no EEPROMs to update. # Not a BCM2711, no EEPROMs to update.
exit ${EXIT_SUCCESS} exit ${EXIT_SUCCESS}
fi fi
BOARD_TYPE=$(((0x$BOARD_INFO >> 4) & 0xff))
BOARD_REVISION=$((0x$BOARD_INFO & 0xf))
if [ ${BOARD_TYPE} = 17 ] && [ ${BOARD_REVISION} \< 4 ]; then
echo "Dedicated VL805 EEPROM detected"
HAVE_VL805_EEPROM=1
else
echo "VL805 firmware in bootloader EEPROM"
HAVE_VL805_EEPROM=0
fi
if ! command -v vcgencmd > /dev/null; then if ! command -v vcgencmd > /dev/null; then
die "vcgencmd not found. On Debian, try installing the libraspberrypi-bin package." die "vcgencmd not found. On Debian, try installing the libraspberrypi-bin package."
fi fi
@@ -269,8 +290,8 @@ checkDependencies() {
# If a board revision specific firmware directory is defined then use that # If a board revision specific firmware directory is defined then use that
# in preference to the generic directory. # in preference to the generic directory.
if [ -d "${FIRMWARE_IMAGE_DIR}-${BOARD_REVISION}" ]; then if [ -d "${FIRMWARE_IMAGE_DIR}-${BOARD_INFO}" ]; then
FIRMWARE_IMAGE_DIR="${FIRMWARE_IMAGE_DIR}-${BOARD_REVISION}" FIRMWARE_IMAGE_DIR="${FIRMWARE_IMAGE_DIR}-${BOARD_INFO}"
fi fi
if vcgencmd bootloader_config | grep -qi "Command not registered"; then if vcgencmd bootloader_config | grep -qi "Command not registered"; then
@@ -358,6 +379,9 @@ and POWER_OFF_ON_HALT settings.
USE_FLASHROM USE_FLASHROM
USE_FLASHROM is deprecated and there is no support for this. The muxing
of the SPI pins causes too many issues for this to ever be reliable.
The flashrom update mechanism may be enabled by setting USE_FLASHROM=1. This The flashrom update mechanism may be enabled by setting USE_FLASHROM=1. This
also selects the vl805 tool instead of using recovery.bin to perform the also selects the vl805 tool instead of using recovery.bin to perform the
update. This may be desirable if an immediate update is required or if an update. This may be desirable if an immediate update is required or if an
@@ -370,15 +394,27 @@ those devices to stop working until after the system is reboot.
FIRMWARE_RELEASE_STATUS FIRMWARE_RELEASE_STATUS
Specifies the release status of the firmware to apply. The default is 'critical' Specifies the release status of the firmware to apply. The default is 'critical'.
which is the most stable production version. Alternatively, 'stable' or
'beta' may be selected for development releases.
A 'critical' update is the latest stable production version and is normally
only updated after it has been tested via the 'beta' and then a 'stable' release.
Before selecting a firmware release directory this script checks whether there Before selecting a firmware release directory this script checks whether there
is a board revision specific variant e.g. critical-c03111. If present then the is a board revision specific variant e.g. critical-c03111. If present then the
board-revision specific version is used in preference. board-revision specific version is used in preference.
Release status:
critical: The latest production release plus important security or hardware compatibility bug fixes.
stable: Contains new features have already undergone some beta testing.
These are candidats for new production releases.
beta: New features, bug fixes for development/test purposes. Use at your own
risk!
As far as rpi-eeprom-update is concerned FIRMWARE_RELEASE_STATUS is just
the subdirectory mapping under ${FIRMWARE_ROOT}. Therefore, custom release
directories are supported by creating the relevant directory and changing
the FIRMWARE_RELEASE_STATUS environment variable.
Examples: Examples:
To extract the configuration file from an EEPROM image: To extract the configuration file from an EEPROM image:
rpi-eeprom-config pieeprom.bin --out bootconf.txt rpi-eeprom-config pieeprom.bin --out bootconf.txt
@@ -440,7 +476,11 @@ findBootFS()
# If BOOTFS is not a directory or doesn't contain any .elf files then # If BOOTFS is not a directory or doesn't contain any .elf files then
# it's probably not the boot partition. # it's probably not the boot partition.
[ -d "${BOOTFS}" ] || die "BOOTFS: \"${BOOTFS}\" is not a directory" [ -d "${BOOTFS}" ] || die "BOOTFS: \"${BOOTFS}\" is not a directory"
[ "$(find "${BOOTFS}/" -name "*.elf" | wc -l)" -gt 0 ] || die "BOOTFS: \"${BOOTFS}\" contains no .elf files" if [ "$(find "${BOOTFS}/" -name "*.elf" | wc -l)" -gt 0 ]; then
echo "BOOTFS ${BOOTFS}"
else
echo "WARNING: BOOTFS: \"${BOOTFS}\" contains no .elf files. Please check boot directory"
fi
} }
getVL805CurrentVersion() getVL805CurrentVersion()
@@ -485,7 +525,6 @@ lookupVersionInfo()
getBootloaderUpdateVersion getBootloaderUpdateVersion
getVL805CurrentVersion getVL805CurrentVersion
getVL805UpdateVersion
if [ "${BOOTLOADER_UPDATE_VERSION}" -gt "${BOOTLOADER_CURRENT_VERSION}" ]; then if [ "${BOOTLOADER_UPDATE_VERSION}" -gt "${BOOTLOADER_CURRENT_VERSION}" ]; then
ACTION_UPDATE_BOOTLOADER=1 ACTION_UPDATE_BOOTLOADER=1
@@ -493,12 +532,18 @@ lookupVersionInfo()
BOOTLOADER_UPDATE_IMAGE="" BOOTLOADER_UPDATE_IMAGE=""
fi fi
if [ -n "${VL805_CURRENT_VERSION}" ] && [ -n "${VL805_UPDATE_VERSION}" ]; then if [ "${HAVE_VL805_EEPROM}" = 1 ]; then
if [ "${VL805_CURRENT_VERSION}" \< "${VL805_UPDATE_VERSION}" ]; then getVL805UpdateVersion
ACTION_UPDATE_VL805=1 if [ -n "${VL805_CURRENT_VERSION}" ] && [ -n "${VL805_UPDATE_VERSION}" ]; then
else if [ "${VL805_CURRENT_VERSION}" \< "${VL805_UPDATE_VERSION}" ]; then
VL805_UPDATE_IMAGE="" ACTION_UPDATE_VL805=1
else
VL805_UPDATE_IMAGE=""
fi
fi fi
else
VL805_UPDATE_VERSION="${VL805_CURRENT_VERSION}"
ACTION_UPDATE_VL805=0
fi fi
} }

View File

@@ -141,17 +141,17 @@ check_conf_size_too_large()
fi fi
} }
check_loopback "../firmware/critical/pieeprom-2019-07-15.bin" "bootconf-2019-07-15.txt" check_loopback "../firmware/old/beta/pieeprom-2019-07-15.bin" "bootconf-2019-07-15.txt"
cleanup cleanup
check_update "../firmware/critical/pieeprom-2019-07-15.bin" "pieeprom-2019-07-15-freeze.bin" "bootconf-2019-07-15-freeze.txt" check_update "../firmware/old/beta/pieeprom-2019-07-15.bin" "pieeprom-2019-07-15-freeze.bin" "bootconf-2019-07-15-freeze.txt"
cleanup cleanup
check_reduce_size "../firmware/critical/pieeprom-2019-07-15.bin" "bootconf-2019-07-15.txt" check_reduce_size "../firmware/old/beta/pieeprom-2019-07-15.bin" "bootconf-2019-07-15.txt"
cleanup cleanup
check_conf_size_large "../firmware/critical/pieeprom-2019-07-15.bin" check_conf_size_large "../firmware/old/beta/pieeprom-2019-07-15.bin"
cleanup cleanup
check_conf_size_too_large "../firmware/critical/pieeprom-2019-07-15.bin" check_conf_size_too_large "../firmware/old/beta/pieeprom-2019-07-15.bin"
cleanup cleanup