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.

Attachment: signature.asc
Description: This is a digitally signed message part


--- End Message ---

Reply via email to