On Sat, Aug 27, 2011 at 06:50:37PM -0400, Pavel Ivanov wrote:
2011/8/27 Michel Dänzer michel@daenzer.net:
I observe very strange behavior dependent on value of CONFIG_DRM_RADEON parameter. When it's set to m everything works very good, no problem. When I set it to y I see kernel hang during boot. Or I should better say it "almost hangs" because during last boot attempt I accidentally waited a little bit longer and saw that after more than a minute waiting system continued to boot. Dmesg after "hang" shows these messages:
[ 8.542639] [drm] Loading CEDAR Microcode [ 69.161605] r600_cp: Failed to load firmware "radeon/CEDAR_pfp.bin" [ 69.161670] [drm:evergreen_startup] *ERROR* Failed to load firmware!
While during normal boot
[ 9.898870] [drm] Loading CEDAR Microcode [ 9.908425] radeon 0000:05:00.0: WB enabled
With CONFIG_DRM_RADEON=y, the microcode is needed before it can be loaded from userspace, so it needs to be built into the kernel as well.
How should I do that? I've tried to set all "m"s to "y" in .config and still saw this issue. Should I set some special parameter?
You need to add "radeon/CEDAR_pfp.bin" to CONFIG_EXTRA_FIRMWARE when you configure your kernel and enable CONFIG_FIRMWARE_IN_KERNEL.
The radeon/CEDAR_pfp.bin file (+ leading directory, mind you) should most probably be located in /lib/firmware or to whatever you have set CONFIG_EXTRA_FIRMWARE_DIR so that Kbuild can find it (if not, you'll get a warning at the end of the kernel build). This way, it works for both radeon being =m and =y.
HTH.