Your message dated Sat, 10 Oct 2009 00:24:49 +0100
with message-id <1255130689.25061.11.ca...@localhost>
and subject line Re: Bug#550392: firmware-linux: Radeon kernel modesetting
requires pre-initramfs firmware loading
has caused the Debian Bug report #550392,
regarding firmware-linux: Radeon kernel modesetting requires pre-initramfs
firmware loading
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)
--
550392: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=550392
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: firmware-linux
Version: 0.18
Severity: wishlist
Tags: patch
(Yes I know, I'm way ahead of the curve. Since I had to tackle this problem, I
figured I might just as well publish my results)
Starting with kernel 2.6.32, the radeon in-kernel driver will stall the boot
process while waiting for the microcode to be supplied. The 2.6.31 kernel did
not do this (was it in-kernel before?). I'm using kernel modesetting, and have
not tried the non-kms case but I suspect it will stall as well (but maybe later
in the boot process). Entries in dmesg look like:
[ 0.316326] [drm] Loading R300 Microcode
[ 0.316332] platform radeon_cp.0: firmware: requesting radeon/R300_cp.bin
[ 60.316136] radeon_cp: Failed to load firmware "radeon/R300_cp.bin"
[ 60.316177] [drm:r100_cp_init] *ERROR* Failed to load firmware!
[...]
[ 60.318534] [drm] Forcing AGP to PCI mode
[ 60.318847] [drm] GPU reset succeed (RBBM_STATUS=0x00000140)
[...]
[ 60.319458] [drm] Loading R300 Microcode
[ 60.319463] platform radeon_cp.0: firmware: requesting radeon/R300_cp.bin
[ 120.316114] radeon_cp: Failed to load firmware "radeon/R300_cp.bin"
[ 120.316156] [drm:r100_cp_init] *ERROR* Failed to load firmware!
[ 120.316194] radeon 0000:01:00.0: failled initializing CP (-2).
[ 120.316230] radeon 0000:01:00.0: Disabling GPU acceleration
So the machine will appear to hang for two minutes. The regular firmware
loading sequences do not appear to work when KMS is enabled (radeon.modeset=1),
because the kernel will only try to load this firmware once: before running
/init !
This means that even when the firmware and the udev firmware agent are
available in the initramfs, the firmware load will fail because /sys isn't
mounted yet. And without /sys, there is no way to abort the firmware load
either.
I'm attaching the script I use to get around this issue. Basically, what I'm
doing is reproducing part of the initialization performed by /init before
spawning the Udev firmware agent. I'm not really sure what to do about /sys
though: the current implementation introduces a race condition where /sys might
get unmounted after /init has run. It might be better to just leave /sys
mounted and have /init mount it again, but I'm not sure about the implications
(my tests showed no negative consequences). This script must be installed as
/sbin/hotplug - no code has run yet to alter the path to the hotplug event
manager...
I'm filing this against firmware-linux because that's where the Radeon firmware
lives. If there is a better place where this should be fixed, please feel free
to redirect. And if you already have a better solution in place, feel free to
ignore me :)
-- System Information:
Debian Release: squeeze/sid
APT prefers testing
APT policy: (800, 'testing'), (550, 'stable'), (101, 'unstable'), (100,
'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.32-rc3 (PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL
set to en_US.UTF-8)
Shell: /bin/sh linked to /bin/dash
firmware-linux depends on no packages.
firmware-linux recommends no packages.
Versions of packages firmware-linux suggests:
ii initramfs-tools 0.93.4 tools for generating an initramfs
ii linux-image-2.6.30-2-686 [lin 2.6.30-8 Linux 2.6.30 image on PPro/Celeron
ii linux-image-2.6.31-rc9 [linux 20090909 Linux kernel binary image for vers
ii linux-image-2.6.32-rc3 [linux 20091008 Linux kernel binary image for vers
-- no debconf information
#!/bin/sh
#
## Simple firmware hotplug handler. When kernel modesetting is enabled for ATi
## Radeon graphics cards, the firmware load is triggered even before running
## /init (but still after initramfs is unpacked). This means that the hotplug
## script itself becomes responsible for mounting /sys, because otherwise the
## firmware can't be loaded.
## Ignoring the firmware request is not an option - the kernel will simply keep
## waiting for data until the timeout has passed, which is 60 seconds by
## default. Aborting the firmware load can be performed by echo'ing -1 to the
## firmware control file, but that also requires /sys to be mounted.
# no console - messages won't be visible
#echo "HOTPLUG Loading, please wait..."
# only respond to firmware requests
if [ -n "$FIRMWARE" ]; then
MTSYS=
[ -d /sys ] || mkdir /sys
[ -d /sys/kernel ] || MTSYS=1
[ -z "$MTSYS" ] || mount -t sysfs -o nodev,noexec,nosuid none /sys
# try the udev firmware loader first
if [ -x /lib/udev/firmware.agent ]; then
. /lib/udev/firmware.agent
else
# poor-man's loader script
if [ -r /lib/firmware/$FIRMWARE ]; then
echo 1 > /sys/$DEVPATH/loading
cat /lib/firmware/$FIRMWARE > /sys/$DEVPATH/data
echo 0 > /sys/$DEVPATH/loading
else
echo -1 > /sys/$DEVPATH/loading
fi
fi
# perform cleanup so as not to confuse /init
[ -z "$MTSYS" ] || umount /sys
fi
exit 0
--- End Message ---
--- Begin Message ---
On Fri, 2009-10-09 at 21:25 +0200, Arno Schuring wrote:
> Package: firmware-linux
> Version: 0.18
> Severity: wishlist
> Tags: patch
>
> (Yes I know, I'm way ahead of the curve. Since I had to tackle this
> problem, I figured I might just as well publish my results)
>
> Starting with kernel 2.6.32, the radeon in-kernel driver will stall
> the boot process while waiting for the microcode to be supplied. The
> 2.6.31 kernel did not do this (was it in-kernel before?).
We separated the firmware starting in 2.6.29-1, and this change was
accepted upstream for 2.6.32.
> I'm using kernel modesetting, and have not tried the non-kms case but
> I suspect it will stall as well (but maybe later in the boot process).
If KMS is not used, radeon would not normally be loaded until the X
server started. But it seems you are building this driver in.
[...]
> So the machine will appear to hang for two minutes. The regular
> firmware loading sequences do not appear to work when KMS is enabled
> (radeon.modeset=1), because the kernel will only try to load this
> firmware once: before running /init !
If you build the driver in, you may need to build the firmware in too
(CONFIG_FIRMWARE_IN_KERNEL=y).
Ben.
--
Ben Hutchings
Quantity is no substitute for quality, but it's the only one we've got.
signature.asc
Description: This is a digitally signed message part
--- End Message ---